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,5 +1,5 @@
1
- #ifndef trdboostapiH
2
- #define trdboostapiH
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H
3
3
  /*=================================================================
4
4
  Copyright (C) 2013 BizStation Corp All rights reserved.
5
5
 
@@ -14,22 +14,23 @@
14
14
  GNU General Public License for more details.
15
15
 
16
16
  You should have received a copy of the GNU General Public License
17
- along with this program; if not, write to the Free Software
18
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19
19
  02111-1307, USA.
20
20
  =================================================================*/
21
- #include <bzs/db/protocol/tdap/client/trdboostapiInternal.h>
21
+ #include "trdboostapiInternal.h"
22
22
  #include <boost/shared_ptr.hpp>
23
23
  #include <boost/noncopyable.hpp>
24
+ #include <iterator>
24
25
 
25
26
  #include <stdio.h>
26
27
 
27
- #if defined(__GNUC__)
28
- #if !__GNUC_PREREQ(4, 3)
29
- #error "GCC Version is too small. 4.3 or above GCC versions are required."
30
- #endif
28
+ #if defined(__GNUC__)
29
+ #if (!defined(__clang__) && \
30
+ ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)))
31
+ #error "Your GCC version is too old. 4.3 or later versions are required."
32
+ #endif
31
33
  #endif
32
-
33
34
 
34
35
  namespace bzs
