Browse Source

code update + address issue #2546 (#2548)

stefano casazza 8 years ago
parent
commit
5096be4b38

+ 1 - 1
frameworks/C++/ulib/src/db.usp

@@ -31,7 +31,7 @@ static void usp_fork_db()
       pstmt_db->into(pworld_db->randomNumber);
 
 #  ifndef AS_cpoll_cppsp_DO
-      U_NEW(UValue, pvalue, UValue(OBJECT_VALUE));
+      U_NEW(UValue, pvalue, UValue);
 #  endif
       }
 }

+ 16 - 16
frameworks/C++/ulib/src/edb.usp

@@ -9,40 +9,40 @@ static char buffer[128];
 static UElasticSearchClient* es;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 #endif
 
 #define QLEN U_CONSTANT_SIZE("{\"query\":{\"match\":{\"_id\":\"")
 
 static void usp_fork_edb()
 {
-	U_TRACE(5, "::usp_fork_edb()")
+   U_TRACE(5, "::usp_fork_edb()")
 
-	U_NEW(UElasticSearchClient, es, UElasticSearchClient);
+   U_NEW(UElasticSearchClient, es, UElasticSearchClient);
 
-	if (es->connect() == false)
-		{
-		U_WARNING("usp_fork_edb(): connection disabled or failed");
+   if (es->connect() == false)
+      {
+      U_WARNING("usp_fork_edb(): connection disabled or failed");
 
-		return;
-		}
+      return;
+      }
 
-	u__memcpy(buffer,	"{\"query\":{\"match\":{\"_id\":\"", QLEN, __PRETTY_FUNCTION__);
+   U_MEMCPY(buffer,  "{\"query\":{\"match\":{\"_id\":\"", QLEN);
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(OBJECT_VALUE));
+   U_NEW(UValue, pvalue, UValue);
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_edb()
 {
-	U_TRACE(5, "::usp_end_edb()")
+   U_TRACE(5, "::usp_end_edb()")
 
-	delete es;
+   delete es;
 
 #ifndef AS_cpoll_cppsp_DO
-	if (pvalue) delete pvalue;
+   if (pvalue) delete pvalue;
 #endif
 }
 #endif
@@ -54,14 +54,14 @@ Content-Type: application/json
 uint32_t id;
 UString result;
 
-(void) es->sendPOST(U_CONSTANT_TO_PARAM("/tfb/world/_search"), buffer, u__snprintf(buffer+QLEN, 128, "%u\"}}}", id = u_get_num_random(10000-1))+QLEN);
+(void) es->sendPOST(U_CONSTANT_TO_PARAM("/tfb/world/_search"), buffer, u__snprintf(buffer+QLEN, 128, U_CONSTANT_TO_PARAM("%u\"}}}"), id = u_get_num_random(10000-1))+QLEN);
 
-(void) UValue::jfind(es->getContent(), U_CONSTANT_TO_PARAM("randomNumber"), result);
+(void) U_JFIND(es->getContent(), "randomNumber", result);
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%v}", id, result.rep);
 #else
-World world(id, u_strtoul(result.data(), result.end()));
+World world(id, result.strtoul());
 USP_JSON_stringify(*pvalue, World, world);
 pvalue->clear();
 #endif

+ 5 - 5
frameworks/C++/ulib/src/equery.usp

@@ -28,10 +28,10 @@ static void usp_fork_equery()
       return;
       }
 
-   u__memcpy(buffer, "{\"query\":{\"match\":{\"_id\":\"", QLEN, __PRETTY_FUNCTION__);
+   U_MEMCPY(buffer,  "{\"query\":{\"match\":{\"_id\":\"", QLEN);
 
 #ifndef AS_cpoll_cppsp_DO
-   U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+   U_NEW(UValue, pvalue, UValue);
    U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
 #endif
 }
