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,156 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include <bzs/db/protocol/tdap/client/activeTable.h>
20
+ #include <bzs/rtl/benchmark.h>
21
+ #include <bzs/example/queryData.h>
22
+ #include <iostream>
23
+ #include <locale.h>
24
+
25
+ using namespace bzs::db::protocol::tdap::client;
26
+ using namespace bzs::db::protocol::tdap;
27
+
28
+ void showConsole(recordset& rowset)
29
+ {
30
+ const fielddefs& fields = *rowset.fieldDefs();
31
+ for (int j = 0; j < (int)fields.size(); ++j)
32
+ std::tcout << fields[j].name() << _T("\t");
33
+ std::tcout << _T("\n");
34
+
35
+ for (int i = 0; i < (int)rowset.size(); ++i)
36
+ {
37
+ row& m = rowset[i];
38
+ for (int j = 0; j < (int)m.size(); ++j)
39
+ {
40
+ std::tcout << m[(short)j].c_str() << _T("\t");
41
+ if (j == (int)m.size() - 1)
42
+ std::tcout << _T("\n");
43
+ }
44
+ }
45
+ }
46
+
47
+ bool btest(recordset* rsp, activeTable* atup, activeTable* atgp,
48
+ activeTable* atep, int kind, int n)
49
+ {
50
+ #ifdef LINUX
51
+ const char* fd_name = "名前";
52
+ #else
53
+ #ifdef _UNICODE
54
+ const wchar_t* fd_name = L"名前";
55
+ #else
56
+ char fd_name[30];
57
+ WideCharToMultiByte(CP_UTF8, 0, L"名前", -1, fd_name, 30, NULL, NULL);
58
+ #endif
59
+ #endif
60
+
61
+ activeTable& atu = *atup;
62
+ activeTable& atg = *atgp;
63
+ activeTable& ate = *atep;
64
+ recordset& rs = *rsp;
65
+ query q;
66
+
67
+ for (int i = 0; i < n; ++i)
68
+ {
69
+ rs.clear();
70
+ if (kind & 1)
71
+ {
72
+ q.reset();
73
+ atu.alias(fd_name, _T("name"));
74
+
75
+ q.select(_T("id"), _T("name"), _T("group"))
76
+ .where(_T("id"), _T("<="), i + 15000);
77
+ atu.index(0).keyValue(i + 1).read(rs, q);
78
+
79
+ // Join extention::comment
80
+ if (kind & 2)
81
+ {
82
+ q.reset();
83
+ ate.index(0).join(rs, q.select(_T("comment")).optimize(
84
+ queryBase::joinHasOneOrHasMany),
85
+ _T("id"));
86
+ }
87
+ if (kind & 4)
88
+ {
89
+ // Join group::name
90
+ q.reset();
91
+ atg.alias(_T("name"), _T("group_name"));
92
+ atg.index(0).join(rs, q.select(_T("group_name")), _T("group"));
93
+ }
94
+ }
95
+ if (kind & 8)
96
+ std::tcout << "." << std::flush;
97
+ }
98
+ if (kind & 8)
99
+ std::tcout << std::endl;
100
+ return true;
101
+ }
102
+
103
+ #pragma warning(disable : 4101)
104
+ #pragma argsused
105
+ int _tmain(int argc, _TCHAR* argv[])
106
+ {
107
+ #ifdef _UNICODE
108
+ std::locale::global(std::locale(""));
109
+ #endif
110
+ database_ptr db = createDatabaseObject();
111
+ try
112
+ {
113
+ const _TCHAR* host = _T("localhost");
114
+ int kind = 15;
115
+ int n = 100;
116
+ bool makeDatabase = true;
117
+
118
+ if (argc >= 5)
119
+ n = _ttol(argv[4]);
120
+ if (argc >= 4)
121
+ kind = _ttol(argv[3]);
122
+ if (argc >= 3)
123
+ host = argv[2];
124
+ if (argc >= 2)
125
+ makeDatabase = (_ttol(argv[1]) != 0);
126
+ #ifndef USE_PSQL_DATABASE
127
+ connectParams param(_T("tdap"), host, _T("querytest"), _T("test"));
128
+ #else
129
+ connectParams param(_T("btrv"), host, _T("querytest"), _T("test"));
130
+ #endif
131
+ param.setMode(TD_OPEN_NORMAL);
132
+ if (prebuiltData(db, param, makeDatabase))
133
+ {
134
+ std::tcout << "The query data build error." << std::endl;
135
+ return 1;
136
+ }
137
+ activeTable atu(db, _T("user"));
138
+ activeTable atg(db, _T("groups"));
139
+ activeTable ate(db, _T("extention"));
140
+
141
+ recordset rs;
142
+
143
+ bzs::rtl::benchmark bm;
144
+ bm.report(boost::bind(btest, &rs, &atu, &atg, &ate, kind, n),
145
+ "exec time ");
146
+
147
+ return 0;
148
+ }
149
+
150
+ catch (bzs::rtl::exception& e)
151
+ {
152
+ std::tcout << *bzs::rtl::getMsg(e) << std::endl;
153
+ }
154
+ return 1;
155
+ }
156
+ #pragma warning(default : 4101)
@@ -0,0 +1,265 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #pragma hdrstop
20
+ #include "workerTransactdImple.h"
21
+ #include "workerMySQLImple.h"
22
+
23
+ using namespace bzs::test::worker;
24
+ using namespace boost;
25
+
26
+ typedef std::vector<boost::shared_ptr<workerBase> > workers;
27
+
28
+ struct transactionSec
29
+ {
30
+ transactionSec() : value(0) {}
31
+ int workes;
32
+ __int64 value;
33
+ };
34
+
35
+ struct commandLineParam
36
+ {
37
+ int funcNumber;
38
+ int maxWorkerNum;
39
+ int workerNumStep;
40
+ int loopCount;
41
+ int avg_count;
42
+ int stressMode;
43
+ commandLineParam(_TCHAR* argv[])
44
+ {
45
+ funcNumber = _ttol(argv[2]);
46
+ maxWorkerNum = _ttol(argv[3]);
47
+ workerNumStep = maxWorkerNum / 20;
48
+ if (workerNumStep == 0)
49
+ workerNumStep = 1;
50
+ loopCount = _ttol(argv[4]);
51
+ avg_count = _ttol(argv[5]);
52
+ stressMode = (loopCount == -1) ? true : false;
53
+ if (stressMode)
54
+ loopCount = 1;
55
+ }
56
+ };
57
+
58
+ void showResult(const std::vector<transactionSec>& results, int total,
59
+ int totalTransactionTime, int totalTransactions,
60
+ bool stressMode)
61
+ {
62
+ std::tcout << _T("----------------------------------") << std::endl;
63
+ std::tcout << _T("Clients \tTransactions/sec") << std::endl;
64
+ std::tcout << _T("----------------------------------") << std::endl;
65
+
66
+ for (int i = 0; i < (int)results.size(); ++i)
67
+ std::tcout << results[i].workes << _T("\t") << results[i].value
68
+ << std::endl;
69
+ if (!stressMode)
70
+ {
71
+ std::tcout << _T("----------------------------------") << std::endl;
72
+ std::tcout << _T("total transaction time (sec) ")
73
+ << totalTransactionTime / 1000000.0f << std::endl;
74
+ std::tcout << _T("avarage transaction time (sec) ")
75
+ << totalTransactionTime / 1000000.0f / totalTransactions
76
+ << std::endl;
77
+ std::tcout << _T("total testing time (sec) ")
78
+ << total / 1000000.0f << std::endl;
79
+ }
80
+ std::tcout << _T("----------------------------------") << std::endl;
81
+ }
82
+
83
+ bool tableFixer(const connectParams& param)
84
+ {
85
+
86
+ database_ptr db = createDatabaseObject();
87
+ openDatabase(db, param);
88
+
89
+ dbdef* def = db->dbDef();
90
+ short index = def->tableNumByName(_T("cache"));
91
+ if (index == -1 && !createCacheTable(def))
92
+ return false;
93
+ dropTable(db, _T("cache"));
94
+ openTable(db, _T("cache"));
95
+ return true;
96
+ }
97
+
98
+ void makeMysqlParam(bzs::test::worker::mysql::connectParam& param,
99
+ const _TCHAR* host)
100
+ {
101
+ #ifdef _UNICODE
102
+ char hostname[256];
103
+ WideCharToMultiByte(CP_ACP, 0, host, -1, hostname, 256, NULL, NULL);
104
+ #else
105
+ const char* hostname = host;
106
+ #endif
107
+ param.hostname = hostname;
108
+ param.username = "root";
109
+ param.passwd = "";
110
+ param.database = "querytest";
111
+ param.port = 0;
112
+ }
113
+
114
+ #define BENCH_TIMER_SECONDS 1.5f
115
+ double executeWorkers(const commandLineParam& cmd, const connectParams param,
116
+ const bzs::test::worker::mysql::connectParam& paramMysql,
117
+ int wn)
118
+ {
119
+ double t = 0;
120
+ for (int k = 0; k < cmd.avg_count; ++k)
121
+ {
122
+ g_bench_signal = cmd.stressMode ? BENCH_SIGNAL_GO : BENCH_SIGNAL_BLUE;
123
+ workers workers;
124
+ thread_group threads;
125
+ boost::barrier sync(wn + 1);
126
+ for (int i = 0; i < wn; ++i)
127
+ {
128
+ int id = i + (wn * 10000);
129
+
130
+ boost::shared_ptr<workerBase> w;
131
+ if (cmd.funcNumber < 10)
132
+ w.reset(new transactd::worker(id, cmd.loopCount, cmd.funcNumber,
133
+ param, sync));
134
+ else
135
+ w.reset(new bzs::test::worker::mysql::worker(
136
+ id, cmd.loopCount, cmd.funcNumber, paramMysql, sync));
137
+ workers.push_back(w);
138
+ threads.create_thread(bind(&workerBase::execute, w.get()));
139
+ }
140
+ printf("*");
141
+ fflush(stdout);
142
+ Sleep(200 * MCRTOMM);
143
+ sync.wait(); // start all workers
144
+ if (cmd.stressMode)
145
+ {
146
+ Sleep(200 * MCRTOMM);
147
+ g_bench_signal = BENCH_SIGNAL_GREEN;
148
+ Sleep((unsigned int)(BENCH_TIMER_SECONDS * 1000 * MCRTOMM));
149
+ g_bench_signal = BENCH_SIGNAL_BREAK;
150
+ }
151
+ threads.join_all();
152
+ for (int i = 0; i < wn; ++i)
153
+ t += workers[i]->total();
154
+ }
155
+ return t;
156
+ }
157
+
158
+ int execute(const commandLineParam& cmd, const connectParams param,
159
+ const bzs::test::worker::mysql::connectParam& paramMysql,
160
+ std::vector<transactionSec>& results, double& totalTransactionTime)
161
+ {
162
+ int totalTransactions = 0;
163
+ for (int wn = cmd.workerNumStep; wn <= cmd.maxWorkerNum;
164
+ wn += cmd.workerNumStep)
165
+ {
166
+ double t = executeWorkers(cmd, param, paramMysql, wn);
167
+ transactionSec ts;
168
+ if (cmd.stressMode)
169
+ {
170
+ if (t)
171
+ ts.value = (__int64)(t / BENCH_TIMER_SECONDS);
172
+ }
173
+ else
174
+ {
175
+ totalTransactionTime += t;
176
+ totalTransactions += wn * cmd.loopCount * cmd.avg_count;
177
+ if (t)
178
+ ts.value = (__int64)((double)1000000.0f * wn * wn *
179
+ cmd.avg_count * cmd.loopCount / t);
180
+ }
181
+ ts.workes = wn;
182
+ results.push_back(ts);
183
+ }
184
+ return totalTransactions;
185
+ }
186
+
187
+ void showUsage()
188
+ {
189
+ printf("\nusage: bench_scale [host] [function_number] [max_worker_num]"
190
+ " [trnsactions] [avg_count]\n"
191
+ "\n"
192
+ "|----- [function_number] description -----|\n"
193
+ "| 0: Read a record by unique id. |\n"
194
+ "| 1: Insert a record by autoincrement. |\n"
195
+ "| 2: Read 50 user records and join group name. |\n"
196
+ "| +10 Test MySQL (10 11 12) |\n"
197
+ "|----------------------------------------------|\n"
198
+ "\n"
199
+ "|----- [trnsactions] description -----|\n"
200
+ "| 1 - n : N times roop a function |\n"
201
+ "| -1 : Execute Infinite loop and the number|\n"
202
+ "| of processings within regulation |\n"
203
+ "| time is counted. |\n"
204
+ "|----------------------------------------------|\n"
205
+ "\n"
206
+ "|----- [avg_count] description -----|\n"
207
+ "| 1 - n : Count N times and results return |\n"
208
+ "| those avarage. |\n"
209
+ "|----------------------------------------------|\n"
210
+
211
+ "exsample : bench_scale localhost 0 100 1 5 \n");
212
+ }
213
+
214
+ #pragma argsused
215
+ int _tmain(int argc, _TCHAR* argv[])
216
+ {
217
+ try
218
+ {
219
+ if (argc < 6)
220
+ {
221
+ showUsage();
222
+ return 0;
223
+ }
224
+ bzs::test::worker::mysql::mysqlInit mysql;
225
+
226
+ if (!mysql_thread_safe())
227
+ {
228
+ std::tcout << _T("MySQL client is not thread safe.") << std::endl;
229
+ return 1;
230
+ }
231
+
232
+ connectParams param(_T("tdap"), argv[1], _T("querytest"), _T("test"));
233
+ param.setMode(0);
234
+
235
+ bzs::test::worker::mysql::connectParam paramMysql(
236
+ argv[1], _T("querytest"), _T("root"));
237
+
238
+ commandLineParam cmd(argv);
239
+
240
+ if (tableFixer(param))
241
+ {
242
+ std::vector<transactionSec> results;
243
+ results.reserve(cmd.maxWorkerNum);
244
+ pooledDbManager::setMaxConnections(cmd.maxWorkerNum);
245
+
246
+ double totalTransactionTime = 0;
247
+ bzs::rtl::benchmarkMt bm;
248
+ bm.start();
249
+ int totalTransactions =
250
+ execute(cmd, param, paramMysql, results, totalTransactionTime);
251
+ printf("\n");
252
+ showResult(results, bm.end(), (int)totalTransactionTime,
253
+ totalTransactions, cmd.stressMode);
254
+ return 0;
255
+ }
256
+ return 1;
257
+ }
258
+
259
+ catch (bzs::rtl::exception& e)
260
+ {
261
+ std::_tstring s = *bzs::rtl::getMsg(e);
262
+ std::tcout << _T("[ERROR] ") << s << std::endl;
263
+ }
264
+ return 1;
265
+ }