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();
|
usp_body_ir_web();
|
||||||
UHTTP::putDataSession();
|
UHTTP::putDataSession();
|
||||||
U_http_info.endHeader = 0;
|
|
||||||
UHTTP::mime_index = U_html;
|
UHTTP::mime_index = U_html;
|
||||||
|
U_http_info.endHeader = 0;
|
||||||
|
|
||||||
} }
|
} }
|
|
@ -358,6 +358,9 @@ public:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static uint32_t size_output;
|
static uint32_t size_output;
|
||||||
|
static char* pstringify; // buffer to stringify json
|
||||||
|
|
||||||
|
void stringify() const;
|
||||||
|
|
||||||
UString output() const
|
UString output() const
|
||||||
{
|
{
|
||||||
|
@ -606,7 +609,6 @@ protected:
|
||||||
value;
|
value;
|
||||||
|
|
||||||
static UFlatBuffer* pfb;
|
static UFlatBuffer* pfb;
|
||||||
static char* pstringify; // buffer to stringify json
|
|
||||||
|
|
||||||
typedef struct parser_stack_data {
|
typedef struct parser_stack_data {
|
||||||
uint64_t keys;
|
uint64_t keys;
|
||||||
|
@ -776,7 +778,6 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringify() const;
|
|
||||||
void prettify(uint32_t indent) const;
|
void prettify(uint32_t indent) const;
|
||||||
|
|
||||||
void toFlatBufferFromJSON() const;
|
void toFlatBufferFromJSON() const;
|
||||||
|
@ -2400,71 +2401,80 @@ public:
|
||||||
|
|
||||||
# if defined(HAVE_CXX17) && !defined(__clang__)
|
# if defined(HAVE_CXX17) && !defined(__clang__)
|
||||||
# include <unordered_map>
|
# include <unordered_map>
|
||||||
|
# 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; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
|
||||||
template <class T> class U_EXPORT UJsonTypeHandler<std::unordered_map<UString, T> > : public UJsonTypeHandler_Base {
|
#define noPointer
|
||||||
public:
|
#define yesPointer *
|
||||||
typedef std::unordered_map<UString, T> stringtobitmaskmap;
|
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE( int64_t, , noPointer)
|
||||||
|
PRINT_U_STRING_UNORDERED_MAP_JSON_HANDLER_FOR_TYPE(uint64_t, , noPointer)
|
||||||
explicit UJsonTypeHandler(stringtobitmaskmap& map) : UJsonTypeHandler_Base(&map) {}
|
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)
|
||||||
void clear()
|
#undef noPointer
|
||||||
{
|
#undef yesPointer
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -21,7 +21,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef U_MYSQL_STRING_SIZE
|
#ifndef U_MYSQL_STRING_SIZE
|
||||||
#define U_MYSQL_STRING_SIZE (8192-sizeof(USqlStatementBindResult))
|
#define U_MYSQL_STRING_SIZE (4096-sizeof(USqlStatementBindResult))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class U_EXPORT UMySqlStatementBindParam : public USqlStatementBindParam {
|
class U_EXPORT UMySqlStatementBindParam : public USqlStatementBindParam {
|
||||||
|
|
|
@ -1300,6 +1300,8 @@ data_missing:
|
||||||
|
|
||||||
#if defined(U_SERVER_CAPTIVE_PORTAL) && defined(ENABLE_THREAD)
|
#if defined(U_SERVER_CAPTIVE_PORTAL) && defined(ENABLE_THREAD)
|
||||||
if (UHTTP::checkForUSP()) U_RETURN(U_NOTIFIER_OK);
|
if (UHTTP::checkForUSP()) U_RETURN(U_NOTIFIER_OK);
|
||||||
|
|
||||||
|
if (U_ClientImage_parallelization == U_PARALLELIZATION_PARENT) U_RETURN(U_NOTIFIER_DELETE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_request = 0;
|
size_request = 0;
|
||||||
|
@ -1585,7 +1587,7 @@ end: if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) goto death;
|
||||||
}
|
}
|
||||||
|
|
||||||
death:
|
death:
|
||||||
UServer_Base::endNewChild(); // no return;
|
UServer_Base::endNewChild(); // no return
|
||||||
}
|
}
|
||||||
|
|
||||||
last_event = u_now->tv_sec;
|
last_event = u_now->tv_sec;
|
||||||
|
|
|
@ -7,15 +7,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
|
|
||||||
static UCache* cache;
|
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()
|
static void usp_init_cached_worlds()
|
||||||
{
|
{
|
||||||
U_TRACE(5, "::usp_init_cached_worlds()")
|
U_TRACE(5, "::usp_init_cached_worlds()")
|
||||||
|
@ -49,17 +40,16 @@ static void usp_init_cached_worlds()
|
||||||
World::handlerFork();
|
World::handlerFork();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
static void handlerQuery(uint32_t i)
|
||||||
static void usp_end_cached_worlds()
|
|
||||||
{
|
{
|
||||||
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
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(handlerQuery);
|
World::doUpdateNoSql(handlerQuery);
|
||||||
|
|
|
@ -6,8 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
static UOrmDriver* pdrv;
|
static UOrmDriverPgSql* pdrv;
|
||||||
static USqlStatement* pstmt;
|
static UPgSqlStatement* pstmt;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void usp_fork_db()
|
static void usp_fork_db()
|
||||||
|
@ -19,32 +19,27 @@ static void usp_fork_db()
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
if (UOrmDriver::isPGSQL())
|
if (UOrmDriver::isPGSQL())
|
||||||
{
|
{
|
||||||
pdrv = World::psql_query->getDriver();
|
pdrv = (UOrmDriverPgSql*) World::psql_query->getDriver();
|
||||||
pstmt = World::pstmt_query->getStatement();
|
pstmt = (UPgSqlStatement*) World::pstmt_query->getStatement();
|
||||||
|
|
||||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_db() { World::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
World::initOneResult();
|
||||||
|
|
||||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||||
|
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
if (pdrv)
|
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(PQnfields(res), 1)
|
||||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_edb() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_equery() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||||
|
|
|
@ -20,13 +20,8 @@ static void usp_fork_eupdate()
|
||||||
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_eupdate() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
||||||
|
|
|
@ -139,7 +139,7 @@ public:
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
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, 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+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
|
||||||
|
|
|
@ -7,8 +7,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
|
|
||||||
static vPF handle_query;
|
static vPF handle_query;
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
static UOrmDriver* pdrv;
|
static UOrmDriverPgSql* pdrv;
|
||||||
static USqlStatement* pstmt;
|
static UPgSqlStatement* pstmt;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void handlerQuery()
|
static void handlerQuery()
|
||||||
|
@ -33,7 +33,7 @@ static void handlerQueryPGSQL()
|
||||||
int sz;
|
int sz;
|
||||||
char* id;
|
char* id;
|
||||||
char* ptr;
|
char* ptr;
|
||||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
PGresult* res = pdrv->execPrepared(pstmt);
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
||||||
|
|
||||||
|
@ -62,17 +62,13 @@ static void usp_fork_fortune()
|
||||||
handle_query = handlerQueryPGSQL;
|
handle_query = handlerQueryPGSQL;
|
||||||
|
|
||||||
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
pdrv = Fortune::psql_fortune->getDriver();
|
pdrv = (UOrmDriverPgSql*) Fortune::psql_fortune->getDriver();
|
||||||
pstmt = Fortune::pstmt_fortune->getStatement();
|
pstmt = (UPgSqlStatement*) Fortune::pstmt_fortune->getStatement();
|
||||||
|
|
||||||
((UPgSqlStatement*)pstmt)->prepareStatement(pdrv);
|
pstmt->prepareStatement(pdrv);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_fortune() { Fortune::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
Fortune::doQuery(handle_query);
|
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(pkey, UString(U_CONSTANT_TO_PARAM("message")));
|
||||||
U_NEW_STRING(pvalue, UString(U_CONSTANT_TO_PARAM("Hello, World!")));
|
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
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#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"
|
#include "world.h"
|
||||||
|
|
||||||
|
char World::wbuffer[18000];
|
||||||
char* World::pwbuffer;
|
char* World::pwbuffer;
|
||||||
World* World::pworld_query;
|
World* World::pworld_query;
|
||||||
uint32_t World::rnum;
|
uint32_t World::rnum;
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mdb() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "fortuneNoSql.h"
|
#include "fortuneNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mfortune() { FortuneNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mquery() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mupdate() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
||||||
|
|
|
@ -6,21 +6,16 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
static void usp_fork_query() { World::handlerForkSql(); }
|
static void usp_fork_query() { World::handlerForkSql(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_query() { World::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
|
||||||
|
|
||||||
World::initResult(num_queries);
|
|
||||||
|
|
||||||
(void) World::pstmt_query->asyncPipelineMode(World::handlerResultSql);
|
(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)
|
for (uint32_t i = 0; i < num_queries; ++i)
|
||||||
{
|
{
|
||||||
World::pworld_query->id = World::rnumber[i];
|
World::pworld_query->id = World::rnumber[i];
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rdb() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
||||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "fortuneNoSql.h"
|
#include "fortuneNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rfortune() { FortuneNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rquery() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rupdate() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
||||||
|
|
|
@ -28,16 +28,24 @@ static void usp_fork_update()
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
-->
|
||||||
|
<!--#vcode
|
||||||
|
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (num_queries >= 20 &&
|
||||||
|
UServer_Base::startParallelization())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
uint32_t i, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
World::initResult();
|
||||||
|
|
||||||
World::initResult(num_queries);
|
|
||||||
|
|
||||||
if (UOrmDriver::isAsyncPipelineModeAvaliable() == false)
|
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];
|
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");
|
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++ = '(';
|
*pquery++ = '(';
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ public:
|
||||||
bfirst_pass =
|
bfirst_pass =
|
||||||
is_html =
|
is_html =
|
||||||
test_if_html =
|
test_if_html =
|
||||||
|
bhttp_header_empty =
|
||||||
bpreprocessing_failed = false;
|
bpreprocessing_failed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,6 +467,9 @@ public:
|
||||||
|
|
||||||
setDirectiveItem(directive, U_CONSTANT_SIZE("header"));
|
setDirectiveItem(directive, U_CONSTANT_SIZE("header"));
|
||||||
|
|
||||||
|
if (token.empty()) bhttp_header_empty = true;
|
||||||
|
else
|
||||||
|
{
|
||||||
// NB: we use insert because the possibility of UHTTP::callService() (see chat.usp)...
|
// 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);
|
||||||
|
@ -490,6 +494,7 @@ public:
|
||||||
|
|
||||||
(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)
|
else if (strncmp(directive, U_CONSTANT_TO_PARAM("number")) == 0)
|
||||||
{
|
{
|
||||||
U_INTERNAL_ASSERT_EQUALS(bfirst_pass, false)
|
U_INTERNAL_ASSERT_EQUALS(bfirst_pass, false)
|
||||||
|
@ -834,8 +839,9 @@ loop: distance = t.getDistance();
|
||||||
|
|
||||||
if (http_header.empty())
|
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 (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...
|
// 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;
|
UString pinclude, usp, token, output0, output1, declaration, vcode, http_header, sseloop, vars;
|
||||||
const char* basename_ptr;
|
const char* basename_ptr;
|
||||||
uint32_t basename_sz;
|
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)
|
U_DISALLOW_COPY_AND_ASSIGN(Application)
|
||||||
};
|
};
|
||||||
|
|
|
@ -112,55 +112,70 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* pwbuffer;
|
static char* pwbuffer;
|
||||||
|
static char wbuffer[18000];
|
||||||
static uint32_t rnum, rnumber[500];
|
static uint32_t rnum, rnumber[500];
|
||||||
|
|
||||||
static World* pworld_query;
|
static World* pworld_query;
|
||||||
static UOrmSession* psql_query;
|
static UOrmSession* psql_query;
|
||||||
static UOrmStatement* pstmt_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()
|
static void endResult()
|
||||||
{
|
{
|
||||||
U_TRACE_NO_PARAM(0, "World::endResult()")
|
U_TRACE_NO_PARAM(0, "World::endResult()")
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
|
||||||
|
|
||||||
*(pwbuffer-1) = ']';
|
*(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()
|
static void endOneResult()
|
||||||
{
|
{
|
||||||
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
*pwbuffer = '}';
|
||||||
|
|
||||||
*pwbuffer++ = '}';
|
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer+1);
|
||||||
|
|
||||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handlerOneResult(uint32_t uid, uint32_t random)
|
static void handlerOneResult(uint32_t uid, uint32_t random)
|
||||||
{
|
{
|
||||||
U_TRACE(0, "World::handlerOneResult(%u,%u)", uid, 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'));
|
pwbuffer[4] = ':';
|
||||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
|
||||||
|
|
||||||
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, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
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)
|
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('}',','));
|
u_put_unalignedp16(pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||||
pwbuffer += 2;
|
pwbuffer += 2;
|
||||||
|
@ -200,11 +223,9 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
||||||
|
|
||||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
initResult();
|
||||||
|
|
||||||
initResult(num_queries);
|
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_queries; ++i)
|
|
||||||
{
|
{
|
||||||
handlerUpdateNoSql(i);
|
handlerUpdateNoSql(i);
|
||||||
|
|
||||||
|
|
|
@ -24,17 +24,18 @@ public:
|
||||||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
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'));
|
World::pwbuffer[4] = ':';
|
||||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
|
||||||
|
|
||||||
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, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||||
World::pwbuffer += 16;
|
World::pwbuffer += 16;
|
||||||
|
|
||||||
|
uint32_t sz = str_rnumber->size();
|
||||||
|
|
||||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||||
World::pwbuffer += sz;
|
World::pwbuffer += sz;
|
||||||
|
|
||||||
|
@ -45,7 +46,24 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::handlerResult(%u)", uid)
|
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('}',','));
|
u_put_unalignedp16(World::pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||||
World::pwbuffer += 2;
|
World::pwbuffer += 2;
|
||||||
|
@ -55,11 +73,13 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::doOneQuery(%p)", handlerQuery)
|
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();
|
World::endOneResult();
|
||||||
}
|
}
|
||||||
|
@ -68,11 +88,9 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::doQuery(%p)", handlerQuery)
|
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, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_queries; ++i)
|
|
||||||
{
|
{
|
||||||
handlerQuery(World::rnumber[i]);
|
handlerQuery(World::rnumber[i]);
|
||||||
|
|
||||||
|
|
|
@ -11727,13 +11727,18 @@ next: if (*ptr1 == '?')
|
||||||
|
|
||||||
usp->runDynamicPage(0);
|
usp->runDynamicPage(0);
|
||||||
|
|
||||||
|
if (U_ClientImage_parallelization < U_PARALLELIZATION_PARENT)
|
||||||
|
{
|
||||||
setDynamicResponse();
|
setDynamicResponse();
|
||||||
|
|
||||||
(void) UServer_Base::pClientImage->writeResponse();
|
(void) UServer_Base::pClientImage->writeResponse();
|
||||||
|
|
||||||
|
if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) UServer_Base::endNewChild(); // no return
|
||||||
|
|
||||||
U_RETURN(true);
|
U_RETURN(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
U_RETURN(false);
|
U_RETURN(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
017A
|
0181
|
||||||
|
|
|
@ -7,15 +7,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
|
|
||||||
static UCache* cache;
|
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()
|
static void usp_init_cached_worlds()
|
||||||
{
|
{
|
||||||
U_TRACE(5, "::usp_init_cached_worlds()")
|
U_TRACE(5, "::usp_init_cached_worlds()")
|
||||||
|
@ -49,17 +40,16 @@ static void usp_init_cached_worlds()
|
||||||
World::handlerFork();
|
World::handlerFork();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
static void handlerQuery(uint32_t i)
|
||||||
static void usp_end_cached_worlds()
|
|
||||||
{
|
{
|
||||||
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
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(handlerQuery);
|
World::doUpdateNoSql(handlerQuery);
|
||||||
|
|
|
@ -6,8 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
static UOrmDriver* pdrv;
|
static UOrmDriverPgSql* pdrv;
|
||||||
static USqlStatement* pstmt;
|
static UPgSqlStatement* pstmt;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void usp_fork_db()
|
static void usp_fork_db()
|
||||||
|
@ -19,32 +19,27 @@ static void usp_fork_db()
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
if (UOrmDriver::isPGSQL())
|
if (UOrmDriver::isPGSQL())
|
||||||
{
|
{
|
||||||
pdrv = World::psql_query->getDriver();
|
pdrv = (UOrmDriverPgSql*) World::psql_query->getDriver();
|
||||||
pstmt = World::pstmt_query->getStatement();
|
pstmt = (UPgSqlStatement*) World::pstmt_query->getStatement();
|
||||||
|
|
||||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_db() { World::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
World::initOneResult();
|
||||||
|
|
||||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||||
|
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
if (pdrv)
|
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(PQnfields(res), 1)
|
||||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
static void usp_fork_edb() { WorldNoSql::handlerForkElasticSearch(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_edb() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
static void usp_fork_equery() { WorldNoSql::handlerForkElasticSearch(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_equery() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryElasticSearch);
|
||||||
|
|
|
@ -20,13 +20,8 @@ static void usp_fork_eupdate()
|
||||||
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
WorldNoSql::pbuffer2 = WorldNoSql::es_buffer2 + U_CONSTANT_SIZE("{\"doc\":{\"_id\":\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_eupdate() { WorldNoSql::handlerEndElasticSearch(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateElasticSearch);
|
||||||
|
|
|
@ -139,7 +139,7 @@ public:
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
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, 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+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
|
||||||
|
|
|
@ -7,8 +7,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
|
|
||||||
static vPF handle_query;
|
static vPF handle_query;
|
||||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
static UOrmDriver* pdrv;
|
static UOrmDriverPgSql* pdrv;
|
||||||
static USqlStatement* pstmt;
|
static UPgSqlStatement* pstmt;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void handlerQuery()
|
static void handlerQuery()
|
||||||
|
@ -33,7 +33,7 @@ static void handlerQueryPGSQL()
|
||||||
int sz;
|
int sz;
|
||||||
char* id;
|
char* id;
|
||||||
char* ptr;
|
char* ptr;
|
||||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
PGresult* res = pdrv->execPrepared(pstmt);
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 2)
|
||||||
|
|
||||||
|
@ -62,17 +62,13 @@ static void usp_fork_fortune()
|
||||||
handle_query = handlerQueryPGSQL;
|
handle_query = handlerQueryPGSQL;
|
||||||
|
|
||||||
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
# ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||||
pdrv = Fortune::psql_fortune->getDriver();
|
pdrv = (UOrmDriverPgSql*) Fortune::psql_fortune->getDriver();
|
||||||
pstmt = Fortune::pstmt_fortune->getStatement();
|
pstmt = (UPgSqlStatement*) Fortune::pstmt_fortune->getStatement();
|
||||||
|
|
||||||
((UPgSqlStatement*)pstmt)->prepareStatement(pdrv);
|
pstmt->prepareStatement(pdrv);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_fortune() { Fortune::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
Fortune::doQuery(handle_query);
|
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(pkey, UString(U_CONSTANT_TO_PARAM("message")));
|
||||||
U_NEW_STRING(pvalue, UString(U_CONSTANT_TO_PARAM("Hello, World!")));
|
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
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#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"
|
#include "world.h"
|
||||||
|
|
||||||
|
char World::wbuffer[18000];
|
||||||
char* World::pwbuffer;
|
char* World::pwbuffer;
|
||||||
World* World::pworld_query;
|
World* World::pworld_query;
|
||||||
uint32_t World::rnum;
|
uint32_t World::rnum;
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mdb() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mdb() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "fortuneNoSql.h"
|
#include "fortuneNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mfortune() { FortuneNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mfortune() { FortuneNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
Fortune::doQuery(FortuneNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mquery() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mquery() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryMongoDB);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
static void usp_fork_mupdate() { WorldNoSql::handlerForkMongoDB(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_mupdate() { WorldNoSql::handlerEndMongoDB(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateMongoDB);
|
||||||
|
|
|
@ -6,21 +6,16 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
static void usp_fork_query() { World::handlerForkSql(); }
|
static void usp_fork_query() { World::handlerForkSql(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_query() { World::handlerEndSql(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
|
||||||
|
|
||||||
World::initResult(num_queries);
|
|
||||||
|
|
||||||
(void) World::pstmt_query->asyncPipelineMode(World::handlerResultSql);
|
(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)
|
for (uint32_t i = 0; i < num_queries; ++i)
|
||||||
{
|
{
|
||||||
World::pworld_query->id = World::rnumber[i];
|
World::pworld_query->id = World::rnumber[i];
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rdb() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rdb() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
WorldNoSql::doOneQuery(WorldNoSql::handlerQueryREDIS);
|
||||||
|
|
|
@ -6,10 +6,6 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "fortuneNoSql.h"
|
#include "fortuneNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
static void usp_fork_rfortune() { FortuneNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rfortune() { FortuneNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
Fortune::doQuery(FortuneNoSql::handlerQueryREDIS);
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rquery() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rquery() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
WorldNoSql::doQuery(WorldNoSql::handlerQueryREDIS);
|
||||||
|
|
|
@ -6,13 +6,8 @@ TechEmpower Web Framework Benchmarks
|
||||||
#include "worldNoSql.h"
|
#include "worldNoSql.h"
|
||||||
|
|
||||||
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
static void usp_fork_rupdate() { WorldNoSql::handlerForkREDIS(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static void usp_end_rupdate() { WorldNoSql::handlerEndREDIS(); }
|
|
||||||
#endif
|
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
World::doUpdateNoSql(WorldNoSql::handlerUpdateREDIS);
|
||||||
|
|
|
@ -28,16 +28,24 @@ static void usp_fork_update()
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
<!--#header
|
<!--#header
|
||||||
Content-Type: application/json
|
-->
|
||||||
|
<!--#vcode
|
||||||
|
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (num_queries >= 20 &&
|
||||||
|
UServer_Base::startParallelization())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
-->
|
-->
|
||||||
<!--#code
|
<!--#code
|
||||||
uint32_t i, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
World::initResult();
|
||||||
|
|
||||||
World::initResult(num_queries);
|
|
||||||
|
|
||||||
if (UOrmDriver::isAsyncPipelineModeAvaliable() == false)
|
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];
|
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");
|
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++ = '(';
|
*pquery++ = '(';
|
||||||
|
|
||||||
|
|
|
@ -112,55 +112,70 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* pwbuffer;
|
static char* pwbuffer;
|
||||||
|
static char wbuffer[18000];
|
||||||
static uint32_t rnum, rnumber[500];
|
static uint32_t rnum, rnumber[500];
|
||||||
|
|
||||||
static World* pworld_query;
|
static World* pworld_query;
|
||||||
static UOrmSession* psql_query;
|
static UOrmSession* psql_query;
|
||||||
static UOrmStatement* pstmt_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()
|
static void endResult()
|
||||||
{
|
{
|
||||||
U_TRACE_NO_PARAM(0, "World::endResult()")
|
U_TRACE_NO_PARAM(0, "World::endResult()")
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
|
||||||
|
|
||||||
*(pwbuffer-1) = ']';
|
*(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()
|
static void endOneResult()
|
||||||
{
|
{
|
||||||
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
U_TRACE_NO_PARAM(0, "World::endOneResult()")
|
||||||
|
|
||||||
U_INTERNAL_ASSERT_POINTER(pwbuffer)
|
*pwbuffer = '}';
|
||||||
|
|
||||||
*pwbuffer++ = '}';
|
UClientImage_Base::wbuffer->setConstant(wbuffer, pwbuffer-wbuffer+1);
|
||||||
|
|
||||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handlerOneResult(uint32_t uid, uint32_t random)
|
static void handlerOneResult(uint32_t uid, uint32_t random)
|
||||||
{
|
{
|
||||||
U_TRACE(0, "World::handlerOneResult(%u,%u)", uid, 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'));
|
pwbuffer[4] = ':';
|
||||||
u_put_unalignedp16(pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
|
||||||
|
|
||||||
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, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
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)
|
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('}',','));
|
u_put_unalignedp16(pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||||
pwbuffer += 2;
|
pwbuffer += 2;
|
||||||
|
@ -200,11 +223,9 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
U_TRACE(0, "World::doUpdateNoSql(%p)", handlerUpdateNoSql)
|
||||||
|
|
||||||
uint32_t num_queries = UHTTP::getFormFirstNumericValue(1, 500);
|
initResult();
|
||||||
|
|
||||||
initResult(num_queries);
|
for (uint32_t i = 0, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_queries; ++i)
|
|
||||||
{
|
{
|
||||||
handlerUpdateNoSql(i);
|
handlerUpdateNoSql(i);
|
||||||
|
|
||||||
|
|
|
@ -24,17 +24,18 @@ public:
|
||||||
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
U_INTERNAL_ASSERT_POINTER(str_rnumber)
|
||||||
U_INTERNAL_ASSERT_POINTER(World::pwbuffer)
|
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'));
|
World::pwbuffer[4] = ':';
|
||||||
u_put_unalignedp16(World::pwbuffer+4, U_MULTICHAR_CONSTANT16('"',':'));
|
|
||||||
|
|
||||||
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, U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
|
||||||
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
u_put_unalignedp64(World::pwbuffer+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
|
||||||
World::pwbuffer += 16;
|
World::pwbuffer += 16;
|
||||||
|
|
||||||
|
uint32_t sz = str_rnumber->size();
|
||||||
|
|
||||||
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
(void) memcpy(World::pwbuffer, str_rnumber->data(), sz);
|
||||||
World::pwbuffer += sz;
|
World::pwbuffer += sz;
|
||||||
|
|
||||||
|
@ -45,7 +46,24 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::handlerResult(%u)", uid)
|
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('}',','));
|
u_put_unalignedp16(World::pwbuffer, U_MULTICHAR_CONSTANT16('}',','));
|
||||||
World::pwbuffer += 2;
|
World::pwbuffer += 2;
|
||||||
|
@ -55,11 +73,13 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::doOneQuery(%p)", handlerQuery)
|
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();
|
World::endOneResult();
|
||||||
}
|
}
|
||||||
|
@ -68,11 +88,9 @@ public:
|
||||||
{
|
{
|
||||||
U_TRACE(0, "WorldNoSql::doQuery(%p)", handlerQuery)
|
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, n = UHTTP::getFormFirstNumericValue(1, 500); i < n; ++i)
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_queries; ++i)
|
|
||||||
{
|
{
|
||||||
handlerQuery(World::rnumber[i]);
|
handlerQuery(World::rnumber[i]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user