@@ -67,18 +67,18 @@ USP_PUTS_CHAR('[');
 
 while (true)
    {
-   (void) es->sendPOST(U_CONSTANT_TO_PARAM("/tfb/world/_search"), buffer, QLEN+u__snprintf(buffer+QLEN, 128, "%u\"}}}", id = u_get_num_random(10000-1)));
+   (void) es->sendPOST(U_CONSTANT_TO_PARAM("/tfb/world/_search"), buffer, QLEN+u__snprintf(buffer+QLEN, 128, U_CONSTANT_TO_PARAM("%u\"}}}"), id = u_get_num_random(10000-1)));
 
    rnumber.clear();
 
-   (void) UValue::jfind(es->getContent(), U_CONSTANT_TO_PARAM("randomNumber"), rnumber);
+   (void) U_JFIND(es->getContent(), "randomNumber", rnumber);
 
 #ifdef AS_cpoll_cppsp_DO
    USP_PRINTF("{\"id\":%u,\"randomNumber\":%v}", id, rnumber.rep);
 #else
    World* pworld;
 
-   U_NEW(World, pworld, World(id, u_strtoul(rnumber.data(), rnumber.end())));
+   U_NEW(World, pworld, World(id, rnumber.strtoul()));
 
    pvworld_query->push_back(pworld);
 #endif

+ 5 - 5
frameworks/C++/ulib/src/eupdate.usp

@@ -32,16 +32,16 @@ static void usp_fork_eupdate()
       return;
       }
 
-   u__memcpy(buffer1, "/tfb/world/", ULEN, __PRETTY_FUNCTION__);
+   U_MEMCPY(buffer1, "/tfb/world/", ULEN);
 
    pbuffer1 = buffer1 + ULEN;
 
-   u__memcpy(buffer2, "{\"doc\":{\"_id\":\"", QLEN, __PRETTY_FUNCTION__);
+   U_MEMCPY(buffer2, "{\"doc\":{\"_id\":\"", QLEN);
 
    pbuffer2 = buffer2 + QLEN;
 
 #ifndef AS_cpoll_cppsp_DO
-   U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+   U_NEW(UValue, pvalue, UValue);
    U_NEW(UVector<World*>, pvworld_update, UVector<World*>(500));
 #endif
 }
@@ -76,8 +76,8 @@ USP_PUTS_CHAR('[');
 
 while (true)
    {
-   len1 = u__snprintf(pbuffer1, 100, "%u/_update", id = u_get_num_random(10000-1));
-   len2 = u__snprintf(pbuffer2, 100, "%u\"}}",   rnum = u_get_num_random(10000-1));
+   len1 = u__snprintf(pbuffer1, 100, U_CONSTANT_TO_PARAM("%u/_update"), id = u_get_num_random(10000-1));
+   len2 = u__snprintf(pbuffer2, 100, U_CONSTANT_TO_PARAM("%u\"}}"),   rnum = u_get_num_random(10000-1));
 
    (void) es->sendPOST(buffer1, len1+ULEN, buffer2, len2+QLEN);
 

+ 15 - 2
frameworks/C++/ulib/src/fortune.h

@@ -30,7 +30,7 @@ public:
 
    Fortune(uint32_t _id, const UString& _message) : id(_id), message(_message)
       {
-      U_TRACE_REGISTER_OBJECT(5, Fortune, "%u,%.*S", _id, U_STRING_TO_TRACE(_message))
+      U_TRACE_REGISTER_OBJECT(5, Fortune, "%u,%V", _id, _message.rep)
       }
 
    Fortune(const Fortune& f) : id(f.id), message((void*)U_STRING_TO_PARAM(f.message))
@@ -53,7 +53,20 @@ public:
       {
       U_TRACE(5, "Fortune::cmp_obj(%p,%p)", a, b)
 
+#  ifdef U_STDCPP_ENABLE
+      /**
+       * The comparison function must follow a strict-weak-ordering
+       *
+       * 1) For all x, it is not the case that x < x (irreflexivity)
+       * 2) For all x, y, if x < y then it is not the case that y < x (asymmetry)
+       * 3) For all x, y, and z, if x < y and y < z then x < z (transitivity)
+       * 4) For all x, y, and z, if x is incomparable with y, and y is incomparable with z, then x is incomparable with z (transitivity of incomparability)
+       */
+
+      return (((const Fortune*)a)->message.compare(((const Fortune*)b)->message) < 0);
+#  else
       return (*(const Fortune**)a)->message.compare((*(const Fortune**)b)->message);
+#  endif
       }
 
 #ifdef DEBUG
@@ -74,7 +87,7 @@ public:
 #endif
 
 private:
-   Fortune& operator=(const Fortune&) { return *this; }
+   U_DISALLOW_ASSIGN(Fortune)
 };
 
 // ORM TEMPLATE SPECIALIZATIONS

