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
@@ -0,0 +1,371 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #pragma hdrstop
20
+
21
+ #include "queryData.h"
22
+ #include <bzs/db/protocol/tdap/mysql/characterset.h>
23
+ #include <iostream>
24
+
25
+ #pragma package(smart_init)
26
+
27
+ using namespace bzs::db::protocol::tdap::client;
28
+ using namespace bzs::db::protocol::tdap;
29
+
30
+ #ifndef USE_PSQL_DATABASE
31
+
32
+ #define USER_STRING_TYPE ft_myvarchar
33
+ #define GROUP_STRING_TYPE ft_myvarbinary
34
+
35
+ #else
36
+
37
+ #define USER_STRING_TYPE ft_zstring
38
+ #define GROUP_STRING_TYPE ft_zstring
39
+
40
+ #endif
41
+
42
+ const _TCHAR* name_field_str(_TCHAR* buf)
43
+ {
44
+ #ifdef LINUX
45
+ return "名前";
46
+ #else
47
+ #ifdef _UNICODE
48
+ return L"名前";
49
+ #else
50
+ WideCharToMultiByte(CP_UTF8, 0, L"名前", -1, buf, 30, NULL, NULL);
51
+ return buf;
52
+ #endif
53
+ #endif
54
+ }
55
+
56
+ bool showDbdefError(dbdef* def, const _TCHAR* msg)
57
+ {
58
+ std::tcout << msg << _T(" erorr:No.") << def->stat();
59
+ return false;
60
+ }
61
+
62
+ bool showTableError(table* tb, const _TCHAR* msg)
63
+ {
64
+ std::tcout << msg << _T(" erorr:No.") << tb->stat();
65
+ return false;
66
+ }
67
+
68
+ bool showDbError(database* db, const _TCHAR* msg)
69
+ {
70
+ std::tcout << msg << _T(" erorr:No.") << db->stat();
71
+ return false;
72
+ }
73
+
74
+ bool createUserTable(dbdef* def)
75
+ {
76
+ short tableid = 1;
77
+ tabledef t;
78
+ tabledef* td = &t;
79
+ td->charsetIndex = mysql::charsetIndex(GetACP());
80
+ td->schemaCodePage = CP_UTF8;
81
+ td->id = tableid;
82
+ td->setTableName(_T("user"));
83
+ td->setFileName(_T("user.dat"));
84
+
85
+ def->insertTable(td);
86
+ if (def->stat() != 0)
87
+ return showDbdefError(def, _T("user insertTable"));
88
+
89
+ short filedIndex = 0;
90
+ fielddef* fd = def->insertField(tableid, filedIndex);
91
+ fd->setName(_T("id"));
92
+ fd->type = ft_autoinc;
93
+ fd->len = 4;
94
+
95
+ ++filedIndex;
96
+ fd = def->insertField(tableid, filedIndex);
97
+
98
+ _TCHAR tmp[30];
99
+ fd->setName(name_field_str(tmp));
100
+ fd->type = USER_STRING_TYPE;
101
+ fd->setLenByCharnum(20);
102
+
103
+ ++filedIndex;
104
+ fd = def->insertField(tableid, filedIndex);
105
+ fd->setName(_T("group"));
106
+ fd->type = ft_integer;
107
+ fd->len = 4;
108
+
109
+ ++filedIndex;
110
+ fd = def->insertField(tableid, filedIndex);
111
+ fd->setName(_T("tel"));
112
+ fd->type = USER_STRING_TYPE;
113
+ fd->setLenByCharnum(21);
114
+
115
+ char keyNum = 0;
116
+ keydef* kd = def->insertKey(tableid, keyNum);
117
+ keySegment* seg1 = &kd->segments[0];
118
+ seg1->fieldNum = 0;
119
+ seg1->flags.bit8 = true; // extended key type
120
+ seg1->flags.bit1 = true; // chanageable
121
+ kd->segmentCount = 1;
122
+ td = def->tableDefs(tableid);
123
+ td->primaryKeyNum = keyNum;
124
+
125
+ ++keyNum;
126
+ kd = def->insertKey(tableid, keyNum);
127
+ seg1 = &kd->segments[0];
128
+ seg1->fieldNum = 2;
129
+ seg1->flags.bit0 = true;
130
+ seg1->flags.bit8 = true;
131
+ seg1->flags.bit1 = true;
132
+ kd->segmentCount = 1;
133
+
134
+ def->updateTableDef(tableid);
135
+ if (def->stat() != 0)
136
+ return showDbdefError(def, _T("user updateTableDef"));
137
+
138
+ return true;
139
+ }
140
+
141
+ bool createGroupTable(dbdef* def)
142
+ {
143
+ short tableid = 2;
144
+ tabledef t;
145
+ tabledef* td = &t;
146
+ td->charsetIndex = mysql::charsetIndex(GetACP());
147
+ td->schemaCodePage = CP_UTF8;
148
+ td->id = tableid;
149
+ td->setTableName(_T("groups"));
150
+ td->setFileName(_T("groups"));
151
+
152
+ def->insertTable(td);
153
+ if (def->stat() != 0)
154
+ return showDbdefError(def, _T("groups insertTable"));
155
+
156
+ short filedIndex = 0;
157
+ fielddef* fd = def->insertField(tableid, filedIndex);
158
+ fd->setName(_T("code"));
159
+ fd->type = ft_integer;
160
+ fd->len = 4;
161
+
162
+ ++filedIndex;
163
+ fd = def->insertField(tableid, filedIndex);
164
+ fd->setName(_T("name"));
165
+ fd->type = GROUP_STRING_TYPE;
166
+ fd->len = 33;
167
+
168
+ char keyNum = 0;
169
+ keydef* kd = def->insertKey(tableid, keyNum);
170
+ keySegment* seg1 = &kd->segments[0];
171
+ seg1->fieldNum = 0;
172
+ seg1->flags.bit8 = true; // extended key type
173
+ seg1->flags.bit1 = true; // chanageable
174
+ kd->segmentCount = 1;
175
+
176
+ td = def->tableDefs(tableid);
177
+ td->primaryKeyNum = keyNum;
178
+ def->updateTableDef(tableid);
179
+ if (def->stat() != 0)
180
+ return showDbdefError(def, _T("groups updateTableDef"));
181
+ return true;
182
+ }
183
+
184
+ bool createUserExtTable(dbdef* def)
185
+ {
186
+ short tableid = 3;
187
+ tabledef t;
188
+ tabledef* td = &t;
189
+ td->charsetIndex = mysql::charsetIndex(GetACP());
190
+ td->schemaCodePage = CP_UTF8;
191
+ td->id = tableid;
192
+ td->setTableName(_T("extention"));
193
+ td->setFileName(_T("extention"));
194
+
195
+ def->insertTable(td);
196
+ if (def->stat() != 0)
197
+ return showDbdefError(def, _T("extention insertTable"));
198
+
199
+ short filedIndex = 0;
200
+ fielddef* fd = def->insertField(tableid, filedIndex);
201
+ fd->setName(_T("id"));
202
+ fd->type = ft_integer;
203
+ fd->len = 4;
204
+
205
+ ++filedIndex;
206
+ fd = def->insertField(tableid, filedIndex);
207
+ fd->setName(_T("comment"));
208
+ fd->type = USER_STRING_TYPE;
209
+
210
+ fd->setLenByCharnum(60);
211
+
212
+ char keyNum = 0;
213
+ keydef* kd = def->insertKey(tableid, keyNum);
214
+ keySegment* seg1 = &kd->segments[0];
215
+ seg1->fieldNum = 0;
216
+ seg1->flags.bit8 = true; // extended key type
217
+ seg1->flags.bit1 = true; // chanageable
218
+ kd->segmentCount = 1;
219
+ td = def->tableDefs(tableid);
220
+ td->primaryKeyNum = keyNum;
221
+ def->updateTableDef(tableid);
222
+ if (def->stat() != 0)
223
+ return showDbdefError(def, _T("extention updateTableDef"));
224
+ return true;
225
+ }
226
+
227
+ bool createCacheTable(dbdef* def)
228
+ {
229
+ short tableid = 4;
230
+ tabledef t;
231
+ tabledef* td = &t;
232
+ td->charsetIndex = mysql::charsetIndex(GetACP());
233
+ td->schemaCodePage = CP_UTF8;
234
+ td->id = tableid;
235
+ td->setTableName(_T("cache"));
236
+ td->setFileName(_T("cache"));
237
+
238
+ def->insertTable(td);
239
+ if (def->stat() != 0)
240
+ return showDbdefError(def, _T("cache insertTable"));
241
+
242
+ short filedIndex = 0;
243
+ fielddef* fd = def->insertField(tableid, filedIndex);
244
+ fd->setName(_T("id"));
245
+ fd->type = ft_autoinc;
246
+ fd->len = 4;
247
+
248
+ ++filedIndex;
249
+ fd = def->insertField(tableid, filedIndex);
250
+ fd->setName(_T("value"));
251
+ fd->type = GROUP_STRING_TYPE;
252
+
253
+ fd->len = 60000;
254
+
255
+ char keyNum = 0;
256
+ keydef* kd = def->insertKey(tableid, keyNum);
257
+ keySegment* seg1 = &kd->segments[0];
258
+ seg1->fieldNum = 0;
259
+ seg1->flags.bit8 = true; // extended key type
260
+ seg1->flags.bit1 = true; // chanageable
261
+ kd->segmentCount = 1;
262
+ td = def->tableDefs(tableid);
263
+ td->primaryKeyNum = keyNum;
264
+ def->updateTableDef(tableid);
265
+ if (def->stat() != 0)
266
+ return showDbdefError(def, _T("cache updateTableDef"));
267
+ return true;
268
+ }
269
+
270
+ bool insertData(database_ptr db, int maxId)
271
+ {
272
+ _TCHAR tmp[256];
273
+ table* tbu = db->openTable(_T("user"), TD_OPEN_NORMAL);
274
+ if (db->stat())
275
+ {
276
+ showDbError(db.get(), _T("openTable user"));
277
+ return false;
278
+ }
279
+
280
+ table* tbg = db->openTable(_T("groups"), TD_OPEN_NORMAL);
281
+ if (db->stat())
282
+ {
283
+ showDbError(db.get(), _T("openTable groups"));
284
+ return false;
285
+ }
286
+
287
+ table* tbe = db->openTable(_T("extention"), TD_OPEN_NORMAL);
288
+ if (db->stat())
289
+ {
290
+ showDbError(db.get(), _T("openTable extention"));
291
+ return false;
292
+ }
293
+
294
+ dbTransaction trn(db);
295
+ trn.begin();
296
+
297
+ tbu->clearBuffer();
298
+ for (int i = 1; i <= maxId; ++i)
299
+ {
300
+ tbu->setFV((short)0, i);
301
+ _stprintf_s(tmp, 256, _T("%d user"), i);
302
+ tbu->setFV(1, tmp);
303
+ tbu->setFV(_T("group"), ((i - 1) % 5) + 1);
304
+ tbu->insert();
305
+ if (tbu->stat() != 0)
306
+ return showTableError(tbu, _T("user insert"));
307
+ }
308
+
309
+ tbg->clearBuffer();
310
+ for (int i = 1; i <= 100; ++i)
311
+ {
312
+ tbg->setFV((short)0, i);
313
+ _stprintf_s(tmp, 256, _T("%d group"), i);
314
+ tbg->setFV(1, tmp);
315
+ tbg->insert();
316
+ if (tbg->stat() != 0)
317
+ return showTableError(tbg, _T("groups insert"));
318
+ }
319
+
320
+ tbe->clearBuffer();
321
+ for (int i = 1; i <= maxId; ++i)
322
+ {
323
+ tbe->setFV((short)0, i);
324
+ _stprintf_s(tmp, 256, _T("%d comment"), i);
325
+ tbe->setFV(1, tmp);
326
+ tbe->insert();
327
+ if (tbe->stat() != 0)
328
+ return showTableError(tbe, _T("extention insert"));
329
+ }
330
+
331
+ trn.end();
332
+ tbg->release();
333
+ tbu->release();
334
+ tbe->release();
335
+ return true;
336
+ }
337
+
338
+ int prebuiltData(database_ptr db, const connectParams& param, bool foceCreate,
339
+ int maxId)
340
+ {
341
+ try
342
+ {
343
+ if (db->open(param.uri(), TD_OPEN_NORMAL))
344
+ {
345
+ if (foceCreate)
346
+ dropDatabase(db);
347
+ else
348
+ return 0;
349
+ }
350
+ std::tcout << _T("\nInserting query test data. Please wait ... ")
351
+ << std::flush;
352
+ createDatabase(db, param);
353
+ openDatabase(db, param);
354
+ if (!createUserTable(db->dbDef()))
355
+ return 1;
356
+ if (!createGroupTable(db->dbDef()))
357
+ return 1;
358
+ if (!createUserExtTable(db->dbDef()))
359
+ return 1;
360
+
361
+ if (!insertData(db, maxId))
362
+ return 1;
363
+ std::tcout << _T("done!") << std::endl;
364
+ return 0;
365
+ }
366
+ catch (bzs::rtl::exception& e)
367
+ {
368
+ std::tcout << *bzs::rtl::getMsg(e) << std::endl;
369
+ return 1;
370
+ }
371
+ }
@@ -0,0 +1,16 @@
1
+ //---------------------------------------------------------------------------
2
+
3
+ #ifndef BZS_EXSAMPLE_QUERYDATA_H
4
+ #define BZS_EXSAMPLE_QUERYDATA_H
5
+ //---------------------------------------------------------------------------
6
+ #include <bzs/db/protocol/tdap/client/trdboostapi.h>
7
+
8
+ int prebuiltData(bzs::db::protocol::tdap::client::database_ptr db,
9
+ const bzs::db::protocol::tdap::client::connectParams& param,
10
+ bool foceCreate = false, int maxId = 20000);
11
+
12
+ bool createCacheTable(bzs::db::protocol::tdap::client::dbdef* def);
13
+
14
+ const _TCHAR* name_field_str(_TCHAR* buf);
15
+
16
+ #endif // BZS_EXSAMPLE_QUERYDATA_H
@@ -0,0 +1,109 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include <bzs/db/protocol/tdap/client/activeTable.h>
20
+ #include <bzs/example/queryData.h>
21
+ #include <iostream>
22
+ #include <locale.h>
23
+
24
+ using namespace bzs::db::protocol::tdap::client;
25
+ using namespace bzs::db::protocol::tdap;
26
+
27
+ static const char_td keynum_group = 1;
28
+ static const char_td primary_key = 0;
29
+
30
+ void showConsole(recordset& rowset)
31
+ {
32
+ const fielddefs& fields = *rowset.fieldDefs();
33
+ for (int j = 0; j < (int)fields.size(); ++j)
34
+ std::tcout << fields[j].name() << _T("\t");
35
+ std::tcout << _T("\n");
36
+
37
+ for (int i = 0; i < (int)rowset.size(); ++i)
38
+ {
39
+ row& m = rowset[i];
40
+ for (int j = 0; j < (int)m.size(); ++j)
41
+ {
42
+ std::tcout << m[(short)j].c_str() << _T("\t");
43
+ if (j == (int)m.size() - 1)
44
+ std::tcout << _T("\n");
45
+ }
46
+ }
47
+ }
48
+
49
+ void execute(recordset& rs, activeTable& atu, activeTable& atg,
50
+ activeTable& ate)
51
+ {
52
+ query query;
53
+
54
+ rs.clear();
55
+ atu.alias(_T("名前"), _T("name"));
56
+
57
+ query.select(_T("id"), _T("name"), _T("group"))
58
+ .where(_T("id"), _T("<="), 15);
59
+ atu.index(0).keyValue(1).read(rs, query);
60
+
61
+ /* Join extention::comment
62
+ Use "joinHasOneOrHasMany" optimaize option.
63
+ Because this join is has one and atu.index(0) is unique key,
64
+ then join key values(id) are all unique.
65
+ */
66
+ query.reset().select(_T("comment")).optimize(
67
+ queryBase::joinHasOneOrHasMany);
68
+ ate.index(0).join(rs, query, _T("id"));
69
+
70
+ // Join group::name
71
+ atg.alias(_T("name"), _T("group_name"));
72
+ query.reset().select(_T("group_name"));
73
+ atg.index(0).join(rs, query, _T("group"));
74
+ }
75
+
76
+ #pragma warning(disable : 4101)
77
+ #pragma argsused
78
+ int _tmain(int argc, _TCHAR* argv[])
79
+ {
80
+ database_ptr db = createDatabaseObject();
81
+ try
82
+ {
83
+ connectParams param(_T("tdap"), _T("localhost"), _T("querytest"),
84
+ _T("test.bdf"));
85
+ param.setMode(TD_OPEN_NORMAL);
86
+ if (prebuiltData(db, param, false, 20))
87
+ {
88
+ std::tcout << "The query data build error." << std::endl;
89
+ return 1;
90
+ }
91
+ activeTable atu(db, _T("user"));
92
+ activeTable atg(db, _T("groups"));
93
+ activeTable ate(db, _T("extention"));
94
+
95
+ recordset rs;
96
+ execute(rs, atu, atg, ate);
97
+ showConsole(rs);
98
+ std::cout << "Execute query success. rs.size = " << rs.size()
99
+ << std::endl;
100
+ return 0;
101
+ }
102
+
103
+ catch (bzs::rtl::exception& e)
104
+ {
105
+ std::tcout << *bzs::rtl::getMsg(e) << std::endl;
106
+ }
107
+ return 1;
108
+ }
109
+ #pragma warning(default : 4101)
@@ -15,7 +15,7 @@ And O/R mapping to the user class.
15
15
  This program use the filter operation on server side.
