transactd 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -0,0 +1,214 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include "stdafx.h"
20
+ #include "Record.h"
21
+ #include "Field.h"
22
+ #include "FieldDefs.h"
23
+
24
+ void CRecord::FinalRelease()
25
+ {
26
+ if (m_fieldObj)
27
+ m_fieldObj->Release();
28
+ }
29
+ short CRecord::GetFieldNum(VARIANT* Index)
30
+ {
31
+ short index = -1;
32
+ if (Index->vt == VT_BSTR)
33
+ index = m_rec->indexByName(Index->bstrVal);
34
+ else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
35
+ index = Index->iVal;
36
+ return index;
37
+ }
38
+
39
+ STDMETHODIMP CRecord::get_Size(short* retVal)
40
+ {
41
+ *retVal = (short)m_rec->size();
42
+ return S_OK;
43
+ }
44
+
45
+ STDMETHODIMP CRecord::get_Field(VARIANT Index, IField** retVal)
46
+ {
47
+ short index = GetFieldNum(&Index);
48
+ if (index < 0)
49
+ return Error("Invalid index", IID_ITable);
50
+
51
+ if (m_fieldObj == NULL)
52
+ {
53
+ CComObject<CField>::CreateInstance(&m_fieldObj);
54
+ m_fieldObj->AddRef();
55
+ }
56
+ if (m_fieldObj)
57
+ {
58
+ m_fieldObj->m_fd = (*m_rec)[index];
59
+ IField* fd;
60
+ m_fieldObj->QueryInterface(IID_IField, (void**)&fd);
61
+ _ASSERTE(fd);
62
+ *retVal = fd;
63
+ }
64
+ return S_OK;
65
+ }
66
+
67
+ STDMETHODIMP CRecord::get_IsInvalidRecord(VARIANT_BOOL* retVal)
68
+ {
69
+ *retVal = m_rec->isInvalidRecord();
70
+ return S_OK;
71
+ }
72
+
73
+ void CWritableRecord::FinalRelease()
74
+ {
75
+ if (m_fieldObj)
76
+ m_fieldObj->Release();
77
+ if (m_fieldDefsObj)
78
+ m_fieldDefsObj->Release();
79
+ }
80
+
81
+ short CWritableRecord::GetFieldNum(VARIANT* Index)
82
+ {
83
+ short index = -1;
84
+ if (Index->vt == VT_BSTR)
85
+ index = m_rec->indexByName(Index->bstrVal);
86
+ else if ((Index->vt == VT_I2) || (Index->vt == VT_I4))
87
+ index = Index->iVal;
88
+ return index;
89
+ }
90
+
91
+ STDMETHODIMP CWritableRecord::Clear()
92
+ {
93
+ m_rec->clear();
94
+ return S_OK;
95
+ }
96
+
97
+ STDMETHODIMP CWritableRecord::get_Size(short* retVal)
98
+ {
99
+ *retVal = (short)m_rec->size();
100
+ return S_OK;
101
+ }
102
+
103
+ STDMETHODIMP CWritableRecord::get_Field(VARIANT Index, IField** retVal)
104
+ {
105
+ short index = GetFieldNum(&Index);
106
+ if (index < 0)
107
+ return Error("Invalid index", IID_IWritableRecord);
108
+
109
+ if (m_fieldObj == NULL)
110
+ {
111
+ CComObject<CField>::CreateInstance(&m_fieldObj);
112
+ m_fieldObj->AddRef();
113
+ }
114
+ if (m_fieldObj)
115
+ {
116
+ m_fieldObj->m_fd = (*m_rec)[index];
117
+ IField* fd;
118
+ m_fieldObj->QueryInterface(IID_IField, (void**)&fd);
119
+ _ASSERTE(fd);
120
+ *retVal = fd;
121
+ }
122
+ return S_OK;
123
+ }
124
+
125
+ STDMETHODIMP CWritableRecord::Save()
126
+ {
127
+ try
128
+ {
129
+ m_rec->save();
130
+ return S_OK;
131
+ }
132
+ catch (bzs::rtl::exception& e)
133
+ {
134
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
135
+ }
136
+ }
137
+
138
+ STDMETHODIMP CWritableRecord::Insert()
139
+ {
140
+ try
141
+ {
142
+ m_rec->insert();
143
+ return S_OK;
144
+ }
145
+ catch (bzs::rtl::exception& e)
146
+ {
147
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
148
+ }
149
+ }
150
+
151
+ STDMETHODIMP CWritableRecord::Del(VARIANT_BOOL KeysetAlrady)
152
+ {
153
+ try
154
+ {
155
+ m_rec->del(KeysetAlrady);
156
+ return S_OK;
157
+ }
158
+ catch (bzs::rtl::exception& e)
159
+ {
160
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
161
+ }
162
+ }
163
+
164
+ STDMETHODIMP CWritableRecord::Update()
165
+ {
166
+ try
167
+ {
168
+ m_rec->update();
169
+ return S_OK;
170
+ }
171
+ catch (bzs::rtl::exception& e)
172
+ {
173
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
174
+ }
175
+ }
176
+
177
+ STDMETHODIMP CWritableRecord::Read(VARIANT_BOOL KeysetAlrady,
178
+ VARIANT_BOOL* retVal)
179
+ {
180
+ try
181
+ {
182
+ *retVal = m_rec->read(KeysetAlrady);
183
+ return S_OK;
184
+ }
185
+ catch (bzs::rtl::exception& e)
186
+ {
187
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IWritableRecord);
188
+ }
189
+ }
190
+
191
+ STDMETHODIMP CWritableRecord::get_FieldDefs(IFieldDefs** retVal)
192
+ {
193
+ if (m_fieldDefsObj == NULL)
194
+ {
195
+ CComObject<CFieldDefs>::CreateInstance(&m_fieldDefsObj);
196
+ m_fieldDefsObj->AddRef();
197
+ }
198
+ if (m_fieldDefsObj)
199
+ {
200
+ m_fieldDefsObj->m_fds = m_rec->fieldDefs();
201
+
202
+ IFieldDefs* fds;
203
+ m_fieldDefsObj->QueryInterface(IID_IFieldDefs, (void**)&fds);
204
+ _ASSERTE(fds);
205
+ *retVal = fds;
206
+ }
207
+ return S_OK;
208
+ }
209
+
210
+ STDMETHODIMP CWritableRecord::get_IsInvalidRecord(VARIANT_BOOL* retVal)
211
+ {
212
+ *retVal = m_rec->isInvalidRecord();
213
+ return S_OK;
214
+ }
@@ -0,0 +1,96 @@
1
+ #pragma once
2
+ /*=================================================================
3
+ Copyright (C) 2014 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18
+ 02111-1307, USA.
19
+ =================================================================*/
20
+ #include "resource.h"
21
+
22
+ #include "tdclatl_i.h"
23
+ #include <bzs/db/protocol/tdap/client/memRecord.h>
24
+
25
+ using namespace ATL;
26
+ class CField;
27
+ class CFieldDefs;
28
+ class ATL_NO_VTABLE CRecord
29
+ : public CComObjectRootEx<CComSingleThreadModel>,
30
+ public CComCoClass<CRecord, &CLSID_Record>,
31
+ public IDispatchImpl<IRecord, &IID_IRecord, &LIBID_transactd,
32
+ /* wMajor = */ 1, /* wMinor = */ 0>
33
+ {
34
+
35
+ CComObject<CField>* m_fieldObj;
36
+ short GetFieldNum(VARIANT* Index);
37
+
38
+ public:
39
+ bzs::db::protocol::tdap::client::fieldsBase* m_rec;
40
+ CRecord() : m_fieldObj(NULL) {}
41
+
42
+ BEGIN_COM_MAP(CRecord)
43
+ COM_INTERFACE_ENTRY(IRecord)
44
+ COM_INTERFACE_ENTRY(IDispatch)
45
+ END_COM_MAP()
46
+
47
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
48
+
49
+ HRESULT FinalConstruct() { return S_OK; }
50
+
51
+ void FinalRelease();
52
+
53
+ public:
54
+ STDMETHOD(get_Size)(short* retVal);
55
+ STDMETHOD(get_Field)(VARIANT Index, IField** retVal);
56
+ STDMETHOD(get_IsInvalidRecord)(VARIANT_BOOL* retVal);
57
+ };
58
+
59
+ class ATL_NO_VTABLE CWritableRecord
60
+ : public CComObjectRootEx<CComSingleThreadModel>,
61
+ public CComCoClass<CWritableRecord, &CLSID_Record>,
62
+ public IDispatchImpl<IWritableRecord, &IID_IWritableRecord,
63
+ &LIBID_transactd, /* wMajor = */ 1, /* wMinor = */ 0>
64
+ {
65
+
66
+ CComObject<CField>* m_fieldObj;
67
+ short GetFieldNum(VARIANT* Index);
68
+ CComObject<CFieldDefs>* m_fieldDefsObj;
69
+
70
+ public:
71
+ bzs::db::protocol::tdap::client::writableRecord* m_rec;
72
+ CWritableRecord() : m_fieldObj(NULL), m_fieldDefsObj(NULL) {}
73
+
74
+ BEGIN_COM_MAP(CWritableRecord)
75
+ COM_INTERFACE_ENTRY(IWritableRecord)
76
+ COM_INTERFACE_ENTRY(IDispatch)
77
+ END_COM_MAP()
78
+
79
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
80
+
81
+ HRESULT FinalConstruct() { return S_OK; }
82
+
83
+ void FinalRelease();
84
+
85
+ public:
86
+ STDMETHOD(Clear)();
87
+ STDMETHOD(get_Size)(short* retVal);
88
+ STDMETHOD(get_Field)(VARIANT Index, IField** retVal);
89
+ STDMETHOD(Save)();
90
+ STDMETHOD(Insert)();
91
+ STDMETHOD(Del)(VARIANT_BOOL KeysetAlrady);
92
+ STDMETHOD(Update)();
93
+ STDMETHOD(Read)(VARIANT_BOOL KeysetAlrady, VARIANT_BOOL* retVal);
94
+ STDMETHOD(get_FieldDefs)(IFieldDefs** retVal);
95
+ STDMETHOD(get_IsInvalidRecord)(VARIANT_BOOL* retVal);
96
+ };
@@ -0,0 +1,278 @@
1
+ /*=================================================================
2
+ Copyright (C) 2014 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ #include "stdafx.h"
20
+ #include "Recordset.h"
21
+ #include "Record.h"
22
+ #include "Field.h"
23
+ #include "GroupQuery.h"
24
+ #include "FieldDefs.h"
25
+ #include "RecordsetQuery.h"
26
+
27
+ using namespace bzs::db::protocol::tdap::client;
28
+
29
+ CARecordset::CARecordset()
30
+ : m_rs(new recordset()), m_recObj(NULL), m_fieldDefsObj(NULL)
31
+ {
32
+ }
33
+
34
+ CARecordset::~CARecordset()
35
+ {
36
+
37
+ if (m_recObj)
38
+ m_recObj->Release();
39
+ if (m_fieldDefsObj)
40
+ m_fieldDefsObj->Release();
41
+ }
42
+
43
+ void CARecordset::setResult(IRecordset** retVal)
44
+ {
45
+ this->QueryInterface(IID_IRecordset, (void**)retVal);
46
+ }
47
+
48
+ STDMETHODIMP CARecordset::Record(unsigned long Index, IRecord** retVal)
49
+ {
50
+ if (Index >= 0 && Index < m_rs->size())
51
+ {
52
+ if (m_recObj == NULL)
53
+ {
54
+ CComObject<CRecord>::CreateInstance(&m_recObj);
55
+ m_recObj->AddRef();
56
+ }
57
+ if (m_recObj)
58
+ {
59
+ m_recObj->m_rec = &((*m_rs)[Index]);
60
+ IRecord* rec;
61
+ m_recObj->QueryInterface(IID_IRecord, (void**)&rec);
62
+ _ASSERTE(rec);
63
+ *retVal = rec;
64
+ }
65
+ return S_OK;
66
+ }
67
+ return Error("Invalid index", IID_IRecordset);
68
+ }
69
+
70
+ STDMETHODIMP CARecordset::First(IRecord** retVal)
71
+ {
72
+ return Record(0, retVal);
73
+ }
74
+
75
+ STDMETHODIMP CARecordset::Last(IRecord** retVal)
76
+ {
77
+ return Record((short)m_rs->size() - 1, retVal);
78
+ }
79
+
80
+ STDMETHODIMP CARecordset::Top(unsigned long Num, IRecordset** retVal)
81
+ {
82
+ if (Num > 0 && Num < m_rs->size())
83
+ {
84
+ CComObject<CARecordset>* rsObj;
85
+ CComObject<CARecordset>::CreateInstance(&rsObj);
86
+ if (rsObj)
87
+ {
88
+ m_rs->top(*rsObj->m_rs, Num);
89
+ IRecordset* rs;
90
+ rsObj->QueryInterface(IID_IRecordset, (void**)&rs);
91
+ _ASSERTE(rs);
92
+ *retVal = rs;
93
+ }
94
+ return S_OK;
95
+ }
96
+ return Error("Invalid top number", IID_IRecordset);
97
+ }
98
+
99
+ STDMETHODIMP CARecordset::Clone(IRecordset** retVal)
100
+ {
101
+ CComObject<CARecordset>* rsObj;
102
+ CComObject<CARecordset>::CreateInstance(&rsObj);
103
+ if (rsObj)
104
+ {
105
+ rsObj->m_rs.reset(m_rs->clone());
106
+ IRecordset* rs;
107
+ rsObj->QueryInterface(IID_IRecordset, (void**)&rs);
108
+ _ASSERTE(rs);
109
+ *retVal = rs;
110
+ }
111
+ return S_OK;
112
+ }
113
+
114
+ STDMETHODIMP CARecordset::Erase(unsigned long Index)
115
+ {
116
+ if (Index >= 0 && Index < m_rs->size())
117
+ {
118
+ m_rs->erase(Index);
119
+ return S_OK;
120
+ }
121
+ return Error("Invalid index", IID_IRecordset);
122
+ }
123
+
124
+ STDMETHODIMP CARecordset::get_Count(unsigned long* retVal)
125
+ {
126
+ *retVal = (long)m_rs->count();
127
+ return S_OK;
128
+ }
129
+
130
+ STDMETHODIMP CARecordset::get_Size(unsigned long* retVal)
131
+ {
132
+ *retVal = (long)m_rs->count();
133
+ return S_OK;
134
+ }
135
+
136
+ STDMETHODIMP CARecordset::RemoveField(short Index)
137
+ {
138
+ if (Index >= 0 && Index < (int)m_rs->fieldDefs()->size())
139
+ {
140
+ try
141
+ {
142
+ m_rs->removeField(Index);
143
+ return S_OK;
144
+ }
145
+ catch (bzs::rtl::exception& e)
146
+ {
147
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
148
+ }
149
+ }
150
+ return Error("Invalid field index", IID_IRecordset);
151
+ }
152
+
153
+ STDMETHODIMP CARecordset::AppendField(BSTR name, eFieldType type, short len)
154
+ {
155
+ try
156
+ {
157
+ m_rs->appendField(name, (uchar_td)type, len);
158
+ return S_OK;
159
+ }
160
+ catch (bzs::rtl::exception& e)
161
+ {
162
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
163
+ }
164
+ }
165
+
166
+ STDMETHODIMP CARecordset::MatchBy(IRecordsetQuery* irq, IRecordset** retVal)
167
+ {
168
+ try
169
+ {
170
+ if (irq)
171
+ {
172
+ CRecordsetQuery* rq = dynamic_cast<CRecordsetQuery*>(irq);
173
+ m_rs->matchBy(rq->m_qb);
174
+ }
175
+ setResult(retVal);
176
+ return S_OK;
177
+ }
178
+ catch (bzs::rtl::exception& e)
179
+ {
180
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
181
+ }
182
+ }
183
+
184
+ STDMETHODIMP CARecordset::GroupBy(IGroupQuery* igq, IRecordset** retVal)
185
+ {
186
+ try
187
+ {
188
+ if (igq)
189
+ {
190
+ CGroupQuery* gq = dynamic_cast<CGroupQuery*>(igq);
191
+ m_rs->groupBy(gq->m_gq);
192
+ }
193
+ setResult(retVal);
194
+ return S_OK;
195
+ }
196
+ catch (bzs::rtl::exception& e)
197
+ {
198
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
199
+ }
200
+ }
201
+
202
+ STDMETHODIMP CARecordset::OrderBy(BSTR Name0, BSTR Name1, BSTR Name2,
203
+ BSTR Name3, BSTR Name4, BSTR Name5,
204
+ BSTR Name6, BSTR Name7, BSTR Name8,
205
+ IRecordset** retVal)
206
+ {
207
+ try
208
+ {
209
+ if (!Name1 || !Name1[0])
210
+ m_rs->orderBy(Name0);
211
+ else if (!Name2 || !Name2[0])
212
+ m_rs->orderBy(Name0, Name1);
213
+ else if (!Name3 || !Name3[0])
214
+ m_rs->orderBy(Name0, Name1, Name2);
215
+ else if (!Name4 || !Name4[0])
216
+ m_rs->orderBy(Name0, Name1, Name2, Name3);
217
+ else if (!Name5 || !Name5[0])
218
+ m_rs->orderBy(Name0, Name1, Name2, Name3, Name4);
219
+ else if (!Name6 || !Name6[0])
220
+ m_rs->orderBy(Name0, Name1, Name2, Name3, Name4, Name5);
221
+ else if (!Name7 || !Name7[0])
222
+ m_rs->orderBy(Name0, Name1, Name2, Name3, Name4, Name5, Name6);
223
+ else
224
+ m_rs->orderBy(Name0, Name1, Name2, Name3, Name4, Name5, Name6,
225
+ Name7);
226
+ setResult(retVal);
227
+ return S_OK;
228
+ }
229
+ catch (bzs::rtl::exception& e)
230
+ {
231
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
232
+ }
233
+ }
234
+
235
+ STDMETHODIMP CARecordset::OrderByEx(ISortFields* sortFields,
236
+ IRecordset** retVal)
237
+ {
238
+ try
239
+ {
240
+ if (sortFields)
241
+ {
242
+ CSortFields* gq = dynamic_cast<CSortFields*>(sortFields);
243
+ m_rs->orderBy(gq->m_sortFields);
244
+ }
245
+ setResult(retVal);
246
+ return S_OK;
247
+ }
248
+ catch (bzs::rtl::exception& e)
249
+ {
250
+ return Error((*bzs::rtl::getMsg(e)).c_str(), IID_IRecordset);
251
+ }
252
+ }
253
+
254
+ STDMETHODIMP CARecordset::Reverse(IRecordset** retVal)
255
+ {
256
+ m_rs->reverse();
257
+ setResult(retVal);
258
+ return S_OK;
259
+ }
260
+
261
+ STDMETHODIMP CARecordset::get_FieldDefs(IFieldDefs** retVal)
262
+ {
263
+ if (m_fieldDefsObj == NULL)
264
+ {
265
+ CComObject<CFieldDefs>::CreateInstance(&m_fieldDefsObj);
266
+ m_fieldDefsObj->AddRef();
267
+ }
268
+ if (m_fieldDefsObj)
269
+ {
270
+ m_fieldDefsObj->m_fds = m_rs->fieldDefs();
271
+
272
+ IFieldDefs* fds;
273
+ m_fieldDefsObj->QueryInterface(IID_IFieldDefs, (void**)&fds);
274
+ _ASSERTE(fds);
275
+ *retVal = fds;
276
+ }
277
+ return S_OK;
278
+ }
@@ -0,0 +1,83 @@
1
+ #pragma once
2
+ /*=================================================================
3
+ Copyright (C) 2014 BizStation Corp All rights reserved.
4
+
5
+ This program is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 2
8
+ of the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18
+ 02111-1307, USA.
19
+ =================================================================*/
20
+ #include "resource.h"
21
+
22
+ #include "tdclatl_i.h"
23
+ #include <bzs/db/protocol/tdap/client/recordset.h>
24
+ using namespace ATL;
25
+
26
+ class CRecord;
27
+ class CFieldDefs;
28
+
29
+ class ATL_NO_VTABLE CARecordset
30
+ : public CComObjectRootEx<CComSingleThreadModel>,
31
+ public CComCoClass<CARecordset, &CLSID_Recordset>,
32
+ public IDispatchImpl<IRecordset, &IID_IRecordset, &LIBID_transactd,
33
+ /* wMajor = */ 1, /* wMinor = */ 0>
34
+ {
35
+ void setResult(IRecordset** retVal);
36
+ CComObject<CRecord>* m_recObj;
37
+ CComObject<CFieldDefs>* m_fieldDefsObj;
38
+ typedef boost::shared_ptr<bzs::db::protocol::tdap::client::recordset>
39
+ internal_ptr;
40
+
41
+ public:
42
+ internal_ptr m_rs;
43
+
44
+ CARecordset();
45
+ ~CARecordset();
46
+ void setRecordset(bzs::db::protocol::tdap::client::recordset* rs)
47
+ {
48
+ m_rs.reset(rs);
49
+ }
50
+
51
+ BEGIN_COM_MAP(CARecordset)
52
+ COM_INTERFACE_ENTRY(IRecordset)
53
+ COM_INTERFACE_ENTRY(IDispatch)
54
+ END_COM_MAP()
55
+
56
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
57
+
58
+ HRESULT FinalConstruct() { return S_OK; }
59
+
60
+ void FinalRelease(){};
61
+
62
+ public:
63
+ STDMETHOD(Record)(unsigned long Index, IRecord** retVal);
64
+ STDMETHOD(First)(IRecord** retVal);
65
+ STDMETHOD(Last)(IRecord** retVal);
66
+ STDMETHOD(Top)(unsigned long Num, IRecordset** retVal);
67
+ STDMETHOD(Erase)(unsigned long Index);
68
+ STDMETHOD(get_Count)(unsigned long* retVal);
69
+ STDMETHOD(get_Size)(unsigned long* retVal);
70
+ STDMETHOD(RemoveField)(short Index);
71
+ STDMETHOD(AppendField)(BSTR name, eFieldType type, short len);
72
+ STDMETHOD(GroupBy)(IGroupQuery* gq, IRecordset** retVal);
73
+ STDMETHOD(MatchBy)(IRecordsetQuery* rq, IRecordset** retVal);
74
+
75
+ STDMETHOD(OrderBy)(BSTR name0, BSTR name1, BSTR name2, BSTR name3,
76
+ BSTR name4, BSTR name5, BSTR name6, BSTR name7,
77
+ BSTR name8, IRecordset** retVal);
78
+
79
+ STDMETHOD(OrderByEx)(ISortFields* sortFields, IRecordset** retVal);
80
+ STDMETHOD(Reverse)(IRecordset** retVal);
81
+ STDMETHOD(get_FieldDefs)(IFieldDefs** retVal);
82
+ STDMETHOD(Clone)(IRecordset** retVal);
83
+ };