transactd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -36,12 +36,14 @@ HOSTNAME = getHost()
36
36
  DBNAME = 'test'
37
37
  DBNAME_VAR = 'testvar'
38
38
  DBNAME_SF = 'testString'
39
+ DBNAME_QT = 'querytest'
39
40
  TABLENAME = 'user'
40
41
  PROTOCOL = 'tdap://'
41
42
  BDFNAME = '?dbfile=test.bdf'
42
43
  URL = PROTOCOL + HOSTNAME + DBNAME + BDFNAME
43
44
  URL_VAR = PROTOCOL + HOSTNAME + DBNAME_VAR + BDFNAME
44
45
  URL_SF = PROTOCOL + HOSTNAME + DBNAME_SF + BDFNAME
46
+ URL_QT = PROTOCOL + HOSTNAME + DBNAME_QT + BDFNAME
45
47
  FDI_ID = 0
46
48
  FDI_NAME = 1
47
49
  FDI_GROUP = 2
@@ -50,8 +52,7 @@ FDI_NAMEW = 2
50
52
  BULKBUFSIZE = 65535 - 1000
51
53
  TEST_COUNT = 20000
52
54
  FIVE_PERCENT_OF_TEST_COUNT = TEST_COUNT / 20
53
-
54
- TYPE_SCHEMA_BDF = 0
55
+ ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT = TEST_COUNT / 4
55
56
 
56
57
  ISOLATION_READ_COMMITTED = true
57
58
  ISOLATION_REPEATABLE_READ = false
@@ -73,7 +74,7 @@ def testCreateDatabase(db)
73
74
  end
74
75
 
75
76
  def testOpenDatabase(db)
