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
@@ -1,21 +1,21 @@
1
- /*=================================================================
2
- Copyright (C) 2012 2013 BizStation Corp All rights reserved.
1
+ /* =================================================================
2
+ Copyright (C) 2012 2013 BizStation Corp All rights reserved.
3
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.
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
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.
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
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
- =================================================================*/
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
19
 
20
20
  #include <bzs/db/protocol/tdap/client/client.h>
21
21
  #include <bzs/db/protocol/tdap/tdapcapi.h>
@@ -27,434 +27,453 @@
27
27
  #include <direct.h>
28
28
  #endif
29
29
 
30
-
31
-
32
30
  using namespace bzs::db::protocol::tdap::client;
33
31
  using namespace bzs::db::protocol::tdap;
34
32
  using namespace bzs::netsvc::client;
35
33
 
36
- #define MYSQL_VERSION_ID 50609
34
+ #define MYSQL_VERSION_ID 50609
37
35
  #define PIPENAME "Transactd"
38
36
 
39
37
  #ifdef __BCPLUSPLUS__
40
- # ifdef _WIN64
41
- # pragma comment(lib, "libboost_system-bcb64-mt-s-1_50.a")
42
- # pragma comment(lib, "libboost_thread-bcb64-mt-s-1_50.a")
43
- # else
44
- # pragma comment(lib, "libboost_system-bcb-mt-s-1_39.lib")
45
- # pragma comment(lib, "libboost_thread-bcb-mt-s-1_39.lib")
46
- # endif
38
+ #define BZS_LINK_BOOST_SYSTEM
39
+ #define BZS_LINK_BOOST_THREAD
40
+ #include <bzs/env/boost_bcb_link.h>
47
41
  #endif
48
42
 
49
-
50
43
  void writeErrorLog(int err, const char* msg);
51
-
44
+ dllUnloadCallback dllUnloadCallbackFunc = NULL;
52
45
 
53
46
  #ifdef USETLS
54
47
  tls_key g_tlsiID1;
48
+ tls_key g_tlsiID_SC1;
55
49
  #else
56
50
  __THREAD clientID __THREAD_BCB g_cid;
57
51
  __THREAD bool __THREAD_BCB g_initCid = false;
58
52
  #endif
59
53
 
54
+ #ifdef _WIN32
60
55
 