35
36
  {
@@ -42,228 +43,212 @@ namespace tdap
42
43
  namespace client
43
44
  {
44
45
 
45
- enum eIndexOpType {
46
- eSeekEqual, eSeekFirst, eSeekLast, eSeekGreaterOrEqual, eSeekGreater, eSeekLessThanOrEqual,
47
- eSeekLessThan};
48
-
49
- enum eStepOpType {
50
- eStepFirst, eStepLast};
51
-
52
- enum eFindCurrntType{
53
- ePosNeedNext = 1, ePosNeedNone = 0, ePosNeedPrev = -1};
54
-
55
- typedef boost::shared_ptr<database>database_ptr;
56
- typedef boost::shared_ptr<table>table_ptr;
57
-
46
+ enum eIndexOpType
47
+ {
48
+ eSeekEqual,
49
+ eSeekFirst,
50
+ eSeekLast,
51
+ eSeekGreaterOrEqual,
52
+ eSeekGreater,
53
+ eSeekLessThanOrEqual,
54
+ eSeekLessThan
55
+ };
58
56
 
57
+ enum eStepOpType
58
+ {
59
+ eStepFirst,
60
+ eStepLast
61
+ };
59
62
 
63
+ enum eFindCurrntType
64
+ {
65
+ ePosNeedNext = 1,
66
+ ePosNeedNone = 0,
67
+ ePosNeedPrev = -1
68
+ };
60
69
 
61
- class field
70
+ class connectParams
62
71
  {
63
- short m_index;
64
- table& m_tb;
72
+ _TCHAR m_buf[MAX_PATH];
73
+ short m_type;
74
+ char_td m_mode;
65
75
 
66
76
  public:
67
- inline field(table& tb, short index) : m_tb(tb), m_index(index) {};
68
-
69
- inline const _TCHAR* c_str() const {return m_tb.getFVstr(m_index);}
70
-
71
- inline const char* a_str() const {return m_tb.getFVAstr(m_index);}
72
-
73
- inline int i() const {return m_tb.getFVint(m_index);}
74
-
75
- inline short i16() const {return m_tb.getFVsht(m_index);}
76
-
77
- inline __int64 i64() const {return m_tb.getFV64(m_index);}
78
-
79
- inline float f() const {return m_tb.getFVflt(m_index);}
80
-
81
- inline double d() const {return m_tb.getFVdbl(m_index);}
82
-
83
- inline field& operator = (const _TCHAR* p)
77
+ inline connectParams(const _TCHAR* protocol, const _TCHAR* hostOrIp,
78
+ const _TCHAR* dbname, const _TCHAR* schemaTable)
79
+ : m_type(TYPE_SCHEMA_BDF), m_mode(TD_OPEN_READONLY)
84
80
  {
85
- m_tb.setFV(m_index, p);
86
- return *this;
81
+ _stprintf_s(m_buf, MAX_PATH, _T("%s://%s/%s?dbfile=%s.bdf"), protocol,
82
+ hostOrIp, dbname, schemaTable);
87
83
  }
88
-
89
- inline field& operator = (const std::_tstring& p)
84
+ inline explicit connectParams(const _TCHAR* uri)
85
+ : m_type(TYPE_SCHEMA_BDF), m_mode(TD_OPEN_READONLY)
90
86
  {
91
- m_tb.setFV(m_index, p.c_str());
92
- return *this;
87
+ _tcscpy_s(m_buf, MAX_PATH, uri);
93
88
  }
89
+ inline void setMode(char_td v) { m_mode = v; }
94
90
 
95
- #ifdef _UNICODE
96
- inline field& operator = (const char* p)
91
+ inline void setType(short v)
97
92
  {
98
- m_tb.setFVA(m_index, p);
99
- return *this;
93
+ if (m_type != v)
94
+ {
95
+ m_buf[_tcslen(m_buf) - 3] = 0x00;
96
+ if (v == TYPE_SCHEMA_BDF)
97
+ _tcscat_s(m_buf, MAX_PATH, _T("bdf"));
98
+ else
99
+ _tcscat_s(m_buf, MAX_PATH, _T("ddf"));
100
+ }
101
+ m_type = v;
100
102
  }
101
103
 
102
- inline field& operator = (const std::string& p)
103
- {
104
- m_tb.setFVA(m_index, p.c_str());
105
- return *this;
106
- }
104
+ inline const _TCHAR* uri() const { return m_buf; }
107
105
 
108
- #endif
106
+ inline char_td mode() const { return m_mode; };
109
107
 
110
- inline field& operator = (int v)
111
- {
112
- m_tb.setFV(m_index, v);
113
- return *this;
114
- }
108
+ inline short type() const { return m_type; };
109
+ };
115
110
 
116
- inline field& operator = (__int64 v)
111
+ inline const _TCHAR* host(const _TCHAR* uri, _TCHAR* buf, size_t size)
112
+ {
113
+ buf[0] = 0x00;
114
+ const _TCHAR* st = _tcsstr(uri, _T("://"));
115
+ if (st)
117
116
  {
118
- m_tb.setFV(m_index, v);
119
- return *this;
117
+ const _TCHAR* en = _tcsstr(st + 3, _T("/"));
118
+ if (en)
119
+ {
120
+ _tcsncpy_s(buf, size, st + 3, en - (st + 3));
121
+ buf[en - (st + 3)] = 0x00;
122
+ }
120
123
  }
124
+ return buf;
125
+ }
121
126
 
122
- inline field& operator = (float v)
127
+ inline const _TCHAR* dbname(const _TCHAR* uri, _TCHAR* buf, size_t size)
128
+ {
129
+ buf[0] = 0x00;
130
+ const _TCHAR* st = _tcsstr(uri, _T("://"));
131
+ if (st)
123
132
  {
124
- m_tb.setFV(m_index, v);
125
- return *this;
133
+ st = _tcsstr(st + 3, _T("/"));
134
+ if (st)
135
+ {
136
+ const _TCHAR* en = _tcsstr(st + 1, _T("?"));
137
+ if (en)
138
+ {
139
+ _tcsncpy_s(buf, size, st + 1, en - (st + 1));
140
+ buf[en - (st + 1)] = 0x00;
141
+ }
142
+ }
126
143
  }
144
+ return buf;
145
+ }
127
146
 
128
- inline field& operator = (double v)
147
+ inline const _TCHAR* schemaTable(const _TCHAR* uri, _TCHAR* buf, size_t size)
148
+ {
149
+ buf[0] = 0x00;
150
+ const _TCHAR* st = _tcsrchr(uri, _T('='));
151
+ if (st)
129
152
  {
130
- m_tb.setFV(m_index, v);
131
- return *this;
153
+ const _TCHAR* en = _tcsrchr(uri, _T('.'));
154
+ if (en)
155
+ {
156
+ _tcsncpy_s(buf, size, st + 1, en - (st + 1));
157
+ buf[en - (st + 1)] = 0x00;
158
+ }
132
159
  }
160
+ return buf;
161
+ }
133
162
 
134
- inline bool operator != (const _TCHAR* p) {return (_tcscmp(p, c_str()) != 0);};
135
- inline bool operator == (const _TCHAR* p) {return (_tcscmp(p, c_str())==0);};
136
-
137
- inline bool operator != (int v) {return (v != i());};
138
- inline bool operator == (int v) {return (v == i());};
139
-
140
- inline bool operator != (short v) {return (v != i16());};
141
- inline bool operator == (short v) {return (v == i16());};
142
-
143
- inline bool operator != (__int64 v) {return (v != i64());};
144
- inline bool operator == (__int64 v) {return (v == i64());};
145
-
146
- inline bool operator != (float v) {return (v != f());};
147
- inline bool operator == (float v) {return (v == f());};
148
-
149
- inline bool operator != (double v) {return (v != d());};
150
- inline bool operator == (double v) {return (v == d());};
163
+ /* databaseManager interface
164
+ If use some databases, implemnt a this interface and set the activeTable
165
+ constructor
166
+ Create table by name and option from suitable database.
151
167
 
152
- inline void setBin(const void* data, uint_td size){ m_tb.setFV(m_index, data, size);}
153
- inline void* getBin(uint_td& size){return m_tb.getFVbin(m_index, size);};
154
- };
155
-
156
- class fields
168
+ */
169
+ class idatabaseManager
157
170
  {
158
- table& m_tb;
159
-
160
- public:
161
- inline explicit fields(table& tb) : m_tb(tb) {};
162
- inline explicit fields(table_ptr tb) : m_tb(*tb) {};
163
- inline void clearValues(){m_tb.clearBuffer();};
164
- inline field operator[](size_t index) const {return field(m_tb, (short)index);}
165
-
166
- inline field operator()(const _TCHAR* name) const {
167
- return field(m_tb, m_tb.fieldNumByName(name));}
168
- inline table& tb() const {return m_tb;}
169
-
170
- inline size_t size() {return m_tb.tableDef()->fieldCount;}
171
-
172
- inline field fd(size_t index) const {return field(m_tb, (short)index);}
173
171
 
174
- inline field fd(const _TCHAR* name) const {return field(m_tb, m_tb.fieldNumByName(name));}
175
- };
176
-
177
- class filterParams
178
- {
179
- std::_tstring m_str;
180
- int m_rejectCount;
181
- int m_maxRecords;
182
172
  public:
183
- inline filterParams(const _TCHAR* filter, int rejectCount, int maxRecords)
184
- :m_str(filter),m_rejectCount(rejectCount),m_maxRecords(maxRecords)
185
- {
186
-
187
- }
188
- inline const _TCHAR* filter() const {return m_str.c_str();}
189
- inline int rejectCount() const {return m_rejectCount;}
190
- inline int maxRecords() const {return m_maxRecords;}
191
-
192
-
173
+ virtual ~idatabaseManager(){};
174
+ virtual void reset(int) = 0;
175
+ virtual table_ptr table(const _TCHAR* name) = 0;
176
+ virtual database* db() const = 0;
177
+ virtual void use(const connectParams* param = NULL) = 0;
178
+ virtual void unUse() = 0;
179
+ virtual void setOption(__int64 v) = 0;
180
+ virtual __int64 option() = 0;
181
+ virtual void beginTrn(short bias) = 0;
182
+ virtual void endTrn() = 0;
183
+ virtual void abortTrn() = 0;
184
+ virtual int enableTrn() = 0;
185
+ virtual void beginSnapshot() = 0;
186
+ virtual void endSnapshot() = 0;
187
+ virtual const _TCHAR* uri() const = 0;
188
+ virtual char_td mode() const = 0;
189
+ virtual bool isOpened() const = 0;
190
+ virtual short_td stat() const = 0;
191
+ virtual uchar_td* clientID() const = 0;
193
192
  };
194
193
 
195
194
  template <class T>
196
195
  class tableIterator
196
+ : public std::iterator<std::bidirectional_iterator_tag, fields, void>
197
197
  {
198
198
 
199
199
  table& m_tb;
200
200
  fields m_fds;
201
201
 
202
- inline tableIterator() : m_tb(*((table*)0)), m_fds(*((table*)0)) {};
203
-
204
202
  public:
205
- static const tableIterator eos;
206
-
207
203
  inline tableIterator(table& tb) : m_tb(tb), m_fds(tb)
208
204
  {
209
- if ((tb.stat() != 0) && (tb.stat() != STATUS_EOF) && (tb.stat() != STATUS_NOT_FOUND_TI))
210
- nstable::throwError(std::_tstring(_T("tableIterator")).c_str(), &tb);
211
-
205
+ readStatusCheck(tb, _T("tableIterator"));
212
206
  }
213
207
 
214
- table& tb() const {return m_tb;};
208
+ table& tb() const { return m_tb; };
215
209
 
216
- inline fields& operator*() {return m_fds;}
210
+ inline fields& operator*() { return m_fds; }
217
211
 
218
- inline fields* operator->() {return &m_fds;}
212
+ inline fields* operator->() { return &m_fds; }
219
213
 
220
- inline tableIterator& operator++() {
214
+ inline tableIterator& operator++()
215
+ {
221
216
  T::increment(m_tb);
222
217
  return *this;
223
218
  }
224
219
 
225
- inline tableIterator& operator--() {
220
+ inline tableIterator& operator--()
221
+ {
226
222
  T::decrement(m_tb);
227
223
  return *this;
228
224
  }
229
225
 
230
- inline bool operator == (const tableIterator& v) {return m_tb.stat() != 0;}
226
+ inline bool operator==(const tableIterator& v) { return m_tb.stat() != 0; }
231
227
 
232
- inline bool operator != (const tableIterator& v) {return m_tb.stat() == 0;}
228
+ inline bool operator!=(const tableIterator& v) { return m_tb.stat() == 0; }
233
229
 
230
+ inline bool isEnd() { return m_tb.stat() != 0; }
234
231
  };
232
+
235
233
  typedef tableIterator<indexNavi> indexIterator;
236
234
  typedef tableIterator<indexFindNavi> findIterator;
237
235
  typedef tableIterator<stepNavi> stepIterator;
238
236
 
239
-
240
- template <> const indexIterator indexIterator::eos;
241
- template <> const findIterator findIterator::eos;
242
- template <> const stepIterator stepIterator::eos;
243
-
244
-
245
-
246
237
  typedef tableIterator<indexRvNavi> indexRvIterator;
247
238
  typedef tableIterator<indexRvFindNavi> findRvIterator;
248
239
  typedef tableIterator<stepRvNavi> stepRvIterator;
249
240
 
250
-
251
- template <> const indexRvIterator indexRvIterator::eos;
252
- template <> const findRvIterator findRvIterator::eos;
253
- template <> const stepRvIterator stepRvIterator::eos;
254
-
255
-
256
-
257
241
  static const int filter_validate_value = 0;
258
242
  static const int filter_validate_block = 1;
259
243
  static const int filter_invalidate_value = 2;
260
244
 
261
- typedef boost::function < int(const fields&) > validationFunc;
245
+ typedef boost::function<int(const fields&)> validationFunc;
262
246
 
263
- #define VALIDATION_FUNC(FUNC_PTR, PTR) boost::bind(FUNC_PTR, PTR, fields_type)
247
+ #define VALIDATION_FUNC(FUNC_PTR, PTR) boost::bind(FUNC_PTR, PTR, fields_type)
264
248
 
265
- template<class T>
249
+ template <class T>
266
250
  class filterdIterator
251
+ : public std::iterator<std::input_iterator_tag, fields, void>
267
252
  {
268
253
  T& m_it;
269
254
  validationFunc m_func;
@@ -273,14 +258,9 @@ class filterdIterator
273
258
  if (v == filter_invalidate_value)
274
259
  m_it.tb().setStat(STATUS_EOF);
275
260
  return v;
276
-
277
261
  }
278
262
 
279
263
  public:
280
- static const filterdIterator<T> eos;
281
-
282
- filterdIterator() : m_it(*((T*)0)), m_func(NULL) {}
283
-
284
264
  filterdIterator(T& it, validationFunc func) : m_it(it), m_func(func)
285
265
  {
286
266
  int v = callFunc();
@@ -288,27 +268,32 @@ public:
288
268
  operator++();
289
269
  }
290
270
 
271
+ inline fields operator*() { return m_it.operator*(); }
291
272
 
292
- inline fields operator*() {return m_it.operator*();}
293
-
294
- inline fields* operator->() {return m_it.operator->();}
273
+ inline fields* operator->() { return m_it.operator->(); }
295
274
 
296
275
  T& operator++()
297
276
  {
298
277
  int v;
299
- do {
278
+ do
279
+ {
300
280
  ++m_it;
301
281
  v = callFunc();
302
- }
303
- while (v == filter_validate_block);
282
+ } while (v == filter_validate_block);
304
283
  return m_it;
305
284
  }
306
285
 
286
+ inline bool operator==(const filterdIterator& v)
287
+ {
288
+ return m_it.operator==(v.m_it);
289
+ }
307
290
 
308
- inline bool operator == (const filterdIterator& v) {return m_it.operator == (v.m_it);}
309
-
310
- inline bool operator != (const filterdIterator& v) {return m_it.operator != (v.m_it);}
291
+ inline bool operator!=(const filterdIterator& v)
292
+ {
293
+ return m_it.operator!=(v.m_it);
294
+ }
311
295
 
296
+ inline bool isEnd() { return m_it.isEnd(); }
312
297
  };
313
298
 
314
299
  typedef filterdIterator<indexIterator> filterdIndexIterator;
@@ -319,69 +304,57 @@ typedef filterdIterator<indexRvIterator> filterdIndexRvIterator;
319
304
  typedef filterdIterator<stepRvIterator> filterdStepRvIterator;
320
305
  typedef filterdIterator<findRvIterator> filterdFindRvIterator;
321
306
 
322
-
323
-
324
- template<>
325
- const filterdIndexIterator filterdIndexIterator::eos;
326
-
327
- template<>
328
- const filterdStepIterator filterdStepIterator::eos;
329
-
330
- template<>
331
- const filterdFindIterator filterdFindIterator::eos;
332
-
333
- template<>
334
- const filterdIndexRvIterator filterdIndexRvIterator::eos;
335
-
336
- template<>
337
- const filterdStepRvIterator filterdStepRvIterator::eos;
338
-
339
- template<>
340
- const filterdFindRvIterator filterdFindRvIterator::eos;
341
-
342
-
343
- indexIterator readIndex(table_ptr tb, eIndexOpType op)
307
+ inline indexIterator readIndex(table_ptr tb, eIndexOpType op)
344
308
  {
345
309
 
346
310
  switch (op)
347
311
  {
348
- case eSeekEqual: tb->seek();
312
+ case eSeekEqual:
313
+ tb->seek();
349
314
  break;
350
- case eSeekFirst: tb->seekFirst();
315
+ case eSeekFirst:
316
+ tb->seekFirst();
351
317
  break;
352
- case eSeekGreaterOrEqual: tb->seekGreater(true);
318
+ case eSeekGreaterOrEqual:
319
+ tb->seekGreater(true);
353
320
  break;
354
- case eSeekGreater: tb->seekGreater(false);
321
+ case eSeekGreater:
322
+ tb->seekGreater(false);
355
323
  break;
356
324
  default:
357
325
  assert(0);
358
- readStatusCheck(*tb, _T("readIndex"));
326
+ readStatusCheck(*tb, _T("readIndex"));
359
327
  }
360
328
  return indexIterator(*tb);
361
329
  }
362
330
 
363
- indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op)
331
+ inline indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op)
364
332
  {
365
333
 
366
334
  switch (op)
367
335
  {
368
- case eSeekEqual: tb->seek();
336
+ case eSeekEqual:
337
+ tb->seek();
369
338
  break;
370
- case eSeekLast: tb->seekLast();
339
+ case eSeekLast:
340
+ tb->seekLast();
371
341
  break;
372
- case eSeekLessThanOrEqual: tb->seekLessThan(true);
342
+ case eSeekLessThanOrEqual:
343
+ tb->seekLessThan(true);
373
344
  break;
374
- case eSeekLessThan: tb->seekLessThan(false);
345
+ case eSeekLessThan:
346
+ tb->seekLessThan(false);
375
347
  break;
376
348
  default:
377
349
  assert(0);
378
- readStatusCheck(*tb, _T("readIndexRv"));
350
+ readStatusCheck(*tb, _T("readIndexRv"));
379
351
  }
380
352
  return indexRvIterator(*tb);
381
353
  }
382
354
 
383
- template<class T>
384
- inline indexIterator readIndex(table_ptr tb, eIndexOpType op, char_td keynum, T func)
355
+ template <class T>
356
+ inline indexIterator readIndex(table_ptr tb, eIndexOpType op, char_td keynum,
357
+ T func)
385
358
  {
386
359
  tb->setKeyNum(keynum);
387
360
  if (&func)
@@ -390,11 +363,11 @@ inline indexIterator readIndex(table_ptr tb, eIndexOpType op, char_td keynum, T
390
363
  func(fds);
391
364
  }
392
365
  return readIndex(tb, op);
393
-
394
366
  }
395
367
 
396
- template<class T>
397
- inline indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op, char_td keynum, T func)
368
+ template <class T>
369
+ inline indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op,
370
+ char_td keynum, T func)
398
371
  {
399
372
  tb->setKeyNum(keynum);
400
373
  if (&func)
@@ -403,154 +376,171 @@ inline indexRvIterator readIndexRv(table_ptr tb, eIndexOpType op, char_td keynum
403
376
  func(fds);
404
377
  }
405
378
  return readIndexRv(tb, op);
406
-
407
379
  }