16
16
 
17
17
  Please execute "create database" , "change schema" and "insert records" example
18
- before execute this example.
18
+ before execute this example.
19
19
 
20
20
  */
21
21
 
@@ -33,54 +33,53 @@ public:
33
33
  std::_tstring name;
34
34
  int group;
35
35
  std::_tstring tel;
36
-
37
36
  };
38
37
 
39
38
  /** dump user to screen */
40
39
  void dumpUser(const user* user)
41
40
  {
42
- _tprintf(_T(" id %d\n") ,user->id);
43
- _tprintf(_T(" name %s\n") ,user->name.c_str());
44
- _tprintf(_T(" group %d\n") ,user->group);
45
- _tprintf(_T(" tel %s\n\n") ,user->tel.c_str());
46
-
41
+ _tprintf(_T(" id %d\n"), user->id);
42
+ _tprintf(_T(" name %s\n"), user->name.c_str());
43
+ _tprintf(_T(" group %d\n"), user->group);
44
+ _tprintf(_T(" tel %s\n\n"), user->tel.c_str());
47
45
  }
48
46
 
49
47
  /** O/R mapping functional object*/
50
48
  class userMappper
51
49
  {
52
50
  std::vector<user*>& m_users;
51
+
53
52
  public:
54
- userMappper(std::vector<user*>& users):m_users(users){}
53
+ userMappper(std::vector<user*>& users) : m_users(users) {}
55
54
  void operator()(table* tb)
56
55
  {
57
- user* u = new user();
58
- u->id = tb->getFVint(fieldnum_id);
59
- u->name = tb->getFVstr(fieldnum_name);
60
- u->group = tb->getFVint(fieldnum_group);
61
- u->tel = tb->getFVstr(fieldnum_tel);
62
- m_users.push_back(u);
56
+ user* u = new user();
57
+ u->id = tb->getFVint(fieldnum_id);
58
+ u->name = tb->getFVstr(fieldnum_name);
59
+ u->group = tb->getFVint(fieldnum_group);
60
+ u->tel = tb->getFVstr(fieldnum_tel);
61
+ m_users.push_back(u);
63
62
  }
64
63
  };
