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
@@ -20,17 +20,20 @@
20
20
  mb_internal_encoding('UTF-8');
21
21
 
22
22
  require_once("transactd.php");
23
+ use BizStation\Transactd as Bz;
23
24
 
24
25
  define("HOSTNAME", "localhost/");
25
26
  define("DBNAME", "test");
26
27
  define("DBNAME_VAR", "testvar");
27
28
  define("DBNAME_SF", "testString");
29
+ define("DBNAME_QT", "querytest");
28
30
  define("TABLENAME", "user");
29
31
  define("PROTOCOL", "tdap://");
30
32
  define("BDFNAME", "?dbfile=test.bdf");
31
33
  define("URL", PROTOCOL . HOSTNAME . DBNAME . BDFNAME);
32
34
  define("URL_VAR", PROTOCOL . HOSTNAME . DBNAME_VAR . BDFNAME);
33
35
  define("URL_SF", PROTOCOL . HOSTNAME . DBNAME_SF . BDFNAME);
36
+ define("URL_QT", PROTOCOL . HOSTNAME . DBNAME_QT . BDFNAME);
34
37
  define("FDI_ID", 0);
35
38
  define("FDI_NAME", 1);
36
39
  define("FDI_GROUP", 2);
@@ -39,23 +42,13 @@ define("FDI_NAMEW", 2);
39
42
  define("BULKBUFSIZE", 65535 - 1000);
40
43
  define("TEST_COUNT", 20000);
41
44
  define("FIVE_PERCENT_OF_TEST_COUNT", TEST_COUNT / 20);
42
-
43
- define("TYPE_SCHEMA_BDF", 0);
45
+ define("ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT", TEST_COUNT / 4);
44
46
 
45
47
  define("ISOLATION_READ_COMMITTED", true);
46
48
  define("ISOLATION_REPEATABLE_READ", false);
47
49
 
48
50
  class transactdTest extends PHPUnit_Framework_TestCase
49
51
  {
50
- private function getDbObj()
51
- {
52
- return database::createObject();
53
- }
54
- private function deleteDbObj($db)
55
- {
56
- $db->close();
57
- $db = NULL;
58
- }
59
52
  private function dropDatabase($db)
60
53
  {
61
54
  $db->open(URL);
@@ -66,7 +59,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
66
59
  private function createDatabase($db)
67
60
  {
68
61
  $db->create(URL);
69
- if ($db->stat() == transactd::STATUS_TABLE_EXISTS_ERROR)
62
+ if ($db->stat() == Bz\transactd::STATUS_TABLE_EXISTS_ERROR)
70
63
  {
71
64
  $this->dropDatabase($db);
72
65
  $db->create(URL);
@@ -75,7 +68,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
75
68
  }
76
69
  private function openDatabase($db)
77
70
  {
78
- $db->open(URL, TYPE_SCHEMA_BDF, transactd::TD_OPEN_NORMAL);
71
+ $db->open(URL, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
79
72
  $this->assertEquals($db->stat(), 0);
80
73
  }
81
74
  private function createTable($db)
@@ -83,15 +76,15 @@ class transactdTest extends PHPUnit_Framework_TestCase
83
76
  $this->openDatabase($db);
84
77
  $dbdef = $db->dbDef();
85
78
  $this->assertNotEquals($dbdef, NULL);
86
- $td = new tabledef();
79
+ $td = new Bz\tabledef();
87
80
  // Set table schema codepage to UTF-8
88
81
  // - codepage for field NAME and tableNAME
89
- $td->schemaCodePage = transactd::CP_UTF8;
82
+ $td->schemaCodePage = Bz\transactd::CP_UTF8;
90
83
  $td->setTableName(TABLENAME);
91
84
  $td->setFileName(TABLENAME . '.dat');
92
85
  // Set table default charaset index
93
86
  // - default charset for field VALUE
94
- $td->charsetIndex = transactd::charsetIndex(transactd::CP_UTF8);
87
+ $td->charsetIndex = Bz\transactd::charsetIndex(Bz\transactd::CP_UTF8);
95
88
  //
96
89
  $tableid = 1;
97
90
  $td->id = $tableid;
@@ -101,31 +94,31 @@ class transactdTest extends PHPUnit_Framework_TestCase
101
94
 
102
95
  $fd = $dbdef->insertField($tableid, 0);
103
96
  $fd->setName("id");
104
- $fd->type = transactd::ft_integer;
97
+ $fd->type = Bz\transactd::ft_integer;
105
98
  $fd->len = 4;
106
99
  $dbdef->updateTableDef($tableid);
107
100
  $this->assertEquals($dbdef->stat(), 0);
108
101
 
109
102
  $fd = $dbdef->insertField($tableid, 1);
110
103
  $fd->setName("name");
111
- $fd->type = transactd::ft_zstring;
104
+ $fd->type = Bz\transactd::ft_zstring;
112
105
  $fd->len = 33;
113
106
  $dbdef->updateTableDef($tableid);
114
107
  $this->assertEquals($dbdef->stat(), 0);
115
108
  // Set field charset index
116
109
  // - charset for each field VALUE
117
- // $fd->setCharsetIndex(transactd::charsetIndex(transactd::CP_UTF8))
110
+ // $fd->setCharsetIndex(Bz\transactd::charsetIndex(Bz\transactd::CP_UTF8))
118
111
 
119
112
  $fd = $dbdef->insertField($tableid, 2);
120
113
  $fd->setName("select");
121
- $fd->type = transactd::ft_integer;
114
+ $fd->type = Bz\transactd::ft_integer;
122
115
  $fd->len = 4;
123
116
  $dbdef->updateTableDef($tableid);
124
117
  $this->assertEquals($dbdef->stat(), 0);
125
118
 
126
119
  $fd = $dbdef->insertField($tableid, 3);
127
120
  $fd->setName("in");
128
- $fd->type = transactd::ft_integer;
121
+ $fd->type = Bz\transactd::ft_integer;
129
122
  $fd->len = 4;
130
123
  $dbdef->updateTableDef($tableid);
131
124
  $this->assertEquals($dbdef->stat(), 0);
@@ -148,47 +141,108 @@ class transactdTest extends PHPUnit_Framework_TestCase
148
141
 
149
142
  public function testCreateDatabase()
150
143
  {
151
- $db = $this->getDbObj();
144
+ $db = new Bz\database();
152
145
  $this->createDatabase($db);
153
- $this->deleteDbObj($db);
154
146
  }
155
147
  public function testCreateTable()
156
148
  {
157
- $db = $this->getDbObj();
149
+ $db = new Bz\database();
158
150
  $this->createTable($db);
159
- $this->deleteDbObj($db);
160
151
  }
161
- public function testOpenTable()
152
+ // open database, not call close explicitly
153
+ public function testOpenDatabase()
162
154
  {
163
- $db = $this->getDbObj();
155
+ $db = new Bz\database();
156
+ $db->open(URL);
157
+ }
158
+ // open database, call close explicitly
159
+ public function testCloseDatabase()
160
+ {
161
+ $db = new Bz\database();
162
+ $db->open(URL);
163
+ $db->close();
164
+ }
165
+ // open database, open table, not call close explicitly
166
+ public function testOpenA()
167
+ {
168
+ $db = new Bz\database();
169
+ $db->open(URL);
170
+ $tb = $this->openTable($db);
171
+ }
172
+ // open database, open table, call close explicitly
173
+ public function testOpenB()
174
+ {
175
+ $db = new Bz\database();
176
+ $db->open(URL);
164
177
  $tb = $this->openTable($db);
165
178
  $tb->close();
166
- $this->deleteDbObj($db);
179
+ $db->close();
180
+ }
181
+ // open database, open table, call database::close explicitly
182
+ public function testOpenC()
183
+ {
184
+ $db = new Bz\database();
185
+ $db->open(URL);
186
+ $tb = $this->openTable($db);
187
+ $db->close();
188
+ }
189
+ // open database, open table, call table::close explicitly
190
+ public function testOpenD()
191
+ {
192
+ $db = new Bz\database();
193
+ $db->open(URL);
194
+ $tb = $this->openTable($db);
195
+ $tb->close();
196
+ }
197
+ // open database, open table, call table::release explicitly
198
+ public function testOpenE()
199
+ {
200
+ $db = new Bz\database();
201
+ $db->open(URL);
202
+ $tb = $this->openTable($db);
203
+ $tb->release();
204
+ }
205
+ public function testClone()
206
+ {
207
+ $db = new Bz\database();
208
+ $db->open(URL);
209
+ $this->assertEquals($db->stat(), 0);
210
+ $this->assertEquals($db->isOpened(), true);
211
+ $db2 = clone $db;
212
+ $this->assertEquals($db2->stat(), 0);
213
+ $this->assertEquals($db2->isOpened(), true);
214
+ //echo("\ndb->_cPtr " . $db->_cPtr . "\ndb2->_cPtr " . $db2->_cPtr . "\n");
215
+ $db2->close();
216
+ $this->assertEquals($db2->stat(), 0);
217
+ $this->assertEquals($db2->isOpened(), false);
218
+ unset($db2);
219
+ $this->assertEquals($db->stat(), 0);
220
+ $this->assertEquals($db->isOpened(), true);
167
221
  }
168
222
  public function testVersion()
169
223
  {
170
- $db = $this->getDbObj();
224
+ $db = new Bz\database();
171
225
  $db->connect(PROTOCOL . HOSTNAME);
172
226
  $this->assertEquals($db->stat(), 0);
173
- $vv = new btrVersions();
227
+ $vv = new Bz\btrVersions();
174
228
  $db->getBtrVersion($vv);
175
229
  $this->assertEquals($db->stat(), 0);
176
230
  $client_ver = $vv->version(0);
177
231
  $server_ver = $vv->version(1);
178
232
  $engine_ver = $vv->version(2);
179
- $this->assertEquals($client_ver->majorVersion, transactd::CPP_INTERFACE_VER_MAJOR);
180
- $this->assertEquals($client_ver->minorVersion, transactd::CPP_INTERFACE_VER_MINOR);
233
+ $this->assertEquals($client_ver->majorVersion, Bz\transactd::CPP_INTERFACE_VER_MAJOR);
234
+ $this->assertEquals($client_ver->minorVersion, Bz\transactd::CPP_INTERFACE_VER_MINOR);
181
235
  $this->assertEquals(chr($client_ver->type), 'N');
182
236
  $this->assertTrue($server_ver->majorVersion >= 5);
183
237
  $this->assertTrue($server_ver->majorVersion != 5 || $server_ver->minorVersion >= 5);
184
238
  $this->assertEquals(chr($server_ver->type), 'M');
185
- $this->assertEquals($engine_ver->majorVersion, transactd::TRANSACTD_VER_MAJOR);
186
- $this->assertEquals($engine_ver->minorVersion, transactd::TRANSACTD_VER_MINOR);
239
+ $this->assertEquals($engine_ver->majorVersion, Bz\transactd::TRANSACTD_VER_MAJOR);
240
+ $this->assertEquals($engine_ver->minorVersion, Bz\transactd::TRANSACTD_VER_MINOR);
187
241
  $this->assertEquals(chr($engine_ver->type), 'T');
188
242
  }
189
243
  public function testInsert()
190
244
  {
191
- $db = $this->getDbObj();
245
+ $db = new Bz\database();
192
246
  $tb = $this->openTable($db);
193
247
  $this->assertNotEquals($tb, NULL);
194
248
  $this->assertEquals($tb->recordCount(), 0);
@@ -215,12 +269,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
215
269
  $tb->commitBulkInsert();
216
270
  $this->assertEquals($tb->stat(), 0);
217
271
  $db->endTrn();
218
- $tb->close();
219
- $this->deleteDbObj($db);
220
272
  }
221
273
  public function testFind()
222
274
  {
223
- $db = $this->getDbObj();
275
+ $db = new Bz\database();
224
276
  $tb = $this->openTable($db);
225
277
  $this->assertNotEquals($tb, NULL);
226
278
  $tb->setKeyNum(0);
@@ -228,7 +280,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
228
280
  $tb->setFilter('id >= 10 and id < ' . TEST_COUNT, 1, 0);
229
281
  $v = 10;
230
282
  $tb->setFV(FDI_ID, $v);
231
- $tb->find(table::findForword);
283
+ $tb->find(Bz\table::findForword);
232
284
  $i = $v;
233
285
  while ($i < TEST_COUNT)
234
286
  {
@@ -241,7 +293,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
241
293
  $tb->clearBuffer();
242
294
  $v = TEST_COUNT - 1;
243
295
  $tb->setFV(FDI_ID, $v);
244
- $tb->find(table::findBackForword);
296
+ $tb->find(Bz\table::findBackForword);
245
297
  $i = $v;
246
298
  while ($i >= 10)
247
299
  {
@@ -254,14 +306,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
254
306
  $tb->clearBuffer();
255
307
  $v = TEST_COUNT;
256
308
  $tb->setFV(FDI_ID, $v);
257
- $tb->find(table::findForword);
258
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
259
- $tb->close();
260
- $this->deleteDbObj($db);
309
+ $tb->find(Bz\table::findForword);
310
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
261
311
  }
262
312
  public function testFindNext()
263
313
  {
264
- $db = $this->getDbObj();
314
+ $db = new Bz\database();
265
315
  $tb = $this->openTable($db);
266
316
  $this->assertNotEquals($tb, NULL);
267
317
  $tb->setKeyNum(0);
@@ -277,23 +327,21 @@ class transactdTest extends PHPUnit_Framework_TestCase
277
327
  $this->assertEquals($tb->stat(), 0);
278
328
  $this->assertEquals($tb->getFVint(FDI_ID), $i);
279
329
  }
280
- $tb->close();
281
- $this->deleteDbObj($db);
282
330
  }
283
331
  public function testFindIn()
284
332
  {
285
- $db = $this->getDbObj();
333
+ $db = new Bz\database();
286
334
  $tb = $this->openTable($db);
287
335
  $this->assertNotEquals($tb, NULL);
288
336
  $tb->setKeyNum(0);
289
337
  $tb->clearBuffer();
290
- $q = new queryBase();
291
- $q->addInValue('10', true);
292
- $q->addInValue('300000');
293
- $q->addInValue('50');
294
- $q->addInValue('-1');
295
- $q->addInValue('80');
296
- $q->addInValue('5000');
338
+ $q = new Bz\query();
339
+ $q->addSeekKeyValue('10', true);
340
+ $q->addSeekKeyValue('300000');
341
+ $q->addSeekKeyValue('50');
342
+ $q->addSeekKeyValue('-1');
343
+ $q->addSeekKeyValue('80');
344
+ $q->addSeekKeyValue('5000');
297
345
 
298
346
  $tb->setQuery($q);
299
347
  $this->assertEquals($tb->stat(), 0);
@@ -301,7 +349,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
301
349
  $this->assertEquals($tb->stat(), 0);
302
350
  $this->assertEquals($tb->getFVint(FDI_ID), 10);
303
351
  $tb->findNext();
304
- $this->assertEquals($tb->stat(), transactd::STATUS_NOT_FOUND_TI);
352
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_NOT_FOUND_TI);
305
353
 
306
354
  $msg = $tb->keyValueDescription();
307
355
  $this->assertEquals($msg, "table:user\nstat:4\nid = 300000\n");
@@ -309,7 +357,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
309
357
  $tb->findNext();
310
358
  $this->assertEquals($tb->getFVint(FDI_ID), 50);
311
359
  $tb->findNext();
312
- $this->assertEquals($tb->stat(), transactd::STATUS_NOT_FOUND_TI);
360
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_NOT_FOUND_TI);
313
361
 
314
362
  $msg = $tb->keyValueDescription();
315
363
  $this->assertEquals($msg, "table:user\nstat:4\nid = -1\n");
@@ -319,13 +367,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
319
367
  $tb->findNext();
320
368
  $this->assertEquals($tb->getFVint(FDI_ID), 5000);
321
369
  $tb->findNext();
322
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
370
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
323
371
 
324
372
  // Many params
325
- $q->addInValue('1', true);
373
+ $q->addSeekKeyValue('1', true);
326
374
  for($i = 2; $i <= 10000; $i++)
327
375
  {
328
- $q->addInValue(strval($i));
376
+ $q->addSeekKeyValue(strval($i));
329
377
  }
330
378
  $tb->setQuery($q);
331
379
  $this->assertEquals($tb->stat(), 0);
@@ -338,7 +386,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
338
386
  $this->assertEquals($tb->getFVint(FDI_ID), $i);
339
387
  $tb->findNext(true);
340
388
  }
341
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
389
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
342
390
  $this->assertEquals($i, 10000);
343
391
 
344
392
  //LogicalCountLimit
@@ -353,15 +401,12 @@ class transactdTest extends PHPUnit_Framework_TestCase
353
401
  $this->assertEquals($tb->getFVint(FDI_ID), $i);
354
402
  $tb->findNext(true);
355
403
  }
356
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
404
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
357
405
  $this->assertEquals($i, 10000);
358
-
359
- $tb->close();
360
- $this->deleteDbObj($db);
361
406
  }
362
407
  public function testGetPercentage()
363
408
  {
364
- $db = $this->getDbObj();
409
+ $db = new Bz\database();
365
410
  $tb = $this->openTable($db);
366
411
  $this->assertNotEquals($tb, NULL);
367
412
  $tb->clearBuffer();
@@ -371,12 +416,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
371
416
  $this->assertEquals($tb->stat(), 0);
372
417
  $per = $tb->getPercentage();
373
418
  $this->assertTrue(abs(5000 - $per) < 500); // 500 = 5%
374
- $tb->close();
375
- $this->deleteDbObj($db);
376
419
  }
377
420
  public function testMovePercentage()
378
421
  {
379
- $db = $this->getDbObj();
422
+ $db = new Bz\database();
380
423
  $tb = $this->openTable($db);
381
424
  $this->assertNotEquals($tb, NULL);
382
425
  $tb->clearBuffer();
@@ -385,12 +428,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
385
428
  $v = $tb->getFVint(FDI_ID);
386
429
  $this->assertEquals($tb->stat(), 0);
387
430
  $this->assertTrue(abs(TEST_COUNT / 2 + 1 - $v) < FIVE_PERCENT_OF_TEST_COUNT);
388
- $tb->close();
389
- $this->deleteDbObj($db);
390
431
  }
391
432
  public function testGetEqual()
392
433
  {
393
- $db = $this->getDbObj();
434
+ $db = new Bz\database();
394
435
  $tb = $this->openTable($db);
395
436
  $this->assertNotEquals($tb, NULL);
396
437
  $db->beginSnapshot();
@@ -402,12 +443,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
402
443
  $this->assertEquals($tb->getFVint(FDI_ID), $i);
403
444
  }
404
445
  $db->endSnapshot();
405
- $tb->close();
406
- $this->deleteDbObj($db);
407
446
  }