408
380
 
409
- template <class T0, class T1, class T2, class T3
410
- , class T4, class T5, class T6, class T7>
411
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
412
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
413
- ,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
381
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
382
+ class T7>
383
+ inline indexIterator
384
+ readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
385
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
386
+ const T5 kv5, const T6 kv6, const T7 kv7)
414
387
  {
415
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::
416
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
388
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
389
+ tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
417
390
  return readIndex(tb, op);
418
391
  }
419
392
 
420
- template <class T0, class T1, class T2, class T3
421
- , class T4, class T5, class T6>
422
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
423
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
424
- ,const T4 kv4, const T5 kv5, const T6 kv6)
393
+ /** @cond INTERNAL */
394
+
395
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
396
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
397
+ const char_td keynum, const T0 kv0,
398
+ const T1 kv1, const T2 kv2, const T3 kv3,
399
+ const T4 kv4, const T5 kv5, const T6 kv6)
425
400
  {
426
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::
427
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6);
401
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
402
+ kv3, kv4, kv5, kv6);
428
403
  return readIndex(tb, op);
429
404
  }
430
405
 
431
- template <class T0, class T1, class T2, class T3
432
- , class T4, class T5>
433
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
434
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
435
- ,const T4 kv4, const T5 kv5)
406
+ template <class T0, class T1, class T2, class T3, class T4, class T5>
407
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
408
+ const char_td keynum, const T0 kv0,
409
+ const T1 kv1, const T2 kv2, const T3 kv3,
410
+ const T4 kv4, const T5 kv5)
436
411
  {
437
- keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5);
412
+ keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
413
+ kv4, kv5);
438
414
  return readIndex(tb, op);
439
415
  }
440
416
 
441
417
  template <class T0, class T1, class T2, class T3, class T4>
442
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
443
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
418
+ inline indexIterator
419
+ readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
420
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
444
421
  {
445
- keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4);
422
+ keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
423
+ kv4);
446
424
  return readIndex(tb, op);
447
425
  }
448
426
 
449
427
  template <class T0, class T1, class T2, class T3>
450
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
451
- ,const T0 kv0, const T1 kv1 ,const T2 kv2, const T3 kv3)
428
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
429
+ const char_td keynum, const T0 kv0,
430
+ const T1 kv1, const T2 kv2, const T3 kv3)
452
431
  {
453
432
  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
454
433
  return readIndex(tb, op);
455
434
  }
456
435
 
457
436
  template <class T0, class T1, class T2>