76
- db.open(URL, TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
77
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
77
78
  expect(db.stat()).to eq 0
78
79
  end
79
80
 
@@ -131,7 +132,25 @@ def testOpenTable(db)
131
132
  return tb
132
133
  end
133
134
 
134
- def testVersion(db)
135
+ def testClone()
136
+ db = Transactd::Database.new()
137
+ db.open(URL)
138
+ expect(db.stat()).to eq 0
139
+ expect(db.isOpened()).to eq true
140
+ db2 = db.clone
141
+ expect(db2.stat).to eq 0
142
+ expect(db2.isOpened()).to eq true
143
+ db2.close
144
+ expect(db2.stat).to eq 0
145
+ expect(db2.isOpened()).to eq false
146
+ db2 = nil
147
+ expect(db.stat).to eq 0
148
+ expect(db.isOpened()).to eq true
149
+ db.close
150
+ end
151
+
152
+ def testVersion()
153
+ db = Transactd::Database.new()
135
154
  db.connect(PROTOCOL + HOSTNAME)
136
155
  expect(db.stat()).to eq 0
137
156
  vv = Transactd::BtrVersions.new()
@@ -149,9 +168,11 @@ def testVersion(db)
149
168
  expect(engine_ver.majorVersion.to_s).to eq Transactd::TRANSACTD_VER_MAJOR.to_s
150
169
  expect(engine_ver.minorVersion.to_s).to eq Transactd::TRANSACTD_VER_MINOR.to_s
151
170
  expect(engine_ver.type.chr).to eq 'T'
171
+ db.close()
152
172
  end
153
173
 
154
- def testInsert(db)
174
+ def testInsert()
175
+ db = Transactd::Database.new()
155
176
  tb = testOpenTable(db)
156
177
  expect(tb).not_to be nil
157
178
  if tb.recordCount() == 0
@@ -176,9 +197,11 @@ def testInsert(db)
176
197
  db.endTrn()
177
198
  expect(tb.stat()).to eq 0
178
199
  tb.close()
200
+ db.close()
179
201
  end
180
202
 
181
- def testFind(db)
203
+ def testFind()
204
+ db = Transactd::Database.new()
182
205
  tb = testOpenTable(db)
183
206
  tb.setKeyNum(0)
184
207
  tb.clearBuffer()
@@ -212,9 +235,11 @@ def testFind(db)
212
235
  tb.find(Transactd::Table::FindForword)
213
236
  expect(tb.stat()).to eq Transactd::STATUS_EOF
214
237
  tb.close()
238
+ db.close()
215
239
  end
216
240
 
217
- def testFindNext(db)
241
+ def testFindNext()
242
+ db = Transactd::Database.new()
218
243
  tb = testOpenTable(db)
219
244
  tb.setKeyNum(0)
220
245
  tb.clearBuffer()
@@ -229,19 +254,21 @@ def testFindNext(db)
229
254
  expect(tb.getFVint(FDI_ID)).to eq i
230
255
  end
231
256
  tb.close()
257
+ db.close()
232
258
  end
233
259
 
234
- def testFindIn(db)
260
+ def testFindIn()
261
+ db = Transactd::Database.new()
235
262
  tb = testOpenTable(db)
236
263
  tb.setKeyNum(0)
237
264
  tb.clearBuffer()
238
- q = Transactd::QueryBase.new()
239
- q.addInValue('10', true)
240
- q.addInValue('300000')
241
- q.addInValue('50')
242
- q.addInValue('-1')
243
- q.addInValue('80')
244
- q.addInValue('5000')
265
+ q = Transactd::Query.new()
266
+ q.addSeekKeyValue('10', true)
267
+ q.addSeekKeyValue('300000')
268
+ q.addSeekKeyValue('50')
269
+ q.addSeekKeyValue('-1')
270
+ q.addSeekKeyValue('80')
271
+ q.addSeekKeyValue('5000')
245
272
 
246
273
  tb.setQuery(q)
247
274
  expect(tb.stat()).to eq 0
@@ -270,9 +297,9 @@ def testFindIn(db)
270
297
  expect(tb.stat()).to eq Transactd::STATUS_EOF
271
298
 
272
299
  # Many params
273
- q.addInValue('1', true)
300
+ q.addSeekKeyValue('1', true)
274
301
  2.upto(10000) do |i|
275
- q.addInValue(i.to_s)
302
+ q.addSeekKeyValue(i.to_s)
276
303
  end
277
304
  tb.setQuery(q)
278
305
  expect(tb.stat()).to eq 0
@@ -302,9 +329,11 @@ def testFindIn(db)
302
329
  expect(i).to eq 10000
303
330
 
304
331
  tb.close()
332
+ db.close()
305
333
  end
306
334
 
307
- def testGetPercentage(db)
335
+ def testGetPercentage()
336
+ db = Transactd::Database.new()
308
337
  tb = testOpenTable(db)
309
338
  tb.clearBuffer()
310
339
  vv = TEST_COUNT / 2 + 1
@@ -314,9 +343,11 @@ def testGetPercentage(db)
314
343
  per = tb.getPercentage()
315
344
  expect((5000 - per).abs).to be < 500 # 500 = 5%
316
345
  tb.close()
346
+ db.close()
317
347
  end
318
348
 
319
- def testMovePercentage(db)
349
+ def testMovePercentage()
350
+ db = Transactd::Database.new()
320
351
  tb = testOpenTable(db)
321
352
  tb.clearBuffer()
322
353
  tb.seekByPercentage(5000) # 50%
@@ -325,9 +356,11 @@ def testMovePercentage(db)
325
356
  expect(tb.stat()).to eq 0
326
357
  expect((TEST_COUNT / 2 + 1 - v).abs).to be < FIVE_PERCENT_OF_TEST_COUNT
327
358
  tb.close()
359
+ db.close()
328
360
  end
329
361
 
330
- def testGetEqual(db)
362
+ def testGetEqual()
363
+ db = Transactd::Database.new()
331
364
  tb = testOpenTable(db)
332
365
  db.beginSnapshot()
333
366
  vv = 1
@@ -339,9 +372,11 @@ def testGetEqual(db)
339
372
  end
340
373
  db.endSnapshot()
341
374
  tb.close()
375
+ db.close()
342
376
  end
343
377
 
344
- def testGetNext(db)
378
+ def testGetNext()
379
+ db = Transactd::Database.new()
345
380
  tb = testOpenTable(db)
346
381
  db.beginSnapshot()
347
382
  vv = 2
@@ -355,9 +390,11 @@ def testGetNext(db)
355
390
  end
356
391
  db.endSnapshot()
357
392
  tb.close()
393
+ db.close()
358
394
  end
359
395
 
360
- def testGetPrevious(db)
396
+ def testGetPrevious()
397
+ db = Transactd::Database.new()
361
398
  tb = testOpenTable(db)
362
399
  db.beginSnapshot()
363
400
  vv = TEST_COUNT + 1
@@ -373,9 +410,11 @@ def testGetPrevious(db)
373
410
  expect(tb.getFVstr(FDI_NAME)).to eq 'kosaka'
374
411
  db.endSnapshot()
375
412
  tb.close()
413
+ db.close()
376
414
  end
377
415
 
378
- def testGetGreater(db)
416
+ def testGetGreater()
417
+ db = Transactd::Database.new()
379
418
  tb = testOpenTable(db)
380
419
  vv = TEST_COUNT * 3 / 4
381
420
  tb.clearBuffer()
@@ -392,9 +431,11 @@ def testGetGreater(db)
392
431
  tb.seekPrev()
393
432
  expect(tb.getFVint(FDI_ID)).to eq vv
394
433
  tb.close()
434
+ db.close()
395
435
  end
396
436
 
397
- def testGetLessThan(db)
437
+ def testGetLessThan()
438
+ db = Transactd::Database.new()
398
439
  tb = testOpenTable(db)
399
440
  vv = TEST_COUNT * 3 / 4
400
441
  tb.clearBuffer()
@@ -411,25 +452,31 @@ def testGetLessThan(db)
411
452
  tb.seekPrev()
412
453
  expect(tb.getFVint(FDI_ID)).to eq vv - 2
413
454
  tb.close()
455
+ db.close()
414
456
  end
415
457
 
416
- def testGetFirst(db)
458
+ def testGetFirst()
459
+ db = Transactd::Database.new()
417
460
  tb = testOpenTable(db)
418
461
  tb.clearBuffer()
419
462
  tb.seekFirst()
420
463
  expect(tb.getFVstr(FDI_NAME)).to eq 'kosaka'
421
464
  tb.close()
465
+ db.close()
422
466
  end
423
467
 
424
- def testGetLast(db)
468
+ def testGetLast()
469
+ db = Transactd::Database.new()
425
470
  tb = testOpenTable(db)
426
471
  tb.clearBuffer()
427
472
  tb.seekLast()
428
473
  expect(tb.getFVint(FDI_ID)).to eq TEST_COUNT + 2
429
474
  tb.close()
475
+ db.close()
430
476
  end
431
477
 
432
- def testMovePosition(db)
478
+ def testMovePosition()
479
+ db = Transactd::Database.new()
433
480
  tb = testOpenTable(db)
434
481
  tb.clearBuffer()
435
482
  vv = TEST_COUNT * 3 / 4
@@ -450,9 +497,11 @@ def testMovePosition(db)
450
497
  tb.seekByBookmark(pos)
451
498
  expect(tb.getFVint(FDI_ID)).to eq pos_vv
452
499
  tb.close()
500
+ db.close()
453
501
  end
454
502
 
455
- def testUpdate(db)
503
+ def testUpdate()
504
+ db = Transactd::Database.new()
456
505
  tb = testOpenTable(db)
457
506
  db.beginTrn()
458
507
  # test of ncc
@@ -512,10 +561,12 @@ def testUpdate(db)
512
561
  tb.seek()
513
562
  expect(tb.getFVstr(FDI_NAME)).to eq 'ABC'
514
563
  tb.close()
564
+ db.close()
515
565
  end
516
566
 
517
- def testSnapShot(db)
518
- db2 = Transactd::Database::createObject()
567
+ def testSnapShot()
568
+ db = Transactd::Database.new()
569
+ db2 = Transactd::Database.new()
519
570
  db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
520
571
  expect(db2.stat()).to eq 0
521
572
  tb = testOpenTable(db)
@@ -551,13 +602,15 @@ def testSnapShot(db)
551
602
  expect(secondValue).to eq firstValue
552
603
  end
553
604
  # ----------------------------------------------------
554
- tb.close()
555
605
  tb2.close()
606
+ tb.close()
556
607
  db2.close()
608
+ db.close()
557
609
  end
558
610
 
559
- def testTransactionLock(db)
560
- db2 = Transactd::Database::createObject()
611
+ def testTransactionLock()
612
+ db = Transactd::Database.new()
613
+ db2 = Transactd::Database.new()
561
614
  db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
562
615
  expect(db2.stat()).to eq 0
563
616
  tb = testOpenTable(db)
@@ -634,13 +687,15 @@ def testTransactionLock(db)
634
687
  tb2.setKeyNum(0)
635
688
  tb2.seekFirst()
636
689
  expect(tb2.getFVstr(FDI_NAME)).to eq 'ABC'
637
- tb.close()
638
690
  tb2.close()
691
+ tb.close()
639
692
  db2.close()
693
+ db.close()
640
694
  end
641
695
 
642
- def testConflict(db)
643
- db2 = Transactd::Database::createObject()
696
+ def testConflict()
697
+ db = Transactd::Database.new()
698
+ db2 = Transactd::Database.new()
644
699
  db2.connect(PROTOCOL + HOSTNAME + DBNAME , true)
645
700
  expect(db2.stat()).to eq 0
646
701
  tb = testOpenTable(db)
@@ -680,12 +735,98 @@ def testConflict(db)
680
735
  tb.update()
681
736
  expect(tb.stat()).to eq Transactd::STATUS_CHANGE_CONFLICT
682
737
  # ----------------------------------------------------
738
+ tb2.close()
683
739
  tb.close()
740
+ db2.close()
741
+ db.close()
742
+ end
743
+
744
+ def testExclusive()
745
+ # db mode exclusive
746
+ db = Transactd::Database.new()
747
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_EXCLUSIVE)
748
+ expect(db.stat()).to eq 0
749
+ tb = db.openTable(TABLENAME)
750
+ expect(db.stat()).to eq 0
751
+
752
+ # Can not open database from other connections.
753
+ db2 = Transactd::Database.new()
754
+ db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
755
+ expect(db2.stat()).to eq 0
756
+ db2.open(URL, Transactd::TYPE_SCHEMA_BDF)
757
+ expect(db2.stat()).to eq Transactd::STATUS_CANNOT_LOCK_TABLE
758
+
759
+ tb2 = db.openTable(TABLENAME)
760
+ expect(db.stat()).to eq 0
761
+
762
+ tb.setKeyNum(0)
763
+ tb.seekFirst()
764
+ expect(tb.stat()).to eq 0
765
+
766
+ tb.setFV(FDI_NAME, 'ABC123')
767
+ tb.update()
768
+ expect(tb.stat()).to eq 0
769
+
770
+ tb2.setKeyNum(0)
771
+ tb2.seekFirst()
772
+ expect(tb2.stat()).to eq 0
773
+ tb2.setFV(FDI_NAME, 'ABC124')
774
+ tb2.update()
775
+ expect(tb2.stat()).to eq 0
776
+
684
777
  tb2.close()
