transactd 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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());
|