408
447
  public function testGetNext()
409
448
  {
410
- $db = $this->getDbObj();
449
+ $db = new Bz\database();
411
450
  $tb = $this->openTable($db);
412
451
  $this->assertNotEquals($tb, NULL);
413
452
  $db->beginSnapshot();
@@ -422,12 +461,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
422
461
  $this->assertEquals($tb->getFVint(FDI_ID), $i);
423
462
  }
424
463
  $db->endSnapshot();
425
- $tb->close();
426
- $this->deleteDbObj($db);
427
464
  }
428
465
  public function testGetPrevious()
429
466
  {
430
- $db = $this->getDbObj();
467
+ $db = new Bz\database();
431
468
  $tb = $this->openTable($db);
432
469
  $this->assertNotEquals($tb, NULL);
433
470
  $db->beginSnapshot();
@@ -444,12 +481,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
444
481
  $tb->seekPrev();
445
482
  $this->assertEquals($tb->getFVstr(FDI_NAME), 'kosaka');
446
483
  $db->endSnapshot();
447
- $tb->close();
448
- $this->deleteDbObj($db);
449
484
  }
450
485
  public function testGetGreater()
451
486
  {
452
- $db = $this->getDbObj();
487
+ $db = new Bz\database();
453
488
  $tb = $this->openTable($db);
454
489
  $this->assertNotEquals($tb, NULL);
455
490
  $vv = TEST_COUNT * 3 / 4;
@@ -466,12 +501,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
466
501
  $this->assertEquals($tb->getFVint(FDI_ID), $vv + 1);
467
502
  $tb->seekPrev();
468
503
  $this->assertEquals($tb->getFVint(FDI_ID), $vv);
469
- $tb->close();
470
- $this->deleteDbObj($db);
471
504
  }
472
505
  public function testGetLessThan()
473
506
  {
474
- $db = $this->getDbObj();
507
+ $db = new Bz\database();
475
508
  $tb = $this->openTable($db);
476
509
  $this->assertNotEquals($tb, NULL);
477
510
  $vv = TEST_COUNT * 3 / 4;
@@ -488,34 +521,28 @@ class transactdTest extends PHPUnit_Framework_TestCase
488
521
  $this->assertEquals($tb->getFVint(FDI_ID), $vv - 1);
489
522
  $tb->seekPrev();
490
523
  $this->assertEquals($tb->getFVint(FDI_ID), $vv - 2);
491
- $tb->close();
492
- $this->deleteDbObj($db);
493
524
  }
494
525
  public function testGetFirst()
495
526
  {
496
- $db = $this->getDbObj();
527
+ $db = new Bz\database();
497
528
  $tb = $this->openTable($db);
498
529
  $this->assertNotEquals($tb, NULL);
499
530
  $tb->clearBuffer();
500
531
  $tb->seekFirst();
501
532
  $this->assertEquals($tb->getFVstr(FDI_NAME), 'kosaka');
502
- $tb->close();
503
- $this->deleteDbObj($db);
504
533
  }
505
534
  public function testGetLast()
506
535
  {
507
- $db = $this->getDbObj();
536
+ $db = new Bz\database();
508
537
  $tb = $this->openTable($db);
509
538
  $this->assertNotEquals($tb, NULL);
510
539
  $tb->clearBuffer();
511
540
  $tb->seekLast();
512
541
  $this->assertEquals($tb->getFVstr(FDI_NAME), '' . (TEST_COUNT + 2));
513
- $tb->close();
514
- $this->deleteDbObj($db);
515
542
  }
516
543
  public function testMovePosition()
517
544
  {
518
- $db = $this->getDbObj();
545
+ $db = new Bz\database();
519
546
  $tb = $this->openTable($db);
520
547
  $this->assertNotEquals($tb, NULL);
521
548
  $vv = TEST_COUNT * 3 / 4;
@@ -535,12 +562,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
535
562
  $this->assertEquals($tb->getFVint(FDI_ID), $vv - 2);
536
563
  $tb->seekByBookmark($ps);
537
564
  $this->assertEquals($tb->getFVint(FDI_ID), $ps_vv);
538
- $tb->close();
539
- $this->deleteDbObj($db);
540
565
  }
541
566
  public function testUpdate()
542
567
  {
543
- $db = $this->getDbObj();
568
+ $db = new Bz\database();
544
569
  $tb = $this->openTable($db);
545
570
  $this->assertNotEquals($tb, NULL);
546
571
  $db->beginTrn();
@@ -552,7 +577,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
552
577
  $this->assertEquals($tb->stat(), 0);
553
578
  $v = TEST_COUNT + TEST_COUNT / 2;
554
579
  $tb->setFV(FDI_ID, $v);
555
- $tb->update(table::changeCurrentNcc); // 5 . 30000 cur 5
580
+ $tb->update(Bz\table::changeCurrentNcc); // 5 . 30000 cur 5
556
581
  $this->assertEquals($tb->stat(), 0);
557
582
  $tb->seekNext(); // next 5
558
583
  $this->assertEquals($tb->getFVint(FDI_ID), 6);
@@ -562,14 +587,14 @@ class transactdTest extends PHPUnit_Framework_TestCase
562
587
  $this->assertEquals($tb->getFVint(FDI_ID), $v);
563
588
  $v = 5;
564
589
  $tb->setFV(FDI_ID, $v);
565
- $tb->update(table::changeCurrentCc); // 19999 . 5 cur 5
590
+ $tb->update(Bz\table::changeCurrentCc); // 19999 . 5 cur 5
566
591
  $this->assertEquals($tb->stat(), 0);
567
592
  $tb->seekNext();
568
593
  $this->assertEquals($tb->stat(), 0);
569
594
  $this->assertEquals($tb->getFVint(FDI_ID), 6);
570
595
  $v = TEST_COUNT - 1;
571
596
  $tb->setFV(FDI_ID, $v);
572
- $tb->update(table::changeCurrentCc); // 6 . 19999 cur 19999
597
+ $tb->update(Bz\table::changeCurrentCc); // 6 . 19999 cur 19999
573
598
  $tb->seekPrev(); // prev 19999
574
599
  $this->assertEquals($tb->getFVint(FDI_ID), $v -1);
575
600
  $v = 10;
@@ -595,19 +620,17 @@ class transactdTest extends PHPUnit_Framework_TestCase
595
620
  $v = 8;
596
621
  $tb->setFV(FDI_ID, $v);
597
622
  $tb->setFV(FDI_NAME, 'ABC');
598
- $tb->update(table::changeInKey);
623
+ $tb->update(Bz\table::changeInKey);
599
624
  $this->assertEquals($tb->stat(), 0);
600
625
  $tb->clearBuffer();
601
626
  $tb->setFV(FDI_ID, $v);
602
627
  $tb->seek();
603
628
  $this->assertEquals($tb->getFVstr(FDI_NAME), 'ABC');
604
- $tb->close();
605
- $this->deleteDbObj($db);
606
629
  }