458
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
459
- ,const T0 kv0, const T1 kv1 ,const T2 kv2)
437
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
438
+ const char_td keynum, const T0 kv0,
439
+ const T1 kv1, const T2 kv2)
460
440
  {
461
441
  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
462
442
  return readIndex(tb, op);
463
443
  }
464
444
 
465
445
  template <class T0, class T1>
466
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
467
- ,const T0 kv0, const T1 kv1)
446
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
447
+ const char_td keynum, const T0 kv0,
448
+ const T1 kv1)
468
449
  {
469
450
  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
470
451
  return readIndex(tb, op);
471
452
  }
472
453
 
473
454
  template <class T0>
474
- inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op, const char_td keynum
475
- ,const T0 kv0)
455
+ inline indexIterator readIndex_v(table_ptr tb, eIndexOpType op,
456
+ const char_td keynum, const T0 kv0)
476
457
  {
477
458
  keyValueSetter<T0>::set(tb, keynum, kv0);
478
459
  return readIndex(tb, op);
479
460
  }
461
+ /** @endcond */
480
462
 
481
-
482
- template <class T0, class T1, class T2, class T3
483
- , class T4, class T5, class T6, class T7>
484
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
485
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
486
- ,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
463
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
464
+ class T7>
465
+ inline indexRvIterator
466
+ readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
467
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
468
+ const T5 kv5, const T6 kv6, const T7 kv7)
487
469
  {
488
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::
489
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
470
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
471
+ tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
490
472
  return readIndexRv(tb, op);
491
473
  }
492
474
 
493
- template <class T0, class T1, class T2, class T3
494
- , class T4, class T5, class T6>
495
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
496
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
497
- ,const T4 kv4, const T5 kv5, const T6 kv6)
475
+ /** @cond INTERNAL */
476
+
477
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
478
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
479
+ const char_td keynum, const T0 kv0,
480
+ const T1 kv1, const T2 kv2, const T3 kv3,
481
+ const T4 kv4, const T5 kv5, const T6 kv6)
498
482
  {
499
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::
500
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6);
483
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
484
+ kv3, kv4, kv5, kv6);
501
485
  return readIndexRv(tb, op);
502
486
  }
503
487
 
504
- template <class T0, class T1, class T2, class T3
505
- , class T4, class T5>
506
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
507
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3
508
- ,const T4 kv4, const T5 kv5)
488
+ template <class T0, class T1, class T2, class T3, class T4, class T5>
489
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
490
+ const char_td keynum, const T0 kv0,
491
+ const T1 kv1, const T2 kv2, const T3 kv3,
492
+ const T4 kv4, const T5 kv5)
509
493
  {
510
- keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5);
494
+ keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
495
+ kv4, kv5);
511
496
  return readIndexRv(tb, op);
512
497
  }
513
498
 
514
499
  template <class T0, class T1, class T2, class T3, class T4>
515
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
516
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
500
+ inline indexRvIterator
501
+ readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum, const T0 kv0,
502
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
517
503
  {
518
- keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4);
504
+ keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
505
+ kv4);
519
506
  return readIndexRv(tb, op);
520
507
  }
521
508
 
522
509
  template <class T0, class T1, class T2, class T3>
523
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
524
- ,const T0 kv0, const T1 kv1 ,const T2 kv2, const T3 kv3)
510
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
511
+ const char_td keynum, const T0 kv0,
512
+ const T1 kv1, const T2 kv2, const T3 kv3)
525
513
  {
526
514
  keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
527
515
  return readIndexRv(tb, op);
528
516
  }
529
517
 
530
518
  template <class T0, class T1, class T2>
531
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
532
- ,const T0 kv0, const T1 kv1 ,const T2 kv2)
519
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
520
+ const char_td keynum, const T0 kv0,
521
+ const T1 kv1, const T2 kv2)
533
522
  {
534
523
  keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
535
524
  return readIndexRv(tb, op);
536
525
  }
537
526
 
538
527
  template <class T0, class T1>
539
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
540
- ,const T0 kv0, const T1 kv1)
528
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
529
+ const char_td keynum, const T0 kv0,
530
+ const T1 kv1)
541
531
  {
542
532
  keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
543
533
  return readIndexRv(tb, op);
544
534
  }
545
535
 
546
536
  template <class T0>
547
- inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op, const char_td keynum
548
- ,const T0 kv0)
537
+ inline indexRvIterator readIndexRv_v(table_ptr tb, eIndexOpType op,
538
+ const char_td keynum, const T0 kv0)
549
539
  {
550
540
  keyValueSetter<T0>::set(tb, keynum, kv0);
551
541
  return readIndexRv(tb, op);
552
542
  }
553
-
543
+ /** @endcond */
554
544
 
555
545
  inline stepIterator readStep(table_ptr tb)
556
546
  {
@@ -564,259 +554,282 @@ inline stepRvIterator readStepRv(table_ptr tb)
564
554
  return stepRvIterator(*tb);
565
555
  }
566
556
 
567
-
568
- template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
569
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
570
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
557
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
558
+ class T7>
559
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
560
+ const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
561
+ const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
571
562
  {
572
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
573
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::
574
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
563
+ tb->setQuery(&q);
564
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
565
+ tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
575
566
  tb->find(table::findForword);
576
- return findIterator(*tb);
567
+ return findIterator(*tb);
577
568
  }
578
569
 
570
+ /** @cond INTERNAL */
571
+
579
572
  template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
580
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
581
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6)
573
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
574
+ const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
575
+ const T4 kv4, const T5 kv5, const T6 kv6)
582
576
  {
583
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
584
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6);
577
+ tb->setQuery(&q);
578
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
579
+ kv3, kv4, kv5, kv6);
585
580
  tb->find(table::findForword);
586
- return findIterator(*tb);
581
+ return findIterator(*tb);
587
582
  }
588
583
 
589
584
  template <class T0, class T1, class T2, class T3, class T4, class T5>
590
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
591
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5)
585
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
586
+ const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
587
+ const T4 kv4, const T5 kv5)
592
588
  {
593
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
594
- keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5);
589
+ tb->setQuery(&q);
590
+ keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
591
+ kv4, kv5);
595
592
  tb->find(table::findForword);
596
- return findIterator(*tb);
593
+ return findIterator(*tb);
597
594
  }
598
595
 
599
596
  template <class T0, class T1, class T2, class T3, class T4>
600
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
601
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4)
597
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
598
+ const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,
599
+ const T4 kv4)
602
600
  {
603
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
604
- keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4);
601
+ tb->setQuery(&q);
602
+ keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
603
+ kv4);
605
604
  tb->find(table::findForword);
606
- return findIterator(*tb);
605
+ return findIterator(*tb);
607
606
  }
608
607
 
609
608
  template <class T0, class T1, class T2, class T3>
610
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
611
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
609
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
610
+ const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
612
611
  {
613
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
614
- keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
612
+ tb->setQuery(&q);
613
+ keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
615
614
  tb->find(table::findForword);
616
- return findIterator(*tb);
615
+ return findIterator(*tb);
617
616
  }
618
617
 
619
618
  template <class T0, class T1, class T2>
620
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
621
- ,const T0 kv0, const T1 kv1, const T2 kv2)
619
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
620
+ const T0 kv0, const T1 kv1, const T2 kv2)
622
621
  {
623
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
624
- keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
622
+ tb->setQuery(&q);
623
+ keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
625
624
  tb->find(table::findForword);
626
- return findIterator(*tb);
625
+ return findIterator(*tb);
627
626
  }
628
627
 
629
628
  template <class T0, class T1>
630
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
631
- ,const T0 kv0, const T1 kv1)
629
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
630
+ const T0 kv0, const T1 kv1)
632
631
  {
633
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
634
- keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
632
+ tb->setQuery(&q);
633
+ keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
635
634
  tb->find(table::findForword);
636
- return findIterator(*tb);
635
+ return findIterator(*tb);
637
636
  }
638
637
 
639
638
  template <class T0>
