transactd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -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
-