mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
sync
This commit is contained in:
parent
2e5c5f3fc0
commit
b24a4c9b48
|
@ -332,20 +332,19 @@ public:
|
|||
|
||||
int r = *(const unsigned char*)str - *(const unsigned char*)s;
|
||||
|
||||
if (r == 0)
|
||||
if (r) U_RETURN(r);
|
||||
|
||||
uint32_t len = U_min(_length, n);
|
||||
|
||||
if (len > 1)
|
||||
{
|
||||
uint32_t len = U_min(_length, n);
|
||||
r = memcmp(str+1, s+1, len-1);
|
||||
|
||||
if (len > 1)
|
||||
{
|
||||
r = memcmp(str+1, s+1, len-1);
|
||||
|
||||
if (r) U_RETURN(r);
|
||||
}
|
||||
|
||||
r = _length < n ? -1 : _length > n; // _length - n;
|
||||
if (r) U_RETURN(r);
|
||||
}
|
||||
|
||||
r = _length < n ? -1 : _length > n; // _length - n;
|
||||
|
||||
U_RETURN(r);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,27 @@ TechEmpower Web Framework Benchmarks
|
|||
<!--#declaration
|
||||
#include "world.h"
|
||||
|
||||
static void usp_fork_db() { World::handlerForkSql(); }
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void usp_fork_db()
|
||||
{
|
||||
U_TRACE_NO_PARAM(5, "::usp_fork_db()")
|
||||
|
||||
World::handlerForkSql();
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (UOrmDriver::isPGSQL())
|
||||
{
|
||||
pdrv = World::psql_query->getDriver();
|
||||
pstmt = World::pstmt_query->getStatement();
|
||||
|
||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_db() { World::handlerEndSql(); }
|
||||
|
@ -15,13 +35,33 @@ static void usp_end_db() { World::handlerEndSql(); }
|
|||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::pworld_query->id = World::rnumber[0];
|
||||
|
||||
(void) World::pstmt_query->execute();
|
||||
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
|
||||
World::handlerOneResult(World::rnumber[0], World::pworld_query->randomNumber);
|
||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (pdrv)
|
||||
{
|
||||
((UPgSqlStatement*)pstmt)->setBindParam();
|
||||
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
|
||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||
|
||||
char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
|
||||
|
||||
World::handlerOneResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
|
||||
|
||||
U_SYSCALL_VOID(PQclear, "%p", res);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
(void) World::pstmt_query->execute();
|
||||
|
||||
World::handlerOneResult(World::pworld_query->id, World::pworld_query->randomNumber);
|
||||
}
|
||||
|
||||
World::endOneResult();
|
||||
-->
|
||||
|
|
|
@ -121,7 +121,7 @@ public:
|
|||
|
||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
||||
|
||||
Fortune* elem = pvfortune->at(1+i);
|
||||
Fortune* elem = pvfortune->at(i);
|
||||
|
||||
elem->id = _id;
|
||||
|
||||
|
@ -141,16 +141,30 @@ public:
|
|||
|
||||
char* pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
|
||||
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"));
|
||||
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
|
||||
u_put_unalignedp64(pwbuffer+24, U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
|
||||
u_put_unalignedp64(pwbuffer+32, U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
|
||||
u_put_unalignedp64(pwbuffer+40, U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
|
||||
u_put_unalignedp64(pwbuffer+48, U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
|
||||
u_put_unalignedp64(pwbuffer+56, U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+64, U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
|
||||
u_put_unalignedp64(pwbuffer+72, U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
|
||||
u_put_unalignedp64(pwbuffer+80, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
|
||||
u_put_unalignedp64(pwbuffer+88, U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
|
||||
u_put_unalignedp64(pwbuffer+96, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
|
||||
u_put_unalignedp16(pwbuffer+104, U_MULTICHAR_CONSTANT16('r','>'));
|
||||
|
||||
Fortune* elem = pvfortune->at(0);
|
||||
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
|
||||
|
||||
handlerQuery();
|
||||
|
||||
Fortune* elem = pvfortune->last();
|
||||
|
||||
elem->id = 0;
|
||||
elem->message.rep->replace(U_CONSTANT_TO_PARAM("Additional fortune added at request time."));
|
||||
|
||||
handlerQuery();
|
||||
|
||||
pvfortune->sort(Fortune::cmp_obj);
|
||||
|
||||
for (uint32_t sz, i = 0, n = pvfortune->size(); i < n; ++i)
|
||||
|
@ -171,10 +185,12 @@ public:
|
|||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','d','>','<','/','t'));
|
||||
u_put_unalignedp16(pwbuffer+8, U_MULTICHAR_CONSTANT16('r','>'));
|
||||
pwbuffer += 10;
|
||||
pwbuffer += 8+2;
|
||||
}
|
||||
|
||||
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("</table></body></html>"));
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','a','b','l','e','>'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('<','/','b','o','d','y','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('/','h','t','m','l','>','\0','\0'));
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
|
||||
|
||||
|
@ -193,7 +209,7 @@ public:
|
|||
|
||||
for (uint32_t i = 0; i < 13; ++i)
|
||||
{
|
||||
U_NEW(Fortune, elem, Fortune(i));
|
||||
U_NEW(Fortune, elem, Fortune(i+1));
|
||||
|
||||
pvfortune->push(elem);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
#include <ulib/orm/orm_driver.h>
|
||||
#include <ulib/net/server/client_image.h>
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
# include <ulib/orm/driver/orm_driver_pgsql.h>
|
||||
#endif
|
||||
|
||||
class World {
|
||||
public:
|
||||
// Check for memory error
|
||||
|
|
|
@ -379,7 +379,7 @@ bool UPgSqlStatement::setBindParam(UOrmDriver* pdrv)
|
|||
|
||||
num_bind_result = U_SYSCALL(PQnfields, "%p", res);
|
||||
|
||||
# ifdef DEBUG
|
||||
# ifdef DEBUG
|
||||
uint32_t i;
|
||||
Oid paramtype;
|
||||
|
||||
|
@ -400,7 +400,7 @@ bool UPgSqlStatement::setBindParam(UOrmDriver* pdrv)
|
|||
|
||||
U_INTERNAL_DUMP("result[%u] (%s): size = %d type = %d format = %d", i, fname, fsize, paramtype, fformat)
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
|
||||
if (num_bind_param)
|
||||
|
|
|
@ -1 +1 @@
|
|||
0173
|
||||
017A
|
||||
|
|
|
@ -83,7 +83,7 @@ ADD ./ /ulib
|
|||
WORKDIR /ulib
|
||||
|
||||
ENV MONGODB_HOST=tfb-database
|
||||
ENV UMEMPOOL="96,0,0,47,16401,-14,-20,-18,26"
|
||||
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
||||
|
|
|
@ -79,7 +79,7 @@ WORKDIR /ulib
|
|||
|
||||
ENV ORM_DRIVER="mysql"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=hello_world"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
||||
|
|
|
@ -78,7 +78,7 @@ ADD ./ /ulib
|
|||
WORKDIR /ulib
|
||||
|
||||
ENV ORM_DRIVER="pgsql"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
|
|
|
@ -78,7 +78,7 @@ ADD ./ /ulib
|
|||
WORKDIR /ulib
|
||||
|
||||
ENV ORM_DRIVER="pgsql"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
|
|
|
@ -5,7 +5,27 @@ TechEmpower Web Framework Benchmarks
|
|||
<!--#declaration
|
||||
#include "world.h"
|
||||
|
||||
static void usp_fork_db() { World::handlerForkSql(); }
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
static UOrmDriver* pdrv;
|
||||
static USqlStatement* pstmt;
|
||||
#endif
|
||||
|
||||
static void usp_fork_db()
|
||||
{
|
||||
U_TRACE_NO_PARAM(5, "::usp_fork_db()")
|
||||
|
||||
World::handlerForkSql();
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (UOrmDriver::isPGSQL())
|
||||
{
|
||||
pdrv = World::psql_query->getDriver();
|
||||
pstmt = World::pstmt_query->getStatement();
|
||||
|
||||
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static void usp_end_db() { World::handlerEndSql(); }
|
||||
|
@ -15,13 +35,33 @@ static void usp_end_db() { World::handlerEndSql(); }
|
|||
Content-Type: application/json
|
||||
-->
|
||||
<!--#code
|
||||
World::pworld_query->id = World::rnumber[0];
|
||||
|
||||
(void) World::pstmt_query->execute();
|
||||
|
||||
World::pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
|
||||
World::handlerOneResult(World::rnumber[0], World::pworld_query->randomNumber);
|
||||
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
if (pdrv)
|
||||
{
|
||||
((UPgSqlStatement*)pstmt)->setBindParam();
|
||||
|
||||
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
|
||||
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
|
||||
|
||||
char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
|
||||
|
||||
World::handlerOneResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
|
||||
|
||||
U_SYSCALL_VOID(PQclear, "%p", res);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
(void) World::pstmt_query->execute();
|
||||
|
||||
World::handlerOneResult(World::pworld_query->id, World::pworld_query->randomNumber);
|
||||
}
|
||||
|
||||
World::endOneResult();
|
||||
-->
|
||||
|
|
|
@ -121,7 +121,7 @@ public:
|
|||
|
||||
U_INTERNAL_ASSERT_POINTER(pvfortune)
|
||||
|
||||
Fortune* elem = pvfortune->at(1+i);
|
||||
Fortune* elem = pvfortune->at(i);
|
||||
|
||||
elem->id = _id;
|
||||
|
||||
|
@ -141,16 +141,30 @@ public:
|
|||
|
||||
char* pwbuffer = UClientImage_Base::wbuffer->pend();
|
||||
|
||||
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"));
|
||||
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
|
||||
u_put_unalignedp64(pwbuffer+24, U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
|
||||
u_put_unalignedp64(pwbuffer+32, U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
|
||||
u_put_unalignedp64(pwbuffer+40, U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
|
||||
u_put_unalignedp64(pwbuffer+48, U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
|
||||
u_put_unalignedp64(pwbuffer+56, U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+64, U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
|
||||
u_put_unalignedp64(pwbuffer+72, U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
|
||||
u_put_unalignedp64(pwbuffer+80, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
|
||||
u_put_unalignedp64(pwbuffer+88, U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
|
||||
u_put_unalignedp64(pwbuffer+96, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
|
||||
u_put_unalignedp16(pwbuffer+104, U_MULTICHAR_CONSTANT16('r','>'));
|
||||
|
||||
Fortune* elem = pvfortune->at(0);
|
||||
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
|
||||
|
||||
handlerQuery();
|
||||
|
||||
Fortune* elem = pvfortune->last();
|
||||
|
||||
elem->id = 0;
|
||||
elem->message.rep->replace(U_CONSTANT_TO_PARAM("Additional fortune added at request time."));
|
||||
|
||||
handlerQuery();
|
||||
|
||||
pvfortune->sort(Fortune::cmp_obj);
|
||||
|
||||
for (uint32_t sz, i = 0, n = pvfortune->size(); i < n; ++i)
|
||||
|
@ -171,10 +185,12 @@ public:
|
|||
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','d','>','<','/','t'));
|
||||
u_put_unalignedp16(pwbuffer+8, U_MULTICHAR_CONSTANT16('r','>'));
|
||||
pwbuffer += 10;
|
||||
pwbuffer += 8+2;
|
||||
}
|
||||
|
||||
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("</table></body></html>"));
|
||||
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','a','b','l','e','>'));
|
||||
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('<','/','b','o','d','y','>','<'));
|
||||
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('/','h','t','m','l','>','\0','\0'));
|
||||
|
||||
UClientImage_Base::wbuffer->size_adjust(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
|
||||
|
||||
|
@ -193,7 +209,7 @@ public:
|
|||
|
||||
for (uint32_t i = 0; i < 13; ++i)
|
||||
{
|
||||
U_NEW(Fortune, elem, Fortune(i));
|
||||
U_NEW(Fortune, elem, Fortune(i+1));
|
||||
|
||||
pvfortune->push(elem);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
#include <ulib/orm/orm_driver.h>
|
||||
#include <ulib/net/server/client_image.h>
|
||||
|
||||
#ifdef U_STATIC_ORM_DRIVER_PGSQL
|
||||
# include <ulib/orm/driver/orm_driver_pgsql.h>
|
||||
#endif
|
||||
|
||||
class World {
|
||||
public:
|
||||
// Check for memory error
|
||||
|
|
Loading…
Reference in New Issue
Block a user