778
+ tb.close()
685
779
  db2.close()
780
+ db.close()
781
+
782
+ # table mode exclusive
783
+ db = Transactd::Database.new()
784
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_READONLY)
785
+ expect(db.stat()).to eq 0
786
+ tb = db.openTable(TABLENAME, Transactd::TD_OPEN_EXCLUSIVE)
787
+ expect(db.stat()).to eq 0
788
+
789
+ db2 = Transactd::Database.new()
790
+ db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
791
+ expect(db2.stat()).to eq 0
792
+ db2.open(URL, Transactd::TYPE_SCHEMA_BDF)
793
+ expect(db2.stat()).to eq 0
794
+
795
+ # Can not open table from other connections.
796
+ tb2 = db2.openTable(TABLENAME)
797
+ expect(db2.stat()).to eq Transactd::STATUS_CANNOT_LOCK_TABLE
798
+
799
+ # Can open table from the same connection.
800
+ tb3 = db.openTable(TABLENAME)
801
+ expect(db.stat()).to eq 0
802
+
803
+ tb3.close()
804
+ tb2.close() if tb2 != nil
805
+ tb.close()
806
+ db2.close()
807
+ db.close()
808
+
809
+ # reopen and update
810
+ db = Transactd::Database.new()
811
+ db.open(URL)
812
+ expect(db.stat()).to eq 0
813
+ tb = db.openTable(TABLENAME)
814
+ expect(db.stat()).to eq 0
815
+
816
+ tb.setKeyNum(0)
817
+ tb.seekFirst()
818
+ expect(tb.stat()).to eq 0
819
+
820
+ tb.setFV(FDI_NAME, 'ABC123')
821
+ tb.update()
822
+ expect(tb.stat()).to eq 0
823
+
824
+ tb.close()
825
+ db.close()
686
826
  end
687
827
 
688
- def testInsert2(db)
828
+ def testInsert2()
829
+ db = Transactd::Database.new()
689
830
  tb = testOpenTable(db)
690
831
  v = TEST_COUNT * 2
691
832
  db.beginTrn()
@@ -702,13 +843,15 @@ def testInsert2(db)
702
843
  expect(tb.getFVint(FDI_ID)).to eq 11
703
844
  db.endTrn()
704
845
  tb.close()
846
+ db.close()
705
847
  end
706
848
 
707
- def testDelete(db)
849
+ def testDelete()
850
+ db = Transactd::Database.new()
708
851
  tb = testOpenTable(db)
709
852
  # estimate count
710
853
  count = tb.recordCount(true)
711
- is_valid_count = ((count - TEST_COUNT - 3).abs < FIVE_PERCENT_OF_TEST_COUNT)
854
+ is_valid_count = ((count - TEST_COUNT).abs < ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT)
712
855
  expect(is_valid_count).to be true
713
856
  if !is_valid_count
714
857
  puts "true record count = #{(TEST_COUNT + 3).to_s} and estimate recordCount count = #{count.to_s}"
@@ -744,30 +887,36 @@ def testDelete(db)
744
887
  db.endTrn()
745
888
  expect(tb.recordCount(false)).to eq 0
746
889
  tb.close()
890
+ db.close()
747
891
  end
748
892
 
749
- def testSetOwner(db)
893
+ def testSetOwner()
894
+ db = Transactd::Database.new()
750
895
  tb = testOpenTable(db)
751
896
  tb.setOwnerName('ABCDEFG')
752
897
  expect(tb.stat()).to eq 0
753
898
  tb.clearOwnerName()
754
899
  expect(tb.stat()).to eq 0
755
900
  tb.close()
901
+ db.close()
756
902
  end
757
903
 
758
- def testDropIndex(db)
904
+ def testDropIndex()
905
+ db = Transactd::Database.new()
759
906
  tb = testOpenTable(db)
760
907
  tb.dropIndex(false)
761
908
  expect(tb.stat()).to eq 0
762
909
  tb.close()
910
+ db.close()
763
911
  end
764
912
 
765
- def testLogin(db)
913
+ def testLogin()
914
+ db = Transactd::Database.new()
766
915
  db.connect(PROTOCOL + HOSTNAME)
767
916
  expect(db.stat()).to eq 0
768
917
  if db.stat() == 0
769
918
  # second connection
770
- db2 = Transactd::Database::createObject()
919
+ db2 = Transactd::Database.new()
771
920
  db2.connect(PROTOCOL + HOSTNAME + DBNAME, true)
772
921
  expect(db.stat()).to eq 0
773
922
  db2.close()
@@ -802,6 +951,7 @@ def testLogin(db)
802
951
  expect(db.stat()).to eq (25000 + 1049)
803
952
  db.disconnect(PROTOCOL + HOSTNAME + DBNAME)
804
953
  expect(db.stat()).to eq 0
954
+ db.close()
805
955
  end
806
956
 
807
957
  def isUtf16leSupport(db)
@@ -896,7 +1046,8 @@ def testCreateVarTable(db, id, name, fieldType, charset)
896
1046
  tb.close() if tb != nil
897
1047
  end
898
1048
 
899
- def testCreateDatabaseVar(db)
1049
+ def testCreateDatabaseVar()
1050
+ db = Transactd::Database.new()
900
1051
  db.create(URL_VAR)
901
1052
  if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR
902
1053
  testDropDatabaseVar(db)
@@ -904,7 +1055,7 @@ def testCreateDatabaseVar(db)
904
1055
  end
905
1056
  expect(db.stat()).to eq 0
906
1057
  if (0 == db.stat())
