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,281 @@
1
+ #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
2
+ #define BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
3
+ /*=================================================================
4
+ Copyright (C) 2014 BizStation Corp All rights reserved.
5
+
6
+ This program is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU General Public License
8
+ as published by the Free Software Foundation; either version 2
9
+ of the License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
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
19
+ 02111-1307, USA.
20
+ =================================================================*/
21
+ #include <bzs/db/protocol/tdap/client/trdboostapi.h>
22
+
23
+ namespace bzs
24
+ {
25
+ namespace db
26
+ {
27
+ namespace protocol
28
+ {
29
+ namespace tdap
30
+ {
31
+ namespace client
32
+ {
33
+
34
+ class DLLLIB fieldNames
35
+ {
36
+
37
+ protected:
38
+ /** @cond INTERNAL */
39
+ struct fieldNamesImple* m_impl;
40
+ /** @endcond */
41
+
42
+ public:
43
+ fieldNames();
44
+ fieldNames(const fieldNames& r);
45
+ fieldNames& operator=(const fieldNames& r);
46
+
47
+ virtual ~fieldNames();
48
+ virtual fieldNames& reset();
49
+ fieldNames& keyField(const _TCHAR* name, const _TCHAR* name1 = NULL,
50
+ const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
51
+ const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
52
+ const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
53
+ const _TCHAR* name8 = NULL, const _TCHAR* name9 = NULL,
54
+ const _TCHAR* name10 = NULL);
55
+
56
+ int count() const;
57
+ const _TCHAR* operator[](int index) const;
58
+ const _TCHAR* getValue(int index) const;
59
+ void addValue(const _TCHAR* v);
60
+ void addValues(const _TCHAR* values,
61
+ const _TCHAR* delmi); // delmi = boost::is_any_of
62
+ static fieldNames* create();
63
+ void release();
64
+ };
65
+
66
+ struct sortField
67
+ {
68
+ std::_tstring name;
69
+ bool asc;
70
+ };
71
+
72
+ class sortFields
73
+ {
74
+ std::vector<sortField> m_params;
75
+ /** @cond INTERNAL */
76
+ template <class Archive>
77
+ friend void serialize(Archive& ar, sortFields& q, const unsigned int);
78
+ /** @endcond */
79
+
80
+ public:
81
+ inline sortFields& add(const _TCHAR* name, bool asc)
82
+ {
83
+ sortField op = { name, asc };
84
+ m_params.push_back(op);
85
+ return *this;
86
+ }
87
+ inline size_t size() const { return m_params.size(); }
88
+ inline const sortField& operator[](int index) const
89
+ {
90
+ return m_params[index];
91
+ }
92
+ inline void clear() { m_params.clear(); }
93
+ };
94
+
95
+ class DLLLIB recordsetQuery : protected query
96
+ {
97
+ friend class groupFuncBase;
98
+ friend class recordsetImple;
99
+
100
+ struct recordsetQueryImple* m_imple;
101
+ void init(const fielddefs* fdinfo);
102
+ bool isMatch(int ret, unsigned char compType) const;
103
+ bool match(const row_ptr row) const;
104
+
105
+ public:
106
+ recordsetQuery();
107
+ recordsetQuery(const recordsetQuery& r);
108
+ ~recordsetQuery();
109
+
110
+ recordsetQuery& operator=(const recordsetQuery& r);
111
+
112
+ template <class T>
113
+ inline recordsetQuery& when(const _TCHAR* name, const _TCHAR* qlogic,
114
+ T value)
115
+ {
116
+ query::where(name, qlogic, value);
117
+ return *this;
118
+ }
119
+
120
+ template <class T>
121
+ inline recordsetQuery& and_(const _TCHAR* name, const _TCHAR* qlogic,
122
+ T value)
123
+ {
124
+ query::and_(name, qlogic, value);
125
+ return *this;
126
+ }
127
+
128
+ template <class T>
129
+ inline recordsetQuery& or_(const _TCHAR* name, const _TCHAR* qlogic,
130
+ T value)
131
+ {
132
+ query::or_(name, qlogic, value);
133
+ return *this;
134
+ }
135
+
136
+ inline recordsetQuery& reset()
137
+ {
138
+ query::reset();
139
+ return *this;
140
+ }
141
+
142
+ inline const _TCHAR* toString() const { return queryBase::toString(); }
143
+
144
+ inline query* internalQuery() { return this; }
145
+ static recordsetQuery* create();
146
+ void release();
147
+ };
148
+
149
+ class DLLLIB groupFuncBase : public recordsetQuery
150
+ {
151
+ protected:
152
+ friend class groupQueryImple;
153
+
154
+ class groupFuncBaseImple* m_imple;
155
+ virtual void initResultVariable(int index);
156
+ virtual void doCalc(const row_ptr& row, int groupIndex);
157
+ void init(const fielddefs* fdinfo);
158
+
159
+ public:
160
+ typedef double value_type;
161
+ groupFuncBase();
162
+ groupFuncBase(const groupFuncBase& v);
163
+ groupFuncBase& operator=(const groupFuncBase& v);
164
+ groupFuncBase(const fieldNames& targetNames,
165
+ const _TCHAR* resultName = NULL);
166
+ virtual ~groupFuncBase();
167
+ groupFuncBase& operator=(const recordsetQuery& v);
168
+ fieldNames& targetNames() const;
169
+ const _TCHAR* resultName() const;
170
+ void setResultName(const _TCHAR* v);
171
+ int resultKey() const;
172
+ void reset();
173
+ void operator()(const row_ptr& row, int index, bool insert);
174
+ virtual value_type result(int groupIndex) const;
175
+ virtual groupFuncBase* clone() = 0;
176
+ };
177
+
178
+ class recordsetImple;
179
+
180
+ class DLLLIB groupQuery
181
+ {
182
+ friend class recordsetImple;
183
+ class groupQueryImple* m_imple;
184
+ void grouping(recordsetImple& rs);
185
+
186
+ public:
187
+ groupQuery();
188
+ groupQuery(const groupQuery& r);
189
+ groupQuery& operator=(const groupQuery& r);
190
+
191
+ ~groupQuery();
192
+ groupQuery& reset();
193
+ groupQuery& addFunction(groupFuncBase* func);
194
+ groupQuery& keyField(const _TCHAR* name, const _TCHAR* name1 = NULL,
195
+ const _TCHAR* name2 = NULL, const _TCHAR* name3 = NULL,
196
+ const _TCHAR* name4 = NULL, const _TCHAR* name5 = NULL,
197
+ const _TCHAR* name6 = NULL, const _TCHAR* name7 = NULL,
198
+ const _TCHAR* name8 = NULL, const _TCHAR* name9 = NULL,
199
+ const _TCHAR* name10 = NULL);
200
+ const fieldNames& getKeyFields() const;
201
+ const groupFuncBase* getFunction(int index) const;
202
+ int functionCount() const;
203
+ static groupQuery* create();
204
+ void release();
205
+ };
206
+
207
+ class DLLLIB sum : public groupFuncBase
208
+ {
209
+ protected:
210
+ void doCalc(const row_ptr& row, int index);
211
+
212
+ public:
213
+ sum() {}
214
+ sum(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
215
+ groupFuncBase* clone();
216
+ static sum* create(const fieldNames& targetNames,
217
+ const _TCHAR* resultName = NULL);
218
+ };
219
+
220
+ class DLLLIB count : public groupFuncBase
221
+ {
222
+ protected:
223
+ void doCalc(const row_ptr& row, int index);
224
+
225
+ public:
226
+ count() {}
227
+ count(const _TCHAR* resultName);
228
+ groupFuncBase* clone();
229
+ static count* create(const _TCHAR* resultName);
230
+ };
231
+
232
+ class DLLLIB avg : public sum
233
+ {
234
+
235
+ void initResultVariable(int index);
236
+ void doCalc(const row_ptr& row, int index);
237
+ value_type result(int index) const;
238
+
239
+ public:
240
+ avg() {}
241
+ avg(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
242
+ groupFuncBase* clone();
243
+ static avg* create(const fieldNames& targetNames,
244
+ const _TCHAR* resultName = NULL);
245
+ };
246
+
247
+ #undef min
248
+ class DLLLIB min : public sum
249
+ {
250
+ bool m_flag;
251
+ void doCalc(const row_ptr& row, int index);
252
+
253
+ public:
254
+ min() {}
255
+ min(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
256
+ groupFuncBase* clone();
257
+ static min* create(const fieldNames& targetNames,
258
+ const _TCHAR* resultName = NULL);
259
+ };
260
+
261
+ #undef max
262
+ class DLLLIB max : public sum
263
+ {
264
+ bool m_flag;
265
+ void doCalc(const row_ptr& row, int index);
266
+
267
+ public:
268
+ max() {}
269
+ max(const fieldNames& targetNames, const _TCHAR* resultName = NULL);
270
+ groupFuncBase* clone();
271
+ static max* create(const fieldNames& targetNames,
272
+ const _TCHAR* resultName = NULL);
273
+ };
274
+
275
+ } // namespace client
276
+ } // namespace tdap
277
+ } // namespace protocol
278
+ } // namespace db
279
+ } // namespace bzs
280
+
281
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPQUERY_H
@@ -16,15 +16,10 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  ================================================================= */
19
- #include <bzs/env/tstring.h>
20
- #pragma hdrstop
21
-
22
19
  #include "indexDDF.h"
23
20
  #include "nsDatabase.h"
24
21
  #pragma package(smart_init)
25
22
 
26
-
27
-
28
23
  namespace bzs
29
24
  {
30
25
  namespace db
@@ -36,7 +31,10 @@ namespace tdap
36
31
  namespace client
37
32
  {
38
33
 
39
- indexDDF::indexDDF(nsdatabase *pbe) : nstable(pbe) {m_keybuflen = 128;}
34
+ indexDDF::indexDDF(nsdatabase* pbe) : nstable(pbe)
35
+ {
36
+ m_keybuflen = 128;
37
+ }
40
38
 
41
39
  void indexDDF::doOpen(const _TCHAR* Dir, char_td mode, const _TCHAR* OwnerName)
42
40
  {
@@ -61,11 +59,12 @@ keylen_td indexDDF::writeKeyData()
61
59
  keylen_td len = 2;
62
60
  switch (m_keynum)
63
61
  {
64
- case 0: memcpy(&keybuf[0], &fileid, len);
62
+ case 0:
63
+ memcpy(&keybuf[0], &fileid, len);
65
64
  break;
66
- case 1: memcpy(&keybuf[0], &fieldid, len);
65
+ case 1:
66
+ memcpy(&keybuf[0], &fieldid, len);
67
67
  break;
68
-
69
68
  }
70
69
  return len;
71
70
  }
@@ -77,7 +76,6 @@ void indexDDF::writeRecordData()
77
76
  datbuf.flag = flag;
78
77
  datbuf.keyid = keyid;
79
78
  datbuf.segmentnum = segmentnum;
80
-
81
79
  }
82
80
 
83
81
  void indexDDF::onReadAfter()
@@ -87,12 +85,11 @@ void indexDDF::onReadAfter()
87
85
  flag = datbuf.flag;
88
86
  keyid = datbuf.keyid;
89
87
  segmentnum = datbuf.segmentnum;
90
-
91
88
  }
92
89
 
93
90
  void indexDDF::createTable(const _TCHAR* fullpath)
94
91
  {
95
- fileSpec *fs;
92
+ fileSpec* fs;
96
93
  fs = (fileSpec*)malloc(512);
97
94
  memset(fs, 512, 0x00);
98
95
  fs->recLen = 10;
@@ -130,8 +127,8 @@ void indexDDF::createTable(const _TCHAR* fullpath)
130
127
  m_stat = nsdb()->stat();
131
128
  }
132
129
 
133
- }// namespace client
134
- }// namespace tdap
135
- }// namespace protocol
136
- }// namespace db
137
- }// namespace bzs
130
+ } // namespace client
131
+ } // namespace tdap
132
+ } // namespace protocol
133
+ } // namespace db
134
+ } // namespace bzs
@@ -20,7 +20,6 @@
20
20
  ================================================================= */
