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,585 +0,0 @@
1
- #include <bzs/db/protocol/tdap/client/trdboostapi.h>
2
- #include <iostream>
3
- #include <vector>
4
- #include <bzs/db/protocol/tdap/client/trdormapi.h>
5
- #include <boost/iterator/iterator_facade.hpp>
6
-
7
- using namespace bzs::db::protocol::tdap::client;
8
- using namespace bzs::db::protocol::tdap;
9
-
10
- /**
11
- @brief Read records and manual O/R mapping example
12
-
13
- This program read records of the "user" table where group = 3.
14
- And O/R mapping to the user class.
15
- This program use the filter operation on server side.
16
-
17
- Please execute "create database" , "change schema" and "insert records" example
18
- before execute this example.
19
-
20
- */
21
-
22
-
23
- static const char_td keynum_group = 1;
24
- static const char_td primary_key = 0;
25
-
26
- class group
27
- {
28
- int m_id;
29
- std::string m_name;
30
- protected:
31
- group(void* owner):m_id(0){}
32
- public:
33
-
34
- int id() const {return m_id;}
35
- const std::string& name() const {return m_name;}
36
- void setId(int v){m_id = v;}
37
- void setName(const char* v){m_name = v;}
38
- static group* create(void* owner){return new group(owner);};
39
-
40
-
41
- };
42
-
43
- typedef boost::shared_ptr<group> group_ptr;
44
- typedef std::vector<group_ptr> group_ptr_list;
45
- typedef std::vector<group*> group_list;
46
- typedef boost::shared_ptr<group_list> group_list_ptr;
47
-
48
-
49
-
50
- group* create(group_ptr_list& m, int){return group::create(&m);}
51
-
52
- class group_fdi
53
- {
54
-
55
- public:
56
- short id;
57
- short name;
58
-
59
- //table*�������ɂƂ�init�֐����Ȃ���΂Ȃ�Ȃ�
60
- void init(table* tb)
61
- {
62
- id = tb->fieldNumByName(_T("id"));
63
- name = tb->fieldNumByName(_T("name"));
64
- }
65
- //�C���X�^���X��Ԃ�static �� create�֐����Ȃ���΂Ȃ�Ȃ�
66
- //static group_fdi* create(){return new group_fdi();};
67
- };
68
-
69
- group_fdi* createFdi(group_fdi *){return new group_fdi();}
70
- void destroyFdi(group_fdi * p){delete p;}
71
- void initFdi(group_fdi * fdi, table* tb){fdi->init(tb);}
72
-
73
- class group_orm
74
- {
75
- const group_fdi& m_fdi;
76
-
77
- public:
78
-
79
- /* mdl_typename���`���Ȃ���΂Ȃ�Ȃ�*/
80
- typedef group mdl_typename;
81
-
82
- /* fdi_typename���`���Ȃ���΂Ȃ�Ȃ�
83
- fdi���g�p���Ȃ��ꍇ�̓f�t�H���g��typedef fdibase fdi_typename; �Ƃ��邱��
84
- ���ƂȂ�FDI���g�p����ꍇ��activeTable<group, group_fdi>�̂悤��
85
- activeTable�̃C���X�^���X�쐬����fdi�̌^���w�肷�� */
86
- typedef group_fdi fdi_typename;
87
-
88
- /* fdi_typename fdi&�������Ɏ��R���X�g���N�^���K�{ */
89
- group_orm(const fdi_typename& fdi):m_fdi(fdi){}
90
-
91
- /* ���j�[�N�L�[�����Ă΂�Ȃ��Ȃ��̂ł��̑��̃L�[���͒�`���Ȃ��Ă悢*/
92
- bool compKeyValue(group& l, group& r, int keyNum) const
93
- {
94
- return l.id() < r.id();
95
- }
96
-
97
- void setKeyValues(group& g, const fields& fds, int keyNum)
98
- {
99
- fds[m_fdi.id] = g.id();
100
- }
101
-
102
- void writeMap(group& g, const fields& fds, int optipn)
103
- {
104
- fds[m_fdi.id] = g.id();
105
- fds[m_fdi.name] = g.name();
106
- }
107
-
108
- void readMap(group& g, const fields& fds, int optipn)
109
- {
110
- g.setId(fds[m_fdi.id].i());
111
- g.setName(fds[m_fdi.name].a_str()); //get by ansi string
112
- }
113
-
114
- void readAuntoincValue(group& g, const fields& fds, int optipn)
115
- {
116
- g.setId(fds[m_fdi.id].i());
117
- }
118
-
119
- /* �N���X������e�[�u�������������߂̊֐�getTableName���K�{ */
120
- const _TCHAR* getTableName(){return _T("group1");}
121
-
122
-
123
-
124
- };
125
-
126
- /** User class */
127
- class user
128
- {
129
- mutable group* m_grp;
130
- int m_id;
131
- std::string m_name;
132
- std::string m_tel;
133
- protected:
134
- user(void* owner):m_grp(NULL),m_id(0){}
135
- public:
136
-
137
-
138
- group* grp()const
139
- {
140
- if (m_grp == NULL)
141
- m_grp = group::create(0);
142
- return m_grp;
143
- }
144
- int id() const {return m_id;}
145
- const std::string& name() const {return m_name;}
146
- const std::string& tel() const {return m_tel;}
147
- void setId(int v){m_id = v;}
148
- void setName(const char* v){m_name = v;}
149
- void setTel(const char* v){m_tel = v;}
150
-
151
- //�R���N�V��������ŕK�{�̊֐��@owner�ɂ̓R���N�V�����̃|�C���^���n����܂��B
152
-
153
- static user* create(void* owner){return new user(owner);};
154
-
155
-
156
- };
157
-
158
- typedef boost::shared_ptr<user> user_ptr;
159
- typedef std::vector<user_ptr> user_ptr_list;
160
- typedef std::vector<user*> user_list;
161
- typedef boost::shared_ptr<user_list> user_list_ptr;
162
-
163
- /* �C�e���[�^���‚���͖̂ʓ|������ǂ��A���܂��܂ȃA���S���Y�����g�����Ƃ��l�����
164
- �쐬����̂��x�^�[
165
- */
166
- /*class mdls;
167
- class mdlsIterator : public std::iterator<std::random_access_iterator_tag, user*>
168
- {
169
- int m_index;
170
- mdls& m_mdls;
171
- public:
172
- //mdlsIterator():m_mdls(*((mdls*)0)){};
173
- mdlsIterator(mdls& m, int index=0);
174
- //mdlsIterator& operator=(const mdlsIterator &r) ;
175
- user* operator*() const;
176
- mdlsIterator &operator++();
177
- bool operator!=(const mdlsIterator &r) const;
178
- //mdlsIterator& operator-(const mdlsIterator &r);
179
- //mdlsIterator& operator+(const mdlsIterator &r);
180
- };*/
181
-
182
- class mdls;
183
-
184
- /*user* mdlsIterator::operator*() const{return m_mdls[m_index];}
185
- mdlsIterator& mdlsIterator::operator++() {++m_index; return *this;}
186
- bool mdlsIterator::operator!=(const mdlsIterator &r) const {return m_index != r.m_index;}
187
- */
188
-
189
-
190
- class mdlsIterator
191
- : public boost::iterator_facade<mdlsIterator, user*
192
- , boost::random_access_traversal_tag>
193
- {
194
- friend class boost::iterator_core_access;
195
- size_t m_index;
196
- mdls* m_mdls;
197
- user*& dereference() const;
198
- void increment();
199
- void decrement();
200
- void advance(size_t n);
201
- size_t distance_to(const mdlsIterator &r)const;
202
- bool equal(const mdlsIterator &r) const;
203
-
204
- public:
205
- mdlsIterator(mdls* m, int index=0);
206
-
207
-
208
- };
209
-
210
- class mdls
211
- {
212
- mutable std::vector<user*> m_users;
213
- public:
214
- void clear(){m_users.clear();}
215
- user* add(user* u)
216
- {
217
- m_users.push_back(u);
218
- return u;
219
- }
220
- user*& item(int index)const {return m_users[index];}
221
- //user** item_ptr(int index)const {return &(m_users[index]);}
222
- /** �I���W�i���R���N�V�����̏ꍇ�͈ȉ��̂R�‚̊֐���
223
- �A�C�e���̊i�[�^������item_type����������
224
- �֐��̒lj�������ȏꍇ��adapter������Ă��������B
225
- */
226
-
227
- size_t size(){return m_users.size();}
228
- user* operator[](unsigned int index)const{return item(index);}
229
-
230
- /*
231
- �ȉ��̂Q�‚�typedef��������K�v������
232
- typedef�̓C���^�t�F�[�X�ɉe�����Ȃ��̂ŁA�ˑ��R�[�h�̍ăR���p�C���͕s�v�ł�
233
- */
234
- typedef user* item_type; //�ێ�����^���w��ł��邪 vector�Ő��̏ꍇ�͎w�肷����@���Ȃ�
235
- typedef mdlsIterator iterator;//�K�{
236
- /*
237
- push_back() begin() end()��(�C���^�t�F�[�X�̕ύX�𔺂��̂�����ꍇ)
238
- �������Ă����Ȃ��Ă��ǂ��B���Ȃ��ꍇ�� bzs::db::protocol::tdap::client���O��Ԃ�
239
- ���ꉻ����
240
- template <>
241
- mdlsIterator push_back(mdls& m);
242
- mdlsIterator begin(mdls& m);
243
- mdlsIterator end(mdls& m);
244
- �̂R�‚̊֐����쐬����B
245
- */
246
- //void push_back(user* u){add(u);}
247
- //mdlsIterator begin(){return mdlsIterator(*this, 0);}
248
- //mdlsIterator end(){return mdlsIterator(*this, size());}
249
-
250
- };
251
-
252
- /* mdlsIterator�̎��� */
253
- /*mdlsIterator::mdlsIterator(mdls& m, int index):m_index(index),m_mdls(m){};
254
- user* mdlsIterator::operator*() const{return m_mdls[m_index];}
255
- mdlsIterator& mdlsIterator::operator++() {++m_index; return *this;}
256
- bool mdlsIterator::operator!=(const mdlsIterator &r) const {return m_index != r.m_index;}
257
- */
258
- void dumpUser2(const user* user)
259
- {
260
- std::cout << " id " << user->id() << std::endl;
261
- std::cout << " name " << user->name() << std::endl;
262
- std::cout << " group " << user->grp()->name() << std::endl;
263
- std::cout << " tel " << user->tel() << std::endl << std::endl;
264
-
265
- }
266
-
267
-
268
- user*& mdlsIterator::dereference() const
269
- {
270
- //for (int i=0;i<m_mdls->size();++i)
271
- // dumpUser2((*m_mdls)[i]);
272
-
273
- return m_mdls->item(m_index);
274
- //return p;
275
- }
276
- void mdlsIterator::increment() {++m_index;}
277
- void mdlsIterator::decrement() {--m_index;}
278
- void mdlsIterator::advance(size_t n){m_index+=n;}
279
- size_t mdlsIterator::distance_to(const mdlsIterator &r)const{return r.m_index - m_index;}
280
- bool mdlsIterator::equal(const mdlsIterator &r) const {return m_index == r.m_index;}
281
- mdlsIterator::mdlsIterator(mdls* m, int index):m_index(index),m_mdls(m){}
282
-
283
-
284
-
285
- //�I���W�i���R���N�V������push_back begin end�@���������Ȃ��ꍇ�͈ȉ��̖��O
286
- //��Ԃɂ��ꂼ��̊֐����쐬����
287
- namespace bzs{namespace db{namespace protocol{namespace tdap{namespace client
288
- {
289
-
290
- inline mdlsIterator begin(mdls& m){return mdlsIterator(&m, 0);}
291
-
292
- inline mdlsIterator end(mdls& m){return mdlsIterator(&m, m.size());}
293
-
294
- inline void push_back(mdls& m, user* u){m.add(u);}
295
- }}}}}
296
-
297
-
298
- user* create(mdls& m, int){return user::create(&m);}
299
- user* create(user_ptr_list& m, int){return user::create(&m);}
300
-
301
-
302
-
303
- class user_fdi //: public fdibase
304
- {
305
-
306
- public:
307
- short id;
308
- short name;
309
- short tel;
310
- short group;
311
- void init(table* tb)
312
- {
313
- id = tb->fieldNumByName(_T("id"));
314
- name = tb->fieldNumByName(_T("name"));
315
- tel = tb->fieldNumByName(_T("tel"));
316
- group = tb->fieldNumByName(_T("group"));
317
- }
318
-
319
- //static user_fdi* create(){return new user_fdi();}
320
- };
321
-
322
- user_fdi* createFdi(user_fdi *){return new user_fdi();}
323
- void destroyFdi(user_fdi * p){delete p;}
324
- void initFdi(user_fdi * fdi, table* tb){fdi->init(tb);}
325
-
326
-
327
- class user_orm
328
- {
329
- const user_fdi& m_fdi;
330
-
331
- public:
332
- user_orm(const user_fdi& fdi):m_fdi(fdi){}
333
-
334
- bool compKeyValue(user& l, user& r, int keyNum) const
335
- {
336
- if (keyNum==0)
337
- return l.id() < r.id();
338
- return 1;
339
- }
340
-
341
- void setKeyValues(user& u, const fields& fds, int keyNum)
342
- {
343
- fds[m_fdi.id] = u.id();
344
- }
345
-
346
- void writeMap(user& u, const fields& fds, int optipn)
347
- {
348
- fds[m_fdi.id] = u.id();
349
- fds[m_fdi.name] = u.name();
350
- fds[m_fdi.tel] = u.tel();
351
- fds[m_fdi.group] = u.grp()->id();
352
- }
353
-
354
- void readMap(user& u, const fields& fds, int optipn)
355
- {
356
- u.setId(fds[m_fdi.id].i());
357
- u.setName(fds[m_fdi.name].a_str()); //get by ansi string
358
- u.setTel(fds[m_fdi.tel].a_str()); //get by ansi string
359
- u.grp()->setId(fds[m_fdi.group].i());
360
- }
361
-
362
- void readAuntoincValue(user& u, const fields& fds, int optipn)
363
- {
364
- u.setId(fds[m_fdi.id].i());
365
- }
366
-
367
- /* �N���X������e�[�u�������������߂̊֐�getTableName���K�{ */
368
- const _TCHAR* getTableName(){return _T("user");}
369
-
370
- typedef user mdl_typename;
371
- typedef user_fdi fdi_typename;
372
-
373
- /* �I���W�i���R���N�V�������‚����Ƃ��ɒ�`����
374
- �ŏ��̌^�͂��̃}�b�v�N���X�A2�Ԗڂ̌^�̓R���N�V�����N���X
375
- ���ꂪ��`����Ă��Ă�vector<shared_ptr<T>>�̃R���N�V������
376
- �������Ɏg���܂��B
377
- */
378
- typedef mdlsHandler<user_orm, mdls> collection_orm_typename;
379
-
380
- };
381
-
382
- typedef user_orm::collection_orm_typename users_orm;
383
-
384
-
385
- int isMatch(const fields& fds)
386
- {
387
- return filter_validate_value;
388
- }
389
-
390
- /** dump user to screen */
391
- void dumpUser(const user_ptr& user)
392
- {
393
- std::cout << " id " << user->id() << std::endl;
394
- std::cout << " name " << user->name() << std::endl;
395
- std::cout << " group " << user->grp()->name() << std::endl;
396
- std::cout << " tel " << user->tel() << std::endl << std::endl;
397
-
398
- }
399
-
400
- bool sortFunc2(const user* l, const user* r)
401
- {
402
-
403
- return l->name() < r->name();
404
- }
405
-
406
- void readUsers(databaseManager& db, std::vector<user_ptr>& users)
407
- {
408
- int id = 12;
409
- int find_group_id = 3;
410
- bool readMyKeyValue = false;
411
- // user_orm��activeTable�̃C���X�^���X���쐬���܂��B
412
- activeTable<user_orm> ut(db);
413
-
414
- //id=12�̃��[�U�[���쐬���܂��B
415
- user_ptr u(user::create(0));
416
- u->setId(id);
417
- u->setName("moriwaki");
418
- u->setTel("81-999-9999");
419
- u->grp()->setId(1);
420
- ut.index(primary_key);
421
- ut.save(*u);
422
-
423
- //id=12�̃��[�U�[��ǂݎ��
424
- ut.read(*u);
425
-
426
- //id=12�̃��[�U�[�̓d�b�ԍ��̕ύX
427
- u->setTel("81-999-8888");
428
- ut.update(*u);
429
-
430
- //�L�[�l��ς���Ƃ���
431
- ut.index(primary_key).keyValue(u->id());
432
- u->setId(13);
433
- ut.update(*u, readMyKeyValue);
434
-
435
- //id=13�̃��[�U�[�폜
436
- ut.del(*u);
437
-
438
- //�폜�̓L�[�l�����ł�OK
439
- ut.index(primary_key).keyValue(12).del(); //�G���[�@���R�[�h�Ȃ�
440
-
441
-
442
-
443
- //�J�[�\����index�ƃL�[�ʒu���w�肵�܂��B
444
- //�������烌�R�[�h�̌������J�n���܂��B
445
- ut.index(keynum_group).keyValue(find_group_id);
446
-
447
- //�����������w�肵�܂��B�T�[�o�[�t�B���^�[�ł��B
448
- //reject�Ŏw�肵���A���}�b�`���R�[�h���ɂȂ�ƌ����𒆎~���܂��B
449
- query q;
450
- q.select(_T("*")).where(_T("group"), _T("=") , find_group_id)//.or(_T("group"), _T("=") , _T("a"))
451
- .reject(1);
452
-
453
- //�ǂݎ������s�B�@���ʂ��󂯎��R���N�V�����ƃN�G���[��n���܂��B
454
- ut.read(users, q);
455
-
456
-
457
- /*
458
- �O���reads�Ŏg�p�����R���N�V������vector�ł����B�������I���W�i����
459
- �R���N�V�������g�p���Ă���ꍇ������ł��傤
460
- user_orm�ɃI���W�i���R���N�V�����}�b�v�̌^collection_orm_typename��
461
- �m�点�Ă����Ύ����ŃC���X�^���X���쐬���n���h�����Ă���܂�*/
462
-
463
- mdls m;
464
- ut.index(keynum_group).keyValue(find_group_id).read(m, q);
465
-
466
-
467
- /*
468
- �I���W�i���R���N�V�����}�b�v�������ō쐬�łȂ������ŏ���������
469
- �g���������Ƃ�����ł��傤���̎���readsBy���g�p���܂�*/
470
-
471
- users_orm users_hdr(m);
472
- ut.readRange(users_hdr, q);
473
-
474
-
475
- /* �N���C�A���g���t�B���^�[���ȒP�Ɏg���܂��B
476
- isMatch�֐��̂悤�ȁ@const fields&�������Ɏ����int��Ԃ��֐��Ȃ牽�ł�
477
- OK�ł��B
478
- */
479
- ut.index(keynum_group).keyValue(find_group_id).read(users, q, isMatch);
480
-
481
-
482
-
483
- //group�̓ǂݎ��
484
- group_ptr grp(group::create(0));
485
-
486
- activeTable<group_orm> gt(db);
487
- //shared_ptr<group>�̃C���X�^���X��*���‚��ēn���܂��B
488
- gt.index(0).keyValue(2).read(*grp);
489
-
490
-
491
-
492
- /*
493
- ���|�C���^�̃|�C���^�̎��� *���‚��ēn���܂��B
494
- shared_ptr�ł����|�C���^�ł�*���‚��ē����悤�ɓn���܂��B
495
- */
496
- group* g = group::create(0);
497
- gt.read(*g);
498
- delete g;
499
-
500
-
501
- //--------------------------------------------------------
502
- // Join�̂悤�ȏ���
503
- //--------------------------------------------------------
504
- /*
505
- users����O���[�v�̃��X�g���쐬����user�Ɋ֘A�t�����O���[�v
506
- ��ǂݎ��܂��B
507
- list�֐��ɃR���N�V������user->grp()�֐��̃A�h���X��n���܂��B
508
- activeTable<group_orm>��readEach�֐��ɂ��̃��X�g��n���܂��B
509
- */
510
- query qe;
511
- group_list_ptr grps(listup(users, &user::grp));
512
- gt.index(primary_key).readEach(*grps, qe.select(_T("id"), _T("name")));
513
-
514
-
515
- //�I���W�i���̃O���[�v���X�g�ł�listup�֐��͎g���܂��B
516
- group_list_ptr grps2(listup(m, &user::grp));
517
- gt.index(primary_key).readEach(*grps2, qe);
518
-
519
-
520
- //listup���������Ď����ōs��
521
- gt.index(primary_key);
522
- gt.readEach(users, &user::grp, qe.select(_T("id"), _T("name")));
523
- gt.readEach(m, &user::grp, qe);
524
-
525
- //IN
526
- gt.index(primary_key);
527
- qe.reset();
528
- std::vector<group_ptr> gmdls;
529
- gt.read(gmdls, qe.select(_T("id"), _T("name")).in(1, 2, 3));
530
-
531
- //orderby
532
- users.clear();
533
- ut.index(0).keyValue(0).read(users, q.all());
534
- sort(users, &user::name, &user::id);
535
-
536
- //groupby
537
- //����l�����o����
538
-
539
- //�\�[�g�Ή��̃C�e���[�^�͑�ςł��B
540
- m.clear();
541
- ut.index(0).keyValue(0).read(m, q);
542
-
543
- sort(m, &user::name);
544
- std::sort(begin(m), end(m), &sortFunc2);
545
-
546
- std::for_each(begin(m), end(m), dumpUser2);
547
-
548
- //�e�[�u�������̑���
549
- table_ptr tb = ut.table();
550
- tb->clearOwnerName();
551
- }
552
-
553
-
554
- #pragma argsused
555
- int _tmain(int argc, _TCHAR* argv[])
556
- {
557
- database_ptr db = createDatadaseObject();
558
- try
559
- {
560
- connectParams param(_T("tdap"), _T("localhost"), _T("test"), _T("test"));
561
- openDatabase(db, param);
562
-
563
- databaseManager mgr(db);
564
- std::vector<user_ptr> users;
565
-
566
- readUsers(mgr, users);
567
- std::cout << "Read records success.\nRecord count = " << users.size() << std::endl;
568
-
569
- //dump users to screen.
570
- std::for_each(users.begin(), users.end(), dumpUser);
571
-
572
- return 0;
573
- }
574
-
575
- catch(bzs::rtl::exception& e)
576
- {
577
- std::tcout << *bzs::rtl::getMsg(e) << std::endl;
578
- }
579
- return 1;
580
- }
581
-
582
-
583
-
584
-
585
-