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
@@ -16,7 +16,6 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  ================================================================= */
19
- //#define BOOST_TEST_MAIN
20
19
  //#define BOOST_TEST_MODULE
21
20
 
22
21
  #include <boost/test/included/unit_test.hpp>
@@ -28,16 +27,18 @@
28
27
  #include <bzs/db/protocol/tdap/client/stringConverter.h>
29
28
  #include <stdio.h>
30
29
  #include <bzs/db/protocol/tdap/client/filter.h>
30
+ #include <bzs/example/queryData.h>
31
+ #include <bzs/db/protocol/tdap/client/activeTable.h>
31
32
 
33
+ #include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>
32
34
 
33
35
  using namespace bzs::db::protocol::tdap::client;
34
36
  using namespace bzs::db::protocol::tdap;
35
37
  using namespace std;
36
38
 
37
39
  #define PROTOCOL _T("tdap")
38
- static _TCHAR HOSTNAME[MAX_PATH] =
39
- {_T("127.0.0.1")};
40
- #define DBNAME _T("test")
40
+ static _TCHAR HOSTNAME[MAX_PATH] = { _T("127.0.0.1") };
41
+ #define DBNAME _T("test")
41
42
  #define BDFNAME _T("test.bdf")
42
43
  // #define ISOLATION_REPEATABLE_READ
43
44
  #define ISOLATION_READ_COMMITTED
@@ -53,11 +54,12 @@ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
53
54
  if (strstr(argv[i], "--host=") == argv[i])
54
55
  {
55
56
  #ifdef _UNICODE
56
- MultiByteToWideChar(CP_ACP, (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED, argv[i] + 7, -1, HOSTNAME, MAX_PATH);
57
+ MultiByteToWideChar(CP_ACP,
58
+ (CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
59
+ argv[i] + 7, -1, HOSTNAME, MAX_PATH);
57
60
  #else
58
61
  strcpy_s(HOSTNAME, MAX_PATH, argv[i] + 7);
59
62
  #endif
60
-
61
63
  }
62
64
  }
63
65
  return 0;
@@ -65,14 +67,15 @@ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
65
67
 
66
68
  static _TCHAR g_uri[MAX_PATH];
67
69
 
68
- const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host, const _TCHAR* dbname, const _TCHAR* dbfile = NULL)
70
+ const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
71
+ const _TCHAR* dbname, const _TCHAR* dbfile = NULL)
69
72
  {
70
73
  if (dbfile)
71
- _stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s?dbfile=%s"), protocol, host, dbname, dbfile);
74
+ _stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s?dbfile=%s"), protocol, host,
75
+ dbname, dbfile);
72
76
  else
73
77
  _stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s"), protocol, host, dbname);
74
78
  return g_uri;
75
-
76
79
  }
77
80
 
78
81
  class fixture
@@ -82,6 +85,7 @@ class fixture
82
85
  public:
83
86
  fixture() : m_db(NULL)
84
87
  {
88
+ nsdatabase::setCheckTablePtr(true);
85
89
  m_db = database::create();
86
90
  if (!m_db)
87
91
  printf("Error database::create()\n");
@@ -90,18 +94,47 @@ public:
90
94
  ~fixture()
91
95
  {
92
96
  if (m_db)
93
- database::destroy(m_db);
97
+ {
98
+ // Test for SWIG interface
99
+ m_db->release();
100
+ // Test for c++
101
+ // database::destroy(m_db);
102
+ }
94
103
  }
95
104
 
96
- ::database* db() const {return m_db;}
105
+ ::database* db() const { return m_db; }
97
106
  };
98
107
 
99
- table* openTable(database* db)
108
+ class fixtureQuery
100
109
  {
110
+ database_ptr m_db;
111
+
112
+ public:
113
+ fixtureQuery()
114
+ {
115
+ m_db = createDatabaseObject();
116
+ if (!m_db)
117
+ printf("Error database::create()\n");
118
+ connectParams param(PROTOCOL, HOSTNAME, _T("querytest"),
119
+ _T("test.bdf"));
120
+ param.setMode(TD_OPEN_NORMAL);
121
+
122
+ prebuiltData(m_db, param);
123
+ }
124
+
125
+ ~fixtureQuery() {}
101
126
 
102
- db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
127
+ database* db() const { return m_db.get(); }
128
+ };
129
+
130
+ table* openTable(database* db, short dbmode = TD_OPEN_NORMAL,
131
+ short tbmode = TD_OPEN_NORMAL)
132
+ {
133
+
134
+ db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF,
135
+ dbmode);
103
136
  BOOST_CHECK_MESSAGE(0 == db->stat(), "open 1" << db->stat());
104
- table* tb = db->openTable(_T("user"));
137
+ table* tb = db->openTable(_T("user"), tbmode);
105
138
  BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable" << db->stat());
106
139
  return tb;
107
140
  }
@@ -117,25 +150,46 @@ void testDropDatabase(database* db)
117
150
 
118
151
  void testClone(database* db)
119
152
  {
153
+ db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF,
154
+ TD_OPEN_NORMAL);
155
+
120
156
  database* db2 = db->clone();
121
157
  BOOST_CHECK_MESSAGE(db2 != NULL, "createNewDataBase stat = " << db->stat());
158
+ db2->close();
159
+ db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF,
160
+ TD_OPEN_NORMAL);
161
+
162
+ BOOST_CHECK_MESSAGE(db2->stat() == 0, "db2 close stat = " << db2->stat());
163
+ db->close();
164
+ BOOST_CHECK_MESSAGE(db->stat() == 0, "db close stat = " << db->stat());
165
+ table* tb = db2->openTable(_T("user"), TD_OPEN_NORMAL);
166
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "openTable" << db2->stat());
122
167
  if (db2)
123
- database::destroy(db2);
168
+ db2->release();
169
+ bool ret = nsdatabase::testTablePtr(tb);
170
+ BOOST_CHECK_MESSAGE(ret == true, "testTablePtr");
171
+ tb->release();
172
+
173
+ ret = nsdatabase::testTablePtr(tb);
174
+ BOOST_CHECK_MESSAGE(ret == false, "testTablePtr");
124
175
  }
125
176
 
126
177
  void testCreateNewDataBase(database* db)
127
178
  {
128
179
 
129
- db->create(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
180
+ db->create(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
130
181
  if (db->stat() == STATUS_TABLE_EXISTS_ERROR)
131
182
  {
132
183
  testDropDatabase(db);
133
184
  db->create(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
134
185
  }
135
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase stat = " << db->stat());
186
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
187
+ "createNewDataBase stat = " << db->stat());
136
188
  // create table
137
- db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
138
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase 1 stat = " << db->stat());
189
+ db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF,
190
+ TD_OPEN_NORMAL);
191
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
192
+ "createNewDataBase 1 stat = " << db->stat());
139
193
 
140
194
  dbdef* def = db->dbDef();
141
195
  if (def)
@@ -150,35 +204,40 @@ void testCreateNewDataBase(database* db)
150
204
  td.replicaKeyNum = -1;
151
205
  td.pageSize = 2048;
152
206
  def->insertTable(&td);
153
- BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable stat = " << def->stat());
207
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
208
+ "insertTable stat = " << def->stat());
154
209
 
155
210
  fielddef* fd = def->insertField(1, 0);
156
211
  fd->setName(_T("id"));
157
212
  fd->type = ft_integer;
158
213
  fd->len = (ushort_td)4;
159
214
  def->updateTableDef(1);
160
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1 stat = " << def->stat());
215
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
216
+ "updateTableDef 1 stat = " << def->stat());
161
217
 
162
218
  fd = def->insertField(1, 1);
163
219
  fd->setName(_T("name"));
164
220
  fd->type = ft_zstring;
165
221
  fd->len = (ushort_td)33;
166
222
  def->updateTableDef(1);
167
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
223
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
224
+ "updateTableDef 2 stat = " << def->stat());
168
225
 
169
226
  fd = def->insertField(1, 2);
170
227
  fd->setName(_T("select"));
171
228
  fd->type = ft_integer;
172
229
  fd->len = (ushort_td)4;
173
230
  def->updateTableDef(1);
174
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
231
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
232
+ "updateTableDef 2 stat = " << def->stat());
175
233
 
176
234
  fd = def->insertField(1, 3);
177
235
  fd->setName(_T("in"));
178
236
  fd->type = ft_integer;
179
237
  fd->len = (ushort_td)4;
180
238
  def->updateTableDef(1);
181
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
239
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
240
+ "updateTableDef 2 stat = " << def->stat());
182
241
 
183
242
  keydef* kd = def->insertKey(1, 0);
184
243
  kd->segments[0].fieldNum = 0;
@@ -187,16 +246,16 @@ void testCreateNewDataBase(database* db)
187
246
  kd->segmentCount = 1;
188
247
 
189
248
  def->updateTableDef(1);
190
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 3 stat = " << def->stat());
191
-
249
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
250
+ "updateTableDef 3 stat = " << def->stat());
192
251
  }
193
-
194
252
  }
195
253
 
196
254
  void testVersion(database* db)
197
255
  {
198
256
  db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
199
- BOOST_CHECK_MESSAGE(0 == db->stat(), "Version connect stat = " << db->stat());
257
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
258
+ "Version connect stat = " << db->stat());
200
259
  if (0 == db->stat())
201
260
  {
202
261
  btrVersions vv;
@@ -204,23 +263,34 @@ void testVersion(database* db)
204
263
  BOOST_CHECK_MESSAGE(0 == db->stat(), "Version");
205
264
  if (_tcscmp(PROTOCOL, _T("tdap")) == 0)
206
265
  {
207
- BOOST_CHECK_MESSAGE(atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[0].majorVersion,
266
+ BOOST_CHECK_MESSAGE(
267
+ atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[0].majorVersion,
208
268
  "clent_Major = " << vv.versions[0].majorVersion);
209
- BOOST_CHECK_MESSAGE(atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[0].minorVersion,
269
+ BOOST_CHECK_MESSAGE(
270
+ atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[0].minorVersion,
210
271
  "clent_Miner = " << vv.versions[0].minorVersion);
211
- BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[0].type, "clent_Type = " << vv.versions[0].type);
272
+ BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[0].type,
273
+ "clent_Type = " << vv.versions[0].type);
212
274
 
213
- BOOST_CHECK_MESSAGE(((5 == vv.versions[1].majorVersion)||(10 == vv.versions[1].majorVersion)),
275
+ BOOST_CHECK_MESSAGE(
276
+ ((5 == vv.versions[1].majorVersion) ||
277
+ (10 == vv.versions[1].majorVersion)),
214
278
  "mysql_server_Major = " << vv.versions[1].majorVersion);
215
- BOOST_CHECK_MESSAGE(((5 <= vv.versions[1].minorVersion)||(0 == vv.versions[1].minorVersion)),
279
+ BOOST_CHECK_MESSAGE(
280
+ ((5 <= vv.versions[1].minorVersion) ||
281
+ (0 == vv.versions[1].minorVersion)),
216
282
  "mysql_server_Miner = " << vv.versions[1].minorVersion);
217
- BOOST_CHECK_MESSAGE((int)'M' == (int)vv.versions[1].type, "mysql_server_Type = " << vv.versions[1].type);
283
+ BOOST_CHECK_MESSAGE((int)'M' == (int)vv.versions[1].type,
284
+ "mysql_server_Type = " << vv.versions[1].type);
218
285
 
219
- BOOST_CHECK_MESSAGE(TRANSACTD_VER_MAJOR == vv.versions[2].majorVersion,
286
+ BOOST_CHECK_MESSAGE(
287
+ TRANSACTD_VER_MAJOR == vv.versions[2].majorVersion,
220
288
  "server_Major = " << vv.versions[2].majorVersion);
221
- BOOST_CHECK_MESSAGE(TRANSACTD_VER_MINOR == vv.versions[2].minorVersion,
289
+ BOOST_CHECK_MESSAGE(
290
+ TRANSACTD_VER_MINOR == vv.versions[2].minorVersion,
222
291
  "server_Miner = " << vv.versions[2].minorVersion);
223
- BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[2].type, "server_Type = " << vv.versions[2].type);
292
+ BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[2].type,
293
+ "server_Type = " << vv.versions[2].type);
224
294
  }
225
295
  }
226
296
  }
@@ -252,13 +322,12 @@ void testInsert(database* db)
252
322
  if (i == 87170)
253
323
  i = 87170;
254
324
  tb->insert();
255
-
256
325
  }
257
326
  tb->commitBulkInsert();
258
327
  db->endTrn();
259
328
 
260
329
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "Insert2");
261
- tb->release();
330
+ tb->release();
262
331
  }
263
332
 
264
333
  void testFind(database* db)
@@ -299,7 +368,7 @@ void testFind(database* db)
299
368
  tb->setFV((short)0, v);
300
369
  tb->find(table::findForword);
301
370
  BOOST_CHECK_MESSAGE(STATUS_EOF == tb->stat(), "find stat");
302
- tb->release();
371
+ tb->release();
303
372
  }
304
373
 
305
374
  void testFindNext(database* db)
@@ -317,9 +386,8 @@ void testFindNext(database* db)
317
386
  tb->findNext(true); // 11 ~ 19
318
387
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "findNext stat()");
319
388
  BOOST_CHECK_MESSAGE(i == tb->getFVint(fdi_id), "findNext value");
320
-
321
389
  }
322
- tb->release();
390
+ tb->release();
323
391
  }
324
392
 
325
393
  void testFindIn(database* db)
@@ -336,15 +404,13 @@ void testFindIn(database* db)
336
404
  q.addSeekKeyValue(_T("80"));
337
405
  q.addSeekKeyValue(_T("5000"));
338
406
 
339
-
340
-
341
407
  tb->setQuery(&q);
342
408
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
343
409
  tb->find();
344
410
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
345
411
  BOOST_CHECK_MESSAGE(tb->getFVint(fdi_id) == 10, "find in 10");
346
412
  tb->findNext();
347
- BOOST_CHECK_MESSAGE(tb->stat() == 4, "find in 300000");
413
+ BOOST_CHECK_MESSAGE(tb->stat() == 4, "find in 300000 stat =" << tb->stat());
348
414
 
349
415
  _TCHAR msg[1024];
350
416
  tb->keyValueDescription(msg, 1024);
@@ -369,15 +435,15 @@ void testFindIn(database* db)
369
435
 
370
436
  // Many params
371
437
  _TCHAR buf[20];
372
- _ltot_s(1, buf, 20, 10);
438
+ _ltot_s(1, buf, 20, 10);
373
439
  q.addSeekKeyValue(buf, true);
374
440
 
375
- for (int i=2;i<=10000;++i)
376
- {
441
+ for (int i = 2; i <= 10000; ++i)
442
+ {
377
443
  _ltot_s(i, buf, 20, 10);
378
- q.addSeekKeyValue(buf);
379
- }
380
- tb->setQuery(&q);
444
+ q.addSeekKeyValue(buf);
445
+ }
446
+ tb->setQuery(&q);
381
447
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "find in stat = " << tb->stat());
382
448
 
383
449
  tb->find();
@@ -391,7 +457,7 @@ void testFindIn(database* db)
391
457
  BOOST_CHECK_MESSAGE(i == 10000, "findNext in count");
392
458
  BOOST_CHECK_MESSAGE(9 == tb->stat(), "find in end stat = " << tb->stat());
393
459
 
394
- //LogicalCountLimit
460
+ // LogicalCountLimit
395
461
  q.addField(_T("id"));
396
462
  tb->setQuery(&q);
397
463
 
@@ -406,7 +472,7 @@ void testFindIn(database* db)
406
472
  BOOST_CHECK_MESSAGE(i == 10000, "findNext in count");
407
473
  BOOST_CHECK_MESSAGE(9 == tb->stat(), "find in end stat = " << tb->stat());
408
474
 
409
- tb->release();
475
+ tb->release();
410
476
  }
411
477
 
