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
@@ -16,13 +16,9 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  =================================================================*/
19
- #include <bzs/env/tstring.h>
20
- #pragma hdrstop
21
-
22
19
  #include "connMgr.h"
23
20
  #include "database.h"
24
21
 
25
-
26
22
  #pragma package(smart_init)
27
23
 
28
24
  namespace bzs
@@ -36,17 +32,18 @@ namespace tdap
36
32
  namespace client
37
33
  {
38
34
 
39
-
40
- connMgr::connMgr(database* db):nstable(db)
35
+ connMgr::connMgr(database* db) : nstable(db)
41
36
  {
42
37
  m_db = db;
43
38
  }
44
39
 
45
40
  connMgr::~connMgr()
46
41
  {
47
-
48
42
  }
49
- database* connMgr::db()const{return m_db;}
43
+ database* connMgr::db() const
44
+ {
45
+ return m_db;
46
+ }
50
47
 
51
48
  void connMgr::connect(const _TCHAR* uri)
52
49
  {
@@ -67,11 +64,12 @@ void connMgr::disconnect()
67
64
  }
68
65
  }
69
66
 
70
- void connMgr::allocBuffer()
67
+ void connMgr::allocBuffer()
71
68
  {
72
- m_records.resize(64000/sizeof(connMgr::record));
69
+ m_records.resize(64000 / sizeof(connMgr::record));
73
70
 
74
- m_datalen = m_buflen = (uint_td)(m_records.size()*sizeof(connMgr::record));
71
+ m_datalen = m_buflen =
72
+ (uint_td)(m_records.size() * sizeof(connMgr::record));
75
73
  m_pdata = (void*)&m_records[0];
76
74
  memset(m_pdata, 0, m_datalen);
77
75
  setIsOpen(true);
@@ -87,7 +85,7 @@ const connMgr::records& connMgr::connections()
87
85
  m_keynum = TD_STSTCS_READ;
88
86
  tdap(TD_STASTISTICS);
89
87
  if (m_stat == 0)
90
- m_records.resize(m_datalen/sizeof(connMgr::record));
88
+ m_records.resize(m_datalen / sizeof(connMgr::record));
91
89
  return m_records;
92
90
  }
93
91
 
@@ -99,7 +97,7 @@ const connMgr::records& connMgr::databases(__int64 connid)
99
97
  m_params[1] = -1;
100
98
  tdap(TD_STASTISTICS);
101
99
  if (m_stat == 0)
102
- m_records.resize(m_datalen/sizeof(connMgr::record));
100
+ m_records.resize(m_datalen / sizeof(connMgr::record));
103
101
  return m_records;
104
102
  }
105
103
 
@@ -111,7 +109,7 @@ const connMgr::records& connMgr::tables(__int64 connid, int dbid)
111
109
  m_params[1] = dbid;
112
110
  tdap(TD_STASTISTICS);
113
111
  if (m_stat == 0)
114
- m_records.resize(m_datalen/sizeof(connMgr::record));
112
+ m_records.resize(m_datalen / sizeof(connMgr::record));
115
113
  return m_records;
116
114
  }
117
115
 
@@ -127,7 +125,6 @@ void connMgr::disconnectAll()
127
125
  {
128
126
  m_keynum = TD_STSTCS_DISCONNECT_ALL;
129
127
  tdap(TD_STASTISTICS);
130
-
131
128
  }
132
129
 
133
130
  short_td connMgr::stat()
@@ -135,10 +132,8 @@ short_td connMgr::stat()
135
132
  return m_stat;
136
133
  }
137
134
 
138
-
139
-
140
- }//namespace client
141
- }//namespace tdap
142
- }//namespace protocol
143
- }//namespace db
144
- }//namespace bzs
135
+ } // namespace client
136
+ } // namespace tdap
137
+ } // namespace protocol
138
+ } // namespace db
139
+ } // namespace bzs
@@ -22,7 +22,6 @@
22
22
  #include <bzs/db/transactd/connectionRecord.h>
23
23
  #include <vector>
24
24
 
25
-
26
25
  namespace bzs