640
- findIterator find(table_ptr tb, const char_td keynum, const filterParams& fp
641
- ,const T0 kv0)
639
+ inline findIterator find(table_ptr tb, const char_td keynum, const queryBase& q,
640
+ const T0 kv0)
642
641
  {
643
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
644
- keyValueSetter<T0>::set(tb, keynum, kv0);
642
+ tb->setQuery(&q);
643
+ keyValueSetter<T0>::set(tb, keynum, kv0);
645
644
  tb->find(table::findForword);
646
- return findIterator(*tb);
645
+ return findIterator(*tb);
647
646
  }
647
+ /** @endcond */
648
648
 
649
- template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
650
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
651
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
649
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
650
+ class T7>
651
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
652
+ const queryBase& q, const T0 kv0, const T1 kv1,
653
+ const T2 kv2, const T3 kv3, const T4 kv4,
654
+ const T5 kv5, const T6 kv6, const T7 kv7)
652
655
  {
653
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
654
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::
655
- set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
656
+ tb->setQuery(&q);
657
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
658
+ tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
656
659
  tb->find(table::findBackForword);
657
- return findRvIterator(*tb);
660
+ return findRvIterator(*tb);
658
661
  }
659
662
 
663
+ /** @cond INTERNAL */
664
+
660
665
  template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
661
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
662
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6)
663
- {
664
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
665
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6);
666
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
667
+ const queryBase& q, const T0 kv0, const T1 kv1,
668
+ const T2 kv2, const T3 kv3, const T4 kv4,
669
+ const T5 kv5, const T6 kv6)
670
+ {
671
+ tb->setQuery(&q);
672
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
673
+ kv3, kv4, kv5, kv6);
666
674
  tb->find(table::findBackForword);
667
- return findRvIterator(*tb);
675
+ return findRvIterator(*tb);
668
676
  }
669
677
 
670
678
  template <class T0, class T1, class T2, class T3, class T4, class T5>
671
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
672
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5)
679
+ inline findRvIterator
680
+ findRv(table_ptr tb, const char_td keynum, const queryBase& q, const T0 kv0,
681
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5)
673
682
  {
674
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
675
- keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5);
683
+ tb->setQuery(&q);
684
+ keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
685
+ kv4, kv5);
676
686
  tb->find(table::findBackForword);
677
- return findRvIterator(*tb);
687
+ return findRvIterator(*tb);
678
688
  }
679
689
 
680
690
  template <class T0, class T1, class T2, class T3, class T4>
681
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
682
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4)
691
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
692
+ const queryBase& q, const T0 kv0, const T1 kv1,
693
+ const T2 kv2, const T3 kv3, const T4 kv4)
683
694
  {
684
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
685
- keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4);
695
+ tb->setQuery(&q);
696
+ keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
697
+ kv4);
686
698
  tb->find(table::findBackForword);
687
- return findRvIterator(*tb);
699
+ return findRvIterator(*tb);
688
700
  }
689
701
 
690
702
  template <class T0, class T1, class T2, class T3>
691
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
692
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
703
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
704
+ const queryBase& q, const T0 kv0, const T1 kv1,
705
+ const T2 kv2, const T3 kv3)
693
706
  {
694
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
695
- keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
707
+ tb->setQuery(&q);
708
+ keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
696
709
  tb->find(table::findBackForword);
697
- return findRvIterator(*tb);
710
+ return findRvIterator(*tb);
698
711
  }
699
712
 
700
713
  template <class T0, class T1, class T2>
701
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
702
- ,const T0 kv0, const T1 kv1, const T2 kv2)
714
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
715
+ const queryBase& q, const T0 kv0, const T1 kv1,
716
+ const T2 kv2)
703
717
  {
704
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
705
- keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
718
+ tb->setQuery(&q);
719
+ keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
706
720
  tb->find(table::findBackForword);
707
- return findRvIterator(*tb);
721
+ return findRvIterator(*tb);
708
722
  }
709
723
 
710
724
  template <class T0, class T1>
711
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
712
- ,const T0 kv0, const T1 kv1)
725
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
726
+ const queryBase& q, const T0 kv0, const T1 kv1)
713
727
  {
714
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
715
- keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
728
+ tb->setQuery(&q);
729
+ keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
716
730
  tb->find(table::findBackForword);
717
- return findRvIterator(*tb);
731
+ return findRvIterator(*tb);
718
732
  }
719
733
 
720
734
  template <class T0>
721
- findRvIterator findRv(table_ptr tb, const char_td keynum, const filterParams& fp
722
- ,const T0 kv0)
735
+ inline findRvIterator findRv(table_ptr tb, const char_td keynum,
736
+ const queryBase& q, const T0 kv0)
723
737
  {
724
- tb->setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
725
- keyValueSetter<T0>::set(tb, keynum, kv0);
738
+ tb->setQuery(&q);
739
+ keyValueSetter<T0>::set(tb, keynum, kv0);
726
740
  tb->find(table::findBackForword);
727
- return findRvIterator(*tb);
741
+ return findRvIterator(*tb);
728
742
  }
729
743
 
730
- findIterator getFindIterator(indexIterator it, const filterParams& fp
731
- ,bool isCurrentValid)
744
+ /** @endcond */
745
+
746
+ inline findIterator getFindIterator(indexIterator it, const queryBase& q,
747
+ bool isCurrentValid)
732
748
 
733
749
  {
734
- if (it != indexIterator::eos)
735
- {
736
- it.tb().setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
737
- if (!isCurrentValid)
738
- it.tb().findNext(false);
739
- }
750
+ if (!it.isEnd())
751
+ {
752
+ it.tb().setQuery(&q);
753
+ if (!isCurrentValid)
754
+ it.tb().findNext(false);
755
+ }
740
756
  return findIterator(it.tb());
741
757
  }
742
758
 
743
- findRvIterator getFindIterator(indexRvIterator it, const filterParams& fp
744
- ,bool isCurrentValid)
759
+ inline findRvIterator getFindIterator(indexRvIterator it, const queryBase& q,
760
+ bool isCurrentValid)
745
761
  {
746
- if (it != indexRvIterator::eos)
747
- it.tb().setFilter(fp.filter(), fp.rejectCount(), fp.maxRecords());
762
+ if (!it.isEnd())
763
+ it.tb().setQuery(&q);
748
764
  if (!isCurrentValid)
749
765
  it.tb().findPrev(false);
750
766
  return findRvIterator(it.tb());
751
767
  }
752
768
 
753
-
754
- class connectParams
769
+ template <class Database_Ptr>
770
+ bool isSameUri(const connectParams* param, const Database_Ptr& db)
755
771
  {
756
- _TCHAR m_buf[MAX_PATH];
757
- short m_mode;
758
- short m_type;
772
+ return db && db->isOpened() && (_tcsicmp(param->uri(), db->uri()) == 0) &&
773
+ (param->mode() == db->mode());
774
+ }
759
775
 
760
- public:
761
- inline connectParams(const _TCHAR* protocol, const _TCHAR* hostOrIp, const _TCHAR* dbname,
762
- const _TCHAR* schemaTable) : m_mode(TD_OPEN_READONLY), m_type(TYPE_SCHEMA_BDF)
763
- {
764
- _stprintf_s(m_buf, MAX_PATH, _T("%s://%s/%s?dbfile=%s.bdf")
765
- , protocol, hostOrIp, dbname, schemaTable);
776
+ inline void releaseDatabase(database* db)
777
+ {
778
+ database::destroy(db);
779
+ }
766
780
 
767
- }
768
- inline explicit connectParams(const _TCHAR* uri) : m_mode(TD_OPEN_READONLY), m_type(TYPE_SCHEMA_BDF)
781
+ inline void releaseTable(table* p)
782
+ {
783
+ if (p)
769
784
  {
770
- _tcscpy_s(m_buf, MAX_PATH, uri);
771
-
785
+ if (nsdatabase::testTablePtr(p))
786
+ p->release();
772
787
  }
773
- inline void setMode(short v){m_mode = v;}
774
-
775
- inline void setType(short v){m_type = v;}
776
-
777
- inline const _TCHAR* uri() const {return m_buf;}
778
-
779
- inline short mode() const {return m_mode;};
780
-
781
- inline short type() const {return m_type;};
782
-
783
- };
784
-
785
- inline void releaseDatabase(database* db) {database::destroy(db);}
786
-
787
- inline void releaseTable(table* p) {if (p) p->release();}
788
+ }
788
789
 