412
478
  void testGetPercentage(database* db)
@@ -420,7 +486,7 @@ void testGetPercentage(database* db)
420
486
  percentage_td per = tb->getPercentage();
421
487
 
422
488
  BOOST_CHECK_MESSAGE(true == (1200 > abs(5000 - per)), "GetPercentage");
423
- tb->release();
489
+ tb->release();
424
490
  }
425
491
 
426
492
  void testMovePercentage(database* db)
@@ -430,8 +496,9 @@ void testMovePercentage(database* db)
430
496
  tb->seekByPercentage(5000); // 50%
431
497
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "MovePercentage");
432
498
  // If mainus is less than 500 then ok.
433
- BOOST_CHECK_MESSAGE(true == (3000 > abs(10001 - tb->getFVint(fdi_id))), "MovePercentage 1");
434
- tb->release();
499
+ BOOST_CHECK_MESSAGE(true == (3000 > abs(10001 - tb->getFVint(fdi_id))),
500
+ "MovePercentage 1");
501
+ tb->release();
435
502
  }
436
503
 
437
504
  void testGetEqual(database* db)
@@ -445,10 +512,9 @@ void testGetEqual(database* db)
445
512
 
446
513
  tb->seek();
447
514
  BOOST_CHECK_MESSAGE(i == tb->getFVint(fdi_id), "GetEqual");
448
-
449
515
  }
450
516
  db->endSnapshot();
451
- tb->release();
517
+ tb->release();
452
518
  }
453
519
 
454
520
  void testGetNext(database* db)
@@ -467,7 +533,7 @@ void testGetNext(database* db)
467
533
  tb->seekNext();
468
534
  db->endSnapshot();
469
535
  }
470
- tb->release();
536
+ tb->release();
471
537
  }
472
538
 
473
539
  void testGetPrevious(database* db)
@@ -485,10 +551,11 @@ void testGetPrevious(database* db)
485
551
  BOOST_CHECK_MESSAGE(i == tb->getFVint(fdi_id), "GetPrevious I");
486
552
  }
487
553
  tb->seekPrev();
488
- BOOST_CHECK_MESSAGE(_tstring(_T("kosaka")) == _tstring(tb->getFVstr(1)), "GetPrevious kosaka");
554
+ BOOST_CHECK_MESSAGE(_tstring(_T("kosaka")) == _tstring(tb->getFVstr(1)),
555
+ "GetPrevious kosaka");
489
556
 
490
557
  db->endSnapshot();
491
- tb->release();
558
+ tb->release();
492
559
  }
493
560
 
494
561
  void testGetGreater(database* db)
@@ -509,7 +576,7 @@ void testGetGreater(database* db)
509
576
  BOOST_CHECK_MESSAGE(vv + 1 == tb->getFVint(fdi_id), "GetGreater false");
510
577
  tb->seekPrev();
511
578
  BOOST_CHECK_MESSAGE(vv == tb->getFVint(fdi_id), "GetGreater GetPrevious");
512
- tb->release();
579
+ tb->release();
513
580
  }
514
581
 
515
582
  void testGetLessThan(database* db)
@@ -530,8 +597,9 @@ void testGetLessThan(database* db)
530
597
  tb->seekLessThan(false);
531
598
  BOOST_CHECK_MESSAGE(vv - 1 == tb->getFVint(fdi_id), "GetLessThan false");
532
599
  tb->seekPrev();
533
- BOOST_CHECK_MESSAGE(vv - 2 == tb->getFVint(fdi_id), "GetLessThan GetPrevious");
534
- tb->release();
600
+ BOOST_CHECK_MESSAGE(vv - 2 == tb->getFVint(fdi_id),
601
+ "GetLessThan GetPrevious");
602
+ tb->release();
535
603
  }
536
604
 
537
605
  void testGetFirst(database* db)
@@ -539,8 +607,9 @@ void testGetFirst(database* db)
539
607
  table* tb = openTable(db);
540
608
  tb->clearBuffer();
541
609
  tb->seekFirst();
542
- BOOST_CHECK_MESSAGE(_tstring(_T("kosaka")) == _tstring(tb->getFVstr(1)), "GetFirst");
543
- tb->release();
610
+ BOOST_CHECK_MESSAGE(_tstring(_T("kosaka")) == _tstring(tb->getFVstr(1)),
611
+ "GetFirst");
612
+ tb->release();
544
613
  }
545
614
 
546
615
  void testGetLast(database* db)
@@ -549,7 +618,7 @@ void testGetLast(database* db)
549
618
  tb->clearBuffer();
550
619
  tb->seekLast();
551
620
  BOOST_CHECK_MESSAGE(20002 == tb->getFVint(fdi_id), "GetLast");
552
- tb->release();
621
+ tb->release();
553
622
  }
554
623
 
555
624
  void testMovePosition(database* db)
@@ -571,11 +640,12 @@ void testMovePosition(database* db)
571
640
  tb->seekLessThan(false);
572
641
  BOOST_CHECK_MESSAGE(vv - 1 == tb->getFVint(fdi_id), "GetLessThan false");
573
642
  tb->seekPrev();
574
- BOOST_CHECK_MESSAGE(vv - 2 == tb->getFVint(fdi_id), "GetLessThan GetPrevious");
643
+ BOOST_CHECK_MESSAGE(vv - 2 == tb->getFVint(fdi_id),
644
+ "GetLessThan GetPrevious");
575
645
 
576
646
  tb->seekByBookmark(pos);
577
647
  BOOST_CHECK_MESSAGE(15000 == tb->getFVint(fdi_id), "MovePosition");
578
- tb->release();
648
+ tb->release();
579
649
  }
580
650
 
581
651
  void testUpdate(database* db)
@@ -609,7 +679,7 @@ void testUpdate(database* db)
609
679
  v = 19999;
610
680
  tb->setFV(fdi_id, v);
611
681
  tb->update(table::changeCurrentCc); // 6 -> 19999 cur 19999
612
- tb->seekPrev(); // prev 19999
682
+ tb->seekPrev(); // prev 19999
613
683
  BOOST_CHECK_MESSAGE(v - 1 == tb->getFVint(fdi_id), "UpDate3");
614
684
  v = 10;
615
685
  tb->clearBuffer();
@@ -642,8 +712,9 @@ void testUpdate(database* db)
642
712
  tb->clearBuffer();
643
713
  tb->setFV(fdi_id, v);
644
714
  tb->seek();
645
- BOOST_CHECK_MESSAGE(_tcscmp(_T("ABC"), tb->getFVstr(fdi_name)) == 0, "update changeInKey2");
646
- tb->release();
715
+ BOOST_CHECK_MESSAGE(_tcscmp(_T("ABC"), tb->getFVstr(fdi_name)) == 0,
716
+ "update changeInKey2");
717
+ tb->release();
647
718
  }
648
719
 
649
720
  void testSnapShot(database* db)
@@ -669,10 +740,11 @@ void testSnapShot(database* db)
669
740
  tb2->setFV(fdi_name, tb2->getFVint(fdi_name) + 1);
670
741
  tb2->update();
671
742
  #ifdef ISOLATION_READ_COMMITTED
672
- BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->update(");
743
+ BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->update stat = " << tb2->stat());
673
744
  #else
674
745
  #ifdef ISOLATION_REPEATABLE_READ
675
- BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update(");
746
+ BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(),
747
+ "tb2->update stat = " << tb2->stat());
676
748
  #endif
677
749
  #endif
678
750
  /* -------------------------------------------------- */
@@ -690,8 +762,8 @@ void testSnapShot(database* db)
690
762
  #endif
691
763
 
692
764
  /* -------------------------------------------------- */
693
- tb->release();
694
- tb2->release();
765
+ tb->release();
766
+ tb2->release();
695
767
  database::destroy(db2);
696
768
  }
697
769
 
@@ -740,15 +812,15 @@ void testConflict(database* db)
740
812
  tb->update();
741
813
  BOOST_CHECK_MESSAGE(STATUS_CHANGE_CONFLICT == tb->stat(), "tb->update(");
742
814
  /* -------------------------------------------------- */
743
- tb->release();
744
- tb2->release();
815
+ tb->release();
816
+ tb2->release();
745
817
  database::destroy(db2);
746
818
  }
747
819
 
748
820
  void testTransactionLock(database* db)
749
821
  {
750
-
751
- database* db2 = database::create();
822
+
823
+ database* db2 = database::create();
752
824
  db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
753
825
  BOOST_CHECK_MESSAGE(0 == db2->stat(), "connect");
754
826
  table* tb = openTable(db);
@@ -839,13 +911,96 @@ void testTransactionLock(database* db)
839
911
 
840
912
  tb2->setKeyNum(0);
841
913
  tb2->seekFirst();
842
- BOOST_CHECK_MESSAGE(_tcscmp(tb2->getFVstr(fdi_name), _T("ABC")) == 0, "tb->seekFirst");
914
+ BOOST_CHECK_MESSAGE(_tcscmp(tb2->getFVstr(fdi_name), _T("ABC")) == 0,
915
+ "tb->seekFirst");
843
916
 
844
- tb->release();
845
- tb2->release();
917
+ tb->release();
918
+ tb2->release();
846
919
  database::destroy(db2);
847
920
  }
848
921
 
922
+ void testExclusive()
923
+ {
924
+
925
+ // db mode exclusive
926
+ database* db = database::create();
927
+ table* tb = openTable(db, TD_OPEN_EXCLUSIVE);
928
+ BOOST_CHECK_MESSAGE(0 == db->stat(), "Exclusive opened 1 ");
929
+
930
+ // Can not open another connections.
931
+ database* db2 = database::create();
932
+ db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
933
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "connect");
934
+ db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF);
935
+ BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat(),
936
+ "open 1" << db->stat());
937
+
938
+ table* tb2 = db->openTable(_T("user"));
939
+ BOOST_CHECK_MESSAGE(0 == db->stat(), "Exclusive opened 2");
940
+
941
+ tb->setKeyNum(0);
942
+ tb->seekFirst();
943
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekFirst");
944
+
945
+ tb->setFV(fdi_name, _T("ABC123"));
946
+ tb->update();
947
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "update");
948
+
949
+ tb2->setKeyNum(0);
950
+ tb2->seekFirst();
951
+ BOOST_CHECK_MESSAGE(0 == tb2->stat(), "update");
952
+ tb2->setFV(fdi_name, _T("ABC124"));
953
+ tb2->update();
954
+ BOOST_CHECK_MESSAGE(0 == tb2->stat(), "update");
955
+
956
+ tb->close();
957
+ tb2->close();
958
+ db->close();
959
+ db2->close();
960
+
961
+ // table mode exclusive
962
+ db = database::create();
963
+ tb = openTable(db, TD_OPEN_READONLY, TD_OPEN_EXCLUSIVE);
964
+
965
+ db2 = database::create();
966
+ db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
967
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "connect");
968
+ db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF);
969
+ BOOST_CHECK_MESSAGE(0 == db2->stat(), "open 1" << db->stat());
970
+
971
+ // Can not open another connections.
972
+ tb2 = db2->openTable(_T("user"));
973
+ BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat(),
974
+ "Exclusive opened 2");
975
+
976
+ // Can open a same connection.
977
+ table* tb3 = db->openTable(_T("user"));
978
+ BOOST_CHECK_MESSAGE(0 == db->stat(), "Exclusive opened 2");
979
+
980
+ tb->close();
981
+ if (tb2 != NULL)
982
+ tb2->close();
983
+ tb3->close();
984
+ db->close();
985
+ db2->close();
986
+ db->release();
987
+ db2->release();
988
+ // reopen and update
989
+ db = database::create();
990
+ tb = openTable(db);
991
+
992
+ tb->setKeyNum(0);
993
+ tb->seekFirst();
994
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekFirst");
995
+
996
+ tb->setFV(fdi_name, _T("ABC123"));
997
+ tb->update();
998
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "update");
999
+
1000
+ tb->release();
1001
+ db->release();
1002
+ }
1003
+
849
1004
  void testInsert2(database* db)
850
1005
  {
851
1006
  table* tb = openTable(db);
@@ -863,9 +1018,7 @@ void testInsert2(database* db)
863
1018
  tb->seekNext();
864
1019
  BOOST_CHECK_MESSAGE(11 == tb->getFVint(fdi_id), "GetEqual InsNext");
865
1020
  db->endTrn();
866
- tb->release();
867
-
868
-
1021
+ tb->release();
869
1022
  }
870
1023
 
871
1024
  void testDelete(database* db)
@@ -874,16 +1027,20 @@ void testDelete(database* db)
874
1027
 
875
1028
  // estimate number
876
1029
  int count = tb->recordCount(true);
877
- bool c = (abs(count - 20003) < 3000);
1030
+ bool c = (abs(count - 20003) < 5000);
878
1031
  BOOST_CHECK_MESSAGE(c == true, "RecordCount1");
879
1032
  if (!c)
880
1033
  {
881
1034
  char tmp[256];
882
- sprintf_s(tmp, 256, "true record count = 20003 as estimate recordCount count = %d ", count);
1035
+ sprintf_s(
1036
+ tmp, 256,
1037
+ "true record count = 20003 as estimate recordCount count = %d ",
1038
+ count);
883
1039
  BOOST_CHECK_MESSAGE(false, tmp);
884
1040
  }
885
1041
  // true number
886
- BOOST_CHECK_MESSAGE((uint_td)20003 == tb->recordCount(false), "RecordCount2");
1042
+ BOOST_CHECK_MESSAGE((uint_td)20003 == tb->recordCount(false),
1043
+ "RecordCount2");
887
1044
  int vv = 15001;
888
1045
  tb->clearBuffer();
889
1046
  tb->setFV(fdi_id, vv);
@@ -904,7 +1061,8 @@ void testDelete(database* db)
904
1061
  tb->clearBuffer();
905
1062
  tb->setFV(fdi_id, vv);
906
1063
  tb->seek();
907
- BOOST_CHECK_MESSAGE(tb->stat() == STATUS_NOT_FOUND_TI, "delete changeInKey2");
1064
+ BOOST_CHECK_MESSAGE(tb->stat() == STATUS_NOT_FOUND_TI,
1065
+ "delete changeInKey2");
908
1066
 
909
1067
  db->beginTrn();
910
1068
  tb->stepFirst();
@@ -917,8 +1075,7 @@ void testDelete(database* db)
917
1075
  BOOST_CHECK_MESSAGE(9 == tb->stat(), "StepNext");
918
1076
  db->endTrn();
919
1077
  BOOST_CHECK_MESSAGE((uint_td)0 == tb->recordCount(false), "RecordCount");
920
- tb->release();
921
-
1078
+ tb->release();
922
1079
  }
923
1080
 
924
1081
  void testSetOwner(database* db)
@@ -928,7 +1085,7 @@ void testSetOwner(database* db)
928
1085
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner");
929
1086
  tb->clearOwnerName();
930
1087
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner");
931
- tb->release();
1088
+ tb->release();
932
1089
  }
933
1090
 
934
1091
  void testDropIndex(database* db)
@@ -936,8 +1093,7 @@ void testDropIndex(database* db)
936
1093
  table* tb = openTable(db);
937
1094
  tb->dropIndex(false);
938
1095
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "DropIndex");
939
- tb->release();
940
-
1096
+ tb->release();
941
1097
  }
942
1098
 
943
1099
  void testLogin(database* db)
@@ -952,16 +1108,19 @@ void testLogin(database* db)
952
1108
  // second connection
953
1109
  database* db2 = database::create();
954
1110
  db2->connect(makeUri(PROTOCOL, HOSTNAME, _T("")), true);
955
- BOOST_CHECK_MESSAGE(0 == db->stat(), "new connection connect");
1111
+ BOOST_CHECK_MESSAGE(
1112
+ 0 == db->stat(),
1113
+ "new connection connect db->stat() = " << db->stat());
956
1114
  database::destroy(db2);
957
1115
 
