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,15 +16,8 @@
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
- //#define BOOST_THREAD_BUILD_LIB
23
- #if (__BCPLUSPLUS__ && _WIN64)
24
- # define BOOST_ALL_NO_LIB
25
- #endif
26
-
27
19
  #include "nsDatabase.h"
20
+ #include "sharedData.h"
28
21
  #include "nsTable.h"
29
22
  #include "stringConverter.h"
30
23
  #include <sys/stat.h>
@@ -41,19 +34,14 @@ typedef void* HINSTANCE;
41
34
 
42
35
  #pragma package(smart_init)
43
36
 
44
-
45
- #if (__BCPLUSPLUS__)
46
- # ifdef _WIN64
47
- # pragma comment(lib, "boost_chrono-bcb64-mt-1_50.a")
48
- # pragma comment(lib, "boost_thread-bcb64-mt-1_50.a")
49
- # else
50
- # pragma comment(lib, "libboost_system-bcb-mt-s-1_39.lib")
51
- # pragma comment(lib, "libboost_filesystem-bcb-mt-s-1_39.lib")
52
- # pragma comment(lib, "libboost_thread-bcb-mt-s-1_39.lib")
53
- # endif
37
+ #ifdef __BCPLUSPLUS__
38
+ #ifndef _WIN64
39
+ #define BZS_LINK_BOOST_THREAD
40
+ #endif
41
+ #define BZS_LINK_BOOST_FILESYSTEM
42
+ #define BZS_LINK_BOOST_SYSTEM
43
+ #include <bzs/env/boost_bcb_link.h>
54
44
  #endif
55
-
56
-
57
45
 
58
46
  namespace bzs
59
47
  {
@@ -68,9 +56,12 @@ namespace client
68
56
  extern EnginsFunc engins;
69
57
  unsigned int g_lastTrnTime = 0;
70
58
  unsigned int nsdatabase::m_execCodepage = GetACP();
59
+ bool g_checkTablePtr = false;
71
60
 
72
-
73
- void registEnginsPtr(EnginsFunc func) {engins = func;}
61
+ PACKAGE void registEnginsPtr(EnginsFunc func)
62
+ {
63
+ engins = func;
64
+ }
74
65
 
75
66
  BTRCALLID_PTR BTRCALLIDX = NULL;
76
67
  BTRCALLID_PTR MYTICALLID = NULL;
@@ -78,45 +69,46 @@ BTRCALLID_PTR MYTICALLID = NULL;
78
69
  HANDLE hBtrvDLL = NULL;
79
70
  HANDLE hTrsdDLL = NULL;
80
71
 
81
- #ifdef LINUX
82
- #define LIB_PREFIX "lib"
83
- #else
84
- #define LIB_PREFIX
85
- #endif
72
+ void setTrnsctdEntryPoint(BTRCALLID_PTR p)
73
+ {
74
+ MYTICALLID = p;
75
+ }
86
76
 
87
77
  BTRCALLID_PTR getTrnsctdEntryPoint()
88
78
  {
89
79
  if (MYTICALLID)
90
80
  return MYTICALLID;
91
-
92
81
 
93
82
  if (hTrsdDLL == NULL)
94
83
  hTrsdDLL = LoadLibraryA(LIB_PREFIX TDCLC_LIBNAME);
95
84
 
96
85
  if (hTrsdDLL)
97
- MYTICALLID = (BTRCALLID_PTR)GetProcAddress((HINSTANCE)hTrsdDLL, "BTRCALLID");
86
+ {
87
+ MYTICALLID =
88
+ (BTRCALLID_PTR)GetProcAddress((HINSTANCE)hTrsdDLL, "BTRCALLID");
89
+ }
90
+
98
91
  return MYTICALLID;
99
92
  }
100
93
 
101
- BTRCALLID_PTR getBtrvEntryPoint() {return BTRCALLIDX;}
102
-
103
94
  int smartLoadLibrary()
104
95
  {
105
- int ret = 0;
106
- if (hBtrvDLL == NULL)
96
+ int ret = 0;
97
+ if (hBtrvDLL == NULL)
107
98
  hBtrvDLL = LoadLibrary(_T("W3Btrv7"));
108
99
 
109
100
  if (hBtrvDLL == NULL)
110
101
  hBtrvDLL = LoadLibrary(_T("WBtrv32"));
111
102
 
112
103
  if (hBtrvDLL)
113
- BTRCALLIDX = (BTRCALLID_PTR)GetProcAddress((HINSTANCE)hBtrvDLL, "BTRCALLID");
104
+ BTRCALLIDX =
105
+ (BTRCALLID_PTR)GetProcAddress((HINSTANCE)hBtrvDLL, "BTRCALLID");
114
106
  if (BTRCALLIDX)
115
- ret = 1;
107
+ ret = 1;
116
108
  MYTICALLID = getTrnsctdEntryPoint();
117
- if (MYTICALLID)
118
- ret = 2;
119
- return ret;
109
+ if (MYTICALLID)
110
+ ret = 2;
111
+ return ret;
120
112
  }
121
113
 
122
114
  void smartFreeLibrary()
@@ -132,6 +124,18 @@ void smartFreeLibrary()
132
124
  MYTICALLID = NULL;
133
125
  }