+ 1 - 2
frameworks/C++/ulib/src/json.usp

@@ -40,8 +40,7 @@ Content-Type: application/json
 -->
 <!--#code
 #ifndef AS_cpoll_cppsp_DO
-UValue json(*pkey, *pvalue);
-USP_JSON_PUTS(json);
+UValue::stringify(*UClientImage_Base::wbuffer, UValue(*pkey, *pvalue));
 #else
 json_object* hello = json_object_new_object();
 json_object_object_add(hello, "message", json_object_new_string("Hello, World!"));

+ 19 - 19
frameworks/C++/ulib/src/mdb.usp

@@ -8,43 +8,43 @@ TechEmpower Web Framework Benchmarks
 static UMongoDBClient* mc;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 #endif
 
 static void usp_fork_mdb()
 {
-	U_TRACE(5, "::usp_fork_mdb()")
+   U_TRACE(5, "::usp_fork_mdb()")
 
-	U_NEW(UMongoDBClient, mc, UMongoDBClient);
+   U_NEW(UMongoDBClient, mc, UMongoDBClient);
 
-	if (mc->connect() == false)
-		{
-		U_WARNING("usp_fork_mdb(): connection failed");
+   if (mc->connect(0,0) == false)
+      {
+      U_WARNING("usp_fork_mdb(): connection failed");
 
-		return;
-		}
+      return;
+      }
 
-	if (mc->selectCollection("hello_world", "World") == false)
-		{
-		U_WARNING("usp_fork_mdb(): selectCollection() failed");
+   if (mc->selectCollection("hello_world", "world") == false)
+      {
+      U_WARNING("usp_fork_mdb(): selectCollection() failed");
 
-		return;
-		}
+      return;
+      }
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(OBJECT_VALUE));
+   U_NEW(UValue, pvalue, UValue);
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_mdb()
 {
-	U_TRACE(5, "::usp_end_mdb()")
+   U_TRACE(5, "::usp_end_mdb()")
 
-	delete mc;
+   delete mc;
 
 #ifndef AS_cpoll_cppsp_DO
-	if (pvalue) delete pvalue;
+   if (pvalue) delete pvalue;
 #endif
 }
 #endif
@@ -58,12 +58,12 @@ UString result;
 
 (void) mc->findOne(id = u_get_num_random(10000-1));
 
-(void) UValue::jfind(mc->vitem[0], U_CONSTANT_TO_PARAM("randomNumber"), result);
+(void) U_JFIND(mc->vitem[0], "randomNumber", result);
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%v}", id, result.rep);
 #else
-World world(id, u_strtoul(result.data(), result.end()));
+World world(id, result.strtoul());
 USP_JSON_stringify(*pvalue, World, world);
 pvalue->clear();
 #endif

+ 39 - 39
frameworks/C++/ulib/src/mfortune.usp