789
- inline database_ptr createDatadaseObject()
790
+ inline database_ptr createDatabaseObject()
790
791
  {
791
792
  database_ptr p(database::create(), releaseDatabase);
792
793
  return p;
793
794
  }
794
795
 
795
796
  template <class Database_Ptr, class ConnectParam_type>
796
- inline void connect(Database_Ptr db, const ConnectParam_type& connPrams, bool newConnection)
797
+ inline void connect(Database_Ptr db, const ConnectParam_type& connPrams,
798
+ bool newConnection)
797
799
  {
798
800
  db->connect(connPrams.uri(), newConnection);
799
801
  if (db->stat())
800
- nstable::throwError((std::_tstring(_T("Connect database ")) + connPrams.uri()).c_str(), db->stat());
801
-
802
+ nstable::throwError(
803
+ (std::_tstring(_T("Connect database ")) + connPrams.uri()).c_str(),
804
+ db->stat());
802
805
  }
803
806
 
807
+ /*template <>
808
+ inline void connect(idatabaseManager* db, const connectParams& connPrams, bool
809
+ newConnection)
810
+ {
811
+ db->connect(connPrams, newConnection);
812
+ if (db->stat())
813
+ nstable::throwError((std::_tstring(_T("Connect database ")) +
814
+ connPrams.uri()).c_str(), db->stat());
815
+
816
+ }*/
817
+
804
818
  template <class Database_Ptr>
805
819
  inline void disconnect(Database_Ptr db, const connectParams& connPrams)
806
820
  {
807
821
  db->disconnect(connPrams.uri());
808
822
  if (db->stat())
809
- nstable::throwError((std::_tstring(_T("Disconnect database ")) + connPrams.uri()).c_str(), db->stat());
810
-
823
+ nstable::throwError((std::_tstring(_T("Disconnect database ")) +
824
+ connPrams.uri()).c_str(),
825
+ db->stat());
811
826
  }
812
827
 
813
- template <class Database_Ptr>
814
- inline void disconnect(Database_Ptr db)
828
+ template <class Database_Ptr> inline void disconnect(Database_Ptr db)
815
829
  {
816
830
  db->disconnect();
817
831
  if (db->stat())
818
832
  nstable::throwError(_T("Disconnect database "), db->stat());
819
-
820
833
  }
821
834
 
822
835
  template <class Database_Ptr>
@@ -824,7 +837,9 @@ inline void createDatabase(Database_Ptr db, const connectParams& connPrams)
824
837
  {
825
838
  db->create(connPrams.uri());
826
839
  if (db->stat())
827
- nstable::throwError((std::_tstring(_T("Create database ")) + connPrams.uri()).c_str(), db->stat());
840
+ nstable::throwError(
841
+ (std::_tstring(_T("Create database ")) + connPrams.uri()).c_str(),
842
+ db->stat());
828
843
  }
829
844
 
830
845
  template <class Database_Ptr>
@@ -832,36 +847,48 @@ inline void createDatabase(Database_Ptr db, const _TCHAR* uri)
832
847
  {
833
848
  db->create(uri);
834
849
  if (db->stat())
835
- nstable::throwError((std::_tstring(_T("Create database "))+ uri).c_str() , db->stat());
850
+ nstable::throwError(
851
+ (std::_tstring(_T("Create database ")) + uri).c_str(), db->stat());
836
852
  }
837
853
 
838
-
839
854
  template <class Database_Ptr, class ConnectParam_type>
840
855
  inline void openDatabase(Database_Ptr db, const ConnectParam_type& connPrams)
841
856
  {
842
857
  db->open(connPrams.uri(), connPrams.type(), connPrams.mode());
843
858
  if (db->stat())
844
- nstable::throwError((std::_tstring(_T("Open database ")) + connPrams.uri()).c_str(), db->stat());
845
-
859
+ nstable::throwError(
860
+ (std::_tstring(_T("Open database ")) + connPrams.uri()).c_str(),
861
+ db->stat());
846
862
  }
847
863
 
848
864
  template <class Database_Ptr>
849
- inline void openDatabase(Database_Ptr db, const _TCHAR* uri, short schemaType = 0, short mode = -2, const _TCHAR* dir = NULL,
850
- const _TCHAR* ownername = NULL)
865
+ inline void openDatabase(Database_Ptr db, const _TCHAR* uri,
866
+ short schemaType = 0, short mode = -2,
867
+ const _TCHAR* dir = NULL,
868
+ const _TCHAR* ownername = NULL)
851
869
  {
852
870
  db->open(uri, schemaType, mode, dir, ownername);
853
871
  if (db->stat())
854
- nstable::throwError((std::_tstring(_T("Open database ")) + std::_tstring(uri)).c_str(), db->stat());
855
-
872
+ nstable::throwError(
873
+ (std::_tstring(_T("Open database ")) + std::_tstring(uri)).c_str(),
874
+ db->stat());
856
875
  }
857
876
 
858
877
  template <class Database_Ptr>
859
- inline void dropDatabase(Database_Ptr db)
878
+ inline void connectOpen(Database_Ptr db, const connectParams& connPrams,
879
+ bool newConnection)
880
+ {
881
+ if (newConnection)
882
+ connect(db, connPrams, newConnection);
883
+ openDatabase(db, connPrams);
884
+ }
885
+
886
+ template <class Database_Ptr> inline void dropDatabase(Database_Ptr db)
860
887
  {
861
888
  db->drop();
862
889
  if (db->stat())
863
- nstable::throwError(std::_tstring(_T("Drop database ")).c_str(), db->stat());
864
-
890
+ nstable::throwError(std::_tstring(_T("Drop database ")).c_str(),
891
+ db->stat());
865
892
  }
866
893
 
867
894
  template <class Database_Ptr>
@@ -869,13 +896,22 @@ inline table_ptr openTable(Database_Ptr db, const _TCHAR* name)
869
896
  {
870
897
  table_ptr p(db->openTable(name), releaseTable);
871
898
  if (db->stat())
872
- nstable::throwError((std::_tstring(_T("Open table ")) + name).c_str(), db->stat());
899
+ nstable::throwError((std::_tstring(_T("Open table ")) + name).c_str(),
900
+ db->stat());
873
901
  return p;
902
+ }
874
903
 
904
+ template <class Database_Ptr>
905
+ inline void dropTable(Database_Ptr db, const _TCHAR* name)
906
+ {
907
+ db->dropTable(name);
908
+ if (db->stat())
909
+ nstable::throwError((std::_tstring(_T("Drop table ")) + name).c_str(),
910
+ db->stat());
875
911
  }
876
912
 
877
913
  template <class Database_Ptr>
878
- inline void convertTable(Database_Ptr db, short tableid, copyDataFn func=NULL)
914
+ inline void convertTable(Database_Ptr db, short tableid, copyDataFn func = NULL)
879
915
  {
880
916
 
881
917
  if (db->existsTableFile(tableid, NULL))
@@ -887,38 +923,45 @@ inline void convertTable(Database_Ptr db, short tableid, copyDataFn func=NULL)
887
923
  {
888
924
  assert(db->dbDef());
889
925
  db->dbDef()->popBackup(tableid);
890
- nstable::throwError(std::_tstring(_T("Convert table ")).c_str(), db->stat());
926
+ nstable::throwError(std::_tstring(_T("Convert table ")).c_str(),
927
+ db->stat());
891
928
  }
892
929
  }
893
930
  }
894
931
 
895
932
  template <class Database_Ptr>
896
- inline void convertTable(Database_Ptr db, const _TCHAR* name, copyDataFn func=NULL)
933
+ inline void convertTable(Database_Ptr db, const _TCHAR* name,
934
+ copyDataFn func = NULL)
897
935
  {
898
936
  assert(db->dbDef());
899
937
  short tablenum = db->dbDef()->tableNumByName(name);
900
938
  convertTable(db, tablenum, func);
901
939
  }
902
940
 
