transactd 2.1.0 → 2.2.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/bin/common/tdclc_32_2_2.dll +0 -0
- data/bin/common/tdclc_64_2_2.dll +0 -0
- data/build/swig/ruby/generate.cmd +45 -0
- data/build/swig/ruby/generate.sh +40 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +406 -969
- data/build/swig/tdcl.i +88 -0
- data/build/tdclc/CMakeLists.txt +5 -1
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +1 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +165 -74
- data/source/bzs/db/engine/mysql/database.h +19 -5
- data/source/bzs/db/engine/mysql/dbManager.cpp +33 -11
- data/source/bzs/db/engine/mysql/dbManager.h +6 -1
- data/source/bzs/db/engine/mysql/mydebuglog.h +12 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +10 -3
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +20 -8
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +12 -7
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +1 -1
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +1 -0
- data/source/bzs/db/protocol/tdap/client/client.cpp +17 -15
- data/source/bzs/db/protocol/tdap/client/client.h +102 -30
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +32 -10
- data/source/bzs/db/protocol/tdap/client/database.h +1 -0
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +0 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +2 -0
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +47 -42
- data/source/bzs/db/protocol/tdap/client/fields.h +3 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +3 -3
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +18 -2
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +3 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +14 -6
- data/source/bzs/db/protocol/tdap/client/nsTable.h +12 -12
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +6 -3
- data/source/bzs/db/protocol/tdap/client/request.h +1 -0
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +101 -64
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +3 -0
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +9 -13
- data/source/bzs/db/protocol/tdap/client/table.cpp +73 -56
- data/source/bzs/db/protocol/tdap/client/table.h +8 -8
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +52 -100
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +8 -1
- data/source/bzs/db/protocol/tdap/mysql/request.h +6 -0
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +349 -189
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +28 -12
- data/source/bzs/db/protocol/tdap/tdapRequest.h +5 -4
- data/source/bzs/db/protocol/tdap/tdapSchema.h +6 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +29 -4
- data/source/bzs/db/protocol/tdap/uri.h +297 -0
- data/source/bzs/db/transactd/appModule.cpp +41 -16
- data/source/bzs/db/transactd/appModule.h +1 -2
- data/source/bzs/db/transactd/transactd.cpp +37 -14
- data/source/bzs/env/crosscompile.h +1 -3
- data/source/bzs/example/queryData.cpp +2 -2
- data/source/bzs/netsvc/client/iconnection.h +3 -1
- data/source/bzs/netsvc/client/tcpClient.cpp +75 -28
- data/source/bzs/netsvc/client/tcpClient.h +94 -62
- data/source/bzs/netsvc/server/IAppModule.h +2 -2
- data/source/bzs/netsvc/server/serverCpt.cpp +17 -10
- data/source/bzs/netsvc/server/serverPipe.cpp +26 -19
- data/source/bzs/netsvc/server/serverTpool.cpp +8 -2
- data/source/bzs/rtl/debuglog.cpp +21 -5
- data/source/bzs/rtl/debuglog.h +1 -1
- data/source/bzs/test/tdclphp/transactd_Test.php +183 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +1 -2
- data/source/bzs/test/tdclrb/transactd_spec.rb +183 -39
- data/source/bzs/test/transactdBench/scaling_bench.cpp +3 -3
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +172 -57
- data/source/global/boost/sha1.hpp +223 -0
- data/source/global/tdclatl/ConnectParams.cpp +2 -2
- data/source/global/tdclatl/ConnectParams.h +1 -1
- data/source/global/tdclatl/Database.cpp +18 -0
- data/source/global/tdclatl/Database.h +5 -0
- data/source/global/tdclatl/tdclatl.idl +23 -1
- data/source/linux/linuxTypes.h +2 -0
- metadata +8 -6
- data/bin/common/tdclc_32_2_1.dll +0 -0
- data/bin/common/tdclc_64_2_1.dll +0 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +0 -448
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +0 -159
|
@@ -45,12 +45,17 @@ using namespace std;
|
|
|
45
45
|
#endif
|
|
46
46
|
static _TCHAR HOSTNAME[MAX_PATH] = { _T("127.0.0.1") };
|
|
47
47
|
#define DBNAME _T("test")
|
|
48
|
-
#define BDFNAME _T("test
|
|
48
|
+
#define BDFNAME _T("test")
|
|
49
49
|
// #define ISOLATION_REPEATABLE_READ
|
|
50
50
|
#define ISOLATION_READ_COMMITTED
|
|
51
51
|
|
|
52
|
+
static _TCHAR g_uri[MAX_PATH];
|
|
53
|
+
static _TCHAR g_userName[MYSQL_USERNAME_MAX + 1]={0x00};
|
|
54
|
+
static _TCHAR g_password[MAX_PATH]={0x00};
|
|
55
|
+
|
|
52
56
|
static const short fdi_id = 0;
|
|
53
57
|
static const short fdi_name = 1;
|
|
58
|
+
|
|
54
59
|
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[]);
|
|
55
60
|
|
|
56
61
|
boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
|
|
@@ -67,6 +72,26 @@ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
|
|
|
67
72
|
strcpy_s(HOSTNAME, MAX_PATH, argv[i] + 7);
|
|
68
73
|
#endif
|
|
69
74
|
}
|
|
75
|
+
if (strstr(argv[i], "--user=") == argv[i])
|
|
76
|
+
{
|
|
77
|
+
#ifdef _UNICODE
|
|
78
|
+
MultiByteToWideChar(CP_ACP,
|
|
79
|
+
(CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
80
|
+
argv[i] + 7, -1, g_userName, MYSQL_USERNAME_MAX+1);
|
|
81
|
+
#else
|
|
82
|
+
strcpy_s(g_userName, MYSQL_USERNAME_MAX+1, argv[i] + 7);
|
|
83
|
+
#endif
|
|
84
|
+
}
|
|
85
|
+
if (strstr(argv[i], "--pwd=") == argv[i])
|
|
86
|
+
{
|
|
87
|
+
#ifdef _UNICODE
|
|
88
|
+
MultiByteToWideChar(CP_ACP,
|
|
89
|
+
(CP_ACP == CP_UTF8) ? 0 : MB_PRECOMPOSED,
|
|
90
|
+
argv[i] + 6, -1, g_password, MAX_PATH);
|
|
91
|
+
#else
|
|
92
|
+
strcpy_s(g_password, MAX_PATH, argv[i] + 6);
|
|
93
|
+
#endif
|
|
94
|
+
}
|
|
70
95
|
}
|
|
71
96
|
printf("Transactd test ... \nMay look like progress is stopped, \n"
|
|
72
97
|
"but it is such as record lock test, please wait.\n");
|
|
@@ -74,16 +99,18 @@ boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
|
|
|
74
99
|
return 0;
|
|
75
100
|
}
|
|
76
101
|
|
|
77
|
-
|
|
102
|
+
|
|
78
103
|
|
|
79
104
|
const _TCHAR* makeUri(const _TCHAR* protocol, const _TCHAR* host,
|
|
80
|
-
const _TCHAR* dbname, const _TCHAR* dbfile
|
|
105
|
+
const _TCHAR* dbname, const _TCHAR* dbfile=_T(""))
|
|
81
106
|
{
|
|
82
|
-
|
|
107
|
+
connectParams cp(protocol, host, dbname, dbfile, g_userName, g_password);
|
|
108
|
+
_tcscpy(g_uri, cp.uri());
|
|
109
|
+
/*if (dbfile)
|
|
83
110
|
_stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s?dbfile=%s"), protocol, host,
|
|
84
111
|
dbname, dbfile);
|
|
85
112
|
else
|
|
86
|
-
_stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s"), protocol, host, dbname)
|
|
113
|
+
_stprintf_s(g_uri, MAX_PATH, _T("%s://%s/%s"), protocol, host, dbname);*/
|
|
87
114
|
return g_uri;
|
|
88
115
|
}
|
|
89
116
|
|
|
@@ -125,7 +152,7 @@ public:
|
|
|
125
152
|
if (!m_db)
|
|
126
153
|
printf("Error database::create()\n");
|
|
127
154
|
connectParams param(PROTOCOL, HOSTNAME, _T("querytest"),
|
|
128
|
-
_T("test
|
|
155
|
+
_T("test"), g_userName, g_password);
|
|
129
156
|
param.setMode(TD_OPEN_NORMAL);
|
|
130
157
|
|
|
131
158
|
prebuiltData(m_db, param);
|
|
@@ -142,19 +169,18 @@ table* openTable(database* db, short dbmode = TD_OPEN_NORMAL,
|
|
|
142
169
|
|
|
143
170
|
db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME), TYPE_SCHEMA_BDF,
|
|
144
171
|
dbmode);
|
|
145
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "open
|
|
172
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open stat = " << db->stat());
|
|
146
173
|
table* tb = db->openTable(_T("user"), tbmode);
|
|
147
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable" << db->stat());
|
|
174
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable stat = " << db->stat());
|
|
148
175
|
return tb;
|
|
149
176
|
}
|
|
150
177
|
|
|
151
178
|
void testDropDatabase(database* db)
|
|
152
179
|
{
|
|
153
180
|
db->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME));
|
|
154
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "
|
|
155
|
-
|
|
181
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open stat = " << db->stat());
|
|
156
182
|
db->drop();
|
|
157
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "drop
|
|
183
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "drop stat = " << db->stat());
|
|
158
184
|
}
|
|
159
185
|
|
|
160
186
|
void testClone(database* db)
|
|
@@ -297,9 +323,6 @@ void testCreateNewDataBase(database* db)
|
|
|
297
323
|
def->updateTableDef(2);
|
|
298
324
|
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
|
299
325
|
"updateTableDef 3 stat = " << def->stat());
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
326
|
}
|
|
304
327
|
}
|
|
305
328
|
|
|
@@ -1010,8 +1033,11 @@ void testSnapshot(database* db)
|
|
|
1010
1033
|
BOOST_CHECK_MESSAGE(STATUS_NOT_FOUND_TI == tb->stat(), "phantom read");
|
|
1011
1034
|
|
|
1012
1035
|
// clean up
|
|
1036
|
+
tb2->setFV(fdi_id, 29999);
|
|
1037
|
+
tb2->seek();
|
|
1038
|
+
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "seek stat = " << tb2->stat());
|
|
1013
1039
|
tb2->del();
|
|
1014
|
-
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "del");
|
|
1040
|
+
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "del stat = " << tb2->stat());
|
|
1015
1041
|
|
|
1016
1042
|
db->endSnapshot();
|
|
1017
1043
|
BOOST_CHECK_MESSAGE(0 == db->stat(), "endSnapShot");
|
|
@@ -1036,7 +1062,8 @@ void testSnapshot(database* db)
|
|
|
1036
1062
|
|
|
1037
1063
|
tb2->setFV(fdi_id, 29999);
|
|
1038
1064
|
tb2->insert();
|
|
1039
|
-
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(),
|
|
1065
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(),
|
|
1066
|
+
"GAP insert stat = " << tb2->stat());
|
|
1040
1067
|
|
|
1041
1068
|
db->endSnapshot();
|
|
1042
1069
|
|
|
@@ -1488,13 +1515,14 @@ void testTransactionLockReadCommited(database* db)
|
|
|
1488
1515
|
//insert test row
|
|
1489
1516
|
tb2->setFV(fdi_id, 29999);
|
|
1490
1517
|
tb2->insert();
|
|
1491
|
-
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->insert");
|
|
1518
|
+
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->insert stat = " << tb2->stat());
|
|
1492
1519
|
|
|
1493
1520
|
tb->seekLast();
|
|
1494
1521
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekLast");
|
|
1495
1522
|
tb->seekPrev();
|
|
1496
1523
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekPrev");
|
|
1497
|
-
BOOST_CHECK_MESSAGE(last2 != tb->getFVint(fdi_id), "phantom read"
|
|
1524
|
+
BOOST_CHECK_MESSAGE(last2 != tb->getFVint(fdi_id), "phantom read id = "
|
|
1525
|
+
<< tb->getFVint(fdi_id));
|
|
1498
1526
|
db->endTrn();
|
|
1499
1527
|
|
|
1500
1528
|
//cleanup
|
|
@@ -1610,8 +1638,13 @@ void testRecordLock(database* db)
|
|
|
1610
1638
|
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->seekFirst");
|
|
1611
1639
|
|
|
1612
1640
|
|
|
1613
|
-
tb->seekNext(); // nobody lock second.
|
|
1614
|
-
|
|
1641
|
+
tb->seekNext(); // nobody lock second. but REPEATABLE_READ tb2 lock all(no unlock)
|
|
1642
|
+
if (db->trxIsolationServer() == SRV_ISO_REPEATABLE_READ)
|
|
1643
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb->stat(), "tb->seekFirst stat = "
|
|
1644
|
+
<< tb->stat() );
|
|
1645
|
+
else
|
|
1646
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekFirst stat = " <<
|
|
1647
|
+
tb->stat() );
|
|
1615
1648
|
tb->seekNext(ROW_LOCK_X); // Try lock(X) third
|
|
1616
1649
|
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb->stat(), "tb->seekFirst");
|
|
1617
1650
|
|
|
@@ -1637,8 +1670,11 @@ void testRecordLock(database* db)
|
|
|
1637
1670
|
tb->setFV(fdi_id, 21000);
|
|
1638
1671
|
tb->insert();
|
|
1639
1672
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->insert");
|
|
1673
|
+
tb->setFV(fdi_id, 21000);
|
|
1674
|
+
tb->seek();
|
|
1675
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek stat = " << tb->stat() );
|
|
1640
1676
|
tb->del();
|
|
1641
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->del");
|
|
1677
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->del stat = " << tb->stat() );
|
|
1642
1678
|
|
|
1643
1679
|
/* --------- Unlock test ----------------------------*/
|
|
1644
1680
|
// 1 unlock()
|
|
@@ -1826,6 +1862,7 @@ void testExclusive()
|
|
|
1826
1862
|
/* Nnomal and Exclusive opend tables mix transaction */
|
|
1827
1863
|
/* ---------------------------------------------------*/
|
|
1828
1864
|
tb2 = db->openTable(_T("group"), TD_OPEN_EXCLUSIVE);
|
|
1865
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open group stat = " << db->stat()) ;
|
|
1829
1866
|
//Check tb2 Exclusive
|
|
1830
1867
|
tb3 = db2->openTable(_T("group"), TD_OPEN_NORMAL);
|
|
1831
1868
|
BOOST_CHECK_MESSAGE(STATUS_CANNOT_LOCK_TABLE == db2->stat()
|
|
@@ -1906,9 +1943,6 @@ public:
|
|
|
1906
1943
|
/* Getting missing value by lock wait */
|
|
1907
1944
|
void testMissingUpdate(database* db)
|
|
1908
1945
|
{
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
1946
|
table* tb = openTable(db);
|
|
1913
1947
|
database* db2 = database::create();
|
|
1914
1948
|
db2->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME), true);
|
|
@@ -1926,17 +1960,42 @@ void testMissingUpdate(database* db)
|
|
|
1926
1960
|
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seekLessThan");
|
|
1927
1961
|
if (tb->stat() == 0)
|
|
1928
1962
|
{
|
|
1929
|
-
|
|
1963
|
+
tb2->seekLessThan(false, ROW_LOCK_X);
|
|
1964
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb2->stat(), "tb2->seekLessThan");
|
|
1965
|
+
// Get lock(X) same record in parallel. The InnoDB is good!
|
|
1930
1966
|
boost::scoped_ptr<boost::thread> t(new boost::thread(boost::bind(&worker::run, w.get())));
|
|
1931
|
-
|
|
1932
|
-
tb->
|
|
1967
|
+
Sleep(5);
|
|
1968
|
+
int v = tb->getFVint(fdi_id);//v = 30000
|
|
1969
|
+
tb->setFV(fdi_id, ++v); //v = 30001
|
|
1933
1970
|
tb->insert();
|
|
1934
1971
|
t->join();
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1972
|
+
|
|
1973
|
+
if (db->trxIsolationServer() == SRV_ISO_REPEATABLE_READ)
|
|
1974
|
+
{ /* When SRV_ISO_REPEATABLE_READ tb2 get gap lock first,
|
|
1975
|
+
tb can not insert, it is dedlock!
|
|
1976
|
+
*/
|
|
1977
|
+
BOOST_CHECK_MESSAGE(STATUS_LOCK_ERROR == tb->stat(), "tb->insert stat= "
|
|
1978
|
+
<< tb->stat());
|
|
1979
|
+
}
|
|
1980
|
+
else
|
|
1981
|
+
{ /* When SRV_ISO_READ_COMMITED, tb2 get lock after insert.
|
|
1982
|
+
But no retry loop then lock id = 30000 !!!!!!!. Oh no!
|
|
1983
|
+
This is not READ_COMMITED !.
|
|
1984
|
+
*/
|
|
1985
|
+
BOOST_CHECK_MESSAGE(0 == tb2->stat(), "tb2->seekLessThan stat= "
|
|
1986
|
+
<< tb2->stat());
|
|
1987
|
+
int v2 = tb2->getFVint(fdi_id);
|
|
1988
|
+
BOOST_CHECK_MESSAGE(v2 == v-1 , "value v-1 = " << v-1 << " bad = "
|
|
1989
|
+
<< v2);
|
|
1990
|
+
|
|
1991
|
+
//cleanup
|
|
1992
|
+
tb->setFV(fdi_id, v);
|
|
1993
|
+
tb->seek();
|
|
1994
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->seek");
|
|
1995
|
+
tb->del();
|
|
1996
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "tb->del");
|
|
1997
|
+
}
|
|
1998
|
+
|
|
1940
1999
|
tb2->unlock();
|
|
1941
2000
|
}
|
|
1942
2001
|
|
|
@@ -1949,6 +2008,7 @@ void testMissingUpdate(database* db)
|
|
|
1949
2008
|
{
|
|
1950
2009
|
// Get lock(X) same record in parallel.
|
|
1951
2010
|
boost::scoped_ptr<boost::thread> t(new boost::thread(boost::bind(&worker::run, w.get())));
|
|
2011
|
+
Sleep(5);
|
|
1952
2012
|
int v = tb->getFVint(fdi_id);
|
|
1953
2013
|
tb->del();
|
|
1954
2014
|
t->join();
|
|
@@ -2046,17 +2106,47 @@ void testSetOwner(database* db)
|
|
|
2046
2106
|
{
|
|
2047
2107
|
table* tb = openTable(db);
|
|
2048
2108
|
tb->setOwnerName(_T("ABCDEFG"));
|
|
2049
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner");
|
|
2109
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner stat = " << tb->stat());
|
|
2050
2110
|
tb->clearOwnerName();
|
|
2051
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner");
|
|
2111
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "SetOwner stat = " << tb->stat());
|
|
2052
2112
|
tb->release();
|
|
2053
2113
|
}
|
|
2054
2114
|
|
|
2115
|
+
void testCreateIndex(database* db)
|
|
2116
|
+
{
|
|
2117
|
+
table* tb = openTable(db);
|
|
2118
|
+
dbdef* def = db->dbDef();
|
|
2119
|
+
if (def)
|
|
2120
|
+
{
|
|
2121
|
+
const tabledef* td = tb->tableDef();
|
|
2122
|
+
keydef* kd = def->insertKey(td->id, td->keyCount);
|
|
2123
|
+
kd->segments[0].fieldNum = fdi_name; //name
|
|
2124
|
+
kd->segments[0].flags.bit8 = 1; // extended key type
|
|
2125
|
+
kd->segments[0].flags.bit1 = 1; // changeable
|
|
2126
|
+
kd->segments[0].flags.bit0 = 1; // duplicatable
|
|
2127
|
+
kd->segmentCount = 1;
|
|
2128
|
+
// assign keynumber
|
|
2129
|
+
kd->keyNumber = 5;
|
|
2130
|
+
def->updateTableDef(1);
|
|
2131
|
+
BOOST_CHECK_MESSAGE(0 == def->stat(),
|
|
2132
|
+
"CreateIndex updateTableDef stat = " << def->stat());
|
|
2133
|
+
}
|
|
2134
|
+
tb->setKeyNum(tb->tableDef()->keyCount-1);
|
|
2135
|
+
tb->createIndex(true);
|
|
2136
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "CreateIndex");
|
|
2137
|
+
tb->release();
|
|
2138
|
+
|
|
2139
|
+
//test not mysql grant
|
|
2140
|
+
db->aclReload();
|
|
2141
|
+
BOOST_CHECK_MESSAGE(STATUS_DB_YET_OPEN == db->stat(),
|
|
2142
|
+
"bad grantReload db->stat() = " << db->stat());
|
|
2143
|
+
}
|
|
2144
|
+
|
|
2055
2145
|
void testDropIndex(database* db)
|
|
2056
2146
|
{
|
|
2057
2147
|
table* tb = openTable(db);
|
|
2058
2148
|
tb->dropIndex(false);
|
|
2059
|
-
BOOST_CHECK_MESSAGE(0 == tb->stat(), "DropIndex");
|
|
2149
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "DropIndex stat = " << tb->stat());
|
|
2060
2150
|
tb->release();
|
|
2061
2151
|
}
|
|
2062
2152
|
|
|
@@ -2077,7 +2167,7 @@ void testLogin(database* db)
|
|
|
2077
2167
|
"new connection connect db->stat() = " << db->stat());
|
|
2078
2168
|
database::destroy(db2);
|
|
2079
2169
|
|
|
2080
|
-
db->disconnect(
|
|
2170
|
+
db->disconnect();
|
|
2081
2171
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2082
2172
|
"disconnect db->stat() = " << db->stat());
|
|
2083
2173
|
}
|
|
@@ -2102,10 +2192,10 @@ void testLogin(database* db)
|
|
|
2102
2192
|
(db->stat() == ERROR_TD_HOSTNAME_NOT_FOUND);
|
|
2103
2193
|
BOOST_CHECK_MESSAGE(f, "bad host stat =" << db->stat());
|
|
2104
2194
|
|
|
2105
|
-
testCreateNewDataBase(db);
|
|
2106
|
-
db->
|
|
2195
|
+
testCreateNewDataBase(db); //with open
|
|
2196
|
+
db->close(); // disconnected
|
|
2107
2197
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2108
|
-
"databese
|
|
2198
|
+
"databese close db->stat() = " << db->stat());
|
|
2109
2199
|
|
|
2110
2200
|
// true database name
|
|
2111
2201
|
db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
|
|
@@ -2113,25 +2203,36 @@ void testLogin(database* db)
|
|
|
2113
2203
|
"databese connect db->stat() = " << db->stat());
|
|
2114
2204
|
if (db->stat() == 0)
|
|
2115
2205
|
{
|
|
2116
|
-
db->disconnect(
|
|
2206
|
+
db->disconnect();
|
|
2117
2207
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2118
2208
|
"databese disconnect db->stat() = " << db->stat());
|
|
2119
2209
|
}
|
|
2120
2210
|
// invalid database name
|
|
2121
2211
|
testDropDatabase(db);
|
|
2122
|
-
db->disconnect(
|
|
2212
|
+
db->disconnect();
|
|
2123
2213
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2124
2214
|
"databese disconnect db->stat() = " << db->stat());
|
|
2125
2215
|
|
|
2126
2216
|
db->connect(makeUri(PROTOCOL, HOSTNAME, DBNAME));
|
|
2127
|
-
BOOST_CHECK_MESSAGE(
|
|
2217
|
+
BOOST_CHECK_MESSAGE(ERROR_NO_DATABASE == db->stat(),
|
|
2128
2218
|
"databese connect db->stat() = " << db->stat());
|
|
2129
2219
|
|
|
2130
|
-
|
|
2131
|
-
|
|
2220
|
+
//connect is failed, no need disconnet.
|
|
2221
|
+
db->disconnect();
|
|
2222
|
+
BOOST_CHECK_MESSAGE(1 == db->stat(),
|
|
2132
2223
|
"databese disconnect db->stat() = " << db->stat());
|
|
2133
2224
|
}
|
|
2134
2225
|
|
|
2226
|
+
void testGrantReload(database* db)
|
|
2227
|
+
{
|
|
2228
|
+
db->open(makeUri(PROTOCOL, HOSTNAME, _T("mysql"), TRANSACTD_SCHEMANAME),
|
|
2229
|
+
TYPE_SCHEMA_BDF, TD_OPEN_NORMAL);
|
|
2230
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2231
|
+
"open mysql db->stat() = " << db->stat());
|
|
2232
|
+
db->aclReload();
|
|
2233
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2234
|
+
"grantReload db->stat() = " << db->stat());
|
|
2235
|
+
}
|
|
2135
2236
|
// ------------------------------------------------------------------------
|
|
2136
2237
|
|
|
2137
2238
|
// ------------------------------------------------------------------------
|
|
@@ -2219,7 +2320,7 @@ void doCreateVarTable(database* db, int id, const _TCHAR* name, char fieldType,
|
|
|
2219
2320
|
|
|
2220
2321
|
BOOST_CHECK_MESSAGE(0 == def->stat(), "updateTableDef 4");
|
|
2221
2322
|
table* tb = db->openTable(id);
|
|
2222
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
|
|
2323
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable stat = " << db->stat());
|
|
2223
2324
|
if (tb)
|
|
2224
2325
|
tb->release();
|
|
2225
2326
|
}
|
|
@@ -2245,15 +2346,17 @@ void testCreateDataBaseVar(database* db)
|
|
|
2245
2346
|
return;
|
|
2246
2347
|
|
|
2247
2348
|
if (db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME)))
|
|
2349
|
+
{
|
|
2248
2350
|
db->drop();
|
|
2249
|
-
|
|
2351
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "drop testvar db stat = " << db->stat());
|
|
2352
|
+
}
|
|
2250
2353
|
db->create(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME));
|
|
2251
2354
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
2252
|
-
"
|
|
2355
|
+
"create testvar db stat = " << db->stat());
|
|
2253
2356
|
if (0 == db->stat())
|
|
2254
2357
|
{
|
|
2255
2358
|
db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME), 0, 0);
|
|
2256
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "
|
|
2359
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open testvar db stat = " << db->stat());
|
|
2257
2360
|
|
|
2258
2361
|
if (0 == db->stat())
|
|
2259
2362
|
{
|
|
@@ -2555,6 +2658,7 @@ void doVarInsert(database* db, const _TCHAR* name, unsigned int codePage,
|
|
|
2555
2658
|
v = i + 10;
|
|
2556
2659
|
tb->setFV((short)2, v);
|
|
2557
2660
|
tb->insert();
|
|
2661
|
+
BOOST_CHECK_MESSAGE(0 == tb->stat(), "insert");
|
|
2558
2662
|
}
|
|
2559
2663
|
if (bulk)
|
|
2560
2664
|
tb->commitBulkInsert();
|
|
@@ -2572,7 +2676,7 @@ void testVarInsert(database* db)
|
|
|
2572
2676
|
const _TCHAR* str2 = _T("123");
|
|
2573
2677
|
|
|
2574
2678
|
db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME));
|
|
2575
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "open 1");
|
|
2679
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open 1 stat = " << db->stat());
|
|
2576
2680
|
if (0 == db->stat())
|
|
2577
2681
|
{
|
|
2578
2682
|
bool utf16leSupport = isUtf16leSupport(db);
|
|
@@ -2609,7 +2713,7 @@ void doVarRead(database* db, const _TCHAR* name, unsigned int codePage,
|
|
|
2609
2713
|
{
|
|
2610
2714
|
|
|
2611
2715
|
table* tb = db->openTable(name);
|
|
2612
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
|
|
2716
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable stat = " << db->stat());
|
|
2613
2717
|
tb->clearBuffer();
|
|
2614
2718
|
tb->setKeyNum(key);
|
|
2615
2719
|
|
|
@@ -2646,7 +2750,7 @@ void testVarRead(database* db)
|
|
|
2646
2750
|
const _TCHAR* str4 = _T("1232");
|
|
2647
2751
|
|
|
2648
2752
|
db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME));
|
|
2649
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "open
|
|
2753
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open stat = " << db->stat());
|
|
2650
2754
|
if (0 == db->stat())
|
|
2651
2755
|
{
|
|
2652
2756
|
bool utf16leSupport = isUtf16leSupport(db);
|
|
@@ -2683,7 +2787,7 @@ void doVarFilter(database* db, const _TCHAR* name, unsigned int codePage,
|
|
|
2683
2787
|
const _TCHAR* str, int num, char_td key)
|
|
2684
2788
|
{
|
|
2685
2789
|
table* tb = db->openTable(name);
|
|
2686
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable");
|
|
2790
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "openTable stat = " << db->stat());
|
|
2687
2791
|
tb->clearBuffer();
|
|
2688
2792
|
tb->setKeyNum(key);
|
|
2689
2793
|
|
|
@@ -2745,7 +2849,7 @@ void testFilterVar(database* db)
|
|
|
2745
2849
|
return;
|
|
2746
2850
|
|
|
2747
2851
|
db->open(makeUri(PROTOCOL, HOSTNAME, _T("testvar"), BDFNAME));
|
|
2748
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "open
|
|
2852
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open stat = " << db->stat());
|
|
2749
2853
|
if (0 == db->stat())
|
|
2750
2854
|
{
|
|
2751
2855
|
const _TCHAR* str = _T("漢字文");
|
|
@@ -3112,7 +3216,7 @@ void doTestStringFileter(database* db, int id, const _TCHAR* name,
|
|
|
3112
3216
|
void testDropDataBaseStr(database* db)
|
|
3113
3217
|
{
|
|
3114
3218
|
db->open(makeUri(PROTOCOL, HOSTNAME, _T("testString"), BDFNAME), 0, 0);
|
|
3115
|
-
BOOST_CHECK_MESSAGE(0 == db->stat(), "
|
|
3219
|
+
BOOST_CHECK_MESSAGE(0 == db->stat(), "open stat = " << db->stat());
|
|
3116
3220
|
db->drop();
|
|
3117
3221
|
BOOST_CHECK_MESSAGE(0 == db->stat(),
|
|
3118
3222
|
"DropDataBaseTestString stat=" << db->stat());
|
|
@@ -4280,7 +4384,7 @@ void testDbPool()
|
|
|
4280
4384
|
pooledDbManager poolMgr;
|
|
4281
4385
|
pooledDbManager::setMaxConnections(4);
|
|
4282
4386
|
|
|
4283
|
-
connectParams pm(PROTOCOL, HOSTNAME, _T("querytest"), DBNAME);
|
|
4387
|
+
connectParams pm(PROTOCOL, HOSTNAME, _T("querytest"), DBNAME, g_userName, g_password);
|
|
4284
4388
|
poolMgr.use(&pm);
|
|
4285
4389
|
BOOST_CHECK_MESSAGE(1 == poolMgr.usingCount(), "usingCount 1");
|
|
4286
4390
|
poolMgr.use(&pm);
|
|
@@ -4321,8 +4425,8 @@ BOOST_AUTO_TEST_SUITE(btrv_nativ)
|
|
|
4321
4425
|
|
|
4322
4426
|
BOOST_FIXTURE_TEST_CASE(createNewDataBase, fixture)
|
|
4323
4427
|
{
|
|
4324
|
-
|
|
4325
|
-
_tprintf(_T("URI = %s\n"), uri);
|
|
4428
|
+
connectParams cp(PROTOCOL, HOSTNAME, DBNAME, BDFNAME, g_userName);
|
|
4429
|
+
_tprintf(_T("URI = %s\n"), cp.uri());
|
|
4326
4430
|
if (db()->open(makeUri(PROTOCOL, HOSTNAME, DBNAME, BDFNAME)))
|
|
4327
4431
|
db()->drop();
|
|
4328
4432
|
testCreateNewDataBase(db());
|
|
@@ -4465,6 +4569,11 @@ BOOST_FIXTURE_TEST_CASE(setOwner, fixture)
|
|
|
4465
4569
|
testSetOwner(db());
|
|
4466
4570
|
}
|
|
4467
4571
|
|
|
4572
|
+
BOOST_FIXTURE_TEST_CASE(createIndex, fixture)
|
|
4573
|
+
{
|
|
4574
|
+
testCreateIndex(db());
|
|
4575
|
+
}
|
|
4576
|
+
|
|
4468
4577
|
BOOST_FIXTURE_TEST_CASE(dropIndex, fixture)
|
|
4469
4578
|
{
|
|
4470
4579
|
testDropIndex(db());
|
|
@@ -4475,6 +4584,12 @@ BOOST_FIXTURE_TEST_CASE(dropDatabase, fixture)
|
|
|
4475
4584
|
testDropDatabase(db());
|
|
4476
4585
|
}
|
|
4477
4586
|
|
|
4587
|
+
BOOST_FIXTURE_TEST_CASE(grantReload, fixture)
|
|
4588
|
+
{
|
|
4589
|
+
testGrantReload(db());
|
|
4590
|
+
}
|
|
4591
|
+
|
|
4592
|
+
|
|
4478
4593
|
BOOST_FIXTURE_TEST_CASE(connect, fixture)
|
|
4479
4594
|
{
|
|
4480
4595
|
testLogin(db());
|