958
1116
  db->disconnect(makeUri(PROTOCOL, HOSTNAME, _T("")));
959
- BOOST_CHECK_MESSAGE(0 == db->stat(), "disconnect");
960
-
1117
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1118
+ "disconnect db->stat() = " << db->stat());
961
1119
  }
962
1120
  // invalid host name
963
1121
  db->connect(makeUri(PROTOCOL, _T("localhost123"), _T("")));
964
- bool f = (db->stat() == ERROR_TD_INVALID_CLINETHOST) || (db->stat() == ERROR_TD_HOSTNAME_NOT_FOUND);
1122
+ bool f = (db->stat() == ERROR_TD_INVALID_CLINETHOST) ||
1123
+ (db->stat() == ERROR_TD_HOSTNAME_NOT_FOUND);
965
1124
  BOOST_CHECK_MESSAGE(f, "bad host stat =" << db->stat());
966
1125
  if (!f)
967
1126
  {
@@ -972,35 +1131,48 @@ void testLogin(database* db)
972
1131
  BOOST_MESSAGE(buf);
973
1132
  #endif
974
1133
  }
1134
+
1135
+ db->open(makeUri(PROTOCOL, _T("localhost123"), DBNAME, BDFNAME),
1136
+ TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
1137
+ f = (db->stat() == ERROR_TD_INVALID_CLINETHOST) ||
1138
+ (db->stat() == ERROR_TD_HOSTNAME_NOT_FOUND);
1139
+ BOOST_CHECK_MESSAGE(f, "bad host stat =" << db->stat());
1140
+
975
1141
  testCreateNewDataBase(db);
976
1142
  db->disconnect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
977
- BOOST_CHECK_MESSAGE(0 == db->stat(), "databese disconnect");
1143
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1144
+ "databese disconnect db->stat() = " << db->stat());
978
1145
 
979
1146
  // true database name
980
1147
  db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
981
- BOOST_CHECK_MESSAGE(0 == db->stat(), "databese ");
1148
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1149
+ "databese connect db->stat() = " << db->stat());
982
1150
  if (db->stat() == 0)
983
1151
  {
984
1152
  db->disconnect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
985
- BOOST_CHECK_MESSAGE(0 == db->stat(), "databese disconnect");
1153
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1154
+ "databese disconnect db->stat() = " << db->stat());
986
1155
  }
987
1156
  // invalid database name
988
1157
  testDropDatabase(db);
989
1158
  db->disconnect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
990
- BOOST_CHECK_MESSAGE(0 == db->stat(), "databese disconnect");
1159
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1160
+ "databese disconnect db->stat() = " << db->stat());
991
1161
 
992
1162
  db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
993
- BOOST_CHECK_MESSAGE(25000 + 1049 == db->stat(), "bad databese connect");
1163
+ BOOST_CHECK_MESSAGE(25000 + 1049 == db->stat(),
1164
+ "databese connect db->stat() = " << db->stat());
994
1165
 
995
1166
  db->disconnect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
996
- BOOST_CHECK_MESSAGE(0 == db->stat(), "bad databese disconnect");
997
-
1167
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1168
+ "databese disconnect db->stat() = " << db->stat());
998
1169
  }
999
1170
 
1000
1171
  // ------------------------------------------------------------------------
1001
1172
 
1002
1173
  // ------------------------------------------------------------------------
1003
- void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType, int charset)
1174
+ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
1175
+ int charset)
1004
1176
  {
1005
1177
  // create table
1006
1178
  dbdef* def = db->dbDef();
@@ -1015,6 +1187,7 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
1015
1187
  td.keyCount = 0;
1016
1188
  td.fieldCount = 0;
1017
1189
  td.flags.all = 0;
1190
+
1018
1191
  td.primaryKeyNum = -1;
1019
1192
  td.parentKeyNum = -1;
1020
1193
  td.replicaKeyNum = -1;
@@ -1030,34 +1203,33 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
1030
1203
  fd->setName(_T("id"));
1031
1204
  fd->type = ft_integer;
1032
1205
  fd->len = (ushort_td)4;
1033
- def->updateTableDef(id);
1034
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1");
1035
1206
 
1036
1207
  fd = def->insertField(id, 1);
1037
1208
  fd->setName(_T("name"));
1038
1209
  fd->type = fieldType;
1039
1210
  if (fieldType == ft_mywvarchar)
1040
- fd->len = (ushort_td)1 + mysql::charsize(CHARSET_UTF16LE) * 3; // max 3 char len byte
1211
+ fd->len = (ushort_td)1 +
1212
+ mysql::charsize(CHARSET_UTF16LE) * 3; // max 3 char len byte
1041
1213
  else if (fieldType == ft_mywvarbinary)
1042
- fd->len = (ushort_td)1 + mysql::charsize(CHARSET_UTF16LE) * 3; // max 6 char len byte
1214
+ fd->len = (ushort_td)1 +
1215
+ mysql::charsize(CHARSET_UTF16LE) * 3; // max 6 char len byte
1043
1216
  else if (fieldType == ft_myvarchar)
1044
1217
  {
1045
1218
  if (charset == CHARSET_CP932)
1046
- fd->len = (ushort_td)1 + mysql::charsize(CHARSET_CP932) * 3; // max 6 char len byte
1219
+ fd->len = (ushort_td)1 +
1220
+ mysql::charsize(CHARSET_CP932) * 3; // max 6 char len byte
1047
1221
  else if (charset == CHARSET_UTF8B4)
1048
- fd->len = (ushort_td)1 + mysql::charsize(CHARSET_UTF8B4) * 3; // max 6 char len byte
1222
+ fd->len =
1223
+ (ushort_td)1 +
1224
+ mysql::charsize(CHARSET_UTF8B4) * 3; // max 6 char len byte
1049
1225
  }
1050
1226
  else
1051
1227
  fd->len = (ushort_td)7; // max 6 char len byte
1052
- def->updateTableDef(id);
1053
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2");
1054
1228
 
1055
1229
  fd = def->insertField(id, 2);
1056
1230
  fd->setName(_T("groupid"));
1057
1231
  fd->type = ft_integer;
1058
1232
  fd->len = (ushort_td)4;
1059
- def->updateTableDef(id);
1060
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 3");
1061
1233
 
1062
1234
  keydef* kd = def->insertKey(id, 0);
1063
1235
 
@@ -1066,8 +1238,6 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
1066
1238
  kd->segments[0].flags.bit1 = 1; // changeable
1067
1239
  kd->segmentCount = 1;
1068
1240
 
1069
- def->updateTableDef(id);
1070
-
1071
1241
  kd = def->insertKey(id, 1);
1072
1242
 
1073
1243
  kd->segments[0].fieldNum = 1;
@@ -1088,7 +1258,6 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
1088
1258
  BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
1089
1259
  if (tb)
1090
1260
  tb->release();
1091
-
1092
1261
  }
1093
1262
 
1094
1263
  bool isUtf16leSupport(database* db)
@@ -1111,8 +1280,12 @@ void testCreateDataBaseVar(database* db)
1111
1280
  if (_tcscmp(PROTOCOL, _T("tdap")) != 0)
1112
1281
  return;
1113
1282
 
1283
+ if (db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME)))
1284
+ db->drop();
1285
+
1114
1286
  db->create(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME));
1115
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase stat = " << db->stat());
1287
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
1288
+ "createNewDataBase stat = " << db->stat());
1116
1289
  if (0 == db->stat())
1117
1290
  {
1118
1291
  db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME), 0, 0);
@@ -1123,14 +1296,17 @@ void testCreateDataBaseVar(database* db)
1123
1296
  doCreateVarTable(db, 1, _T("user1"), ft_myvarchar, CHARSET_CP932);
1124
1297
  doCreateVarTable(db, 2, _T("user2"), ft_myvarbinary, CHARSET_CP932);
1125
1298
  if (isUtf16leSupport(db))
1126
- doCreateVarTable(db, 3, _T("user3"), ft_mywvarchar, CHARSET_CP932);
1127
- doCreateVarTable(db, 4, _T("user4"), ft_mywvarbinary, CHARSET_CP932);
1299
+ doCreateVarTable(db, 3, _T("user3"), ft_mywvarchar,
1300
+ CHARSET_CP932);
1301
+ doCreateVarTable(db, 4, _T("user4"), ft_mywvarbinary,
1302
+ CHARSET_CP932);
1128
1303
  doCreateVarTable(db, 5, _T("user5"), ft_myvarchar, CHARSET_UTF8B4);
1129
1304
  db->close();
1130
- db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), TRANSACTD_SCHEMANAME), 0, 0);
1305
+ db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"),
1306
+ TRANSACTD_SCHEMANAME),
1307
+ 0, 0);
1131
1308
  }
1132
1309
  }
1133
-
1134
1310
  }
1135
1311
 
1136
1312
  void testDropDataBaseVar(database* db)
@@ -1171,7 +1347,7 @@ void dump(const char* p, int size)
1171
1347
 
1172
1348
  void doTestverField(table* tb, bool unicodeField, bool varCharField)
1173
1349
  {
1174
- // Set Wide Get Wide
1350
+ // Set Wide Get Wide
1175
1351
  #ifdef _WIN32
1176
1352
  tb->setFVW(2, L"68");
1177
1353
  #else
@@ -1183,17 +1359,22 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1183
1359
  tb->setFVW(1, L"1234567");
1184
1360
  if (varCharField)
1185
1361
  {
1186
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"123"), "Get Set W1");
1362
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"123"),
1363
+ "Get Set W1");
1187
1364
  if (wstring(tb->getFVWstr(1)) != wstring(L"123"))
1188
1365
  dump((const char*)tb->getFVWstr(1), 7);
1189
1366
  }
1190
1367
  else
1191
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"123456"), "Get Set W1");
1192
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 1");
1368
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"123456"),
1369
+ "Get Set W1");
1370
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1371
+ "Orverrun 1");
1193
1372
  // short
1194
1373
  tb->setFVW(1, L"12 ");
1195
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"12 "), "Get Set W2");
1196
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 2");
1374
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"12 "),
1375
+ "Get Set W2");
1376
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1377
+ "Orverrun 2");
1197
1378
  // too long lanji
1198
1379
 
1199
1380
  if (unicodeField)
@@ -1201,36 +1382,46 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1201
1382
 
1202
1383
  tb->setFVW(1, L"あいうえお\xD867\xDE3D"); // kanji that "aiueohokke"
1203
1384
  if (varCharField)
1204
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"あいう"), "Get Set W3");
1385
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"あいう"),
1386
+ "Get Set W3");
1205
1387
  else
1206
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"あいうえお"), "Get Set W3");
1388
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) ==
1389
+ wstring(L"あいうえお"),
1390
+ "Get Set W3");
1207
1391
  }
1208
1392
  else
1209
1393
  {
1210
1394
  tb->setFVW(1, L"0松本市"); // kanji that "matumostoshi"
1211
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"0松本"), "Get Set W3");
1395
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(1)) == wstring(L"0松本"),
1396
+ "Get Set W3");
1212
1397
  }
1213
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 2");
1398
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1399
+ "Orverrun 2");
1214
1400
  #endif
1215
1401
 
1216
1402
  // Set Ansi Get Wide
1217
1403
  // too long string
1218
1404
  tb->setFVA(1, "1234567");
1219
1405
  if (varCharField)
1220
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"), "Get Set A1");
1406
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"),
1407
+ "Get Set A1");
1221
1408
  else
1222
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"), "Get Set A1");
1409
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"),
1410
+ "Get Set A1");
1223
1411
 
1224
1412
  #ifdef _WIN32
1225
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 1");
1413
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1414
+ "Orverrun 1");
1226
1415
  #else
1227
1416
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 1");
1228
1417
  #endif
1229
1418
  // short string
1230
1419
  tb->setFVA(1, "13 ");
1231
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("13 "), "Get Set A2");
1420
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("13 "),
1421
+ "Get Set A2");
1232
1422
  #ifdef _WIN32
1233
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 2");
1423
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1424
+ "Orverrun 2");
1234
1425
  #else
1235
1426
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 2");
1236
1427
  #endif
@@ -1241,9 +1432,11 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1241
1432
  #ifdef LINUX
1242
1433
  tb->setFVA(1, "あいうえお𩸽"); // kanji that "aiueohokke"
1243
1434
  if (varCharField)
1244
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"), "Get Set A3");
1435
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
1436
+ "Get Set A3");
1245
1437
  else
1246
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいうえお"), "Get Set A3");
1438
+ BOOST_CHECK_MESSAGE(
1439
+ string(tb->getFVAstr(1)) == string("あいうえお"), "Get Set A3");
1247
1440
  #endif
1248
1441
  }
1249
1442
  else
@@ -1253,26 +1446,30 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1253
1446
  BOOST_CHECK_MESSAGE(f, "Get Set A3");
1254
1447
  if (!f)
1255
1448
  BOOST_MESSAGE(tb->getFVAstr(1));
1256
-
1257
1449
  }
1258
1450
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 2");
1259
1451
 
1260
- // Set Wide Get Ansi
1452
+ // Set Wide Get Ansi
1261
1453
  #ifdef _WIN32
1262
1454
  // too long string
1263
1455
  tb->setFVW(1, L"1234567");
1264
1456
  if (varCharField)
1265
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"), "GetA Set W1");
1457
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"),
1458
+ "GetA Set W1");
1266
1459
  else
1267
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"), "GetA Set W1");
1460
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"),
1461
+ "GetA Set W1");
1268
1462
 
1269
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 1");
1463
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1464
+ "Orverrun 1");
1270
1465
 
1271
1466
  // short string
1272
1467
  tb->setFVW(1, L"23 ");
1273
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("23 "), "GetA Set W2");
1468
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("23 "),
1469
+ "GetA Set W2");
1274
1470
 
1275
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 2");
1471
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1472
+ "Orverrun 2");
1276
1473
 
1277
1474
  // too long lanji
1278
1475
  if (unicodeField)
@@ -1280,28 +1477,36 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1280
1477
 
1281
1478
  tb->setFVW(1, L"あいうえお\xD867\xDE3D"); // kanji that "aiueohokke"
1282
1479
  if (varCharField)
1283
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"), "GetA Set W3");
1480
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
1481
+ "GetA Set W3");
1284
1482
  else
1285
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいうえお"), "GetA Set W3");
1483
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) ==
1484
+ string("あいうえお"),
1485
+ "GetA Set W3");
1286
1486
  }
1287
1487
  else
1288
1488
  {
1289
1489
  tb->setFVW(1, L"0松本市"); // kanji that "matumostoshi"
1290
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("0松本"), "GetA Set W3");
1490
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("0松本"),
1491
+ "GetA Set W3");
1291
1492
  }
1292
- BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"), "Orverrun 2");
1493
+ BOOST_CHECK_MESSAGE(wstring(tb->getFVWstr(2)) == wstring(L"68"),
1494
+ "Orverrun 2");
1293
1495
  #endif
1294
1496
  // Set Ansi Get Ansi
1295
1497
  // too long string
1296
1498
  tb->setFVA(1, "1234567");
1297
1499
  if (varCharField)
1298
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"), "GetA Set A1");
1500
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123"),
1501
+ "GetA Set A1");
1299
1502
  else
1300
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"), "GetA Set A1");
1503
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("123456"),
1504
+ "GetA Set A1");
1301
1505
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 1");
1302
1506
  // short string
1303
1507
  tb->setFVA(1, "13 ");
1304
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("13 "), "GetA Set A2");
1508
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("13 "),
1509
+ "GetA Set A2");
1305
1510
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 2");
1306
1511
 
1307
1512
  // too long lanji
@@ -1310,18 +1515,20 @@ void doTestverField(table* tb, bool unicodeField, bool varCharField)
1310
1515
  #ifdef LINUX
1311
1516
  tb->setFVA(1, "あいうえお𩸽"); // kanji that "aiueohokke"
1312
1517
  if (varCharField)
