Browse Source

ULib: some optimization (#3928)

* ULib: enable db pipeline plus some optimization

* ULib: some optimization

* ULib: some optimization

* ULib: some optimization
stefano casazza 7 years ago
parent
commit
04ad463fe6

+ 7 - 6
frameworks/C++/ulib/src/db.usp

@@ -9,30 +9,31 @@ static void usp_fork_db() { World::handlerForkSql(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 World::initOneResult();
 
-World::pworld_query->id = World::rnumber[0];
-
 #ifdef U_STATIC_ORM_DRIVER_PGSQL
 if (World::pdrv)
    {
-   World::pstmt->setBindParam();
-
-   PGresult* res = World::pdrv->execPrepared(World::pstmt);
+   PGresult* res = World::execPrepared();
 
    U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
    U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
 
    char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
 
-   World::handlerOneResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
+   World::handlerOneResult(World::rnumber[0], ntohl(*(uint32_t*)randomNumber));
 
    U_SYSCALL_VOID(PQclear, "%p", res);
    }
 else
 #endif
 {
+World::pworld_query->id = World::rnumber[0];
+
 (void) World::pstmt_query->execute();
 
 World::handlerOneResult(World::pworld_query->id, World::pworld_query->randomNumber);

+ 3 - 0
frameworks/C++/ulib/src/edb.usp

@@ -9,6 +9,9 @@ static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
 -->

+ 3 - 0
frameworks/C++/ulib/src/equery.usp

@@ -9,6 +9,9 @@ static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
 -->

+ 3 - 0
frameworks/C++/ulib/src/eupdate.usp

@@ -23,6 +23,9 @@ static void usp_fork_eupdate()
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
 -->

+ 34 - 64
frameworks/C++/ulib/src/fortune.h

@@ -16,13 +16,6 @@
 
 class Fortune {
 public:
-   // Check for memory error
-   U_MEMORY_TEST
-
-   // Allocator e Deallocator
-   U_MEMORY_ALLOCATOR
-   U_MEMORY_DEALLOCATOR
-
    uint32_t id;
    UString message;
 
@@ -76,7 +69,7 @@ public:
 
    void toJSON(UString& json)
       {
-      U_TRACE(0, "Fortune::toJSON(%V)", json.rep)
+      U_TRACE(5, "Fortune::toJSON(%V)", json.rep)
 
       json.toJSON(U_JSON_METHOD_HANDLER(id,      unsigned int));
       json.toJSON(U_JSON_METHOD_HANDLER(message, UString));
@@ -84,7 +77,7 @@ public:
 
    void fromJSON(UValue& json)
       {
-      U_TRACE(0, "Fortune::fromJSON(%p)", &json)
+      U_TRACE(5, "Fortune::fromJSON(%p)", &json)
 
       json.fromJSON(U_JSON_METHOD_HANDLER(id,      unsigned int));
       json.fromJSON(U_JSON_METHOD_HANDLER(message, UString));
@@ -94,7 +87,7 @@ public:
 
    void bindParam(UOrmStatement* stmt)
       {
-      U_TRACE(0, "Fortune::bindParam(%p)", stmt)
+      U_TRACE(5, "Fortune::bindParam(%p)", stmt)
 
       stmt->bindParam(U_ORM_TYPE_HANDLER(id,      unsigned int));
       stmt->bindParam(U_ORM_TYPE_HANDLER(message, UString));
@@ -102,7 +95,7 @@ public:
 
    void bindResult(UOrmStatement* stmt)
       {
-      U_TRACE(0, "Fortune::bindResult(%p)", stmt)
+      U_TRACE(5, "Fortune::bindResult(%p)", stmt)
 
       stmt->bindResult(U_ORM_TYPE_HANDLER(id,      unsigned int));
       stmt->bindResult(U_ORM_TYPE_HANDLER(message, UString));
@@ -117,7 +110,7 @@ public:
 
    static void replace(uint32_t i, uint32_t _id, const char* msg, uint32_t len)
       {
-      U_TRACE(0, "Fortune::replace(%u,%u,%.*S,%u)", i, _id, len, msg, len)
+      U_TRACE(5, "Fortune::replace(%u,%u,%.*S,%u)", i, _id, len, msg, len)
 
       U_INTERNAL_ASSERT_POINTER(pvfortune)
 
@@ -135,28 +128,37 @@ public:
 
    static void doQuery(vPF handlerQuery)
       {
-      U_TRACE(0, "Fortune::doQuery(%p)", handlerQuery)
+      U_TRACE(5, "Fortune::doQuery(%p)", handlerQuery)
 
       U_INTERNAL_ASSERT_POINTER(pvfortune)
 
       char* pwbuffer = UClientImage_Base::wbuffer->data();
 
-      u_put_unalignedp64(pwbuffer,     U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
-      u_put_unalignedp64(pwbuffer+8,   U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
-      u_put_unalignedp64(pwbuffer+16,  U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
-      u_put_unalignedp64(pwbuffer+24,  U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
-      u_put_unalignedp64(pwbuffer+32,  U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
-      u_put_unalignedp64(pwbuffer+40,  U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
-      u_put_unalignedp64(pwbuffer+48,  U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
-      u_put_unalignedp64(pwbuffer+56,  U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
-      u_put_unalignedp64(pwbuffer+64,  U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
-      u_put_unalignedp64(pwbuffer+72,  U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
-      u_put_unalignedp64(pwbuffer+80,  U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
-      u_put_unalignedp64(pwbuffer+88,  U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
-      u_put_unalignedp64(pwbuffer+96,  U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
-      u_put_unalignedp16(pwbuffer+104, U_MULTICHAR_CONSTANT16('r','>'));
-
-      pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
+      u_put_unalignedp64(pwbuffer,     U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
+      u_put_unalignedp64(pwbuffer+8,   U_MULTICHAR_CONSTANT64('L','e','n','g','t','h',':',' '));
+      u_put_unalignedp64(pwbuffer+16,  U_MULTICHAR_CONSTANT64('1','2','2','7','\r','\n','C','o'));
+      u_put_unalignedp64(pwbuffer+24,  U_MULTICHAR_CONSTANT64('n','t','e','n','t','-','T','y'));
+      u_put_unalignedp64(pwbuffer+32,  U_MULTICHAR_CONSTANT64('p','e',':',' ','t','e','x','t'));
+      u_put_unalignedp64(pwbuffer+40,  U_MULTICHAR_CONSTANT64('/','h','t','m','l',';',' ','c'));
+      u_put_unalignedp64(pwbuffer+48,  U_MULTICHAR_CONSTANT64('h','a','r','s','e','t','=','U'));
+      u_put_unalignedp64(pwbuffer+56,  U_MULTICHAR_CONSTANT64('T','F','-','8','\r','\n','\r','\n'));
+      u_put_unalignedp64(pwbuffer+64,  U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
+      u_put_unalignedp64(pwbuffer+72,  U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
+      u_put_unalignedp64(pwbuffer+80,  U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
+      u_put_unalignedp64(pwbuffer+88,  U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
+      u_put_unalignedp64(pwbuffer+96,  U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
+      u_put_unalignedp64(pwbuffer+104, U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
+      u_put_unalignedp64(pwbuffer+112, U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
+      u_put_unalignedp64(pwbuffer+120, U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
+      u_put_unalignedp64(pwbuffer+128, U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
+      u_put_unalignedp64(pwbuffer+136, U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
+      u_put_unalignedp64(pwbuffer+144, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
+      u_put_unalignedp64(pwbuffer+152, U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
+      u_put_unalignedp64(pwbuffer+160, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
+      u_put_unalignedp16(pwbuffer+168, U_MULTICHAR_CONSTANT16('r','>'));
+
+      pwbuffer += U_CONSTANT_SIZE("Content-Length: 1227\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n"
+                                  "<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
 
       handlerQuery();
 
@@ -192,14 +194,12 @@ public:
       u_put_unalignedp64(pwbuffer+8,  U_MULTICHAR_CONSTANT64('<','/','b','o','d','y','>','<'));
       u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('/','h','t','m','l','>','\0','\0'));
 
-      UClientImage_Base::wbuffer->size_adjust(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
-
-      UHTTP::mime_index = U_html;
+      UClientImage_Base::wbuffer->size_adjust_constant(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
       }
 
    static void handlerFork()
       {
-      U_TRACE_NO_PARAM(0, "Fortune::handlerFork()")
+      U_TRACE_NO_PARAM(5, "Fortune::handlerFork()")
 
       U_NEW_STRING(pmessage, UString(101U));
 
@@ -217,7 +217,7 @@ public:
 
    static void handlerForkSql()
       {
-      U_TRACE_NO_PARAM(0, "Fortune::handlerForkSql()")
+      U_TRACE_NO_PARAM(5, "Fortune::handlerForkSql()")
 
       if (psql_fortune == U_NULLPTR)
          {
@@ -242,36 +242,6 @@ public:
          }
       }
 
-#ifdef DEBUG
-   static void handlerEnd()
-      {
-      U_TRACE_NO_PARAM(0, "Fortune::handlerEnd()")
-
-      U_INTERNAL_ASSERT_POINTER(pmessage)
-      U_INTERNAL_ASSERT_POINTER(pvfortune)
-
-      U_DELETE(pmessage)
-      U_DELETE(pvfortune)
-      }
-
-   static void handlerEndSql()
-      {
-      U_TRACE_NO_PARAM(0, "Fortune::handlerEndSql()")
-
-      if (pstmt_fortune)
-         {
-         handlerEnd();
-
-         U_DELETE(psql_fortune)
-         U_DELETE(pstmt_fortune)
-
-         pstmt_fortune = U_NULLPTR;
-         }
-      }
-
-   const char* dump(bool breset) const;
-#endif
-
 private:
    U_DISALLOW_ASSIGN(Fortune)
 };

+ 5 - 0
frameworks/C++/ulib/src/fortune.usp

@@ -70,6 +70,11 @@ static void usp_fork_fortune()
       }
 }
 -->
+<!--#header
+-->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 Fortune::doQuery(handle_query);
 -->

+ 4 - 36
frameworks/C++/ulib/src/fortuneNoSql.h

@@ -21,7 +21,7 @@ public:
 
    static void handlerQueryMongoDB()
       {
-      U_TRACE(0, "FortuneNoSql::handlerQueryMongoDB()")
+      U_TRACE(5, "FortuneNoSql::handlerQueryMongoDB()")
 
       U_INTERNAL_ASSERT_POINTER(Fortune::pmessage)
 
@@ -41,7 +41,7 @@ public:
 
    static void handlerForkMongoDB()
       {
-      U_TRACE_NO_PARAM(0, "FortuneNoSql::handlerForkMongoDB()")
+      U_TRACE_NO_PARAM(5, "FortuneNoSql::handlerForkMongoDB()")
 
 #  ifdef USE_MONGODB
       if (mc == U_NULLPTR)
@@ -79,7 +79,7 @@ public:
 
    static void handlerQueryREDIS()
       {
-      U_TRACE(0, "FortuneNoSql::handlerQueryREDIS()")
+      U_TRACE(5, "FortuneNoSql::handlerQueryREDIS()")
 
       (void) rc->lrange(U_CONSTANT_TO_PARAM("fortunes 0 -1"));
 
@@ -88,7 +88,7 @@ public:
 
    static void handlerForkREDIS()
       {
-      U_TRACE_NO_PARAM(0, "Fortune::handlerForkREDIS()")
+      U_TRACE_NO_PARAM(5, "Fortune::handlerForkREDIS()")
 
       if (rc == U_NULLPTR)
          {
@@ -109,38 +109,6 @@ public:
          }
       }
 
-#ifdef DEBUG
-   static void handlerEndMongoDB()
-      {
-      U_TRACE_NO_PARAM(0, "FortuneNoSql::handlerEndMongoDB()")
-
-#  ifdef USE_MONGODB
-      if (mc)
-         {
-         Fortune::handlerEnd();
-
-         U_DELETE(mc)
-
-         mc = U_NULLPTR;
-         }
-#  endif
-      }
-
-   static void handlerEndREDIS()
-      {
-      U_TRACE_NO_PARAM(0, "FortuneNoSql::handlerEndREDIS()")
-
-      if (rc)
-         {
-         Fortune::handlerEnd();
-
-         U_DELETE(rc)
-
-         rc = U_NULLPTR;
-         }
-      }
-#endif
-
 private:
    U_DISALLOW_ASSIGN(FortuneNoSql)
 };

+ 9 - 8
frameworks/C++/ulib/src/json.usp

@@ -20,16 +20,17 @@ static void usp_init_json()
 char* pwbuffer = UClientImage_Base::wbuffer->data();
 
 u_put_unalignedp64(pwbuffer,    U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
-u_put_unalignedp64(pwbuffer+8,  U_MULTICHAR_CONSTANT64('T','y','p','e',':',' ','a','p'));
-u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('p','l','i','c','a','t','i','o'));
-u_put_unalignedp64(pwbuffer+24, U_MULTICHAR_CONSTANT64('n','/','j','s','o','n','\r','\n'));
-u_put_unalignedp16(pwbuffer+32, U_MULTICHAR_CONSTANT16('\r','\n'));
+u_put_unalignedp64(pwbuffer+8,  U_MULTICHAR_CONSTANT64('L','e','n','g','t','h',':',' '));
+u_put_unalignedp32(pwbuffer+16, U_MULTICHAR_CONSTANT32('2','7','\r','\n'));
+u_put_unalignedp64(pwbuffer+20, U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
+u_put_unalignedp64(pwbuffer+28, U_MULTICHAR_CONSTANT64('T','y','p','e',':',' ','a','p'));
+u_put_unalignedp64(pwbuffer+36, U_MULTICHAR_CONSTANT64('p','l','i','c','a','t','i','o'));
+u_put_unalignedp64(pwbuffer+44, U_MULTICHAR_CONSTANT64('n','/','j','s','o','n','\r','\n'));
+u_put_unalignedp16(pwbuffer+52, U_MULTICHAR_CONSTANT16('\r','\n'));
 
-UValue::pstringify = pwbuffer + U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
+UValue::pstringify = pwbuffer + U_CONSTANT_SIZE("Content-Length: 27\r\nContent-Type: application/json\r\n\r\n");
 
 UValue(*pkey, *pvalue).stringify();
 
-UClientImage_Base::wbuffer->size_adjust(UValue::pstringify);
-
-U_http_info.endHeader = (uint32_t)-U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
+UClientImage_Base::wbuffer->size_adjust_constant(UValue::pstringify);
 -->

+ 0 - 17
frameworks/C++/ulib/src/libFortune.cxx

@@ -7,20 +7,3 @@ UString*           Fortune::pmessage;
 UOrmSession*       Fortune::psql_fortune;
 UOrmStatement*     Fortune::pstmt_fortune;
 UVector<Fortune*>* Fortune::pvfortune;
-
-#ifdef DEBUG
-const char* Fortune::dump(bool breset) const
-{
-   *UObjectIO::os << "id               " << id              << '\n'
-                  << "message (UString " << (void*)&message << ')';
-
-   if (breset)
-      {
-      UObjectIO::output();
-
-      return UObjectIO::buffer_output;
-      }
-
-   return U_NULLPTR;
-}
-#endif

+ 2 - 17
frameworks/C++/ulib/src/libWorld.cxx

@@ -10,23 +10,8 @@ uint32_t         World::rnumber[500];
 UOrmSession*     World::psql_query;
 UOrmStatement*   World::pstmt_query;
 #ifdef U_STATIC_ORM_DRIVER_PGSQL
+char             World::num2str[sizeof(unsigned int)];
+PGconn*          World::conn;
 UOrmDriverPgSql* World::pdrv;
 UPgSqlStatement* World::pstmt;
 #endif
-
-#ifdef DEBUG
-const char* World::dump(bool breset) const
-{
-   *UObjectIO::os << "id           " << id            << '\n'
-                  << "randomNumber " << randomNumber;
-
-   if (breset)
-      {
-      UObjectIO::output();
-
-      return UObjectIO::buffer_output;
-      }
-
-   return U_NULLPTR;
-}
-#endif

+ 3 - 0
frameworks/C++/ulib/src/mdb.usp

@@ -9,6 +9,9 @@ static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
 -->

+ 5 - 0
frameworks/C++/ulib/src/mfortune.usp

@@ -7,6 +7,11 @@ TechEmpower Web Framework Benchmarks
 
 static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
 -->
+<!--#header
+-->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
 -->

+ 3 - 0
frameworks/C++/ulib/src/mquery.usp

@@ -9,6 +9,9 @@ static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
 -->

+ 3 - 0
frameworks/C++/ulib/src/mupdate.usp

@@ -9,6 +9,9 @@ static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
 -->

+ 18 - 20
frameworks/C++/ulib/src/query.usp

@@ -10,47 +10,45 @@ static void usp_fork_query() { World::handlerForkSql(); }
 <!--#header
 -->
 <!--#vcode
-uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
-
-/*
-if (num_queries >= 20 &&
-    UServer_Base::startParallelization())
-   {
-   return;
-   }
-*/
+if (UServer_Base::startParallelization()) return;
 -->
 <!--#code
+uint32_t i = 0, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
+
 World::initResult();
 
-for (uint32_t i = 0; i < num_queries; ++i)
+#ifdef U_STATIC_ORM_DRIVER_PGSQL
+if (World::pdrv)
    {
-   World::pworld_query->id = World::rnumber[i];
+   PGresult* res;
+   char* randomNumber;
 
-#ifdef U_STATIC_ORM_DRIVER_PGSQL
-   if (World::pdrv)
+   for (; i < num_queries; ++i)
       {
-      World::pstmt->setBindParam();
-
-      PGresult* res = World::pdrv->execPrepared(World::pstmt);
+      res = World::execPrepared(i);
 
       U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
       U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
 
-      char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
+      randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
 
-      World::handlerResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
+      World::handlerResult(World::rnumber[i], ntohl(*(uint32_t*)randomNumber));
 
       U_SYSCALL_VOID(PQclear, "%p", res);
       }
-   else
+   }
+else
 #endif
+{
+for (; i < num_queries; ++i)
    {
+   World::pworld_query->id = World::rnumber[i];
+
    World::pstmt_query->execute();
 
    World::handlerResultSql(i);
    }
-   }
+}
 
 World::endResult();
 -->

+ 3 - 0
frameworks/C++/ulib/src/rdb.usp

@@ -9,6 +9,9 @@ static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
 -->

+ 6 - 0
frameworks/C++/ulib/src/rfortune.usp

@@ -7,5 +7,11 @@ TechEmpower Web Framework Benchmarks
 
 static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
 -->
+<!--#header
+-->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
+<!--#code
 Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
 -->

+ 3 - 0
frameworks/C++/ulib/src/rquery.usp

@@ -9,6 +9,9 @@ static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
 -->

+ 3 - 0
frameworks/C++/ulib/src/rupdate.usp

@@ -9,6 +9,9 @@ static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
 -->
 <!--#header
 -->
+<!--#vcode
+if (UServer_Base::startParallelization()) return;
+-->
 <!--#code
 World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
 -->

+ 12 - 20
frameworks/C++/ulib/src/update.usp

@@ -33,17 +33,11 @@ static void usp_fork_update()
 <!--#header
 -->
 <!--#vcode
-uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
-
-/*
-if (num_queries >= 20 &&
-    UServer_Base::startParallelization())
-   {
-   return;
-   }
-*/
+if (UServer_Base::startParallelization()) return;
 -->
 <!--#code
+uint32_t i = 0, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
+
 World::initResult();
 
 #ifdef U_STATIC_ORM_DRIVER_PGSQL
@@ -52,29 +46,27 @@ if (World::pdrv)
    PGresult* res;
    char* pquery = query + U_CONSTANT_SIZE("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES");
 
-   for (uint32_t i = 0; i < num_queries; ++i)
+   for (; i < num_queries; ++i)
       {
-      *pquery++ = '(';
-
-      pquery = u_num2str32(World::pworld_query->id = World::rnumber[i], pquery);
+      *pquery = '(';
 
-      World::pstmt->setBindParam();
+      pquery = u_num2str32(World::rnumber[i], pquery+1);
 
-      res = World::pdrv->execPrepared(World::pstmt);
+      res = World::execPrepared(i);
 
       U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
       U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
 
       (void) U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
 
-      *pquery++ = ',';
+      *pquery = ',';
 
-      pquery = u_num2str32(World::pworld_query->randomNumber = u_get_num_random_range1(10000), pquery);
+      pquery = u_num2str32(World::rnum = u_get_num_random_range1(10000), pquery+1);
 
       u_put_unalignedp16(pquery, U_MULTICHAR_CONSTANT16(')',','));
                          pquery += 2;
 
-      World::handlerResultSql(i);
+      World::handlerResult(World::rnumber[i], World::rnum);
 
       U_SYSCALL_VOID(PQclear, "%p", res);
       }
@@ -84,7 +76,7 @@ if (World::pdrv)
    (void) memcpy(pquery-1, ") AS v (id,randomNumber) WHERE World.id = v.id;",
            U_CONSTANT_SIZE(") AS v (id,randomNumber) WHERE World.id = v.id;")+1);
 
-   res = (PGresult*) U_SYSCALL(PQexec, "%p,%S", (PGconn*)World::pdrv->UOrmDriver::connection, query);
+   res = (PGresult*) U_SYSCALL(PQexec, "%p,%S", (PGconn*)World::conn, query);
 
    U_INTERNAL_ASSERT_EQUALS(PQresultStatus(res), PGRES_COMMAND_OK)
 
@@ -93,7 +85,7 @@ if (World::pdrv)
 else
 #endif
 {
-for (uint32_t i = 0; i < num_queries; ++i)
+for (; i < num_queries; ++i)
    {
    World::pworld_query->id = World::rnumber[i];
 

+ 107 - 58
frameworks/C++/ulib/src/world.h

@@ -15,13 +15,6 @@
 
 class World {
 public:
-   // Check for memory error
-   U_MEMORY_TEST
-
-   // Allocator e Deallocator
-   U_MEMORY_ALLOCATOR
-   U_MEMORY_DEALLOCATOR
-
    uint32_t id, randomNumber;
 
    World()
@@ -55,7 +48,7 @@ public:
 
    void toJSON(UString& json)
       {
-      U_TRACE(0, "World::toJSON(%V)", json.rep)
+      U_TRACE(5, "World::toJSON(%V)", json.rep)
 
       json.toJSON(U_JSON_METHOD_HANDLER(id,           unsigned int));
       json.toJSON(U_JSON_METHOD_HANDLER(randomNumber, unsigned int));
@@ -63,7 +56,7 @@ public:
 
    void fromJSON(UValue& json)
       {
-      U_TRACE(0, "World::fromJSON(%p)", &json)
+      U_TRACE(5, "World::fromJSON(%p)", &json)
 
       json.fromJSON(U_JSON_METHOD_HANDLER(id,           unsigned int));
       json.fromJSON(U_JSON_METHOD_HANDLER(randomNumber, unsigned int));
@@ -73,7 +66,7 @@ public:
 
    void bindParam(UOrmStatement* stmt)
       {
-      U_TRACE(0, "World::bindParam(%p)", stmt)
+      U_TRACE(5, "World::bindParam(%p)", stmt)
 
       stmt->bindParam(U_ORM_TYPE_HANDLER(id,           unsigned int));
       stmt->bindParam(U_ORM_TYPE_HANDLER(randomNumber, unsigned int));
@@ -81,7 +74,7 @@ public:
 
    void bindResult(UOrmStatement* stmt)
       {
-      U_TRACE(0, "World::bindResult(%p)", stmt)
+      U_TRACE(5, "World::bindResult(%p)", stmt)
 
       stmt->bindResult(U_ORM_TYPE_HANDLER(id,           unsigned int));
       stmt->bindResult(U_ORM_TYPE_HANDLER(randomNumber, unsigned int));
@@ -120,61 +113,129 @@ public:
    static UOrmStatement* pstmt_query;
 
 #ifdef U_STATIC_ORM_DRIVER_PGSQL
+   static PGconn* conn;
    static UOrmDriverPgSql* pdrv;
    static UPgSqlStatement* pstmt;
+   static char num2str[sizeof(unsigned int)];
+
+   static bool initPipeline()
+      {
+      U_TRACE(5, "World::initPipeline()")
+
+      if (pdrv)
+         {
+         (void) U_SYSCALL(PQsetnonblocking, "%p,%u", conn, 1);
+         (void) U_SYSCALL(PQenterBatchMode, "%p",    conn);
+
+         U_RETURN(true);
+         }
+
+      U_RETURN(false);
+      }
+
+   static PGresult* execPrepared()
+      {
+      U_TRACE_NO_PARAM(5, "World::execPrepared()")
+
+      U_INTERNAL_ASSERT_MAJOR(rnumber[0], 0)
+
+      *(unsigned int*)num2str = htonl(rnumber[0]);
+
+      PGresult* res = (PGresult*) U_SYSCALL(PQexecPrepared, "%p,%S,%u,%p,%p,%p,%u", conn, pstmt->stmtName, 1, pstmt->paramValues, pstmt->paramLengths, pstmt->paramFormats, 1);
+
+      U_RETURN_POINTER(res, PGresult);
+      }
+
+   static PGresult* execPrepared(uint32_t i)
+      {
+      U_TRACE(5, "World::execPrepared(%u)", i)
+
+      U_INTERNAL_ASSERT_MAJOR(rnumber[i], 0)
+
+      *(unsigned int*)num2str = htonl(rnumber[i]);
+
+      PGresult* res = (PGresult*) U_SYSCALL(PQexecPrepared, "%p,%S,%u,%p,%p,%p,%u", conn, pstmt->stmtName, 1, pstmt->paramValues, pstmt->paramLengths, pstmt->paramFormats, 1);
+
+      U_RETURN_POINTER(res, PGresult);
+      }
+
+   static void sendQueryPrepared(uint32_t i)
+      {
+      U_TRACE(5, "World::sendQueryPrepared(%u)", i)
+
+      U_INTERNAL_ASSERT_MAJOR(rnumber[i], 0)
+
+      *(unsigned int*)num2str = htonl(rnumber[i]);
+
+      (void) U_SYSCALL(PQsendQueryPrepared, "%p,%S,%u,%p,%p,%p,%u", conn, pstmt->stmtName, 1, pstmt->paramValues, pstmt->paramLengths, pstmt->paramFormats, 1);
+      }
 #endif
 
    static void initResult()
       {
-      U_TRACE(0, "World::initResult()")
+      U_TRACE(5, "World::initResult()")
 
       u_put_unalignedp64(wbuffer,    U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
-      u_put_unalignedp64(wbuffer+8,  U_MULTICHAR_CONSTANT64('T','y','p','e',':',' ','a','p'));
-      u_put_unalignedp64(wbuffer+16, U_MULTICHAR_CONSTANT64('p','l','i','c','a','t','i','o'));
-      u_put_unalignedp64(wbuffer+24, U_MULTICHAR_CONSTANT64('n','/','j','s','o','n','\r','\n'));
-      u_put_unalignedp32(wbuffer+32, U_MULTICHAR_CONSTANT32('\r','\n','[','\0'));
-
-      pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n[");
-
-      U_http_info.endHeader = (uint32_t)-U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
+      u_put_unalignedp64(wbuffer+8,  U_MULTICHAR_CONSTANT64('L','e','n','g','t','h',':',' '));
+      u_put_unalignedp64(wbuffer+16, U_MULTICHAR_CONSTANT64('1','3','3','3','1','\r','\n','C'));
+      u_put_unalignedp64(wbuffer+24, U_MULTICHAR_CONSTANT64('o','n','t','e','n','t','-','T'));
+      u_put_unalignedp64(wbuffer+32, U_MULTICHAR_CONSTANT64('y','p','e',':',' ','a','p','p'));
+      u_put_unalignedp64(wbuffer+40, U_MULTICHAR_CONSTANT64('l','i','c','a','t','i','o','n'));
+      u_put_unalignedp64(wbuffer+48, U_MULTICHAR_CONSTANT64('/','j','s','o','n','\r','\n','\r'));
+      u_put_unalignedp16(wbuffer+56, U_MULTICHAR_CONSTANT16('\n','['));
+
+      pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Length: 13331\r\nContent-Type: application/json\r\n\r\n[");
       }
 
    static void endResult()
       {
-      U_TRACE_NO_PARAM(0, "World::endResult()")
+      U_TRACE_NO_PARAM(5, "World::endResult()")
 
       *(pwbuffer-1) = ']';
 
-      UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer);
+      uint32_t      len = pwbuffer-wbuffer,
+               body_len = len - U_CONSTANT_SIZE("Content-Length: 13331\r\nContent-Type: application/json\r\n\r\n");
+
+      pwbuffer = u_num2str32(body_len, wbuffer + U_CONSTANT_SIZE("Content-Length: "));
+
+      while (*pwbuffer != '\r') *pwbuffer++ = ' ';
+
+      UClientImage_Base::wbuffer->setConstant(wbuffer, len);
       }
 
    static void initOneResult()
       {
-      U_TRACE(0, "World::initOneResult()")
+      U_TRACE(5, "World::initOneResult()")
 
       u_put_unalignedp64(wbuffer,    U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
-      u_put_unalignedp64(wbuffer+8,  U_MULTICHAR_CONSTANT64('T','y','p','e',':',' ','a','p'));
-      u_put_unalignedp64(wbuffer+16, U_MULTICHAR_CONSTANT64('p','l','i','c','a','t','i','o'));
-      u_put_unalignedp64(wbuffer+24, U_MULTICHAR_CONSTANT64('n','/','j','s','o','n','\r','\n'));
-      u_put_unalignedp32(wbuffer+32, U_MULTICHAR_CONSTANT32('\r','\n','{','\0'));
-
-      pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n{");
-
-      U_http_info.endHeader = (uint32_t)-U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
+      u_put_unalignedp64(wbuffer+8,  U_MULTICHAR_CONSTANT64('L','e','n','g','t','h',':',' '));
+      u_put_unalignedp32(wbuffer+16, U_MULTICHAR_CONSTANT32('3','1','\r','\n'));
+      u_put_unalignedp64(wbuffer+20, U_MULTICHAR_CONSTANT64('C','o','n','t','e','n','t','-'));
+      u_put_unalignedp64(wbuffer+28, U_MULTICHAR_CONSTANT64('T','y','p','e',':',' ','a','p'));
+      u_put_unalignedp64(wbuffer+36, U_MULTICHAR_CONSTANT64('p','l','i','c','a','t','i','o'));
+      u_put_unalignedp64(wbuffer+44, U_MULTICHAR_CONSTANT64('n','/','j','s','o','n','\r','\n'));
+      u_put_unalignedp32(wbuffer+52, U_MULTICHAR_CONSTANT32('\r','\n','{','\0'));
+
+      pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Length: 31\r\nContent-Type: application/json\r\n\r\n{");
       }
 
    static void endOneResult()
       {
-      U_TRACE_NO_PARAM(0, "World::endOneResult()")
+      U_TRACE_NO_PARAM(5, "World::endOneResult()")
 
       *pwbuffer = '}';
 
-      UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer+1);
+      uint32_t      len = pwbuffer-wbuffer+1,
+               body_len = len - U_CONSTANT_SIZE("Content-Length: 31\r\nContent-Type: application/json\r\n\r\n");
+
+      (void) u_num2str32(body_len, wbuffer+U_CONSTANT_SIZE("Content-Length: "));
+
+      UClientImage_Base::wbuffer->setConstant(wbuffer, len);
       }
 
    static void handlerOneResult(uint32_t uid, uint32_t random)
       {
-      U_TRACE(0, "World::handlerOneResult(%u,%u)", uid, random)
+      U_TRACE(5, "World::handlerOneResult(%u,%u)", uid, random)
 
       u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('"','i','d','"'));
 
@@ -190,7 +251,7 @@ public:
 
    static void handlerResult(uint32_t uid, uint32_t random)
       {
-      U_TRACE(0, "World::handlerResult(%u,%u)", uid, random)
+      U_TRACE(5, "World::handlerResult(%u,%u)", uid, random)
 
       u_put_unalignedp32(pwbuffer,   U_MULTICHAR_CONSTANT32('{','"','i','d'));
       u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
@@ -208,7 +269,7 @@ public:
 
    static void handlerResult(uint32_t i)
       {
-      U_TRACE(0, "World::handlerResult(%u)", i)
+      U_TRACE(5, "World::handlerResult(%u)", i)
 
       U_INTERNAL_ASSERT_POINTER(pworld_query)
 
@@ -217,7 +278,7 @@ public:
 
    static void handlerResultSql(uint32_t i)
       {
-      U_TRACE(0, "World::handlerResultSql(%u)", i)
+      U_TRACE(5, "World::handlerResultSql(%u)", i)
 
       U_INTERNAL_ASSERT_POINTER(pworld_query)
 
@@ -226,7 +287,7 @@ public:
 
    static void doUpdateNoSql(vPFu handlerUpdateNoSql)
       {
-      U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
+      U_TRACE(5, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
 
       initResult();
 
@@ -242,14 +303,14 @@ public:
 
    static void handlerFork()
       {
-      U_TRACE_NO_PARAM(0, "World::handlerFork()")
+      U_TRACE_NO_PARAM(5, "World::handlerFork()")
 
       if (rnumber[0] == 0) for (uint32_t i = 0; i < 500; ++i) rnumber[i] = u_get_num_random_range1(10000);
       }
 
    static void handlerForkSql()
       {
-      U_TRACE_NO_PARAM(0, "World::handlerForkSql()")
+      U_TRACE_NO_PARAM(5, "World::handlerForkSql()")
 
       if (psql_query == U_NULLPTR)
          {
@@ -276,10 +337,13 @@ public:
 #     ifdef U_STATIC_ORM_DRIVER_PGSQL
          if (UOrmDriver::isPGSQL())
             {
-            pdrv  = (UOrmDriverPgSql*) World::psql_query->getDriver();
-            pstmt = (UPgSqlStatement*) World::pstmt_query->getStatement();
+            conn  = (PGconn*)(pdrv = (UOrmDriverPgSql*)psql_query->getDriver())->UOrmDriver::connection;
+            pstmt = (UPgSqlStatement*)pstmt_query->getStatement();
 
-            (void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
+            (void) pstmt->setBindParam(pdrv);
+
+            pstmt->paramValues[0]  = num2str;
+            pstmt->paramLengths[0] = sizeof(unsigned int);
             }
 #     endif
 
@@ -287,21 +351,6 @@ public:
          }
       }
 
-#ifdef DEBUG
-   static void handlerEndSql()
-      {
-      U_TRACE_NO_PARAM(0, "World::handlerEndSql()")
-
-      if (pstmt_query)
-         {
-         U_DELETE( pstmt_query)
-         U_DELETE(pworld_query)
-         U_DELETE(  psql_query)
-
-         pstmt_query = U_NULLPTR;
-         }
-      }
-
    const char* dump(bool breset) const;
 #endif
 

+ 14 - 74
frameworks/C++/ulib/src/worldNoSql.h

@@ -19,7 +19,7 @@ public:
 
    static void handlerOneResult(uint32_t uid)
       {
-      U_TRACE(0, "WorldNoSql::handlerOneResult(%u)", uid)
+      U_TRACE(5, "WorldNoSql::handlerOneResult(%u)", uid)
 
       U_INTERNAL_ASSERT_POINTER(str_rnumber)
       U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
@@ -44,7 +44,7 @@ public:
 
    static void handlerResult(uint32_t uid)
       {
-      U_TRACE(0, "WorldNoSql::handlerResult(%u)", uid)
+      U_TRACE(5, "WorldNoSql::handlerResult(%u)", uid)
 
       U_INTERNAL_ASSERT_POINTER(str_rnumber)
       U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
@@ -71,7 +71,7 @@ public:
 
    static void doOneQuery(vPFu handlerQuery)
       {
-      U_TRACE(0, "WorldNoSql::doOneQuery(%p)", handlerQuery)
+      U_TRACE(5, "WorldNoSql::doOneQuery(%p)", handlerQuery)
 
       World::initOneResult();
 
@@ -84,7 +84,7 @@ public:
 
    static void doQuery(vPFu handlerQuery)
       {
-      U_TRACE(0, "WorldNoSql::doQuery(%p)", handlerQuery)
+      U_TRACE(5, "WorldNoSql::doQuery(%p)", handlerQuery)
 
       World::initResult();
 
@@ -100,7 +100,7 @@ public:
 
    static void handlerFork()
       {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerFork()")
+      U_TRACE_NO_PARAM(5, "WorldNoSql::handlerFork()")
 
       if (str_rnumber == U_NULLPTR) U_NEW_STRING(str_rnumber, UString);
 
@@ -116,7 +116,7 @@ public:
 
    static void handlerQueryMongoDB(uint32_t uid)
       {
-      U_TRACE(0, "WorldNoSql::handlerQueryMongoDB(%u)", uid)
+      U_TRACE(5, "WorldNoSql::handlerQueryMongoDB(%u)", uid)
 
       U_INTERNAL_ASSERT_POINTER(str_rnumber)
 
@@ -132,7 +132,7 @@ public:
 
    static void handlerUpdateMongoDB(uint32_t i)
       {
-      U_TRACE(0, "WorldNoSql::handlerUpdateMongoDB(%u)", i)
+      U_TRACE(5, "WorldNoSql::handlerUpdateMongoDB(%u)", i)
 
 #  ifdef USE_MONGODB
       (void) mc->findOne(World::rnumber[i], query);
@@ -142,7 +142,7 @@ public:
 
    static void handlerForkMongoDB()
       {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerForkMongoDB()")
+      U_TRACE_NO_PARAM(5, "WorldNoSql::handlerForkMongoDB()")
 
 #  ifdef USE_MONGODB
       if (mc == U_NULLPTR)
@@ -183,7 +183,7 @@ public:
 
    static void handlerQueryREDIS(uint32_t uid)
       {
-      U_TRACE(0, "WorldNoSql::handlerQueryREDIS(%u)", uid)
+      U_TRACE(5, "WorldNoSql::handlerQueryREDIS(%u)", uid)
 
       U_INTERNAL_ASSERT_POINTER(str_rnumber)
 
@@ -196,7 +196,7 @@ public:
 
    static void handlerUpdateREDIS(uint32_t i)
       {
-      U_TRACE(0, "WorldNoSql::handlerUpdateREDIS(%u)", i)
+      U_TRACE(5, "WorldNoSql::handlerUpdateREDIS(%u)", i)
 
       char* start = rc_buffer+U_CONSTANT_SIZE("world:");
       char* ptr = u_num2str32(World::rnumber[i], start);
@@ -211,7 +211,7 @@ public:
 
    static void handlerForkREDIS()
       {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerForkREDIS()")
+      U_TRACE_NO_PARAM(5, "WorldNoSql::handlerForkREDIS()")
 
       if (rc == U_NULLPTR)
          {
@@ -244,7 +244,7 @@ public:
 
    static void handlerQueryElasticSearch(uint32_t uid)
       {
-      U_TRACE(0, "WorldNoSql::handlerQueryElasticSearch(%u)", uid)
+      U_TRACE(5, "WorldNoSql::handlerQueryElasticSearch(%u)", uid)
 
       U_INTERNAL_ASSERT_POINTER(str_rnumber)
 
@@ -257,7 +257,7 @@ public:
 
    static void handlerUpdateElasticSearch(uint32_t i)
       {
-      U_TRACE(0, "WorldNoSql::handlerUpdateElasticSearch(%u)", i)
+      U_TRACE(5, "WorldNoSql::handlerUpdateElasticSearch(%u)", i)
 
       uint32_t len1 = u__snprintf(pbuffer1, 100, U_CONSTANT_TO_PARAM("%u/_update"), World::rnumber[i]),
                len2 = u__snprintf(pbuffer2, 100, U_CONSTANT_TO_PARAM("%u\"}}"), World::rnum = u_get_num_random_range1(10000));
@@ -267,7 +267,7 @@ public:
 
    static void handlerForkElasticSearch()
       {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerForkElasticSearch()")
+      U_TRACE_NO_PARAM(5, "WorldNoSql::handlerForkElasticSearch()")
 
       if (es == U_NULLPTR)
          {
@@ -290,66 +290,6 @@ public:
          }
       }
 
-#ifdef DEBUG
-   static void handlerEnd()
-      {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerEnd()")
-
-      if (str_rnumber)
-         {
-         U_DELETE(str_rnumber)
-
-         str_rnumber = U_NULLPTR;
-         }
-      }
-
-   static void handlerEndMongoDB()
-      {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerEndMongoDB()")
-
-#  ifdef USE_MONGODB
-      if (query)
-         {
-         U_DELETE(mc)
-
-         U_SYSCALL_VOID(bson_destroy, "%p", query);
-
-         query = U_NULLPTR;
-
-         handlerEnd();
-         }
-#  endif
-      }
-
-   static void handlerEndREDIS()
-      {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerEndREDIS()")
-
-      if (rc)
-         {
-         U_DELETE(rc)
-
-         rc = U_NULLPTR;
-
-         handlerEnd();
-         }
-      }
-
-   static void handlerEndElasticSearch()
-      {
-      U_TRACE_NO_PARAM(0, "WorldNoSql::handlerEndElasticSearch()")
-
-      if (es)
-         {
-         U_DELETE(es)
-
-         es = U_NULLPTR;
-
-         handlerEnd();
-         }
-      }
-#endif
-
 private:
    U_DISALLOW_ASSIGN(WorldNoSql)
 };