903
- inline void insertTable(dbdef* def, short id, const _TCHAR* name, unsigned short charsetIndex)
941
+ inline void insertTable(dbdef* def, short id, const _TCHAR* name,
942
+ unsigned short charsetIndex)
904
943
  {
905
944
  tabledef td;
906
945
  td.setTableName(name);
907
946
  td.setFileName(name);
908
- td.id =id;
947
+ td.id = id;
909
948
  td.charsetIndex = (uchar_td)charsetIndex;
910
949
  def->insertTable(&td);
911
950
  if (def->stat() != 0)
912
- nstable::throwError((std::_tstring(_T("Insert tabledef ")) + name).c_str(), def->stat());
951
+ nstable::throwError(
952
+ (std::_tstring(_T("Insert tabledef ")) + name).c_str(),
953
+ def->stat());
913
954
  }
914
955
 
915
- inline fielddef* insertField(dbdef* def, short tableid, short fieldNum
916
- , const _TCHAR* name, uchar_td type, ushort_td len )
956
+ inline fielddef* insertField(dbdef* def, short tableid, short fieldNum,
957
+ const _TCHAR* name, uchar_td type, ushort_td len)
917
958
  {
918
959
 
919
- fielddef* fd = def->insertField(tableid, fieldNum);
960
+ fielddef* fd = def->insertField(tableid, fieldNum);
920
961
  if (def->stat() != 0)
921
- nstable::throwError((std::_tstring(_T("Insert fielddef ")) + name).c_str(), def->stat());
962
+ nstable::throwError(
963
+ (std::_tstring(_T("Insert fielddef ")) + name).c_str(),
964
+ def->stat());
922
965
 
923
966
  fd->setName(name);
924
967
  fd->type = type;
@@ -928,9 +971,10 @@ inline fielddef* insertField(dbdef* def, short tableid, short fieldNum
928
971
 
929
972
  inline keydef* insertKey(dbdef* def, short tableid, short insertIndex)
930
973
  {
931
- keydef* kd = def->insertKey(tableid, insertIndex);
974
+ keydef* kd = def->insertKey(tableid, insertIndex);
932
975
  if (def->stat() != 0)
933
- nstable::throwError(std::_tstring(_T("Insert keydef ")).c_str(), def->stat());
976
+ nstable::throwError(std::_tstring(_T("Insert keydef ")).c_str(),
977
+ def->stat());
934
978
  return kd;
935
979
  }
936
980
 
@@ -942,176 +986,240 @@ inline void updateTableDef(dbdef* def, short tableid)
942
986
  std::_tstring s;
943
987
  if (def->tableDefs(tableid))
944
988
  s = def->tableDefs(tableid)->tableName();
945
- nstable::throwError((std::_tstring(_T("Update tabledef ")) + s).c_str(), def->stat());
989
+ nstable::throwError((std::_tstring(_T("Update tabledef ")) + s).c_str(),
990
+ def->stat());
946
991
  }
947
992
  }
948
993
 
949
- template <class T>
950
- inline void insertRecord(const T& it, bool ncc = true)
994
+ /** @cond INTERNAL */
995
+
996
+ template <class T> inline table* getTable(T& it)
951
997
  {
952
- it.tb().insert(ncc);
953
- if (it.tb().stat() != 0)
954
- nstable::throwError(std::_tstring(_T("Insert record")).c_str(), &(it.tb()));
998
+ return &(it.tb());
999
+ }
955
1000
 
1001
+ template <> inline table* getTable(table_ptr& tb)
1002
+ {
1003
+ return tb.get();
956
1004
  }
957
1005
 
958
- template <class T>
959
- inline void updateRecord(const T& it, bool ncc = true)
1006
+ template <> inline table* getTable(table*& tb)
960
1007
  {
961
- it.tb().update((nstable::eUpdateType)ncc);
962
- if (it.tb().stat() != 0)
963
- nstable::throwError(std::_tstring(_T("Update record")).c_str(), &(it.tb()));
1008
+ return tb;
1009
+ }
964
1010
 
1011
+ /** @endcond */
1012
+
1013
+ template <class T> inline void insertRecord(T& some, bool ncc = true)
1014
+ {
1015
+ table* tb = getTable(some);
1016
+ tb->insert(ncc);
1017
+ if (tb->stat() != 0)
1018
+ nstable::throwError(std::_tstring(_T("Insert record")).c_str(), tb);
965
1019
  }
966
1020
 
967
- inline void updateRecord(fields& fd, char_td keynum)
1021
+ inline void updateRecord(fields& fd, const char_td keynum)
968
1022
  {
969
1023
  fd.tb().setKeyNum(keynum);
970
- fd.tb().update(nstable::changeInKey);
1024
+ fd.tb().update(nstable::changeInKey);
971
1025
  if (fd.tb().stat() != 0)
972
- nstable::throwError(std::_tstring(_T("Update record")).c_str(), &(fd.tb()));
1026
+ nstable::throwError(std::_tstring(_T("Update record")).c_str(),
1027
+ &(fd.tb()));
973
1028
  }
974
1029
 
975
- inline void deleteRecord(fields& fd, const char_td keynum)
1030
+ template <class T> inline void updateRecord(T& some, bool ncc = true)
976
1031
  {
977
- fd.tb().setKeyNum(keynum);
978
- fd.tb().del(true/*inKey*/);
979
- if (fd.tb().stat() != 0)
980
- nstable::throwError(std::_tstring(_T("Update record")).c_str(), &(fd.tb()));
1032
+ table* tb = getTable(some);
1033
+ tb->update((nstable::eUpdateType)ncc);
1034
+ if (tb->stat() != 0)
1035
+ nstable::throwError(std::_tstring(_T("Update record")).c_str(), tb);
1036
+ }
1037
+
1038
+ template <class T> inline void deleteRecord(T& some)
1039
+ {
1040
+ table* tb = getTable(some);
1041
+ tb->del(false /*inKey*/);
1042
+ if (tb->stat() != 0)
1043
+ nstable::throwError(std::_tstring(_T("Delete record")).c_str(), tb);
1044
+ }
1045
+
1046
+ template <class T> inline void deleteRecord(T& some, const char_td keynum)
1047
+ {
1048
+ table* tb = getTable(some);
1049
+
1050
+ tb->setKeyNum(keynum);
1051
+ tb->del(true /*inKey*/);
1052
+ if (tb->stat() != 0)
1053
+ nstable::throwError(std::_tstring(_T("Delete record")).c_str(), tb);
981
1054
  }
982
1055
 
983
- template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
984
- void deleteRecord(table_ptr tb, const char_td keynum
985
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
1056
+ template <class T0, class T1, class T2, class T3, class T4, class T5, class T6,
1057
+ class T7>
1058
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1059
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1060
+ const T5 kv5, const T6 kv6, const T7 kv7)
986
1061
  {
987
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
988
- fields fd(tb);
989
- deleteRecord(fd, keynum);
1062
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6, T7>::set(
1063
+ tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6, kv7);
1064
+ fields fd(tb);
1065
+ deleteRecord(fd, keynum);
990
1066
  }
1067
+ /** @cond INTERNAL */
991
1068
 
992
1069
  template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
993
- void deleteRecord(table_ptr tb, const char_td keynum
994
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5, const T6 kv6)
1070
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1071
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1072
+ const T5 kv5, const T6 kv6)
995
1073
  {
996
- keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5, kv6);
997
- fields fd(tb);
998
- deleteRecord(fd, keynum);
1074
+ keyValueSetter<T0, T1, T2, T3, T4, T5, T6>::set(tb, keynum, kv0, kv1, kv2,
1075
+ kv3, kv4, kv5, kv6);
1076
+ fields fd(tb);
1077
+ deleteRecord(fd, keynum);
999
1078
  }
1000
1079
 
1001
1080
  template <class T0, class T1, class T2, class T3, class T4, class T5>
1002
- void deleteRecord(table_ptr tb, const char_td keynum
1003
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4, const T5 kv5)
1081
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1082
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4,
1083
+ const T5 kv5)
1004
1084
  {
1005
- keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4, kv5);
1006
- fields fd(tb);
1007
- deleteRecord(fd, keynum);
1085
+ keyValueSetter<T0, T1, T2, T3, T4, T5>::set(tb, keynum, kv0, kv1, kv2, kv3,
1086
+ kv4, kv5);
1087
+ fields fd(tb);
1088
+ deleteRecord(fd, keynum);
1008
1089
  }
1009
1090
 
1010
1091
  template <class T0, class T1, class T2, class T3, class T4>