1313
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"), "Get Set A3");
1518
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
1519
+ "Get Set A3");
1314
1520
  else
1315
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいうえお"), "Get Set A3");
1521
+ BOOST_CHECK_MESSAGE(
1522
+ string(tb->getFVAstr(1)) == string("あいうえお"), "Get Set A3");
1316
1523
  #endif
1317
1524
  }
1318
1525
  else
1319
1526
  {
1320
1527
  tb->setFVA(1, "0松本市"); // kanji that "matumostoshi"
1321
- BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("0松本"), "GetA Set A3");
1528
+ BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("0松本"),
1529
+ "GetA Set A3");
1322
1530
  }
1323
1531
  BOOST_CHECK_MESSAGE(string(tb->getFVAstr(2)) == string("68"), "Orverrun 2");
1324
-
1325
1532
  }
1326
1533
 
1327
1534
  void testVarField(database* db)
@@ -1363,11 +1570,10 @@ void testVarField(database* db)
1363
1570
  doTestverField(tb, true, true);
1364
1571
 
1365
1572
  tb->release();
1366
-
1367
1573
  }
1368
1574
 
1369
- void doVarInsert(database* db, const _TCHAR* name, unsigned int codePage, const _TCHAR* str, int start, int end,
1370
- bool bulk)
1575
+ void doVarInsert(database* db, const _TCHAR* name, unsigned int codePage,
1576
+ const _TCHAR* str, int start, int end, bool bulk)
1371
1577
  {
1372
1578
  _TCHAR buf[256];
1373
1579
  table* tb = db->openTable(name);
@@ -1385,7 +1591,6 @@ void doVarInsert(database* db, const _TCHAR* name, unsigned int codePage, const
1385
1591
  v = i + 10;
1386
1592
  tb->setFV((short)2, v);
1387
1593
  tb->insert();
1388
-
1389
1594
  }
1390
1595
  if (bulk)
1391
1596
  tb->commitBulkInsert();
@@ -1433,10 +1638,10 @@ void testVarInsert(database* db)
1433
1638
  doVarInsert(db, _T("user4"), CP_ACP, _T(""), start, end, bulk);
1434
1639
  doVarInsert(db, _T("user5"), CP_UTF8, _T(""), start, end, bulk);
1435
1640
  }
1436
-
1437
1641
  }
1438
1642
 
1439
- void doVarRead(database* db, const _TCHAR* name, unsigned int codePage, const _TCHAR* str, int num, char_td key)
1643
+ void doVarRead(database* db, const _TCHAR* name, unsigned int codePage,
1644
+ const _TCHAR* str, int num, char_td key)
1440
1645
  {
1441
1646
 
1442
1647
  table* tb = db->openTable(name);
@@ -1460,10 +1665,10 @@ void doVarRead(database* db, const _TCHAR* name, unsigned int codePage, const _T
1460
1665
  BOOST_CHECK_MESSAGE(f, "GetEqual var field1");
1461
1666
 
1462
1667
  // test read of second field
1463
- BOOST_CHECK_MESSAGE((int)(num + 10) == tb->getFVint(2), "GetEqual var field2");
1668
+ BOOST_CHECK_MESSAGE((int)(num + 10) == tb->getFVint(2),
1669
+ "GetEqual var field2");
1464
1670
 
1465
1671
  tb->release();
1466
-
1467
1672
  }
1468
1673
 
1469
1674
  void testVarRead(database* db)
@@ -1510,7 +1715,8 @@ void testVarRead(database* db)
1510
1715
  }
1511
1716
  }
1512
1717
 
1513
- void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage, const _TCHAR* str, int num, char_td key)
1718
+ void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage,
1719
+ const _TCHAR* str, int num, char_td key)
1514
1720
  {
1515
1721
  table* tb = db->openTable(name);
1516
1722
  BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
@@ -1534,7 +1740,8 @@ void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage, const
1534
1740
  // test read of var field
1535
1741
  BOOST_CHECK_MESSAGE(i == tb->getFVint(1), "findNext");
1536
1742
  // test read of second field
1537
- BOOST_CHECK_MESSAGE((int)(i + 10) == tb->getFVint(2), "GetEqual var field2");
1743
+ BOOST_CHECK_MESSAGE((int)(i + 10) == tb->getFVint(2),
1744
+ "GetEqual var field2");
1538
1745
  }
1539
1746
 
1540
1747
  // find previous
@@ -1551,11 +1758,13 @@ void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage, const
1551
1758
  // test read of var field
1552
1759
  BOOST_CHECK_MESSAGE(i == tb->getFVint(1), "FindPrev");
1553
1760
  // test read of second field
1554
- BOOST_CHECK_MESSAGE((int)(i + 10) == tb->getFVint(2), "FindPrev var field2");
1761
+ BOOST_CHECK_MESSAGE((int)(i + 10) == tb->getFVint(2),
1762
+ "FindPrev var field2");
1555
1763
  }
1556
1764
 
1557
1765
  // test record count
1558
- BOOST_CHECK_MESSAGE((uint_td)10 == tb->recordCount(), "GetEqual var field2");
1766
+ BOOST_CHECK_MESSAGE((uint_td)10 == tb->recordCount(),
1767
+ "GetEqual var field2");
1559
1768
  }
1560
1769
  else
1561
1770
  {
@@ -1564,7 +1773,6 @@ void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage, const
1564
1773
  tb->setFV((short)2, v);
1565
1774
  }
1566
1775
  tb->release();
1567
-
1568
1776
  }
1569
1777
 
1570
1778
  void testFilterVar(database* db)
@@ -1578,8 +1786,6 @@ void testFilterVar(database* db)
1578
1786
  {
1579
1787
  const _TCHAR* str = _T("漢字文");
1580
1788
  const _TCHAR* str3 = _T("漢字文字のテ");
1581
- const _TCHAR* str2 = _T("123");
1582
- const _TCHAR* str4 = _T("1232");
1583
1789
  bool utf16leSupport = isUtf16leSupport(db);
1584
1790
 
1585
1791
  int num = 10;
@@ -1593,6 +1799,8 @@ void testFilterVar(database* db)
1593
1799
 
1594
1800
  #ifdef _UNICODE
1595
1801
  // short string
1802
+ const _TCHAR* str2 = _T("123");
1803
+ const _TCHAR* str4 = _T("1232");
1596
1804
  ++num;
1597
1805
  doVarFilter(db, L"user1", CP_ACP, str2, num, key);
1598
1806
  doVarFilter(db, L"user2", CP_ACP, str4, num, key);
@@ -1600,6 +1808,7 @@ void testFilterVar(database* db)
1600
1808
  doVarFilter(db, L"user3", CP_ACP, str2, num, key);
1601
1809
  doVarFilter(db, L"user4", CP_ACP, str4, num, key);
1602
1810
  doVarFilter(db, L"user5", CP_UTF8, str2, num, key);
1811
+
1603
1812
  #endif
1604
1813
 
1605
1814
  key = 1;
@@ -1610,13 +1819,13 @@ void testFilterVar(database* db)
1610
1819
  doVarFilter(db, _T("user4"), CP_ACP, _T("120"), 120, key);
1611
1820
  doVarFilter(db, _T("user5"), CP_UTF8, _T("120"), 120, key);
1612
1821
  }
1613
-
1614
1822
  }
1615
1823
  // ------------------------------------------------------------------------
1616
1824
 
1617
1825
  // ------------------------------------------------------------------------
1618
1826
 
1619
- void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td type, uchar_td type2)
1827
+ void stringFileterCreateTable(database* db, int id, const _TCHAR* name,
1828
+ uchar_td type, uchar_td type2)
1620
1829
  {
1621
1830
  // create table
1622
1831
 
@@ -1644,7 +1853,8 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
1644
1853
  fd->type = ft_integer;
1645
1854
  fd->len = (ushort_td)4;
1646
1855
  def->updateTableDef(id);
1647
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1 stat = " << def->stat());
1856
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
1857
+ "updateTableDef 1 stat = " << def->stat());
1648
1858
 
1649
1859
  fd = def->insertField(id, 1);
1650
1860
  fd->setName(_T("name"));
@@ -1658,12 +1868,12 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
1658
1868
  if (fd->blobLenBytes())
1659
1869
  {
1660
1870
  fd->len = 12; // 8+4
1661
-
1662
1871
  }
1663
1872
 
1664
1873
  fd->keylen = fd->len;
1665
1874
  def->updateTableDef(id);
1666
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
1875
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
1876
+ "updateTableDef 2 stat = " << def->stat());
1667
1877
 
1668
1878
  fd = def->insertField(id, 2);
1669
1879
  fd->setName(_T("namew"));
@@ -1677,7 +1887,6 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
1677
1887
  if (fd->blobLenBytes())
1678
1888
  {
1679
1889
  fd->len = 12; // 8+4
1680
-
1681
1890
  }
1682
1891
  fd->keylen = fd->len;
1683
1892
  def->updateTableDef(id);
@@ -1708,18 +1917,18 @@ void stringFileterCreateTable(database* db, int id, const _TCHAR* name, uchar_td
1708
1917
  kd->segmentCount = 1;
1709
1918
  def->updateTableDef(id);
1710
1919
  BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 6");
1711
-
1712
1920
  }
1713
1921
 
1714
1922
  void doInsertStringFileter(table* tb)
1715
1923
  {
1716
- tb->beginBulkInsert(BULKBUFSIZE);
1924
+
1717
1925
  tb->clearBuffer();
1718
1926
  int id = 1;
1719
1927
  tb->setFV(_T("id"), id);
1720
1928
  tb->setFV(_T("name"), _T("あいうえおかきくこ"));
1721
1929
  tb->setFV(_T("namew"), _T("あいうえおかきくこ"));
1722
1930
  tb->insert();
1931
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 1");
1723
1932
 
1724
1933
  tb->clearBuffer();
1725
1934
  id = 2;
@@ -1727,14 +1936,16 @@ void doInsertStringFileter(table* tb)
1727
1936
  tb->setFV(_T("name"), _T("A123456"));
1728
1937
  tb->setFV(_T("namew"), _T("A123456"));
1729
1938
  tb->insert();
1939
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 2");
1730
1940
 
1731
-
1941
+ tb->beginBulkInsert(BULKBUFSIZE);
1732
1942
  tb->clearBuffer();
1733
1943
  id = 3;
1734
1944
  tb->setFV(_T("id"), id);
1735
1945
  tb->setFV(_T("name"), _T("あいがあればOKです"));
1736
1946
  tb->setFV(_T("namew"), _T("あいがあればOKです"));
1737
1947
  tb->insert();
1948
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 3");
1738
1949
 
1739
1950
  tb->clearBuffer();
1740
1951
  id = 4;
@@ -1742,6 +1953,7 @@ void doInsertStringFileter(table* tb)
1742
1953
  tb->setFV(_T("name"), _T("おはようございます"));
1743
1954
  tb->setFV(_T("namew"), _T("おはようございます"));
1744
1955
  tb->insert();
1956
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 3");
1745
1957
 
1746
1958
  tb->clearBuffer();
1747
1959
  id = 5;
@@ -1749,7 +1961,9 @@ void doInsertStringFileter(table* tb)
1749
1961
  tb->setFV(_T("name"), _T("おめでとうございます。"));
1750
1962
  tb->setFV(_T("namew"), _T("おめでとうございます。"));
1751
1963
  tb->insert();
1964
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 4");
1752
1965
  tb->commitBulkInsert();
1966
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 5");
1753
1967
  }
1754
1968
 
1755
1969
  void doTestReadSF(table* tb)
@@ -1760,28 +1974,39 @@ void doTestReadSF(table* tb)
1760
1974
  tb->setFV(_T("id"), id);
1761
1975
  tb->seek();
1762
1976
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1763
- BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) == _tstring(tb->getFVstr(1)), "doTestReadSF2");
1977
+ BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) ==
1978
+ _tstring(tb->getFVstr(1)),
1979
+ "doTestReadSF2");
1980
+ BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) ==
1981
+ _tstring(tb->getFVstr(1)),
1982
+ "doTestReadSF2b");
1764
1983
 
1765
1984
  id = 3;
1766
1985
  tb->setFV(_T("id"), id);
1767
1986
  tb->seek();
1768
1987
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF3");
1769
- BOOST_CHECK_MESSAGE(_tstring(_T("あいがあればOKです")) == _tstring(tb->getFVstr(1)), "doTestReadSF4");
1988
+ BOOST_CHECK_MESSAGE(_tstring(_T("あいがあればOKです")) ==
1989
+ _tstring(tb->getFVstr(1)),
1990
+ "doTestReadSF4");
1991
+ BOOST_CHECK_MESSAGE(_tstring(_T("あいがあればOKです")) ==
1992
+ _tstring(tb->getFVstr(2)),
1993
+ "doTestReadSF4b");
1770
1994
 
1771
1995
  tb->setKeyNum(1);
1772
1996
  tb->clearBuffer();
1773
1997
  tb->setFV(_T("name"), _T("A123456"));
1774
1998
  tb->seek();
1775
1999
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF5");
1776
- BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(1)), "doTestReadSF6");
2000
+ BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(1)),
2001
+ "doTestReadSF6");
1777
2002
 
1778
2003
  tb->setKeyNum(2);
1779
2004
  tb->clearBuffer();
1780
2005
  tb->setFV(_T("namew"), _T("A123456"));
1781
2006
  tb->seek();
1782
2007
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF5");
1783
- BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)), "doTestReadSF6");
1784
-
2008
+ BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)),
2009
+ "doTestReadSF6");
1785
2010
  }
1786
2011
 
1787
2012
  void doTestSF(table* tb)
@@ -1789,33 +2014,38 @@ void doTestSF(table* tb)
1789
2014
  tb->setKeyNum(0);
1790
2015
  tb->clearBuffer();
1791
2016
 
1792
-
1793
-
1794
2017
  tb->setFilter(_T("name = 'あい*'"), 0, 10);
1795
2018
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1796
2019
  tb->seekFirst();
1797
2020
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1798
2021
  tb->findNext(false);
1799
2022
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1800
- BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) == _tstring(tb->getFVstr(1)), "doTestReadSF2");
2023
+ BOOST_CHECK_MESSAGE(_tstring(_T("あいうえおかきくこ")) ==
2024
+ _tstring(tb->getFVstr(1)),
2025
+ "doTestReadSF2");
1801
2026
  BOOST_CHECK_MESSAGE(2 == (int)tb->recordCount(), "doTestReadSF2");
1802
2027
 
1803
-
1804
2028
  tb->setFilter(_T("name <> 'あい*'"), 0, 10);
1805
2029
  BOOST_CHECK_MESSAGE(3 == (int)tb->recordCount(), "doTestReadSF2");
1806
2030
  tb->clearBuffer();
2031
+ tb->setFilter(_T("name <> 'あい*'"), 0, 10);
1807
2032
  tb->seekFirst();
1808
2033
  tb->findNext(false);
1809
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1810
- BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2034
+ BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1 stat = " << tb->stat());
2035
+ BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)),
2036
+ "doTestReadSF1");
1811
2037
 
1812
2038
  tb->findNext();
1813
2039
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1814
- BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2040
+ BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) ==
2041
+ _tstring(tb->getFVstr(2)),
2042
+ "doTestReadSF1");
1815
2043
 
1816
2044
  tb->findNext();
1817
2045
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1818
- BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2046
+ BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) ==
2047
+ _tstring(tb->getFVstr(2)),
2048
+ "doTestReadSF1");
1819
2049
  tb->findNext();
1820
2050
  BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
1821
2051
 
@@ -1823,15 +2053,20 @@ void doTestSF(table* tb)
1823
2053
  tb->seekLast();
1824
2054
  tb->findPrev(false);
1825
2055
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1826
- BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2056
+ BOOST_CHECK_MESSAGE(_tstring(_T("おめでとうございます。")) ==
2057
+ _tstring(tb->getFVstr(2)),
2058
+ "doTestReadSF1");
1827
2059
 
