transactd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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