134
126
 
127
+ void setBtrvEntryPoint(BTRCALLID_PTR p)
128
+ {
129
+ BTRCALLIDX = p;
130
+ }
131
+
132
+ BTRCALLID_PTR getBtrvEntryPoint()
133
+ {
134
+ if (hBtrvDLL == NULL)
135
+ smartLoadLibrary();
136
+ return BTRCALLIDX;
137
+ }
138
+
135
139
  struct nsdbimpl
136
140
  {
137
141
  int refCount;
@@ -140,7 +144,7 @@ struct nsdbimpl
140
144
  short snapShotCount;
141
145
  nstable* tables[nsdatabase::maxtables];
142
146
  uchar_td clientID[16];
143
- uchar_td* cid() {return clientID;}
147
+ uchar_td* cid() { return clientID; }
144
148
  _TCHAR bdfPath[MAX_PATH];
145
149
  short tableCount;
146
150
  short lockWaitCount;
@@ -148,11 +152,12 @@ struct nsdbimpl
148
152
  bool uriMode;
149
153
  bool uselongFilename;
150
154
  bool localSharing;
151
-
152
- nsdbimpl() : refCount(1), snapShotCount(0), tranCount(0), uselongFilename(false), tableCount(0),
153
- lockWaitCount(10), lockWaitTime(100), localSharing(false), uriMode(false)
155
+ bool ignoreTestPtr;
156
+ nsdbimpl()
157
+ : refCount(1), tranCount(0), id(0), snapShotCount(0), tableCount(0),
158
+ lockWaitCount(10), lockWaitTime(100), uriMode(false),
159
+ uselongFilename(false), localSharing(false), ignoreTestPtr(false)
154
160
  {
155
-
156
161
  }
157
162
 
158
163
  void setId(unsigned short id_)
@@ -167,25 +172,25 @@ struct nsdbimpl
167
172
  bdfPath[0] = 0x00;
168
173
  }
169
174
 
170
- nsdbimpl& operator= (const nsdbimpl & rt)
171
- {
172
- if (&rt != this)
173
- {
174
- lockWaitCount = rt.lockWaitCount;
175
- lockWaitTime = rt.lockWaitCount;
176
- uselongFilename = rt.uselongFilename;
177
- uriMode = rt.uriMode;
178
- }
179
- return *this;
180
- }
181
-
175
+ nsdbimpl& operator=(const nsdbimpl& rt)
176
+ {
177
+ if (&rt != this)
178
+ {
179
+ lockWaitCount = rt.lockWaitCount;
180
+ lockWaitTime = rt.lockWaitCount;
181
+ uselongFilename = rt.uselongFilename;
182
+ uriMode = rt.uriMode;
183
+ }
184
+ return *this;
185
+ }
182
186
  };
183
187
 
184
188
  boost::mutex g_mutex;
189
+ static int g_maxEnginIndex = -1;
185
190
 
186
191
  nsdatabase::nsdatabase() : m_stat(0)
187
192
  {
188
-
193
+
189
194
  int type = 0;
190
195
  if (hBtrvDLL == 0x00)
191
196
  type = smartLoadLibrary();
@@ -193,19 +198,21 @@ nsdatabase::nsdatabase() : m_stat(0)
193
198
  m_btrcallid = getBtrvEntryPoint();
194
199
  if (m_btrcallid == NULL)
195
200
  m_btrcallid = getTrnsctdEntryPoint();
196
- if (!m_btrcallid)
197
- nstable::throwError(_T("Can't load C Interface library"), ERROR_LOAD_CLIBRARY);
201
+ if (!m_btrcallid)
202
+ nstable::throwError(_T("Can't load C Interface library"),
203
+ ERROR_LOAD_CLIBRARY);
198
204
 
199
- m_nsimpl = new nsdbimpl();
200
- if ((type == 2) || MYTICALLID)
205
+ m_nsimpl = new nsdbimpl();
206
+ if ((type == 2) || MYTICALLID)
201
207
  setUseLongFilename(true);
202
208
  else
203
209
  {
204
210
  btrVersions v;
205
211
  memset(&v, 0, sizeof(btrVersions));
206
- uchar_td posblk[POS_BLOCK_SIZE] = {0x00};
212
+ uchar_td posblk[POS_BLOCK_SIZE] = { 0x00 };
207
213
  getBtrVersion(&v, posblk);
208
- if ((v.versions[1].majorVersion >= 9) || (v.versions[0].majorVersion >= 9))
214
+ if ((v.versions[1].majorVersion >= 9) ||
215
+ (v.versions[0].majorVersion >= 9))
209
216
  setUseLongFilename(true);
210
217
  }
211
218
 
@@ -214,34 +221,36 @@ nsdatabase::nsdatabase() : m_stat(0)
214
221
 
215
222
  boost::mutex::scoped_lock lck(g_mutex);
216
223
  // serach empty
217
- int i;
218
- for (i = 0; i < MAX_BTRENGIN; i++)
219
- if (engins()[i] == NULL)
224
+ int index;
225
+ for (index = 0; index < MAX_BTRENGIN; index++)
226
+ if (engins()[index] == NULL)
220
227
  break;
221
228
 
222
- engins()[i] = this;
223
-
224
229
  // no empty
225
- if (MAX_BTRENGIN == i)
230
+ if (MAX_BTRENGIN == index)
226
231
  {
227
232
  m_stat = -1;
228
233
  return;
229
234
  }
230
- m_nsimpl->setId((unsigned short)i);
231
-
235
+ engins()[index] = this;
236
+ g_maxEnginIndex = std::max<int>(index, g_maxEnginIndex);
237
+ m_nsimpl->setId((unsigned short)index + 1);
232
238
  }
