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,320 +1,361 @@
1
- #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
2
- #define BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
3
- /*=================================================================
4
- Copyright (C) 2012 2013 BizStation Corp All rights reserved.
5
-
6
- This program is free software; you can redistribute it and/or
7
- modify it under the terms of the GNU General Public License
8
- as published by the Free Software Foundation; either version 2
9
- of the License, or (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
- 02111-1307, USA.
20
- =================================================================*/
21
- #include "sqlBuilder.h"
22
- #include "request.h"
23
- #include <bzs/db/blobBuffer.h>
24
- #include <boost/thread/mutex.hpp>
25
- #include <bzs/db/protocol/tdap/tdapSchema.h>
26
- #include <bzs/netsvc/client/tcpClient.h>
27
- #include <bzs/db/protocol/tdap/tdapcapi.h>
28
- #include <bzs/db/protocol/tdap/mysql/characterset.h>
29
- #include <bzs/env/compiler.h>
30
- #include <bzs/rtl/stl_uty.h>
31
- #include <vector>
32
- #ifdef _WIN32
33
- #include <mbstring.h>
34
- #else
35
- #include <pthread.h>
36
- #endif
37
-
38
- extern bzs::netsvc::client::connections* m_cons;
39
-
40
- namespace bzs
41
- {
42
- namespace db
43
- {
44
- namespace protocol
45
- {
46
- namespace tdap
47
- {
48
- namespace client
49
- {
50
- #define TABELNAME_PREFIX "dbfile="
51
-
52
- class client;
53
- void setClientThread(client* v);
54
-
55
- class client
56
- {
57
-
58
- mutex m_mutex;
59
- request m_req;
60
- posblk m_tmpPbk;
61
- ushort_td m_op;
62
- ushort_td m_preResult;
63
- int m_charsetIndexServer;
64
- std::string m_sql;
65
- std::string m_serverCharData;
66
- std::string m_serverCharData2;
67
- uint_td m_tmplen;
68
- bool m_logout;
69
- blobBuffer m_blobBuffer;
70
- bool m_disconnected;
71
-
72
- std::vector<char> m_sendbuf;
73
- inline bzs::netsvc::client::connection* con(){return m_req.cid->con;};
74
- inline void setCon(bzs::netsvc::client::connection* con){m_req.cid->con=con;};
75
-
76
- inline void disconnect()
77
- {
78
- if (!con())
79
- m_req.result = 1;
80
- else
81
- m_disconnected = m_cons->disconnect(con());
82
- if (m_req.result==0)
83
- setCon(NULL);
84
- }
85
- std::string getHostName(const char* uri)
86
- {
87
- std::vector<std::string> ss ;
88
- split(ss, uri, "/"); /* btrv://serverName/dbName?dbfile=xxx */
89
- if (ss.size()<3)
90
- return "";
91
- return ss[2];
92
- }
93
- std::string getTableName(const char* uri)
94
- {
95
- if (uri)
96
- {
97
- mbchar* en = (mbchar*)uri;
98
- mbchar* st = _mbsstr(en, (mbchar*)TABELNAME_PREFIX);
99
- if (st)
100
- {
101
- st +=strlen(TABELNAME_PREFIX);
102
- mbchar* tmp = _mbsstr(st, (mbchar*)PSEPARATOR_A);
103
- if (tmp)
104
- st = tmp+1;
105
- en = _mbsstr(st, (mbchar*)".");
106
- if (en==NULL)
107
- en = st + strlen((char*)st);
108
- return std::string((const char*)st, en-st);
109
- }
110
- }
111
- return "";
112
- }
113
- static void addSecondCharsetData(unsigned int destCodePage, std::string& src);
114
- public:
115
- client():m_charsetIndexServer(-1),m_disconnected(true)
116
- {
117
- }
118
- void cleanup()
119
- {
120
- if (m_disconnected)
121
- setClientThread(NULL);
122
- }
123
- request& req(){return m_req;}
124
- inline void setParam(ushort_td op, posblk* pbk,
125
- void_td* data, uint_td* datalen,
126
- void_td* keybuf, keylen_td keylen,
127
- char_td keyNum, clientID* cid)
128
- {
129
- m_op = op;
130
- m_req.op = op;
131
- m_req.pbk = pbk;
132
- m_req.data = data;
133
- m_req.datalen = datalen;
134
- m_req.keybuf = keybuf;
135
- m_req.keylen = keylen;
136
- m_req.keyNum = keyNum;
137
- m_req.cid = cid;
138
- m_req.paramMask = 0;
139
- m_preResult = 0;
140
- m_logout = false;
141
- if (m_req.pbk==NULL) m_req.pbk = &m_tmpPbk;
142
-
143
- }
144
- inline short_td result(){return m_preResult;}
145
-
146
- inline bool stop_if()
147
- {
148
- if (m_op==TD_STOP_ENGINE)
149
- {
150
- m_req.result = 0;
151
- disconnect();
152
- return !m_req.result;
153
- }
154
- return false;
155
- }
156
- inline void connect()
157
- {
158
- if (!m_req.cid->con)
159
- {
160
- std::string host = getHostName((const char*)m_req.keybuf);
161
- if (host=="")
162
- m_req.result = ERROR_TD_HOSTNAME_NOT_FOUND;
163
- setCon(m_cons->connect(host)); //if error throw exception
164
-
165
- }
166
- m_disconnected = !m_req.cid->con;
167
- }
168
- inline void create()
169
- {
170
- m_req.paramMask = P_MASK_ALL;
171
- if ((m_req.datalen==NULL) || *m_req.datalen == 0)
172
- m_req.paramMask = P_MASK_KEYONLY;
173
- else if (m_req.keyNum > CR_SUBOP_SWAPNAME) //-126 swap -127 is rename. -128 is drop.
174
- {
175
- m_req.paramMask &= ~P_MASK_POSBLK;
176
- std::string name = getTableName((const char*)m_req.keybuf);
177
- if ((m_req.keyNum==1)|| (m_req.keyNum==2)) //make by tabledef
178
- {
179
- m_sql = sqlCreateTable(name.c_str(), (tabledef*)m_req.data, m_charsetIndexServer);
180
- m_req.keyNum -= 2; // 1= exists check 2 = no exists check
181
- }else
182
- m_sql = sqlCreateTable(name.c_str(), (fileSpec*)m_req.data, m_charsetIndexServer);
183
- m_req.data =(ushort_td*) m_sql.c_str();
184
- m_tmplen = (uint_td)(m_sql.size()+1);
185
- m_req.datalen = &m_tmplen;
186
- }else if ((m_req.keyNum == CR_SUBOP_SWAPNAME)||(m_req.keyNum == CR_SUBOP_RENAME))
187
- {
188
- readServerCharsetIndex();
189
- m_sql = (char*)m_req.data;
190
- addSecondCharsetData(mysql::codePage(m_charsetIndexServer), m_sql);
191
- m_req.data =(ushort_td*) m_sql.c_str();
192
- m_tmplen = (uint_td)(m_sql.size()+1);
193
- m_req.datalen = &m_tmplen;
194
- }
195
- }
196
- inline void cmdConnect()
197
- {
198
- if ((m_req.keyNum == LG_SUBOP_CONNECT)|| (m_req.keyNum == LG_SUBOP_NEWCONNECT))
199
- {
200
- if (con() && con()->isConnected())
201
- m_preResult = 1;
202
- else
203
- {
204
- std::string host = getHostName((const char*)m_req.keybuf);
205
- if (host=="")
206
- m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
207
- setCon(m_cons->connect(host, (m_req.keyNum == LG_SUBOP_NEWCONNECT))); //if error throw exception
208
- buildDualChasetKeybuf();
209
- }
210
- }else if (m_req.keyNum == LG_SUBOP_DISCONNECT)
211
- {
212
- if (con())
213
- m_logout = true;
214
- else if (m_op==TD_CONNECT)
215
- m_preResult = 1;
216
- }
217
- m_req.paramMask = P_MASK_KEYONLY;
218
- }
219
- inline ushort_td execute()
220
- {
221
- if (result()==0)
222
- {
223
- if (!con())
224
- m_preResult = ERROR_TD_NOT_CONNECTED;
225
- else
226
- {
227
- char* p = con()->sendBuffer();
228
- unsigned int size = m_req.serialize(p);
229
- if ((m_req.paramMask & P_MASK_BLOBBODY) && m_blobBuffer.blobs())
230
- size = m_req.serializeBlobBody(&m_blobBuffer
231
- , p, con()->sendBufferSize(), con()->optionalBuffers());
232
- p = con()->asyncWriteRead(size);
233
- m_req.parse(p);
234
- if (m_logout)
235
- disconnect();
236
- m_preResult = m_req.result;
237
- }
238
-
239
- }
240
- return result();
241
- }
242
- inline ushort_td getBlobBuffer(const blobHeader** data)
243
- {
244
- *data = m_req.blobHeader;
245
- return *data ? 0:1;;
246
- }
247
-
248
- inline ushort_td addBlob(const blob* data, bool endRow)
249
- {
250
- if (endRow)
251
- {
252
- if (m_blobBuffer.fieldCount()==0)
253
- m_blobBuffer.setFieldCount((unsigned int)m_blobBuffer.blobs());
254
- return 0;
255
- }
256
- if (data==NULL)
257
- m_blobBuffer.clear();
258
- else
259
- m_blobBuffer.addBlob(*data);
260
- return 0;
261
- }
262
- bool readServerCharsetIndex();
263
-
264
- bool buildDualChasetKeybuf();
265
-
266
- };
267
-
268
- #define USETLS //USE TLS ALL
269
-
270
-
271
-
272
- #ifdef USETLS
273
- extern tls_key g_tlsiID;
274
- #else
275
- extern __THREAD client* __THREAD_BCB g_client;
276
- #endif
277
-
278
-
279
-
280
- inline client* getClientThread()
281
- {
282
- #ifdef USETLS
283
- client* p = (client*)tls_getspecific(g_tlsiID);
284
- if (p == NULL)
285
- {
286
- p = new client();
287
- tls_setspecific(g_tlsiID, p);
288
- }
289
- return p;
290
- #else
291
- if (g_client == NULL)
292
- g_client = new client();
293
- return g_client;
294
- #endif
295
- }
296
-
297
- inline void setClientThread(client* v)
298
- {
299
- #ifdef USETLS
300
- if (v == NULL)
301
- {
302
- client* p = (client*)tls_getspecific(g_tlsiID);
303
- delete p;
304
- }
305
- tls_setspecific(g_tlsiID, v);
306
- #else
307
- if (v == NULL)
308
- delete g_client;
309
- g_client = v;
310
- #endif
311
- }
312
-
313
-
314
- }//namespace client
315
- }//namespace tdap
316
- }//namespace protocol
317
- }//namespace db
318
- }//namespace bzs
319
-
320
- #endif//BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H
3
+ /* =================================================================
4
+ Copyright (C) 2012 2013 BizStation Corp All rights reserved.
5
+
6
+ This program is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU General Public License
8
+ as published by the Free Software Foundation; either version 2
9
+ of the License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
+ 02111-1307, USA.
20
+ ================================================================= */
21
+ #include "sqlBuilder.h"
22
+ #include "request.h"
23
+ #include <bzs/db/blobBuffer.h>
24
+ #include <boost/thread/mutex.hpp>
25
+ #include <bzs/db/protocol/tdap/tdapSchema.h>
26
+ #include <bzs/netsvc/client/tcpClient.h>
27
+ #include <bzs/db/protocol/tdap/tdapcapi.h>
28
+ #include <bzs/db/protocol/tdap/mysql/characterset.h>
29
+ #include <bzs/env/compiler.h>
30
+ #include <bzs/rtl/stl_uty.h>
31
+ #include <vector>
32
+ #ifdef _WIN32
33
+ #include <mbstring.h>
34
+ #else
35
+ #include <pthread.h>
36
+ #endif
37
+
38
+ extern bzs::netsvc::client::connections* m_cons;
39
+
40
+ namespace bzs
41
+ {
42
+ namespace db
43
+ {
44
+ namespace protocol
45
+ {
46
+ namespace tdap
47
+ {
48
+ namespace client
49
+ {
50
+ #define TABELNAME_PREFIX "dbfile="
51
+
52
+ class client;
53
+ void setClientThread(client* v);
54
+
55
+ class client
56
+ {
57
+
58
+ mutex m_mutex;
59
+ request m_req;
60
+ posblk m_tmpPbk;
61
+ ushort_td m_op;
62
+ ushort_td m_preResult;
63
+ int m_charsetIndexServer;
64
+
65
+ std::string m_sql;
66
+ std::string m_serverCharData;
67
+ std::string m_serverCharData2;
68
+
69
+ uint_td m_tmplen;
70
+ bool m_logout;
71
+ blobBuffer m_blobBuffer;
72
+ bool m_disconnected;
73
+
74
+ std::vector<char> m_sendbuf;
75
+
76
+ inline bzs::netsvc::client::connection* con() { return m_req.cid->con; };
77
+
78
+ inline void setCon(bzs::netsvc::client::connection* con)
79
+ {
80
+ m_req.cid->con = con;
81
+ };
82
+
83
+ inline void disconnect()
84
+ {
85
+ if (!con())
86
+ m_req.result = 1;
87
+ else
88
+ m_disconnected = m_cons->disconnect(con());
89
+ if (m_req.result == 0)
90
+ setCon(NULL);
91
+ }
92
+
93
+ std::string getHostName(const char* uri)
94
+ {
95
+ std::vector<std::string> ss;
96
+ split(ss, uri, "/"); /* btrv://serverName/dbName?dbfile=xxx */
97
+ if (ss.size() < 3)
98
+ return "";
99
+ return ss[2];
100
+ }
101
+
102
+ std::string getTableName(const char* uri)
103
+ {
104
+ if (uri)
105
+ {
106
+ mbchar* en = (mbchar*)uri;
107
+ mbchar* st = _mbsstr(en, (mbchar*)TABELNAME_PREFIX);
108
+ if (st)
109
+ {
110
+ st += strlen(TABELNAME_PREFIX);
111
+ mbchar* tmp = _mbsstr(st, (mbchar*)PSEPARATOR_A);
112
+ if (tmp)
113
+ st = tmp + 1;
114
+ en = _mbsstr(st, (mbchar*)".");
115
+ if (en == NULL)
116
+ en = st + strlen((char*)st);
117
+ return std::string((const char*)st, en - st);
118
+ }
119
+ }
120
+ return "";
121
+ }
122
+ static void addSecondCharsetData(unsigned int destCodePage,
123
+ std::string& src);
124
+
125
+ public:
126
+ client() : m_charsetIndexServer(-1), m_disconnected(true) {}
127
+
128
+ void cleanup()
129
+ {
130
+ if (m_disconnected)
131
+ setClientThread(NULL);
132
+ }
133
+
134
+ request& req() { return m_req; }
135
+
136
+ inline void setParam(ushort_td op, posblk* pbk, void_td* data,
137
+ uint_td* datalen, void_td* keybuf, keylen_td keylen,
138
+ char_td keyNum, clientID* cid)
139
+ {
140
+ m_op = op;
141
+ m_req.op = op;
142
+ m_req.pbk = pbk;
143
+ m_req.data = data;
144
+ m_req.datalen = datalen;
145
+ m_req.keybuf = keybuf;
146
+ m_req.keylen = keylen;
147
+ m_req.keyNum = keyNum;
148
+ m_req.cid = cid;
149
+ m_req.paramMask = 0;
150
+ m_preResult = 0;
151
+ m_logout = false;
152
+ if (m_req.pbk == NULL)
153
+ m_req.pbk = &m_tmpPbk;
154
+ }
155
+
156
+ inline short_td result() { return m_preResult; }
157
+
158
+ inline bool stop_if()
159
+ {
160
+ if (m_op == TD_STOP_ENGINE)
161
+ {
162
+ m_req.result = 0;
163
+ disconnect();
164
+ return !m_req.result;
165
+ }
166
+ return false;
167
+ }
168
+
169
+ inline void connect()
170
+ {
171
+ if (!m_req.cid->con)
172
+ {
173
+ std::string host = getHostName((const char*)m_req.keybuf);
174
+ if (host == "")
175
+ m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
176
+ bzs::netsvc::client::connection* c = m_cons->connect(host);
177
+ if (c)
178
+ setCon(c);
179
+ else
180
+ m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
181
+ }
182
+ m_disconnected = !m_req.cid->con;
183
+ }
184
+
185
+ inline void create()
186
+ {
187
+ m_req.paramMask = P_MASK_ALL;
188
+ if ((m_req.datalen == NULL) || *m_req.datalen == 0)
189
+ m_req.paramMask = P_MASK_KEYONLY;
190
+ else if (m_req.keyNum >
191
+ CR_SUBOP_SWAPNAME) // -126 swap -127 is rename. -128 is drop.
192
+ {
193
+ m_req.paramMask &= ~P_MASK_POSBLK;
194
+ std::string name = getTableName((const char*)m_req.keybuf);
195
+ if ((m_req.keyNum == 1) || (m_req.keyNum == 2)) // make by tabledef
196
+ {
197
+ m_sql = sqlCreateTable(name.c_str(), (tabledef*)m_req.data,
198
+ m_charsetIndexServer);
199
+ m_req.keyNum -= 2; // 1= exists check 2 = no exists check
200
+ }
201
+ else
202
+ m_sql = sqlCreateTable(name.c_str(), (fileSpec*)m_req.data,
203
+ m_charsetIndexServer);
204
+ m_req.data = (ushort_td*)m_sql.c_str();
205
+ m_tmplen = (uint_td)(m_sql.size() + 1);
206
+ m_req.datalen = &m_tmplen;
207
+ }
208
+ else if ((m_req.keyNum == CR_SUBOP_SWAPNAME) ||
209
+ (m_req.keyNum == CR_SUBOP_RENAME))
210
+ {
211
+ readServerCharsetIndex();
212
+ m_sql = (char*)m_req.data;
213
+ addSecondCharsetData(mysql::codePage(m_charsetIndexServer), m_sql);
214
+ m_req.data = (ushort_td*)m_sql.c_str();
215
+ m_tmplen = (uint_td)(m_sql.size() + 1);
216
+ m_req.datalen = &m_tmplen;
217
+ }
218
+ }
219
+
220
+ inline void cmdConnect()
221
+ {
222
+ if ((m_req.keyNum == LG_SUBOP_CONNECT) ||
223
+ (m_req.keyNum == LG_SUBOP_NEWCONNECT))
224
+ {
225
+ if (con() && con()->isConnected())
226
+ m_preResult = 1;
227
+ else
228
+ {
229
+ std::string host = getHostName((const char*)m_req.keybuf);
230
+ if (host == "")
231
+ m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
232
+ bzs::netsvc::client::connection* c = m_cons->connect(
233
+ host, (m_req.keyNum == LG_SUBOP_NEWCONNECT));
234
+ if (c)
235
+ {
236
+ setCon(c); // if error throw exception
237
+ if (readServerCharsetIndex() == false)
238
+ m_preResult = SERVER_CLIENT_NOT_COMPATIBLE;
239
+ else
240
+ buildDualChasetKeybuf();
241
+ }
242
+ else
243
+ m_preResult = ERROR_TD_HOSTNAME_NOT_FOUND;
244
+ }
245
+ }
246
+ else if (m_req.keyNum == LG_SUBOP_DISCONNECT)
247
+ {
248
+ if (con())
249
+ m_logout = true;
250
+ else if (m_op == TD_CONNECT)
251
+ m_preResult = 1;
252
+ }
253
+ m_req.paramMask = P_MASK_KEYONLY;
254
+ }
255
+
256
+ inline ushort_td execute()
257
+ {
258
+ if (result() == 0)
259
+ {
260
+ if (!con())
261
+ m_preResult = ERROR_TD_NOT_CONNECTED;
262
+ else
263
+ {
264
+ char* p = con()->sendBuffer(m_req.sendLenEstimate());
265
+ unsigned int size = m_req.serialize(p);
266
+ short stat = 0;
267
+ if ((m_req.paramMask & P_MASK_BLOBBODY) && m_blobBuffer.blobs())
268
+ size = m_req.serializeBlobBody(
269
+ &m_blobBuffer, p, size, con()->sendBufferSize(),
270
+ con()->optionalBuffers(), stat);
271
+ if (stat == 0)
272
+ {
273
+ if (m_req.paramMask & P_MASK_DATALEN)
274
+ con()->setReadBufferSizeIf(*m_req.datalen);
275
+ p = con()->asyncWriteRead(size);
276
+ m_req.parse(p, con()->datalen(), con()->rows());
277
+ }
278
+ else
279
+ m_req.result = stat;
280
+ if (m_logout)
281
+ disconnect();
282
+ m_preResult = m_req.result;
283
+ }
284
+ }
285
+ return result();
286
+ }
287
+
288
+ inline ushort_td getBlobBuffer(const blobHeader** data)
289
+ {
290
+ *data = m_req.blobHeader;
291
+ return *data ? 0 : 1;
292
+ ;
293
+ }
294
+
295
+ inline ushort_td addBlob(const blob* data, bool endRow)
296
+ {
297
+ if (endRow)
298
+ {
299
+ if (m_blobBuffer.fieldCount() == 0)
300
+ m_blobBuffer.setFieldCount((unsigned int)m_blobBuffer.blobs());
301
+ return 0;
302
+ }
303
+ if (data == NULL)
304
+ m_blobBuffer.clear();
305
+ else
306
+ m_blobBuffer.addBlob(*data);
307
+ return 0;
308
+ }
309
+ bool readServerCharsetIndex();
310
+
311
+ bool buildDualChasetKeybuf();
312
+ };
313
+
314
+ #define USETLS // USE TLS ALL
315
+
316
+ #ifdef USETLS
317
+ extern tls_key g_tlsiID;
318
+ #else
319
+ extern __THREAD client* __THREAD_BCB g_client;
320
+ #endif
321
+
322
+ inline client* getClientThread()
323
+ {
324
+ #ifdef USETLS
325
+ client* p = (client*)tls_getspecific(g_tlsiID);
326
+ if (p == NULL)
327
+ {
328
+ p = new client();
329
+ tls_setspecific(g_tlsiID, p);
330
+ }
331
+ return p;
332
+ #else
333
+ if (g_client == NULL)
334
+ g_client = new client();
335
+ return g_client;
336
+ #endif
337
+ }
338
+
339
+ inline void setClientThread(client* v)
340
+ {
341
+ #ifdef USETLS
342
+ if (v == NULL)
343
+ {
344
+ client* p = (client*)tls_getspecific(g_tlsiID);
345
+ delete p;
346
+ }
347
+ tls_setspecific(g_tlsiID, v);
348
+ #else
349
+ if (v == NULL)
350
+ delete g_client;
351
+ g_client = v;
352
+ #endif
353
+ }
354
+
355
+ } // namespace client
356
+ } // namespace tdap
357
+ } // namespace protocol
358
+ } // namespace db
359
+ } // namespace bzs
360
+
361
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_CLIENT_H