mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
sync
This commit is contained in:
parent
b24a4c9b48
commit
fd941c38c0
|
@ -197,7 +197,7 @@ extern U_EXPORT void runDynamicPage_ir_web(int param);
|
|||
|
||||
usp_body_ir_web();
|
||||
UHTTP::putDataSession();
|
||||
U_http_info.endHeader = 0;
|
||||
UHTTP::mime_index = U_html;
|
||||
U_http_info.endHeader = 0;
|
||||
|
||||
} }
|
|
@ -358,6 +358,9 @@ public:
|
|||
*/
|
||||
|
||||
static uint32_t size_output;
|
||||
static char* pstringify; // buffer to stringify json
|
||||
|
||||
void stringify() const;
|
||||
|
||||
UString output() const
|
||||
{
|
||||
|
@ -606,7 +609,6 @@ protected:
|
|||
value;
|
||||
|
||||
static UFlatBuffer* pfb;
|
||||
static char* pstringify; // buffer to stringify json
|
||||
|
||||
typedef struct parser_stack_data {
|
||||
uint64_t keys;
|
||||
|
@ -776,7 +778,6 @@ protected:
|
|||
}
|
||||
}
|
||||
|
||||
void stringify() const;
|
||||
void prettify(uint32_t indent) const;
|
||||
|
||||
void toFlatBufferFromJSON() const;
|
||||
|
@ -2400,71 +2401,80 @@ public:
|
|||
|
||||
# if defined(HAVE_CXX17) && !defined(__clang__)
|
||||
# include <unordered_map>
|
||||
|
||||
template <class T> class U_EXPORT UJsonTypeHandler<std::unordered_map<UString, T> > : public UJsonTypeHandler_Base {
|
||||
public:
|
||||
typedef std::unordered_map<UString, T> stringtobitmaskmap;
|
||||
|
||||
explicit UJsonTypeHandler(stringtobitmaskmap& map) : UJsonTypeHandler_Base(&map) {}
|
||||
|
||||
void clear()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UJsonTypeHandler<stringtobitmaskmap>::clear()")
|
||||
|
||||
((stringtobitmaskmap*)pval)->clear();
|
||||
}
|
||||
|
||||
void toJSON(UString& json)
|
||||
{
|
||||
U_TRACE(0, "UJsonTypeHandler<stringtobitmaskmap>::toJSON(%V)", json.rep)
|
||||
|
||||
stringtobitmaskmap* pmap = (stringtobitmaskmap*)pval;
|
||||
|
||||
if (pmap->empty())
|
||||
{
|
||||
char* ptr = json.pend();
|
||||
|
||||
u_put_unalignedp16(ptr, U_MULTICHAR_CONSTANT16('{','}'));
|
||||
|
||||
json.rep->_length += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
json.__push('{');
|
||||
|
||||
// this is is C++17 vvv
|
||||
for (const auto & [ key, value ] : *pmap) json.toJSON<T>(key, UJsonTypeHandler<T>(value));
|
||||
|
||||
json.setLastChar('}');
|
||||
}
|
||||
|
||||
U_INTERNAL_DUMP("json(%u) = %V", json.size(), json.rep)
|
||||
}
|
||||
|
||||
void fromJSON(UValue& json)
|
||||
{
|
||||
U_TRACE(0, "UJsonTypeHandler<stringtobitmaskmap>::fromJSON(%p)", &json)
|
||||
|
||||
U_ASSERT(((stringtobitmaskmap*)pval)->empty())
|
||||
|
||||
UValue* pelement = json.toNode();
|
||||
|
||||
while (pelement)
|
||||
{
|
||||
uint64_t pitem;
|
||||
|
||||
UJsonTypeHandler<uint64_t>(pitem).fromJSON(*pelement);
|
||||
|
||||
UStringRep* rep = (UStringRep*)u_getPayload(pelement->pkey.ival);
|
||||
|
||||
U_INTERNAL_DUMP("pelement->pkey(%p) = %V", rep, rep)
|
||||
|
||||
((stringtobitmaskmap*)pval)->insert_or_assign(rep, pitem); // insert_or_assign is C++17
|
||||
|
||||
pelement = pelement->next;
|
||||
}
|
||||
}
|
||||
};
|
||||
# define PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE(type, templateParameter, accessQualifier) \
|
||||
\
|
||||
template <templateParameter> class U_EXPORT UJsonTypeHandler<std::unordered_map<UString, type> > : public UJsonTypeHandler_Base { \
|
||||
public: \
|
||||
typedef std::unordered_map<UString, type> ustringmap; \
|
||||
\
|
||||
explicit UJsonTypeHandler(ustringmap& map) : UJsonTypeHandler_Base(&map) {} \
|
||||
\
|
||||
void clear() \
|
||||
{ \
|
||||
U_TRACE_NO_PARAM(0, "UJsonTypeHandler<ustring" #type "map>::clear()") \
|
||||
\
|
||||
((ustringmap*)pval)->clear(); \
|
||||
} \
|
||||
\
|
||||
void toJSON(UString& json) \
|
||||
{ \
|
||||
U_TRACE(0, "UJsonTypeHandler<ustring" #type "map>::toJSON(%p)", &json) \
|
||||
\
|
||||
ustringmap* pmap = (ustringmap*)pval; \
|
||||
\
|
||||
if (pmap->empty()) \
|
||||
{ \
|
||||
char* ptr = json.pend(); \
|
||||
\
|
||||
u_put_unalignedp16(ptr, U_MULTICHAR_CONSTANT16('{','}')); \
|
||||
\
|
||||
json.rep->_length += 2; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
json.__push('{'); \
|
||||
\
|
||||
for (auto & [ key, value ] : *pmap) json.toJSON<type>(key, UJsonTypeHandler<type>(value)); \
|
||||
\
|
||||
json.setLastChar('}'); \
|
||||
} \
|
||||
\
|
||||
U_INTERNAL_DUMP("json(%u) = %V", json.size(), json.rep) \
|
||||
} \
|
||||
\
|
||||
void fromJSON(UValue& json) \
|
||||
{ \
|
||||
U_TRACE(0, "UJsonTypeHandler<ustring" #type "map>::fromJSON(%p)", &json) \
|
||||
\
|
||||
U_ASSERT(((ustringmap*)pval)->empty()) \
|
||||
\
|
||||
UValue* pelement = json.toNode(); \
|
||||
\
|
||||
while (pelement) \
|
||||
{ \
|
||||
type pitem; \
|
||||
\
|
||||
UJsonTypeHandler<type>(accessQualifier pitem).fromJSON(*pelement); \
|
||||
\
|
||||
UString key = UString((UStringRep*)u_getPayload(pelement->pkey.ival)); \
|
||||
\
|
||||
U_INTERNAL_DUMP("pelement->pkey(%p) = %V", key, key.rep) \
|
||||
\
|
||||
((ustringmap*)pval)->insert_or_assign(key, pitem); \
|
||||
\
|
||||
pelement = pelement->next; \
|
||||
} \
|
||||
} \
|
||||
}; \
|
||||
|
||||
#define noPointer
|
||||
#define yesPointer *
|
||||
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE( int64_t, , noPointer)
|
||||
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE(uint64_t, , noPointer)
|
||||
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE(T, class T, noPointer)
|
||||
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE(T*, class T, yesPointer)
|
||||
#undef noPointer
|
||||
#undef yesPointer
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -21,7 +21,7 @@ extern "C" {
|
|||
}
|
||||
|
||||
#ifndef U_MYSQL_STRING_SIZE
|
||||
#define U_MYSQL_STRING_SIZE (8192-sizeof(USqlStatementBindResult))
|
||||
#define U_MYSQL_STRING_SIZE (4096-sizeof(USqlStatementBindResult))
|
||||
#endif
|
||||
|
||||
class U_EXPORT UMySqlStatementBindParam : public USqlStatementBindParam {
|
||||
|
|
|
@ -1300,6 +1300,8 @@ data_missing:
|
|||
|
||||
#if defined(U_SERVER_CAPTIVE_PORTAL) && defined(ENABLE_THREAD)
|
||||
if (UHTTP::checkForUSP()) U_RETURN(U_NOTIFIER_OK);
|
||||
|
||||
if (U_ClientImage_parallelization == U_PARALLELIZATION_PARENT) U_RETURN(U_NOTIFIER_DELETE);
|
||||
#endif
|
||||
|
||||
size_request = 0;
|
||||
|
@ -1585,7 +1587,7 @@ end: if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) goto death;
|
|||
}
|
||||
|
||||
death:
|
||||
UServer_Base::endNewChild(); // no return;
|
||||
UServer_Base::endNewChild(); // no return
|
||||
}
|
||||
|
||||
last_event = u_now->tv_sec;
|
||||
|
|
|
@ -7,15 +7,6 @@ TechEmpower Web Framework Benchmarks
|
|||
|
||||
static UCache* cache;
|
||||
|
||||
static void handlerQuery(uint32_t i)
|
||||
{
|
||||
U_TRACE(5, "::handlerQuery(%u)", i)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(cache)
|
||||
|
||||
World::rnum = cache->getNumber(World::rnumber[i]);
|
||||
}
|
||||
|
||||
static void usp_init_cached_worlds()
|
||||
{
|
||||
U_TRACE(5, "::usp_init_cached_worlds()")
|
||||
|
@ -49,17 +40,16 @@ static void usp_init_cached_worlds()
|
|||
World::handlerFork();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_cached_worlds()
|
||||
static void handlerQuery(uint32_t i)
|
||||
{
|
||||
U_TRACE(5, "::usp_end_cached_worlds()")
|
||||
U_TRACE(5, "::handlerQuery(%u)", i)
|
||||
|
||||
if (cache) U_DELETE(cache)
|
||||
U_INTERNAL_ASSERT_POINTER(cache)
|
||||
|
||||
World::rnum = cache->getNumber(World::rnumber[i]);
|
||||
}
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(handlerQuery);
|
||||
|
|
|
@ -6,8 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "world.h"
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
static UOrmDriverPgSql* pdrv;
|
||||
static UPgSqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void usp_fork_db()
|
||||
|
@ -19,32 +19,27 @@ static void usp_fork_db()
|
|||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (UOrmDriver::isPGSQL())
|
||||
{
|
||||
pdrv = World::psql_query->getDriver();
|
||||
pstmt = World::pstmt_query->getStatement();
|
||||
pdrv = (UOrmDriverPgSql*) World::psql_query->getDriver();
|
||||
pstmt = (UPgSqlStatement*) World::pstmt_query->getStatement();
|
||||
|
||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_db() { World::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
World::initOneResult();
|
||||
|
||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (pdrv)
|
||||
{
|
||||
((UPgSqlStatement*)pstmt)->setBindParam();
|
||||
pstmt->setBindParam();
|
||||
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
PGresult* res = pdrv->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
|
||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_edb() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_equery() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||
|
|
|
@ -20,13 +20,8 @@ static void usp_fork_eupdate()
|
|||
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_eupdate() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
||||
|
|
|
@ -139,7 +139,7 @@ public:
|
|||
|
||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
||||
|
||||
char* pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
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','>','<'));
|
||||
|
|
|
@ -7,8 +7,8 @@ TechEmpower Web Framework Benchmarks
|
|||
|
||||
static vPF handle_query;
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
static UOrmDriverPgSql* pdrv;
|
||||
static UPgSqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void handlerQuery()
|
||||
|
@ -33,7 +33,7 @@ static void handlerQueryPGSQL()
|
|||
int sz;
|
||||
char* id;
|
||||
char* ptr;
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
PGresult* res = pdrv->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
||||
|
||||
|
@ -62,17 +62,13 @@ static void usp_fork_fortune()
|
|||
handle_query = handlerQueryPGSQL;
|
||||
|
||||
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
pdrv = Fortune::psql_fortune->getDriver();
|
||||
pstmt = Fortune::pstmt_fortune->getStatement();
|
||||
pdrv = (UOrmDriverPgSql*) Fortune::psql_fortune->getDriver();
|
||||
pstmt = (UPgSqlStatement*) Fortune::pstmt_fortune->getStatement();
|
||||
|
||||
((UPgSqlStatement*)pstmt)->prepareStatement(pdrv);
|
||||
pstmt->prepareStatement(pdrv);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_fortune() { Fortune::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#code
|
||||
Fortune::doQuery(handle_query);
|
||||
|
|
|
@ -13,20 +13,23 @@ static void usp_init_json()
|
|||
U_NEW_STRING(pkey, UString(U_CONSTANT_TO_PARAM("message")));
|
||||
U_NEW_STRING(pvalue, UString(U_CONSTANT_TO_PARAM("Hello, World!")));
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_json()
|
||||
{
|
||||
U_TRACE(5, "::usp_end_json()")
|
||||
|
||||
U_DELETE(pkey)
|
||||
U_DELETE(pvalue)
|
||||
}
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
UValue::stringify(*UClientImage_Base::wbuffer, UValue(*pkey, *pvalue));
|
||||
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'));
|
||||
|
||||
UValue::pstringify = pwbuffer + U_CONSTANT_SIZE("Content-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");
|
||||
-->
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "world.h"
|
||||
|
||||
char World::wbuffer[18000];
|
||||
char* World::pwbuffer;
|
||||
World* World::pworld_query;
|
||||
uint32_t World::rnum;
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mdb() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "fortuneNoSql.h"
|
||||
|
||||
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mfortune() { FortuneNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#code
|
||||
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mquery() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mupdate() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
||||
|
|
|
@ -6,21 +6,16 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "world.h"
|
||||
|
||||
static void usp_fork_query() { World::handlerForkSql(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_query() { World::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
World::initResult(num_queries);
|
||||
|
||||
(void) World::pstmt_query->asyncPipelineMode(World::handlerResultSql);
|
||||
|
||||
World::initResult();
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
World::pworld_query->id = World::rnumber[i];
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rdb() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "fortuneNoSql.h"
|
||||
|
||||
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rfortune() { FortuneNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
||||
-->
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rquery() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rupdate() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
||||
|
|
|
@ -28,16 +28,24 @@ static void usp_fork_update()
|
|||
}
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#vcode
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
/*
|
||||
if (num_queries >= 20 &&
|
||||
UServer_Base::startParallelization())
|
||||
{
|
||||
return;
|
||||
}
|
||||
*/
|
||||
-->
|
||||
<!--#code
|
||||
uint32_t i, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
World::initResult(num_queries);
|
||||
World::initResult();
|
||||
|
||||
if (UOrmDriver::isAsyncPipelineModeAvaliable() == false)
|
||||
{
|
||||
for (i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
World::pworld_query->id = World::rnumber[i];
|
||||
|
||||
|
@ -58,7 +66,7 @@ else
|
|||
|
||||
pquery = query + U_CONSTANT_SIZE("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES");
|
||||
|
||||
for (i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
*pquery++ = '(';
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ public:
|
|||
bfirst_pass =
|
||||
is_html =
|
||||
test_if_html =
|
||||
bhttp_header_empty =
|
||||
bpreprocessing_failed = false;
|
||||
}
|
||||
|
||||
|
@ -466,29 +467,33 @@ public:
|
|||
|
||||
setDirectiveItem(directive, U_CONSTANT_SIZE("header"));
|
||||
|
||||
// NB: we use insert because the possibility of UHTTP::callService() (see chat.usp)...
|
||||
if (token.empty()) bhttp_header_empty = true;
|
||||
else
|
||||
{
|
||||
// NB: we use insert because the possibility of UHTTP::callService() (see chat.usp)...
|
||||
|
||||
bool bheader = (U_STRING_FIND(token, 0, "Content-Type") != U_NOT_FOUND);
|
||||
bool bheader = (U_STRING_FIND(token, 0, "Content-Type") != U_NOT_FOUND);
|
||||
|
||||
http_header = UStringExt::dos2unix(token, true);
|
||||
http_header = UStringExt::dos2unix(token, true);
|
||||
|
||||
(void) http_header.append(U_CONSTANT_TO_PARAM("\r\n\r\n"));
|
||||
(void) http_header.append(U_CONSTANT_TO_PARAM("\r\n\r\n"));
|
||||
|
||||
uint32_t n = http_header.size();
|
||||
uint32_t n = http_header.size();
|
||||
|
||||
UString encoded(n * 4);
|
||||
UString encoded(n * 4);
|
||||
|
||||
UEscape::encode(http_header, encoded);
|
||||
UEscape::encode(http_header, encoded);
|
||||
|
||||
U_ASSERT(encoded.isQuoted())
|
||||
U_ASSERT(encoded.isQuoted())
|
||||
|
||||
(void) output1.reserve(200U);
|
||||
(void) http_header.reserve(200U + encoded.size());
|
||||
(void) output1.reserve(200U);
|
||||
(void) http_header.reserve(200U + encoded.size());
|
||||
|
||||
(void) http_header.snprintf(U_CONSTANT_TO_PARAM("\n\tU_ASSERT_EQUALS(UClientImage_Base::wbuffer->findEndHeader(),false)"
|
||||
"\n\t(void) UClientImage_Base::wbuffer->insert(0, U_CONSTANT_TO_PARAM(%v));\n\t\n"), encoded.rep);
|
||||
(void) http_header.snprintf(U_CONSTANT_TO_PARAM("\n\tU_ASSERT_EQUALS(UClientImage_Base::wbuffer->findEndHeader(),false)"
|
||||
"\n\t(void) UClientImage_Base::wbuffer->insert(0, U_CONSTANT_TO_PARAM(%v));\n\t\n"), encoded.rep);
|
||||
|
||||
(void) output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tU_http_info.endHeader = %.*s%u;\n"), bheader ? U_CONSTANT_SIZE("(uint32_t)-") : 0, "(uint32_t)-", n);
|
||||
(void) output1.snprintf_add(U_CONSTANT_TO_PARAM("\n\tU_http_info.endHeader = %.*s%u;\n"), bheader ? U_CONSTANT_SIZE("(uint32_t)-") : 0, "(uint32_t)-", n);
|
||||
}
|
||||
}
|
||||
else if (strncmp(directive, U_CONSTANT_TO_PARAM("number")) == 0)
|
||||
{
|
||||
|
@ -834,8 +839,9 @@ loop: distance = t.getDistance();
|
|||
|
||||
if (http_header.empty())
|
||||
{
|
||||
(void) output1.append(U_CONSTANT_TO_PARAM("\n\tU_http_info.endHeader = 0;\n"));
|
||||
if (is_html) (void) output1.append(U_CONSTANT_TO_PARAM("\n\tUHTTP::mime_index = U_html;\n"));
|
||||
|
||||
if (bhttp_header_empty == false) (void) output1.append(U_CONSTANT_TO_PARAM("\n\tU_http_info.endHeader = 0;\n"));
|
||||
}
|
||||
|
||||
// NB: we check for presence of 'return' inside the code...
|
||||
|
@ -932,7 +938,7 @@ private:
|
|||
UString pinclude, usp, token, output0, output1, declaration, vcode, http_header, sseloop, vars;
|
||||
const char* basename_ptr;
|
||||
uint32_t basename_sz;
|
||||
bool bvar, bsession, bstorage, bfirst_pass, is_html, test_if_html, bpreprocessing_failed;
|
||||
bool bvar, bsession, bstorage, bfirst_pass, is_html, test_if_html, bhttp_header_empty, bpreprocessing_failed;
|
||||
|
||||
U_DISALLOW_COPY_AND_ASSIGN(Application)
|
||||
};
|
||||
|
|
|
@ -112,55 +112,70 @@ public:
|
|||
}
|
||||
|
||||
static char* pwbuffer;
|
||||
static char wbuffer[18000];
|
||||
static uint32_t rnum, rnumber[500];
|
||||
|
||||
static World* pworld_query;
|
||||
static UOrmSession* psql_query;
|
||||
static UOrmStatement* pstmt_query;
|
||||
|
||||
static void initResult(uint32_t num_queries)
|
||||
static void initResult()
|
||||
{
|
||||
U_TRACE(0, "World::initResult(%u)", num_queries)
|
||||
U_TRACE(0, "World::initResult()")
|
||||
|
||||
(void) UClientImage_Base::wbuffer->reserve(36U * num_queries);
|
||||
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 = UClientImage_Base::wbuffer->pend();
|
||||
pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n[");
|
||||
|
||||
*pwbuffer++ = '[';
|
||||
U_http_info.endHeader = (uint32_t)-U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
|
||||
}
|
||||
|
||||
static void endResult()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "World::endResult()")
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
|
||||
*(pwbuffer-1) = ']';
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
||||
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer);
|
||||
}
|
||||
|
||||
static void initOneResult()
|
||||
{
|
||||
U_TRACE(0, "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");
|
||||
}
|
||||
|
||||
static void endOneResult()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
*pwbuffer = '}';
|
||||
|
||||
*pwbuffer++ = '}';
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
||||
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer+1);
|
||||
}
|
||||
|
||||
static void handlerOneResult(uint32_t uid, uint32_t random)
|
||||
{
|
||||
U_TRACE(0, "World::handlerOneResult(%u,%u)", uid, random)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('"','i','d','"'));
|
||||
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
pwbuffer[4] = ':';
|
||||
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+6);
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+5);
|
||||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
|
@ -172,7 +187,15 @@ public:
|
|||
{
|
||||
U_TRACE(0, "World::handlerResult(%u,%u)", uid, random)
|
||||
|
||||
handlerOneResult(uid, random);
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+6);
|
||||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
|
||||
pwbuffer = u_num2str32(random, pwbuffer+16);
|
||||
|
||||
u_put_unalignedp16(pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||
pwbuffer += 2;
|
||||
|
@ -200,11 +223,9 @@ public:
|
|||
{
|
||||
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
initResult();
|
||||
|
||||
initResult(num_queries);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||
{
|
||||
handlerUpdateNoSql(i);
|
||||
|
||||
|
|
|
@ -24,17 +24,18 @@ public:
|
|||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('"','i','d','"'));
|
||||
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
World::pwbuffer[4] = ':';
|
||||
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+6);
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+5);
|
||||
|
||||
u_put_unalignedp64(World::pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
World::pwbuffer += 16;
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
|
||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||
World::pwbuffer += sz;
|
||||
|
||||
|
@ -45,7 +46,24 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::handlerResult(%u)", uid)
|
||||
|
||||
handlerOneResult(uid);
|
||||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
||||
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+6);
|
||||
|
||||
u_put_unalignedp64(World::pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
World::pwbuffer += 16;
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
|
||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||
World::pwbuffer += sz;
|
||||
|
||||
str_rnumber->clear();
|
||||
|
||||
u_put_unalignedp16(World::pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||
World::pwbuffer += 2;
|
||||
|
@ -55,11 +73,13 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::doOneQuery(%p)", handlerQuery)
|
||||
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
World::initOneResult();
|
||||
|
||||
handlerQuery(World::rnumber[0]);
|
||||
uint32_t i = u_now->tv_usec % 500;
|
||||
|
||||
handlerOneResult(World::rnumber[0]);
|
||||
handlerQuery(World::rnumber[i]);
|
||||
|
||||
handlerOneResult(World::rnumber[i]);
|
||||
|
||||
World::endOneResult();
|
||||
}
|
||||
|
@ -68,11 +88,9 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::doQuery(%p)", handlerQuery)
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
World::initResult();
|
||||
|
||||
World::initResult(num_queries);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||
{
|
||||
handlerQuery(World::rnumber[i]);
|
||||
|
||||
|
|
|
@ -11727,11 +11727,16 @@ next: if (*ptr1 == '?')
|
|||
|
||||
usp->runDynamicPage(0);
|
||||
|
||||
setDynamicResponse();
|
||||
if (U_ClientImage_parallelization < U_PARALLELIZATION_PARENT)
|
||||
{
|
||||
setDynamicResponse();
|
||||
|
||||
(void) UServer_Base::pClientImage->writeResponse();
|
||||
(void) UServer_Base::pClientImage->writeResponse();
|
||||
|
||||
U_RETURN(true);
|
||||
if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) UServer_Base::endNewChild(); // no return
|
||||
|
||||
U_RETURN(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
017A
|
||||
0181
|
||||
|
|
|
@ -7,15 +7,6 @@ TechEmpower Web Framework Benchmarks
|
|||
|
||||
static UCache* cache;
|
||||
|
||||
static void handlerQuery(uint32_t i)
|
||||
{
|
||||
U_TRACE(5, "::handlerQuery(%u)", i)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(cache)
|
||||
|
||||
World::rnum = cache->getNumber(World::rnumber[i]);
|
||||
}
|
||||
|
||||
static void usp_init_cached_worlds()
|
||||
{
|
||||
U_TRACE(5, "::usp_init_cached_worlds()")
|
||||
|
@ -49,17 +40,16 @@ static void usp_init_cached_worlds()
|
|||
World::handlerFork();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_cached_worlds()
|
||||
static void handlerQuery(uint32_t i)
|
||||
{
|
||||
U_TRACE(5, "::usp_end_cached_worlds()")
|
||||
U_TRACE(5, "::handlerQuery(%u)", i)
|
||||
|
||||
if (cache) U_DELETE(cache)
|
||||
U_INTERNAL_ASSERT_POINTER(cache)
|
||||
|
||||
World::rnum = cache->getNumber(World::rnumber[i]);
|
||||
}
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(handlerQuery);
|
||||
|
|
|
@ -6,8 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "world.h"
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
static UOrmDriverPgSql* pdrv;
|
||||
static UPgSqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void usp_fork_db()
|
||||
|
@ -19,32 +19,27 @@ static void usp_fork_db()
|
|||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (UOrmDriver::isPGSQL())
|
||||
{
|
||||
pdrv = World::psql_query->getDriver();
|
||||
pstmt = World::pstmt_query->getStatement();
|
||||
pdrv = (UOrmDriverPgSql*) World::psql_query->getDriver();
|
||||
pstmt = (UPgSqlStatement*) World::pstmt_query->getStatement();
|
||||
|
||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_db() { World::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
World::initOneResult();
|
||||
|
||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (pdrv)
|
||||
{
|
||||
((UPgSqlStatement*)pstmt)->setBindParam();
|
||||
pstmt->setBindParam();
|
||||
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
PGresult* res = pdrv->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
|
||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_edb() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_equery() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||
|
|
|
@ -20,13 +20,8 @@ static void usp_fork_eupdate()
|
|||
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_eupdate() { WorldNoSql::handlerEndElasticSearch(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
||||
|
|
|
@ -139,7 +139,7 @@ public:
|
|||
|
||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
||||
|
||||
char* pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
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','>','<'));
|
||||
|
|
|
@ -7,8 +7,8 @@ TechEmpower Web Framework Benchmarks
|
|||
|
||||
static vPF handle_query;
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
static UOrmDriverPgSql* pdrv;
|
||||
static UPgSqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void handlerQuery()
|
||||
|
@ -33,7 +33,7 @@ static void handlerQueryPGSQL()
|
|||
int sz;
|
||||
char* id;
|
||||
char* ptr;
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
PGresult* res = pdrv->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
||||
|
||||
|
@ -62,17 +62,13 @@ static void usp_fork_fortune()
|
|||
handle_query = handlerQueryPGSQL;
|
||||
|
||||
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
pdrv = Fortune::psql_fortune->getDriver();
|
||||
pstmt = Fortune::pstmt_fortune->getStatement();
|
||||
pdrv = (UOrmDriverPgSql*) Fortune::psql_fortune->getDriver();
|
||||
pstmt = (UPgSqlStatement*) Fortune::pstmt_fortune->getStatement();
|
||||
|
||||
((UPgSqlStatement*)pstmt)->prepareStatement(pdrv);
|
||||
pstmt->prepareStatement(pdrv);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_fortune() { Fortune::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#code
|
||||
Fortune::doQuery(handle_query);
|
||||
|
|
|
@ -13,20 +13,23 @@ static void usp_init_json()
|
|||
U_NEW_STRING(pkey, UString(U_CONSTANT_TO_PARAM("message")));
|
||||
U_NEW_STRING(pvalue, UString(U_CONSTANT_TO_PARAM("Hello, World!")));
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_json()
|
||||
{
|
||||
U_TRACE(5, "::usp_end_json()")
|
||||
|
||||
U_DELETE(pkey)
|
||||
U_DELETE(pvalue)
|
||||
}
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
UValue::stringify(*UClientImage_Base::wbuffer, UValue(*pkey, *pvalue));
|
||||
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'));
|
||||
|
||||
UValue::pstringify = pwbuffer + U_CONSTANT_SIZE("Content-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");
|
||||
-->
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "world.h"
|
||||
|
||||
char World::wbuffer[18000];
|
||||
char* World::pwbuffer;
|
||||
World* World::pworld_query;
|
||||
uint32_t World::rnum;
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mdb() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "fortuneNoSql.h"
|
||||
|
||||
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mfortune() { FortuneNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#code
|
||||
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mquery() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_mupdate() { WorldNoSql::handlerEndMongoDB(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
||||
|
|
|
@ -6,21 +6,16 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "world.h"
|
||||
|
||||
static void usp_fork_query() { World::handlerForkSql(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_query() { World::handlerEndSql(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
World::initResult(num_queries);
|
||||
|
||||
(void) World::pstmt_query->asyncPipelineMode(World::handlerResultSql);
|
||||
|
||||
World::initResult();
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
World::pworld_query->id = World::rnumber[i];
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rdb() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "fortuneNoSql.h"
|
||||
|
||||
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rfortune() { FortuneNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
||||
-->
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rquery() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
|||
#include "worldNoSql.h"
|
||||
|
||||
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_rupdate() { WorldNoSql::handlerEndREDIS(); }
|
||||
#endif
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
||||
|
|
|
@ -28,16 +28,24 @@ static void usp_fork_update()
|
|||
}
|
||||
-->
|
||||
<!--#header
|
||||
Content-Type: application/json
|
||||
-->
|
||||
<!--#vcode
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
/*
|
||||
if (num_queries >= 20 &&
|
||||
UServer_Base::startParallelization())
|
||||
{
|
||||
return;
|
||||
}
|
||||
*/
|
||||
-->
|
||||
<!--#code
|
||||
uint32_t i, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
|
||||
World::initResult(num_queries);
|
||||
World::initResult();
|
||||
|
||||
if (UOrmDriver::isAsyncPipelineModeAvaliable() == false)
|
||||
{
|
||||
for (i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
World::pworld_query->id = World::rnumber[i];
|
||||
|
||||
|
@ -58,7 +66,7 @@ else
|
|||
|
||||
pquery = query + U_CONSTANT_SIZE("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES");
|
||||
|
||||
for (i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
{
|
||||
*pquery++ = '(';
|
||||
|
||||
|
|
|
@ -112,55 +112,70 @@ public:
|
|||
}
|
||||
|
||||
static char* pwbuffer;
|
||||
static char wbuffer[18000];
|
||||
static uint32_t rnum, rnumber[500];
|
||||
|
||||
static World* pworld_query;
|
||||
static UOrmSession* psql_query;
|
||||
static UOrmStatement* pstmt_query;
|
||||
|
||||
static void initResult(uint32_t num_queries)
|
||||
static void initResult()
|
||||
{
|
||||
U_TRACE(0, "World::initResult(%u)", num_queries)
|
||||
U_TRACE(0, "World::initResult()")
|
||||
|
||||
(void) UClientImage_Base::wbuffer->reserve(36U * num_queries);
|
||||
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 = UClientImage_Base::wbuffer->pend();
|
||||
pwbuffer = wbuffer + U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n[");
|
||||
|
||||
*pwbuffer++ = '[';
|
||||
U_http_info.endHeader = (uint32_t)-U_CONSTANT_SIZE("Content-Type: application/json\r\n\r\n");
|
||||
}
|
||||
|
||||
static void endResult()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "World::endResult()")
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
|
||||
*(pwbuffer-1) = ']';
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
||||
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer);
|
||||
}
|
||||
|
||||
static void initOneResult()
|
||||
{
|
||||
U_TRACE(0, "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");
|
||||
}
|
||||
|
||||
static void endOneResult()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
*pwbuffer = '}';
|
||||
|
||||
*pwbuffer++ = '}';
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
||||
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer+1);
|
||||
}
|
||||
|
||||
static void handlerOneResult(uint32_t uid, uint32_t random)
|
||||
{
|
||||
U_TRACE(0, "World::handlerOneResult(%u,%u)", uid, random)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('"','i','d','"'));
|
||||
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
pwbuffer[4] = ':';
|
||||
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+6);
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+5);
|
||||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
|
@ -172,7 +187,15 @@ public:
|
|||
{
|
||||
U_TRACE(0, "World::handlerResult(%u,%u)", uid, random)
|
||||
|
||||
handlerOneResult(uid, random);
|
||||
u_put_unalignedp32(pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
|
||||
pwbuffer = u_num2str32(uid, pwbuffer+6);
|
||||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
|
||||
pwbuffer = u_num2str32(random, pwbuffer+16);
|
||||
|
||||
u_put_unalignedp16(pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||
pwbuffer += 2;
|
||||
|
@ -200,11 +223,9 @@ public:
|
|||
{
|
||||
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
initResult();
|
||||
|
||||
initResult(num_queries);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||
{
|
||||
handlerUpdateNoSql(i);
|
||||
|
||||
|
|
|
@ -24,17 +24,18 @@ public:
|
|||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('"','i','d','"'));
|
||||
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
World::pwbuffer[4] = ':';
|
||||
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+6);
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+5);
|
||||
|
||||
u_put_unalignedp64(World::pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
World::pwbuffer += 16;
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
|
||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||
World::pwbuffer += sz;
|
||||
|
||||
|
@ -45,7 +46,24 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::handlerResult(%u)", uid)
|
||||
|
||||
handlerOneResult(uid);
|
||||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
||||
|
||||
u_put_unalignedp32(World::pwbuffer, U_MULTICHAR_CONSTANT32('{','"','i','d'));
|
||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
||||
|
||||
World::pwbuffer = u_num2str32(uid, World::pwbuffer+6);
|
||||
|
||||
u_put_unalignedp64(World::pwbuffer, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||
World::pwbuffer += 16;
|
||||
|
||||
uint32_t sz = str_rnumber->size();
|
||||
|
||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||
World::pwbuffer += sz;
|
||||
|
||||
str_rnumber->clear();
|
||||
|
||||
u_put_unalignedp16(World::pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||
World::pwbuffer += 2;
|
||||
|
@ -55,11 +73,13 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::doOneQuery(%p)", handlerQuery)
|
||||
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
World::initOneResult();
|
||||
|
||||
handlerQuery(World::rnumber[0]);
|
||||
uint32_t i = u_now->tv_usec % 500;
|
||||
|
||||
handlerOneResult(World::rnumber[0]);
|
||||
handlerQuery(World::rnumber[i]);
|
||||
|
||||
handlerOneResult(World::rnumber[i]);
|
||||
|
||||
World::endOneResult();
|
||||
}
|
||||
|
@ -68,11 +88,9 @@ public:
|
|||
{
|
||||
U_TRACE(0, "WorldNoSql::doQuery(%p)", handlerQuery)
|
||||
|
||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||
World::initResult();
|
||||
|
||||
World::initResult(num_queries);
|
||||
|
||||
for (uint32_t i = 0; i < num_queries; ++i)
|
||||
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||
{
|
||||
handlerQuery(World::rnumber[i]);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user