21
21
  #include "table.h"
22
22
 
23
-
24
23
  namespace bzs
25
24
  {
26
25
  namespace db
@@ -32,8 +31,8 @@ namespace tdap
32
31
  namespace client
33
32
  {
34
33
 
35
- #pragma option -a1
36
- pragma_pack1
34
+ #pragma pack(push, 1)
35
+ pragma_pack1;
37
36
 
38
37
  struct SIDXDDF
39
38
  {
@@ -44,10 +43,8 @@ struct SIDXDDF
44
43
  short flag;
45
44
  };
46
45
 
47
- #pragma option -a
48
- pragma_pop
49
-
50
-
46
+ #pragma pack(pop)
47
+ pragma_pop;
51
48
 
52
49
  class indexDDF : public nstable
53
50
  {
@@ -71,14 +68,14 @@ public:
71
68
 
72
69
  char keybuf[128];
73
70
 
74
- explicit indexDDF(nsdatabase *pbe);
71
+ explicit indexDDF(nsdatabase* pbe);
75
72
  void createTable(const _TCHAR* fullpath);
76
73
  using nstable::open;
77
74
  };
78
75
 
79
- }// namespace client
80
- }// namespace tdap
81
- }// namespace protocol
82
- }// namespace db
83
- }// namespace bzs
84
- #endif//BZS_DB_PROTOCOL_TDAP_CLIENT_INDEXDDF_H
76
+ } // namespace client
77
+ } // namespace tdap
78
+ } // namespace protocol
79
+ } // namespace db
80
+ } // namespace bzs
81
+ #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_INDEXDDF_H
@@ -0,0 +1,231 @@
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
+ #pragma hdrstop
20
+
21
+ #include "memRecord.h"
22
+ #include <bzs/db/protocol/tdap/client/trdboostapi.h>
23
+ //---------------------------------------------------------------------------
24
+ #pragma package(smart_init)
25
+ namespace bzs
26
+ {
27
+ namespace db
28
+ {
29
+ namespace protocol
30
+ {
31
+ namespace tdap
32
+ {
33
+ namespace client
34
+ {
35
+
36
+ autoMemory::autoMemory() : ptr(0), endFieldIndex(NULL), size(0), owner(false)
37
+ {
38
+ }
39
+
40
+ autoMemory::autoMemory(unsigned char* p, size_t s, short* endIndex, bool own)
41
+ : ptr(p), endFieldIndex(NULL), size((unsigned int)s), owner(own)
42
+
43
+ {
44
+ if (owner)
45
+ {
46
+ ptr = new unsigned char[s];
47
+ if (p)
48
+ memcpy(ptr, p, size);
49
+ else
50
+ memset(ptr, 0, size);
51
+ endFieldIndex = new short;
52
+ if (endIndex != NULL)
53
+ *endFieldIndex = *endIndex;
54
+ }
55
+ else
56
+ endFieldIndex = endIndex;
57
+ }
58
+
59
+ autoMemory::~autoMemory()
60
+ {
61
+ if (owner)
62
+ {
63
+ delete[] ptr;
64
+ delete endFieldIndex;
65
+ }
66
+ }
67
+
68
+ autoMemory::autoMemory(const autoMemory& p)
69
+ : ptr(p.ptr), endFieldIndex(p.endFieldIndex), size(p.size), owner(p.owner)
70
+ {
71
+ const_cast<autoMemory&>(p).owner = false;
72
+ // const_cast<autoMemory&>(p).ptr = NULL;
73
+ }
74
+
75
+ autoMemory& autoMemory::operator=(const autoMemory& p)
76
+ {
77
+ ptr = p.ptr;
78
+ size = p.size;
79
+ endFieldIndex = p.endFieldIndex;
80
+ owner = p.owner;
81
+ const_cast<autoMemory&>(p).owner = false;
82
+ // const_cast<autoMemory&>(p).ptr = NULL;
83
+ return *this;
84
+ }
85
+
86
+ //---------------------------------------------------------------------------
87
+ // class memoryRecord
88
+ //---------------------------------------------------------------------------
89
+ inline memoryRecord::memoryRecord(fielddefs& fdinfo) : fieldsBase(fdinfo)
90
+ {
91
+
92
+ m_memblock.reserve(ROW_MEM_BLOCK_RESERVE);
93
+ }
94
+
95
+ memoryRecord::memoryRecord(const memoryRecord& r)
96
+ : fieldsBase(r.m_fns), m_memblock(r.m_memblock)
97
+ {
98
+ }
99
+
100
+ void memoryRecord::clear()
101
+ {
102
+ for (int i = 0; i < (int)m_memblock.size(); ++i)
103
+ memset(m_memblock[i].ptr, 0, m_memblock[i].size);
104
+
105
+ m_fns.resetUpdateIndicator();
106
+ }
107
+
108
+ void memoryRecord::setRecordData(unsigned char* ptr, size_t size,
109
+ short* endFieldIndex, bool owner)
110
+ {
111
+ if ((size == 0) && owner)
112
+ {
113
+ size = m_fns.totalFieldLen();
114
+ *endFieldIndex = (short)m_fns.size();
115
+ }
116
+ autoMemory am(ptr, size, endFieldIndex, owner);
117
+ m_memblock.push_back(am);
118
+ }
119
+
120
+ void memoryRecord::copyToBuffer(table* tb, bool updateOnly) const
121
+ {
122
+ if (!updateOnly)
123
+ memcpy(tb->fieldPtr(0), ptr(0), m_fns.totalFieldLen());
124
+ else
125
+ {
126
+ for (int i = 0; i < (int)m_fns.size(); ++i)
127
+ {
128
+ const fielddef& fd = m_fns[i];
129
+ // ptr() return memory block first address
130
+ if (fd.enableFlags.bitE)
131
+ memcpy(tb->fieldPtr(i), ptr(i) + fd.pos, fd.len);
132
+ }
133
+ }
134
+ }
135
+
136
+ memoryRecord* memoryRecord::create(fielddefs& fdinfo)
137
+ {
138
+ return new memoryRecord(fdinfo);
139
+ }
140
+
141
+ void memoryRecord::release(fieldsBase* p)
142
+ {
143
+ delete p;
144
+ }
145
+
146
+ //---------------------------------------------------------------------------
147
+ // class writableRecord
148
+ //---------------------------------------------------------------------------
149
+ writableRecord::writableRecord(table* tb, const aliasMap_type* alias)
150
+ : memoryRecord(*fddefs()), m_tb(tb)
151
+ {
152
+ m_tb->setFilter(NULL, 0, 0);
153
+ m_tb->clearBuffer();
154
+ m_fddefs->clear();
155
+ m_fddefs->setAliases(alias);
156
+ m_fddefs->copyFrom(m_tb);
157
+ setRecordData(0, 0, &m_endIndex, true);
158
+ }
159
+
160
+ fielddefs* writableRecord::fddefs()
161
+ {
162
+ m_fddefs = fielddefs::create();
163
+ return m_fddefs;
164
+ }
165
+
166
+ writableRecord::~writableRecord()
167
+ {
168
+ m_fddefs->release();
169
+ }
170
+
171
+ bool writableRecord::read(bool KeysetAlrady)
172
+ {
173
+ if (!KeysetAlrady)
174
+ copyToBuffer(m_tb);
175
+ m_tb->seek();
176
+ if (m_tb->stat())
177
+ return false;
178
+ copyFromBuffer(m_tb);
179
+ return true;
180
+ }
181
+
182
+ void writableRecord::insert()
183
+ {
184
+ copyToBuffer(m_tb);
185
+ insertRecord(m_tb);
186
+ copyFromBuffer(m_tb);
187
+ }
188
+
189
+ void writableRecord::del(bool KeysetAlrady)
190
+ {
191
+ if (!KeysetAlrady)
192
+ copyToBuffer(m_tb);
193
+ m_tb->seek();
194
+ if (m_tb->stat())
195
+ nstable::throwError(_T("activeTable delete "), m_tb->stat());
196
+ deleteRecord(m_tb);
197
+ }
198
+
199
+ void writableRecord::update()
200
+ {
201
+ copyToBuffer(m_tb);
202
+ m_tb->seek();
203
+ if (m_tb->stat())
204
+ nstable::throwError(_T("activeTable update "), m_tb->stat());
205
+ copyToBuffer(m_tb, true /*only changed*/);
206
+ updateRecord(m_tb);
207
+ }
208
+
209
+ void writableRecord::save()
210
+ {
211
+ copyToBuffer(m_tb);
212
+ m_tb->seek();
213
+ if (m_tb->stat() == STATUS_NOT_FOUND_TI)
214
+ insertRecord(m_tb);
215
+ else
216
+ {
217
+ copyToBuffer(m_tb);
218
+ updateRecord(m_tb);
219
+ }
220
+ }
221
+
222
+ writableRecord* writableRecord::create(table* tb, const aliasMap_type* alias)
223
+ {
224
+ return new writableRecord(tb, alias);
225
+ }
226
+
227
+ } // namespace client
228
+ } // namespace tdap
229
+ } // namespace protocol
230
+ } // namespace db
231
+ } // namespace bzs