233
239
 
234
- int nsdatabase::refCount()const {return m_nsimpl->refCount;}
240
+ int nsdatabase::refCount() const
241
+ {
242
+ return m_nsimpl->refCount;
243
+ }
235
244
 
236
245
  void nsdatabase::addref()
237
246
  {
238
- ++m_nsimpl->refCount;
247
+ ++m_nsimpl->refCount;
239
248
  }
240
249
 
241
250
  void nsdatabase::release()
242
251
  {
243
- if (--m_nsimpl->refCount == 0)
244
- delete this;
252
+ if (--m_nsimpl->refCount == 0)
253
+ delete this;
245
254
  }
246
255
 
247
256
  nsdatabase::~nsdatabase()
@@ -250,10 +259,11 @@ nsdatabase::~nsdatabase()
250
259
 
251
260
  boost::mutex::scoped_lock lck(g_mutex);
252
261
  if (m_nsimpl->id != 0)
253
- engins()[m_nsimpl->id] = NULL;
254
- delete m_nsimpl;
262
+ engins()[m_nsimpl->id - 1] = NULL;
263
+ delete m_nsimpl;
264
+ m_nsimpl = 0x00;
255
265
  #ifdef _WIN32
256
- OutputDebugString(_T("delete database\n"));
266
+ OutputDebugString(_T("delete database\n"));
257
267
  #endif
258
268
  }
259
269
 
@@ -264,50 +274,86 @@ nsdatabase* nsdatabase::clone() const
264
274
  return p;
265
275
  }
266
276
 
267
- nsdatabase& nsdatabase:: operator = (const nsdatabase & rt)
277
+ nsdatabase& nsdatabase::operator=(const nsdatabase& rt)
268
278
  {
269
279
  if (&rt != this)
270
280
  {
271
281
  *m_nsimpl = *rt.m_nsimpl;
272
- setUri(rt.uri());
282
+ setUri(rt.uri());
273
283
  m_btrcallid = rt.m_btrcallid;
274
284
  }
275
285
  return *this;
276
286
  }
277
287
 
278
- int nsdatabase::enableTrn() const {return m_nsimpl->tranCount;}
279
-
280
- short nsdatabase::stat() const {return m_stat;}
281
-
282
- uchar_td* nsdatabase::clientID() const {return m_nsimpl->clientID;}
288
+ int nsdatabase::enableTrn() const
289
+ {
290
+ return m_nsimpl->tranCount;
291
+ }
283
292
 
284
- short nsdatabase::openTableCount() const {return m_nsimpl->tableCount;}
293
+ short nsdatabase::stat() const
294
+ {
295
+ return m_stat;
296
+ }
285
297
 
286
- _TCHAR* nsdatabase::uri() const {return m_nsimpl->bdfPath;}
298
+ uchar_td* nsdatabase::clientID() const
299
+ {
300
+ return m_nsimpl->clientID;
301
+ }
287
302
 
288
- bool nsdatabase::uriMode() const {return m_nsimpl->uriMode;}
303
+ short nsdatabase::openTableCount() const
304
+ {
305
+ return m_nsimpl->tableCount;
306
+ }
289
307
 
290
- nstable** nsdatabase::tables() {return m_nsimpl->tables;}
308
+ _TCHAR* nsdatabase::uri() const
309
+ {
310
+ return m_nsimpl->bdfPath;
311
+ }
291
312
 
292
- short nsdatabase::lockWaitCount() const {return m_nsimpl->lockWaitCount;}
313
+ bool nsdatabase::uriMode() const
314
+ {
315
+ return m_nsimpl->uriMode;
316
+ }
293
317
 
294
- void nsdatabase::setLockWaitCount(short v) {m_nsimpl->lockWaitCount = v;}
318
+ nstable** nsdatabase::tables()
319
+ {
320
+ return m_nsimpl->tables;
321
+ }
295
322
 
296
- short nsdatabase::lockWaitTime() const {return m_nsimpl->lockWaitTime;}
323
+ short nsdatabase::lockWaitCount() const
324
+ {
325
+ return m_nsimpl->lockWaitCount;
326
+ }
297
327
 