1828
2060
  tb->findPrev();
1829
2061
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1830
- BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2062
+ BOOST_CHECK_MESSAGE(_tstring(_T("おはようございます")) ==
2063
+ _tstring(tb->getFVstr(2)),
2064
+ "doTestReadSF1");
1831
2065
 
1832
2066
  tb->findPrev(false);
1833
2067
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestReadSF1");
1834
- BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)), "doTestReadSF1");
2068
+ BOOST_CHECK_MESSAGE(_tstring(_T("A123456")) == _tstring(tb->getFVstr(2)),
2069
+ "doTestReadSF1");
1835
2070
 
1836
2071
  tb->findPrev();
1837
2072
  BOOST_CHECK_MESSAGE(9 == tb->stat(), "doTestReadSF1");
@@ -1842,12 +2077,12 @@ void doTestSF(table* tb)
1842
2077
  tb->setFilter(_T("name <> ''"), 0, 10);
1843
2078
  BOOST_CHECK_MESSAGE(5 == (int)tb->recordCount(), "doTestReadSF2");
1844
2079
 
1845
- //test setFilter don't change field value
2080
+ // test setFilter don't change field value
1846
2081
  tb->clearBuffer();
1847
2082
  tb->setFV(_T("name"), _T("ABCDE"));
1848
2083
  tb->setFilter(_T("name = 'あい'"), 0, 10);
1849
- BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)), "doTestReadSF2 field value");
1850
-
2084
+ BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)),
2085
+ "doTestReadSF2 field value");
1851
2086
  }
1852
2087
 
1853
2088
  void doTestUpdateSF(table* tb)
@@ -1856,31 +2091,41 @@ void doTestUpdateSF(table* tb)
1856
2091
  tb->setKeyNum(0);
1857
2092
  tb->clearBuffer();
1858
2093
  tb->seekFirst();
1859
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
2094
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2095
+ "doTestUpdateSF stat = " << tb->stat());
1860
2096
  tb->setFV(_T("name"), _T("ABCDE"));
1861
2097
  tb->setFV(_T("namew"), _T("ABCDEW"));
1862
2098
  tb->update();
1863
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
2099
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2100
+ "doTestUpdateSF stat = " << tb->stat());
1864
2101
  tb->seekNext();
1865
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
2102
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2103
+ "doTestUpdateSF stat = " << tb->stat());
1866
2104
 
1867
2105
  tb->setFV(_T("name"), _T("ABCDE2"));
1868
2106
  tb->setFV(_T("namew"), _T("ABCDEW2"));
1869
2107
  tb->update();
1870
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
2108
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2109
+ "doTestUpdateSF stat = " << tb->stat());
1871
2110
 
1872
2111
  tb->seekFirst();
1873
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
1874
- BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)), "doTestUpdateSF");
1875
- BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW")) == _tstring(tb->getFVstr(2)), "doTestUpdateSF" );
2112
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2113
+ "doTestUpdateSF stat = " << tb->stat());
2114
+ BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE")) == _tstring(tb->getFVstr(1)),
2115
+ "doTestUpdateSF");
2116
+ BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW")) == _tstring(tb->getFVstr(2)),
2117
+ "doTestUpdateSF");
1876
2118
  tb->seekNext();
1877
- BOOST_CHECK_MESSAGE(0 == tb->stat(), "doTestUpdateSF stat = " << tb->stat());
1878
- BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE2")) == _tstring(tb->getFVstr(1)), "doTestUpdateSF");
1879
- BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW2")) == _tstring(tb->getFVstr(2)), "doTestUpdateSF" );
1880
-
2119
+ BOOST_CHECK_MESSAGE(0 == tb->stat(),
2120
+ "doTestUpdateSF stat = " << tb->stat());
2121
+ BOOST_CHECK_MESSAGE(_tstring(_T("ABCDE2")) == _tstring(tb->getFVstr(1)),
2122
+ "doTestUpdateSF");
2123
+ BOOST_CHECK_MESSAGE(_tstring(_T("ABCDEW2")) == _tstring(tb->getFVstr(2)),
2124
+ "doTestUpdateSF");
1881
2125
  }
1882
2126
 
1883
- void doTestStringFileter(database* db, int id, const _TCHAR* name, uchar_td type, uchar_td type2)
2127
+ void doTestStringFileter(database* db, int id, const _TCHAR* name,
2128
+ uchar_td type, uchar_td type2)
1884
2129
  {
1885
2130
 
1886
2131
  stringFileterCreateTable(db, id, name, type, type2);
@@ -1900,18 +2145,19 @@ void testStringFileter(database* db)
1900
2145
  BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase");
1901
2146
 
1902
2147
  db->open(makeUri(PROTOCOL, HOSTNAME, _T("testString"), BDFNAME), 0, 0);
1903
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase 1 stat = " << db->stat());
2148
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
2149
+ "createNewDataBase 1 stat = " << db->stat());
1904
2150
 
1905
2151
  doTestStringFileter(db, 1, _T("zstring"), ft_zstring, ft_wzstring);
1906
2152
  if (isUtf16leSupport(db))
1907
- doTestStringFileter(db, 2, _T("myvarchar"), ft_myvarchar, ft_mywvarchar);
2153
+ doTestStringFileter(db, 2, _T("myvarchar"), ft_myvarchar,
2154
+ ft_mywvarchar);
1908
2155
  else
1909
2156
  doTestStringFileter(db, 2, _T("myvarchar"), ft_myvarchar, ft_myvarchar);
1910
2157
 
1911
2158
  doTestStringFileter(db, 3, _T("mytext"), ft_mytext, ft_myblob);
1912
2159
 
1913
2160
  db->close();
1914
-
1915
2161
  }
1916
2162
 
1917
2163
  void testDropDataBaseStr(database* db)
@@ -1919,21 +2165,16 @@ void testDropDataBaseStr(database* db)
1919
2165
  db->open(makeUri(PROTOCOL, HOSTNAME, _T("testString"), BDFNAME), 0, 0);
1920
2166
  BOOST_CHECK_MESSAGE(0 == db->stat(), "createNewDataBase 1");
1921
2167
  db->drop();
1922
- BOOST_CHECK_MESSAGE(0 == db->stat(), "DropDataBaseTestString stat=" << db->stat());
1923
-
2168
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
2169
+ "DropDataBaseTestString stat=" << db->stat());
1924
2170
  }
1925
2171
  // ------------------------------------------------------------------------
1926
2172
 
1927
- _TCHAR dbNmae[50] =
1928
- {_T("テスト")};
1929
- _TCHAR bdfNmae[50] =
1930
- {_T("構成.bdf")};
1931
- _TCHAR tableNmae[50] =
1932
- {_T("漢字テーブル")};
1933
- _TCHAR fdName1[50] =
1934
- {_T("番号")};
1935
- _TCHAR fdName2[50] =
1936
- {_T("名前")};
2173
+ _TCHAR dbNmae[50] = { _T("テスト") };
2174
+ _TCHAR bdfNmae[50] = { _T("構成.bdf") };
2175
+ _TCHAR tableNmae[50] = { _T("漢字テーブル") };
2176
+ _TCHAR fdName1[50] = { _T("番号") };
2177
+ _TCHAR fdName2[50] = { _T("名前") };
1937
2178
 
1938
2179
  bool nameInited = false;
1939
2180
 
@@ -1957,7 +2198,6 @@ void initKanjiName()
1957
2198
  nameInited = true;
1958
2199
  }
1959
2200
  #endif
1960
-
1961
2201
  }
1962
2202
 
1963
2203
  void testDropDatabaseKanji(database* db)
@@ -1978,10 +2218,13 @@ void testKnajiCreateSchema(database* db)
1978
2218
  testDropDatabaseKanji(db);
1979
2219
  db->create(makeUri(PROTOCOL, HOSTNAME, dbNmae, bdfNmae));
1980
2220
  }
1981
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createKanjiDatabase stat = " << db->stat());
2221
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
2222
+ "createKanjiDatabase stat = " << db->stat());
1982
2223
  // create table
1983
- db->open(makeUri(PROTOCOL, HOSTNAME, dbNmae, bdfNmae), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
1984
- BOOST_CHECK_MESSAGE(0 == db->stat(), "createKanjiDatabase 1 stat = " << db->stat());
2224
+ db->open(makeUri(PROTOCOL, HOSTNAME, dbNmae, bdfNmae), TYPE_SCHEMA_BDF,
2225
+ TD_OPEN_NORMAL);
2226
+ BOOST_CHECK_MESSAGE(0 == db->stat(),
2227
+ "createKanjiDatabase 1 stat = " << db->stat());
1985
2228
 
1986
2229
  dbdef* def = db->dbDef();
1987
2230
  if (def)
@@ -2000,21 +2243,24 @@ void testKnajiCreateSchema(database* db)
2000
2243
  td.pageSize = 2048;
2001
2244
 
2002
2245
  def->insertTable(&td);
2003
- BOOST_CHECK_MESSAGE(0 == def->stat(), "insertTable stat = " << def->stat());
2246
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
2247
+ "insertTable stat = " << def->stat());
2004
2248
 
2005
2249
  fielddef* fd = def->insertField(1, 0);
2006
2250
  fd->setName(fdName1);
2007
2251
  fd->type = ft_integer;
2008
2252
  fd->len = (ushort_td)4;
2009
2253
  def->updateTableDef(1);
2010
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 1 stat = " << def->stat());
2254
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
2255
+ "updateTableDef 1 stat = " << def->stat());
2011
2256
 
2012
2257
  fd = def->insertField(1, 1);
2013
2258
  fd->setName(fdName2);
2014
2259
  fd->type = ft_zstring;
2015
2260
  fd->len = (ushort_td)33;
2016
2261
  def->updateTableDef(1);
2017
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 2 stat = " << def->stat());
2262
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
2263
+ "updateTableDef 2 stat = " << def->stat());
2018
2264
 
2019
2265
  keydef* kd = def->insertKey(1, 0);
2020
2266
  kd->segments[0].fieldNum = 0;
@@ -2023,15 +2269,16 @@ void testKnajiCreateSchema(database* db)
2023
2269
  kd->segmentCount = 1;
2024
2270
 
2025
2271
  def->updateTableDef(1);
2026
- BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 3 stat = " << def->stat());
2027
-
2272
+ BOOST_CHECK_MESSAGE(0 == def->stat(),
2273
+ "updateTableDef 3 stat = " << def->stat());
2028
2274
  }
2029
2275
  }
2030
2276
 
2031
2277
  table* openKnajiTable(database* db)
2032
2278
  {
2033
2279
 
2034
- db->open(makeUri(PROTOCOL, HOSTNAME, dbNmae, bdfNmae), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
2280
+ db->open(makeUri(PROTOCOL, HOSTNAME, dbNmae, bdfNmae), TYPE_SCHEMA_BDF,
2281
+ TD_OPEN_NORMAL);
2035
2282
  BOOST_CHECK_MESSAGE(0 == db->stat(), "openKnajiTable 1");
2036
2283
  table* tb = db->openTable(tableNmae);
2037
2284
  BOOST_CHECK_MESSAGE(0 == db->stat(), "openKnajiTable 2");
@@ -2053,8 +2300,7 @@ void testInsertKanji(database* db)
2053
2300
  tb->setFV(fdName2, _T("矢口"));
2054
2301
  tb->insert();
2055
2302
  BOOST_CHECK_MESSAGE(0 == tb->stat(), "insert 2");
2056
- tb->release();
2057
-
2303
+ tb->release();
2058
2304
  }
2059
2305
 
2060
2306
  void testGetEqualKanji(database* db)
@@ -2064,14 +2310,15 @@ void testGetEqualKanji(database* db)
2064
2310
  tb->setFV((short)0, 1);
2065
2311
  tb->seek();
2066
2312
  BOOST_CHECK_MESSAGE(1 == tb->getFVint(fdName1), "GetEqual id 1");
2067
- BOOST_CHECK_MESSAGE(_tcscmp(tb->getFVstr(fdName2), _T("小坂")) == 0, "GetEqual name 2");
2313
+ BOOST_CHECK_MESSAGE(_tcscmp(tb->getFVstr(fdName2), _T("小坂")) == 0,
2314
+ "GetEqual name 2");
2068
2315
 
2069
2316
  tb->setFV((short)0, 2);
2070
2317
  tb->seek();
2071
2318
  BOOST_CHECK_MESSAGE(2 == tb->getFVint(fdName1), "GetEqual id 2");
2072
- BOOST_CHECK_MESSAGE(_tcscmp(tb->getFVstr(fdName2), _T("矢口")) == 0, "GetEqual name 2");
2073
- tb->release();
2074
-
2319
+ BOOST_CHECK_MESSAGE(_tcscmp(tb->getFVstr(fdName2), _T("矢口")) == 0,
2320
+ "GetEqual name 2");
2321
+ tb->release();
2075
2322
  }
2076
2323
 
2077
2324
  // ------------------------------------------------------------------------
@@ -2086,7 +2333,7 @@ void testResultField(database* db)
2086
2333
 
2087
2334
  size_t len = rf.writeBuffer(0, true) - (unsigned char*)0;
2088
2335
  BOOST_CHECK_MESSAGE(len == 4, " resultField.writeBuffer");
2089
-
2336
+ tb->release();
2090
2337
  }
2091
2338
 
2092
2339
  void testResultDef()
@@ -2099,11 +2346,8 @@ void testResultDef()
2099
2346
 
2100
2347
  size_t len = rd.writeBuffer(0, true) - (unsigned char*)0;
2101
2348
  BOOST_CHECK_MESSAGE(len == 4, " resultDef.writeBuffer");
2102
-
2103
-
2104
2349
  }
2105
2350
 
2106
-
2107
2351
  void testLogic(database* db)
2108
2352
  {
2109
2353
  table* tb = openTable(db);
@@ -2111,71 +2355,70 @@ void testLogic(database* db)
2111
2355
 
2112
2356
  lc.setParam(tb, _T("name"), _T("="), _T("abc"), eCend);
2113
2357
 
2114
-
2115
2358
  BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
2116
2359
  BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
2117
2360
  BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
2118
2361
  BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
2119
2362
  BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
2120
- BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc")==0, " logic.data");
2363
+ BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
2121
2364
 
2122
2365
  size_t len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
2123
- BOOST_CHECK_MESSAGE(len == 7+33, " logic.writeBuffer");
2366
+ BOOST_CHECK_MESSAGE(len == 7 + 33, " logic.writeBuffer");
2124
2367
 
2125
- //compField invalid filed name
2368
+ // compField invalid filed name
2126
2369
  bool ret = lc.setParam(tb, _T("name"), _T("="), _T("1"), eCend, true);
2127
2370
  BOOST_CHECK_MESSAGE(ret == false, " logic invalid filed name");
2128
2371
 
2129
- //compField
2372
+ // compField
2130
2373
  ret = lc.setParam(tb, _T("name"), _T("="), _T("id"), eCend, true);
2131
2374
  BOOST_CHECK_MESSAGE(ret == true, " logic filed name");
2132
2375
  BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
2133
2376
  BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
2134
2377
  BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
2135
- BOOST_CHECK_MESSAGE(lc.logType == 1+CMPLOGICAL_FIELD, " logic.logType compField");
2378
+ BOOST_CHECK_MESSAGE(lc.logType == 1 + CMPLOGICAL_FIELD,
2379
+ " logic.logType compField");
2136
2380
  BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
2137
2381
  BOOST_CHECK_MESSAGE(*((short*)lc.data) == 0, " logic.data");
2138
2382
  len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
2139
- BOOST_CHECK_MESSAGE(len == 7+2, " logic.writeBuffer");
2383
+ BOOST_CHECK_MESSAGE(len == 7 + 2, " logic.writeBuffer");
2140
2384
 
2141
- //invalid filed name
2385
+ // invalid filed name
2142
2386
  ret = lc.setParam(tb, _T("name1"), _T("="), _T("id"), eCend, true);
2143
2387
  BOOST_CHECK_MESSAGE(ret == false, " logic invalid filed name2");
2144
2388
 
2145
- //wildcard
2146
- ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCend, false);
2389
+ // wildcard
2390
+ lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCend, false);
2147
2391
  BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