56
+ BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
57
+ {
58
+ if (reason == DLL_PROCESS_ATTACH)
59
+ {
60
+ #ifdef USETLS
61
+ if ((g_tlsiID = TlsAlloc()) == TLS_OUT_OF_INDEXES)
62
+ return FALSE;
63
+ if ((g_tlsiID1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
64
+ return FALSE;
65
+ if ((g_tlsiID_SC1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
66
+ return FALSE;
67
+ #endif
61
68
 
69
+ m_cons = new connections(PIPENAME);
70
+ }
71
+ else if (reason == DLL_THREAD_DETACH)
72
+ {
73
+ #ifdef USETLS
74
+ delete (bzs::db::protocol::tdap::client::client*)tls_getspecific(
75
+ g_tlsiID);
76
+ tls_setspecific(g_tlsiID1, 0);
77
+ #else
78
+ delete g_client;
79
+ g_client = NULL;
80
+ #endif
81
+ }
82
+ else if (reason == DLL_PROCESS_DETACH)
83
+ {
84
+ if (dllUnloadCallbackFunc)
85
+ dllUnloadCallbackFunc();
62
86
 
63
- #ifdef _WIN32
87
+ delete m_cons;
88
+ m_cons = NULL;
64
89
 
65
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
66
- {
67
- if (reason == DLL_PROCESS_ATTACH)
68
- {
69
- #ifdef USETLS
70
- if ((g_tlsiID = TlsAlloc()) == TLS_OUT_OF_INDEXES)
71
- return FALSE;
72
- if ((g_tlsiID1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
73
- return FALSE;
74
- #endif
75
-
76
- m_cons = new connections(PIPENAME);
77
- }else if(reason == DLL_THREAD_DETACH)
78
- {
79
- #ifdef USETLS
80
- delete (bzs::db::protocol::tdap::client::client*)tls_getspecific(g_tlsiID);
81
- #else
82
- delete g_client;
83
- #endif
84
- }
85
- else if (reason == DLL_PROCESS_DETACH)
86
- {
87
- delete m_cons;
88
- m_cons=NULL;
89
-
90
- #ifdef USETLS
91
- TlsFree(g_tlsiID);
92
- TlsFree(g_tlsiID1);
93
-
94
- #endif
95
- }
96
- return TRUE;
90
+ #ifdef USETLS
91
+ TlsFree(g_tlsiID);
92
+ TlsFree(g_tlsiID1);
93
+ TlsFree(g_tlsiID_SC1);
94
+ #endif
95
+ }
96
+ return TRUE;
97
97
  }
98
- #else
98
+ #else // NOT _WIN32
99
+
100
+ void __attribute__((constructor)) onLoadLibrary(void);
101
+ void __attribute__((destructor)) onUnloadLibrary(void);
99
102
 
100
- void __attribute__ ((constructor)) onLoadLibrary(void);
101
- void __attribute__ ((destructor)) onUnloadLibrary(void);
103
+ #if (__BCPLUSPLUS__ && defined(__APPLE__))
104
+ #pragma exit onUnloadLibrary
105
+ #pragma startup onLoadLibrary
106
+ #endif
102
107
 
103
108
  void onLoadLibrary(void)
104
109
  {
105
- m_cons = new connections(PIPENAME);
106
- #ifdef USETLS
107
- pthread_key_create(&g_tlsiID, NULL);
108
- pthread_key_create(&g_tlsiID1, NULL);
109
- #endif
110
-
110
+ m_cons = new connections(PIPENAME);
111
+ #ifdef USETLS
112
+ pthread_key_create(&g_tlsiID, NULL);
113
+ pthread_key_create(&g_tlsiID1, NULL);
114
+ pthread_key_create(&g_tlsiID_SC1, NULL);
115
+ #endif
111
116
  }
117
+
112
118
  void onUnloadLibrary(void)
113
119
  {
120
+ if (dllUnloadCallbackFunc)
121
+ dllUnloadCallbackFunc();
114
122
  delete m_cons;
115
- m_cons=NULL;
116
- #ifdef USETLS
117
- pthread_key_delete(g_tlsiID);
118
- pthread_key_delete(g_tlsiID1);
119
- #endif
120
- }
123
+ m_cons = NULL;
124
+ #ifdef USETLS
125
+ pthread_key_delete(g_tlsiID);
126
+ pthread_key_delete(g_tlsiID1);
127
+ pthread_key_delete(g_tlsiID_SC1);
121
128
  #endif
129
+ }
130
+ #endif // NOT _WIN32
122
131
 
123
- extern "C" short_td __STDCALL
124
- BTRCALLID(ushort_td op, posblk* pbk, void_td* data,
125
- uint_td* datalen, void_td* keybuf, keylen_td keylen,
126
- char_td keyNum, clientID* cid)
132
+ extern "C" PACKAGE_OSX short_td __STDCALL
133
+ BTRCALLID(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
134
+ void_td* keybuf, keylen_td keylen, char_td keyNum, clientID* cid)
127
135
  {
128
- bzs::db::protocol::tdap::client::client* client_t = getClientThread();
129
-
130
- short_td ret;
131
- try
132
- {
133
-
134
- if ((TD_GET_BLOB_BUF != op) && (TD_ADD_SENDBLOB != op))
135
- client_t->setParam(op, pbk,data,datalen,keybuf,keylen,keyNum,cid);
136
-
137
- if (client_t->stop_if())
138
- {
139
- client_t->cleanup();
140
- return 0;
141
- }
142
- if (cid==NULL) return 1;
143
-
144
- switch(op)
145
- {
146
- case TD_GET_BLOB_BUF:
147
- return client_t->getBlobBuffer((const bzs::db::blobHeader**)data);
148
- case TD_ADD_SENDBLOB:
149
- return client_t->addBlob((const bzs::db::blob*)data, (keyNum == TD_ASBLOB_ENDROW));
150
- case TD_OPENTABLE:
151
- case TD_CREATETABLE:
152
- client_t->connect();
153
- if (client_t->result()==0)
154
- {
155
- if (op == TD_CREATETABLE)
156
- {
157
- if (client_t->readServerCharsetIndex())
158
- client_t->create();
159
- else
160
- {
161
- client_t->cleanup();
162
- return 1;
163
- }
164
- }
165
- else if (op == TD_OPENTABLE)
166
- client_t->req().paramMask = P_MASK_ALL;
167
- client_t->buildDualChasetKeybuf();
168
- }
169
- break;
170
- case TD_CONNECT:
171
- {
172
- client_t->cmdConnect();
173
- break;
174
- }
175
- case TD_STASTISTICS:
176
- client_t->req().paramMask = P_MASK_DATALEN|P_MASK_KEYBUF|P_MASK_KEYNUM;
177
- break;
178
- case TD_RESET_CLIENT:
179
- client_t->req().paramMask = P_MASK_KEYONLY;
180
- break;
181
- case TD_DROP_INDEX:
182
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_KEYNUM;
183
- break;
184
- case TD_REC_INSERT:
185
- case TD_INSERT_BULK:
186
- case TD_REC_UPDATE:
187
- client_t->req().paramMask = P_MASK_NOKEYBUF|P_MASK_BLOBBODY;
188
- break;
189
- case TD_REC_UPDATEATKEY:
190
- client_t->req().paramMask = P_MASK_ALL|P_MASK_BLOBBODY;
191
- break;
192
- case TD_MOVE_BOOKMARK:
193
- case TD_MOVE_PER:
194
- case TD_BUILD_INDEX:
195
- client_t->req().paramMask = P_MASK_NOKEYBUF;
196
- break;
197
- case TD_UNLOCK:
198
- case TD_UPDATE_PART:
199
- client_t->cleanup();
200
- return 0;
201
- case TD_REC_DELETE:
202
- case TD_CLOSETABLE:
203
- case TD_CLEAR_OWNERNAME:
204
- case TD_AUTOMEKE_SCHEMA:
205
- client_t->req().paramMask = P_MASK_POSBLK;
206
- break;
207
- case TD_END_TRANSACTION:
208
- case TD_BEGIN_TRANSACTION:
209
- case TD_ABORT_TRANSACTION:
210
- case TD_BEGIN_SHAPSHOT:
211
- case TD_END_SNAPSHOT:
212
- client_t->req().paramMask = 0;
213
- break;
214
- case TD_KEY_FIRST:
215
- case TD_KEY_LAST:
216
- case TD_KEY_FIRST_KO:
217
- case TD_KEY_LAST_KO:
218
- client_t->req().paramMask = P_MASK_POS_LEN_KEY;
219
- if (op> 50)
220
- client_t->req().paramMask &= ~P_MASK_DATALEN;
221
- break;
222
- case TD_KEY_SEEK:
223
- case TD_KEY_NEXT:
224
- case TD_KEY_PREV:
225
- case TD_KEY_AFTER:
226
- case TD_KEY_OR_AFTER:
227
- case TD_KEY_BEFORE:
228
- case TD_KEY_OR_BEFORE:
229
- case TD_KEY_NEXT_KO:
230
- case TD_KEY_PREV_KO:
231
- case TD_KEY_GT_KO:
232
- case TD_KEY_GE_KO:
233
- case TD_KEY_LT_KO:
234
- case TD_KEY_LE_KO:
235
- case TD_REC_DELLETEATKEY:
236
- client_t->req().paramMask = P_MASK_KEYNAVI;
237
- if (op> 50)
238
- client_t->req().paramMask &= ~P_MASK_DATALEN;
239
- break;
240
- case TD_KEY_NEXT_MULTI:
241
- case TD_KEY_PREV_MULTI:
242
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_DATA|P_MASK_DATALEN|P_MASK_EX_SENDLEN|P_MASK_KEYNUM;
243
- break;
244
- case TD_KEY_GE_NEXT_MULTI:
245
- case TD_KEY_LE_PREV_MULTI:
246
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_DATA|P_MASK_DATALEN|P_MASK_EX_SENDLEN|P_MASK_KEYNUM|P_MASK_KEYBUF;
247
- break;
248
- case TD_GET_PER:
249
- case TD_SET_OWNERNAME:
250
- case TD_TABLE_INFO:
251
- client_t->req().paramMask = P_MASK_ALL;
252
- break;
253
- case TD_BOOKMARK:
254
- case TD_POS_FIRST:
255
- case TD_POS_LAST:
256
- case TD_POS_NEXT:
257
- case TD_POS_PREV:
258
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_DATALEN;
259
- break;
260
- case TD_POS_NEXT_MULTI:
261
- case TD_POS_PREV_MULTI:
262
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_DATA
263
- |P_MASK_DATALEN|P_MASK_EX_SENDLEN;
264
- break;
265
- case TD_KEY_SEEK_MULTI:
266
- client_t->req().paramMask = P_MASK_POSBLK|P_MASK_DATA|P_MASK_KEYNUM
267
- |P_MASK_DATALEN|P_MASK_EX_SENDLEN;
268
- break;
269
- case TD_GETDIRECTORY:
270
- case TD_SETDIRECTORY:
271
- break;
272
- case TD_VERSION:
273
- {
274
- ushort_td datalen = *client_t->req().datalen;
275
- if (datalen >= sizeof(btrVersion))
276
- {
277
- btrVersion& v = (btrVersion&)*((char*)client_t->req().data);
278
- v.majorVersion = atoi(CPP_INTERFACE_VER_MAJOR);
279
- v.minorVersion = atoi(CPP_INTERFACE_VER_MINOR);
280
- v.type = 'N';
281
- client_t->req().paramMask = P_MASK_DATA|P_MASK_DATALEN;
282
- }else
283
- client_t->req().result = STATUS_BUFFERTOOSMALL;
284
- if (datalen < sizeof(btrVersion)*2)
285
- {
286
- client_t->cleanup();
287
- return 0;
288
- }
289
- break;
290
- }
291
-
292
-
293
- }
294
- short_td ret = client_t->execute();
295
- client_t->cleanup();
296
- return ret;
297
- }
298
- catch(boost::system::system_error &e)
299
- {
300
- switch(e.code().value())
301
- {
302
- case 11004:
303
- case 11001:
304
- ret= ERROR_TD_HOSTNAME_NOT_FOUND;
305
- break;
306
- case 10061:
307
- ret= ERROR_TD_CONNECTION_FAILURE;
308
- break;
136
+ bzs::db::protocol::tdap::client::client* client_t = getClientThread();
137
+
138
+ short_td ret;
139
+ try
140
+ {
141
+
142
+ if ((TD_GET_BLOB_BUF != op) && (TD_ADD_SENDBLOB != op))
143
+ client_t->setParam(op, pbk, data, datalen, keybuf, keylen, keyNum,
144
+ cid);
145
+
146
+ if (client_t->stop_if())
147
+ {
148
+ client_t->cleanup();
149
+ return 0;
150
+ }
151
+ if (cid == NULL)
152
+ return 1;
153
+
154
+ switch (op)
155
+ {
156
+ case TD_GET_BLOB_BUF:
157
+ return client_t->getBlobBuffer((const bzs::db::blobHeader**)data);
158
+ case TD_ADD_SENDBLOB:
159
+ return client_t->addBlob((const bzs::db::blob*)data,
160
+ (keyNum == TD_ASBLOB_ENDROW));
161
+ case TD_OPENTABLE:
162
+ case TD_CREATETABLE:
163
+ client_t->connect();
164
+ if (client_t->result() == 0)
165
+ {
166
+ if (op == TD_CREATETABLE)
167
+ {
168
+ if (client_t->readServerCharsetIndex())
169
+ client_t->create();
170
+ else
171
+ {
172
+ client_t->cleanup();
173
+ return 1;
174
+ }
175
+ }
176
+ else if (op == TD_OPENTABLE)
177
+ client_t->req().paramMask = P_MASK_ALL;
178
+ if (!client_t->buildDualChasetKeybuf())
179
+ {
180
+ client_t->cleanup();
181
+ return SERVER_CLIENT_NOT_COMPATIBLE;
182
+ }
183
+ }
184
+ break;
185
+ case TD_CONNECT:
186
+ {
187
+ client_t->cmdConnect();
188
+ break;
189
+ }
190
+ case TD_STASTISTICS:
191
+ client_t->req().paramMask =
192
+ P_MASK_DATALEN | P_MASK_KEYBUF | P_MASK_KEYNUM;
193
+ break;
194
+ case TD_RESET_CLIENT:
195
+ client_t->req().paramMask = P_MASK_KEYONLY;
196
+ break;
197
+ case TD_DROP_INDEX:
198
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_KEYNUM;
199
+ break;
200
+ case TD_REC_INSERT:
201
+ case TD_INSERT_BULK:
202
+ case TD_REC_UPDATE:
203
+ client_t->req().paramMask = P_MASK_NOKEYBUF | P_MASK_BLOBBODY;
204
+ break;
205
+ case TD_REC_UPDATEATKEY:
206
+ client_t->req().paramMask = P_MASK_ALL | P_MASK_BLOBBODY;
207
+ break;
208
+ case TD_MOVE_BOOKMARK:
209
+ case TD_MOVE_PER:
210
+ case TD_BUILD_INDEX:
211
+ client_t->req().paramMask = P_MASK_NOKEYBUF;
212
+ break;
213
+ case TD_UNLOCK:
214
+ case TD_UPDATE_PART:
215
+ client_t->cleanup();
216
+ return 0;
217
+ case TD_REC_DELETE:
218
+ case TD_CLOSETABLE:
219
+ case TD_CLEAR_OWNERNAME:
220
+ case TD_AUTOMEKE_SCHEMA:
221
+ client_t->req().paramMask = P_MASK_POSBLK;
222
+ break;
223
+ case TD_END_TRANSACTION:
224
+ case TD_BEGIN_TRANSACTION:
225
+ case TD_ABORT_TRANSACTION:
226
+ case TD_BEGIN_SHAPSHOT:
227
+ case TD_END_SNAPSHOT:
228
+ client_t->req().paramMask = 0;
229
+ break;
230
+ case TD_KEY_FIRST:
231
+ case TD_KEY_LAST:
232
+ case TD_KEY_FIRST_KO:
233
+ case TD_KEY_LAST_KO:
234
+ client_t->req().paramMask = P_MASK_POS_LEN_KEY;
235
+ if (op > 50)
236
+ client_t->req().paramMask &= ~P_MASK_DATALEN;
237
+ break;
238
+ case TD_KEY_SEEK:
239
+ case TD_KEY_NEXT:
240
+ case TD_KEY_PREV:
241
+ case TD_KEY_AFTER:
242
+ case TD_KEY_OR_AFTER:
243
+ case TD_KEY_BEFORE:
244
+ case TD_KEY_OR_BEFORE:
245
+ case TD_KEY_NEXT_KO:
246
+ case TD_KEY_PREV_KO:
247
+ case TD_KEY_GT_KO:
248
+ case TD_KEY_GE_KO:
249
+ case TD_KEY_LT_KO:
250
+ case TD_KEY_LE_KO:
251
+ case TD_REC_DELLETEATKEY:
252
+ client_t->req().paramMask = P_MASK_KEYNAVI;
253
+ if (op > 50)
254
+ client_t->req().paramMask &= ~P_MASK_DATALEN;
255
+ break;
256
+ case TD_KEY_NEXT_MULTI:
257
+ case TD_KEY_PREV_MULTI:
258
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
259
+ P_MASK_DATALEN | P_MASK_EX_SENDLEN |
260
+ P_MASK_KEYNUM;
261
+ break;
262
+ case TD_KEY_GE_NEXT_MULTI:
263
+ case TD_KEY_LE_PREV_MULTI:
264
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
265
+ P_MASK_DATALEN | P_MASK_EX_SENDLEN |
266
+ P_MASK_KEYNUM | P_MASK_KEYBUF;
267
+ break;
268
+ case TD_GET_PER:
269
+ case TD_SET_OWNERNAME:
270
+ case TD_TABLE_INFO:
271
+ client_t->req().paramMask = P_MASK_ALL;
272
+ break;
273
+ case TD_BOOKMARK:
274
+ case TD_POS_FIRST:
275
+ case TD_POS_LAST:
276
+ case TD_POS_NEXT:
277
+ case TD_POS_PREV:
278
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATALEN;
279
+ break;
280
+ case TD_POS_NEXT_MULTI:
281
+ case TD_POS_PREV_MULTI:
282
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
283
+ P_MASK_DATALEN | P_MASK_EX_SENDLEN;
284
+ break;
285
+ case TD_KEY_SEEK_MULTI:
286
+ client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
287
+ P_MASK_KEYNUM | P_MASK_DATALEN |
288
+ P_MASK_EX_SENDLEN;
289
+ break;
290
+ case TD_GETDIRECTORY:
291
+ case TD_SETDIRECTORY:
292
+ break;
293
+ case TD_VERSION:
294
+ {
295
+ ushort_td datalen = *client_t->req().datalen;
296
+ if (datalen >= sizeof(btrVersion))
297
+ {
298
+ btrVersion& v = (btrVersion&)*((char*)client_t->req().data);
299
+ v.majorVersion = atoi(CPP_INTERFACE_VER_MAJOR);
300
+ v.minorVersion = atoi(CPP_INTERFACE_VER_MINOR);
301
+ v.type = 'N';
302
+ client_t->req().paramMask = P_MASK_DATA | P_MASK_DATALEN;
303
+ }
304
+ else
305
+ client_t->req().result = STATUS_BUFFERTOOSMALL;
306
+ if (datalen < sizeof(btrVersion) * 2)
307
+ {
308
+ client_t->cleanup();
309
+ return 0;
310
+ }
311
+ break;
312
+ }
313
+ }
314
+ short_td ret = client_t->execute();
315
+ client_t->cleanup();
316
+ return ret;
317
+ }
318
+ catch (boost::system::system_error& e)
319
+ {
320
+ switch (e.code().value())
321
+ {
322
+ case 11004:
323
+ case 11001:
324
+ ret = ERROR_TD_HOSTNAME_NOT_FOUND;
325
+ break;
326
+ case 10061:
327
+ ret = ERROR_TD_CONNECTION_FAILURE;
328
+ break;
309
329
  case 232:
310
- case 109:
311
- case 2:
312
- case 1:
313
- ret= ERROR_TD_INVALID_CLINETHOST;
314
- break;
315
- default:
316
- ret = e.code().value() + 20000;
317
- }
318
- OutputDebugString(e.what());
319
- writeErrorLog(ret, e.what());
320
- }
321
- catch(bzs::netsvc::client::exception &e)
322
- {
323
- OutputDebugString(e.what());
324
- ret = e.error();
325
- writeErrorLog(e.error(), e.what());
326
- }
327
- catch(std::exception &e)
328
- {
329
- ret = 1;
330
- OutputDebugString(e.what());
331
- writeErrorLog(30000, e.what());
332
- }
333
- return ret;
330
+ case 109:
331
+ case 2:
332
+ case 1:
333
+ ret = ERROR_TD_INVALID_CLINETHOST;
334
+ break;
335
+ default:
336
+ ret = e.code().value() + 20000;
337
+ }
338
+ OutputDebugString(e.what());
339
+ writeErrorLog(ret, e.what());
340
+ }
341
+ catch (bzs::netsvc::client::exception& e)
342
+ {
343
+ OutputDebugString(e.what());
344
+ ret = e.error();
345
+ writeErrorLog(e.error(), e.what());
346
+ }
347
+ catch (std::exception& e)
348
+ {
349
+ ret = 1;
350
+ OutputDebugString(e.what());
351
+ writeErrorLog(30000, e.what());
352
+ }
353
+ return ret;
334
354
  }
335
355
 
336
356
  mutex g_mutex;
337
357
 
338
358
  const char* dateTimeStr(char* buf, unsigned int bufsize)
339
359
  {
340
- struct tm* date;
341
- time_t now;
342
- time(&now);
360
+ struct tm* date;
361
+ time_t now;
362
+ time(&now);
343
363
  #ifdef __MINGW32__
344
- date = localtime(&now);
345
- #else
346
- struct tm tmp;
347
- date = &tmp;
348
- localtime_x(date, &now);
349
- #endif
350
- sprintf_s(buf, bufsize, "%04d/%02d/%02d %02d:%02d:%02d"
351
- ,date->tm_year + 1900, date->tm_mon + 1,date->tm_mday
352
- ,date->tm_hour, date->tm_min, date->tm_sec);
353
- return buf;
364
+ date = localtime(&now);
365
+ #else // NOT __MINGW32__
366
+ struct tm tmp;
367
+ date = &tmp;
368
+ localtime_x(date, &now);
369
+ #endif // NOT __MINGW32__
370
+ sprintf_s(buf, bufsize, "%04d/%02d/%02d %02d:%02d:%02d",
371
+ date->tm_year + 1900, date->tm_mon + 1, date->tm_mday,
372
+ date->tm_hour, date->tm_min, date->tm_sec);
373
+ return buf;
354
374
  }
355
375
 
356
376
  void writeErrorLog(int err, const char* msg)
357
377
  {
358
- mutex::scoped_lock lck(g_mutex);
359
- char buf[MAX_PATH];
360
- char buf2[30];
361
- #ifdef WIN32
362
- SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA, NULL,SHGFP_TYPE_CURRENT, buf);
363
- strcat_s(buf, MAX_PATH, PSEPARATOR "BizStation");
364
- _mkdir(buf);
365
- strcat_s(buf, MAX_PATH, PSEPARATOR "Transactd");
366
- _mkdir(buf);
367
- #else
368
- strcpy_s(buf, MAX_PATH, "/var/log");
369
- #endif
370
-
371
- strcat_s(buf, MAX_PATH, PSEPARATOR "trnsctcl_error.log");
372
- FILE* fp = fileOpen(buf, "a+");
373
- if (fp)
374
- {
375
- fprintf(fp, "%s Error No.%d %s\n", dateTimeStr(buf2, 30), err, msg);
376
- fclose(fp);
377
- }
378
- }
378
+ mutex::scoped_lock lck(g_mutex);
379
+ char buf[MAX_PATH];
380
+ char buf2[30];
381
+ #ifdef WIN32
382
+ SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, buf);
383
+ strcat_s(buf, MAX_PATH, PSEPARATOR "BizStation");
384
+ _mkdir(buf);
385
+ strcat_s(buf, MAX_PATH, PSEPARATOR "Transactd");
386
+ _mkdir(buf);
387
+ #else
388
+ strcpy_s(buf, MAX_PATH, "/var/log");
389
+ #endif
379
390
 
391
+ strcat_s(buf, MAX_PATH, PSEPARATOR "trnsctcl_error.log");
392
+ FILE* fp = fileOpen(buf, "a+");
393
+ if (fp)
394
+ {
395
+ fprintf(fp, "%s Error No.%d %s\n", dateTimeStr(buf2, 30), err, msg);
396
+ fclose(fp);
397
+ }
398
+ }
380
399
 
381
400
  inline clientID* getCid()
382
401
  {
383
402
  #ifdef USETLS
384
- clientID* p = (clientID*)tls_getspecific(g_tlsiID1);
385
- if (p==NULL)
386
- {
387
- clientID* p = new clientID();
388
- memset(p, 0, sizeof(clientID));
389
- p->id = 1;
390
- p->aid[0] = 'G';
391
- p->aid[1] = 'X';
392
- tls_setspecific(g_tlsiID1, p);
393
- }
394
- return p;
403
+ clientID* p = (clientID*)tls_getspecific(g_tlsiID1);
404
+ if (p == NULL)
405
+ {
406
+ clientID* p = new clientID();
407
+ memset(p, 0, sizeof(clientID));
408
+ p->id = 1;
409
+ p->aid[0] = 'G';
410
+ p->aid[1] = 'X';
411
+ tls_setspecific(g_tlsiID1, p);
412
+ }
413
+ return p;
395
414
  #else
396
- return &g_cid;
397
- #endif
415
+ return &g_cid;
416
+ #endif
398
417
  }
399
418
 
400
-
401
419
  void initCid()
402
420
  {
403
421
  #ifndef USETLS
404
- if (!g_initCid)
405
- {
406
- g_initCid = true;
407
- memset(&g_cid, 0, sizeof(clientID));
408
- g_cid.id = 1;
409
- g_cid.aid[0] = 'G';
410
- g_cid.aid[1] = 'X';
411
- }
422
+ if (!g_initCid)
423
+ {
424
+ g_initCid = true;
425
+ memset(&g_cid, 0, sizeof(clientID));
426
+ g_cid.id = 1;
427
+ g_cid.aid[0] = 'G';
428
+ g_cid.aid[1] = 'X';
429
+ }
412
430
  #endif
413
431
  }
414
432
 
415
-
416
- extern "C" short_td __STDCALL
417
- BTRVID(ushort_td op, posblk* pbk, void_td* data,
418
- uint_td* datalen, void_td* keybuf, char_td keyNum, clientID* cid)
433
+ extern "C" PACKAGE_OSX short_td BTRVID(ushort_td op, posblk* pbk, void_td* data,
434
+ uint_td* datalen, void_td* keybuf,
435
+ char_td keyNum, clientID* cid)
419
436
  {
420
- // If keybuf size is less than 255 byte then it will be buffer overrun.
421
- // It need know size of key buffer before call.
422
- keylen_td keylen = 255;
423
- return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
437
+ // If keybuf size is less than 255 byte then it will be buffer overrun.
438
+ // It need know size of key buffer before call.
439
+ keylen_td keylen = 255;
440
+ return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
424
441
  }
425
442
 
426
- extern "C" short_td __STDCALL
427
- BTRV(ushort_td op, posblk* pbk, void_td* data,
428
- uint_td* datalen, void_td* keybuf, char_td keyNum)
443
+ extern "C" PACKAGE_OSX short_td __STDCALL BTRV(ushort_td op, posblk* pbk,
444
+ void_td* data, uint_td* datalen,
445
+ void_td* keybuf, char_td keyNum)
429
446
  {
430
- initCid();
431
- return BTRVID(op, pbk, data, datalen, keybuf, keyNum, getCid());
447
+ initCid();
448
+ return BTRVID(op, pbk, data, datalen, keybuf, keyNum, getCid());
432
449
  }
433
450
 
434
- extern "C" short_td __STDCALL
435
- BTRCALL(ushort_td op, posblk* pbk, void_td* data,
436
- uint_td* datalen, void_td* keybuf, keylen_td keylen,
437
- char_td keyNum)
451
+ extern "C" PACKAGE_OSX short_td __STDCALL
452
+ BTRCALL(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
453
+ void_td* keybuf, keylen_td keylen, char_td keyNum)
438
454
  {
439
- initCid();
440
- return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
455
+ initCid();
456
+ return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
441
457
  }
442
458
 
443
- extern "C" short_td __STDCALL
444
- BTRCALL32(ushort_td op, posblk* pbk, void_td* data,
445
- uint_td* datalen, void_td* keybuf, keylen_td keylen,
446
- char_td keyNum)
459
+ extern "C" PACKAGE_OSX short_td __STDCALL
460
+ BTRCALL32(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
461
+ void_td* keybuf, keylen_td keylen, char_td keyNum)
447
462
  {
448
- initCid();
449
- return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
463
+ initCid();
464
+ return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
450
465
  }
451
466
 
452
- extern "C" short_td __STDCALL
453
- BTRCALLID32(ushort_td op, posblk* pbk, void_td* data,
454
- uint_td* datalen, void_td* keybuf, keylen_td keylen,
455
- char_td keyNum, clientID* cid)
467
+ extern "C" PACKAGE_OSX short_td __STDCALL
468
+ BTRCALLID32(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
469
+ void_td* keybuf, keylen_td keylen, char_td keyNum,
470
+ clientID* cid)
456
471
  {
457
- return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
472
+ return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
458
473
  }
459
474
 
460
-
475
+ extern "C" PACKAGE_OSX short_td __STDCALL CallbackRegist(dllUnloadCallback func)
476
+ {
477
+ dllUnloadCallbackFunc = func;
478
+ return 0;
479
+ }