@@ -12,42 +12,42 @@ static UVector<Fortune*>* pvfortune;
 
 static void usp_fork_mfortune()
 {
-	U_TRACE(5, "::usp_fork_mfortune()")
+   U_TRACE(5, "::usp_fork_mfortune()")
 
-	U_NEW(UMongoDBClient, mc, UMongoDBClient);
+   U_NEW(UMongoDBClient, mc, UMongoDBClient);
 
-	if (mc->connect() == false)
-		{
-		U_WARNING("usp_fork_mfortune(): connection failed");
+   if (mc->connect(0,0) == false)
+      {
+      U_WARNING("usp_fork_mfortune(): connection failed");
 
-		return;
-		}
+      return;
+      }
 
-	if (mc->selectCollection("hello_world", "Fortune") == false)
-		{
-		U_WARNING("usp_fork_mfortune(): selectCollection() failed");
+   if (mc->selectCollection("hello_world", "fortune") == false)
+      {
+      U_WARNING("usp_fork_mfortune(): selectCollection() failed");
 
-		return;
-		}
+      return;
+      }
 
-	U_NEW(UString, pencoded, UString(100U));
-	U_NEW(UVector<Fortune*>, pvfortune, UVector<Fortune*>);
-	U_NEW(Fortune, pfortune2add, Fortune(0, U_STRING_FROM_CONSTANT("Additional fortune added at request time.")));
+   U_NEW(UString, pencoded, UString(100U));
+   U_NEW(UVector<Fortune*>, pvfortune, UVector<Fortune*>);
+   U_NEW(Fortune, pfortune2add, Fortune(0, U_STRING_FROM_CONSTANT("Additional fortune added at request time.")));
 }
 
 #ifdef DEBUG
 static void usp_end_mfortune()
 {
-	U_TRACE(5, "::usp_end_mfortune()")
+   U_TRACE(5, "::usp_end_mfortune()")
 
-	delete mc;
+   delete mc;
 
-	if (pencoded)
-		{
-		delete pencoded;
-		delete pvfortune;
-		delete pfortune2add;
-		}
+   if (pencoded)
+      {
+      delete pencoded;
+      delete pvfortune;
+      delete pfortune2add;
+      }
 }
 #endif
 -->
@@ -63,31 +63,31 @@ pvfortune->push_back(item);
 (void) mc->findAll();
 
 for (i = 0, n = mc->vitem.size(); i < n; ++i)
-	{
-	result.clear();
+   {
+   result.clear();
 
-	(void) UValue::jfind(mc->vitem[i], U_CONSTANT_TO_PARAM("message"), result);
+   (void) U_JFIND(mc->vitem[i], "message", result);
 
    U_NEW(Fortune, item, Fortune(i+1, result));
 
    pvfortune->push_back(item);
-	}
+   }
 
 pvfortune->sort(Fortune::cmp_obj);
 
 for (i = 0, ++n; i < n; ++i)
-	{
-	Fortune* elem = (*pvfortune)[i];
-
-	UXMLEscape::encode(elem->message, *pencoded);
-
-	USP_PRINTF_ADD(
-		"<tr>"
-		"<td>%u</td>"
-		"<td>%v</td>"
-		"</tr>",
-		elem->id, pencoded->rep);
-	}
+   {
+   Fortune* elem = (*pvfortune)[i];
+
+   UXMLEscape::encode(elem->message, *pencoded);
+
+   USP_PRINTF_ADD(
+      "<tr>"
+      "<td>%u</td>"
+      "<td>%v</td>"
+      "</tr>",
+      elem->id, pencoded->rep);
+   }
 
 pvfortune->clear();
 --></table></body></html>

+ 32 - 32
frameworks/C++/ulib/src/mquery.usp

