transactd 2.4.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CMakeLists.txt +1 -1
- data/README-JA.md +52 -529
- data/README.md +52 -523
- data/bin/common/tdclc_32_3_0.dll +0 -0
- data/bin/common/tdclc_64_3_0.dll +0 -0
- data/build/common/system.cmake +2 -1
- data/build/common/transactd_cl_common.cmake +3 -6
- data/build/swig/ruby/ruby.swg +85 -28
- data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
- data/build/swig/tdcl.i +161 -5
- data/build/tdclc/CMakeLists.txt +1 -0
- data/build/tdclc/tdclc.cbproj +7 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/blobStructs.h +1 -1
- data/source/bzs/db/engine/mysql/database.cpp +199 -74
- data/source/bzs/db/engine/mysql/database.h +47 -18
- data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
- data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
- data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
- data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
- data/source/bzs/db/protocol/tdap/client/client.h +82 -15
- data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
- data/source/bzs/db/protocol/tdap/client/database.h +19 -6
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
- data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
- data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
- data/source/bzs/db/protocol/tdap/client/field.h +110 -121
- data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
- data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
- data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
- data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
- data/source/bzs/db/protocol/tdap/client/request.h +2 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
- data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
- data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
- data/source/bzs/db/protocol/tdap/client/table.h +112 -37
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
- data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
- data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
- data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
- data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
- data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
- data/source/bzs/db/protocol/tdap/uri.h +40 -32
- data/source/bzs/db/transactd/connManager.cpp +1 -1
- data/source/bzs/db/transactd/transactd.cpp +7 -0
- data/source/bzs/env/compiler.h +107 -94
- data/source/bzs/env/crosscompile.cpp +24 -12
- data/source/bzs/env/crosscompile.h +75 -6
- data/source/bzs/env/mbcswchrLinux.cpp +2 -2
- data/source/bzs/env/tcharMinGW.h +4 -0
- data/source/bzs/example/changeSchema.cpp +22 -17
- data/source/bzs/example/queryData.cpp +4 -0
- data/source/bzs/netsvc/client/iconnection.h +3 -1
- data/source/bzs/netsvc/client/tcpClient.h +10 -3
- data/source/bzs/rtl/stringBuffers.cpp +7 -0
- data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
- data/source/bzs/test/tdclatl/test_v3.js +1017 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
- data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
- data/source/bzs/test/trdclengn/testField.h +3305 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
- data/source/bzs/test/trdclengn/testbase.h +137 -0
- data/source/global/ormsrcgen/srcgen.cpp +23 -12
- data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
- data/source/global/querystmts/querystmts.cpp +2 -3
- data/source/global/tdclatl/Bitset.cpp +38 -0
- data/source/global/tdclatl/Bitset.h +63 -0
- data/source/global/tdclatl/Database.cpp +59 -18
- data/source/global/tdclatl/Database.h +7 -4
- data/source/global/tdclatl/DbDef.cpp +6 -6
- data/source/global/tdclatl/DbDef.h +2 -1
- data/source/global/tdclatl/Field.cpp +112 -0
- data/source/global/tdclatl/Field.h +19 -5
- data/source/global/tdclatl/FieldDef.cpp +137 -16
- data/source/global/tdclatl/FieldDef.h +18 -2
- data/source/global/tdclatl/FieldDefs.cpp +54 -1
- data/source/global/tdclatl/FieldDefs.h +3 -0
- data/source/global/tdclatl/GroupQuery.cpp +8 -8
- data/source/global/tdclatl/QueryBase.cpp +65 -0
- data/source/global/tdclatl/QueryBase.h +10 -0
- data/source/global/tdclatl/Record.cpp +33 -2
- data/source/global/tdclatl/Record.h +3 -1
- data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
- data/source/global/tdclatl/RecordsetQuery.h +8 -0
- data/source/global/tdclatl/Table.cpp +127 -3
- data/source/global/tdclatl/Table.h +10 -1
- data/source/global/tdclatl/TableDef.cpp +41 -8
- data/source/global/tdclatl/TableDef.h +7 -2
- data/source/global/tdclatl/activeTable.cpp +40 -71
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +222 -28
- data/source/linux/tchar.h +100 -96
- data/transactd.gemspec +2 -2
- metadata +13 -11
- data/BUILD_UNIX-JA.md +0 -161
- data/BUILD_WIN-JA.md +0 -326
- data/README_ORMSRCGEN-JA.md +0 -115
- data/README_ORMSRCGEN.md +0 -118
- data/RELEASE_NOTE-JA.md +0 -356
- data/RELEASE_NOTE.md +0 -360
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -16,115 +16,13 @@
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
17
17
|
02111-1307, USA.
|
18
18
|
================================================================= */
|
19
|
-
|
20
|
-
|
21
|
-
#if defined(__BCPLUSPLUS__)
|
22
|
-
#pragma warn -8012
|
23
|
-
#pragma warn -8022
|
24
|
-
#endif
|
25
|
-
#include <boost/test/included/unit_test.hpp>
|
26
|
-
#ifndef BOOST_TEST_MESSAGE
|
27
|
-
#define BOOST_TEST_MESSAGE BOOST_MESSAGE
|
28
|
-
#endif
|
29
|
-
#if defined(__BCPLUSPLUS__)
|
30
|
-
#pragma warn .8012
|
31
|
-
#pragma warn .8022
|
32
|
-
#endif
|
33
|
-
|
34
|
-
#include <bzs/db/protocol/tdap/client/database.h>
|
35
|
-
#include <bzs/db/protocol/tdap/client/table.h>
|
36
|
-
#include <bzs/db/protocol/tdap/client/dbDef.h>
|
37
|
-
#include <bzs/db/protocol/tdap/mysql/characterset.h>
|
38
|
-
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
39
|
-
#include <bzs/db/protocol/tdap/client/stringConverter.h>
|
40
|
-
#include <stdio.h>
|
41
|
-
#include <bzs/db/protocol/tdap/client/filter.h>
|
42
|
-
#include <bzs/example/queryData.h>
|
43
|
-
#include <bzs/db/protocol/tdap/client/activeTable.h>
|
19
|
+
#include "testbase.h"
|
44
20
|
#include <bzs/db/protocol/tdap/client/pooledDatabaseManager.h>
|
45
21
|
#include <boost/thread.hpp>
|
46
22
|
|
47
|
-
using namespace bzs::db::protocol::tdap::client;
|
48
|
-
using namespace bzs::db::protocol::tdap;
|
49
|
-
using namespace std;
|
50
|
-
|
51
|
-
#define TDAP
|
52
|
-
#ifdef TDAP
|
53
|
-
#define PROTOCOL _T("tdap")
|
54
|
-
#else
|
55
|
-
#define PROTOCOL _T("btrv")
|
56
|
-
#endif
|
57
|
-
static _TCHAR HOSTNAME[MAX_PATH] = { _T("127.0.0.1") };
|
58
|
-
#define DBNAME _T("test")
|
59
|
-
#define BDFNAME _T("test")
|
60
|
-
// #define ISOLATION_REPEATABLE_READ
|
61
|
-
#define ISOLATION_READ_COMMITTED
|
62
|
-
|
63
|
-
static _TCHAR g_uri[MAX_PATH];
|
64
|
-
static _TCHAR g_userName[MYSQL_USERNAME_MAX + 1]={0x00};
|
65
|
-
static _TCHAR g_password[MAX_PATH]={0x00};
|
66
|
-
|
67
23
|
static const short fdi_id = 0;
|
68
24
|
static const short fdi_name = 1;
|
69
25
|
|
70
|
-
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]);
|
71
|
-
|
72
|
-
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
|
73
|
-
{
|
74
|
-
for (int i = 1; i < argc; ++i)
|
75
|
-
{
|
76
|
-
if (strstr(argv[i], "--host=") == argv[i])
|
77
|
-
{
|
78
|
-
#ifdef _UNICODE
|
79
|
-
MultiByteToWideChar(CP_ACP,
|
80
|
-
(CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
81
|
-
argv[i] + 7, -1, HOSTNAME, MAX_PATH);
|
82
|
-
#else
|
83
|
-
strcpy_s(HOSTNAME, MAX_PATH, argv[i] + 7);
|
84
|
-
#endif
|
85
|
-
}
|
86
|
-
if (strstr(argv[i], "--user=") == argv[i])
|
87
|
-
{
|
88
|
-
#ifdef _UNICODE
|
89
|
-
MultiByteToWideChar(CP_ACP,
|
90
|
-
(CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
91
|
-
argv[i] + 7, -1, g_userName, MYSQL_USERNAME_MAX+1);
|
92
|
-
#else
|
93
|
-
strcpy_s(g_userName, MYSQL_USERNAME_MAX+1, argv[i] + 7);
|
94
|
-
#endif
|
95
|
-
}
|
96
|
-
if (strstr(argv[i], "--pwd=") == argv[i])
|
97
|
-
{
|
98
|
-
#ifdef _UNICODE
|
99
|
-
MultiByteToWideChar(CP_ACP,
|
100
|
-
(CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
101
|
-
argv[i] + 6, -1, g_password, MAX_PATH);
|
102
|
-
#else
|
103
|
-
strcpy_s(g_password, MAX_PATH, argv[i] + 6);
|
104
|
-
#endif
|
105
|
-
}
|
106
|
-
}
|
107
|
-
printf("Transactd test ... \nMay look like progress is stopped, \n"
|
108
|
-
"but it is such as record lock test, please wait.\n");
|
109
|
-
|
110
|
-
return 0;
|
111
|
-
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
|
116
|
-
const _TCHAR* dbname, const _TCHAR* dbfile=_T(""))
|
117
|
-
{
|
118
|
-
connectParams cp(protocol, host, dbname, dbfile, g_userName, g_password);
|
119
|
-
_tcscpy_s(g_uri, 260, cp.uri());
|
120
|
-
/*if (dbfile)
|
121
|
-
_stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s?dbfile=%s"), protocol, host,
|
122
|
-
dbname, dbfile);
|
123
|
-
else
|
124
|
-
_stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s"), protocol, host, dbname);*/
|
125
|
-
return g_uri;
|
126
|
-
}
|
127
|
-
|
128
26
|
class fixture
|
129
27
|
{
|
130
28
|
mutable database* m_db;
|
@@ -250,6 +148,8 @@ void testClone(database* db)
|
|
250
148
|
BOOST_CHECK_MESSAGE(ret == false, "testTablePtr");
|
251
149
|
}
|
252
150
|
|
151
|
+
|
152
|
+
#define NAMEFIELD_TYPE ft_myvarbinary
|
253
153
|
void testCreateNewDataBase(database* db)
|
254
154
|
{
|
255
155
|
|
@@ -275,14 +175,10 @@ void testCreateNewDataBase(database* db)
|
|
275
175
|
{
|
276
176
|
/* user table */
|
277
177
|
tabledef td;
|
278
|
-
memset(&td, 0, sizeof(tabledef));
|
279
178
|
td.setTableName(_T("user"));
|
280
179
|
td.setFileName(_T("user.dat"));
|
281
180
|
td.id = 1;
|
282
|
-
|
283
|
-
td.parentKeyNum = -1;
|
284
|
-
td.replicaKeyNum = -1;
|
285
|
-
td.pageSize = 2048;
|
181
|
+
|
286
182
|
#ifdef _WIN32
|
287
183
|
td.charsetIndex = CHARSET_CP932;
|
288
184
|
#else
|
@@ -308,13 +204,15 @@ void testCreateNewDataBase(database* db)
|
|
308
204
|
//test padChar only string or wstring
|
309
205
|
fd->type = ft_string;
|
310
206
|
fd->setPadCharSettings(true, false);
|
311
|
-
BOOST_CHECK(fd->
|
312
|
-
BOOST_CHECK(fd->
|
207
|
+
BOOST_CHECK(fd->isUsePadChar() == true);
|
208
|
+
BOOST_CHECK(fd->isTrimPadChar() == false);
|
313
209
|
fd->setPadCharSettings(false, true);
|
314
|
-
BOOST_CHECK(fd->
|
315
|
-
BOOST_CHECK(fd->
|
210
|
+
BOOST_CHECK(fd->isUsePadChar() == false);
|
211
|
+
BOOST_CHECK(fd->isTrimPadChar() == true);
|
316
212
|
|
317
|
-
fd->type = ft_zstring;
|
213
|
+
//fd->type = ft_zstring;
|
214
|
+
fd->type = NAMEFIELD_TYPE;
|
215
|
+
fd->setNullable(use_nullfield);
|
318
216
|
def->updateTableDef(1);
|
319
217
|
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
320
218
|
"updateTableDef 2 stat = " << def->stat());
|
@@ -323,6 +221,7 @@ void testCreateNewDataBase(database* db)
|
|
323
221
|
fd->setName(_T("select"));
|
324
222
|
fd->type = ft_integer;
|
325
223
|
fd->len = (ushort_td)4;
|
224
|
+
fd->setNullable(use_nullfield);
|
326
225
|
def->updateTableDef(1);
|
327
226
|
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
328
227
|
"updateTableDef 2 stat = " << def->stat());
|
@@ -331,6 +230,7 @@ void testCreateNewDataBase(database* db)
|
|
331
230
|
fd->setName(_T("in"));
|
332
231
|
fd->type = ft_integer;
|
333
232
|
fd->len = (ushort_td)4;
|
233
|
+
fd->setNullable(use_nullfield);
|
334
234
|
def->updateTableDef(1);
|
335
235
|
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
336
236
|
"updateTableDef 2 stat = " << def->stat());
|
@@ -399,34 +299,34 @@ void testVersion(database* db)
|
|
399
299
|
if (_tcscmp(PROTOCOL, _T("tdap")) == 0)
|
400
300
|
{
|
401
301
|
BOOST_CHECK_MESSAGE(
|
402
|
-
atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[
|
403
|
-
"clent_Major = " << vv.versions[
|
302
|
+
atoi(CPP_INTERFACE_VER_MAJOR) == vv.versions[VER_IDX_CLINET].majorVersion,
|
303
|
+
"clent_Major = " << vv.versions[VER_IDX_CLINET].majorVersion);
|
404
304
|
BOOST_CHECK_MESSAGE(
|
405
|
-
atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[
|
406
|
-
"clent_Miner = " << vv.versions[
|
407
|
-
BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[
|
408
|
-
"clent_Type = " << vv.versions[
|
305
|
+
atoi(CPP_INTERFACE_VER_MINOR) == vv.versions[VER_IDX_CLINET].minorVersion,
|
306
|
+
"clent_Miner = " << vv.versions[VER_IDX_CLINET].minorVersion);
|
307
|
+
BOOST_CHECK_MESSAGE((int)'N' == (int)vv.versions[VER_IDX_CLINET].type,
|
308
|
+
"clent_Type = " << vv.versions[VER_IDX_CLINET].type);
|
409
309
|
|
410
310
|
BOOST_CHECK_MESSAGE(
|
411
|
-
((5 == vv.versions[
|
412
|
-
(10 == vv.versions[
|
413
|
-
"mysql_server_Major = " << vv.versions[
|
311
|
+
((5 == vv.versions[VER_IDX_DB_SERVER].majorVersion) ||
|
312
|
+
(10 == vv.versions[VER_IDX_DB_SERVER].majorVersion)),
|
313
|
+
"mysql_server_Major = " << vv.versions[VER_IDX_DB_SERVER].majorVersion);
|
414
314
|
BOOST_CHECK_MESSAGE(
|
415
|
-
((5 <= vv.versions[
|
416
|
-
(
|
417
|
-
|
418
|
-
|
419
|
-
BOOST_CHECK_MESSAGE((int)'M' == (int)
|
420
|
-
"mysql_server_Type = " << vv.versions[
|
315
|
+
((5 <= vv.versions[VER_IDX_DB_SERVER].minorVersion) ||
|
316
|
+
(1 >= vv.versions[VER_IDX_DB_SERVER].minorVersion)),
|
317
|
+
"mysql_server_Miner = " << vv.versions[VER_IDX_DB_SERVER].minorVersion);
|
318
|
+
int type = (int)vv.versions[VER_IDX_DB_SERVER].type;
|
319
|
+
BOOST_CHECK_MESSAGE(((int)'M' == type) || ((int)'A' == type),
|
320
|
+
"mysql_server_Type = " << vv.versions[VER_IDX_DB_SERVER].type);
|
421
321
|
|
422
322
|
BOOST_CHECK_MESSAGE(
|
423
|
-
TRANSACTD_VER_MAJOR == vv.versions[
|
424
|
-
"server_Major = " << vv.versions[
|
323
|
+
TRANSACTD_VER_MAJOR == vv.versions[VER_IDX_PLUGIN].majorVersion,
|
324
|
+
"server_Major = " << vv.versions[VER_IDX_PLUGIN].majorVersion);
|
425
325
|
BOOST_CHECK_MESSAGE(
|
426
|
-
TRANSACTD_VER_MINOR == vv.versions[
|
427
|
-
"server_Miner = " << vv.versions[
|
428
|
-
BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[
|
429
|
-
"server_Type = " << vv.versions[
|
326
|
+
TRANSACTD_VER_MINOR == vv.versions[VER_IDX_PLUGIN].minorVersion,
|
327
|
+
"server_Miner = " << vv.versions[VER_IDX_PLUGIN].minorVersion);
|
328
|
+
BOOST_CHECK_MESSAGE((int)'T' == (int)vv.versions[VER_IDX_PLUGIN].type,
|
329
|
+
"server_Type = " << vv.versions[VER_IDX_PLUGIN].type);
|
430
330
|
}
|
431
331
|
}
|
432
332
|
}
|
@@ -462,8 +362,6 @@ void testInsert(database* db)
|
|
462
362
|
tb->clearBuffer();
|
463
363
|
tb->setFV((short)0, i);
|
464
364
|
tb->setFV((short)1, i);
|
465
|
-
if (i == 87170)
|
466
|
-
i = 87170;
|
467
365
|
tb->insert();
|
468
366
|
}
|
469
367
|
tb->commitBulkInsert();
|
@@ -747,7 +645,7 @@ void testPrepareServer(database* db)
|
|
747
645
|
v = 50;
|
748
646
|
tb->setFV((short)0, v);
|
749
647
|
tb->seek();
|
750
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "seek");
|
648
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "seek stat = " << tb->stat());
|
751
649
|
tb->findNext(false);
|
752
650
|
findNextLoop(tb, v, 100);
|
753
651
|
|
@@ -1557,7 +1455,7 @@ void testTransactionLockReadCommited(database* db)
|
|
1557
1455
|
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb->seekNext");
|
1558
1456
|
// Try lock(X) whith lock(IX)
|
1559
1457
|
tb2->update();
|
1560
|
-
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "
|
1458
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update stat = " << tb2->stat());
|
1561
1459
|
|
1562
1460
|
/* ---------------------------------------------------------*/
|
1563
1461
|
/* Test single record lock Transaction and Transaction lock */
|
@@ -1663,7 +1561,7 @@ void testTransactionLockReadCommited(database* db)
|
|
1663
1561
|
tb2->seekFirst();
|
1664
1562
|
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->seekFirst");
|
1665
1563
|
tb2->update();
|
1666
|
-
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update");
|
1564
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->update stat = " << tb2->stat());
|
1667
1565
|
|
1668
1566
|
db->endTrn();
|
1669
1567
|
/* -------------------------------------------------*/
|
@@ -1972,15 +1870,18 @@ void testExclusive()
|
|
1972
1870
|
db2->close();
|
1973
1871
|
|
1974
1872
|
// Normal open
|
1873
|
+
/* Since MySQL 5.7 : D_OPEN_READONLY_EXCLUSIVE + TD_OPEN_NORMAL is fail,
|
1874
|
+
It's correct.
|
1875
|
+
*/
|
1876
|
+
|
1975
1877
|
db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
|
1976
|
-
db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME),
|
1977
|
-
|
1878
|
+
db2->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
|
1879
|
+
|
1978
1880
|
if (MySQL5_7)
|
1979
|
-
BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
|
1980
|
-
, "Normal open");
|
1881
|
+
BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat() , "Normal open");
|
1981
1882
|
else
|
1982
|
-
BOOST_CHECK_MESSAGE(0 == db2->stat()
|
1983
|
-
|
1883
|
+
BOOST_CHECK_MESSAGE(0 == db2->stat(), "Normal open");
|
1884
|
+
|
1984
1885
|
db2->close();
|
1985
1886
|
|
1986
1887
|
// Write Exclusive open
|
@@ -2339,11 +2240,11 @@ void testReconnect(database* db)
|
|
2339
2240
|
//Check restore lock
|
2340
2241
|
tb2->setFV(fdi_id, 10);
|
2341
2242
|
tb2->seek(ROW_LOCK_X);
|
2342
|
-
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb->seek stat = " << tb2->stat());
|
2243
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb->seek stat = " << tb2->stat()); //0
|
2343
2244
|
|
2344
2245
|
tb->seekNext();
|
2345
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek stat = " << tb->stat())
|
2346
|
-
BOOST_CHECK_MESSAGE(11 == tb->getFVint(fdi_id), "getFVint 11 bad = " << tb->getFVint(fdi_id))
|
2246
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek stat = " << tb->stat());//8
|
2247
|
+
BOOST_CHECK_MESSAGE(11 == tb->getFVint(fdi_id), "getFVint 11 bad = " << tb->getFVint(fdi_id));//10
|
2347
2248
|
|
2348
2249
|
tb2->setFV(fdi_id, 11);
|
2349
2250
|
tb2->seek(ROW_LOCK_X);
|
@@ -2452,7 +2353,7 @@ void testLogin(database* db)
|
|
2452
2353
|
// invalid database name
|
2453
2354
|
testDropDatabase(db);
|
2454
2355
|
db->disconnect();
|
2455
|
-
BOOST_CHECK_MESSAGE(
|
2356
|
+
BOOST_CHECK_MESSAGE(STATUS_PROGRAM_ERROR == db->stat(),
|
2456
2357
|
"databese disconnect db->stat() = " << db->stat());
|
2457
2358
|
|
2458
2359
|
db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
|
@@ -2461,7 +2362,7 @@ void testLogin(database* db)
|
|
2461
2362
|
|
2462
2363
|
//connect is failed, no need disconnet.
|
2463
2364
|
db->disconnect();
|
2464
|
-
BOOST_CHECK_MESSAGE(
|
2365
|
+
BOOST_CHECK_MESSAGE(STATUS_PROGRAM_ERROR == db->stat(),
|
2465
2366
|
"databese disconnect db->stat() = " << db->stat());
|
2466
2367
|
}
|
2467
2368
|
|
@@ -2484,22 +2385,14 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
|
|
2484
2385
|
// create table
|
2485
2386
|
dbdef* def = db->dbDef();
|
2486
2387
|
tabledef td;
|
2487
|
-
memset(&td, 0, sizeof(td));
|
2488
2388
|
td.setTableName(name);
|
2489
2389
|
_TCHAR buf[267];
|
2490
2390
|
_tcscpy_s(buf, 100, name);
|
2491
2391
|
_tcscat_s(buf, 100, _T(".dat"));
|
2492
2392
|
td.setFileName(buf);
|
2493
2393
|
td.id = id;
|
2494
|
-
td.keyCount = 0;
|
2495
|
-
td.fieldCount = 0;
|
2496
|
-
td.flags.all = 0;
|
2497
|
-
|
2498
|
-
td.primaryKeyNum = -1;
|
2499
|
-
td.parentKeyNum = -1;
|
2500
|
-
td.replicaKeyNum = -1;
|
2501
2394
|
|
2502
|
-
td.
|
2395
|
+
td.primaryKeyNum = 0;
|
2503
2396
|
|
2504
2397
|
td.charsetIndex = charset;
|
2505
2398
|
|
@@ -2571,7 +2464,7 @@ bool isUtf16leSupport(database* db)
|
|
2571
2464
|
{
|
2572
2465
|
btrVersions vv;
|
2573
2466
|
db->getBtrVersion(&vv);
|
2574
|
-
if ((int)'M' == (int)vv.versions[1].type)
|
2467
|
+
if ((int)'M' == (int)vv.versions[1].type || (int)'A' == (int)vv.versions[1].type)
|
2575
2468
|
{
|
2576
2469
|
if (vv.versions[1].majorVersion > 5)
|
2577
2470
|
return true;
|
@@ -3272,8 +3165,9 @@ void doInsertStringFileter(table* tb)
|
|
3272
3165
|
tb->setFV(_T("namew"), _T("おめでとうございます。"));
|
3273
3166
|
tb->insert();
|
3274
3167
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 4");
|
3275
|
-
tb->commitBulkInsert();
|
3168
|
+
int n = tb->commitBulkInsert();
|
3276
3169
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "InsertStringFileter 5");
|
3170
|
+
BOOST_CHECK_MESSAGE(n == 3, "InsertStringFileter 5");
|
3277
3171
|
}
|
3278
3172
|
|
3279
3173
|
void doTestReadSF(table* tb)
|
@@ -3682,18 +3576,22 @@ void testLogic(database* db)
|
|
3682
3576
|
{
|
3683
3577
|
table* tb = openTable(db);
|
3684
3578
|
logic lc;
|
3579
|
+
db->dbDef()->tableDefs(1)->fieldDefs[1].type = ft_zstring;
|
3685
3580
|
|
3686
3581
|
lc.setParam(tb, _T("name"), _T("="), _T("abc"), eCend);
|
3687
3582
|
|
3688
3583
|
BOOST_CHECK_MESSAGE(lc.type == ft_zstring, " logic.type");
|
3689
|
-
|
3584
|
+
|
3690
3585
|
BOOST_CHECK_MESSAGE(lc.pos == 4, " logic.pos");
|
3691
3586
|
BOOST_CHECK_MESSAGE(lc.logType == 1, " logic.logType");
|
3692
3587
|
BOOST_CHECK_MESSAGE(lc.opr == eCend, " logic.opr");
|
3693
|
-
BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
|
3694
|
-
|
3695
3588
|
int len = lc.size();
|
3589
|
+
BOOST_CHECK_MESSAGE(lc.len == 33, " logic.len");
|
3590
|
+
BOOST_CHECK_MESSAGE(strcmp((char*)lc.data, "abc") == 0, " logic.data");
|
3696
3591
|
BOOST_CHECK_MESSAGE(len == 7 + 33, " logic.writeBuffer");
|
3592
|
+
|
3593
|
+
|
3594
|
+
|
3697
3595
|
|
3698
3596
|
// compField invalid filed name
|
3699
3597
|
bool ret = lc.setParam(tb, _T("name"), _T("="), _T("1"), eCend, true);
|
@@ -4292,8 +4190,7 @@ void testJoin(database* db)
|
|
4292
4190
|
gq.addFunction(&count3).keyField(_T("group")); //.resultField(_T("count"));
|
4293
4191
|
rs.groupBy(gq);
|
4294
4192
|
BOOST_CHECK_MESSAGE(rs.size() == 5,
|
4295
|
-
"group by2 rs.size()==" <<
|
4296
|
-
|
4193
|
+
"group by2 rs.size()==" << rs.size());
|
4297
4194
|
// having
|
4298
4195
|
recordsetQuery rq;
|
4299
4196
|
rq.when(_T("gropu1_count"), _T("="), 1).or_(_T("gropu1_count"), _T("="), 2);
|
@@ -4524,10 +4421,10 @@ void testServerPrepareJoin(database* db)
|
|
4524
4421
|
atu.keyValue(1).read(rs, stmt1, 15000);
|
4525
4422
|
ate.outerJoin(rs, stmt2, _T("id"));
|
4526
4423
|
BOOST_CHECK_MESSAGE(rs.size() == 15000, "outerJoin rs.size()== 15000");
|
4424
|
+
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
|
4527
4425
|
atg.outerJoin(rs, stmt3, _T("group"));
|
4528
4426
|
BOOST_CHECK_MESSAGE(rs.size() == 15000, "join2 rs.size()== 15000");
|
4529
4427
|
|
4530
|
-
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
|
4531
4428
|
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
|
4532
4429
|
vs = rs[NO_RECORD_ID][_T("blob")].c_str();
|
4533
4430
|
ret = _tcscmp(vs, _T("6 blob")) == 0;
|
@@ -4541,6 +4438,7 @@ void testServerPrepareJoin(database* db)
|
|
4541
4438
|
ate.outerJoin(rs, stmt2, _T("id"));
|
4542
4439
|
BOOST_CHECK_MESSAGE(rs.size() == 15000, "outerJoin rs.size()== 15000");
|
4543
4440
|
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
|
4441
|
+
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1][_T("comment")].isNull() == true, "outerJoin NULL");
|
4544
4442
|
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
|
4545
4443
|
vs = rs[NO_RECORD_ID][_T("blob")].c_str();
|
4546
4444
|
ret = _tcscmp(vs, _T("6 blob")) == 0;
|
@@ -4553,7 +4451,8 @@ void testServerPrepareJoin(database* db)
|
|
4553
4451
|
// Test clone blob field
|
4554
4452
|
recordset& rs2 = *rs.clone();
|
4555
4453
|
BOOST_CHECK_MESSAGE(rs2.size() == 15000, "outerJoin rs2.size()== 15000");
|
4556
|
-
BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
|
4454
|
+
//BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID-1].isInvalidRecord() == true, "outerJoin isInvalidRecord");
|
4455
|
+
BOOST_CHECK_MESSAGE(rs[NO_RECORD_ID-1][_T("comment")].isNull() == true, "outerJoin NULL");
|
4557
4456
|
BOOST_CHECK_MESSAGE(rs2[NO_RECORD_ID][_T("comment")].i() == NO_RECORD_ID+1, "row of 6 = '6 comment'");
|
4558
4457
|
vs = rs2[NO_RECORD_ID][_T("blob")].c_str();
|
4559
4458
|
ret = _tcscmp(vs, _T("6 blob")) == 0;
|
@@ -4940,10 +4839,10 @@ void createFilterTestDb(database* db)
|
|
4940
4839
|
td.setTableName(_T("user"));
|
4941
4840
|
td.setFileName(_T("user.dat"));
|
4942
4841
|
td.id = 1;
|
4943
|
-
td.primaryKeyNum = -1;
|
4842
|
+
/*td.primaryKeyNum = -1;
|
4944
4843
|
td.parentKeyNum = -1;
|
4945
4844
|
td.replicaKeyNum = -1;
|
4946
|
-
td.pageSize = 2048
|
4845
|
+
td.pageSize = 2048;*/
|
4947
4846
|
#ifdef _WIN32
|
4948
4847
|
td.charsetIndex = CHARSET_CP932;
|
4949
4848
|
#else
|
@@ -5011,7 +4910,7 @@ void doTestReadByQuery(int num, activeTable& at, recordset& rs, Q& q,
|
|
5011
4910
|
setReject(q);
|
5012
4911
|
at.index(0).keyValue(0).read(rs, q);
|
5013
4912
|
BOOST_CHECK_MESSAGE(compSize == (int)rs.size(),
|
5014
|
-
num << " " << msg << " rs.size() = " << rs.size());
|
4913
|
+
num << " " << msg << " " << compSize << " --> bad rs.size() = " << rs.size());
|
5015
4914
|
}
|
5016
4915
|
|
5017
4916
|
void testFilterOfServer(database* db)
|
@@ -5028,7 +4927,8 @@ void testFilterOfServer(database* db)
|
|
5028
4927
|
|
5029
4928
|
q.reset().where(fdf_names[i], _T("="), _T(""));
|
5030
4929
|
int n = 3;
|
5031
|
-
|
4930
|
+
fielddef* fd = &atu.table()->tableDef()->fieldDefs[i+1];
|
4931
|
+
if (fd->isUsePadChar())
|
5032
4932
|
n += 1;
|
5033
4933
|
doTestReadByQuery(i, atu, rs, q, n, "");
|
5034
4934
|
q.where(fdf_names[i], _T("=i"), _T(""));
|
@@ -5119,12 +5019,12 @@ void testFilterOfServer(database* db)
|
|
5119
5019
|
}
|
5120
5020
|
}
|
5121
5021
|
|
5122
|
-
void doTestMatchBy(int num, recordset& rs, recordsetQuery& rq, int compSize, const
|
5022
|
+
void doTestMatchBy(int num, recordset& rs, recordsetQuery& rq, int compSize, const char* msg)
|
5123
5023
|
{
|
5124
5024
|
recordset* rss = rs.clone();
|
5125
5025
|
rss->matchBy(rq);
|
5126
5026
|
BOOST_CHECK_MESSAGE(compSize == (int)rss->size(),
|
5127
|
-
num << msg <<
|
5027
|
+
num << " " << msg << " rss->size = " << rss->size());
|
5128
5028
|
rss->release();
|
5129
5029
|
}
|
5130
5030
|
|
@@ -5143,47 +5043,47 @@ void testFilterOfMatchBy(database* db)
|
|
5143
5043
|
recordsetQuery rq;
|
5144
5044
|
rq.when(fdf_names[i], _T("="), _T(""));
|
5145
5045
|
int n = 3;
|
5146
|
-
if (atu.table()->tableDef()->fieldDefs[i+1].
|
5046
|
+
if (atu.table()->tableDef()->fieldDefs[i+1].isUsePadChar())
|
5147
5047
|
n += 1;
|
5148
|
-
doTestMatchBy(i, rs, rq, n,
|
5048
|
+
doTestMatchBy(i, rs, rq, n, " = ");
|
5149
5049
|
rq.reset().when(fdf_names[i], _T("=i"), _T(""));
|
5150
|
-
doTestMatchBy(i, rs, rq, n,
|
5050
|
+
doTestMatchBy(i, rs, rq, n, " =i ");
|
5151
5051
|
|
5152
5052
|
|
5153
5053
|
// wildcard
|
5154
5054
|
rq.reset().when(fdf_names[i], _T("="), _T("09*"));
|
5155
|
-
doTestMatchBy(i, rs, rq, 5,
|
5055
|
+
doTestMatchBy(i, rs, rq, 5, " = 09*");
|
5156
5056
|
rq.reset().when(fdf_names[i], _T("=i"), _T("09*"));
|
5157
|
-
doTestMatchBy(i, rs, rq, 5,
|
5057
|
+
doTestMatchBy(i, rs, rq, 5, " =i 09*");
|
5158
5058
|
|
5159
5059
|
// match complate
|
5160
5060
|
rq.reset().when(fdf_names[i], _T("="), _T("070"));
|
5161
|
-
doTestMatchBy(i, rs, rq, 1,
|
5061
|
+
doTestMatchBy(i, rs, rq, 1, " = 070");
|
5162
5062
|
rq.reset().when(fdf_names[i], _T("=i"), _T("070"));
|
5163
|
-
doTestMatchBy(i, rs, rq, 1,
|
5063
|
+
doTestMatchBy(i, rs, rq, 1, " =i 070");
|
5164
5064
|
|
5165
5065
|
// match complate
|
5166
5066
|
rq.reset().when(fdf_names[i], _T("<"), _T("09"));
|
5167
|
-
doTestMatchBy(i, rs, rq, 7,
|
5067
|
+
doTestMatchBy(i, rs, rq, 7, " < 09");
|
5168
5068
|
|
5169
5069
|
rq.reset().when(fdf_names[i], _T("<i"), _T("09"));
|
5170
|
-
doTestMatchBy(i, rs, rq, 7,
|
5070
|
+
doTestMatchBy(i, rs, rq, 7, " <i 09");
|
5171
5071
|
|
5172
5072
|
// ascii
|
5173
5073
|
rq.reset().when(fdf_names[i], _T("="), _T("a*"));
|
5174
|
-
doTestMatchBy(i, rs, rq, 1,
|
5074
|
+
doTestMatchBy(i, rs, rq, 1, " = a*");
|
5175
5075
|
|
5176
5076
|
rq.reset().when(fdf_names[i], _T("=i"), _T("a*"));
|
5177
|
-
doTestMatchBy(i, rs, rq, 3,
|
5077
|
+
doTestMatchBy(i, rs, rq, 3, " =i a*");
|
5178
5078
|
|
5179
5079
|
rq.reset().when(fdf_names[i], _T("=i"), _T("A*"));
|
5180
|
-
doTestMatchBy(i, rs, rq, 3,
|
5080
|
+
doTestMatchBy(i, rs, rq, 3, " =i A*");
|
5181
5081
|
|
5182
5082
|
rq.reset().when(fdf_names[i], _T("="), _T("AA0*"));
|
5183
|
-
doTestMatchBy(i, rs, rq, 0,
|
5083
|
+
doTestMatchBy(i, rs, rq, 0, " = AA0*");
|
5184
5084
|
|
5185
5085
|
rq.reset().when(fdf_names[i], _T("=i"), _T("AA0*"));
|
5186
|
-
doTestMatchBy(i, rs, rq, 1,
|
5086
|
+
doTestMatchBy(i, rs, rq, 1, " =i Aa0*");
|
5187
5087
|
|
5188
5088
|
|
5189
5089
|
BOOST_CHECK_MESSAGE(FILTER_RECORDS == rs.size(), " rs.size() = " << rs.size());
|
@@ -5218,7 +5118,7 @@ void testBinaryField()
|
|
5218
5118
|
fdd.len = 255;
|
5219
5119
|
fdd.pos = 0;
|
5220
5120
|
|
5221
|
-
client::field fd(buf, fdd, NULL);
|
5121
|
+
client::field fd(buf, fdd, NULL/*, NULL, 0*/);
|
5222
5122
|
for (int i = 0 ; i < 10; ++i)
|
5223
5123
|
{
|
5224
5124
|
fdd.type = field_types[i];
|
@@ -5247,8 +5147,30 @@ BOOST_FIXTURE_TEST_CASE(createNewDataBase, fixture)
|
|
5247
5147
|
{
|
5248
5148
|
connectParams cp(PROTOCOL, HOSTNAME, DBNAME, BDFNAME, g_userName);
|
5249
5149
|
_tprintf(_T("URI = %s\n"), cp.uri());
|
5250
|
-
|
5150
|
+
bool ret = db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
|
5151
|
+
if (ret)
|
5152
|
+
{
|
5251
5153
|
db()->drop();
|
5154
|
+
if (db()->stat())
|
5155
|
+
{
|
5156
|
+
printf("test database drop error No.%d\nTest is stopped !" , db()->stat());
|
5157
|
+
exit(1);
|
5158
|
+
}
|
5159
|
+
}
|
5160
|
+
db()->connect(makeUri(PROTOCOL, HOSTNAME, _T("")));
|
5161
|
+
|
5162
|
+
btrVersions v;
|
5163
|
+
db()->getBtrVersion(&v);
|
5164
|
+
if (db()->stat() ==0)
|
5165
|
+
{
|
5166
|
+
_tprintf(_T("%s-%d.%d with Transactd plugin %d.%d\n"),
|
5167
|
+
v.versions[VER_IDX_DB_SERVER].type == 'M' ? _T("mysql") : _T("mariadb"),
|
5168
|
+
v.versions[VER_IDX_DB_SERVER].majorVersion,
|
5169
|
+
v.versions[VER_IDX_DB_SERVER].minorVersion,
|
5170
|
+
v.versions[VER_IDX_PLUGIN].majorVersion,
|
5171
|
+
v.versions[VER_IDX_PLUGIN].minorVersion
|
5172
|
+
);
|
5173
|
+
}
|
5252
5174
|
testCreateNewDataBase(db());
|
5253
5175
|
}
|
5254
5176
|
BOOST_FIXTURE_TEST_CASE(clone, fixture)
|