transactd 1.2.0 → 2.0.0

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