@@ -8,49 +8,49 @@ TechEmpower Web Framework Benchmarks
 static UMongoDBClient* mc;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 static UVector<World*>* pvworld_query;
 #endif
 
 static void usp_fork_mquery()
 {
-	U_TRACE(5, "::usp_fork_mquery()")
+   U_TRACE(5, "::usp_fork_mquery()")
 
    U_NEW(UMongoDBClient, mc, UMongoDBClient);
 
-	if (mc->connect() == false)
-		{
-		U_WARNING("usp_fork_mquery(): connection disabled or failed");
+   if (mc->connect(0,0) == false)
+      {
+      U_WARNING("usp_fork_mquery(): connection disabled or failed");
 
-		return;
-		}
+      return;
+      }
 
-	if (mc->selectCollection("hello_world", "World") == false)
-		{
-		U_WARNING("usp_fork_mquery(): selectCollection() failed");
+   if (mc->selectCollection("hello_world", "world") == false)
+      {
+      U_WARNING("usp_fork_mquery(): selectCollection() failed");
 
-		return;
-		}
+      return;
+      }
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
-	U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
+   U_NEW(UValue, pvalue, UValue);
+   U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_mquery()
 {
-	U_TRACE(5, "::usp_end_mquery()")
+   U_TRACE(5, "::usp_end_mquery()")
 
-	delete mc;
+   delete mc;
 
 #ifndef AS_cpoll_cppsp_DO
-	if (pvalue)
-		{
-		delete pvalue;
-		delete pvworld_query;
-		}
+   if (pvalue)
+      {
+      delete pvalue;
+      delete pvworld_query;
+      }
 #endif
 }
 #endif
@@ -68,29 +68,29 @@ USP_PUTS_CHAR('[');
 #endif
 
 while (true)
-	{
-	(void) mc->findOne(id = u_get_num_random(10000-1));
+   {
+   (void) mc->findOne(id = u_get_num_random(10000-1));
 
-	rnumber.clear();
+   rnumber.clear();
 
-	(void) UValue::jfind(mc->vitem[0], U_CONSTANT_TO_PARAM("randomNumber"), rnumber);
+   (void) U_JFIND(mc->vitem[0], "randomNumber", rnumber);
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PRINTF("{\"id\":%u,\"randomNumber\":%v}", id, rnumber.rep);
+   USP_PRINTF("{\"id\":%u,\"randomNumber\":%v}", id, rnumber.rep);
 #else
-	World* pworld;
+   World* pworld;
 
-	U_NEW(World, pworld, World(id, u_strtoul(rnumber.data(), rnumber.end())));
+   U_NEW(World, pworld, World(id, rnumber.strtoul()));
 
-	pvworld_query->push_back(pworld);
+   pvworld_query->push_back(pworld);
 #endif
 
-	if (++i == num_queries) break;
+   if (++i == num_queries) break;
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PUTS_CHAR(',');
+   USP_PUTS_CHAR(',');
 #endif
-	}
+   }
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PUTS_CHAR(']');

+ 17 - 13
frameworks/C++/ulib/src/mupdate.usp

@@ -18,14 +18,14 @@ static void usp_fork_mupdate()
 
    U_NEW(UMongoDBClient, mc, UMongoDBClient);
 
-   if (mc->connect() == false)
+   if (mc->connect(0,0) == false)
       {
       U_WARNING("usp_fork_mupdate(): connection disabled or failed");
 
       return;
       }
 
-   if (mc->selectCollection("hello_world", "World") == false)
+   if (mc->selectCollection("hello_world", "world") == false)
       {
       U_WARNING("usp_fork_mupdate(): selectCollection() failed");
 
@@ -33,7 +33,7 @@ static void usp_fork_mupdate()
       }
 
 #ifndef AS_cpoll_cppsp_DO
-   U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+   U_NEW(UValue, pvalue, UValue);
    U_NEW(UVector<World*>, pvworld_update, UVector<World*>(500));
 #endif
 }
@@ -60,7 +60,7 @@ Content-Type: application/json
 -->
 <!--#code
 uint32_t id, rnum;
-mongoc_bulk_operation_t* bulk = mc->createBulk(false);
+//mongoc_bulk_operation_t* bulk = mc->createBulk(false);
 int i = 0, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
 
 #ifdef AS_cpoll_cppsp_DO
