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.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +46 -67
- data/BUILD_WIN-JA +106 -63
- data/CMakeLists.txt +40 -15
- data/README +219 -75
- data/README-JA +207 -76
- data/README_ORMSRCGEN +118 -0
- data/README_ORMSRCGEN-JA +115 -0
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +18 -14
- data/build/common/create_symlink.cmake.in +25 -0
- data/build/common/get_boost_libs.cmake +23 -23
- data/build/common/options.cmake +0 -66
- data/build/common/smart_install.cmake +3 -3
- data/build/common/transactd.rc.in +15 -5
- data/build/common/transactd_cl_common.cmake +37 -18
- data/build/common/transactd_cl_output.cmake +55 -13
- data/build/common/transactd_common.cmake +108 -31
- data/build/swig/php/generate.cmake.in +15 -17
- data/build/swig/php/generate.cmd.in +15 -9
- data/build/swig/php/php.swg +124 -82
- data/build/swig/php/transactd.no_yield.php +4494 -0
- data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
- data/build/swig/php/transactd.no_yield.php.patch +685 -0
- data/build/swig/php/transactd.yield.php +4461 -0
- data/build/swig/php/transactd.yield.php.git.patch +652 -0
- data/build/swig/php/transactd.yield.php.patch +652 -0
- data/build/swig/referencecounter.h +79 -0
- data/build/swig/ruby/ruby.swg +226 -76
- data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
- data/build/swig/ruby/without_gvl.swg +87 -0
- data/build/swig/tdcl.i +659 -170
- data/build/swig/validatablepointer.h +91 -0
- data/build/tdclc/CMakeLists.txt +49 -34
- data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +84 -20
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
- data/build/tdclrb/CMakeLists.txt +84 -66
- data/build/tdclrb/bldgem/extconf.rb +28 -3
- data/build/tdclrb/gem/helper.rb +11 -1
- data/build/tdclrb/gem_output.cmake +20 -16
- data/index_ja.html +15 -0
- data/source/bzs/db/IBlobBuffer.h +15 -17
- data/source/bzs/db/blobBuffer.h +186 -140
- data/source/bzs/db/blobStructs.h +37 -37
- data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
- data/source/bzs/db/engine/mysql/bookmark.h +150 -147
- data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
- data/source/bzs/db/engine/mysql/database.h +608 -370
- data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
- data/source/bzs/db/engine/mysql/dbManager.h +115 -104
- data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
- data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
- data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
- data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
- data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
- data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
- data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
- data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
- data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
- data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
- data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
- data/source/bzs/db/protocol/tdap/client/client.h +361 -320
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
- data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
- data/source/bzs/db/protocol/tdap/client/database.h +141 -118
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
- data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
- data/source/bzs/db/protocol/tdap/client/export.h +35 -0
- data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
- data/source/bzs/db/protocol/tdap/client/field.h +393 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
- data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
- data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
- data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
- data/source/bzs/db/protocol/tdap/client/request.h +227 -170
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
- data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
- data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
- data/source/bzs/db/protocol/tdap/client/table.h +413 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
- data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
- data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
- data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
- data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
- data/source/bzs/db/transactd/appBuilderImple.h +21 -20
- data/source/bzs/db/transactd/appModule.cpp +350 -98
- data/source/bzs/db/transactd/appModule.h +31 -37
- data/source/bzs/db/transactd/connManager.cpp +138 -135
- data/source/bzs/db/transactd/connManager.h +28 -21
- data/source/bzs/db/transactd/connectionRecord.h +39 -39
- data/source/bzs/db/transactd/transactd.cpp +217 -203
- data/source/bzs/env/boost_bcb_link.h +131 -0
- data/source/bzs/env/compiler.h +136 -79
- data/source/bzs/env/crosscompile.cpp +57 -57
- data/source/bzs/env/crosscompile.h +130 -115
- data/source/bzs/env/fileopen.h +7 -8
- data/source/bzs/env/mbcswchrLinux.cpp +4 -9
- data/source/bzs/env/mbcswchrLinux.h +37 -34
- data/source/bzs/env/tcharMinGW.h +59 -0
- data/source/bzs/env/tstring.h +90 -95
- data/source/bzs/example/changeSchema.cpp +22 -23
- data/source/bzs/example/changeSchema_c.cpp +22 -24
- data/source/bzs/example/connection_pool_c.cpp +49 -104
- data/source/bzs/example/createDatabase.cpp +40 -47
- data/source/bzs/example/createDatabase_c.cpp +38 -43
- data/source/bzs/example/deleteRecords.cpp +10 -15
- data/source/bzs/example/deleteRecords_c.cpp +10 -14
- data/source/bzs/example/dropDatabase.cpp +3 -9
- data/source/bzs/example/dropDatabase_c.cpp +5 -6
- data/source/bzs/example/insertRecords.cpp +37 -29
- data/source/bzs/example/insertRecords_c.cpp +19 -25
- data/source/bzs/example/ormap_c.cpp +621 -0
- data/source/bzs/example/queryData.cpp +371 -0
- data/source/bzs/example/queryData.h +16 -0
- data/source/bzs/example/query_c.cpp +109 -0
- data/source/bzs/example/readRecords.cpp +27 -27
- data/source/bzs/example/readRecords_c.cpp +25 -23
- data/source/bzs/example/updateRecords.cpp +16 -21
- data/source/bzs/example/updateRecords_c.cpp +8 -12
- data/source/bzs/example/update_with_transaction.cpp +21 -24
- data/source/bzs/example/update_with_transaction_c.cpp +12 -15
- data/source/bzs/example/useORMRecord.cpp +177 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
- data/source/bzs/netsvc/client/tcpClient.h +541 -489
- data/source/bzs/netsvc/server/IAppModule.h +119 -32
- data/source/bzs/netsvc/server/iserver.h +21 -23
- data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
- data/source/bzs/netsvc/server/serverCpt.h +41 -43
- data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
- data/source/bzs/netsvc/server/serverPipe.h +44 -45
- data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
- data/source/bzs/netsvc/server/serverTpool.h +38 -43
- data/source/bzs/rtl/benchmark.cpp +91 -31
- data/source/bzs/rtl/benchmark.h +76 -22
- data/source/bzs/rtl/datetime.cpp +231 -233
- data/source/bzs/rtl/datetime.h +16 -16
- data/source/bzs/rtl/debuglog.cpp +48 -51
- data/source/bzs/rtl/debuglog.h +55 -44
- data/source/bzs/rtl/exception.h +55 -48
- data/source/bzs/rtl/stl_uty.cpp +27 -28
- data/source/bzs/rtl/stl_uty.h +28 -29
- data/source/bzs/rtl/stringBuffers.cpp +8 -6
- data/source/bzs/rtl/stringBuffers.h +16 -9
- data/source/bzs/rtl/strtrim.cpp +90 -91
- data/source/bzs/rtl/strtrim.h +14 -16
- data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
- data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
- data/source/bzs/test/tdclphp/bench.php +357 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
- data/source/bzs/test/tdclrb/prepare.rb +15 -12
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
- data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
- data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
- data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
- data/source/bzs/test/transactdBench/workerBase.h +88 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
- data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
- data/source/global/ormsrcgen/confParam.h +80 -0
- data/source/global/ormsrcgen/fieldName.cpp +77 -0
- data/source/global/ormsrcgen/fieldName.h +43 -0
- data/source/global/ormsrcgen/main.cpp +196 -0
- data/source/global/ormsrcgen/srcgen.cpp +763 -0
- data/source/global/ormsrcgen/srcgen.h +72 -0
- data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
- data/source/global/ormsrcgen/template/template.cnf +38 -0
- data/source/global/querystmts/querystmts.cpp +237 -0
- data/source/global/tdclatl/ConnectParams.cpp +77 -0
- data/source/global/tdclatl/ConnectParams.h +70 -0
- data/source/global/tdclatl/Database.cpp +132 -128
- data/source/global/tdclatl/Database.h +60 -49
- data/source/global/tdclatl/DbDef.cpp +68 -64
- data/source/global/tdclatl/DbDef.h +36 -36
- data/source/global/tdclatl/Field.cpp +12 -17
- data/source/global/tdclatl/Field.h +15 -12
- data/source/global/tdclatl/FieldDef.cpp +75 -36
- data/source/global/tdclatl/FieldDef.h +38 -19
- data/source/global/tdclatl/FieldDefs.cpp +74 -0
- data/source/global/tdclatl/FieldDefs.h +56 -0
- data/source/global/tdclatl/FieldNames.cpp +99 -0
- data/source/global/tdclatl/FieldNames.h +66 -0
- data/source/global/tdclatl/Flags.cpp +75 -37
- data/source/global/tdclatl/Flags.h +13 -12
- data/source/global/tdclatl/GroupQuery.cpp +119 -0
- data/source/global/tdclatl/GroupQuery.h +65 -0
- data/source/global/tdclatl/KeyDef.cpp +15 -14
- data/source/global/tdclatl/KeyDef.h +20 -17
- data/source/global/tdclatl/KeySegment.cpp +13 -12
- data/source/global/tdclatl/PooledDbManager.cpp +223 -0
- data/source/global/tdclatl/PooledDbManager.h +76 -0
- data/source/global/tdclatl/QueryBase.cpp +206 -127
- data/source/global/tdclatl/QueryBase.h +55 -59
- data/source/global/tdclatl/Record.cpp +214 -0
- data/source/global/tdclatl/Record.h +96 -0
- data/source/global/tdclatl/Recordset.cpp +278 -0
- data/source/global/tdclatl/Recordset.h +83 -0
- data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
- data/source/global/tdclatl/RecordsetQuery.h +126 -0
- data/source/global/tdclatl/Table.cpp +57 -60
- data/source/global/tdclatl/Table.h +32 -29
- data/source/global/tdclatl/TableDef.cpp +63 -62
- data/source/global/tdclatl/TableDef.h +20 -22
- data/source/global/tdclatl/TdVersion.cpp +3 -3
- data/source/global/tdclatl/TdVersion.h +15 -11
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
- data/source/global/tdclatl/activeTable.cpp +355 -0
- data/source/global/tdclatl/activeTable.h +79 -0
- data/source/global/tdclatl/dllmain.cpp +4 -3
- data/source/global/tdclatl/dllmain.h +7 -6
- data/source/global/tdclatl/keySegment.h +22 -18
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.h +6 -4
- data/source/global/tdclatl/targetver.h +0 -1
- data/source/global/tdclatl/tdclatl.cpp +10 -5
- data/source/global/tdclatl/tdclatl.idl +530 -14
- data/source/linux/charsetConvert.h +78 -79
- data/source/linux/linuxTypes.h +9 -12
- data/source/linux/tchar.h +168 -166
- data/transactd.gemspec +24 -16
- metadata +98 -12
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/tdclc/tdclc_32.cbproj +0 -173
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
- data/build/tdclrb/GEM_VERSION +0 -3
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
- 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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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(),
|
|
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,
|
|
138
|
-
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(
|
|
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(
|
|
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,
|
|
272
|
+
BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[0].type,
|
|
273
|
+
"clent_Type = " << vv.versions[0].type);
|
|
212
274
|
|
|
213
|
-
BOOST_CHECK_MESSAGE(
|
|
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(
|
|
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,
|
|
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(
|
|
286
|
+
BOOST_CHECK_MESSAGE(
|
|
287
|
+
TRANSACTD_VER_MAJOR == vv.versions[2].majorVersion,
|
|
220
288
|
"server_Major = " << vv.versions[2].majorVersion);
|
|
221
|
-
BOOST_CHECK_MESSAGE(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
438
|
+
_ltot_s(1, buf, 20, 10);
|
|
373
439
|
q.addSeekKeyValue(buf, true);
|
|
374
440
|
|
|
375
|
-
for (int i=2;i<=10000
|
|
376
|
-
|
|
441
|
+
for (int i = 2; i <= 10000; ++i)
|
|
442
|
+
{
|
|
377
443
|
_ltot_s(i, buf, 20, 10);
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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))),
|
|
434
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)),
|
|
554
|
+
BOOST_CHECK_MESSAGE(_tstring(_T("kosaka")) == _tstring(tb->getFVstr(1)),
|
|
555
|
+
"GetPrevious kosaka");
|
|
489
556
|
|
|
490
557
|
db->endSnapshot();
|
|
491
|
-
|
|
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
|
-
|
|
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),
|
|
534
|
-
|
|
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)),
|
|
543
|
-
|
|
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
|
-
|
|
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),
|
|
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
|
-
|
|
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();
|
|
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,
|
|
646
|
-
|
|
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(),
|
|
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
|
-
|
|
694
|
-
|
|
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
|
-
|
|
744
|
-
|
|
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
|
-
|
|
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,
|
|
914
|
+
BOOST_CHECK_MESSAGE(_tcscmp(tb2->getFVstr(fdi_name), _T("ABC")) == 0,
|
|
915
|
+
"tb->seekFirst");
|
|
843
916
|
|
|
844
|
-
|
|
845
|
-
|
|
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
|
-
|
|
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) <
|
|
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(
|
|
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),
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(),
|
|
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) ||
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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,
|
|
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 +
|
|
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 +
|
|
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 +
|
|
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 =
|
|
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(),
|
|
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,
|
|
1127
|
-
|
|
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"),
|
|
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
|
-
|
|
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"),
|
|
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"),
|
|
1192
|
-
|
|
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 "),
|
|
1196
|
-
|
|
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"あいう"),
|
|
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)) ==
|
|
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松本"),
|
|
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"),
|
|
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"),
|
|
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"),
|
|
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"),
|
|
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 "),
|
|
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"),
|
|
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("あいう"),
|
|
1435
|
+
BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
|
|
1436
|
+
"Get Set A3");
|
|
1245
1437
|
else
|
|
1246
|
-
BOOST_CHECK_MESSAGE(
|
|
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
|
-
|
|
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"),
|
|
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"),
|
|
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"),
|
|
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 "),
|
|
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"),
|
|
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("あいう"),
|
|
1480
|
+
BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
|
|
1481
|
+
"GetA Set W3");
|
|
1284
1482
|
else
|
|
1285
|
-
BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) ==
|
|
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松本"),
|
|
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"),
|
|
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"),
|
|
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"),
|
|
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 "),
|
|
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("あいう"),
|
|
1518
|
+
BOOST_CHECK_MESSAGE(string(tb->getFVAstr(1)) == string("あいう"),
|
|
1519
|
+
"Get Set A3");
|
|
1314
1520
|
else
|
|
1315
|
-
BOOST_CHECK_MESSAGE(
|
|
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松本"),
|
|
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,
|
|
1370
|
-
|
|
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,
|
|
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),
|
|
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,
|
|
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),
|
|
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),
|
|
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(),
|
|
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,
|
|
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(),
|
|
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(),
|
|
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
|
-
|
|
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("あいうえおかきくこ")) ==
|
|
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です")) ==
|
|
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)),
|
|
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)),
|
|
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("あいうえおかきくこ")) ==
|
|
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)),
|
|
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("おはようございます")) ==
|
|
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("おめでとうございます。")) ==
|
|
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("おめでとうございます。")) ==
|
|
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("おはようございます")) ==
|
|
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)),
|
|
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)),
|
|
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(),
|
|
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(),
|
|
2099
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(),
|
|
2100
|
+
"doTestUpdateSF stat = " << tb->stat());
|
|
1864
2101
|
tb->seekNext();
|
|
1865
|
-
BOOST_CHECK_MESSAGE(0 == 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(),
|
|
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(),
|
|
1874
|
-
|
|
1875
|
-
BOOST_CHECK_MESSAGE(_tstring(_T("
|
|
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(),
|
|
1878
|
-
|
|
1879
|
-
BOOST_CHECK_MESSAGE(_tstring(_T("
|
|
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,
|
|
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(),
|
|
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,
|
|
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(),
|
|
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
|
|
1930
|
-
{_T("
|
|
1931
|
-
_TCHAR
|
|
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(),
|
|
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,
|
|
1984
|
-
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
2073
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2405
|
+
BOOST_CHECK_MESSAGE(len == 7 + (_tcslen(_T("漢字")) * sizeof(_TCHAR)),
|
|
2406
|
+
" logic.writeBuffer len =" << len);
|
|
2163
2407
|
|
|
2164
|
-
|
|
2165
|
-
|
|
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
|
-
|
|
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()) ==
|
|
2226
|
-
|
|
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()) ==
|
|
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(
|
|
2235
|
-
|
|
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(
|
|
2243
|
-
|
|
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(
|
|
2247
|
-
|
|
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(
|
|
2255
|
-
|
|
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("*"),
|
|
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("*"),
|
|
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
|
-
|
|
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
|
-
|
|
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()) ==
|
|
2277
|
-
,
|
|
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()) ==
|
|
2285
|
-
,
|
|
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()) ==
|
|
2289
|
-
,
|
|
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()) ==
|
|
2298
|
-
,
|
|
2299
|
-
|
|
2300
|
-
|
|
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()) ==
|
|
2303
|
-
,
|
|
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()) ==
|
|
2313
|
-
,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2650
|
+
void teetNewDelete(database* db)
|
|
2651
|
+
{
|
|
2652
|
+
// printf("new delete start \n");
|
|
2653
|
+
for (int i = 0; i < 500; ++i)
|
|
2353
2654
|
{
|
|
2354
|
-
|
|
2355
|
-
|
|
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
|
-
|
|
2658
|
+
query q;
|
|
2659
|
+
q.reset();
|
|
2363
2660
|
|
|
2364
|
-
|
|
2661
|
+
recordsetQuery rq;
|
|
2662
|
+
rq.reset();
|
|
2365
2663
|
|
|
2366
|
-
|
|
2664
|
+
groupQuery gq;
|
|
2665
|
+
gq.reset();
|
|
2367
2666
|
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3077
|
+
BOOST_FIXTURE_TEST_CASE(getEqual, fixture)
|
|
3078
|
+
{
|
|
3079
|
+
testGetEqual(db());
|
|
3080
|
+
}
|
|
2377
3081
|
|
|
2378
|
-
|
|
3082
|
+
BOOST_FIXTURE_TEST_CASE(getNext, fixture)
|
|
3083
|
+
{
|
|
3084
|
+
testGetNext(db());
|
|
3085
|
+
}
|
|
2379
3086
|
|
|
2380
|
-
|
|
3087
|
+
BOOST_FIXTURE_TEST_CASE(getPrevious, fixture)
|
|
3088
|
+
{
|
|
3089
|
+
testGetPrevious(db());
|
|
3090
|
+
}
|
|
2381
3091
|
|
|
2382
|
-
|
|
3092
|
+
BOOST_FIXTURE_TEST_CASE(getGreater, fixture)
|
|
3093
|
+
{
|
|
3094
|
+
testGetGreater(db());
|
|
3095
|
+
}
|
|
2383
3096
|
|
|
2384
|
-
|
|
3097
|
+
BOOST_FIXTURE_TEST_CASE(getLessThan, fixture)
|
|
3098
|
+
{
|
|
3099
|
+
testGetLessThan(db());
|
|
3100
|
+
}
|
|
2385
3101
|
|
|
2386
|
-
|
|
3102
|
+
BOOST_FIXTURE_TEST_CASE(getFirst, fixture)
|
|
3103
|
+
{
|
|
3104
|
+
testGetFirst(db());
|
|
3105
|
+
}
|
|
2387
3106
|
|
|
2388
|
-
|
|
3107
|
+
BOOST_FIXTURE_TEST_CASE(getLast, fixture)
|
|
3108
|
+
{
|
|
3109
|
+
testGetLast(db());
|
|
3110
|
+
}
|
|
2389
3111
|
|
|
2390
|
-
|
|
3112
|
+
BOOST_FIXTURE_TEST_CASE(movePosition, fixture)
|
|
3113
|
+
{
|
|
3114
|
+
testMovePosition(db());
|
|
3115
|
+
}
|
|
2391
3116
|
|
|
2392
|
-
|
|
3117
|
+
BOOST_FIXTURE_TEST_CASE(update, fixture)
|
|
3118
|
+
{
|
|
3119
|
+
testUpdate(db());
|
|
3120
|
+
}
|
|
2393
3121
|
|
|
2394
|
-
|
|
3122
|
+
BOOST_FIXTURE_TEST_CASE(snapShot, fixture)
|
|
3123
|
+
{
|
|
3124
|
+
testSnapShot(db());
|
|
3125
|
+
}
|
|
2395
3126
|
|
|
2396
|
-
|
|
3127
|
+
BOOST_FIXTURE_TEST_CASE(conflict, fixture)
|
|
3128
|
+
{
|
|
3129
|
+
testConflict(db());
|
|
3130
|
+
}
|
|
2397
3131
|
|
|
2398
|
-
|
|
3132
|
+
BOOST_FIXTURE_TEST_CASE(transactionLock, fixture)
|
|
3133
|
+
{
|
|
3134
|
+
testTransactionLock(db());
|
|
3135
|
+
}
|
|
2399
3136
|
|
|
2400
|
-
|
|
3137
|
+
BOOST_AUTO_TEST_CASE(Exclusive)
|
|
3138
|
+
{
|
|
3139
|
+
testExclusive();
|
|
3140
|
+
}
|
|
2401
3141
|
|
|
2402
|
-
|
|
3142
|
+
BOOST_FIXTURE_TEST_CASE(insert2, fixture)
|
|
3143
|
+
{
|
|
3144
|
+
testInsert2(db());
|
|
3145
|
+
}
|
|
2403
3146
|
|
|
2404
|
-
|
|
3147
|
+
BOOST_FIXTURE_TEST_CASE(delete_, fixture)
|
|
3148
|
+
{
|
|
3149
|
+
testDelete(db());
|
|
3150
|
+
}
|
|
2405
3151
|
|
|
2406
|
-
|
|
3152
|
+
BOOST_FIXTURE_TEST_CASE(setOwner, fixture)
|
|
3153
|
+
{
|
|
3154
|
+
testSetOwner(db());
|
|
3155
|
+
}
|
|
2407
3156
|
|
|
2408
|
-
|
|
3157
|
+
BOOST_FIXTURE_TEST_CASE(dropIndex, fixture)
|
|
3158
|
+
{
|
|
3159
|
+
testDropIndex(db());
|
|
3160
|
+
}
|
|
2409
3161
|
|
|
2410
|
-
|
|
3162
|
+
BOOST_FIXTURE_TEST_CASE(dropDatabase, fixture)
|
|
3163
|
+
{
|
|
3164
|
+
testDropDatabase(db());
|
|
3165
|
+
}
|
|
2411
3166
|
|
|
2412
|
-
|
|
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
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
3180
|
+
BOOST_AUTO_TEST_CASE(u8tombc)
|
|
3181
|
+
{
|
|
3182
|
+
char mbc[256];
|
|
3183
|
+
char u8[256] = "123";
|
|
2426
3184
|
|
|
2427
|
-
|
|
2428
|
-
|
|
3185
|
+
bzs::env::u8tombc(u8, -1, mbc, 256);
|
|
3186
|
+
BOOST_CHECK_MESSAGE(!strcmp(mbc, u8), u8);
|
|
2429
3187
|
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
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
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
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
|
-
|
|
3205
|
+
BOOST_FIXTURE_TEST_CASE(createDataBaseVar, fixture)
|
|
3206
|
+
{
|
|
3207
|
+
testCreateDataBaseVar(db());
|
|
3208
|
+
}
|
|
2449
3209
|
|
|
2450
|
-
|
|
3210
|
+
BOOST_FIXTURE_TEST_CASE(varField, fixture)
|
|
3211
|
+
{
|
|
3212
|
+
testVarField(db());
|
|
3213
|
+
}
|
|
2451
3214
|
|
|
2452
|
-
|
|
3215
|
+
BOOST_FIXTURE_TEST_CASE(varInsert, fixture)
|
|
3216
|
+
{
|
|
3217
|
+
testVarInsert(db());
|
|
3218
|
+
}
|
|
2453
3219
|
|
|
2454
|
-
|
|
3220
|
+
BOOST_FIXTURE_TEST_CASE(varRead, fixture)
|
|
3221
|
+
{
|
|
3222
|
+
testVarRead(db());
|
|
3223
|
+
}
|
|
2455
3224
|
|
|
2456
|
-
|
|
3225
|
+
BOOST_FIXTURE_TEST_CASE(filterVar, fixture)
|
|
3226
|
+
{
|
|
3227
|
+
testFilterVar(db());
|
|
3228
|
+
}
|
|
2457
3229
|
|
|
2458
|
-
|
|
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
|
-
|
|
3241
|
+
BOOST_FIXTURE_TEST_CASE(stringFileter, fixture)
|
|
3242
|
+
{
|
|
3243
|
+
testStringFileter(db());
|
|
3244
|
+
}
|
|
2467
3245
|
|
|
2468
|
-
|
|
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
|
-
|
|
3257
|
+
BOOST_FIXTURE_TEST_CASE(knajiCreateSchema, fixture)
|
|
3258
|
+
{
|
|
3259
|
+
testKnajiCreateSchema(db());
|
|
3260
|
+
}
|
|
2477
3261
|
|
|
2478
|
-
|
|
3262
|
+
BOOST_FIXTURE_TEST_CASE(insertKanji, fixture)
|
|
3263
|
+
{
|
|
3264
|
+
testInsertKanji(db());
|
|
3265
|
+
}
|
|
2479
3266
|
|
|
2480
|
-
|
|
3267
|
+
BOOST_FIXTURE_TEST_CASE(getEqualKanji, fixture)
|
|
3268
|
+
{
|
|
3269
|
+
testGetEqualKanji(db());
|
|
3270
|
+
}
|
|
2481
3271
|
|
|
2482
|
-
|
|
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
|
-
|
|
2490
|
-
|
|
3282
|
+
BOOST_FIXTURE_TEST_CASE(resultField, fixture)
|
|
3283
|
+
{
|
|
2491
3284
|
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
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
|
+
// ------------------------------------------------------------------------
|