65
64
 
66
65
  /** show database operation error
67
66
  */
68
- void showError(const _TCHAR* caption,const _TCHAR* tableName, short statusCode)
67
+ void showError(const _TCHAR* caption, const _TCHAR* tableName, short statusCode)
69
68
  {
70
- _TCHAR tmp[1024]={0x00};
69
+ _TCHAR tmp[1024] = { 0x00 };
71
70
  nstable::tdapErr(0x00, statusCode, tableName, tmp);
72
- _tprintf(_T("%s error No.%ld %s\n"),caption, statusCode, tmp);
71
+ _tprintf(_T("%s error No.%ld %s\n"), caption, statusCode, tmp);
73
72
  }
74
73
 
75
74
  bool readUsers(table* tb, std::vector<user*>& users)
76
75
  {
77
76
  userMappper ormap(users);
78
77
  tb->clearBuffer();
79
- tb->setKeyNum(keynum_group); //use group key
80
- tb->setFV(fieldnum_group, 3);// set group = 3;
78
+ tb->setKeyNum(keynum_group); // use group key
79
+ tb->setFV(fieldnum_group, 3); // set group = 3;
81
80
  tb->seekGreater(true /*orEqual*/);
82
81
  if (tb->stat() == 0)
83
- tb->setFilter(_T("group = 3"), 1/*rejectCount*/, 0/*max records*/);
82
+ tb->setFilter(_T("group = 3"), 1 /*rejectCount*/, 0 /*max records*/);
84
83
  while (1)
85
84
  {
86
85
  if (tb->stat() != 0)
@@ -122,17 +121,18 @@ int _tmain(int argc, _TCHAR* argv[])
122
121
  showError(_T("open user table"), NULL, db->stat());
123
122
  else
124
123
  {
125
- std::vector<user*> users;
126
- if (readUsers(tbu, users))
127
- {
128
- _tprintf(_T("Read records success.\nRecord count = %d\n"), users.size());
124
+ std::vector<user*> users;
125
+ if (readUsers(tbu, users))
126
+ {
127
+ _tprintf(_T("Read records success.\nRecord count = %d\n"),
128
+ users.size());
129
129
  std::for_each(users.begin(), users.end(), dumpUser);
130
- }
130
+ }
131
131
 
132
- for (size_t i=0;i<users.size();++i)
132
+ for (size_t i = 0; i < users.size(); ++i)
133
133
  delete users[i];
134
134
 
135
- tbu->release();
135
+ tbu->release();
136
136
  }
137
137
  db->close();
138
138
  }