607
630
  public function testSnapShot()
608
631
  {
609
- $db = $this->getDbObj();
610
- $db2 = $this->getDbObj();
632
+ $db = new Bz\database();
633
+ $db2 = new Bz\database();
611
634
  $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
612
635
  $this->assertEquals($db2->stat(), 0);
613
636
  $tb = $this->openTable($db);
@@ -631,7 +654,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
631
654
  if (ISOLATION_READ_COMMITTED)
632
655
  $this->assertEquals($tb2->stat(), 0);
633
656
  elseif (ISOLATION_REPEATABLE_READ)
634
- $this->assertEquals($tb2->stat(), transactd::STATUS_LOCK_ERROR);
657
+ $this->assertEquals($tb2->stat(), Bz\transactd::STATUS_LOCK_ERROR);
635
658
  // ----------------------------------------------------
636
659
  $tb->seekFirst();
637
660
  $secondValue = $tb->getFVstr(FDI_NAME);
@@ -643,15 +666,61 @@ class transactdTest extends PHPUnit_Framework_TestCase
643
666
  else
644
667
  $this->assertEquals($secondValue, $firstValue);
645
668
  // ----------------------------------------------------
646
- $tb->close();
647
- $tb2->close();
648
- $this->deleteDbObj($db);
649
- $this->deleteDbObj($db2);
669
+ }
670
+ public function testConflict()
671
+ {
672
+ $db = new Bz\database();
673
+ $db2 = new Bz\database();
674
+ $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
675
+ $this->assertEquals($db2->stat(), 0);
676
+ $tb = $this->openTable($db);
677
+ $this->assertNotEquals($tb, NULL);
678
+ $tb2 = $this->openTable($db2);
679
+ $this->assertNotEquals($tb2, NULL);
680
+ $tb->setKeyNum(0);
681
+ $tb->seekFirst();
682
+ $this->assertEquals($tb->stat(), 0);
683
+ // ----------------------------------------------------
684
+ // Change Index field
685
+ // ----------------------------------------------------
686
+ // Change data by another connection
687
+ $tb2->setKeyNum(0);
688
+ $tb2->seekFirst();
689
+ $this->assertEquals($tb2->stat(), 0);
690
+ $tb2->setFV(FDI_ID, $tb2->getFVint(FDI_ID) - 10);
691
+ $tb2->update();
692
+ $this->assertEquals($tb2->stat(), 0);
693
+ // ----------------------------------------------------
694
+ // Change same record data by original connection
695
+ $tb->setFV(FDI_ID, $tb->getFVint(FDI_ID) - 8);
696
+ $tb->update();
697
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_CHANGE_CONFLICT);
698
+ // ----------------------------------------------------
699
+ // Change Non index field
700
+ // ----------------------------------------------------
701
+ // Change data by another connection
702
+ $tb->seekFirst();
703
+ $this->assertEquals($tb->stat(), 0);
704
+ $tb2->seekFirst();
705
+ $this->assertEquals($tb2->stat(), 0);
706
+ $tb2->setFV(FDI_NAME, $tb2->getFVint(FDI_ID) - 10);
707
+ $tb2->update();
708
+ $this->assertEquals($tb2->stat(), 0);
709
+ // ----------------------------------------------------
710
+ // Change same record data by original connection
711
+ $tb->setFV(FDI_NAME, $tb->getFVint(FDI_NAME) - 8);
712
+ $tb->update();
713
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_CHANGE_CONFLICT);
714
+ // ----------------------------------------------------
715
+ $tb2->release();
716
+ $tb->release();
717
+ unset($db2);
718
+ unset($db);
650
719
  }
651
720
  public function testTransactionLock()
652
721
  {
653
- $db = $this->getDbObj();
654
- $db2 = $this->getDbObj();
722
+ $db = new Bz\database();
723
+ $db2 = new Bz\database();
655
724
  $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
656
725
  $this->assertEquals($db2->stat(), 0);
657
726
  $tb = $this->openTable($db);
@@ -661,7 +730,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
661
730
  // ----------------------------------------------------
662
731
  // Read test that single record lock with read
663
732
  // ----------------------------------------------------
664
- $db->beginTrn(transactd::LOCK_SINGLE_NOWAIT);
733
+ $db->beginTrn(Bz\transactd::LOCK_SINGLE_NOWAIT);
665
734
  $tb->setKeyNum(0);
666
735
  $tb->seekFirst();
667
736
  $this->assertEquals($tb->stat(), 0);
@@ -678,7 +747,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
678
747
  // ----------------------------------------------------
679
748
  // Can't read test that multi record lock with read
680
749
  // ----------------------------------------------------
681
- $db->beginTrn(transactd::LOCK_MULTI_NOWAIT);
750
+ $db->beginTrn(Bz\transactd::LOCK_MULTI_NOWAIT);
682
751
  $tb->setKeyNum(0);
683
752
  $tb->seekFirst();
684
753
  $this->assertEquals($tb->stat(), 0);
@@ -686,18 +755,18 @@ class transactdTest extends PHPUnit_Framework_TestCase
686
755
  $tb->seekNext();
687
756
  // not transactional user can not read
688
757
  $tb2->seekFirst();
689
- $this->assertEquals($tb2->stat(), transactd::STATUS_LOCK_ERROR);
758
+ $this->assertEquals($tb2->stat(), Bz\transactd::STATUS_LOCK_ERROR);
690
759
  // The second transactional user can not lock same record
691
760
  $db2->beginTrn();
692
761
  $tb2->setKeyNum(0);
693
762
  $tb2->seekFirst();
694
- $this->assertEquals($tb2->stat(), transactd::STATUS_LOCK_ERROR);
763
+ $this->assertEquals($tb2->stat(), Bz\transactd::STATUS_LOCK_ERROR);
695
764
  $db2->endTrn();
696
765
  $db->endTrn();
697
766
  // ----------------------------------------------------
698
767
  // Can't read test that single record lock with change
699
768
  // ----------------------------------------------------
700
- $db->beginTrn(transactd::LOCK_SINGLE_NOWAIT);
769
+ $db->beginTrn(Bz\transactd::LOCK_SINGLE_NOWAIT);
701
770
  $tb->setKeyNum(0);
702
771
  $tb->seekFirst();
703
772
  $this->assertEquals($tb->stat(), 0);
@@ -707,17 +776,17 @@ class transactdTest extends PHPUnit_Framework_TestCase
707
776
  // move from first record.
708
777
  $tb->seekNext();
709
778
  $tb2->seekFirst();
710
- $this->assertEquals($tb2->stat(), transactd::STATUS_LOCK_ERROR);
779
+ $this->assertEquals($tb2->stat(), Bz\transactd::STATUS_LOCK_ERROR);
711
780
  $db2->beginTrn();
712
781
  $tb2->setKeyNum(0);
713
782
  $tb2->seekFirst();
714
- $this->assertEquals($tb2->stat(), transactd::STATUS_LOCK_ERROR);
783
+ $this->assertEquals($tb2->stat(), Bz\transactd::STATUS_LOCK_ERROR);
715
784
  $db2->endTrn();
716
785
  $db->endTrn();
717
786
  // ----------------------------------------------------
718
787
  // Abort test that Single record lock transaction
719
788
  // ----------------------------------------------------
720
- $db->beginTrn(transactd::LOCK_SINGLE_NOWAIT);
789
+ $db->beginTrn(Bz\transactd::LOCK_SINGLE_NOWAIT);
721
790
  $tb->setKeyNum(0);
722
791
  $tb->seekFirst();
723
792
  $this->assertEquals($tb->stat(), 0);
@@ -730,64 +799,91 @@ class transactdTest extends PHPUnit_Framework_TestCase
730
799
  $tb2->setKeyNum(0);
731
800
  $tb2->seekFirst();
732
801
  $this->assertEquals($tb2->getFVstr(FDI_NAME), 'ABC');
733
- $tb->close();
734
- $tb2->close();
735
- $this->deleteDbObj($db);
736
- $this->deleteDbObj($db2);
737
802
  }
738
- public function testConflict()
803
+ public function testExclusive()
739
804
  {
740
- $db = $this->getDbObj();
741
- $db2 = $this->getDbObj();
805
+ // db mode exclusive
806
+ $db = new Bz\database();
807
+ $db->open(URL, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_EXCLUSIVE);
808
+ $this->assertEquals($db->stat(), 0);
809
+ $tb = $db->openTable(TABLENAME);
810
+ $this->assertEquals($db->stat(), 0);
811
+
812
+ // Can not open database from other connections.
813
+ $db2 = new Bz\database();
742
814
  $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
743
815
  $this->assertEquals($db2->stat(), 0);
744
- $tb = $this->openTable($db);
745
- $this->assertNotEquals($tb, NULL);
746
- $tb2 = $this->openTable($db2);
747
- $this->assertNotEquals($tb2, NULL);
816
+ $db2->open(URL, Bz\transactd::TYPE_SCHEMA_BDF);
817
+ $this->assertEquals($db2->stat(), Bz\transactd::STATUS_CANNOT_LOCK_TABLE);
818
+
819
+ $tb2 = $db->openTable(TABLENAME);
820
+ $this->assertEquals($db->stat(), 0);
821
+
748
822
  $tb->setKeyNum(0);
749
823
  $tb->seekFirst();
750
824
  $this->assertEquals($tb->stat(), 0);
751
- // ----------------------------------------------------
752
- // Change Index field
753
- // ----------------------------------------------------
754
- // Change data by another connection
755
- $tb2->setKeyNum(0);
756
- $tb2->seekFirst();
757
- $this->assertEquals($tb2->stat(), 0);
758
- $tb2->setFV(FDI_ID, $tb2->getFVint(FDI_ID) - 10);
759
- $tb2->update();
760
- $this->assertEquals($tb2->stat(), 0);
761
- // ----------------------------------------------------
762
- // Change same record data by original connection
763
- $tb->setFV(FDI_ID, $tb->getFVint(FDI_ID) - 8);
825
+
826
+ $tb->setFV(FDI_NAME, 'ABC123');
764
827
  $tb->update();
765
- $this->assertEquals($tb->stat(), transactd::STATUS_CHANGE_CONFLICT);
766
- // ----------------------------------------------------
767
- // Change Non index field
768
- // ----------------------------------------------------
769
- // Change data by another connection
770
- $tb->seekFirst();
771
828
  $this->assertEquals($tb->stat(), 0);
829
+
830
+ $tb2->setKeyNum(0);
772
831
  $tb2->seekFirst();
773
832
  $this->assertEquals($tb2->stat(), 0);
774
- $tb2->setFV(FDI_NAME, $tb2->getFVint(FDI_ID) - 10);
833
+ $tb2->setFV(FDI_NAME, 'ABC124');
775
834
  $tb2->update();
776
835
  $this->assertEquals($tb2->stat(), 0);
777
- // ----------------------------------------------------
778
- // Change same record data by original connection
779
- $tb->setFV(FDI_NAME, $tb->getFVint(FDI_NAME) - 8);
780
- $tb->update();
781
- $this->assertEquals($tb->stat(), transactd::STATUS_CHANGE_CONFLICT);
782
- // ----------------------------------------------------
836
+
783
837
  $tb->close();
784
838
  $tb2->close();
785
- $this->deleteDbObj($db);
786
- $this->deleteDbObj($db2);
839
+ $db->close();
840
+ $db2->close();
841
+
842
+ // table mode exclusive
843
+ $db = new Bz\database();
844
+ $db->open(URL, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_READONLY);
845
+ $this->assertEquals($db->stat(), 0);
846
+ $tb = $db->openTable(TABLENAME, Bz\transactd::TD_OPEN_EXCLUSIVE);
847
+ $this->assertEquals($db->stat(), 0);
848
+
849
+ $db2 = new Bz\database();
850
+ $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
851
+ $this->assertEquals($db2->stat(), 0);
852
+ $db2->open(URL, Bz\transactd::TYPE_SCHEMA_BDF);
853
+ $this->assertEquals($db2->stat(), 0);
854
+
855
+ // Can not open table from other connections.
856
+ $tb2 = $db2->openTable(TABLENAME);
857
+ $this->assertEquals($db2->stat(), Bz\transactd::STATUS_CANNOT_LOCK_TABLE);
858
+
859
+ // Can open table from the same connection.
860
+ $tb3 = $db->openTable(TABLENAME);
861
+ $this->assertEquals($db->stat(), 0);
862
+
863
+ $tb->close();
864
+ if ($tb2 != NULL) { $tb2->close(); }
865
+ $tb3->close();
866
+ $db->close();
867
+ $db2->close();
868
+
869
+ // reopen and update
870
+ $db = new Bz\database();
871
+ $db->open(URL);
872
+ $this->assertEquals($db->stat(), 0);
873
+ $tb = $db->openTable(TABLENAME);
874
+ $this->assertEquals($db->stat(), 0);
875
+
876
+ $tb->setKeyNum(0);
877
+ $tb->seekFirst();
878
+ $this->assertEquals($tb->stat(), 0);
879
+
880
+ $tb->setFV(FDI_NAME, 'ABC123');
881
+ $tb->update();
882
+ $this->assertEquals($tb->stat(), 0);
787
883
  }
