123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <!--#
- Test type 3: Multiple database queries
- TechEmpower Web Framework Benchmarks
- -->
- <!--#declaration
- #include "world.h"
- static World* pworld_query;
- static UOrmSession* psql_query;
- static UOrmStatement* pstmt_query;
- static UVector<World*>* pvworld_query;
- #ifndef AS_cpoll_cppsp_DO
- static UValue* pvalue;
- #endif
- static void usp_fork_query()
- {
- U_TRACE(5, "::usp_fork_query()")
- psql_query = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world")));
- if (psql_query->isReady())
- {
- pstmt_query = U_NEW(UOrmStatement(*psql_query, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?")));
- if (pstmt_query == 0) U_ERROR("usp_fork_query(): we cound't connect to db");
- if (UOrmDriver::isPGSQL()) *psql_query << "BEGIN TRANSACTION";
- pworld_query = U_NEW(World);
- pstmt_query->use( pworld_query->id);
- pstmt_query->into(pworld_query->randomNumber);
- pvworld_query = U_NEW(UVector<World*>(500));
- # ifndef AS_cpoll_cppsp_DO
- pvalue = U_NEW(UValue(ARRAY_VALUE));
- # endif
- }
- }
- #ifdef DEBUG
- static void usp_end_query()
- {
- U_TRACE(5, "::usp_end_query()")
- if (pstmt_query)
- {
- delete pstmt_query;
- delete psql_query;
- delete pvworld_query;
- delete pworld_query;
- # ifndef AS_cpoll_cppsp_DO
- delete pvalue;
- # endif
- }
- }
- #endif
- -->
- <!--#args
- queries;
- -->
- <!--#header
- Content-Type: application/json; charset=UTF-8
- -->
- <!--#code
- int i = 0, num_queries = queries.strtol();
- if (num_queries < 1) num_queries = 1;
- else if (num_queries > 500) num_queries = 500;
- #ifdef AS_cpoll_cppsp_DO
- USP_PUTS_CHAR('[');
- #endif
- while (true)
- {
- pworld_query->id = u_get_num_random(10000);
- pstmt_query->execute();
- #ifdef AS_cpoll_cppsp_DO
- USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_query->id, pworld_query->randomNumber);
- #endif
- pvworld_query->push_back(U_NEW(World(*pworld_query)));
- if (++i == num_queries) break;
- #ifdef AS_cpoll_cppsp_DO
- USP_PUTS_CHAR(',');
- #endif
- }
- #ifdef AS_cpoll_cppsp_DO
- USP_PUTS_CHAR(']');
- #else
- USP_JSON_stringify(*pvalue, UVector<World*>, *pvworld_query);
- pvalue->clear();
- #endif
- pvworld_query->clear();
- -->
|