298
- void nsdatabase::setLockWaitTime(short v) {m_nsimpl->lockWaitTime = v;}
328
+ void nsdatabase::setLockWaitCount(short v)
329
+ {
330
+ m_nsimpl->lockWaitCount = v;
331
+ }
299
332
 
300
- bool nsdatabase::localSharing() const {return m_nsimpl->localSharing;}
333
+ short nsdatabase::lockWaitTime() const
334
+ {
335
+ return m_nsimpl->lockWaitTime;
336
+ }
301
337
 
302
- void nsdatabase::setLocalSharing(bool v) {m_nsimpl->localSharing = v;}
338
+ void nsdatabase::setLockWaitTime(short v)
339
+ {
340
+ m_nsimpl->lockWaitTime = v;
341
+ }
303
342
 
343
+ bool nsdatabase::localSharing() const
344
+ {
345
+ return m_nsimpl->localSharing;
346
+ }
304
347
 
348
+ void nsdatabase::setLocalSharing(bool v)
349
+ {
350
+ m_nsimpl->localSharing = v;
351
+ }
305
352
 
306
353
  bool nsdatabase::setUri(const _TCHAR* Path)
307
354
  {
308
- _TCHAR buf[MAX_PATH];
309
-
310
355
  #ifdef _WIN32
356
+ _TCHAR buf[MAX_PATH];
311
357
  _TCHAR* lpFilePart;
312
358
  if (useLongFilename() == false)
313
359
  {
@@ -320,7 +366,8 @@ bool nsdatabase::setUri(const _TCHAR* Path)
320
366
  _tcscpy(m_nsimpl->bdfPath, Path);
321
367
 
322
368
  m_nsimpl->uriMode = false;
323
- if (_tcsstr(m_nsimpl->bdfPath, _T("btrv://")) || _tcsstr(m_nsimpl->bdfPath, _T("tdap://")))
369
+ if (_tcsstr(m_nsimpl->bdfPath, _T("btrv://")) ||
370
+ _tcsstr(m_nsimpl->bdfPath, _T("tdap://")))
324
371
  m_nsimpl->uriMode = true;
325
372
  #ifdef _WIN32
326
373
  else
@@ -333,10 +380,11 @@ bool nsdatabase::setUri(const _TCHAR* Path)
333
380
  return true;
334
381
  }
335
382
 
336
- void nsdatabase::createTable(fileSpec *pfs, uint_td len, const _TCHAR *pFullPath, short_td mode)
383
+ void nsdatabase::createTable(fileSpec* pfs, uint_td len,
384
+ const _TCHAR* pFullPath, short_td mode)
337
385
  {
338
386
  _TCHAR buf[MAX_PATH];
339
- _TCHAR posblk[128] = {0x00};
387
+ _TCHAR posblk[128] = { 0x00 };
340
388
  #ifdef _WIN32
341
389
  if ((useLongFilename() == false) && _tcsstr(pFullPath, _T(" ")))
342
390
  {
@@ -354,17 +402,19 @@ void nsdatabase::createTable(fileSpec *pfs, uint_td len, const _TCHAR *pFullPath
354
402
  return;
355
403
  }
356
404
 
357
- char buf2[MAX_PATH]={0x00};;
405
+ char buf2[MAX_PATH] = { 0x00 };
406
+ ;
358
407
  const char* p = toServerUri(buf2, MAX_PATH, buf, isUseTransactd());
359
408
 
360
- m_stat = m_btrcallid(TD_CREATETABLE, posblk, pfs, &len, (void*)p, (uchar_td)strlen(p),
361
- (char_td)mode, m_nsimpl->clientID);
409
+ m_stat =
410
+ m_btrcallid(TD_CREATETABLE, posblk, pfs, &len, (void*)p,
411
+ (uchar_td)strlen(p), (char_td)mode, m_nsimpl->clientID);
362
412
  }
363
413
 
364
414
  void nsdatabase::dropTable(const _TCHAR* pFullPath)
365
415
  {
366
416
  _TCHAR buf[MAX_PATH];
367
- _TCHAR posblk[128] = {0x00};
417
+ _TCHAR posblk[128] = { 0x00 };
368
418
  #ifdef _WIN32
369
419
  if ((useLongFilename() == false) && _tcsstr(pFullPath, _T(" ")))
370
420
  {
@@ -382,32 +432,33 @@ void nsdatabase::dropTable(const _TCHAR* pFullPath)
382
432
  return;
383
433
  }
384
434
 
385
- char buf2[MAX_PATH]={0x00};
435
+ char buf2[MAX_PATH] = { 0x00 };
386
436
  const char* p = toServerUri(buf2, MAX_PATH, buf, isUseTransactd());
387
437
 
388
-
389
- m_stat = m_btrcallid(TD_CREATETABLE, posblk, NULL, NULL, (void*)p, (uchar_td)strlen(p)+1, CR_SUBOP_DROP,
390
- m_nsimpl->clientID);
438
+ m_stat =
439
+ m_btrcallid(TD_CREATETABLE, posblk, NULL, NULL, (void*)p,
440
+ (uchar_td)strlen(p) + 1, CR_SUBOP_DROP, m_nsimpl->clientID);
391
441
  }
392
442
 
393
443
  void nsdatabase::swapTablename(const _TCHAR* Name1, const _TCHAR* Name2)
394
444
  {
395
- _TCHAR posblk[128] = {0x00};
445
+ _TCHAR posblk[128] = { 0x00 };
396
446
 
397
- char buf1[MAX_PATH]={0x00};
398
- char buf2[MAX_PATH]={0x00};
447
+ char buf1[MAX_PATH] = { 0x00 };
448
+ char buf2[MAX_PATH] = { 0x00 };
399
449
  const char* p = toServerUri(buf1, MAX_PATH, Name1, isUseTransactd());
400
450
  const char* p2 = toServerUri(buf2, MAX_PATH, Name2, isUseTransactd());
401
451
  uint_td len = (uint_td)strlen(p);
402
452
 
403
- m_stat = m_btrcallid(TD_CREATETABLE, posblk, (void*)p, &len, (void*)p2, (uchar_td)strlen(p2),
404
- CR_SUBOP_SWAPNAME, m_nsimpl->clientID);
453
+ m_stat = m_btrcallid(TD_CREATETABLE, posblk, (void*)p, &len, (void*)p2,
454
+ (uchar_td)strlen(p2), CR_SUBOP_SWAPNAME,
455
+ m_nsimpl->clientID);
405
456
  }
406
457
 
407
458
  void nsdatabase::rename(const _TCHAR* pFullPath, const _TCHAR* newName)
408
459
  {
409
460
  _TCHAR buf[MAX_PATH];
410
- _TCHAR posblk[128] = {0x00};
461
+ _TCHAR posblk[128] = { 0x00 };
411
462
  #ifdef _WIN32
412
463
  if ((useLongFilename() == false) && _tcsstr(pFullPath, _T(" ")))
413
464
  {
@@ -424,13 +475,11 @@ void nsdatabase::rename(const _TCHAR* pFullPath, const _TCHAR* newName)
424
475
  return;
425
476
  }
426
477
 
427
- char buf2[MAX_PATH]={0x00};
478
+ char buf2[MAX_PATH] = { 0x00 };
428
479
  const char* p = toServerUri(buf2, MAX_PATH, buf, isUseTransactd());
429
480
  uint_td len = (uint_td)strlen(p);
430
481
 
431
-
432
-
433
- char bufNew[MAX_PATH]={0x00};
482
+ char bufNew[MAX_PATH] = { 0x00 };
434
483
  #ifdef _WIN32
435
484
  if ((useLongFilename() == false) && _tcsstr(newName, _T(" ")))
436
485
  GetShortPathName(newName, buf, MAX_PATH);
@@ -439,16 +488,14 @@ void nsdatabase::rename(const _TCHAR* pFullPath, const _TCHAR* newName)
439
488
  _tcscpy(buf, newName);
440
489
  toServerUri(bufNew, MAX_PATH, newName, isUseTransactd());
441
490
 
442
-
443
-
444
- m_stat = m_btrcallid(TD_CREATETABLE, posblk, (void*)p, &len, (void*)bufNew, (uchar_td)strlen(bufNew),
445
- CR_SUBOP_RENAME, m_nsimpl->clientID);
491
+ m_stat = m_btrcallid(TD_CREATETABLE, posblk, (void*)p, &len, (void*)bufNew,
492
+ (uchar_td)strlen(bufNew), CR_SUBOP_RENAME,
493
+ m_nsimpl->clientID);
446
494
  }
447
495
 
448
496
  void nsdatabase::registerTable(nstable* tb)
449
497
  {
450
- int i;
451
- for (i = 0; i < maxtables; i++)
498
+ for (int i = 0; i < maxtables; i++)
452
499
  {
453
500
  if (m_nsimpl->tables[i] == NULL)
454
501
  {
@@ -461,18 +508,29 @@ void nsdatabase::registerTable(nstable* tb)
461
508
 
462
509
  void nsdatabase::unregisterTable(nstable* table)
463
510
  {
464
- int i;
465
- for (i = 0; i < maxtables; i++)
511
+ for (int i = 0; i < maxtables; i++)
466
512
  {
467
513
  if (m_nsimpl->tables[i] == table)
468
514
  {
469
515
  m_nsimpl->tables[i] = NULL;
470
516
  m_nsimpl->tableCount--;
471
- break;
517
+ break;
472
518
  }
473
519
  }
474
520
  }
475
521
 
522
+ bool nsdatabase::findTable(nstable* tb)
523
+ {
524
+ if (m_nsimpl)
525
+ {
526
+ for (int i = 0; i < maxtables; i++)
527
+ {
528
+ if (m_nsimpl->tables[i] == tb)
529
+ return true;
530
+ }
531
+ }
532
+ return false;
533
+ }
476
534
 
477
535
  void nsdatabase::reset()
478
536
  {
@@ -481,11 +539,12 @@ void nsdatabase::reset()
481
539
  if (m_nsimpl->tranCount)
482
540
  {
483
541
  #ifdef _WIN32
484
- #ifdef ARBTREGN_PKG
485
- int ret = MessageBox(NULL, _T("Is an uncompleted transaction aborted?"), NULL, 33);
486
- #else
487
- int ret = 2;
488
- #endif
542
+ #ifdef LIB_TDCLCPP
543
+ int ret = MessageBox(NULL, _T("Is an uncompleted transaction aborted?"),
544
+ NULL, 33);
545
+ #else
546
+ int ret = 2;
547
+ #endif
489
548
  #else
490
549
  int ret = 2;
491
550
  #endif
@@ -501,7 +560,7 @@ void nsdatabase::reset()
501
560
  {
502
561
  if (m_nsimpl->tables[i] != NULL)
503
562
  {
504
- m_nsimpl->tables[i]->destroy();
563
+ m_nsimpl->tables[i]->destroy();
505
564
  m_nsimpl->tables[i] = NULL;
506
565
  }
507
566
  }
@@ -511,20 +570,22 @@ void nsdatabase::reset()
511
570
  m_nsimpl->bdfPath[0] = 0x00;
512
571
  if (m_btrcallid)
513
572
  {
514
- m_stat = m_btrcallid(TD_RESET_CLIENT, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
515
- m_stat = m_btrcallid(TD_STOP_ENGINE, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
573
+ m_stat = m_btrcallid(TD_RESET_CLIENT, NULL, NULL, NULL, NULL, 0, 0,
574
+ m_nsimpl->clientID);
575
+ m_stat = m_btrcallid(TD_STOP_ENGINE, NULL, NULL, NULL, NULL, 0, 0,
576
+ m_nsimpl->clientID);
516
577
  if (m_stat == ERROR_TD_NOT_CONNECTED)
517
578
  m_stat = STATUS_SUCCESS;
518
579
  }
519
580
  if (getBtrvEntryPoint())
520
581
  m_btrcallid = getBtrvEntryPoint();
521
-
522
582
  }
523
583
 
524
584
  void nsdatabase::beginSnapshot()
525
585
  {
526
586
  if (m_nsimpl->snapShotCount == 0)
527
- m_stat = m_btrcallid(TD_BEGIN_SHAPSHOT, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
587
+ m_stat = m_btrcallid(TD_BEGIN_SHAPSHOT, NULL, NULL, NULL, NULL, 0, 0,
588
+ m_nsimpl->clientID);
528
589
  m_nsimpl->snapShotCount++;
529
590
  }
530
591
 
@@ -532,19 +593,20 @@ void nsdatabase::endSnapshot()
532
593
  {
533
594
  m_nsimpl->snapShotCount--;
534
595
  if (m_nsimpl->snapShotCount == 0)
535
- m_stat = m_btrcallid(TD_END_SNAPSHOT, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
536
-
596
+ m_stat = m_btrcallid(TD_END_SNAPSHOT, NULL, NULL, NULL, NULL, 0, 0,
597
+ m_nsimpl->clientID);
537
598
  }
538
599
 
539
600
  void nsdatabase::beginTrn(short BIAS)
540
601
  {
541
602
  if (m_nsimpl->tranCount == 0)
542
603
  {
543
- m_stat = m_btrcallid((ushort_td)(BIAS + TD_BEGIN_TRANSACTION), NULL, NULL, NULL, NULL, 0, 0,
544
- m_nsimpl->clientID);
604
+ m_stat = m_btrcallid((ushort_td)(BIAS + TD_BEGIN_TRANSACTION), NULL,
605
+ NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
545
606
  if (m_stat == 0)
546
607
  m_nsimpl->tranCount++;
547
- }else
608
+ }
609
+ else
548
610
  m_nsimpl->tranCount++;
549
611
  }
550
612
 
@@ -554,7 +616,8 @@ void nsdatabase::endTrn()
554
616
  m_nsimpl->tranCount--;
555
617
  if (m_nsimpl->tranCount == 0)
556
618
  {
557
- m_stat = m_btrcallid(TD_END_TRANSACTION, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
619
+ m_stat = m_btrcallid(TD_END_TRANSACTION, NULL, NULL, NULL, NULL, 0, 0,
620
+ m_nsimpl->clientID);
558
621
 
559
622
  #ifdef _WIN32
560
623
  g_lastTrnTime = GetTickCount();
@@ -566,7 +629,8 @@ void nsdatabase::endTrn()
566
629
 
567
630
  void nsdatabase::abortTrn()
568
631
  {
569
- m_stat = m_btrcallid(TD_ABORT_TRANSACTION, NULL, NULL, NULL, NULL, 0, 0, m_nsimpl->clientID);
632
+ m_stat = m_btrcallid(TD_ABORT_TRANSACTION, NULL, NULL, NULL, NULL, 0, 0,
633
+ m_nsimpl->clientID);
570
634
 
571
635
  m_nsimpl->tranCount = 0;
572
636
  #ifdef _WIN32
@@ -574,29 +638,33 @@ void nsdatabase::abortTrn()
574
638
  #endif
575
639
  }
576
640
 
577
- short_td nsdatabase::tdapErr(HWND hWnd, _TCHAR* retbuf) {
578
- return nstable::tdapErr(hWnd, m_stat, _T("Engin"), retbuf);}
641
+ short_td nsdatabase::tdapErr(HWND hWnd, _TCHAR* retbuf)
642
+ {
643
+ return nstable::tdapErr(hWnd, m_stat, _T("Engin"), retbuf);
644
+ }
579
645
 
580
646
  void nsdatabase::getBtrVersion(btrVersions* Vers, uchar_td* posblk)
581
647
  {
582
648
 
583
- uchar_td posblkTmp[128] = {0x00};
649
+ uchar_td posblkTmp[128] = { 0x00 };
584
650
  if (posblk == NULL)
585
651
  posblk = posblkTmp;
586
652
 
587
653
  uint_td datalen = sizeof(btrVersions);
588
654
 
589
- m_stat = m_btrcallid(TD_VERSION, posblk, Vers, &datalen, NULL, 0, 0, m_nsimpl->clientID);
655
+ m_stat = m_btrcallid(TD_VERSION, posblk, Vers, &datalen, NULL, 0, 0,
656
+ m_nsimpl->clientID);
590
657
  {
591
658
  bool remote = false;
592
659
  if (uriMode())
593
660
  remote = true;
594
661
  #ifdef _WIN32
595
- else if (_tcsstr(m_nsimpl->bdfPath, PSEPARATOR PSEPARATOR) == m_nsimpl->bdfPath)
662
+ else if (_tcsstr(m_nsimpl->bdfPath, PSEPARATOR PSEPARATOR) ==
663
+ m_nsimpl->bdfPath)
596
664
  remote = true;
597
665
  else
598
666
  {
599
- _TCHAR drive[3] = {0x00};
667
+ _TCHAR drive[3] = { 0x00 };
600
668
  _tcsncpy(drive, m_nsimpl->bdfPath, 2);
601
669
  if (DRIVE_REMOTE == GetDriveType(drive))
602
670
  remote = true;
@@ -604,7 +672,7 @@ void nsdatabase::getBtrVersion(btrVersions* Vers, uchar_td* posblk)
604
672
  #endif
605
673
  if (remote)
606
674
  {
607
- //faile shareing
675
+ // faile shareing
608
676
  if (datalen / 5 == 2)
609
677
  {
610
678
  Vers->versions[2] = Vers->versions[1];
@@ -614,12 +682,17 @@ void nsdatabase::getBtrVersion(btrVersions* Vers, uchar_td* posblk)
614
682
  else
615
683
  memset(&Vers->versions[2], 0, sizeof(btrVersion));
616
684
  }
617
-
618
685
  }
619
686
 
620
- bool nsdatabase::useLongFilename() {return m_nsimpl->uselongFilename;}
687
+ bool nsdatabase::useLongFilename()
688
+ {
689
+ return m_nsimpl->uselongFilename;
690
+ }
621
691
 
622
- void nsdatabase::setUseLongFilename(bool value) {m_nsimpl->uselongFilename = value;}
692
+ void nsdatabase::setUseLongFilename(bool value)
693
+ {
694
+ m_nsimpl->uselongFilename = value;
695
+ }
623
696
 
624
697
  bool nsdatabase::setUseTransactd()
625
698
  {
@@ -631,22 +704,26 @@ bool nsdatabase::setUseTransactd()
631
704
  m_nsimpl->uriMode = true;
632
705
  setLockWaitCount(0);
633
706
  setLockWaitTime(0);
634
-
635
707
  }
636
708
  return (m_btrcallid != NULL);
637
709
  }
638
710
 
639
- bool nsdatabase::isTransactdUri(const _TCHAR* uri) {return (_tcsstr(uri, _T("tdap://")) != NULL);
640
-
711
+ bool nsdatabase::isTransactdUri(const _TCHAR* uri)
712
+ {
713
+ return (_tcsstr(uri, _T("tdap://")) != NULL);
641
714
  }
642
715
 
643
- bool nsdatabase::isUseTransactd() {return (m_btrcallid == getTrnsctdEntryPoint());}
716
+ bool nsdatabase::isUseTransactd()
717
+ {
718
+ return (m_btrcallid == getTrnsctdEntryPoint());
719
+ }
644
720
 
645
721
  void nsdatabase::readDatabaseDirectory(_TCHAR* retBuf, uchar_td buflen)
646
722
  {
647
723
  // keynum is drive name A=1 B=2 C=3 0=default
648
724
  char tmp[128];
649
- m_stat = m_btrcallid(TD_GETDIRECTORY, NULL, NULL, NULL, tmp, 128, 0, m_nsimpl->clientID);
725
+ m_stat = m_btrcallid(TD_GETDIRECTORY, NULL, NULL, NULL, tmp, 128, 0,
726
+ m_nsimpl->clientID);
650
727
  toTChar(retBuf, tmp, buflen);
651
728
  }
652
729
 
@@ -658,11 +735,11 @@ bool nsdatabase::connect(const _TCHAR* URI, bool newConnection)
658
735
 
659
736
  uint_td datalen = 0;
660
737
 
661
- char uri_a[MAX_PATH]={0x00};
738
+ char uri_a[MAX_PATH] = { 0x00 };
662
739
  const char* p = toServerUri(uri_a, MAX_PATH, URI, isUseTransactd());
663
740
  char_td keyNum = newConnection ? 3 : 0;
664
- m_stat = m_btrcallid(TD_CONNECT, NULL, NULL, &datalen, (void*)p, (keylen_td)(strlen(p) + 1),
665
- keyNum, clientID());
741
+ m_stat = m_btrcallid(TD_CONNECT, NULL, NULL, &datalen, (void*)p,
742
+ (keylen_td)(strlen(p) + 1), keyNum, clientID());
666
743
  if (m_stat)
667
744
  return false;
668
745
  return true;
@@ -676,18 +753,17 @@ bool nsdatabase::disconnect(const _TCHAR* URI)
676
753
  uint_td datalen = 0;
677
754
  char uri_a[MAX_PATH];
678
755
  const char* p = toServerUri(uri_a, MAX_PATH, URI, isUseTransactd());
679
- m_stat = m_btrcallid(TD_CONNECT, NULL, NULL, &datalen, (void*)p, (keylen_td)(strlen(p) + 1), 1,
680
- clientID());
756
+ m_stat = m_btrcallid(TD_CONNECT, NULL, NULL, &datalen, (void*)p,
757
+ (keylen_td)(strlen(p) + 1), 1, clientID());
681
758
  if (m_stat)
682
759
  return false;
683
760
  return true;
684
-
685
761
  }
686
762
 
687
763
  bool nsdatabase::trnsactionFlushWaitStatus()
688
764
  {
689
765
  bool ret = false;
690
- #ifdef _WIN32
766
+ #ifdef _WIN32
691
767
  if (g_lastTrnTime)
692
768
  ret = ((GetTickCount() - g_lastTrnTime) < 8000);
693
769
  else
@@ -706,22 +782,73 @@ unsigned int nsdatabase::execCodePage()
706
782
  return m_execCodepage;
707
783
  }
708
784
 
709
- const char* nsdatabase::toServerUri(char* buf, int buflen, const _TCHAR* src, bool trd)
785
+ const char* nsdatabase::toServerUri(char* buf, int buflen, const _TCHAR* src,
786
+ bool trd)
710
787
  {
711
- #ifdef _UNICODE
788
+ #ifdef _UNICODE
712
789
  if (trd)
713
790
  {
714
791
  stringConverter cv(CP_UTF8, GetACP());
715
792
  cv.convert(buf, buflen, src, strlen_t(src));
716
793
  return buf;
717
794
  }
718
- #endif
795
+ #endif
719
796
  return toChar(buf, src, buflen);
797
+ }
798
+
799
+ void nsdatabase::setTestPtrIgnore(bool v)
800
+ {
801
+ m_nsimpl->ignoreTestPtr = v;
802
+ }
803
+
804
+ bool nsdatabase::isTestPtrIgnore() const
805
+ {
806
+ return m_nsimpl->ignoreTestPtr;
807
+ }
808
+
809
+ bool nsdatabase::testTablePtr(nstable* ptr)
810
+ {
811
+ if (g_checkTablePtr)
812
+ {
813
+ boost::mutex::scoped_lock lck(g_mutex);
814
+ for (int i = 0; i <= g_maxEnginIndex; i++)
815
+ {
816
+ nsdatabase* db = engins()[i];
817
+ if (db != NULL)
818
+ {
819
+ if (db->findTable(ptr))
820
+ {
821
+ if (db->isTestPtrIgnore())
822
+ {
823
+ db->setTestPtrIgnore(false);
824
+ return false;
825
+ }
826
+ return true;
827
+ }
828
+ }
829
+ }
830
+ return false;
831
+ }
832
+ return true;
833
+ }
834
+
835
+ void nsdatabase::setCheckTablePtr(bool v)
836
+ {
837
+ g_checkTablePtr = v;
838
+ }
720
839
 
840
+ DLLUNLOADCALLBACK_PTR nsdatabase::getDllUnloadCallbackFunc()
841
+ {
842
+ if (hTrsdDLL == NULL)
843
+ hTrsdDLL = LoadLibraryA(LIB_PREFIX TDCLC_LIBNAME);
844
+ if (hTrsdDLL)
845
+ return (DLLUNLOADCALLBACK_PTR)GetProcAddress((HINSTANCE)hTrsdDLL,
846
+ "CallbackRegist");
847
+ return NULL;
721
848
  }
722
849
 
723
- }// namespace client
724
- }// namespace tdap
725
- }// namespace protocol
726
- }// namespace db
727
- }// namespace bzs
850
+ } // namespace client
851
+ } // namespace tdap
852
+ } // namespace protocol
853
+ } // namespace db
854
+ } // namespace bzs