2148
2392
  BOOST_CHECK_MESSAGE(lc.len == 3, " logic.len");
2149
2393
  BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
2150
2394
  BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
2151
2395
  BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
2152
- BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc")==0, " logic.data");
2396
+ BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
2153
2397
 
2154
2398
  len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
2155
- BOOST_CHECK_MESSAGE(len == 7+3, " logic.writeBuffer");
2399
+ BOOST_CHECK_MESSAGE(len == 7 + 3, " logic.writeBuffer");
2156
2400
 
2157
- ret = lc.setParam(tb, _T("name"), _T("="), _T("漢字*"), eCend, false);
2158
- BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "漢字")==0, " logic.data");
2401
+ lc.setParam(tb, _T("name"), _T("="), _T("漢字*"), eCend, false);
2402
+ BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "漢字") == 0, " logic.data");
2159
2403
 
2160
2404
  len = lc.writeBuffer(0, true, false) - (unsigned char*)0;
2161
- BOOST_CHECK_MESSAGE(len == 7 + (_tcslen(_T("漢字"))*sizeof(_TCHAR))
2162
- , " logic.writeBuffer len =" << len);
2405
+ BOOST_CHECK_MESSAGE(len == 7 + (_tcslen(_T("漢字")) * sizeof(_TCHAR)),
2406
+ " logic.writeBuffer len =" << len);
2163
2407
 
2164
-
2165
- //combine
2166
- ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCor, false);
2408
+ // combine
2409
+ lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCor, false);
2167
2410
  BOOST_CHECK_MESSAGE(lc.opr == 2, " logic.opr or");
2168
- ret = lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCand, false);
2411
+ lc.setParam(tb, _T("name"), _T("="), _T("abc*"), eCand, false);
2169
2412
  BOOST_CHECK_MESSAGE(lc.opr == 1, " logic.opr and");
2170
2413
 
2171
- //logType
2414
+ // logType
2172
2415
  ret = lc.setParam(tb, _T("name"), _T("!="), _T("abc*"), eCend, false);
2173
2416
  BOOST_CHECK_MESSAGE(lc.logType == 255, " logic.logType !=");
2174
2417
  BOOST_CHECK_MESSAGE(ret == false, " logic invalid logType");
2175
2418
 
2176
- //canJoin
2419
+ // canJoin
2177
2420
 
2178
- //zstring is cannot join
2421
+ // zstring is cannot join
2179
2422
  lc.setParam(tb, _T("name"), _T("="), _T("1"), eCand, false);
2180
2423
  BOOST_CHECK_MESSAGE(lc.canJoin(false) == false, " logic canJoin");
2181
2424
  BOOST_CHECK_MESSAGE(lc.canJoin(true) == false, " logic canJoin");
@@ -2191,7 +2434,6 @@ void testLogic(database* db)
2191
2434
  BOOST_CHECK_MESSAGE(lc.canJoin(true) == false, " logic canJoin");
2192
2435
  BOOST_CHECK_MESSAGE(lc.canJoin(false) == true, " logic canJoin");
2193
2436
 
2194
-
2195
2437
  lc.opr = eCand;
2196
2438
 
2197
2439
  logic lc2;
@@ -2203,7 +2445,7 @@ void testLogic(database* db)
2203
2445
  lc2.pos = 4;
2204
2446
  BOOST_CHECK_MESSAGE(lc.isNextFiled(&lc2) == true, " logic isNextFiled");
2205
2447
 
2206
- //join
2448
+ // join
2207
2449
  lc.joinAfter(&lc2);
2208
2450
  BOOST_CHECK_MESSAGE(lc.len == 8, " logic joinAfter");
2209
2451
 
@@ -2212,96 +2454,109 @@ void testLogic(database* db)
2212
2454
  header hd;
2213
2455
  len = hd.writeBuffer(0, true) - (unsigned char*)0;
2214
2456
  BOOST_CHECK_MESSAGE(len == 8, " header.writeBuffer");
2215
-
2216
-
2457
+ tb->release();
2217
2458
  }
2218
2459
 
2219
-
2220
-
2221
2460
  void testQuery()
2222
2461
  {
2223
2462
  queryBase q;
2224
2463
  q.queryString(_T("id = 0 and name = 'Abc efg'"));
2225
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("id = '0' and name = 'Abc efg'")
2226
- , "queryString");
2227
-
2464
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2465
+ _T("id = '0' and name = 'Abc efg'"),
2466
+ "queryString");
2467
+
2228
2468
  q.queryString(_T(""));
2229
2469
  q.addLogic(_T("id"), _T("="), _T("0"));
2230
2470
  q.addLogic(_T("and"), _T("name"), _T("="), _T("Abc efg"));
2231
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("id = '0' and name = 'Abc efg'"), "queryString");
2232
-
2471
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2472
+ _T("id = '0' and name = 'Abc efg'"),
2473
+ "queryString");
2474
+
2233
2475
  q.queryString(_T("select id,name id = 0 AND name = 'Abc&' efg'"));
2234
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&' efg'")
2235
- , "queryString");
2236
-
2476
+ BOOST_CHECK_MESSAGE(
2477
+ _tstring(q.toString()) ==
2478
+ _T("select id,name id = '0' AND name = 'Abc&' efg'"),
2479
+ "queryString");
2480
+
2237
2481
  q.queryString(_T(""));
2238
2482
  q.addField(_T("id"));
2239
2483
  q.addField(_T("name"));
2240
2484
  q.addLogic(_T("id"), _T("="), _T("0"));
2241
2485
  q.addLogic(_T("AND"), _T("name"), _T("="), _T("Abc' efg"));
2242
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&' efg'")
2243
- , "queryString");
2244
-
2486
+ BOOST_CHECK_MESSAGE(
2487
+ _tstring(q.toString()) ==
2488
+ _T("select id,name id = '0' AND name = 'Abc&' efg'"),
2489
+ "queryString");
2490
+
2245
2491
  q.queryString(_T("select id,name id = 0 AND name = 'Abc&& efg'"));
2246
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&& efg'")
2247
- , "queryString");
2248
-
2492
+ BOOST_CHECK_MESSAGE(
2493
+ _tstring(q.toString()) ==
2494
+ _T("select id,name id = '0' AND name = 'Abc&& efg'"),
2495
+ "queryString");
2496
+
2249
2497
  q.queryString(_T(""));
2250
2498
  q.addField(_T("id"));
2251
2499
  q.addField(_T("name"));
2252
2500
  q.addLogic(_T("id"), _T("="), _T("0"));
2253
2501
  q.addLogic(_T("AND"), _T("name"), _T("="), _T("Abc& efg"));
2254
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '0' AND name = 'Abc&& efg'")
2255
- , "queryString");
2256
-
2502
+ BOOST_CHECK_MESSAGE(
2503
+ _tstring(q.toString()) ==
2504
+ _T("select id,name id = '0' AND name = 'Abc&& efg'"),
2505
+ "queryString");
2506
+
2257
2507
  q.queryString(_T("*"));
2258
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
2259
-
2508
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
2509
+
2260
2510
  q.queryString(_T(""));
2261
2511
  q.all();
2262
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
2263
-
2512
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("*"), "queryString");
2513
+
2264
2514
  q.queryString(_T("Select id,name id = 2"));
2265
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'")
2266
- , "queryString");
2267
-
2515
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'"),
2516
+ "queryString");
2517
+
2268
2518
  q.queryString(_T(""));
2269
2519
  q.addField(_T("id"));
2270
2520
  q.addField(_T("name"));
2271
2521
  q.addLogic(_T("id"), _T("="), _T("2"));
2272
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'")
2273
- , "queryString");
2274
-
2522
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name id = '2'"),
2523
+ "queryString");
2524
+
2275
2525
  q.queryString(_T("SELECT id,name,fc id = 2"));
2276
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2'")
2277
- , "queryString");
2278
-
2526
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2527
+ _T("select id,name,fc id = '2'"),
2528
+ "queryString");
2529
+
2279
2530
  q.queryString(_T(""));
2280
2531
  q.addField(_T("id"));
2281
2532
  q.addField(_T("name"));
2282
2533
  q.addField(_T("fc"));
2283
2534
  q.addLogic(_T("id"), _T("="), _T("2"));
2284
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2'")
2285
- , "queryString");
2286
-
2535
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2536
+ _T("select id,name,fc id = '2'"),
2537
+ "queryString");
2538
+
2287
2539
  q.queryString(_T("select id,name,fc id = 2 and name = '3'"));
2288
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2' and name = '3'")
2289
- , "queryString");
2290
-
2540
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2541
+ _T("select id,name,fc id = '2' and name = '3'"),
2542
+ "queryString");
2543
+
2291
2544
  q.queryString(_T(""));
2292
2545
  q.addField(_T("id"));
2293
2546
  q.addField(_T("name"));
2294
2547
  q.addField(_T("fc"));
2295
2548
  q.addLogic(_T("id"), _T("="), _T("2"));
2296
2549
  q.addLogic(_T("and"), _T("name"), _T("="), _T("3"));
2297
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc id = '2' and name = '3'")
2298
- , "queryString");
2299
-
2300
- //IN include
2550
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2551
+ _T("select id,name,fc id = '2' and name = '3'"),
2552
+ "queryString");
2553
+
2554
+ // IN include
2301
2555
  q.queryString(_T("select id,name,fc IN '1','2','3'"));
2302
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc in '1','2','3'")
2303
- , "queryString");
2304
-
2556
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2557
+ _T("select id,name,fc in '1','2','3'"),
2558
+ "queryString");
2559
+
2305
2560
  q.queryString(_T(""));
2306
2561
  q.addField(_T("id"));
2307
2562
  q.addField(_T("name"));
@@ -2309,107 +2564,610 @@ void testQuery()
2309
2564
  q.addSeekKeyValue(_T("1"));
2310
2565
  q.addSeekKeyValue(_T("2"));
2311
2566
  q.addSeekKeyValue(_T("3"));
2312
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select id,name,fc in '1','2','3'")
2313
- , "queryString");
2314
-
2567
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) ==
2568
+ _T("select id,name,fc in '1','2','3'"),
2569
+ "queryString");
2570
+
2315
2571
  q.queryString(_T("IN '1','2','3'"));
2316
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
2317
- , "queryString");
2318
-
2572
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'"),
2573
+ "queryString");
2574
+
2319
2575
  q.queryString(_T("IN 1,2,3"));
2320
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
2321
- , "queryString");
2322
-
2576
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'"),
2577
+ "queryString");
2578
+
2323
2579
  q.queryString(_T(""));
2324
2580
  q.addSeekKeyValue(_T("1"));
2325
2581
  q.addSeekKeyValue(_T("2"));
2326
2582
  q.addSeekKeyValue(_T("3"));
2327
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'")
2328
- , "queryString");
2329
-
2330
- //special field name
2583
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in '1','2','3'"),
2584
+ "queryString");
2585
+
2586
+ // special field name
2331
2587
  q.queryString(_T("select = 1"));
2332
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'")
2333
- , "queryString");
2334
-
2588
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'"),
2589
+ "queryString");
2590
+
2335
2591
  q.queryString(_T(""));
2336
2592
  q.addLogic(_T("select"), _T("="), _T("1"));
2337
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'")
2338
- , "queryString");
2339
-
2593
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("select = '1'"),
2594
+ "queryString");
2595
+
2340
2596
  q.queryString(_T("in <> 1"));
2341
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'")
2342
- , "queryString");
2343
-
2597
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'"),
2598
+ "queryString");
2599
+
2344
2600
  q.queryString(_T(""));
2345
2601
  q.addLogic(_T("in"), _T("<>"), _T("1"));
2346
- BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'")
2347
- , "queryString");
2602
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("in <> '1'"),
2603
+ "queryString");
2604
+
2605
+ // test auto_escape
2606
+ q.queryString(_T("code = ab'c"), true);
2607
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'ab&'c'"),
2608
+ "queryString");
2609
+
2610
+ q.queryString(_T("code = ab&c"), true);
2611
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'ab&&c'"),
2612
+ "queryString");
2613
+
2614
+ q.queryString(_T("code = abc&"), true);
2615
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&&'"),
2616
+ "queryString");
2617
+ q.queryString(_T("code = abc&&"), true);
2618
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&&&&'"),
2619
+ "queryString");
2620
+
2621
+ q.queryString(_T("code = 'abc&'"), true);
2622
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&&'"),
2623
+ "queryString");
2624
+ q.queryString(_T("code = 'abc&&'"), true);
2625
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&&&&'"),
2626
+ "queryString");
2627
+
2628
+ q.queryString(_T("code = 'ab'c'"), true);
2629
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'ab&'c'"),
2630
+ "queryString");
2631
+
2632
+ q.queryString(_T("code = 'abc''"), true);
2633
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&''"),
2634
+ "queryString");
2635
+
2636
+ q.queryString(_T("code = abc'"), true);
2637
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc&''"),
2638
+ "queryString");
2639
+
2640
+ // Invalid end no close '
2641
+ q.queryString(_T("code = 'abc"), true);
2642
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = 'abc'"),
2643
+ "queryString");
2644
+
2645
+ q.queryString(_T("code = &abc"), true);
2646
+ BOOST_CHECK_MESSAGE(_tstring(q.toString()) == _T("code = '&&abc'"),
2647
+ "queryString");
2348
2648
  }
2349
- // ------------------------------------------------------------------------
2350
- BOOST_AUTO_TEST_SUITE(btrv_nativ)
2351
2649
 
2352
- BOOST_FIXTURE_TEST_CASE(createNewDataBase, fixture)
2650
+ void teetNewDelete(database* db)
2651
+ {
2652
+ // printf("new delete start \n");
2653
+ for (int i = 0; i < 500; ++i)
2353
2654
  {
2354
- const _TCHAR* uri = makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME);
2355
- _tprintf(_T("URI = %s\n"), uri);
2356
- if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
2357
- db()->drop();
2358
- testCreateNewDataBase(db());
2359
- }
2360
- BOOST_FIXTURE_TEST_CASE(clone, fixture) {testClone(db());}
2655
+ queryBase qb;
2656
+ qb.reset();
2361
2657
 
2362
- BOOST_FIXTURE_TEST_CASE(version, fixture) {testVersion(db());}
2658
+ query q;
2659
+ q.reset();
2363
2660
 
2364
- BOOST_FIXTURE_TEST_CASE(insert, fixture) {testInsert(db());}
2661
+ recordsetQuery rq;
2662
+ rq.reset();
2365
2663
 
2366
- BOOST_FIXTURE_TEST_CASE(find, fixture) {testFind(db());}
2664
+ groupQuery gq;
2665
+ gq.reset();
2367
2666
 
