transactd 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -0,0 +1,333 @@
1
+ #ifndef BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
2
+ #define BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
3
+ /* =================================================================
4
+ Copyright (C) 20014 BizStation Corp All rights reserved.
5
+
6
+ This program is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU General Public License
8
+ as published by the Free Software Foundation; either version 2
9
+ of the License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
+ 02111-1307, USA.
20
+ ================================================================= */
21
+ #include <mysql.h>
22
+
23
+ namespace bzs
24
+ {
25
+ namespace test
26
+ {
27
+ namespace worker
28
+ {
29
+
30
+ namespace mysql
31
+ {
32
+
33
+ #define USE_SHARED_PREPAREDSTATEMENT
34
+
35
+ #define MYSQL_READ_ONE 10
36
+ #define MYSQL_INSERT_ONE 11
37
+ #define MYSQL_QUERY 12
38
+ #define MYSQL_RECORDSET_COUNT 50
39
+
40
+ class connectParam
41
+ {
42
+ public:
43
+ connectParam(){};
44
+ connectParam(const _TCHAR* host, const _TCHAR* dbname, const _TCHAR* user,
45
+ const _TCHAR* pass = _T(""))
46
+
47
+ {
48
+ port = 0;
49
+ #ifdef _UNICODE
50
+ char tmp[256];
51
+ WideCharToMultiByte(CP_UTF8, 0, host, -1, tmp, 256, NULL, NULL);
52
+ hostname = tmp;
53
+ WideCharToMultiByte(CP_UTF8, 0, dbname, -1, tmp, 256, NULL, NULL);
54
+ database = tmp;
55
+ WideCharToMultiByte(CP_UTF8, 0, user, -1, tmp, 256, NULL, NULL);
56
+ username = tmp;
57
+ WideCharToMultiByte(CP_UTF8, 0, pass, -1, tmp, 256, NULL, NULL);
58
+ passwd = tmp;
59
+ #else
60
+ hostname = host;
61
+ database = dbname;
62
+ username = user;
63
+ passwd = pass;
64
+ #endif
65
+ }
66
+
67
+ std::string hostname;
68
+ std::string username;
69
+ std::string passwd;
70
+ std::string database;
71
+ unsigned long port;
72
+ };
73
+
74
+ const char* readOneQuery = "select * from user where id = ? \n";
75
+ /*const char* queryOneQuery = "select `user`.`id` \n"
76
+ ",`user`.`%s` as `name` \n"
77
+ ",`extention`.`comment` \n"
78
+ ",`groups`.`name` as `group_name` \n"
79
+ " from `user` INNER JOIN `extention` \n"
80
+ " ON `user`.`id` =
81
+ `extention`.`id` \n"
82
+ " LEFT JOIN `groups` \n"
83
+ " ON `user`.`group` =
84
+ `groups`.`code` \n"
85
+ " where `user`.`id` >= ? \n"
86
+ "and `user`.`id` < ?";
87
+ */
88
+ const char* queryOneQuery =
89
+ "select `user`.`id` ,`user`.`%s` as `name`"
90
+ ",`groups`.`name` as `group_name`"
91
+ " from `user` LEFT JOIN `groups` ON `user`.`group` = `groups`.`code`"
92
+ "where `user`.`id` >= ? and `user`.`id` < ?";
93
+
94
+ /*
95
+ const char* queryOneQuery = "select `user`.`id` ,`user`.`%s` as `name`"
96
+ " from `user`"
97
+ " where `user`.`id` >= ? and `user`.`id` < ?";
98
+ */
99
+ class worker : public workerBase
100
+ {
101
+ struct readResult
102
+ {
103
+ int id;
104
+ char name[41];
105
+ int group;
106
+ union
107
+ {
108
+ char tel[43];
109
+ char group_name[43];
110
+ };
111
+ char comment[256];
112
+ };
113
+
114
+ const connectParam& m_parmas;
115
+ MYSQL* m_mysql;
116
+ readResult m_result;
117
+ int m_bindParam;
118
+ int m_bindParam2;
119
+ MYSQL_STMT* m_stmt;
120
+ std::vector<readResult> m_resultset;
121
+
122
+ void bindParam(MYSQL_STMT* stmt)
123
+ {
124
+ if (m_functionNumber == MYSQL_READ_ONE)
125
+ {
126
+ MYSQL_BIND bind[1];
127
+ memset(bind, 0, sizeof(MYSQL_BIND));
128
+ bind[0].buffer_type = MYSQL_TYPE_LONG;
129
+ bind[0].buffer = &m_bindParam;
130
+ bind[0].is_null = 0;
131
+ if (mysql_stmt_bind_param(stmt, bind))
132
+ printf("error: %s\n", mysql_stmt_error(stmt));
133
+ }
134
+ else if (m_functionNumber == MYSQL_QUERY)
135
+ {
136
+ MYSQL_BIND bind[2];
137
+ memset(bind, 0, sizeof(MYSQL_BIND) * 2);
138
+ bind[0].buffer_type = MYSQL_TYPE_LONG;
139
+ bind[0].buffer = &m_bindParam;
140
+ bind[0].is_null = 0;
141
+ bind[1].buffer_type = MYSQL_TYPE_LONG;
142
+ bind[1].buffer = &m_bindParam2;
143
+ bind[1].is_null = 0;
144
+ if (mysql_stmt_bind_param(stmt, bind))
145
+ printf("error: %s\n", mysql_stmt_error(stmt));
146
+ }
147
+ }
148
+
149
+ void bindOutput(MYSQL_STMT* stmt)
150
+ {
151
+
152
+ MYSQL_BIND result[4];
153
+ memset(result, 0, sizeof(MYSQL_BIND) * 4);
154
+
155
+ result[0].buffer_type = MYSQL_TYPE_LONG;
156
+ result[0].buffer = &m_result.id;
157
+ result[0].is_null = 0;
158
+ result[1].buffer_type = MYSQL_TYPE_VAR_STRING;
159
+ result[1].buffer = m_result.name;
160
+ result[1].buffer_length = 41;
161
+ result[1].is_null = 0;
162
+ if (m_functionNumber == MYSQL_QUERY)
163
+ {
164
+ result[2].buffer_type = MYSQL_TYPE_VAR_STRING;
165
+ result[2].buffer = &m_result.comment;
166
+ result[2].buffer_length = 256;
167
+ }
168
+ else
169
+ {
170
+ result[2].buffer_type = MYSQL_TYPE_LONG;
171
+ result[2].buffer = &m_result.group;
172
+ }
173
+ result[2].is_null = 0;
174
+ result[3].buffer_type = MYSQL_TYPE_VAR_STRING;
175
+ result[3].buffer = m_result.tel; // or group_name
176
+ result[3].buffer_length = 43;
177
+ result[3].is_null = 0;
178
+
179
+ if (mysql_stmt_bind_result(stmt, result))
180
+ printf("error: %s\n", mysql_stmt_error(stmt));
181
+ }
182
+
183
+ MYSQL_STMT* init(const char* query)
184
+ {
185
+ #ifdef LINUX
186
+ const char* fd_name = "���O";
187
+ #else
188
+ char fd_name[30];
189
+ WideCharToMultiByte(CP_UTF8, 0, L"���O", -1, fd_name, 30, NULL, NULL);
190
+ #endif
191
+ char tmp[512];
192
+ if (m_functionNumber == MYSQL_QUERY)
193
+ {
194
+ sprintf_s(tmp, 512, query, fd_name);
195
+ query = tmp;
196
+ }
197
+
198
+ MYSQL_STMT* stmt = mysql_stmt_init(m_mysql);
199
+ if (!stmt)
200
+ printf("error: %s\n", mysql_error(m_mysql));
201
+ if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query)))
202
+ printf("error: %s\n", mysql_error(m_mysql));
203
+ bindParam(stmt);
204
+ bindOutput(stmt);
205
+ return stmt;
206
+ }
207
+
208
+ void readOne(MYSQL_STMT* stmt)
209
+ {
210
+ m_bindParam = m_id % 20000 + 1;
211
+ mysql_stmt_execute(stmt);
212
+ int ret;
213
+ ret = mysql_stmt_fetch(stmt);
214
+ if (ret)
215
+ printf("error: %s\n", mysql_error(m_mysql));
216
+ }
217
+
218
+ void insertOne()
219
+ {
220
+ char tmp[256];
221
+ sprintf_s(tmp, 256, "insert into cache (value) values(%d)", m_id);
222
+ int ret;
223
+ ret = mysql_query(m_mysql, tmp);
224
+ if (ret)
225
+ printf("error: %s\n", mysql_error(m_mysql));
226
+ }
227
+
228
+ void queryOne(MYSQL_STMT* stmt)
229
+ {
230
+ int v = rand() % 15000 + 1;
231
+ m_bindParam = v;
232
+ m_bindParam2 = v + MYSQL_RECORDSET_COUNT;
233
+ int ret;
234
+ ret = mysql_stmt_execute(stmt);
235
+ if (ret)
236
+ printf("error: %s\n", mysql_error(m_mysql));
237
+ int count = 0;
238
+ m_resultset.clear();
239
+ while ((ret = mysql_stmt_fetch(stmt)) == 0)
240
+ {
241
+ m_resultset.push_back(m_result);
242
+ ++count;
243
+ }
244
+ if (count != MYSQL_RECORDSET_COUNT)
245
+ printf("query read error! id = %d \n", m_id);
246
+ }
247
+
248
+ public:
249
+ worker(int id, int loopCount, int functionNumber, const connectParam& param,
250
+ boost::barrier& sync)
251
+ : workerBase(id, loopCount, functionNumber, sync), m_parmas(param)
252
+ {
253
+ boost::mutex::scoped_lock lck(m_mutex);
254
+ mysql_thread_init();
255
+
256
+ m_mysql = mysql_init(NULL);
257
+ int v = 1;
258
+ if (NULL == mysql_real_connect(
259
+ m_mysql, m_parmas.hostname.c_str(),
260
+ m_parmas.username.c_str(), m_parmas.passwd.c_str(),
261
+ m_parmas.database.c_str(), m_parmas.port, NULL, 0))
262
+ printf("error: %s\n", mysql_error(m_mysql));
263
+ }
264
+
265
+ void initExecute()
266
+ {
267
+ #ifdef USE_SHARED_PREPAREDSTATEMENT
268
+ if (m_functionNumber == MYSQL_READ_ONE)
269
+ m_stmt = init(readOneQuery);
270
+ else if (m_functionNumber == MYSQL_QUERY)
271
+ m_stmt = init(queryOneQuery);
272
+ #endif
273
+ }
274
+
275
+ void endExecute()
276
+ {
277
+ #ifdef USE_SHARED_PREPAREDSTATEMENT
278
+ if (m_functionNumber != MYSQL_INSERT_ONE)
279
+ mysql_stmt_close(m_stmt);
280
+ #endif
281
+ mysql_close(m_mysql);
282
+ mysql_thread_end();
283
+ }
284
+
285
+ void doExecute()
286
+ {
287
+ if (m_functionNumber == MYSQL_READ_ONE)
288
+ {
289
+ for (int i = 0; i < m_loopCount; ++i)
290
+ {
291
+ #ifndef USE_SHARED_PREPAREDSTATEMENT
292
+ m_stmt = init(readOneQuery);
293
+ #endif
294
+ readOne(m_stmt);
295
+ #ifndef USE_SHARED_PREPAREDSTATEMENT
296
+ mysql_stmt_close(m_stmt);
297
+ #endif
298
+ }
299
+ }
300
+ else if (m_functionNumber == MYSQL_INSERT_ONE)
301
+ {
302
+ for (int i = 0; i < m_loopCount; ++i)
303
+ insertOne();
304
+ }
305
+ else
306
+ {
307
+ for (int i = 0; i < m_loopCount; ++i)
308
+ {
309
+ #ifndef USE_SHARED_PREPAREDSTATEMENT
310
+ m_stmt = init(queryOneQuery);
311
+ #endif
312
+ queryOne(m_stmt);
313
+ #ifndef USE_SHARED_PREPAREDSTATEMENT
314
+ mysql_stmt_close(m_stmt);
315
+ #endif
316
+ }
317
+ }
318
+ }
319
+ };
320
+
321
+ class mysqlInit
322
+ {
323
+ public:
324
+ mysqlInit() { mysql_library_init(0, NULL, NULL); }
325
+ ~mysqlInit() { mysql_library_end(); }
326
+ };
327
+
328
+ } // namespace transactd
329
+ } // namespace worker
330
+ } // namespace test
331
+ } // namespace bzs
332
+
333
+ #endif // BZS_TEST_BENCH_WORKERMYSQLIMPLE_H
@@ -0,0 +1,201 @@
1
+ #ifndef BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H
2
+ #define BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H
3
+ /* =================================================================
4
+ Copyright (C) 20014 BizStation Corp All rights reserved.
5
+
6
+ This program is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU General Public License
8
+ as published by the Free Software Foundation; either version 2
9
+ of the License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
+ 02111-1307, USA.
20
+ ================================================================= */
21
+ #include <bzs/test/transactdBench/workerBase.h>
22
+ #include <bzs/db/protocol/tdap/client/connectionPool.h>
23
+ #include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>
24
+ #include <bzs/example/queryData.h>
25
+ #include <bzs/db/protocol/tdap/client/activeTable.h>
26
+ #include <tchar.h>
27
+ using namespace bzs::db::protocol::tdap::client;
28
+ using namespace bzs::db::protocol::tdap;
29
+
30
+ namespace bzs
31
+ {
32
+ namespace test
33
+ {
34
+ namespace worker
35
+ {
36
+ namespace transactd
37
+ {
38
+
39
+ #define USE_CONNECTION_POOL
40
+ #define TRD_READ_ONE 0
41
+ #define TRD_INSERT_ONE 1
42
+ #define TRD_QUERY 2
43
+ #define TRD_RECORDSET_COUNT 50
44
+
45
+ class worker : public workerBase
46
+ {
47
+ const connectParams& m_parmas;
48
+ #ifdef USE_CONNECTION_POOL
49
+ pooledDbManager m_db_real;
50
+ pooledDbManager* m_db;
51
+ #else
52
+ database_ptr m_db;
53
+
54
+ #endif
55
+ table_ptr m_tb;
56
+ boost::shared_ptr<activeTable> m_atu;
57
+ boost::shared_ptr<activeTable> m_atg;
58
+ boost::shared_ptr<activeTable> m_ate;
59
+ recordset m_rs;
60
+ void readOne(table_ptr& tb)
61
+ {
62
+ int v = (rand() % 15000) + 1;
63
+ tb->setFV((short)0, v);
64
+ tb->seek();
65
+ if (tb->stat() != 0)
66
+ printf("readOne error! stat = %d id = %ld\n", tb->stat(), m_id);
67
+ }
68
+
69
+ void insertOne(table_ptr& tb)
70
+ {
71
+ tb->clearBuffer();
72
+ tb->setFV(1, m_id);
73
+ insertRecord(tb);
74
+ }
75
+
76
+ void queryOne()
77
+ {
78
+ m_rs.clear();
79
+ query q;
80
+ int v = (rand() % 15000) + 1;
81
+ q.select(_T("id"), _T("name"), _T("group"))
82
+ .where(_T("id"), _T("<"), v + TRD_RECORDSET_COUNT);
83
+ m_atu->index(0).keyValue(v).read(m_rs, q);
84
+ q.reset();
85
+
86
+ // m_ate->index(0).join(m_rs,
87
+ // q.select(_T("comment")).optimize(queryBase::joinHasOneOrHasMany),
88
+ // _T("id"));
89
+
90
+ // Join group::name
91
+ /*recordset rs2;
92
+
93
+ q.select(_T("group_name"));
94
+ for (int i=0;i<m_rs.size();++i)
95
+ q.addSeekKeyValuePtr(m_rs[i][(short)0].ptr());
96
+ m_atg->table()->setQuery(&q);
97
+ m_atg->index(0).keyValue(0).read(rs2, q);
98
+ */
99
+ m_atg->index(0).join(m_rs, q.select(_T("group_name")), _T("group"));
100
+ if (m_rs.size() != TRD_RECORDSET_COUNT)
101
+ printf("query read error! id = %d size = %d\n", m_id, m_rs.size());
102
+ }
103
+
104
+ public:
105
+ worker(int id, int loopCount, int functionNumber,
106
+ const connectParams& param, boost::barrier& sync)
107
+ : workerBase(id, loopCount, functionNumber, sync), m_parmas(param)
108
+ {
109
+ m_db = &m_db_real;
110
+ }
111
+
112
+ void initExecute()
113
+ {
114
+ #ifdef USE_CONNECTION_POOL
115
+ m_db->use(&m_parmas);
116
+ const _TCHAR* tbName =
117
+ (m_functionNumber == TRD_READ_ONE) ? _T("user") : _T("cache");
118
+ m_tb = m_db->table(tbName);
119
+ #else
120
+ try
121
+ {
122
+ m_db = createDatabaseObject();
123
+ connectOpen(m_db, m_parmas, true);
124
+ const _TCHAR* tbName =
125
+ (m_functionNumber == TRD_READ_ONE) ? _T("user") : _T("cache");
126
+ m_tb = openTable(m_db, tbName);
127
+ m_tb->setKeyNum(0);
128
+ }
129
+ catch (bzs::rtl::exception& e)
130
+ {
131
+ std::_tstring msg;
132
+ msg = *bzs::rtl::getMsg(e);
133
+ boost::mutex::scoped_lock lck(m_mutex);
134
+ std::tcout << _T("[ERROR] ") << msg.c_str() << std::endl;
135
+ }
136
+ #endif // USE_CONNECTION_POOL
137
+ if (m_functionNumber == TRD_QUERY)
138
+ {
139
+ m_atu.reset(new activeTable(m_db, _T("user")));
140
+ m_atg.reset(new activeTable(m_db, _T("groups")));
141
+ m_ate.reset(new activeTable(m_db, _T("extention")));
142
+
143
+ _TCHAR tmp[30];
144
+ m_atu->alias(name_field_str(tmp), _T("name"));
145
+ m_atg->alias(_T("name"), _T("group_name"));
146
+ }
147
+ }
148
+
149
+ void endExecute()
150
+ {
151
+ m_tb.reset();
152
+ #ifdef USE_CONNECTION_POOL
153
+ m_db->unUse();
154
+ #else
155
+ m_db.reset();
156
+ #endif
157
+ }
158
+
159
+ void doExecute()
160
+ {
161
+ try
162
+ {
163
+ if (m_functionNumber == TRD_READ_ONE)
164
+ {
165
+ for (int i = 0; i < m_loopCount; ++i)
166
+ readOne(m_tb);
167
+ }
168
+ else if (m_functionNumber == TRD_INSERT_ONE)
169
+ {
170
+ for (int i = 0; i < m_loopCount; ++i)
171
+ insertOne(m_tb);
172
+ }
173
+ else
174
+ {
175
+ for (int i = 0; i < m_loopCount; ++i)
176
+ queryOne();
177
+ }
178
+ }
179
+
180
+ catch (bzs::rtl::exception& e)
181
+ {
182
+ std::_tstring msg;
183
+ msg = *bzs::rtl::getMsg(e);
184
+ boost::mutex::scoped_lock lck(m_mutex);
185
+ std::tcout << _T("[ERROR] ") << msg.c_str() << std::endl;
186
+ }
187
+
188
+ catch (...)
189
+ {
190
+ boost::mutex::scoped_lock lck(m_mutex);
191
+ std::cout << "worker error id = " << m_id << std::endl;
192
+ }
193
+ }
194
+ };
195
+
196
+ } // namespace transactd
197
+ } // namespace worker
198
+ } // namespace test
199
+ } // namespace bzs
200
+
201
+ #endif // BZS_TEST_BENCH_WORKERTRANSACTDIMPLE_H