1011
- void deleteRecord(table_ptr tb, const char_td keynum
1012
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3,const T4 kv4)
1092
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1093
+ const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4)
1013
1094
  {
1014
- keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3, kv4);
1015
- fields fd(tb);
1016
- deleteRecord(fd, keynum);
1095
+ keyValueSetter<T0, T1, T2, T3, T4>::set(tb, keynum, kv0, kv1, kv2, kv3,
1096
+ kv4);
1097
+ fields fd(tb);
1098
+ deleteRecord(fd, keynum);
1017
1099
  }
1018
1100
 
1019
1101
  template <class T0, class T1, class T2, class T3>
1020
- void deleteRecord(table_ptr tb, const char_td keynum
1021
- ,const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3)
1102
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1103
+ const T1 kv1, const T2 kv2, const T3 kv3)
1022
1104
  {
1023
- keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
1024
- fields fd(tb);
1025
- deleteRecord(fd, keynum);
1105
+ keyValueSetter<T0, T1, T2, T3>::set(tb, keynum, kv0, kv1, kv2, kv3);
1106
+ fields fd(tb);
1107
+ deleteRecord(fd, keynum);
1026
1108
  }
1027
1109
 
1028
1110
  template <class T0, class T1, class T2>
1029
- void deleteRecord(table_ptr tb, const char_td keynum
1030
- ,const T0 kv0, const T1 kv1, const T2 kv2)
1111
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1112
+ const T1 kv1, const T2 kv2)
1031
1113
  {
1032
- keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
1033
- fields fd(tb);
1034
- deleteRecord(fd, keynum);
1114
+ keyValueSetter<T0, T1, T2>::set(tb, keynum, kv0, kv1, kv2);
1115
+ fields fd(tb);
1116
+ deleteRecord(fd, keynum);
1035
1117
  }
1036
1118
 
1037
1119
  template <class T0, class T1>
1038
- void deleteRecord(table_ptr tb, const char_td keynum
1039
- ,const T0 kv0, const T1 kv1)
1120
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0,
1121
+ const T1 kv1)
1040
1122
  {
1041
- keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
1042
- fields fd(tb);
1043
- deleteRecord(fd, keynum);
1123
+ keyValueSetter<T0, T1>::set(tb, keynum, kv0, kv1);
1124
+ fields fd(tb);
1125
+ deleteRecord(fd, keynum);
1044
1126
  }
1045
1127
 
1046
1128
  template <class T0>
1047
- void deleteRecord(table_ptr tb, const char_td keynum
1048
- ,const T0 kv0)
1129
+ inline void deleteRecord(table_ptr tb, const char_td keynum, const T0 kv0)
1049
1130
  {
1050
- keyValueSetter<T0>::set(tb, keynum, kv0);
1051
- fields fd(tb);
1052
- deleteRecord(fd, keynum);
1131
+ keyValueSetter<T0>::set(tb, keynum, kv0);
1132
+ fields fd(tb);
1133
+ deleteRecord(fd, keynum);
1053
1134
  }
1135
+ /** @endcond */
1054
1136
 
1055
- template <class T>
1056
- inline void deleteRecord(const T& it)
1137
+ template <class T, class F> void for_each(T iterator, F func)
1057
1138
  {
1058
- it.tb().del(false/*inKey*/);
1059
- if (it.tb().stat() != 0)
1060
- nstable::throwError(std::_tstring(_T("Delete record")).c_str(), &(it.tb()));
1139
+ std::for_each(iterator, iterator, func);
1061
1140
  }
1062
1141
 
1142
+ /** Shared pointer of idatabaseManager. */
1143
+ typedef boost::shared_ptr<idatabaseManager> dbmanager_ptr;
1144
+
1145
+ template <class T> inline T createDatabaseForConnectionPool(T& p);
1063
1146
 
1064
- template<class T, class F>
1065
- void for_each(T iterator, F func) {std::for_each(iterator, T::eos, func);}
1147
+ /** @cond INTERNAL */
1148
+ template <> inline database_ptr createDatabaseForConnectionPool(database_ptr& p)
1149
+ {
1150
+ return createDatabaseObject();
1151
+ }
1152
+ /** @endcond */
1066
1153
 
1067
- class transaction
1154
+ /* Exception safe trnasction
1155
+ It can use for database and idatabaseManager.
1156
+ */
1157
+ template <class DB> class transaction
1068
1158
  {
1069
- database_ptr m_db;
1159
+ DB m_db;
1070
1160
  short m_bias;
1071
- public:
1072
- transaction(database_ptr db, short bias=LOCK_SINGLE_NOWAIT + PARALLEL_TRN + NOWAIT_WRITE)
1073
- :m_db(db),m_bias(bias){};
1074
- ~transaction(){if (m_db->enableTrn()) m_db->abortTrn();};
1075
- void begin(){m_db->beginTrn(m_bias);}
1076
- void end(){m_db->endTrn();}
1077
- void abort(){m_db->abortTrn();}
1078
1161
 
1162
+ public:
1163
+ inline transaction(DB db, short bias = LOCK_SINGLE_NOWAIT + PARALLEL_TRN +
1164
+ NOWAIT_WRITE)
1165
+ : m_db(db), m_bias(bias){};
1166
+ inline ~transaction()
1167
+ {
1168
+ if (m_db->enableTrn())
1169
+ m_db->abortTrn();
1170
+ };
1171
+ inline void begin() { m_db->beginTrn(m_bias); }
1172
+ inline void end() { m_db->endTrn(); }
1173
+ inline void abort() { m_db->abortTrn(); }
1079
1174
  };
1080
1175
 
1081
- class autoSnapshot
1176
+ /** transaction for database */
1177
+ typedef transaction<database_ptr> dbTransaction;
1178
+
1179
+ /** transaction for idatabaseManager */
1180
+ typedef transaction<dbmanager_ptr> dbmTransaction;
1181
+
1182
+ template <class DB> class snapshot
1082
1183
  {
1083
- database_ptr m_db;
1184
+ DB m_db;
1185
+
1084
1186
  public:
1085
- autoSnapshot(database_ptr db):m_db(db)
1086
- {
1087
- m_db->beginSnapshot();
1088
- }
1187
+ snapshot(DB db) : m_db(db) { m_db->beginSnapshot(); }
1089
1188
 
1090
- ~autoSnapshot()
1091
- {
1092
- m_db->endSnapshot();
1093
- }
1189
+ ~snapshot() { m_db->endSnapshot(); }
1094
1190
  };
1095
1191
 
1192
+ /** snapshot for database */
1193
+ typedef snapshot<database_ptr> dbSnapshot;
1194
+
1195
+ /** snapshot for idatabaseManager */
1196
+ typedef snapshot<idatabaseManager*> dbmSnapshot;
1096
1197
 
1097
1198
  class autoBulkinsert
1098
1199
  {
1099
1200
  table_ptr m_tb;
1201
+
1100
1202
  public:
1101
- autoBulkinsert(table_ptr tb, int bufsize = BULKBUFSIZE):m_tb(tb)
1203
+ autoBulkinsert(table_ptr tb, int bufsize = BULKBUFSIZE) : m_tb(tb)
1102
1204
  {
1103
1205
  m_tb->beginBulkInsert(bufsize);
1104
1206
  }
1105
- ~autoBulkinsert(){m_tb->commitBulkInsert();}
1106
1207
 
1107
- };
1108
-
1109
- }// namespace client
1110
- }// namespace tdap
1111
- }// namespace protocol
1112
- }// namespace db
1113
- }// namespace bzs
1208
+ /* For activeObject */
1209
+ template <class T>
1210
+ autoBulkinsert(T& tba, int bufsize = BULKBUFSIZE)
1211
+ : m_tb(tba.table())
1212
+ {
1213
+ m_tb->beginBulkInsert(bufsize);
1214
+ }
1114
1215
 
1216
+ ~autoBulkinsert() { m_tb->commitBulkInsert(); }
1217
+ };
1115
1218
 
1219
+ } // namespace client
1220
+ } // namespace tdap
1221
+ } // namespace protocol
1222
+ } // namespace db
1223
+ } // namespace bzs
1116
1224
 
1117
- #endif
1225
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_TRDBOOSTAPI_H