788
884
  public function testInsert2()
789
885
  {
790
- $db = $this->getDbObj();
886
+ $db = new Bz\database();
791
887
  $tb = $this->openTable($db);
792
888
  $this->assertNotEquals($tb, NULL);
793
889
  $v = TEST_COUNT * 2;
@@ -804,17 +900,15 @@ class transactdTest extends PHPUnit_Framework_TestCase
804
900
  $tb->seekNext();
805
901
  $this->assertEquals($tb->getFVint(FDI_ID), 11);
806
902
  $db->endTrn();
807
- $tb->close();
808
- $this->deleteDbObj($db);
809
903
  }
810
904
  public function testDelete()
811
905
  {
812
- $db = $this->getDbObj();
906
+ $db = new Bz\database();
813
907
  $tb = $this->openTable($db);
814
908
  $this->assertNotEquals($tb, NULL);
815
909
  // estimate count
816
910
  $count = $tb->recordCount(true);
817
- $is_valid_count = (abs($count - TEST_COUNT - 3) < FIVE_PERCENT_OF_TEST_COUNT);
911
+ $is_valid_count = (abs($count - TEST_COUNT) < ALLOWABLE_ERROR_DISTANCE_IN_ESTIMATE_COUNT);
818
912
  $this->assertTrue($is_valid_count);
819
913
  if (! $is_valid_count)
820
914
  print("true record count = " . (TEST_COUNT + 3) . " and estimate recordCount count = " . $count);
@@ -837,7 +931,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
837
931
  $tb->clearBuffer();
838
932
  $tb->setFV(FDI_ID, $vv);
839
933
  $tb->seek();
840
- $this->assertEquals($tb->stat(), transactd::STATUS_NOT_FOUND_TI);
934
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_NOT_FOUND_TI);
841
935
  $db->beginTrn();
842
936
  $tb->stepFirst();
843
937
  while ($tb->stat() == 0)
@@ -849,56 +943,48 @@ class transactdTest extends PHPUnit_Framework_TestCase
849
943
  $this->assertEquals($tb->stat(), 9);
850
944
  $db->endTrn();
851
945
  $this->assertEquals($tb->recordCount(false), 0);
852
- $tb->close();
853
- $this->deleteDbObj($db);
854
946
  }
855
947
  public function testSetOwner()
856
948
  {
857
- $db = $this->getDbObj();
949
+ $db = new Bz\database();
858
950
  $tb = $this->openTable($db);
859
951
  $this->assertNotEquals($tb, NULL);
860
952
  $tb->setOwnerName("ABCDEFG");
861
953
  $this->assertEquals($tb->stat(), 0);
862
954
  $tb->clearOwnerName();
863
955
  $this->assertEquals($tb->stat(), 0);
864
- $tb->close();
865
- $this->deleteDbObj($db);
866
956
  }
867
957
  public function testDropIndex()
868
958
  {
869
- $db = $this->getDbObj();
959
+ $db = new Bz\database();
870
960
  $tb = $this->openTable($db);
871
961
  $this->assertNotEquals($tb, NULL);
872
962
  $tb->dropIndex(false);
873
963
  $this->assertEquals($tb->stat(), 0);
874
- $tb->close();
875
- $this->deleteDbObj($db);
876
964
  }
877
965
  public function testDropDatabase()
878
966
  {
879
- $db = $this->getDbObj();
967
+ $db = new Bz\database();
880
968
  $this->dropDatabase($db);
881
- $this->deleteDbObj($db);
882
969
  }
883
970
  public function testLogin()
884
971
  {
885
- $db = $this->getDbObj();
972
+ $db = new Bz\database();
886
973
  $db->connect(PROTOCOL . HOSTNAME);
887
974
  $this->assertEquals($db->stat(), 0);
888
975
  if ($db->stat() == 0)
889
976
  {
890
977
  // second connection
891
- $db2 = $this->getDbObj();
978
+ $db2 = new Bz\database();
892
979
  $db2->connect(PROTOCOL . HOSTNAME . DBNAME, true);
893
980
  $this->assertEquals($db->stat(), 0);
894
- $this->deleteDbObj($db2);
895
981
  $db->disconnect(PROTOCOL . HOSTNAME);
896
982
  $this->assertEquals($db->stat(), 0);
897
983
  }
898
984
  // invalid host name
899
985
  $db->connect(PROTOCOL . 'localhost123/');
900
- $is_valid_stat = ($db->stat() == transactd::ERROR_TD_INVALID_CLINETHOST) ||
901
- ($db->stat() == transactd::ERROR_TD_HOSTNAME_NOT_FOUND);
986
+ $is_valid_stat = ($db->stat() == Bz\transactd::ERROR_TD_INVALID_CLINETHOST) ||
987
+ ($db->stat() == Bz\transactd::ERROR_TD_HOSTNAME_NOT_FOUND);
902
988
  $this->assertTrue($is_valid_stat);
903
989
  if (! $is_valid_stat)
904
990
  print('bad host $db->stat() = ' . $db->stat());
@@ -922,7 +1008,6 @@ class transactdTest extends PHPUnit_Framework_TestCase
922
1008
  $this->assertEquals($db->stat(), 25000 + 1049);
923
1009
  $db->disconnect(PROTOCOL . HOSTNAME . DBNAME);
924
1010
  $this->assertEquals($db->stat(), 0);
925
- $this->deleteDbObj($db);
926
1011
  }
927
1012
 