2368
- BOOST_FIXTURE_TEST_CASE(findNext, fixture)
2369
- {
2370
- testFindNext(db());
2371
- testFindIn(db());
2667
+ fieldNames f;
2668
+ f.addValue(_T("abc"));
2669
+
2670
+ activeTable atu(db, _T("user"));
2671
+ atu.index(0);
2672
+ activeTable atg(db, _T("groups"));
2673
+ atg.index(0);
2674
+ fieldNames fns;
2675
+ fns.keyField(_T("a"));
2676
+
2677
+ client::sum s(fns);
2678
+ s.reset();
2679
+
2680
+ client::count c(_T("a"));
2681
+ c.reset();
2682
+
2683
+ client::avg a(fns);
2684
+ a.reset();
2685
+ client::min mi(fns);
2686
+ mi.reset();
2687
+ client::max ma(fns);
2688
+ ma.reset();
2689
+
2690
+ recordset rs;
2691
+ rs.clear();
2692
+
2693
+ #ifndef BCB_64
2694
+ queryBase* nqb1 = new queryBase(); // bcb64 bad
2695
+ delete nqb1;
2696
+ #endif
2697
+ queryBase* nqb = queryBase::create(); // All OK
2698
+ nqb->release();
2699
+
2700
+ query* nqq = query::create(); // All OK
2701
+ nqq->release();
2702
+
2703
+ #ifndef BCB_64
2704
+ query* nqq1 = new query(); // bcb64 bad
2705
+ delete nqq1;
2706
+ #endif
2707
+ recordsetQuery* nrq = recordsetQuery::create(); // All OK
2708
+ nrq->release();
2709
+
2710
+ #ifndef BCB_64
2711
+ recordsetQuery* nrqq = new recordsetQuery(); // bcb64 bad
2712
+ delete nrqq;
2713
+
2714
+ groupQuery* ngq1 = new groupQuery(); // bcb64 bad
2715
+ delete ngq1;
2716
+ #endif
2717
+ groupQuery* ngq = groupQuery::create(); // All OK
2718
+ ngq->release();
2719
+
2720
+ fieldNames* nfn = fieldNames::create(); // All OK
2721
+ nfn->release();
2722
+
2723
+ #ifndef BCB_64
2724
+ fieldNames* nfn1 = new fieldNames(); // bcb64 bad
2725
+ delete nfn1;
2726
+ #endif
2727
+
2728
+ activeTable* at = new activeTable(db, _T("user")); // All OK
2729
+ activeTable* atg1 = new activeTable(db, _T("groups")); // All OK
2730
+ delete atg1;
2731
+ delete at;
2732
+
2733
+ #ifndef BCB_64
2734
+
2735
+ client::sum* ns1 = new sum(fns); // bcb64 bad
2736
+ delete ns1;
2737
+
2738
+ client::count* nc1 = new client::count(_T("a")); // bcb64 bad
2739
+ delete nc1;
2740
+
2741
+ client::avg* na1 = new client::avg(fns); // bcb64 bad
2742
+ delete na1;
2743
+
2744
+ client::min* nmin1 = new client::min(fns); // bcb64 bad
2745
+ delete nmin1;
2746
+
2747
+ client::max* nmax1 = new client::max(fns); // bcb64 bad
2748
+ delete nmax1;
2749
+
2750
+ #endif
2751
+
2752
+ client::sum* ns = sum::create(fns); // All OK
2753
+ ns->release();
2754
+
2755
+ client::count* nc = client::count::create(_T("a")); // All OK
2756
+ nc->release();
2757
+
2758
+ client::avg* na = client::avg::create(fns); // All OK
2759
+ na->release();
2760
+
2761
+ client::min* nmin = client::min::create(fns); // All OK
2762
+ nmin->release();
2763
+
2764
+ client::max* nmax = client::max::create(fns); // All OK
2765
+ nmax->release();
2766
+
2767
+ recordset* r = new recordset(); // All OK
2768
+
2769
+ recordset* rc(r->clone()); // All OK
2770
+ // delete rc; //All bad
2771
+ rc->release();
2772
+
2773
+ delete r; // All OK
2372
2774
  }
2373
2775
 
2374
- BOOST_FIXTURE_TEST_CASE(getPercentage, fixture) {testGetPercentage(db());}
2776
+ // activeTable releaseTable
2777
+ activeTable* at = new activeTable(db, _T("user"));
2778
+ at->releaseTable();
2779
+ BOOST_CHECK_MESSAGE(at->table() == NULL, " activeTable::releaseTable");
2780
+ delete at;
2781
+ }
2782
+
2783
+ void testJoin(database* db)
2784
+ {
2785
+
2786
+ #ifdef LINUX
2787
+ const char* fd_name = "名前";
2788
+ #else
2789
+ #ifdef _UNICODE
2790
+ const wchar_t fd_name[] = { L"名前" };
2791
+ #else
2792
+ char fd_name[30];
2793
+ WideCharToMultiByte(CP_UTF8, 0, L"名前", -1, fd_name, 30, NULL, NULL);
2794
+ #endif
2795
+ #endif
2796
+
2797
+ activeTable atu(db, _T("user"));
2798
+
2799
+ activeTable atg(db, _T("groups"));
2800
+
2801
+ activeTable ate(db, _T("extention"));
2802
+ recordset rs;
2803
+ query q;
2804
+
2805
+ atu.alias(fd_name, _T("name"));
2806
+ q.select(_T("id"), _T("name"), _T("group"))
2807
+ .where(_T("id"), _T("<="), 15000);
2808
+ atu.index(0).keyValue(1).read(rs, q);
2809
+ BOOST_CHECK_MESSAGE(rs.size() == 15000, " rs.size()== 15000");
2810
+
2811
+ // Join extention::comment
2812
+ q.reset();
2813
+ ate.index(0).join(
2814
+ rs, q.select(_T("comment")).optimize(queryBase::joinHasOneOrHasMany),
2815
+ _T("id"));
2816
+ BOOST_CHECK_MESSAGE(rs.size() == 15000, "join rs.size()== 15000");
2817
+
2818
+ // test reverse
2819
+
2820
+ row& last = rs.reverse().first();
2821
+ BOOST_CHECK_MESSAGE(last[_T("id")].i() == 15000, "last field id == 15000");
2822
+ BOOST_CHECK_MESSAGE(_tstring(last[_T("comment")].c_str()) ==
2823
+ _tstring(_T("15000 comment")),
2824
+ "last field comment");
2825
+
2826
+ // Join group::name
2827
+ q.reset();
2828
+ atg.alias(_T("name"), _T("group_name"));
2829
+ atg.index(0).join(rs, q.select(_T("group_name")), _T("group"));
2830
+ BOOST_CHECK_MESSAGE(rs.size() == 15000, "join2 rs.size()== 15000");
2831
+ row& first = rs.last();
2832
+
2833
+ BOOST_CHECK_MESSAGE(first[_T("id")].i() == 1, "first field id == 1");
2834
+ BOOST_CHECK_MESSAGE(_tstring(first[_T("comment")].c_str()) ==
2835
+ _tstring(_T("1 comment")),
2836
+ "first field comment");
2837
+
2838
+ BOOST_CHECK_MESSAGE(
2839
+ _tstring(first[_T("group_name")].c_str()) == _tstring(_T("1 group")),
2840
+ "first field group_name " << string(first[_T("group_name")].a_str()));
2841
+ BOOST_CHECK_MESSAGE(
2842
+ _tstring(first[_T("group_name")].c_str()) == _tstring(_T("1 group")),
2843
+ "first field group_name " << string(first[_T("group_name")].a_str()));
2844
+ // row_ptr row = rs[15000 - 9];
2845
+ row& rec = rs[15000 - 9];
2846
+ BOOST_CHECK_MESSAGE(
2847
+ _tstring(rec[_T("group_name")].c_str()) == _tstring(_T("4 group")),
2848
+ "group_name = 4 group " << string((rec)[_T("group_name")].a_str()));
2849
+
2850
+ // Test orderby
2851
+ rs.orderBy(_T("group_name"));
2852
+ // rec = rs[(size_t)0];
2853
+ BOOST_CHECK_MESSAGE(_tstring(rs[(size_t)0][_T("group_name")].c_str()) ==
2854
+ _tstring(_T("1 group")),
2855
+ "group_name = 1 group "
2856
+ << string(rs[(size_t)0][_T("group_name")].a_str()));
2857
+
2858
+ sortFields orderRv;
2859
+ orderRv.add(_T("group_name"), false);
2860
+ rs.orderBy(orderRv);
2861
+
2862
+ sortFields order;
2863
+ order.add(_T("group_name"), true);
2864
+ rs.orderBy(order);
2865
+ BOOST_CHECK_MESSAGE(_tstring(rs[(size_t)0][_T("group_name")].c_str()) ==
2866
+ _tstring(_T("1 group")),
2867
+ "group_name = 1 group "
2868
+ << string(rs[(size_t)0][_T("group_name")].a_str()));
2869
+
2870
+ // test union
2871
+ recordset rs2;
2872
+ atu.alias(fd_name, _T("name"));
2873
+
2874
+ q.reset().select(_T("id"), _T("name"), _T("group")).where(_T("id"),
2875
+ _T("<="), 16000);
2876
+ atu.index(0).keyValue(15001).read(rs2, q);
2877
+ ate.index(0).join(rs2, q.reset().select(_T("comment")).optimize(
2878
+ queryBase::joinHasOneOrHasMany),
2879
+ _T("id"));
2880
+
2881
+ atg.alias(_T("name"), _T("group_name"));
2882
+ atg.index(0).join(rs2, q.reset().select(_T("group_name")), _T("group"));
2883
+ BOOST_CHECK_MESSAGE(rs2.size() == 1000, "join2 rs2.size()== 1000");
2884
+
2885
+ rs += rs2;
2886
+ BOOST_CHECK_MESSAGE(rs.size() == 16000, "union rs.size()== 16000");
2887
+ // row = rs[15000];
2888
+ BOOST_CHECK_MESSAGE(rs[15000][_T("id")].i() == 15001, "id = 15001");
2889
+ // row = rs.last();
2890
+ BOOST_CHECK_MESSAGE(rs.last()[_T("id")].i() == 16000, "id = 16000");
2891
+
2892
+ // test group by
2893
+ groupQuery gq;
2894
+ gq.keyField(_T("group"), _T("id"));
2895
+
2896
+ client::count count1(_T("count"));
2897
+ gq.addFunction(&count1);
2898
+
2899
+ client::count count2(_T("gropu1_count"));
2900
+ count2.when(_T("group"), _T("="), 1);
2901
+
2902
+ gq.addFunction(&count2);
2903
+ rs.groupBy(gq);
2904
+ BOOST_CHECK_MESSAGE(rs.size() == 16000, "group by rs.size()== 16000");
2905
+ int v = rs[0][_T("gropu1_count")].i();
2906
+ BOOST_CHECK_MESSAGE(v == 1, "gropu1_count = " << v);
2907
+
2908
+ // clone
2909
+ recordset* rsv(rs.clone());
2910
+
2911
+ gq.reset();
2912
+ client::count count3(_T("count"));
2913
+ gq.addFunction(&count3).keyField(_T("group")); //.resultField(_T("count"));
2914
+ rs.groupBy(gq);
2915
+ BOOST_CHECK_MESSAGE(rs.size() == 5,
2916
+ "group by2 rs.size()==" << rsv->size());
2917
+
2918
+ // having
2919
+ recordsetQuery rq;
2920
+ rq.when(_T("gropu1_count"), _T("="), 1).or_(_T("gropu1_count"), _T("="), 2);
2921
+ rsv->matchBy(rq);
2922
+ BOOST_CHECK_MESSAGE(rsv->size() == 3200,
2923
+ "matchBy rsv.size() ==" << rsv->size());
2924
+ rsv->release();
2925
+ // top
2926
+ recordset rs3;
2927
+ rs.top(rs3, 10);
2928
+ BOOST_CHECK_MESSAGE(rs3.size() == 5, "top 10 rs3.size()== 5");
2929
+
2930
+ // query new / delete
2931
+ recordsetQuery* q1 = recordsetQuery::create();
2932
+ q1->when(_T("gropu1_count"), _T("="), 1)
2933
+ .or_(_T("gropu1_count"), _T("="), 2);
2934
+ q1->release();
2935
+
2936
+ query* q2 = query::create();
2937
+ q2->where(_T("gropu1_count"), _T("="), 1)
2938
+ .or_(_T("gropu1_count"), _T("="), 2);
2939
+ q2->release();
2940
+
2941
+ groupQuery* q3 = groupQuery::create();
2942
+ q3->keyField(_T("group"), _T("id"));
2943
+ q3->release();
2944
+ }
2945
+
2946
+ void testWirtableRecord(database* db)
2947
+ {
2948
+
2949
+ #ifdef LINUX
2950
+ const char* fd_name = "名前";
2951
+ #else
2952
+ #ifdef _UNICODE
2953
+ const wchar_t fd_name[] = { L"名前" };
2954
+ #else
2955
+ char fd_name[30];
2956
+ WideCharToMultiByte(CP_UTF8, 0, L"名前", -1, fd_name, 30, NULL, NULL);
2957
+ #endif
2958
+ #endif
2959
+
2960
+ activeTable atu(db, _T("user"));
2961
+
2962
+ writableRecord& rec = atu.index(0).getWritableRecord();
2963
+
2964
+ rec[_T("id")] = 120000;
2965
+ rec[fd_name] = _T("aiba");
2966
+ rec.save();
2967
+
2968
+ rec.clear();
2969
+ rec[_T("id")] = 120000;
2970
+ rec.read();
2971
+ BOOST_CHECK_MESSAGE(_tstring(rec[fd_name].c_str()) == _tstring(_T("aiba")),
2972
+ "rec 120000 name ");
2973
+
2974
+ rec.clear();
2975
+ rec[_T("id")] = 120001;
2976
+ bool r = rec.read();
2977
+ rec[fd_name] = _T("oono");
2978
+ if (!r)
2979
+ rec.insert();
2980
+ else
2981
+ rec.update();
2982
+
2983
+ rec.clear();
2984
+ rec[_T("id")] = 120001;
2985
+ rec.read();
2986
+
2987
+ BOOST_CHECK_MESSAGE(_tstring(rec[1].c_str()) == _tstring(_T("oono")),
2988
+ "rec 120001 name ");
2989
+ // update changed filed only
2990
+ rec.clear();
2991
+ rec[_T("id")] = 120001;
2992
+ rec[fd_name] = _T("matsumoto");
2993
+ rec.update();
2994
+
2995
+ rec.clear();
2996
+ rec[_T("id")] = 120001;
2997
+ rec.read();
2998
+ BOOST_CHECK_MESSAGE(_tstring(rec[fd_name].c_str()) ==
2999
+ _tstring(_T("matsumoto")),
3000
+ "rec 120001 update name ");
3001
+
3002
+ rec.del();
3003
+ rec[_T("id")] = 120000;
3004
+ rec.del();
3005
+
3006
+ rec.clear();
3007
+ rec[_T("id")] = 120001;
3008
+ bool ret = rec.read();
3009
+ BOOST_CHECK_MESSAGE(ret == false, "rec 120001 delete ");
3010
+
3011
+ rec.clear();
3012
+ rec[_T("id")] = 120000;
3013
+ ret = rec.read();
3014
+ BOOST_CHECK_MESSAGE(ret == false, "rec 120000 delete ");
3015
+ }
3016
+
3017
+ void testDbPool()
3018
+ {
3019
+ pooledDbManager poolMgr;
3020
+ pooledDbManager::setMaxConnections(4);
3021
+
3022
+ connectParams pm(PROTOCOL, HOSTNAME, _T("querytest"), DBNAME);
3023
+ poolMgr.use(&pm);
3024
+ poolMgr.use(&pm);
3025
+ poolMgr.use(&pm);
3026
+ poolMgr.unUse();
3027
+ poolMgr.reset(0);
3028
+ }
3029
+
3030
+ // ------------------------------------------------------------------------
3031
+ BOOST_AUTO_TEST_SUITE(btrv_nativ)
3032
+
3033
+ BOOST_FIXTURE_TEST_CASE(createNewDataBase, fixture)
3034
+ {
3035
+ const _TCHAR* uri = makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME);
3036
+ _tprintf(_T("URI = %s\n"), uri);
3037
+ if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
3038
+ db()->drop();
3039
+ testCreateNewDataBase(db());
3040
+ }
3041
+ BOOST_FIXTURE_TEST_CASE(clone, fixture)
3042
+ {
3043
+ testClone(db());
3044
+ }
3045
+
3046
+ BOOST_FIXTURE_TEST_CASE(version, fixture)
3047
+ {
3048
+ testVersion(db());
3049
+ }
3050
+
3051
+ BOOST_FIXTURE_TEST_CASE(insert, fixture)
3052
+ {
3053
+ testInsert(db());
3054
+ }
3055
+
3056
+ BOOST_FIXTURE_TEST_CASE(find, fixture)
3057
+ {
3058
+ testFind(db());
3059
+ }
3060
+
3061
+ BOOST_FIXTURE_TEST_CASE(findNext, fixture)
3062
+ {
3063
+ testFindNext(db());
3064
+ testFindIn(db());
3065
+ }
3066
+
3067
+ BOOST_FIXTURE_TEST_CASE(getPercentage, fixture)
3068
+ {
3069
+ testGetPercentage(db());
3070
+ }
3071
+
3072
+ BOOST_FIXTURE_TEST_CASE(movePercentage, fixture)
3073
+ {
3074
+ testMovePercentage(db());
3075
+ }
2375
3076
 
