query.usp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <!--#
  2. Test type 3: Multiple database queries
  3. TechEmpower Web Framework Benchmarks
  4. -->
  5. <!--#declaration
  6. #include "world.h"
  7. static World* pworld_query;
  8. static UOrmSession* psql_query;
  9. static UOrmStatement* pstmt_query;
  10. static UVector<World*>* pvworld_query;
  11. #ifndef AS_cpoll_cppsp_DO
  12. static UValue* pvalue;
  13. #endif
  14. static void usp_fork_query()
  15. {
  16. U_TRACE(5, "::usp_fork_query()")
  17. psql_query = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world")));
  18. if (psql_query->isReady())
  19. {
  20. pstmt_query = U_NEW(UOrmStatement(*psql_query, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?")));
  21. if (pstmt_query == 0) U_ERROR("usp_fork_query(): we cound't connect to db");
  22. if (UOrmDriver::isPGSQL()) *psql_query << "BEGIN TRANSACTION";
  23. pworld_query = U_NEW(World);
  24. pstmt_query->use( pworld_query->id);
  25. pstmt_query->into(pworld_query->randomNumber);
  26. pvworld_query = U_NEW(UVector<World*>(500));
  27. # ifndef AS_cpoll_cppsp_DO
  28. pvalue = U_NEW(UValue(ARRAY_VALUE));
  29. # endif
  30. }
  31. }
  32. #ifdef DEBUG
  33. static void usp_end_query()
  34. {
  35. U_TRACE(5, "::usp_end_query()")
  36. if (pstmt_query)
  37. {
  38. delete pstmt_query;
  39. delete psql_query;
  40. delete pvworld_query;
  41. delete pworld_query;
  42. # ifndef AS_cpoll_cppsp_DO
  43. delete pvalue;
  44. # endif
  45. }
  46. }
  47. #endif
  48. -->
  49. <!--#args
  50. queries;
  51. -->
  52. <!--#header
  53. Content-Type: application/json; charset=UTF-8
  54. -->
  55. <!--#code
  56. int i = 0, num_queries = queries.strtol();
  57. if (num_queries < 1) num_queries = 1;
  58. else if (num_queries > 500) num_queries = 500;
  59. #ifdef AS_cpoll_cppsp_DO
  60. USP_PUTS_CHAR('[');
  61. #endif
  62. while (true)
  63. {
  64. pworld_query->id = u_get_num_random(10000);
  65. pstmt_query->execute();
  66. #ifdef AS_cpoll_cppsp_DO
  67. USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_query->id, pworld_query->randomNumber);
  68. #endif
  69. pvworld_query->push_back(U_NEW(World(*pworld_query)));
  70. if (++i == num_queries) break;
  71. #ifdef AS_cpoll_cppsp_DO
  72. USP_PUTS_CHAR(',');
  73. #endif
  74. }
  75. #ifdef AS_cpoll_cppsp_DO
  76. USP_PUTS_CHAR(']');
  77. #else
  78. USP_JSON_stringify(*pvalue, UVector<World*>, *pvworld_query);
  79. pvalue->clear();
  80. #endif
  81. pvworld_query->clear();
  82. -->