@@ -69,17 +69,21 @@ USP_PUTS_CHAR('[');
 
 while (true)
    {
-   mc->updateOneBulk(bulk, id = u_get_num_random(10000-1), "randomNumber", rnum = u_get_num_random(10000-1));
+// mc->updateOneBulk(bulk, id = u_get_num_random(10000-1), "randomNumber", rnum = u_get_num_random(10000-1));
 
-#ifdef AS_cpoll_cppsp_DO
-   USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", id, rnum);
-#else
-   World* pworld;
+   if (mc->findOne(id = u_get_num_random(10000-1)) &&
+       mc->update( id, "randomNumber", rnum = u_get_num_random(10000-1)))
+      {
+#  ifdef AS_cpoll_cppsp_DO
+      USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", id, rnum);
+#  else
+      World* pworld;
 
-   U_NEW(World, pworld, World(id, rnum));
+      U_NEW(World, pworld, World(id, rnum));
 
-   pvworld_update->push_back(pworld);
-#endif
+      pvworld_update->push_back(pworld);
+#  endif
+      }
 
    if (++i == num_queries) break;
 
@@ -88,7 +92,7 @@ while (true)
 #endif
    }
 
-(void) mc->executeBulk(bulk);
+// (void) mc->executeBulk(bulk);
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PUTS_CHAR(']');

+ 1 - 1
frameworks/C++/ulib/src/query.usp

@@ -34,7 +34,7 @@ static void usp_fork_query()
       pstmt_query->into(pworld_query->randomNumber);
 
 #  ifndef AS_cpoll_cppsp_DO
-      U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+      U_NEW(UValue, pvalue, UValue);
       U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
 #  endif
       }

+ 16 - 16
frameworks/C++/ulib/src/rdb.usp

@@ -6,41 +6,42 @@ TechEmpower Web Framework Benchmarks
 #include "world.h"
 
 static char buffer[128];
+static char* ptr = buffer+6;
 static UREDISClient_Base* rc;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 #endif
 
 static void usp_fork_rdb()
 {
-	U_TRACE(5, "::usp_fork_rdb()")
+   U_TRACE(5, "::usp_fork_rdb()")
 
-	U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
+   U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
 
-	if (rc->connect() == false)
-		{
-		U_WARNING("usp_fork_rdb(): %V", rc->UClient_Base::getResponse().rep);
+   if (rc->connect() == false)
+      {
+      U_WARNING("usp_fork_rdb(): %V", rc->UClient_Base::getResponse().rep);
 
-		return;
-		}
+      return;
+      }
 
-	u__memcpy(buffer, "world:", U_CONSTANT_SIZE("world:"), __PRETTY_FUNCTION__);
+   U_MEMCPY(buffer, "world:", U_CONSTANT_SIZE("world:"));
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(OBJECT_VALUE));
+   U_NEW(UValue, pvalue, UValue);
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_rdb()
 {
-	U_TRACE(5, "::usp_end_rdb()")
+   U_TRACE(5, "::usp_end_rdb()")
 
-	delete rc;
+   delete rc;
 
 #ifndef AS_cpoll_cppsp_DO
-	if (pvalue) delete pvalue;
+   if (pvalue) delete pvalue;
 #endif
 }
 #endif
@@ -51,13 +52,12 @@ Content-Type: application/json
 <!--#code
 uint32_t id;
 
-(void) rc->get(buffer, 6+u_num2str32(buffer+6, id = u_get_num_random(10000-1)));
+(void) rc->get(buffer, 6+u_num2str32(id = u_get_num_random(10000-1), ptr)-ptr);
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%v}", id, rc->vitem[0].rep);
 #else
-UStringRep* rep = rc->vitem[0].rep;
-World world(id, u_strtoul(rep->data(), rep->end()));
+World world(id, rc->vitem[0].strtoul());
 USP_JSON_stringify(*pvalue, World, world);
 pvalue->clear();
 #endif

+ 33 - 33
frameworks/C++/ulib/src/rquery.usp

@@ -5,49 +5,49 @@ TechEmpower Web Framework Benchmarks
 <!--#declaration
 #include "world.h"
 