27
26
  {
28
27
  namespace db
@@ -35,28 +34,28 @@ namespace client
35
34
  {
36
35
 
37
36
  class database;
38
- #pragma warning(disable:4251)
37
+ #pragma warning(disable : 4251)
39
38
 
40
- class AGRPACK connMgr : private nstable
39
+ class DLLLIB connMgr : private nstable
41
40
  {
42
41
  public:
43
- typedef bzs::db::transactd::connection::record record;
44
- typedef std::vector<record> records;
45
- protected:
46
-
42
+ typedef bzs::db::transactd::connection::record record;
43
+ typedef std::vector<record> records;
47
44
 
45
+ protected:
48
46
  private:
49
47
  std::vector<record> m_records;
50
- __int64 m_params[2];
48
+ __int64 m_params[2];
51
49
  database* m_db;
52
50
  std::_tstring m_uri;
53
51
  void allocBuffer();
54
52
  void writeRecordData(){};
55
53
  void onReadAfter(){};
56
54
 
57
- ~connMgr();
55
+ ~connMgr();
56
+
58
57
  public:
59
- explicit connMgr(database* db);
58
+ explicit connMgr(database* db);
60
59
 
61
60
  void connect(const _TCHAR* uri);
62
61
  void disconnect();
@@ -67,16 +66,15 @@ public:
67
66
  void disconnectAll();
68
67
  short_td stat();
69
68
 
70
- database* db()const;
69
+ database* db() const;
71
70
  using nstable::tdapErr;
72
71
  };
73
72
 
74
- #pragma warning(default:4251)
75
-
73
+ #pragma warning(default : 4251)
76
74
 
77
- }//namespace client
78
- }//namespace tdap
79
- }//namespace protocol
80
- }//namespace db
81
- }//namespace bzs
82
- #endif //BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H
75
+ } // namespace client
76
+ } // namespace tdap
77
+ } // namespace protocol
78
+ } // namespace db
79
+ } // namespace bzs
80
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_CTDCONNMGR_H
@@ -0,0 +1,243 @@
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 "connectionPool.h"
20
+
21
+ #ifdef __BCPLUSPLUS__
22
+ #ifdef _WIN64
23
+ #define BZS_LINK_BOOST_SYSTEM
24
+ #define BZS_LINK_BOOST_THREAD
25
+ #define BZS_LINK_BOOST_CHRONO
26
+ namespace boost
27
+ {
28
+ void tss_cleanup_implemented()
29
+ {
30
+ }
31
+ }
32
+ #else
33
+ #define BZS_LINK_BOOST_THREAD
34
+ namespace boost
35
+ {
36
+ extern "C" void tss_cleanup_implemented()
37
+ {
38
+ }
39
+ }
40
+ #endif
41
+ #include <bzs/env/boost_bcb_link.h>
42
+ #endif
43
+
44
+ namespace bzs
45
+ {
46
+ namespace db
47
+ {
48
+ namespace protocol
49
+ {
50
+ namespace tdap
51
+ {
52
+ namespace client
53
+ {
54
+
55
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
56
+ struct busyWaitArguments
57
+ {
58
+ mutable boost::condition* m_busy;
59
+ mutable boost::mutex* m_mutex2;
60
+ };
61
+
62
+ void scopedLock(boost::mutex::scoped_lock* lck)
63
+ {
64
+ lck->lock();
65
+ }
66
+
67
+ void busyWait(busyWaitArguments* args)
68
+ {
69
+ boost::mutex::scoped_lock lck(*(args->m_mutex2));
70
+ args->m_busy->wait(lck);
71
+ }
72
+ #endif // TRANSACTD_RB_CALL_WITHOUT_GVL
73
+
74
+ short __STDCALL dllUnloadCallbackFunc()
75
+ {
76
+ cpool.reset(0);
77
+ cpool.m_regitfunc = NULL;
78
+ return 0;
79
+ }
80
+
81
+ void releaseConnection(stdDbmCconnectionPool* pool)
82
+ {
83
+ pool->releaseOne();
84
+ }
85
+
86
+ template <class Database_Ptr>
87
+ connectionPool<Database_Ptr>::connectionPool(int maxConnections)
88
+ : m_maxConnections(maxConnections)
89
+ {
90
+ #ifdef USE_DLLUNLOAD_CALLBACK
91
+ m_regitfunc = nsdatabase::getDllUnloadCallbackFunc();
92
+ if (m_regitfunc)
93
+ m_regitfunc(dllUnloadCallbackFunc);
94
+ #else
95
+ m_regitfunc = NULL;
96
+ #endif
97
+ }
98
+
99
+ template <class Database_Ptr> connectionPool<Database_Ptr>::~connectionPool()
100
+ {
101
+ if (m_regitfunc)
102
+ m_regitfunc(NULL);
103
+ }
104
+
105
+ template <class Database_Ptr>
106
+ Database_Ptr connectionPool<Database_Ptr>::addOne(const connectParams& param)
107
+ {
108
+ Database_Ptr db;
109
+ db = createDatabaseForConnectionPool(db);
110
+ connectOpen(db, param, true /* new connection*/);
111
+ m_dbs.push_back(db);
112
+ return m_dbs[m_dbs.size() - 1];
113
+ }
114
+
115
+ /** Delivery database instance
116
+ If a connect error is occured then bzs::rtl::exception exception is
117
+ thrown.
118
+ */
119
+ template <class Database_Ptr>
120
+ Database_Ptr connectionPool<Database_Ptr>::get(const connectParams* param)
121
+ {
122
+ boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
123
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
124
+ TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
125
+ #else
126
+ lck.lock();
127
+ #endif
128
+ assert((param && m_maxConnections) || m_dbs.size());
129
+
130
+ while (1)
131
+ {
132
+ for (size_t i = 0; i < m_dbs.size(); i++)
133
+ {
134
+ if (m_dbs[i].use_count() == 1)
135
+ {
136
+ if (param)
137
+ {
138
+ Database_Ptr db = m_dbs[i];
139
+ if (isSameUri(param, db))
140
+ return db;
141
+ }
142
+ else
143
+ return m_dbs[i];
144
+ }
145
+ }
146
+ // create a new database object if there is no free one.
147
+ if (param && (m_maxConnections > (int)m_dbs.size()))
148
+ return addOne(*param);
149
+ // Wait until releaseOne() called
150
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
151
+ busyWaitArguments bwArgs;
152
+ bwArgs.m_busy = &m_busy;
153
+ bwArgs.m_mutex2 = &m_mutex2;
154
+ TRANSACTD_RB_CALL_WITHOUT_GVL(busyWait, bwArgs);
155
+ #else
156
+ boost::mutex::scoped_lock lck(m_mutex2);
157
+ m_busy.wait(lck);
158
+ #endif
159
+ }
160
+ }
161
+
162
+ /** Create database and login the server with each connection.
163
+ If a connect error is occured then bzs::rtl::exception exception is
164
+ thrown.
165
+ */
166
+ template <class Database_Ptr>
167
+ void connectionPool<Database_Ptr>::reserve(size_t size,
168
+ const connectParams& param)
169
+ {
170
+ boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
171
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
172
+ TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
173
+ #else
174
+ lck.lock();
175
+ #endif
176
+ m_maxConnections = (int)size;
177
+ for (size_t i = 0; i < size; ++i)
178
+ addOne(param);
179
+ }
180
+
181
+ /** Set max connections.*/
182
+ template <class Database_Ptr>
183
+ void connectionPool<Database_Ptr>::setMaxConnections(int n)
184
+ {
185
+ boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
186
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
187
+ TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
188
+ #else
189
+ lck.lock();
190
+ #endif
191
+ m_maxConnections = n;
192
+ }
193
+
194
+ /** Return max connections. */
195
+ template <class Database_Ptr>
196
+ int connectionPool<Database_Ptr>::maxConnections() const
197
+ {
198
+ return m_maxConnections;
199
+ }
200
+
201
+ template <class Database_Ptr> void connectionPool<Database_Ptr>::releaseOne()
202
+ {
203
+ m_busy.notify_one();
204
+ }
205
+
206
+ // max 5second
207
+ template <class Database_Ptr>
208
+ bool connectionPool<Database_Ptr>::reset(int waitSec)
209
+ {
210
+ boost::mutex::scoped_lock lck(m_mutex, boost::defer_lock);
211
+ #ifdef TRANSACTD_RB_CALL_WITHOUT_GVL
212
+ TRANSACTD_RB_CALL_WITHOUT_GVL(scopedLock, lck);
213
+ #else
214
+ lck.lock();
215
+ #endif
216
+ bool flag = true;
217
+ for (int j = 0; j < waitSec * 100; j++)
218
+ {
219
+ flag = false;
220
+ for (size_t i = 0; i < m_dbs.size(); i++)
221
+ if (m_dbs[i].use_count() != 1)
222
+ flag = true;
223
+ if (!flag)
224
+ break;
225
+ Sleep(100 * MCRTOMM);
226
+ }
227
+ m_dbs.clear();
228
+ return flag;
229
+ }
230
+
231
+ #ifdef USE_DBM_CONNECTION_POOL
232
+ template class connectionPool<dbmanager_ptr>;
233
+ #else
234
+ template class connectionPool<database_ptr>;
235
+ #endif
236
+
237
+ stdCconnectionPool cpool;
238
+
239
+ } // namespace client
240
+ } // namespace tdap
241
+ } // namespace protocol
242
+ } // namespace db
243
+ } // namespace bzs
@@ -0,0 +1,109 @@
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H
3
+ /*=================================================================
4
+ Copyright (C) 2014 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
+ #if HAVE_RB_THREAD_CALL_WITHOUT_GVL || HAVE_RB_THREAD_BLOCKING_REGION
22
+ #include <build/swig/ruby/threadBlockRegionWrapper.h>
23
+ #endif
24
+
25
+ #include <bzs/db/protocol/tdap/client/databaseManager.h>
26
+ #define BOOST_THREAD_USE_LIB
27
+ #include <boost/thread/thread.hpp>
28
+ #include <boost/thread/condition.hpp>
29
+ #include <vector>
30
+
31
+ namespace bzs
32
+ {
33
+ namespace db
34
+ {
35
+ namespace protocol
36
+ {
37
+ namespace tdap
38
+ {
39
+ namespace client
40
+ {
41
+
42
+ /** connection pool class
43
+ Hold database or databaseManager instance and delivery.
44
+
45
+ If maxConnections = 0 then not create databases automaticaly at no free
46
+ a database.
47
+ This case need call reserve() function at start up the process.\n
48
+
49
+ Otherwise, create new database automaticaly by get() function with
50
+ connectParams.
51
+ This case need call setMaxConnections() function at start up the
52
+ process.
53
+ */
54
+
55
+ template <class Database_Ptr> class connectionPool
56
+ {
57
+ std::vector<Database_Ptr> m_dbs;
58
+ mutable boost::mutex m_mutex;
59
+ mutable boost::mutex m_mutex2;
60
+ mutable boost::condition m_busy;
61
+ int m_maxConnections;
62
+ Database_Ptr addOne(const connectParams& param);
63
+ #if (__BCPLUSPLUS__)
64
+ public:
65
+ #endif
66
+ DLLUNLOADCALLBACK_PTR m_regitfunc;
67
+ friend short __STDCALL dllUnloadCallbackFunc();
68
+
69
+ public:
70
+ connectionPool(int maxConnections = 0);
71
+ ~connectionPool();
72
+
73
+ Database_Ptr get(const connectParams* param = NULL);
74
+ void reserve(size_t size, const connectParams& param);
75
+ void setMaxConnections(int n);
76
+ int maxConnections() const;
77
+ void releaseOne();
78
+ bool reset(int waitSec = 5);
79
+ };
80
+
81
+ typedef connectionPool<database_ptr> stdDbCconnectionPool;
82
+ typedef connectionPool<dbmanager_ptr> stdDbmCconnectionPool;
83
+
84
+ /** stdDbmCconnectionPool is default for connetion pool.
85
+ pooling database and reuse tables.
86
+ */
87
+ #ifdef USE_DBM_CONNECTION_POOL
88
+ typedef stdDbmCconnectionPool stdCconnectionPool;
89
+ #else
90
+ #ifdef USE_DB_CONNECTION_POOL
91
+ typedef stdDbCconnectionPool stdCconnectionPool;
92
+ #else
93
+ #error \
94
+ "Please define the USE_DBM_CONNECTION_POOL when you need a connection pool";
95
+ #endif
96
+ #endif
97
+
98
+ short __STDCALL dllUnloadCallbackFunc();
99
+ void releaseConnection(stdDbmCconnectionPool* pool);
100
+
101
+ extern stdCconnectionPool cpool;
102
+
103
+ } // namespace client
104
+ } // namespace tdap
105
+ } // namespace protocol
106
+ } // namespace db
107
+ } // namespace bzs
108
+
109
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_CONNECTIONPOOL_H