907
- db.open(URL_VAR, 0, 0)
1058
+ db.open(URL_VAR, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
908
1059
  expect(db.stat()).to eq 0
909
1060
  end
910
1061
  if (0 == db.stat())
@@ -916,9 +1067,10 @@ def testCreateDatabaseVar(db)
916
1067
  testCreateVarTable(db, 4, 'user4', Transactd::Ft_mywvarbinary, Transactd::CHARSET_CP932)
917
1068
  testCreateVarTable(db, 5, 'user5', Transactd::Ft_myvarchar, Transactd::CHARSET_UTF8B4)
918
1069
  db.close()
919
- db.open(PROTOCOL + HOSTNAME + DBNAME_VAR + '?dbfile=transactd_schemaname', 0, 0)
1070
+ db.open(PROTOCOL + HOSTNAME + DBNAME_VAR + '?dbfile=transactd_schemaname')
920
1071
  expect(db.stat()).to eq 0
921
1072
  end
1073
+ db.close()
922
1074
  end
923
1075
 
924
1076
  def testDropDatabaseVar(db)
@@ -1067,7 +1219,8 @@ def testSetGetVar(tb, unicodeField, varCharField)
1067
1219
  expect(tb.getFVAstr(FDI_GROUP)).to eq '68'
1068
1220
  end
1069
1221
 
1070
- def testVarField(db)
1222
+ def testVarField()
1223
+ db = Transactd::Database.new()
1071
1224
  db.open(URL_VAR)
1072
1225
  expect(db.stat()).to eq 0
1073
1226
  tb = db.openTable('user1')
@@ -1097,6 +1250,7 @@ def testVarField(db)
1097
1250
  # utf8 varchar
1098
1251
  testSetGetVar(tb, true, true)
1099
1252
  tb.close()
1253
+ db.close()
1100
1254
  end
1101
1255
 
1102
1256
  def doVarInsert(db, name, codePage, str, startid, endid, bulk)
@@ -1114,11 +1268,12 @@ def doVarInsert(db, name, codePage, str, startid, endid, bulk)
1114
1268
  tb.close()
1115
1269
  end
1116
1270
 
1117
- def testVarInsert(db)
1271
+ def testVarInsert()
1118
1272
  startid = 1
1119
1273
  bulk = false
1120
1274
  str = '漢字文字のテスト' # too long kanji
1121
1275
  str2 = '123'
1276
+ db = Transactd::Database.new()
1122
1277
  db.open(URL_VAR)
1123
1278
  expect(db.stat()).to eq 0
1124
1279
  if (0 == db.stat())
@@ -1143,6 +1298,7 @@ def testVarInsert(db)
1143
1298
  doVarInsert(db, 'user4', Transactd::CP_ACP, '', startid, endid, bulk)
1144
1299
  doVarInsert(db, 'user5', Transactd::CP_UTF8, '', startid, endid, bulk)
1145
1300
  end
1301
+ db.close()
1146
1302
  end
1147
1303
 
1148
1304
  def doVarRead(db, name, codePage, str, num, key)
@@ -1167,11 +1323,12 @@ def doVarRead(db, name, codePage, str, num, key)
1167
1323
  tb.close()
1168
1324
  end
1169
1325
 
1170
- def testVarRead(db)
1326
+ def testVarRead()
1171
1327
  str = '漢字文'
1172
1328
  str3 = '漢字文字のテ'
1173
1329
  str2 ='123'
1174
1330
  str4 ='1232'
1331
+ db = Transactd::Database.new()
1175
1332
  db.open(URL_VAR)
1176
1333
  expect(db.stat()).to eq 0
1177
1334
  if (0 == db.stat())
@@ -1198,6 +1355,7 @@ def testVarRead(db)
1198
1355
  doVarRead(db, 'user4', Transactd::CP_ACP, '120', 120, key)
1199
1356
  doVarRead(db, 'user5', Transactd::CP_UTF8, '120', 120, key)
1200
1357
  end
1358
+ db.close()
1201
1359
  end
1202
1360
 
1203
1361
  def doVarFilter(db, name, codePage, str, num, key)
@@ -1245,7 +1403,8 @@ def doVarFilter(db, name, codePage, str, num, key)
1245
1403
  tb.close()
1246
1404
  end
1247
1405
 
1248
- def testFilterVar(db)
1406
+ def testFilterVar()
1407
+ db = Transactd::Database.new()
1249
1408
  db.open(URL_VAR)
1250
1409
  expect(db.stat()).to eq 0
1251
1410
  if (0 == db.stat())
@@ -1277,9 +1436,9 @@ def testFilterVar(db)
1277
1436
  doVarFilter(db, 'user4', Transactd::CP_ACP, '120', 120, key)
1278
1437
  doVarFilter(db, 'user5', Transactd::CP_UTF8, '120', 120, key)
1279
1438
  end
1439
+ db.close()
1280
1440
  end
1281
1441
 
1282
-
1283
1442
  def testCreateTableStringFilter(db, id, name, type, type2)
1284
1443
  # create table
1285
1444
  dbdef = db.dbDef()
@@ -1514,14 +1673,15 @@ def doTestStringFilter(db, id, name, type, type2)
1514
1673
  tb.close()
1515
1674
  end
1516
1675
 
1517
- def testStringFilter(db)
1676
+ def testStringFilter()
1677
+ db = Transactd::Database.new()
1518
1678
  db.create(URL_SF)
1519
1679
  if db.stat() == Transactd::STATUS_TABLE_EXISTS_ERROR
1520
1680
  testDropDatabaseStringFilter(db)
1521
1681
  db.create(URL_SF)
1522
1682
  end
1523
1683
  expect(db.stat()).to eq 0
1524
- db.open(URL_SF, 0, 0)
1684
+ db.open(URL_SF, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1525
1685
  expect(db.stat()).to eq 0
1526
1686
  doTestStringFilter( db, 1, 'zstring', Transactd::Ft_zstring, Transactd::Ft_wzstring)
1527
1687
  if (isUtf16leSupport(db))
@@ -1530,41 +1690,43 @@ def testStringFilter(db)
1530
1690
  doTestStringFilter( db, 2, 'myvarchar', Transactd::Ft_myvarchar, Transactd::Ft_myvarchar)
1531
1691
  end
1532
1692
  doTestStringFilter( db, 3, 'mytext', Transactd::Ft_mytext, Transactd::Ft_myblob)
1693
+ db.close()
1533
1694
  end
1534
1695
 
1535
1696
  def testDropDatabaseStringFilter(db)
1536
- db.open(URL_SF, 0, 0)
1697
+ db.open(URL_SF)
1537
1698
  expect(db.stat()).to eq 0
1538
1699
  db.drop()
1539
1700
  expect(db.stat()).to eq 0
1540
1701
  end
1541
1702
 
1542
1703
  def testQuery()
1543
- q = Transactd::QueryBase.new()
1704
+ q = Transactd::Query.new()
1544
1705
  q.queryString("id = 0 and name = 'Abc efg'")
1545
1706
  expect(q.toString()).to eq "id = '0' and name = 'Abc efg'"
1546
1707
 
1547
1708
  q.queryString('')
1548
- q.where('id', '=', '0').andWhere('name', '=', 'Abc efg')
1709
+ q.where('id', '=', '0').and_('name', '=', 'Abc efg')
1549
1710
  expect(q.toString()).to eq "id = '0' and name = 'Abc efg'"
1550
1711
 
1551
1712
  q.queryString("select id,name id = 0 AND name = 'Abc&' efg'")
1552
1713
  expect(q.toString()).to eq "select id,name id = '0' AND name = 'Abc&' efg'"
1553
1714
 
1554
1715
  q.queryString('')
1555
- q.select('id', 'name').where('id', '=', '0').andWhere('name', '=', "Abc' efg")
1716
+ q.select('id', 'name').where('id', '=', '0').and_('name', '=', "Abc' efg")
1556
1717
  expect(q.toString()).to eq "select id,name id = '0' and name = 'Abc&' efg'"
1557
1718
 
1558
1719
  q.queryString("select id,name id = 0 AND name = 'Abc&& efg'")
1559
1720
  expect(q.toString()).to eq "select id,name id = '0' AND name = 'Abc&& efg'"
1560
1721
 
1561
1722
  q.queryString('')
1562
- q.select('id', 'name').where('id', '=', '0').andWhere('name', '=', 'Abc& efg')
1723
+ q.select('id', 'name').where('id', '=', '0').and_('name', '=', 'Abc& efg')
1563
1724
  expect(q.toString()).to eq "select id,name id = '0' and name = 'Abc&& efg'"
1564
1725
 
1565
1726
  q.queryString('*')
1566
1727
  expect(q.toString()).to eq '*'
1567
1728
 
1729
+ q.queryString('')
1568
1730
  q.all()
1569
1731
  expect(q.toString()).to eq '*'
1570
1732
 
@@ -1586,7 +1748,7 @@ def testQuery()
1586
1748
  expect(q.toString()).to eq "select id,name,fc id = '2' and name = '3'"
1587
1749
 
1588
1750
  q.queryString('')
1589
- q.select('id', 'name', 'fc').where('id', '=', '2').andWhere('name', '=', '3')
1751
+ q.select('id', 'name', 'fc').where('id', '=', '2').and_('name', '=', '3')
1590
1752
  expect(q.toString()).to eq "select id,name,fc id = '2' and name = '3'"
1591
1753
 
1592
1754
  # IN include
@@ -1594,7 +1756,7 @@ def testQuery()
1594
1756
  expect(q.toString()).to eq "select id,name,fc in '1','2','3'"
1595
1757
 
1596
1758
  q.queryString('')
1597
- q.select('id', 'name', 'fc').In('1', '2', '3')
1759
+ q.select('id', 'name', 'fc').in('1', '2', '3')
1598
1760
  expect(q.toString()).to eq "select id,name,fc in '1','2','3'"
1599
1761
 
1600
1762
  q.queryString("IN '1','2','3'")
@@ -1604,7 +1766,7 @@ def testQuery()
1604
1766
  expect(q.toString()).to eq "in '1','2','3'"
1605
1767
 
1606
1768
  q.queryString('')
1607
- q.In('1', '2', '3')
1769
+ q.in('1', '2', '3')
1608
1770
  expect(q.toString()).to eq "in '1','2','3'"
1609
1771
 
1610
1772
  # special field name
@@ -1621,171 +1783,601 @@ def testQuery()
1621
1783
  q.queryString('')
1622
1784
  q.where('in', '<>', '1')
1623
1785
  expect(q.toString()).to eq "in <> '1'"
1786
+
1787
+ # test auto_escape
1788
+ q.queryString("code = ab'c", true)
1789
+ expect(q.toString()).to eq "code = 'ab&'c'"
1790
+
1791
+ q.queryString("code = ab&c", true)
1792
+ expect(q.toString()).to eq "code = 'ab&&c'"
1793
+
1794
+ q.queryString("code = abc&", true)
1795
+ expect(q.toString()).to eq "code = 'abc&&'"
1796
+ q.queryString("code = abc&&", true)
1797
+ expect(q.toString()).to eq "code = 'abc&&&&'"
1798
+
1799
+ q.queryString("code = 'abc&'", true)
1800
+ expect(q.toString()).to eq "code = 'abc&&'"
1801
+ q.queryString("code = 'abc&&'", true)
1802
+ expect(q.toString()).to eq "code = 'abc&&&&'"
1803
+
1804
+ q.queryString("code = 'ab'c'", true)
1805
+ expect(q.toString()).to eq "code = 'ab&'c'"
1806
+
1807
+ q.queryString("code = 'abc''", true)
1808
+ expect(q.toString()).to eq "code = 'abc&''"
1809
+
1810
+ q.queryString("code = abc'", true)
1811
+ expect(q.toString()).to eq "code = 'abc&''"
1812
+
1813
+ # Invalid single quote (') on the end of statement
1814
+ q.queryString("code = 'abc", true)
1815
+ expect(q.toString()).to eq "code = 'abc'"
1816
+
1817
+ q.queryString("code = &abc", true)
1818
+ expect(q.toString()).to eq "code = '&&abc'"
1624
1819
  end
1625
1820
 
1821
+ def createQTuser(db)
1822
+ dbdef = db.dbDef()
1823
+ td = Transactd::Tabledef.new()
1824
+ td.setTableName('user')
1825
+ td.setFileName('user.dat')
1826
+ id = 1
1827
+ td.id = id
1828
+ td.pageSize = 2048
1829
+ td.schemaCodePage = Transactd::CP_UTF8
1830
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1831
+ dbdef.insertTable(td)
1832
+ expect(dbdef.stat()).to eq 0
1833
+ # id field
1834
+ fd = dbdef.insertField(id, 0)
1835
+ fd.setName('id')
1836
+ fd.type = Transactd::Ft_autoinc
1837
+ fd.len = 4
1838
+ # 名前 field
1839
+ fd = dbdef.insertField(id, 1)
1840
+ fd.setName('名前')
1841
+ fd.type = Transactd::Ft_myvarchar
1842
+ fd.setLenByCharnum(20)
1843
+ # group field
1844
+ fd = dbdef.insertField(id, 2)
1845
+ fd.setName('group')
1846
+ fd.type = Transactd::Ft_integer
1847
+ fd.len = 4
1848
+ # tel field
1849
+ fd = dbdef.insertField(id, 3)
1850
+ fd.setName('tel')
1851
+ fd.type = Transactd::Ft_myvarchar
1852
+ fd.setLenByCharnum(20)
1853
+ # key 0 (primary) id
1854
+ kd = dbdef.insertKey(id, 0)
1855
+ kd.segment(0).fieldNum = 0
1856
+ kd.segment(0).flags.bit8 = 1 # extended key type
1857
+ kd.segment(0).flags.bit1 = 1 # changeable
1858
+ kd.segmentCount = 1
1859
+ td = dbdef.tableDefs(id)
1860
+ td.primaryKeyNum = 0
1861
+ # key 1 group
1862
+ kd = dbdef.insertKey(id, 1)
1863
+ kd.segment(0).fieldNum = 2
1864
+ kd.segment(0).flags.bit8 = 1 # extended key type
1865
+ kd.segment(0).flags.bit1 = 1 # changeable
1866
+ kd.segment(0).flags.bit0 = 1 # duplicatable
1867
+ kd.segmentCount = 1
1868
+ # update
1869
+ dbdef.updateTableDef(id)
1870
+ expect(dbdef.stat()).to eq 0
1871
+ # open test
1872
+ tb = db.openTable(id)
1873
+ expect(db.stat()).to eq 0
1874
+ tb.close() if tb != nil
1875
+ return true
1876
+ end
1626
1877
 
1627
- describe Transactd do
1628
- before :each do
1629
- @db = Transactd::Database.createObject()
1878
+ def createQTgroups(db)
1879
+ dbdef = db.dbDef()
1880
+ td = Transactd::Tabledef.new()
1881
+ td.setTableName('groups')
1882
+ td.setFileName('groups.dat')
1883
+ id = 2
1884
+ td.id = id
1885
+ td.pageSize = 2048
1886
+ td.schemaCodePage = Transactd::CP_UTF8
1887
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1888
+ dbdef.insertTable(td)
1889
+ expect(dbdef.stat()).to eq 0
1890
+ # code field
1891
+ fd = dbdef.insertField(id, 0)
1892
+ fd.setName('code')
1893
+ fd.type = Transactd::Ft_integer
1894
+ fd.len = 4
1895
+ # name field
1896
+ fd = dbdef.insertField(id, 1)
1897
+ fd.setName('name')
1898
+ fd.type = Transactd::Ft_myvarbinary
1899
+ fd.len = 33
1900
+ # key 0 (primary) code
1901
+ kd = dbdef.insertKey(id, 0)
1902
+ kd.segment(0).fieldNum = 0
1903
+ kd.segment(0).flags.bit8 = 1 # extended key type
1904
+ kd.segment(0).flags.bit1 = 1 # changeable
1905
+ kd.segmentCount = 1
1906
+ td = dbdef.tableDefs(id)
1907
+ td.primaryKeyNum = 0
1908
+ # update
1909
+ dbdef.updateTableDef(id)
1910
+ expect(dbdef.stat()).to eq 0
1911
+ # open test
1912
+ tb = db.openTable(id)
1913
+ expect(db.stat()).to eq 0
1914
+ tb.close() if tb != nil
1915
+ return true
1916
+ end
1917
+
1918
+ def createQTextention(db)
1919
+ dbdef = db.dbDef()
1920
+ td = Transactd::Tabledef.new()
1921
+ td.setTableName('extention')
1922
+ td.setFileName('extention.dat')
1923
+ id = 3
1924
+ td.id = id
1925
+ td.pageSize = 2048
1926
+ td.schemaCodePage = Transactd::CP_UTF8
1927
+ td.charsetIndex = Transactd::CHARSET_UTF8B4
1928
+ dbdef.insertTable(td)
1929
+ expect(dbdef.stat()).to eq 0
1930
+ # id field
1931
+ fd = dbdef.insertField(id, 0)
1932
+ fd.setName('id')
1933
+ fd.type = Transactd::Ft_integer
1934
+ fd.len = 4
1935
+ # comment field
1936
+ fd = dbdef.insertField(id, 1)
1937
+ fd.setName('comment')
1938
+ fd.type = Transactd::Ft_myvarchar
1939
+ fd.setLenByCharnum(60)
1940
+ # key 0 (primary) id
1941
+ kd = dbdef.insertKey(id, 0)
1942
+ kd.segment(0).fieldNum = 0
1943
+ kd.segment(0).flags.bit8 = 1 # extended key type
1944
+ kd.segment(0).flags.bit1 = 1 # changeable
1945
+ kd.segmentCount = 1
1946
+ td = dbdef.tableDefs(id)
1947
+ td.primaryKeyNum = 0
1948
+ # update
1949
+ dbdef.updateTableDef(id)
1950
+ expect(dbdef.stat()).to eq 0
1951
+ # open test
1952
+ tb = db.openTable(id)
1953
+ expect(db.stat()).to eq 0
1954
+ tb.close() if tb != nil
1955
+ return true
1956
+ end
1957
+
1958
+ def insertQT(db, maxId)
1959
+ db.beginTrn()
1960
+ # insert user data
1961
+ tb = db.openTable('user', Transactd::TD_OPEN_NORMAL)
1962
+ expect(db.stat()).to eq 0
1963
+ tb.clearBuffer()
1964
+ for i in 1..maxId
1965
+ tb.setFV(0, i)
1966
+ tb.setFV(1, "#{i} user")
1967
+ tb.setFV('group', ((i - 1) % 5) + 1)
1968
+ tb.insert()
1969
+ expect(tb.stat()).to eq 0
1630
1970
  end
1631
- after :each do
1632
- @db.close()
1633
- @db = nil
1971
+ tb.close()
1972
+ # insert groups data
1973
+ tb = db.openTable('groups', Transactd::TD_OPEN_NORMAL)
1974
+ expect(db.stat()).to eq 0
1975
+ tb.clearBuffer()
1976
+ for i in 1..100
1977
+ tb.setFV(0, i)
1978
+ tb.setFV(1, "#{i} group")
1979
+ tb.insert()
1980
+ expect(tb.stat()).to eq 0
1981
+ end
1982
+ tb.close()
1983
+ # insert extention data
1984
+ tb = db.openTable('extention', Transactd::TD_OPEN_NORMAL)
1985
+ expect(db.stat()).to eq 0
1986
+ tb.clearBuffer()
1987
+ for i in 1..maxId
1988
+ tb.setFV(0, i)
1989
+ tb.setFV(1, "#{i} comment")
1990
+ tb.insert()
1991
+ expect(tb.stat()).to eq 0
1634
1992
  end
1993
+ tb.close()
1994
+ db.endTrn()
1995
+ end
1996
+
1997
+ def testCreateQueryTest()
1998
+ # check database existence
1999
+ db = Transactd::Database.new()
2000
+ db.open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
2001
+ if (db.stat() === 0)
2002
+ db.close()
2003
+ return
2004
+ end
2005
+ puts "\nDatabase " + DBNAME_QT + " not found\n"
2006
+ db.create(URL_QT)
2007
+ expect(db.stat()).to eq 0
2008
+ db.open(URL_QT, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
2009
+ expect(db.stat()).to eq 0
2010
+ # create tables
2011
+ createQTuser(db)
2012
+ createQTgroups(db)
2013
+ createQTextention(db)
2014
+ # insert data
2015
+ insertQT(db, 20000)
2016
+ db.close()
2017
+ end
2018
+
2019
+ def testNewDelete()
2020
+ db = Transactd::Database.new()
2021
+ db.open(URL_QT)
2022
+ for i in 0..499
2023
+ q = Transactd::Query.new()
2024
+ rq = Transactd::RecordsetQuery.new()
2025
+ gq = Transactd::GroupQuery.new()
2026
+ f = Transactd::FieldNames.new()
2027
+ f.addValue('abc')
2028
+ atu = Transactd::ActiveTable.new(db, 'user')
2029
+ atu.index(0)
2030
+ atg = Transactd::ActiveTable.new(db, 'groups')
2031
+ atg.index(0)
2032
+ fns = Transactd::FieldNames.new()
2033
+ fns.keyField('a')
2034
+ s = Transactd::Sum.new(fns)
2035
+ c = Transactd::Count.new('a')
2036
+ a = Transactd::Avg.new(fns)
2037
+ mi = Transactd::Min.new(fns)
2038
+ ma = Transactd::Max.new(fns)
2039
+ rs = Transactd::Recordset.new()
2040
+ # have to explicitly release
2041
+ atu.release()
2042
+ atg.release()
2043
+ end
2044
+ db.close()
2045
+ end
2046
+
2047
+ def testJoin()
2048
+ db = Transactd::Database.new()
2049
+ db.open(URL_QT)
2050
+ expect(db.stat()).to eq 0
2051
+ atu = Transactd::ActiveTable.new(db, 'user')
2052
+ atg = Transactd::ActiveTable.new(db, 'groups')
2053
+ ate = Transactd::ActiveTable.new(db, 'extention')
2054
+ q = Transactd::Query.new()
2055
+
2056
+ atu.alias('名前', 'name')
2057
+ q.select('id', 'name', 'group').where('id', '<=', '15000')
2058
+ rs = atu.index(0).keyValue('1').read(q)
2059
+ expect(rs.size()).to eq 15000
2060
+
2061
+ # Join extention::comment
2062
+ q.reset()
2063
+ ate.index(0).join(rs,
2064
+ q.select('comment').optimize(Transactd::QueryBase::JoinHasOneOrHasMany), 'id')
2065
+ expect(rs.size()).to eq 15000
2066
+
2067
+ # reverse and get first (so it means 'get last')
2068
+ last = rs.reverse().first()
2069
+ expect(last['id']).to eq 15000
2070
+ expect(last['comment']).to eq '15000 comment'
2071
+
2072
+ # Join group::name
2073
+ q.reset()
2074
+ atg.alias('name', 'group_name')
2075
+ atg.index(0).join(rs, q.select('group_name'), 'group')
2076
+ expect(rs.size()).to eq 15000
2077
+
2078
+ # get last (the rs is reversed, so it means 'get first')
2079
+ first = rs.last()
2080
+ expect(first['id']).to eq 1
2081
+ expect(first['comment']).to eq '1 comment'
2082
+ expect(first['group_name']).to eq '1 group'
2083
+
2084
+ # row in rs[15000 - 9]
2085
+ rec = rs[15000 - 9]
2086
+ expect(rec['group_name']).to eq '4 group'
2087
+
2088
+ # orderby
2089
+ rs.orderBy('group_name')
2090
+ for i in 0..(15000 / 5 - 1)
2091
+ expect(rs[i]['group_name']).to eq '1 group'
2092
+ end
2093
+ expect(rs[15000 / 5]['group_name']).to eq '2 group'
2094
+ expect(rs[(15000 / 5) * 2]['group_name']).to eq '3 group'
2095
+ expect(rs[(15000 / 5) * 3]['group_name']).to eq '4 group'
2096
+ expect(rs[(15000 / 5) * 4]['group_name']).to eq '5 group'
2097
+
2098
+ # union
2099
+ q.reset()
2100
+ q.select('id', 'name', 'group').where('id', '<=', '16000')
2101
+ rs2 = atu.index(0).keyValue('15001').read(q)
2102
+ expect(rs2.size()).to eq 1000
2103
+ q.reset()
2104
+ ate.index(0).join(rs2,
2105
+ q.select('comment').optimize(Transactd::QueryBase::JoinHasOneOrHasMany), 'id')
2106
+ expect(rs2.size()).to eq 1000
2107
+ q.reset()
2108
+ atg.index(0).join(rs2, q.select('group_name'), 'group')
2109
+ expect(rs2.size()).to eq 1000
2110
+ rs.unionRecordset(rs2)
2111
+ expect(rs.size()).to eq 16000
2112
+ # row in rs[15000]
2113
+ expect(rs[15000]['id']).to eq 15001
2114
+ # last
2115
+ expect(rs.last()['id']).to eq 16000
2116
+
2117
+ # group by
2118
+ gq = Transactd::GroupQuery.new()
2119
+ gq.keyField('group', 'id')
2120
+ count1 = Transactd::Count.new('count')
2121
+ gq.addFunction(count1)
2122
+
2123
+ count2 = Transactd::Count.new('group1_count')
2124
+ count2.when('group', '=', '1')
2125
+ gq.addFunction(count2)
2126
+
2127
+ rs.groupBy(gq)
2128
+ expect(rs.size()).to eq 16000
2129
+ expect(rs[0]['group1_count']).to eq 1
2130
+
2131
+ # clone
2132
+ rsv = rs.clone
2133
+ gq.reset()
2134
+ count3 = Transactd::Count.new('count')
2135
+ gq.addFunction(count3).keyField('group')
2136
+ rs.groupBy(gq)
2137
+ expect(rs.size()).to eq 5
2138
+ expect(rsv.size()).to eq 16000
2139
+
2140
+ # having
2141
+ rq = Transactd::RecordsetQuery.new()
2142
+ rq.when('group1_count', '=', '1').or_('group1_count', '=', '2')
2143
+ rsv.matchBy(rq)
2144
+ expect(rsv.size()).to eq 3200
2145
+ expect(rsv).not_to be nil
2146
+ rsv = nil
2147
+ expect(rsv).to be nil
2148
+
2149
+ # top
2150
+ rs3 = Transactd::Recordset.new()
2151
+ rs.top(rs3, 10)
2152
+ expect(rs3.size()).to eq 5
2153
+ rs.top(rs3, 3)
2154
+ expect(rs3.size()).to eq 3
2155
+ expect(rs.size()).to eq 5
2156
+
2157
+ # query new / delete
2158
+ q1 = Transactd::RecordsetQuery.new()
2159
+ q1.when('group1_count', '=', '1').or_('group1_count', '=', '2')
2160
+ q1 = nil
2161
+
2162
+ q2 = Transactd::Query.new()
2163
+ q2.where('group1_count', '=', '1').or_('group1_count', '=', '2')
2164
+ q2 = nil
2165
+
2166
+ q3 = Transactd::GroupQuery.new()
2167
+ q3.keyField('group', 'id')
2168
+ q3 = nil
2169
+
2170
+ atu.release()
2171
+ atg.release()
2172
+ ate.release()
2173
+ db.close()
2174
+ end
2175
+
2176
+ def testWirtableRecord()
2177
+ db = Transactd::Database.new()
2178
+ db.open(URL_QT)
2179
+ expect(db.stat()).to eq 0
2180
+ atu = Transactd::ActiveTable.new(db, 'user')
2181
+
2182
+ rec = atu.index(0).getWritableRecord()
2183
+ rec['id'] = 120000
2184
+ rec['名前'] = 'aiba'
2185
+ rec.save()
2186
+
2187
+ rec.clear()
2188
+ expect(rec['id']).not_to eq 120000
2189
+ expect(rec['名前']).not_to eq 'aiba'
2190
+ rec['id'] = 120000
2191
+ rec.read()
2192
+ expect(rec['id']).to eq 120000
2193
+ expect(rec['名前']).to eq 'aiba'
2194
+
2195
+ rec.clear()
2196
+ rec['id'] = 120001
2197
+ rec['名前'] = 'oono'
2198
+ rec.insert() unless rec.read()
2199
+
2200
+ rec.clear()
2201
+ rec['id'] = 120001
2202
+ rec.read()
2203
+ expect(rec['id']).to eq 120001
2204
+ expect(rec['名前']).to eq 'oono'
2205
+
2206
+ # update only changed filed
2207
+ rec.clear()
2208
+ rec['id'] = 120001
2209
+ rec['名前'] = 'matsumoto'
2210
+ rec.update()
2211
+
2212
+ rec.clear()
2213
+ rec['id'] = 120001
2214
+ rec.read()
2215
+ expect(rec['id']).to eq 120001
2216
+ expect(rec['名前']).to eq 'matsumoto'
2217
+
2218
+ rec.del()
2219
+ rec['id'] = 120000
2220
+ rec.del()
2221
+
2222
+ rec.clear()
2223
+ rec['id'] = 120001
2224
+ ret = rec.read()
2225
+ expect(ret).to eq false
2226
+
2227
+ rec.clear()
2228
+ rec['id'] = 120000
2229
+ ret = rec.read()
2230
+ expect(ret).to eq false
2231
+
2232
+ atu.release()
2233
+ db.close()
2234
+ end
2235
+
2236
+ describe Transactd do
1635
2237
  it 'create database' do
1636
- testCreateDatabase(@db)
2238
+ db = Transactd::Database.new()
2239
+ testCreateDatabase(db)
2240
+ db.close()
1637
2241
  end
1638
2242
  it 'create table' do
1639
- testCreateDatabase(@db)
1640
- testCreateTable(@db)
2243
+ db = Transactd::Database.new()
2244
+ testCreateDatabase(db)
2245
+ testCreateTable(db)
2246
+ db.close()
1641
2247
  end
1642
2248
  it 'open table' do
1643
- testOpenTable(@db)
2249
+ db = Transactd::Database.new()
2250
+ testOpenTable(db)
2251
+ db.close()
2252
+ end
2253
+ it 'clone db object' do
2254
+ testClone()
1644
2255
  end
1645
2256
  it 'version' do
1646
- testVersion(@db)
2257
+ testVersion()
1647
2258
  end
1648
2259
  it 'insert' do
1649
- testInsert(@db)
2260
+ testInsert()
1650
2261
  end
1651
2262
  it 'find' do
1652
- testFind(@db)
2263
+ testFind()
1653
2264
  end
1654
2265
  it 'findNext' do
1655
- testFindNext(@db)
2266
+ testFindNext()
1656
2267
  end
1657
2268
  it 'findIn' do
1658
- testFindIn(@db)
2269
+ testFindIn()
1659
2270
  end
1660
2271
  it 'get percentage' do
1661
- testGetPercentage(@db)
2272
+ testGetPercentage()
1662
2273
  end
1663
2274
  it 'move percentage' do
1664
- testMovePercentage(@db)
2275
+ testMovePercentage()
1665
2276
  end
1666
2277
  it 'get equal' do
1667
- testGetEqual(@db)
2278
+ testGetEqual()
1668
2279
  end
1669
2280
  it 'get next' do
1670
- testGetNext(@db)
2281
+ testGetNext()
1671
2282
  end
1672
2283
  it 'get previous' do
1673
- testGetPrevious(@db)
2284
+ testGetPrevious()
1674
2285
  end
1675
2286
  it 'get greater' do
1676
- testGetGreater(@db)
2287
+ testGetGreater()
1677
2288
  end
1678
2289
  it 'get less than' do
1679
- testGetLessThan(@db)
2290
+ testGetLessThan()
1680
2291
  end
1681
2292
  it 'get first' do
1682
- testGetFirst(@db)
2293
+ testGetFirst()
1683
2294
  end
1684
2295
  it 'get last' do
1685
- testGetLast(@db)
2296
+ testGetLast()
1686
2297
  end
1687
2298
  it 'move position' do
1688
- testMovePosition(@db)
2299
+ testMovePosition()
1689
2300
  end
1690
2301
  it 'update' do
1691
- testUpdate(@db)
2302
+ testUpdate()
1692
2303
  end
1693
2304
  it 'snapshot' do
1694
- testSnapShot(@db)
2305
+ testSnapShot()
1695
2306
  end
1696
2307
  it 'send conflict error' do
1697
- testConflict(@db)
2308
+ testConflict()
1698
2309
  end
1699
2310
  it 'transaction' do
1700
- testTransactionLock(@db)
2311
+ testTransactionLock()
2312
+ end
2313
+ it 'exclusive' do
2314
+ testExclusive()
1701
2315
  end
1702
2316
  it 'insert2' do
1703
- testInsert2(@db)
2317
+ testInsert2()
1704
2318
  end
1705
2319
  it 'delete' do
1706
- testDelete(@db)
2320
+ testDelete()
1707
2321
  end
1708
2322
  it 'set owner' do
1709
- testSetOwner(@db)
2323
+ testSetOwner()
1710
2324
  end
1711
2325
  it 'drop index' do
1712
- testDropIndex(@db)
2326
+ testDropIndex()
1713
2327
  end
1714
2328
  it 'drop database' do
1715
- testDropDatabase(@db)
2329
+ db = Transactd::Database.new()
2330
+ testDropDatabase(db)
2331
+ db.close()
1716
2332
  end
1717
2333
  it 'login' do
1718
- testLogin(@db)
2334
+ testLogin()
1719
2335
  end
1720
2336
  it 'query' do
1721
2337
  testQuery()
1722
2338
  end
2339
+ it 'create querytest db' do
2340
+ testCreateQueryTest()
2341
+ end
2342
+ it 'new and delete objects' do
2343
+ testNewDelete()
2344
+ end
2345
+ it 'activetable and join' do
2346
+ testJoin()
2347
+ end
2348
+ it 'write with writableRecord' do
2349
+ testWirtableRecord()
2350
+ end
1723
2351
  end
1724
2352
 
1725
2353
  describe Transactd, 'var tables' do
1726
- before :each do
1727
- @db = Transactd::Database.createObject()
1728
- end
1729
- after :each do
1730
- @db.close()
1731
- @db = nil
1732
- end
1733
2354
  it 'create var database' do
1734
- testCreateDatabaseVar(@db)
2355
+ testCreateDatabaseVar()
1735
2356
  end
1736
2357
  it 'set kanji char to field' do
1737
- testVarField(@db)
2358
+ testVarField()
1738
2359
  end
1739
2360
  it 'insert kanji char to field' do
1740
- testVarInsert(@db)
2361
+ testVarInsert()
1741
2362
  end
1742
2363
  it 'read kanji char from field' do
1743
- testVarRead(@db)
2364
+ testVarRead()
1744
2365
  end
1745
2366
  it 'filter' do
1746
- testFilterVar(@db)
2367
+ testFilterVar()
1747
2368
  end
1748
2369
  it 'drop var database' do
1749
- testDropDatabaseVar(@db)
2370
+ db = Transactd::Database.new()
2371
+ testDropDatabaseVar(db)
1750
2372
  end
1751
2373
  end
1752
2374
 
1753
2375
  describe Transactd, 'StringFilter' do
1754
- before :each do
1755
- @db = Transactd::Database.createObject()
1756
- end
1757
- after :each do
1758
- @db.close()
1759
- @db = nil
1760
- end
1761
2376
  it 'string filter' do
1762
- testStringFilter(@db)
2377
+ testStringFilter()
1763
2378
  end
1764
2379
  it 'drop database' do
1765
- testDropDatabaseStringFilter(@db)
1766
- end
1767
- end
1768
-
1769
- describe Transactd, 'convert' do
1770
- if !IS_WINDOWS
1771
- it 'convert char' do
1772
- dummy = ''
1773
- u8 = '123'
1774
- mbcArray = '123'.encode('Shift_JIS').bytes.to_a # bites Shift-JIS '漢字'
1775
- ret = Transactd::u8tombc(u8, -1, dummy, 256)
1776
- mbc = ret[1].force_encoding('Shift_JIS')
1777
- expect(mbc.bytes.to_a).to eq mbcArray
1778
-
1779
- u8 = '漢字'
1780
- mbcArray = '漢字'.encode('Shift_JIS').bytes.to_a # bites Shift-JIS '漢字'
1781
- ret = Transactd::u8tombc(u8, -1, dummy, 256)
1782
- mbc = ret[1].force_encoding('Shift_JIS')
1783
- expect(mbc.bytes.to_a).to eq mbcArray
1784
-
1785
- u8Array = '漢字'.encode('UTF-8').bytes.to_a # bites UTF-8 '漢字'
1786
- ret = Transactd::mbctou8(mbc, -1, dummy , 256)
1787
- u8 = ret[1].force_encoding('UTF-8')
1788
- expect(u8.bytes.to_a).to eq u8Array
1789
- end
2380
+ db = Transactd::Database.new()
2381
+ testDropDatabaseStringFilter(db)
1790
2382
  end
1791
2383
  end