928
1013
  /* -----------------------------------------------------
@@ -936,7 +1021,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
936
1021
  private function isUtf16leSupport($db)
937
1022
  {
938
1023
  // CHARSET_UTF16LE supported on MySQL 5.6 or later
939
- $vv = new btrVersions();
1024
+ $vv = new Bz\btrVersions();
940
1025
  $db->getBtrVersion($vv);
941
1026
  $server_ver = $vv->version(1);
942
1027
  if ('M' == chr($server_ver->type))
@@ -954,7 +1039,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
954
1039
  // create table
955
1040
  $dbdef = $db->dbDef();
956
1041
  $this->assertNotEquals($dbdef, NULL);
957
- $td = new tabledef();
1042
+ $td = new Bz\tabledef();
958
1043
  $td->setTableName($name);
959
1044
  $td->setFileName($name . '.dat');
960
1045
  $td->id = $id;
@@ -968,7 +1053,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
968
1053
  // id
969
1054
  $fd = $dbdef->insertField($id, 0);
970
1055
  $fd->setName('id');
971
- $fd->type = transactd::ft_integer;
1056
+ $fd->type = Bz\transactd::ft_integer;
972
1057
  $fd->len = 4;
973
1058
  $dbdef->updateTableDef($id);
974
1059
  $this->assertEquals($dbdef->stat(), 0);
@@ -976,16 +1061,16 @@ class transactdTest extends PHPUnit_Framework_TestCase
976
1061
  $fd = $dbdef->insertField($id, 1);
977
1062
  $fd->setName('name');
978
1063
  $fd->type = $fieldType;
979
- if ($fieldType == transactd::ft_mywvarchar)
980
- $fd->len = 1 + transactd::charsize(transactd::CHARSET_UTF16LE) * 3; // max 3 char len byte
981
- elseif ($fieldType == transactd::ft_mywvarbinary)
982
- $fd->len = 1 + transactd::charsize(transactd::CHARSET_UTF16LE) * 3; // max 6 char len byte
983
- elseif ($fieldType == transactd::ft_myvarchar)
1064
+ if ($fieldType == Bz\transactd::ft_mywvarchar)
1065
+ $fd->len = 1 + Bz\transactd::charsize(Bz\transactd::CHARSET_UTF16LE) * 3; // max 3 char len byte
1066
+ elseif ($fieldType == Bz\transactd::ft_mywvarbinary)
1067
+ $fd->len = 1 + Bz\transactd::charsize(Bz\transactd::CHARSET_UTF16LE) * 3; // max 6 char len byte
1068
+ elseif ($fieldType == Bz\transactd::ft_myvarchar)
984
1069
  {
985
- if ($charset == transactd::CHARSET_CP932)
986
- $fd->len = 1 + transactd::charsize(transactd::CHARSET_CP932) * 3; // max 6 char len byte
987
- elseif($charset == transactd::CHARSET_UTF8B4)
988
- $fd->len = 1 + transactd::charsize(transactd::CHARSET_UTF8B4) * 3; // max 6 char len byte
1070
+ if ($charset == Bz\transactd::CHARSET_CP932)
1071
+ $fd->len = 1 + Bz\transactd::charsize(Bz\transactd::CHARSET_CP932) * 3; // max 6 char len byte
1072
+ elseif($charset == Bz\transactd::CHARSET_UTF8B4)
1073
+ $fd->len = 1 + Bz\transactd::charsize(Bz\transactd::CHARSET_UTF8B4) * 3; // max 6 char len byte
989
1074
  }
990
1075
  else
991
1076
  $fd->len = 7; // max 6 char len byte
@@ -994,7 +1079,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
994
1079
  // groupid
995
1080
  $fd = $dbdef->insertField($id, 2);
996
1081
  $fd->setName('groupid');
997
- $fd->type = transactd::ft_integer;
1082
+ $fd->type = Bz\transactd::ft_integer;
998
1083
  $fd->len = 4;
999
1084
  $dbdef->updateTableDef($id);
1000
1085
  $this->assertEquals($dbdef->stat(), 0);
@@ -1023,14 +1108,13 @@ class transactdTest extends PHPUnit_Framework_TestCase
1023
1108
  // open
1024
1109
  $tb = $db->openTable($id);
1025
1110
  $this->assertEquals($db->stat(), 0);
1026
- $tb->close();
1027
1111
  }
1028
1112
 
1029
1113
  public function testCreateDatabaseVar()
1030
1114
  {
1031
- $db = $this->getDbObj();
1115
+ $db = new Bz\database();
1032
1116
  $db->create(URL_VAR);
1033
- if ($db->stat() == transactd::STATUS_TABLE_EXISTS_ERROR)
1117
+ if ($db->stat() == Bz\transactd::STATUS_TABLE_EXISTS_ERROR)
1034
1118
  {
1035
1119
  $this->testDropDatabaseVar();
1036
1120
  $db->create(URL_VAR);
@@ -1038,22 +1122,21 @@ class transactdTest extends PHPUnit_Framework_TestCase
1038
1122
  $this->assertEquals($db->stat(), 0);
1039
1123
  if (0 == $db->stat())
1040
1124
  {
1041
- $db->open(URL_VAR, 0, 0);
1125
+ $db->open(URL_VAR, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
1042
1126
  $this->assertEquals($db->stat(), 0);
1043
1127
  }
1044
1128
  if (0 == $db->stat())
1045
1129
  {
1046
- $this->createVarTable($db, 1, 'user1', transactd::ft_myvarchar, transactd::CHARSET_CP932);
1047
- $this->createVarTable($db, 2, 'user2', transactd::ft_myvarbinary, transactd::CHARSET_CP932);
1130
+ $this->createVarTable($db, 1, 'user1', Bz\transactd::ft_myvarchar, Bz\transactd::CHARSET_CP932);
1131
+ $this->createVarTable($db, 2, 'user2', Bz\transactd::ft_myvarbinary, Bz\transactd::CHARSET_CP932);
1048
1132
  if ($this->isUtf16leSupport($db))
1049
- $this->createVarTable($db, 3, 'user3', transactd::ft_mywvarchar, transactd::CHARSET_CP932);
1050
- $this->createVarTable($db, 4, 'user4', transactd::ft_mywvarbinary, transactd::CHARSET_CP932);
1051
- $this->createVarTable($db, 5, 'user5', transactd::ft_myvarchar, transactd::CHARSET_UTF8B4);
1133
+ $this->createVarTable($db, 3, 'user3', Bz\transactd::ft_mywvarchar, Bz\transactd::CHARSET_CP932);
1134
+ $this->createVarTable($db, 4, 'user4', Bz\transactd::ft_mywvarbinary, Bz\transactd::CHARSET_CP932);
1135
+ $this->createVarTable($db, 5, 'user5', Bz\transactd::ft_myvarchar, Bz\transactd::CHARSET_UTF8B4);
1052
1136
  $db->close();
1053
1137
  $db->open(URL_VAR);
1054
1138
  $this->assertEquals($db->stat(), 0);
1055
1139
  }
1056
- $this->deleteDbObj($db);
1057
1140
  }
1058
1141
  private function setGetVar($tb, $unicodeField, $varCharField)
1059
1142
  {
@@ -1205,7 +1288,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1205
1288
  }
1206
1289
  public function testVarField()
1207
1290
  {
1208
- $db = $this->getDbObj();
1291
+ $db = new Bz\database();
1209
1292
  $db->open(URL_VAR);
1210
1293
  $this->assertEquals($db->stat(), 0);
1211
1294
  $tb = $db->openTable('user1');
@@ -1236,7 +1319,6 @@ class transactdTest extends PHPUnit_Framework_TestCase
1236
1319
  // utf8 varchar
1237
1320
  $this->setGetVar($tb, true, true);
1238
1321
  $tb->close();
1239
- $this->deleteDbObj($db);
1240
1322
  }
1241
1323
  private function doVarInsert($db, $name, $codePage, $str, $startid, $endid, $bulk)
1242
1324
  {
@@ -1255,11 +1337,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
1255
1337
  if ($bulk)
1256
1338
  $tb->commitBulkInsert();
1257
1339
  $this->assertEquals($tb->stat(), 0);
1258
- $tb->close();
1259
1340
  }
1260
1341
  public function testVarInsert()
1261
1342
  {
1262
- $db = $this->getDbObj();
1343
+ $db = new Bz\database();
1263
1344
  $startid = 1;
1264
1345
  $bulk = false;
1265
1346
  $str = '漢字文字のテスト'; // too long kanji
@@ -1269,30 +1350,29 @@ class transactdTest extends PHPUnit_Framework_TestCase
1269
1350
  if (0 == $db->stat())
1270
1351
  {
1271
1352
  $utf16leSupport = $this->isUtf16leSupport($db);
1272
- $this->doVarInsert($db, 'user1', transactd::CP_ACP, $str, $startid, $startid, $bulk);
1273
- $this->doVarInsert($db, 'user2', transactd::CP_ACP, $str, $startid, $startid, $bulk);
1353
+ $this->doVarInsert($db, 'user1', Bz\transactd::CP_ACP, $str, $startid, $startid, $bulk);
1354
+ $this->doVarInsert($db, 'user2', Bz\transactd::CP_ACP, $str, $startid, $startid, $bulk);
1274
1355
  if ($utf16leSupport)
1275
- $this->doVarInsert($db, 'user3', transactd::CP_ACP, $str, $startid, $startid, $bulk);
1276
- $this->doVarInsert($db, 'user4', transactd::CP_ACP, $str, $startid, $startid, $bulk);
1277
- $this->doVarInsert($db, 'user5', transactd::CP_UTF8, $str, $startid, $startid, $bulk);
1356
+ $this->doVarInsert($db, 'user3', Bz\transactd::CP_ACP, $str, $startid, $startid, $bulk);
1357
+ $this->doVarInsert($db, 'user4', Bz\transactd::CP_ACP, $str, $startid, $startid, $bulk);
1358
+ $this->doVarInsert($db, 'user5', Bz\transactd::CP_UTF8, $str, $startid, $startid, $bulk);
1278
1359
  $startid = $startid + 1;
1279
- $this->doVarInsert($db, 'user1', transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1280
- $this->doVarInsert($db, 'user2', transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1360
+ $this->doVarInsert($db, 'user1', Bz\transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1361
+ $this->doVarInsert($db, 'user2', Bz\transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1281
1362
  if ($utf16leSupport)
1282
- $this->doVarInsert($db, 'user3', transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1283
- $this->doVarInsert($db, 'user4', transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1284
- $this->doVarInsert($db, 'user5', transactd::CP_UTF8, $str2, $startid, $startid, $bulk);
1363
+ $this->doVarInsert($db, 'user3', Bz\transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1364
+ $this->doVarInsert($db, 'user4', Bz\transactd::CP_ACP, $str2, $startid, $startid, $bulk);
1365
+ $this->doVarInsert($db, 'user5', Bz\transactd::CP_UTF8, $str2, $startid, $startid, $bulk);
1285
1366
  $startid = $startid + 1;
1286
1367
  $bulk = true;
1287
1368
  $endid = 1000;
1288
- $this->doVarInsert($db, 'user1', transactd::CP_ACP, '', $startid, $endid, $bulk);
1289
- $this->doVarInsert($db, 'user2', transactd::CP_ACP, '', $startid, $endid, $bulk);
1369
+ $this->doVarInsert($db, 'user1', Bz\transactd::CP_ACP, '', $startid, $endid, $bulk);
1370
+ $this->doVarInsert($db, 'user2', Bz\transactd::CP_ACP, '', $startid, $endid, $bulk);
1290
1371
  if ($utf16leSupport)
1291
- $this->doVarInsert($db, 'user3', transactd::CP_ACP, '', $startid, $endid, $bulk);
1292
- $this->doVarInsert($db, 'user4', transactd::CP_ACP, '', $startid, $endid, $bulk);
1293
- $this->doVarInsert($db, 'user5', transactd::CP_UTF8, '', $startid, $endid, $bulk);
1372
+ $this->doVarInsert($db, 'user3', Bz\transactd::CP_ACP, '', $startid, $endid, $bulk);
1373
+ $this->doVarInsert($db, 'user4', Bz\transactd::CP_ACP, '', $startid, $endid, $bulk);
1374
+ $this->doVarInsert($db, 'user5', Bz\transactd::CP_UTF8, '', $startid, $endid, $bulk);
1294
1375
  }
1295
- $this->deleteDbObj($db);
1296
1376
  }
1297
1377
  private function doVarRead($db, $name, $codePage, $str, $num, $ky)
1298
1378
  {
@@ -1317,11 +1397,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
1317
1397
  $this->assertTrue($is_valid_value);
1318
1398
  // test read of second field
1319
1399
  $this->assertEquals($tb->getFVint(FDI_GROUP), ($num + 10));
1320
- $tb->close();
1321
1400
  }
1322
1401
  public function testVarRead()
1323
1402
  {
1324
- $db = $this->getDbObj();
1403
+ $db = new Bz\database();
1325
1404
  $str = '漢字文';
1326
1405
  $str3 = '漢字文字のテ';
1327
1406
  $str2 ='123';
@@ -1334,29 +1413,28 @@ class transactdTest extends PHPUnit_Framework_TestCase
1334
1413
  $num = 1;
1335
1414
  $ky = 0;
1336
1415
  // too long string
1337
- $this->doVarRead($db, 'user1', transactd::CP_ACP, $str, $num, $ky);
1338
- $this->doVarRead($db, 'user2', transactd::CP_ACP, $str, $num, $ky);
1416
+ $this->doVarRead($db, 'user1', Bz\transactd::CP_ACP, $str, $num, $ky);
1417
+ $this->doVarRead($db, 'user2', Bz\transactd::CP_ACP, $str, $num, $ky);
1339
1418
  if ($utf16leSupport)
1340
- $this->doVarRead($db, 'user3', transactd::CP_ACP, $str, $num, $ky);
1341
- $this->doVarRead($db, 'user4', transactd::CP_ACP, $str3, $num, $ky);
1342
- $this->doVarRead($db, 'user5', transactd::CP_UTF8, $str, $num, $ky);
1419
+ $this->doVarRead($db, 'user3', Bz\transactd::CP_ACP, $str, $num, $ky);
1420
+ $this->doVarRead($db, 'user4', Bz\transactd::CP_ACP, $str3, $num, $ky);
1421
+ $this->doVarRead($db, 'user5', Bz\transactd::CP_UTF8, $str, $num, $ky);
1343
1422
  // short string
1344
1423
  $num = $num + 1;
1345
- $this->doVarRead($db, 'user1', transactd::CP_ACP, $str2, $num, $ky);
1346
- $this->doVarRead($db, 'user2', transactd::CP_ACP, $str4, $num, $ky);
1424
+ $this->doVarRead($db, 'user1', Bz\transactd::CP_ACP, $str2, $num, $ky);
1425
+ $this->doVarRead($db, 'user2', Bz\transactd::CP_ACP, $str4, $num, $ky);
1347
1426
  if ($utf16leSupport)
1348
- $this->doVarRead($db, 'user3', transactd::CP_ACP, $str2, $num, $ky);
1349
- $this->doVarRead($db, 'user4', transactd::CP_ACP, $str4, $num, $ky);
1350
- $this->doVarRead($db, 'user5', transactd::CP_UTF8, $str2, $num, $ky);
1427
+ $this->doVarRead($db, 'user3', Bz\transactd::CP_ACP, $str2, $num, $ky);
1428
+ $this->doVarRead($db, 'user4', Bz\transactd::CP_ACP, $str4, $num, $ky);
1429
+ $this->doVarRead($db, 'user5', Bz\transactd::CP_UTF8, $str2, $num, $ky);
1351
1430
  $ky = 1;
1352
- $this->doVarRead($db, 'user1', transactd::CP_ACP, '120', 120, $ky);
1353
- $this->doVarRead($db, 'user2', transactd::CP_ACP, '120', 120, $ky);
1431
+ $this->doVarRead($db, 'user1', Bz\transactd::CP_ACP, '120', 120, $ky);
1432
+ $this->doVarRead($db, 'user2', Bz\transactd::CP_ACP, '120', 120, $ky);
1354
1433
  if ($utf16leSupport)
1355
- $this->doVarRead($db, 'user3', transactd::CP_ACP, '120', 120, $ky);
1356
- $this->doVarRead($db, 'user4', transactd::CP_ACP, '120', 120, $ky);
1357
- $this->doVarRead($db, 'user5', transactd::CP_UTF8, '120', 120, $ky);
1434
+ $this->doVarRead($db, 'user3', Bz\transactd::CP_ACP, '120', 120, $ky);
1435
+ $this->doVarRead($db, 'user4', Bz\transactd::CP_ACP, '120', 120, $ky);
1436
+ $this->doVarRead($db, 'user5', Bz\transactd::CP_UTF8, '120', 120, $ky);
1358
1437
  }
1359
- $this->deleteDbObj($db);
1360
1438
  }
1361
1439
  private function doVarFilter($db, $name, $codePage, $str, $num, $ky)
1362
1440
  {
@@ -1406,11 +1484,10 @@ class transactdTest extends PHPUnit_Framework_TestCase
1406
1484
  $tb->setFV(FDI_NAME, $str);
1407
1485
  $tb->setFV(FDI_GROUP, $v);
1408
1486
  }
1409
- $tb->close();
1410
1487
  }
1411
1488
  public function testFilterVar()
1412
1489
  {
1413
- $db = $this->getDbObj();
1490
+ $db = new Bz\database();
1414
1491
  $db->open(URL_VAR);
1415
1492
  $this->assertEquals($db->stat(), 0);
1416
1493
  if (0 == $db->stat())
@@ -1422,41 +1499,39 @@ class transactdTest extends PHPUnit_Framework_TestCase
1422
1499
  $utf16leSupport = $this->isUtf16leSupport($db);
1423
1500
  $num = 10;
1424
1501
  $ky = 0;
1425
- $this->doVarFilter($db, 'user1', transactd::CP_ACP, $str, $num, $ky);
1426
- $this->doVarFilter($db, 'user2', transactd::CP_ACP, $str, $num, $ky);
1502
+ $this->doVarFilter($db, 'user1', Bz\transactd::CP_ACP, $str, $num, $ky);
1503
+ $this->doVarFilter($db, 'user2', Bz\transactd::CP_ACP, $str, $num, $ky);
1427
1504
  if ($utf16leSupport)
1428
- $this->doVarFilter($db, 'user3', transactd::CP_ACP, $str, $num, $ky);
1429
- $this->doVarFilter($db, 'user4', transactd::CP_ACP, $str3, $num, $ky);
1430
- $this->doVarFilter($db, 'user5', transactd::CP_UTF8, $str, $num, $ky);
1505
+ $this->doVarFilter($db, 'user3', Bz\transactd::CP_ACP, $str, $num, $ky);
1506
+ $this->doVarFilter($db, 'user4', Bz\transactd::CP_ACP, $str3, $num, $ky);
1507
+ $this->doVarFilter($db, 'user5', Bz\transactd::CP_UTF8, $str, $num, $ky);
1431
1508
  //if (UNICODE)
1432
1509
  //{
1433
1510
  // // short string
1434
1511
  // $num = $num + 1;
1435
- // $this->doVarFilter($db, 'user1', transactd::CP_ACP, $str2, $num, $ky);
1436
- // $this->doVarFilter($db, 'user2', transactd::CP_ACP, $str4, $num, $ky);
1512
+ // $this->doVarFilter($db, 'user1', Bz\transactd::CP_ACP, $str2, $num, $ky);
1513
+ // $this->doVarFilter($db, 'user2', Bz\transactd::CP_ACP, $str4, $num, $ky);
1437
1514
  // if ($utf16leSupport)
1438
- // $this->doVarFilter($db, 'user3', transactd::CP_ACP, $str2, $num, $ky);
1439
- // $this->doVarFilter($db, 'user4', transactd::CP_ACP, $str4, $num, $ky);
1440
- // $this->doVarFilter($db, 'user5', transactd::CP_UTF8, $str2, $num, $ky);
1515
+ // $this->doVarFilter($db, 'user3', Bz\transactd::CP_ACP, $str2, $num, $ky);
1516
+ // $this->doVarFilter($db, 'user4', Bz\transactd::CP_ACP, $str4, $num, $ky);
1517
+ // $this->doVarFilter($db, 'user5', Bz\transactd::CP_UTF8, $str2, $num, $ky);
1441
1518
  //}
1442
1519
  $ky = 1;
1443
- $this->doVarFilter($db, 'user1', transactd::CP_ACP, '120', 120, $ky);
1444
- $this->doVarFilter($db, 'user2', transactd::CP_ACP, '120', 120, $ky);
1520
+ $this->doVarFilter($db, 'user1', Bz\transactd::CP_ACP, '120', 120, $ky);
1521
+ $this->doVarFilter($db, 'user2', Bz\transactd::CP_ACP, '120', 120, $ky);
1445
1522
  if ($utf16leSupport)
1446
- $this->doVarFilter($db, 'user3', transactd::CP_ACP, '120', 120, $ky);
1447
- $this->doVarFilter($db, 'user4', transactd::CP_ACP, '120', 120, $ky);
1448
- $this->doVarFilter($db, 'user5', transactd::CP_UTF8, '120', 120, $ky);
1523
+ $this->doVarFilter($db, 'user3', Bz\transactd::CP_ACP, '120', 120, $ky);
1524
+ $this->doVarFilter($db, 'user4', Bz\transactd::CP_ACP, '120', 120, $ky);
1525
+ $this->doVarFilter($db, 'user5', Bz\transactd::CP_UTF8, '120', 120, $ky);
1449
1526
  }
1450
- $this->deleteDbObj($db);
1451
1527
  }
1452
1528
  public function testDropDatabaseVar()
1453
1529
  {
1454
- $db = $this->getDbObj();
1530
+ $db = new Bz\database();
1455
1531
  $db->open(URL_VAR);
1456
1532
  $this->assertEquals($db->stat(), 0);
1457
1533
  $db->drop();
1458
1534
  $this->assertEquals($db->stat(), 0);
1459
- $this->deleteDbObj($db);
1460
1535
  }
1461
1536
 
1462
1537
  /* -----------------------------------------------------
@@ -1467,18 +1542,18 @@ class transactdTest extends PHPUnit_Framework_TestCase
1467
1542
  {
1468
1543
  // create table
1469
1544
  $dbdef = $db->dbDef();
1470
- $td = new tabledef();
1545
+ $td = new Bz\tabledef();
1471
1546
  $td->setTableName($name);
1472
1547
  $td->setFileName($name . '.dat');
1473
1548
  $td->id = $id;
1474
1549
  $td->pageSize = 2048;
1475
- $td->charsetIndex = transactd::CHARSET_UTF8B4;
1476
- // $td->charsetIndex = transactd::CHARSET_CP932;
1550
+ $td->charsetIndex = Bz\transactd::CHARSET_UTF8B4;
1551
+ // $td->charsetIndex = Bz\transactd::CHARSET_CP932;
1477
1552
  $dbdef->insertTable($td);
1478
1553
  $this->assertEquals($dbdef->stat(), 0);
1479
1554
  $fd = $dbdef->insertField($id, 0);
1480
1555
  $fd->setName('id');
1481
- $fd->type = transactd::ft_integer;
1556
+ $fd->type = Bz\transactd::ft_integer;
1482
1557
  $fd->len = 4;
1483
1558
  $dbdef->updateTableDef($id);
1484
1559
  $this->assertEquals($dbdef->stat(), 0);
@@ -1628,7 +1703,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1628
1703
  $this->assertEquals($tb->getFVstr(FDI_NAMEW), 'おめでとうございます。');
1629
1704
 
1630
1705
  $tb->findNext();
1631
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
1706
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
1632
1707
 
1633
1708
  $tb->clearBuffer();
1634
1709
  $tb->seekLast();
@@ -1645,7 +1720,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1645
1720
  $this->assertEquals($tb->getFVstr(FDI_NAMEW), 'A123456');
1646
1721
 
1647
1722
  $tb->findPrev();
1648
- $this->assertEquals($tb->stat(), transactd::STATUS_EOF);
1723
+ $this->assertEquals($tb->stat(), Bz\transactd::STATUS_EOF);
1649
1724
 
1650
1725
  $tb->setFilter("name = 'あい'", 0, 10);
1651
1726
  $this->assertEquals($tb->recordCount(), 0);
@@ -1695,67 +1770,65 @@ class transactdTest extends PHPUnit_Framework_TestCase
1695
1770
  $this->doTestReadStringFilter($tb);
1696
1771
  $this->doTestSetStringFilter($tb);
1697
1772
  $this->doTestUpdateStringFilter($tb);
1698
- $tb->close();
1699
1773
  }
1700
1774
 
1701
1775
  public function testStringFilter()
1702
1776
  {
1703
- $db = $this->getDbObj();
1777
+ $db = new Bz\database();
1704
1778
  $db->create(URL_SF);
1705
- if ($db->stat() == transactd::STATUS_TABLE_EXISTS_ERROR)
1779
+ if ($db->stat() == Bz\transactd::STATUS_TABLE_EXISTS_ERROR)
1706
1780
  {
1707
1781
  $this->testDropDatabaseStringFilter();
1708
1782
  $db->create(URL_SF);
1709
1783
  }
1710
1784
  $this->assertEquals($db->stat(), 0);
1711
- $db->open(URL_SF, 0, 0);
1785
+ $db->open(URL_SF, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
1712
1786
  $this->assertEquals($db->stat(), 0);
1713
- $this->doTestStringFilter($db, 1, 'zstring', transactd::ft_zstring, transactd::ft_wzstring);
1787
+ $this->doTestStringFilter($db, 1, 'zstring', Bz\transactd::ft_zstring, Bz\transactd::ft_wzstring);
1714
1788
  if ($this->isUtf16leSupport($db))
1715
- $this->doTestStringFilter($db, 2, 'myvarchar', transactd::ft_myvarchar, transactd::ft_mywvarchar);
1789
+ $this->doTestStringFilter($db, 2, 'myvarchar', Bz\transactd::ft_myvarchar, Bz\transactd::ft_mywvarchar);
1716
1790
  else
1717
- $this->doTestStringFilter($db, 2, 'myvarchar', transactd::ft_myvarchar, transactd::ft_myvarchar);
1718
- $this->doTestStringFilter($db, 3, 'mytext', transactd::ft_mytext, transactd::ft_myblob);
1719
- $this->deleteDbObj($db);
1791
+ $this->doTestStringFilter($db, 2, 'myvarchar', Bz\transactd::ft_myvarchar, Bz\transactd::ft_myvarchar);
1792
+ $this->doTestStringFilter($db, 3, 'mytext', Bz\transactd::ft_mytext, Bz\transactd::ft_myblob);
1720
1793
  }
1721
1794
 
1722
1795
  public function testDropDatabaseStringFilter()
1723
1796
  {
1724
- $db = $this->getDbObj();
1797
+ $db = new Bz\database();
1725
1798
  $db->open(URL_SF);
1726
1799
  $this->assertEquals($db->stat(), 0);
1727
1800
  $db->drop();
1728
1801
  $this->assertEquals($db->stat(), 0);
1729
- $this->deleteDbObj($db);
1730
1802
  }
1731
1803
 
1732
1804
  public function testQuery()
1733
1805
  {
1734
- $q = new queryBase();
1806
+ $q = new Bz\query();
1735
1807
  $q->queryString("id = 0 and name = 'Abc efg'");
1736
1808
  $this->assertEquals($q->toString(), "id = '0' and name = 'Abc efg'");
1737
1809
 
1738
1810
  $q->queryString('');
1739
- $q->where('id', '=', '0')->andWhere('name', '=', 'Abc efg');
1811
+ $q->where('id', '=', '0')->and_('name', '=', 'Abc efg');
1740
1812
  $this->assertEquals($q->toString(), "id = '0' and name = 'Abc efg'");
1741
1813
 
1742
1814
  $q->queryString("select id,name id = 0 AND name = 'Abc&' efg'");
1743
1815
  $this->assertEquals($q->toString(), "select id,name id = '0' AND name = 'Abc&' efg'");
1744
1816
 
1745
1817
  $q->queryString('');
1746
- $q->select('id', 'name')->where('id', '=', '0')->andWhere('name', '=', "Abc' efg");
1818
+ $q->select('id', 'name')->where('id', '=', '0')->and_('name', '=', "Abc' efg");
1747
1819
  $this->assertEquals($q->toString(), "select id,name id = '0' and name = 'Abc&' efg'");
1748
1820
 
1749
1821
  $q->queryString("select id,name id = 0 AND name = 'Abc&& efg'");
1750
1822
  $this->assertEquals($q->toString(), "select id,name id = '0' AND name = 'Abc&& efg'");
1751
1823
 
1752
1824
  $q->queryString('');
1753
- $q->select('id', 'name')->where('id', '=', '0')->andWhere('name', '=', 'Abc& efg');
1825
+ $q->select('id', 'name')->where('id', '=', '0')->and_('name', '=', 'Abc& efg');
1754
1826
  $this->assertEquals($q->toString(), "select id,name id = '0' and name = 'Abc&& efg'");
1755
1827
 
1756
1828
  $q->queryString('*');
1757
1829
  $this->assertEquals($q->toString(), '*');
1758
1830
 
1831
+ $q->queryString('');
1759
1832
  $q->all();
1760
1833
  $this->assertEquals($q->toString(), '*');
1761
1834
 
@@ -1777,7 +1850,7 @@ class transactdTest extends PHPUnit_Framework_TestCase
1777
1850
  $this->assertEquals($q->toString(), "select id,name,fc id = '2' and name = '3'");
1778
1851
 
1779
1852
  $q->queryString('');
1780
- $q->select('id', 'name', 'fc')->where('id', '=', '2')->andWhere('name', '=', '3');
1853
+ $q->select('id', 'name', 'fc')->where('id', '=', '2')->and_('name', '=', '3');
1781
1854
  $this->assertEquals($q->toString(), "select id,name,fc id = '2' and name = '3'");
1782
1855
 
1783
1856
  // IN include
@@ -1812,34 +1885,565 @@ class transactdTest extends PHPUnit_Framework_TestCase
1812
1885
  $q->queryString('');
1813
1886
  $q->where('in', '<>', '1');
1814
1887
  $this->assertEquals($q->toString(), "in <> '1'");
1888
+
1889
+ // test auto_escape
1890
+ $q->queryString("code = ab'c", true);
1891
+ $this->assertEquals($q->toString(), "code = 'ab&'c'");
1892
+
1893
+ $q->queryString("code = ab&c", true);
1894
+ $this->assertEquals($q->toString(), "code = 'ab&&c'");
1895
+
1896
+ $q->queryString("code = abc&", true);
1897
+ $this->assertEquals($q->toString(), "code = 'abc&&'");
1898
+ $q->queryString("code = abc&&", true);
1899
+ $this->assertEquals($q->toString(), "code = 'abc&&&&'");
1900
+
1901
+ $q->queryString("code = 'abc&'", true);
1902
+ $this->assertEquals($q->toString(), "code = 'abc&&'");
1903
+ $q->queryString("code = 'abc&&'", true);
1904
+ $this->assertEquals($q->toString(), "code = 'abc&&&&'");
1905
+
1906
+ $q->queryString("code = 'ab'c'", true);
1907
+ $this->assertEquals($q->toString(), "code = 'ab&'c'");
1908
+
1909
+ $q->queryString("code = 'abc''", true);
1910
+ $this->assertEquals($q->toString(), "code = 'abc&''");
1911
+
1912
+ $q->queryString("code = abc'", true);
1913
+ $this->assertEquals($q->toString(), "code = 'abc&''");
1914
+
1915
+ // Invalid single quote (') on the end of statement
1916
+ $q->queryString("code = 'abc", true);
1917
+ $this->assertEquals($q->toString(), "code = 'abc'");
1918
+
1919
+ $q->queryString("code = &abc", true);
1920
+ $this->assertEquals($q->toString(), "code = '&&abc'");
1815
1921
  }
1816
1922
 
1817
1923
  /* -----------------------------------------------------
1818
- transactd convert
1924
+ ActiveTable
1819
1925
  ----------------------------------------------------- */