2376
- BOOST_FIXTURE_TEST_CASE(movePercentage, fixture) {testMovePercentage(db());}
3077
+ BOOST_FIXTURE_TEST_CASE(getEqual, fixture)
3078
+ {
3079
+ testGetEqual(db());
3080
+ }
2377
3081
 
2378
- BOOST_FIXTURE_TEST_CASE(getEqual, fixture) {testGetEqual(db());}
3082
+ BOOST_FIXTURE_TEST_CASE(getNext, fixture)
3083
+ {
3084
+ testGetNext(db());
3085
+ }
2379
3086
 
2380
- BOOST_FIXTURE_TEST_CASE(getNext, fixture) {testGetNext(db());}
3087
+ BOOST_FIXTURE_TEST_CASE(getPrevious, fixture)
3088
+ {
3089
+ testGetPrevious(db());
3090
+ }
2381
3091
 
2382
- BOOST_FIXTURE_TEST_CASE(getPrevious, fixture) {testGetPrevious(db());}
3092
+ BOOST_FIXTURE_TEST_CASE(getGreater, fixture)
3093
+ {
3094
+ testGetGreater(db());
3095
+ }
2383
3096
 
2384
- BOOST_FIXTURE_TEST_CASE(getGreater, fixture) {testGetGreater(db());}
3097
+ BOOST_FIXTURE_TEST_CASE(getLessThan, fixture)
3098
+ {
3099
+ testGetLessThan(db());
3100
+ }
2385
3101
 
2386
- BOOST_FIXTURE_TEST_CASE(getLessThan, fixture) {testGetLessThan(db());}
3102
+ BOOST_FIXTURE_TEST_CASE(getFirst, fixture)
3103
+ {
3104
+ testGetFirst(db());
3105
+ }
2387
3106
 
2388
- BOOST_FIXTURE_TEST_CASE(getFirst, fixture) {testGetFirst(db());}
3107
+ BOOST_FIXTURE_TEST_CASE(getLast, fixture)
3108
+ {
3109
+ testGetLast(db());
3110
+ }
2389
3111
 
2390
- BOOST_FIXTURE_TEST_CASE(getLast, fixture) {testGetLast(db());}
3112
+ BOOST_FIXTURE_TEST_CASE(movePosition, fixture)
3113
+ {
3114
+ testMovePosition(db());
3115
+ }
2391
3116
 
2392
- BOOST_FIXTURE_TEST_CASE(movePosition, fixture) {testMovePosition(db());}
3117
+ BOOST_FIXTURE_TEST_CASE(update, fixture)
3118
+ {
3119
+ testUpdate(db());
3120
+ }
2393
3121
 
2394
- BOOST_FIXTURE_TEST_CASE(update, fixture) {testUpdate(db());}
3122
+ BOOST_FIXTURE_TEST_CASE(snapShot, fixture)
3123
+ {
3124
+ testSnapShot(db());
3125
+ }
2395
3126
 
2396
- BOOST_FIXTURE_TEST_CASE(snapShot, fixture) {testSnapShot(db());}
3127
+ BOOST_FIXTURE_TEST_CASE(conflict, fixture)
3128
+ {
3129
+ testConflict(db());
3130
+ }
2397
3131
 
2398
- BOOST_FIXTURE_TEST_CASE(conflict, fixture) {testConflict(db());}
3132
+ BOOST_FIXTURE_TEST_CASE(transactionLock, fixture)
3133
+ {
3134
+ testTransactionLock(db());
3135
+ }
2399
3136
 
2400
- BOOST_FIXTURE_TEST_CASE(transactionLock, fixture) {testTransactionLock(db());}
3137
+ BOOST_AUTO_TEST_CASE(Exclusive)
3138
+ {
3139
+ testExclusive();
3140
+ }
2401
3141
 
2402
- BOOST_FIXTURE_TEST_CASE(insert2, fixture) {testInsert2(db());}
3142
+ BOOST_FIXTURE_TEST_CASE(insert2, fixture)
3143
+ {
3144
+ testInsert2(db());
3145
+ }
2403
3146
 
2404
- BOOST_FIXTURE_TEST_CASE(delete_, fixture) {testDelete(db());}
3147
+ BOOST_FIXTURE_TEST_CASE(delete_, fixture)
3148
+ {
3149
+ testDelete(db());
3150
+ }
2405
3151
 
2406
- BOOST_FIXTURE_TEST_CASE(setOwner, fixture) {testSetOwner(db());}
3152
+ BOOST_FIXTURE_TEST_CASE(setOwner, fixture)
3153
+ {
3154
+ testSetOwner(db());
3155
+ }
2407
3156
 
2408
- BOOST_FIXTURE_TEST_CASE(dropIndex, fixture) {testDropIndex(db());}
3157
+ BOOST_FIXTURE_TEST_CASE(dropIndex, fixture)
3158
+ {
3159
+ testDropIndex(db());
3160
+ }
2409
3161
 
2410
- BOOST_FIXTURE_TEST_CASE(dropDatabase, fixture) {testDropDatabase(db());}
3162
+ BOOST_FIXTURE_TEST_CASE(dropDatabase, fixture)
3163
+ {
3164
+ testDropDatabase(db());
3165
+ }
2411
3166
 
2412
- BOOST_FIXTURE_TEST_CASE(connect, fixture) {testLogin(db());}
3167
+ BOOST_FIXTURE_TEST_CASE(connect, fixture)
3168
+ {
3169
+ testLogin(db());
3170
+ }
2413
3171
  BOOST_AUTO_TEST_SUITE_END()
2414
3172
 
2415
3173
  // ------------------------------------------------------------------------
@@ -2419,24 +3177,23 @@ BOOST_AUTO_TEST_SUITE_END()
2419
3177
  #include <bzs/env/mbcswchrLinux.h>
2420
3178
 
2421
3179
  BOOST_AUTO_TEST_SUITE(convert)
2422
- BOOST_AUTO_TEST_CASE(u8tombc)
2423
- {
2424
- char mbc[256];
2425
- char u8[256] = "123";
3180
+ BOOST_AUTO_TEST_CASE(u8tombc)
3181
+ {
3182
+ char mbc[256];
3183
+ char u8[256] = "123";
2426
3184
 
2427
- bzs::env::u8tombc(u8, -1, mbc, 256);
2428
- BOOST_CHECK_MESSAGE(!strcmp(mbc, u8), u8);
3185
+ bzs::env::u8tombc(u8, -1, mbc, 256);
3186
+ BOOST_CHECK_MESSAGE(!strcmp(mbc, u8), u8);
2429
3187
 
2430
- strcpy(u8, "漢字");
2431
- char mbcKanji[20] =
2432
- {0x8A, 0xBF, 0x8E, 0x9A, 0x00};
2433
- bzs::env::u8tombc(u8, -1, mbc, 256);
2434
- BOOST_CHECK_MESSAGE(!strcmp(mbc, mbcKanji), u8);
3188
+ strcpy(u8, "漢字");
3189
+ unsigned char mbcKanji[20] = { 0x8A, 0xBF, 0x8E, 0x9A, 0x00 };
3190
+ bzs::env::u8tombc(u8, -1, mbc, 256);
3191
+ BOOST_CHECK_MESSAGE(!strcmp(mbc, (const char*)mbcKanji), u8);
2435
3192
 
2436
- memset(u8, 0, 256);
2437
- bzs::env::mbctou8(mbc, -1, u8, 256);
2438
- BOOST_CHECK_MESSAGE(!strcmp(u8, "漢字"), "漢字2");
2439
- }
3193
+ memset(u8, 0, 256);
3194
+ bzs::env::mbctou8(mbc, -1, u8, 256);
3195
+ BOOST_CHECK_MESSAGE(!strcmp(u8, "漢字"), "漢字2");
3196
+ }
2440
3197
 
2441
3198
  BOOST_AUTO_TEST_SUITE_END()
2442
3199
  #endif
@@ -2445,17 +3202,35 @@ BOOST_AUTO_TEST_SUITE_END()
2445
3202
  // ------------------------------------------------------------------------
2446
3203
  BOOST_AUTO_TEST_SUITE(var_field)
2447
3204
 
2448
- BOOST_FIXTURE_TEST_CASE(createDataBaseVar, fixture) {testCreateDataBaseVar(db());}
3205
+ BOOST_FIXTURE_TEST_CASE(createDataBaseVar, fixture)
3206
+ {
3207
+ testCreateDataBaseVar(db());
3208
+ }
2449
3209
 
2450
- BOOST_FIXTURE_TEST_CASE(varField, fixture) {testVarField(db());}
3210
+ BOOST_FIXTURE_TEST_CASE(varField, fixture)
3211
+ {
3212
+ testVarField(db());
3213
+ }
2451
3214
 
2452
- BOOST_FIXTURE_TEST_CASE(varInsert, fixture) {testVarInsert(db());}
3215
+ BOOST_FIXTURE_TEST_CASE(varInsert, fixture)
3216
+ {
3217
+ testVarInsert(db());
3218
+ }
2453
3219
 
2454
- BOOST_FIXTURE_TEST_CASE(varRead, fixture) {testVarRead(db());}
3220
+ BOOST_FIXTURE_TEST_CASE(varRead, fixture)
3221
+ {
3222
+ testVarRead(db());
3223
+ }
2455
3224
 
2456
- BOOST_FIXTURE_TEST_CASE(filterVar, fixture) {testFilterVar(db());}
3225
+ BOOST_FIXTURE_TEST_CASE(filterVar, fixture)
3226
+ {
3227
+ testFilterVar(db());
3228
+ }
2457
3229
 
2458
- BOOST_FIXTURE_TEST_CASE(dropDataBaseVar, fixture) {testDropDataBaseVar(db());}
3230
+ BOOST_FIXTURE_TEST_CASE(dropDataBaseVar, fixture)
3231
+ {
3232
+ testDropDataBaseVar(db());
3233
+ }
2459
3234
 
2460
3235
  BOOST_AUTO_TEST_SUITE_END()
2461
3236
  // ------------------------------------------------------------------------
@@ -2463,9 +3238,15 @@ BOOST_AUTO_TEST_SUITE_END()
2463
3238
  // ------------------------------------------------------------------------
2464
3239
  BOOST_AUTO_TEST_SUITE(filter)
2465
3240
 
2466
- BOOST_FIXTURE_TEST_CASE(stringFileter, fixture) {testStringFileter(db());}
3241
+ BOOST_FIXTURE_TEST_CASE(stringFileter, fixture)
3242
+ {
3243
+ testStringFileter(db());
3244
+ }
2467
3245
 
2468
- BOOST_FIXTURE_TEST_CASE(dropDataBaseStr, fixture) {testDropDataBaseStr(db());}
3246
+ BOOST_FIXTURE_TEST_CASE(dropDataBaseStr, fixture)
3247
+ {
3248
+ testDropDataBaseStr(db());
3249
+ }
2469
3250
 
2470
3251
  BOOST_AUTO_TEST_SUITE_END()
2471
3252
  // ------------------------------------------------------------------------
@@ -2473,38 +3254,75 @@ BOOST_AUTO_TEST_SUITE_END()
2473
3254
  // ------------------------------------------------------------------------
2474
3255
  BOOST_AUTO_TEST_SUITE(kanjiSchema)
2475
3256
 
2476
- BOOST_FIXTURE_TEST_CASE(knajiCreateSchema, fixture) {testKnajiCreateSchema(db());}
3257
+ BOOST_FIXTURE_TEST_CASE(knajiCreateSchema, fixture)
3258
+ {
3259
+ testKnajiCreateSchema(db());
3260
+ }
2477
3261
 
2478
- BOOST_FIXTURE_TEST_CASE(insertKanji, fixture) {testInsertKanji(db());}
3262
+ BOOST_FIXTURE_TEST_CASE(insertKanji, fixture)
3263
+ {
3264
+ testInsertKanji(db());
3265
+ }
2479
3266
 
2480
- BOOST_FIXTURE_TEST_CASE(getEqualKanji, fixture) {testGetEqualKanji(db());}
3267
+ BOOST_FIXTURE_TEST_CASE(getEqualKanji, fixture)
3268
+ {
3269
+ testGetEqualKanji(db());
3270
+ }
2481
3271
 
2482
- BOOST_FIXTURE_TEST_CASE(dropDatabaseKanji, fixture) {testDropDatabaseKanji(db());}
3272
+ BOOST_FIXTURE_TEST_CASE(dropDatabaseKanji, fixture)
3273
+ {
3274
+ testDropDatabaseKanji(db());
3275
+ }
2483
3276
 
2484
3277
  BOOST_AUTO_TEST_SUITE_END()
2485
3278
 
2486
3279
  // ------------------------------------------------------------------------
2487
3280
  BOOST_AUTO_TEST_SUITE(filter)
2488
3281
 
2489
- BOOST_FIXTURE_TEST_CASE(resultField, fixture)
2490
- {
3282
+ BOOST_FIXTURE_TEST_CASE(resultField, fixture)
3283
+ {
2491
3284
 
2492
- if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
2493
- db()->drop();
2494
- testCreateNewDataBase(db());
2495
- testResultField(db());
2496
- testResultDef();
2497
- testLogic(db());
2498
- testQuery();
2499
- }
2500
- BOOST_FIXTURE_TEST_CASE(drop, fixture)
2501
- {
2502
- testDropDatabase(db());
2503
- }
2504
- BOOST_FIXTURE_TEST_CASE(fuga, fixture) {BOOST_CHECK_EQUAL(2 * 3, 6);}
3285
+ if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
3286
+ db()->drop();
3287
+ testCreateNewDataBase(db());
3288
+ testResultField(db());
3289
+ testResultDef();
3290
+ testLogic(db());
3291
+ testQuery();
3292
+ }
3293
+ BOOST_FIXTURE_TEST_CASE(drop, fixture)
3294
+ {
3295
+ testDropDatabase(db());
3296
+ }
2505
3297
 
2506
3298
  BOOST_AUTO_TEST_SUITE_END()
2507
3299
 
2508
- // ------------------------------------------------------------------------
3300
+ BOOST_AUTO_TEST_SUITE(query)
3301
+
3302
+ BOOST_FIXTURE_TEST_CASE(new_delete, fixtureQuery)
3303
+ {
3304
+ teetNewDelete(db());
3305
+ }
2509
3306
 
3307
+ BOOST_FIXTURE_TEST_CASE(join, fixtureQuery)
3308
+ {
3309
+ testJoin(db());
3310
+ testWirtableRecord(db());
3311
+ }
2510
3312
 
3313
+ BOOST_AUTO_TEST_SUITE_END()
3314
+
3315
+ BOOST_AUTO_TEST_SUITE(dbPool)
3316
+
3317
+ BOOST_AUTO_TEST_CASE(pool)
3318
+ {
3319
+ testDbPool();
3320
+ }
3321
+ BOOST_AUTO_TEST_CASE(fuga)
3322
+ {
3323
+ BOOST_CHECK_EQUAL(2 * 3, 6);
3324
+ }
3325
+
3326
+ BOOST_AUTO_TEST_SUITE_END()
3327
+
3328
+ // ------------------------------------------------------------------------