-static char buffer[128];
+static char buffer[8192];
 static UREDISClient_Base* rc;
-static UVector<World*>*	pvworld_query;
+static UVector<World*>* pvworld_query;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 #endif
 
 static void usp_fork_rquery()
 {
-	U_TRACE(5, "::usp_fork_rquery()")
+   U_TRACE(5, "::usp_fork_rquery()")
 
-	U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
+   U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
 
-	if (rc->connect() == false)
-		{
-		U_WARNING("usp_fork_rquery(): %V", rc->UClient_Base::getResponse().rep);
+   if (rc->connect() == false)
+      {
+      U_WARNING("usp_fork_rquery(): %V", rc->UClient_Base::getResponse().rep);
 
-		return;
-		}
+      return;
+      }
 
-	U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
+   U_NEW(UVector<World*>, pvworld_query, UVector<World*>(500));
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+   U_NEW(UValue, pvalue, UValue);
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_rquery()
 {
-	U_TRACE(5, "::usp_end_rquery()")
+   U_TRACE(5, "::usp_end_rquery()")
 
-	delete rc;
+   delete rc;
 
-	if (pvworld_query)
-		{
-		delete pvworld_query;
+   if (pvworld_query)
+      {
+      delete pvworld_query;
 
-#	ifndef AS_cpoll_cppsp_DO
-		delete pvalue;
-#	endif
-		}
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvalue;
+#  endif
+      }
 }
 #endif
 -->
@@ -65,15 +65,15 @@ USP_PUTS_CHAR('[');
 #endif
 
 for (i = 0; i < num_queries; ++i)
-	{
-	U_NEW(World, pworld, World);
+   {
+   U_NEW(World, pworld, World);
 
-	pvworld_query->push_back(pworld);
+   pvworld_query->push_back(pworld);
 
-	u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
+   u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
 
-	pbuffer += 7+u_num2str32(pbuffer+7, pworld->id = u_get_num_random(10000-1));
-	}
+   pbuffer = u_num2str32(pworld->id = u_get_num_random(10000-1), pbuffer+7);
+   }
 
 (void) rc->mget(buffer, pbuffer-buffer);
 
@@ -81,22 +81,22 @@ i = 0;
 
 while (true)
    {
-	pworld = pvworld_query->at(i);
+   pworld = pvworld_query->at(i);
 
-	rep = rc->vitem[i].rep;
+   rep = rc->vitem[i].rep;
 
-	pworld->randomNumber = u_strtoul(rep->data(), rep->end());
+   pworld->randomNumber = rep->strtoul();
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PRINTF("{\"id\":%u,\"randomNumber\":%v}", pworld->id, rep);
+   USP_PRINTF("{\"id\":%u,\"randomNumber\":%v}", pworld->id, rep);
 #endif
 
    if (++i == num_queries) break;
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PUTS_CHAR(',');
+   USP_PUTS_CHAR(',');
 #endif
-	}
+   }
 
 #ifdef AS_cpoll_cppsp_DO
 USP_PUTS_CHAR(']');

+ 34 - 34
frameworks/C++/ulib/src/rupdate.usp

@@ -5,49 +5,49 @@ TechEmpower Web Framework Benchmarks
 <!--#declaration
 #include "world.h"
 
-static char buffer[128];
+static char buffer[8192];
 static UREDISClient_Base* rc;
 static UVector<World*>* pvworld;
 
 #ifndef AS_cpoll_cppsp_DO