1820
1926
 
1821
- public function testConvert()
1927
+ private function createQTuser($db)
1822
1928
  {
1823
- if (! $this->isWindows())
1929
+ $dbdef = $db->dbDef();
1930
+ $td = new Bz\tabledef();
1931
+ $td->setTableName('user');
1932
+ $td->setFileName('user.dat');
1933
+ $id = 1;
1934
+ $td->id = $id;
1935
+ $td->pageSize = 2048;
1936
+ $td->schemaCodePage = Bz\transactd::CP_UTF8;
1937
+ $td->charsetIndex = Bz\transactd::CHARSET_UTF8B4;
1938
+ $dbdef->insertTable($td);
1939
+ $this->assertEquals($dbdef->stat(), 0);
1940
+ // id field
1941
+ $fd = $dbdef->insertField($id, 0);
1942
+ $fd->setName('id');
1943
+ $fd->type = Bz\transactd::ft_autoinc;
1944
+ $fd->len = 4;
1945
+ // 名前 field
1946
+ $fd = $dbdef->insertField($id, 1);
1947
+ $fd->setName('名前');
1948
+ $fd->type = Bz\transactd::ft_myvarchar;
1949
+ $fd->setLenByCharnum(20);
1950
+ // group field
1951
+ $fd = $dbdef->insertField($id, 2);
1952
+ $fd->setName('group');
1953
+ $fd->type = Bz\transactd::ft_integer;
1954
+ $fd->len = 4;
1955
+ // tel field
1956
+ $fd = $dbdef->insertField($id, 3);
1957
+ $fd->setName('tel');
1958
+ $fd->type = Bz\transactd::ft_myvarchar;
1959
+ $fd->setLenByCharnum(20);
1960
+ // key 0 (primary) id
1961
+ $kd = $dbdef->insertKey($id, 0);
1962
+ $kd->segment(0)->fieldNum = 0;
1963
+ $kd->segment(0)->flags->bit8 = 1; // extended key type
1964
+ $kd->segment(0)->flags->bit1 = 1; // changeable
1965
+ $kd->segmentCount = 1;
1966
+ $td = $dbdef->tableDefs($id);
1967
+ $td->primaryKeyNum = 0;
1968
+ // key 1 group
1969
+ $kd = $dbdef->insertKey($id, 1);
1970
+ $kd->segment(0)->fieldNum = 2;
1971
+ $kd->segment(0)->flags->bit8 = 1; // extended key type
1972
+ $kd->segment(0)->flags->bit1 = 1; // changeable
1973
+ $kd->segment(0)->flags->bit0 = 1; // duplicatable
1974
+ $kd->segmentCount = 1;
1975
+ // update
1976
+ $dbdef->updateTableDef($id);
1977
+ $this->assertEquals($dbdef->stat(), 0);
1978
+ // open test
1979
+ $tb = $db->openTable($id);
1980
+ $this->assertEquals($db->stat(), 0);
1981
+ return true;
1982
+ }
1983
+ private function createQTgroups($db)
1984
+ {
1985
+ $dbdef = $db->dbDef();
1986
+ $td = new Bz\tabledef();
1987
+ $td->setTableName('groups');
1988
+ $td->setFileName('groups.dat');
1989
+ $id = 2;
1990
+ $td->id = $id;
1991
+ $td->pageSize = 2048;
1992
+ $td->schemaCodePage = Bz\transactd::CP_UTF8;
1993
+ $td->charsetIndex = Bz\transactd::CHARSET_UTF8B4;
1994
+ $dbdef->insertTable($td);
1995
+ $this->assertEquals($dbdef->stat(), 0);
1996
+ // code field
1997
+ $fd = $dbdef->insertField($id, 0);
1998
+ $fd->setName('code');
1999
+ $fd->type = Bz\transactd::ft_integer;
2000
+ $fd->len = 4;
2001
+ // name field
2002
+ $fd = $dbdef->insertField($id, 1);
2003
+ $fd->setName('name');
2004
+ $fd->type = Bz\transactd::ft_myvarbinary;
2005
+ $fd->len = 33;
2006
+ // key 0 (primary) code
2007
+ $kd = $dbdef->insertKey($id, 0);
2008
+ $kd->segment(0)->fieldNum = 0;
2009
+ $kd->segment(0)->flags->bit8 = 1; // extended key type
2010
+ $kd->segment(0)->flags->bit1 = 1; // changeable
2011
+ $kd->segmentCount = 1;
2012
+ $td = $dbdef->tableDefs($id);
2013
+ $td->primaryKeyNum = 0;
2014
+ // update
2015
+ $dbdef->updateTableDef($id);
2016
+ $this->assertEquals($dbdef->stat(), 0);
2017
+ // open test
2018
+ $tb = $db->openTable($id);
2019
+ $this->assertEquals($db->stat(), 0);
2020
+ return true;
2021
+ }
2022
+ private function createQTextention($db)
2023
+ {
2024
+ $dbdef = $db->dbDef();
2025
+ $td = new Bz\tabledef();
2026
+ $td->setTableName('extention');
2027
+ $td->setFileName('extention.dat');
2028
+ $id = 3;
2029
+ $td->id = $id;
2030
+ $td->pageSize = 2048;
2031
+ $td->schemaCodePage = Bz\transactd::CP_UTF8;
2032
+ $td->charsetIndex = Bz\transactd::CHARSET_UTF8B4;
2033
+ $dbdef->insertTable($td);
2034
+ $this->assertEquals($dbdef->stat(), 0);
2035
+ // id field
2036
+ $fd = $dbdef->insertField($id, 0);
2037
+ $fd->setName('id');
2038
+ $fd->type = Bz\transactd::ft_integer;
2039
+ $fd->len = 4;
2040
+ // comment field
2041
+ $fd = $dbdef->insertField($id, 1);
2042
+ $fd->setName('comment');
2043
+ $fd->type = Bz\transactd::ft_myvarchar;
2044
+ $fd->setLenByCharnum(60);
2045
+ // key 0 (primary) id
2046
+ $kd = $dbdef->insertKey($id, 0);
2047
+ $kd->segment(0)->fieldNum = 0;
2048
+ $kd->segment(0)->flags->bit8 = 1; // extended key type
2049
+ $kd->segment(0)->flags->bit1 = 1; // changeable
2050
+ $kd->segmentCount = 1;
2051
+ $td = $dbdef->tableDefs($id);
2052
+ $td->primaryKeyNum = 0;
2053
+ // update
2054
+ $dbdef->updateTableDef($id);
2055
+ $this->assertEquals($dbdef->stat(), 0);
2056
+ // open test
2057
+ $tb = $db->openTable($id);
2058
+ $this->assertEquals($db->stat(), 0);
2059
+ return true;
2060
+ }
2061
+ private function insertQT($db, $maxId)
2062
+ {
2063
+ $db->beginTrn();
2064
+ // insert user data
2065
+ $tb = $db->openTable('user', Bz\transactd::TD_OPEN_NORMAL);
2066
+ $this->assertEquals($db->stat(), 0);
2067
+ $tb->clearBuffer();
2068
+ for ($i = 1; $i <= $maxId; $i++)
1824
2069
  {
1825
- $enc_u8 = 'UTF-8';
1826
-
1827
- $u8 = mb_convert_encoding('123', $enc_u8);
1828
- $ret = transactd::u8tombc($u8, -1, '', 256);
1829
- $this->assertEquals($u8, $ret);
1830
-
1831
- $mbcKanji = [0x8A, 0xBF, 0x8E, 0x9A, 0x00];
1832
- $u8 = mb_convert_encoding('漢字', $enc_u8);
1833
- $ret = transactd::u8tombc($u8, -1, '', 256);
1834
- for ($i = 0; $i < strlen($ret); $i++)
1835
- $this->assertEquals(hexdec(bin2hex($ret{$i})), $mbcKanji[$i]);
1836
-
1837
- $mbc = $ret;
1838
- $u8Kanji = [0xe6 ,0xbc ,0xa2 ,0xe5 ,0xad ,0x97];
1839
- $ret = transactd::mbctou8($mbc, -1, '', 256);
1840
- for ($i = 0; $i < strlen($ret); $i++)
1841
- $this->assertEquals(hexdec(bin2hex($ret{$i})), $u8Kanji[$i]);
2070
+ $tb->setFV(0, $i);
2071
+ $tb->setFV(1, "$i user");
2072
+ $tb->setFV('group', (($i - 1) % 5) + 1);
2073
+ $tb->insert();
2074
+ $this->assertEquals($tb->stat(), 0);
1842
2075
  }
2076
+ $tb->close();
2077
+ // insert groups data
2078
+ $tb = $db->openTable('groups', Bz\transactd::TD_OPEN_NORMAL);
2079
+ $this->assertEquals($db->stat(), 0);
2080
+ $tb->clearBuffer();
2081
+ for ($i = 1; $i <= 100; $i++)
2082
+ {
2083
+ $tb->setFV(0, $i);
2084
+ $tb->setFV(1, "$i group");
2085
+ $tb->insert();
2086
+ $this->assertEquals($tb->stat(), 0);
2087
+ }
2088
+ $tb->close();
2089
+ // insert extention data
2090
+ $tb = $db->openTable('extention', Bz\transactd::TD_OPEN_NORMAL);
2091
+ $this->assertEquals($db->stat(), 0);
2092
+ $tb->clearBuffer();
2093
+ for ($i = 1; $i <= $maxId; $i++)
2094
+ {
2095
+ $tb->setFV(0, $i);
2096
+ $tb->setFV(1, "$i comment");
2097
+ $tb->insert();
2098
+ $this->assertEquals($tb->stat(), 0);
2099
+ }
2100
+ $tb->close();
2101
+ $db->endTrn();
1843
2102
  }
1844
2103
 
2104
+ public function testCreateQueryTest()
2105
+ {
2106
+ $db = new Bz\database();
2107
+ // check database existence
2108
+ $db->open(URL_QT, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
2109
+ if ($db->stat() === 0) {
2110
+ return;
2111
+ }
2112
+ echo("\nDatabase " . DBNAME_QT . " not found\n");
2113
+ $db->create(URL_QT);
2114
+ $this->assertEquals($db->stat(), 0);
2115
+ $db->open(URL_QT, Bz\transactd::TYPE_SCHEMA_BDF, Bz\transactd::TD_OPEN_NORMAL);
2116
+ $this->assertEquals($db->stat(), 0);
2117
+ // create tables
2118
+ $this->createQTuser($db);
2119
+ $this->createQTgroups($db);
2120
+ $this->createQTextention($db);
2121
+ // insert data
2122
+ $this->insertQT($db, 20000);
2123
+ }
2124
+ public function testNewDelete()
2125
+ {
2126
+ $db = new Bz\database();
2127
+ $db->open(URL_QT);
2128
+ for ($i = 0; $i < 500; $i++)
2129
+ {
2130
+ $q = new Bz\query();
2131
+ $rq = new Bz\recordsetQuery();
2132
+ $gq = new Bz\groupQuery();
2133
+ $f = new Bz\fieldNames();
2134
+ $f->addValue('abc');
2135
+ $atu = new Bz\ActiveTable($db, 'user');
2136
+ $atu->index(0);
2137
+ $atg = new Bz\ActiveTable($db, 'groups');
2138
+ $atg->index(0);
2139
+ $fns = new Bz\fieldNames();
2140
+ $fns->addValue('a');
2141
+ $s = new Bz\sum($fns);
2142
+ $s = new Bz\count('a');
2143
+ $s = new Bz\avg($fns);
2144
+ $s = new Bz\min($fns);
2145
+ $s = new Bz\max($fns);
2146
+ $rs = new Bz\Recordset();
2147
+ }
2148
+ }
2149
+ public function testLoop()
2150
+ {
2151
+ $db = new Bz\database();
2152
+ $db->open(URL_QT);
2153
+ $this->assertEquals($db->stat(), 0);
2154
+ $atu = new Bz\ActiveTable($db, 'user');
2155
+ $q = new Bz\query();
2156
+
2157
+ $atu->alias('名前', 'name');
2158
+ $q->where('id', '<=', 15000);
2159
+ $rs = $atu->index(0)->keyValue(1)->read($q);
2160
+ //
2161
+ // loop fielddefs
2162
+ //
2163
+ $fds = $rs->fielddefs();
2164
+ // for
2165
+ for ($field_id = 0; $field_id < count($fds); $field_id++)
2166
+ {
2167
+ $field_name = $fds[$field_id]->name();
2168
+ //echo("$field_id : $field_name\n");
2169
+ }
2170
+ // foreach
2171
+ $field_id = 0;
2172
+ foreach ($fds as $fd)
2173
+ {
2174
+ $field_name = $fd->name();
2175
+ //echo("$field_id : $field_name\n");
2176
+ $field_id++;
2177
+ }
2178
+ // foreach KeyValue
2179
+ foreach ($fds as $field_id => $fd)
2180
+ {
2181
+ $field_name = $fd->name();
2182
+ //echo("$field_id : $field_name\n");
2183
+ }
2184
+ // generator
2185
+ $field_id = 0;
2186
+ foreach ($fds->range() as $fd)
2187
+ {
2188
+ $field_name = $fd->name();
2189
+ //echo("$field_id : $field_name\n");
2190
+ $field_id++;
2191
+ }
2192
+ // generator with range
2193
+ $field_id = 1;
2194
+ foreach ($fds->range(1, 2) as $fd)
2195
+ {
2196
+ $field_name = $fd->name();
2197
+ //echo("$field_id : $field_name\n");
2198
+ $field_id++;
2199
+ }
2200
+ //
2201
+ // loop Recordset and Record
2202
+ //
2203
+ // for
2204
+ for ($row_id = 0; $row_id < count($rs); $row_id++)
2205
+ {
2206
+ $record = $rs[$row_id];
2207
+ // for loop Record
2208
+ for ($field_id = 0; $field_id < count($record); $field_id++) {
2209
+ $field_name = $fds[$field_id]->name();
2210
+ $field_value = $record[$field_id];
2211
+ //if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
2212
+ }
2213
+ }
2214
+ // foreach
2215
+ $row_id = 0;
2216
+ foreach ($rs as $record)
2217
+ {
2218
+ $field_id = 0;
2219
+ foreach ($record as $field_value) {
2220
+ $field_name = $fds[$field_id]->name();
2221
+ //if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
2222
+ $field_id++;
2223
+ }
2224
+ $row_id++;
2225
+ }
2226
+ // foreach KeyValue
2227
+ foreach ($rs as $row_id => $record)
2228
+ {
2229
+ $field_id = 0;
2230
+ foreach ($record as $field_name => $field_value)
2231
+ {
2232
+ //if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
2233
+ $field_id++;
2234
+ }
2235
+ }
2236
+ // generator
2237
+ $row_id = 0;
2238
+ foreach ($rs->range() as $record)
2239
+ {
2240
+ // values generator
2241
+ $field_id = 0;
2242
+ foreach ($record->values() as $field_value)
2243
+ {
2244
+ $field_name = $fds[$field_id]->name();
2245
+ //if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
2246
+ $field_id++;
2247
+ }
2248
+ $row_id++;
2249
+ }
2250
+ // generator with range
2251
+ $row_id = 3;
2252
+ foreach ($rs->range(3, 100) as $record)
2253
+ {
2254
+ // keys generator
2255
+ $field_id = 0;
2256
+ foreach ($record->keys() as $field_name)
2257
+ {
2258
+ $field_value = $record[$field_id];
2259
+ //if ($row_id < 5) { echo("rs[$row_id][$field_id:$field_name] $field_value\n"); }
2260
+ $field_id++;
2261
+ }
2262
+ $row_id++;
2263
+ }
2264
+ }
2265
+ public function testJoin()
2266
+ {
2267
+ $db = new Bz\database();
2268
+ $db->open(URL_QT);
2269
+ $this->assertEquals($db->stat(), 0);
2270
+ $atu = new Bz\ActiveTable($db, 'user');
2271
+ $atg = new Bz\ActiveTable($db, 'groups');
2272
+ $ate = new Bz\ActiveTable($db, 'extention');
2273
+ $q = new Bz\query();
2274
+
2275
+ $atu->alias('名前', 'name');
2276
+ $q->select('id', 'name', 'group')->where('id', '<=', 15000);
2277
+ $rs = $atu->index(0)->keyValue(1)->read($q);
2278
+ $this->assertEquals($rs->size(), 15000);
2279
+
2280
+ // Join extention::comment
2281
+ $q->reset();
2282
+ $ate->index(0)->join($rs,
2283
+ $q->select('comment')->optimize(Bz\queryBase::joinHasOneOrHasMany), 'id');
2284
+ $this->assertEquals($rs->size(), 15000);
2285
+
2286
+ // reverse and get first (so it means 'get last')
2287
+ $last = $rs->reverse()->first();
2288
+ $this->assertEquals($last['id'], 15000);
2289
+ $this->assertEquals($last['comment'], '15000 comment');
2290
+
2291
+ // Join group::name
2292
+ $q->reset();
2293
+ $atg->alias('name', 'group_name');
2294
+ $atg->index(0)->join($rs, $q->select('group_name'), 'group');
2295
+ $this->assertEquals($rs->size(), 15000);
2296
+
2297
+ // get last (the rs is reversed, so it means 'get first')
2298
+ $first = $rs->last();
2299
+ $this->assertEquals($first['id'], 1);
2300
+ $this->assertEquals($first['comment'], '1 comment');
2301
+ $this->assertEquals($first['group_name'], '1 group');
2302
+
2303
+ // row in rs[15000 - 9]
2304
+ $rec = $rs[15000 - 9];
2305
+ $this->assertEquals($rec['group_name'], '4 group');
2306
+
2307
+ // orderby
2308
+ $rs->orderBy('group_name');
2309
+ for ($i = 0; $i < 15000 / 5; $i++)
2310
+ {
2311
+ $this->assertEquals($rs[$i]['group_name'], '1 group');
2312
+ }
2313
+ $this->assertEquals($rs[15000 / 5]['group_name'], '2 group');
2314
+ $this->assertEquals($rs[(15000 / 5) * 2]['group_name'], '3 group');
2315
+ $this->assertEquals($rs[(15000 / 5) * 3]['group_name'], '4 group');
2316
+ $this->assertEquals($rs[(15000 / 5) * 4]['group_name'], '5 group');
2317
+
2318
+ // union
2319
+ $q->reset();
2320
+ $q->select('id', 'name', 'group')->where('id', '<=', 16000);
2321
+ $rs2 = $atu->index(0)->keyValue(15001)->read($q);
2322
+ $this->assertEquals($rs2->size(), 1000);
2323
+ $q->reset();
2324
+ $ate->index(0)->join($rs2,
2325
+ $q->select('comment')->optimize(Bz\queryBase::joinHasOneOrHasMany), 'id');
2326
+ $this->assertEquals($rs2->size(), 1000);
2327
+ $q->reset();
2328
+ $atg->index(0)->join($rs2, $q->select('group_name'), 'group');
2329
+ $this->assertEquals($rs2->size(), 1000);
2330
+ $rs->unionRecordset($rs2);
2331
+ $this->assertEquals($rs->size(), 16000);
2332
+ // row in rs[15000]
2333
+ $this->assertEquals($rs[15000]['id'], 15001);
2334
+ // last
2335
+ $this->assertEquals($rs->last()['id'], 16000);
2336
+
2337
+ // group by
2338
+ $gq = new Bz\groupQuery();
2339
+ $gq->keyField('group', 'id');
2340
+ $count1 = new Bz\count('count');
2341
+ $gq->addFunction($count1);
2342
+
2343
+ $count2 = new Bz\count('group1_count');
2344
+ $count2->when('group', '=', 1);
2345
+ $gq->addFunction($count2);
2346
+
2347
+ $rs->groupBy($gq);
2348
+ $this->assertEquals($rs->size(), 16000);
2349
+ $this->assertEquals($rs[0]['group1_count'], 1);
2350
+
2351
+ // clone
2352
+ $rsv = clone $rs;
2353
+ $gq->reset();
2354
+ $count3 = new Bz\count('count3');
2355
+ $gq->addFunction($count3)->keyField('group');
2356
+ $rs->groupBy($gq);
2357
+ $this->assertEquals($rs->size(), 5);
2358
+ $this->assertEquals($rsv->size(), 16000);
2359
+
2360
+ // having
2361
+ $rq = new Bz\recordsetQuery();
2362
+ $rq->when('group1_count', '=', 1)->or_('group1_count', '=', 2);
2363
+ $rsv->matchBy($rq);
2364
+ $this->assertEquals($rsv->size(), 3200);
2365
+ $this->assertEquals(isset($rsv), true);
2366
+ unset($rsv);
2367
+ $this->assertEquals(isset($rsv), false);
2368
+
2369
+ // top
2370
+ $rs3 = new Bz\Recordset();
2371
+ $rs->top($rs3, 10);
2372
+ $this->assertEquals($rs3->size(), 5);
2373
+ $rs->top($rs3, 3);
2374
+ $this->assertEquals($rs3->size(), 3);
2375
+ $this->assertEquals($rs->size(), 5);
2376
+
2377
+ // query new / delete
2378
+ $q1 = new Bz\recordsetQuery();
2379
+ $q1->when('group1_count', '=', 1)->or_('group1_count', '=', 2);
2380
+ unset($q1);
2381
+
2382
+ $q2 = new Bz\query();
2383
+ $q2->where('group1_count', '=', 1)->or_('group1_count', '=', 2);
2384
+ unset($q2);
2385
+
2386
+ $q3 = new Bz\groupQuery();
2387
+ $q3->keyField('group', 'id');
2388
+ unset($q3);
2389
+ }
2390
+ public function testWritableRecord()
2391
+ {
2392
+ $db = new Bz\database();
2393
+ $db->open(URL_QT);
2394
+ $this->assertEquals($db->stat(), 0);
2395
+ $atu = new Bz\ActiveTable($db, 'user');
2396
+
2397
+ $rec = $atu->index(0)->getWritableRecord();
2398
+ $rec['id'] = 120000;
2399
+ $rec['名前'] = 'aiba';
2400
+ $rec->save();
2401
+
2402
+ $rec->clear();
2403
+ $this->assertNotEquals($rec['id'], 120000);
2404
+ $this->assertNotEquals($rec['名前'], 'aiba');
2405
+ $rec['id'] = 120000;
2406
+ $rec->read();
2407
+ $this->assertEquals($rec['id'], 120000);
2408
+ $this->assertEquals($rec['名前'], 'aiba');
2409
+
2410
+ $rec->clear();
2411
+ $rec['id'] = 120001;
2412
+ $rec['名前'] = 'oono';
2413
+ if (! $rec->read()) {
2414
+ $rec->insert();
2415
+ }
2416
+
2417
+ $rec->clear();
2418
+ $rec['id'] = 120001;
2419
+ $rec->read();
2420
+ $this->assertEquals($rec['id'], 120001);
2421
+ $this->assertEquals($rec['名前'], 'oono');
2422
+
2423
+ // update only changed filed
2424
+ $rec->clear();
2425
+ $rec['id'] = 120001;
2426
+ $rec['名前'] = 'matsumoto';
2427
+ $rec->update();
2428
+
2429
+ $rec->clear();
2430
+ $rec['id'] = 120001;
2431
+ $rec->read();
2432
+ $this->assertEquals($rec['id'], 120001);
2433
+ $this->assertEquals($rec['名前'], 'matsumoto');
2434
+
2435
+ $rec->del();
2436
+ $rec['id'] = 120000;
2437
+ $rec->del();
2438
+
2439
+ $rec->clear();
2440
+ $rec['id'] = 120001;
2441
+ $ret = $rec->read();
2442
+ $this->assertEquals($ret, false);
2443
+
2444
+ $rec->clear();
2445
+ $rec['id'] = 120000;
2446
+ $ret = $rec->read();
2447
+ $this->assertEquals($ret, false);
2448
+ }
1845
2449
  }