-static UValue*	pvalue;
+static UValue* pvalue;
 #endif
 
 static void usp_fork_rupdate()
 {
-	U_TRACE(5, "::usp_fork_rupdate()")
+   U_TRACE(5, "::usp_fork_rupdate()")
 
-	U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
+   U_NEW(UREDISClient<UTCPSocket>, rc, UREDISClient<UTCPSocket>);
 
-	if (rc->connect() == false)
-		{
-		U_WARNING("usp_fork_rupdate(): %V", rc->UClient_Base::getResponse().rep);
+   if (rc->connect() == false)
+      {
+      U_WARNING("usp_fork_rupdate(): %V", rc->UClient_Base::getResponse().rep);
 
-		return;
-		}
+      return;
+      }
 
-	U_NEW(UVector<World*>, pvworld, UVector<World*>(500));
+   U_NEW(UVector<World*>, pvworld, UVector<World*>(500));
 
 #ifndef AS_cpoll_cppsp_DO
-	U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+   U_NEW(UValue, pvalue, UValue);
 #endif
 }
 
 #ifdef DEBUG
 static void usp_end_rupdate()
 {
-	U_TRACE(5, "::usp_end_rupdate()")
+   U_TRACE(5, "::usp_end_rupdate()")
 
-	delete rc;
+   delete rc;
 
-	if (pvworld)
-		{
-		delete pvworld;
+   if (pvworld)
+      {
+      delete pvworld;
 
-#	ifndef AS_cpoll_cppsp_DO
-		delete pvalue;
-#	endif
-		}
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvalue;
+#  endif
+      }
 }
 #endif
 -->
@@ -64,15 +64,15 @@ USP_PUTS_CHAR('[');
 #endif
 
 for (i = 0; i < num_queries; ++i)
-	{
-	U_NEW(World, pworld, World);
+   {
+   U_NEW(World, pworld, World);
 
-	pvworld->push_back(pworld);
+   pvworld->push_back(pworld);
 
-	u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
+   u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
 
-	pbuffer += 7+u_num2str32(pbuffer+7, pworld->id = u_get_num_random(10000-1));
-	}
+   pbuffer = u_num2str32(pworld->id = u_get_num_random(10000-1), pbuffer+7);
+   }
 
 (void) rc->mget(buffer, pbuffer-buffer);
 
@@ -81,24 +81,24 @@ pbuffer = buffer;
 
 while (true)
    {
-	pworld = pvworld->at(i);
+   pworld = pvworld->at(i);
 
-	u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
+   u_put_unalignedp64(pbuffer, U_MULTICHAR_CONSTANT64(' ','w','o','r','l','d',':','\0'));
 
-	pbuffer += 7+u_num2str32(pbuffer+7, pworld->id);
-  *pbuffer  = ' ';
-	pbuffer += 1+u_num2str32(pbuffer+1, pworld->randomNumber = u_get_num_random(10000-1));
+   pbuffer = u_num2str32(pworld->id, pbuffer+7);
+  *pbuffer = ' ';
+   pbuffer = u_num2str32(pworld->randomNumber = u_get_num_random(10000-1), pbuffer+1);
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld->id, pworld->randomNumber);
+   USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld->id, pworld->randomNumber);
 #endif
 
    if (++i == num_queries) break;
 
 #ifdef AS_cpoll_cppsp_DO
-	USP_PUTS_CHAR(',');
+   USP_PUTS_CHAR(',');
 #endif
-	}
+   }
 
 (void) rc->mset(buffer, pbuffer-buffer);
 

+ 3 - 1
frameworks/C++/ulib/src/update.usp

@@ -32,6 +32,8 @@ static void usp_fork_update()
          U_WARNING("usp_fork_update(): we cound't connect to db");
          }
 
+      if (UOrmDriver::isPGSQL()) *psql_update << "SET synchronous_commit TO OFF";
+
       U_NEW(World, pworld_update, World);
 
       pstmt1->use( pworld_update->id);
@@ -39,7 +41,7 @@ static void usp_fork_update()
       pstmt2->use( pworld_update->randomNumber, pworld_update->id);
 
 #  ifndef AS_cpoll_cppsp_DO
-      U_NEW(UValue, pvalue, UValue(ARRAY_VALUE));
+      U_NEW(UValue, pvalue, UValue);
       U_NEW(UVector<World*>, pvworld_update, UVector<World*>(500));
 #  endif
       }