transactd 3.3.0 → 3.4.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_3_3.dll → tdclc_32_3_4.dll} +0 -0
- data/bin/common/tdclc_64_3_4.dll +0 -0
- data/build/swig/ruby/tdclrb_wrap.cpp +66 -11
- data/build/swig/tdcl.i +0 -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 +14 -5
- data/source/bzs/db/engine/mysql/database.h +2 -1
- data/source/bzs/db/engine/mysql/mysqlInternal.h +3 -0
- data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +103 -72
- data/source/bzs/db/engine/mysql/mysqlProtocol.h +0 -2
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +51 -4
- data/source/bzs/db/protocol/tdap/client/connMgr.h +2 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +30 -13
- data/source/bzs/db/protocol/tdap/client/database.h +2 -0
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +13 -3
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +13 -3
- data/source/bzs/db/protocol/tdap/client/field.cpp +2 -1
- data/source/bzs/db/protocol/tdap/client/field.h +4 -2
- data/source/bzs/db/protocol/tdap/client/filter.h +2 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +65 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +14 -2
- data/source/bzs/db/protocol/tdap/client/table.cpp +72 -21
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +10 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +175 -43
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +8 -4
- data/source/bzs/db/protocol/tdap/myDateTime.h +4 -4
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +2 -2
- data/source/bzs/db/protocol/tdap/tdapSchema.h +1 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +7 -5
- data/source/bzs/db/protocol/tdap/uri.h +1 -1
- data/source/bzs/db/transactd/connectionRecord.h +29 -14
- data/source/bzs/netsvc/client/tcpClient.cpp +4 -3
- data/source/bzs/netsvc/client/tcpClient.h +2 -2
- data/source/bzs/netsvc/server/serverPipe.cpp +2 -8
- data/source/bzs/test/tdclatl/test_v3.js +7 -4
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +7 -4
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +5 -4
- data/source/bzs/test/trdclengn/testField.h +7 -0
- data/source/global/tdclatl/ConnMgr.cpp +2 -1
- data/source/global/tdclatl/Database.cpp +10 -0
- data/source/global/tdclatl/Database.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +3 -1
- metadata +4 -4
- data/bin/common/tdclc_64_3_3.dll +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3578c2d4a1064ceb3608b8c3b734f876e31b55f
|
4
|
+
data.tar.gz: dfa2ea21477268383d17d6781c9ea77ca4e558c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae426f5b61c1e4753330196b29622a321ad4d76d2e76dfcf4b15e46886804dd0963e9214d1816909884021389849ef3dcb9e472b98cfe6fdfb7164642717eff9
|
7
|
+
data.tar.gz: cec557719b08f7ce2458b08401cdc1ca81282c4e98020e7edd72099d9a01cf33a2a148807c5069d4fbeab60e876c94df3c5b6da5563cb5a0bc97965ac8856ce5
|
Binary file
|
Binary file
|
@@ -12996,23 +12996,33 @@ fail:
|
|
12996
12996
|
|
12997
12997
|
SWIGINTERN VALUE
|
12998
12998
|
_wrap_connMgr_slaveStatusName(int argc, VALUE *argv, VALUE self) {
|
12999
|
-
|
13000
|
-
|
13001
|
-
int
|
12999
|
+
bzs::db::protocol::tdap::client::connMgr *arg1 = 0 ;
|
13000
|
+
void *argp1 = 0 ;
|
13001
|
+
int res1 = 0 ;
|
13002
|
+
uint_td arg2 ;
|
13003
|
+
unsigned int val2 ;
|
13004
|
+
int ecode2 = 0 ;
|
13002
13005
|
_TCHAR *result = 0 ;
|
13003
13006
|
VALUE vresult = Qnil;
|
13004
13007
|
|
13005
13008
|
if ((argc < 1) || (argc > 1)) {
|
13006
13009
|
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
|
13007
13010
|
}
|
13008
|
-
|
13009
|
-
|
13010
|
-
|
13011
|
+
|
13012
|
+
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_bzs__db__protocol__tdap__client__connMgr, 0 | 0 );
|
13013
|
+
if (!SWIG_IsOK(res1)) {
|
13014
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "bzs::db::protocol::tdap::client::connMgr const *","statusvarName", 1, self ));
|
13015
|
+
}
|
13016
|
+
arg1 = reinterpret_cast< bzs::db::protocol::tdap::client::connMgr * >(argp1);
|
13017
|
+
|
13018
|
+
ecode2 = SWIG_AsVal_unsigned_SS_int(argv[0], &val2);
|
13019
|
+
if (!SWIG_IsOK(ecode2)) {
|
13020
|
+
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "uint_td","bzs::db::protocol::tdap::client::connMgr::slaveStatusName", 2, argv[0] ));
|
13011
13021
|
}
|
13012
|
-
|
13022
|
+
arg2 = static_cast< uint_td >(val2);
|
13013
13023
|
{
|
13014
13024
|
try {
|
13015
|
-
result = (_TCHAR *)
|
13025
|
+
result = (_TCHAR *)arg1->slaveStatusName(arg2);
|
13016
13026
|
} catch (bzs::rtl::exception& e) {
|
13017
13027
|
static VALUE bzs_rtl_error = rb_define_class("BZS_RTL_Error", rb_eStandardError);
|
13018
13028
|
rb_raise(bzs_rtl_error, (* bzs::rtl::getMsg(e)).c_str());
|
@@ -20977,7 +20987,6 @@ SWIGINTERN VALUE _wrap_nsdatabase_beginSnapshot(int nargs, VALUE *args, VALUE se
|
|
20977
20987
|
short arg2;
|
20978
20988
|
short val2;
|
20979
20989
|
binlogPos* bpos = new binlogPos();
|
20980
|
-
memset(bpos, 0, sizeof(binlogPos));
|
20981
20990
|
int _v;
|
20982
20991
|
void *vptr = 0;
|
20983
20992
|
int res;
|
@@ -22765,6 +22774,51 @@ fail:
|
|
22765
22774
|
}
|
22766
22775
|
|
22767
22776
|
|
22777
|
+
SWIGINTERN VALUE
|
22778
|
+
_wrap_database_execSql(int argc, VALUE *argv, VALUE self)
|
22779
|
+
{
|
22780
|
+
bzs::db::protocol::tdap::client::database *arg1 = (bzs::db::protocol::tdap::client::database *) 0 ;
|
22781
|
+
char *arg2 = (char *) 0 ;
|
22782
|
+
void *argp1 = 0 ;
|
22783
|
+
int res1 = 0 ;
|
22784
|
+
int res2 ;
|
22785
|
+
char *buf2 = 0 ;
|
22786
|
+
int alloc2 = 0 ;
|
22787
|
+
bool result;
|
22788
|
+
VALUE vresult = Qnil;
|
22789
|
+
|
22790
|
+
if ((argc < 1) || (argc > 1)) {
|
22791
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
|
22792
|
+
}
|
22793
|
+
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_bzs__db__protocol__tdap__client__database, 0 | 0 );
|
22794
|
+
if (!SWIG_IsOK(res1)) {
|
22795
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "bzs::db::protocol::tdap::client::database *","execSql", 1, self ));
|
22796
|
+
}
|
22797
|
+
arg1 = reinterpret_cast< bzs::db::protocol::tdap::client::database * >(argp1);
|
22798
|
+
res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2);
|
22799
|
+
if (!SWIG_IsOK(res2)) {
|
22800
|
+
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","execSql", 2, argv[0] ));
|
22801
|
+
}
|
22802
|
+
arg2 = reinterpret_cast< char * >(buf2);
|
22803
|
+
{
|
22804
|
+
try {
|
22805
|
+
result = (bool)(arg1)->execSql((char const *)arg2);
|
22806
|
+
} catch (bzs::rtl::exception& e) {
|
22807
|
+
static VALUE bzs_rtl_error = rb_define_class("BZS_RTL_Error", rb_eStandardError);
|
22808
|
+
rb_raise(bzs_rtl_error, (* bzs::rtl::getMsg(e)).c_str());
|
22809
|
+
} catch (std::exception &e) {
|
22810
|
+
static VALUE cpp_std_error = rb_define_class("CPP_STD_Error", rb_eStandardError);
|
22811
|
+
rb_raise(cpp_std_error, e.what());
|
22812
|
+
}
|
22813
|
+
}
|
22814
|
+
vresult = SWIG_From_bool(static_cast< bool >(result));
|
22815
|
+
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
|
22816
|
+
return vresult;
|
22817
|
+
fail:
|
22818
|
+
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
|
22819
|
+
return Qnil;
|
22820
|
+
}
|
22821
|
+
|
22768
22822
|
SWIGINTERN VALUE
|
22769
22823
|
_wrap_database_getSqlStringForCreateTable(int argc, VALUE *argv, VALUE self) {
|
22770
22824
|
bzs::db::protocol::tdap::client::database *arg1 = (bzs::db::protocol::tdap::client::database *) 0 ;
|
@@ -36468,7 +36522,6 @@ SWIGINTERN VALUE _wrap_pooledDbManager_beginSnapshot(int nargs, VALUE *args, VAL
|
|
36468
36522
|
short arg2;
|
36469
36523
|
short val2;
|
36470
36524
|
binlogPos* bpos = new binlogPos();
|
36471
|
-
memset(bpos, 0, sizeof(binlogPos));
|
36472
36525
|
int _v;
|
36473
36526
|
void *vptr = 0;
|
36474
36527
|
int res;
|
@@ -37709,6 +37762,7 @@ SWIGEXPORT void Init_transactd(void) {
|
|
37709
37762
|
rb_define_const(mTransactd, "REPL_POSTYPE_NONE", SWIG_From_int(static_cast< int >(REPL_POSTYPE_NONE)));
|
37710
37763
|
rb_define_const(mTransactd, "REPL_POSTYPE_MARIA_GTID", SWIG_From_int(static_cast< int >(REPL_POSTYPE_MARIA_GTID)));
|
37711
37764
|
rb_define_const(mTransactd, "REPL_POSTYPE_POS", SWIG_From_int(static_cast< int >(REPL_POSTYPE_POS)));
|
37765
|
+
rb_define_const(mTransactd, "REPL_POSTYPE_GTID", SWIG_From_int(static_cast< int >(REPL_POSTYPE_GTID)));
|
37712
37766
|
rb_define_const(mTransactd, "ROW_LOCK_X", SWIG_From_int(static_cast< int >(ROW_LOCK_X)));
|
37713
37767
|
rb_define_const(mTransactd, "ROW_LOCK_S", SWIG_From_int(static_cast< int >(ROW_LOCK_S)));
|
37714
37768
|
rb_define_const(mTransactd, "SRV_ISO_READ_UNCOMMITED", SWIG_From_int(static_cast< int >(SRV_ISO_READ_UNCOMMITED)));
|
@@ -38170,10 +38224,10 @@ SWIGEXPORT void Init_transactd(void) {
|
|
38170
38224
|
rb_define_method(SwigClassConnMgr.klass, "postDisconnectAll", VALUEFUNC(_wrap_connMgr_postDisconnectAll), -1);
|
38171
38225
|
rb_define_method(SwigClassConnMgr.klass, "stat", VALUEFUNC(_wrap_connMgr_stat), -1);
|
38172
38226
|
rb_define_method(SwigClassConnMgr.klass, "db", VALUEFUNC(_wrap_connMgr_db), -1);
|
38227
|
+
rb_define_method(SwigClassConnMgr.klass, "slaveStatusName", VALUEFUNC(_wrap_connMgr_slaveStatusName), -1);
|
38173
38228
|
rb_define_singleton_method(SwigClassConnMgr.klass, "removeSystemDb", VALUEFUNC(_wrap_connMgr_removeSystemDb), -1);
|
38174
38229
|
rb_define_singleton_method(SwigClassConnMgr.klass, "sysvarName", VALUEFUNC(_wrap_connMgr_sysvarName), -1);
|
38175
38230
|
rb_define_singleton_method(SwigClassConnMgr.klass, "statusvarName", VALUEFUNC(_wrap_connMgr_statusvarName), -1);
|
38176
|
-
rb_define_singleton_method(SwigClassConnMgr.klass, "slaveStatusName", VALUEFUNC(_wrap_connMgr_slaveStatusName), -1);
|
38177
38231
|
rb_define_singleton_method(SwigClassConnMgr.klass, "create", VALUEFUNC(_wrap_connMgr_create), -1);
|
38178
38232
|
rb_define_method(SwigClassConnMgr.klass, "databases", VALUEFUNC(_wrap_connMgr_databases), -1);
|
38179
38233
|
rb_define_method(SwigClassConnMgr.klass, "tables", VALUEFUNC(_wrap_connMgr_tables), -1);
|
@@ -38418,6 +38472,7 @@ SWIGEXPORT void Init_transactd(void) {
|
|
38418
38472
|
rb_define_method(SwigClassDatabase.klass, "open", VALUEFUNC(_wrap_database_open), -1);
|
38419
38473
|
rb_define_method(SwigClassDatabase.klass, "clone", VALUEFUNC(_wrap_database_clone), -1);
|
38420
38474
|
rb_define_method(SwigClassDatabase.klass, "createTable", VALUEFUNC(_wrap_database_createTable), -1);
|
38475
|
+
rb_define_method(SwigClassDatabase.klass, "execSql", VALUEFUNC(_wrap_database_execSql), -1);
|
38421
38476
|
rb_define_method(SwigClassDatabase.klass, "getSqlStringForCreateTable", VALUEFUNC(_wrap_database_getSqlStringForCreateTable), -1);
|
38422
38477
|
rb_define_method(SwigClassDatabase.klass, "create", VALUEFUNC(_wrap_database_create), -1);
|
38423
38478
|
rb_define_method(SwigClassDatabase.klass, "drop", VALUEFUNC(_wrap_database_drop), -1);
|
data/build/swig/tdcl.i
CHANGED
@@ -693,7 +693,6 @@ using namespace bzs::db::protocol::tdap::client;
|
|
693
693
|
%extend bzs::db::protocol::tdap::client::nsdatabase {
|
694
694
|
binlogPos* beginSnapshot(short bias=CONSISTENT_READ) {
|
695
695
|
binlogPos* bpos = new binlogPos();
|
696
|
-
memset(bpos, 0, sizeof(binlogPos));
|
697
696
|
if (bias == CONSISTENT_READ_WITH_BINLOG_POS)
|
698
697
|
self->beginSnapshot(bias, bpos);
|
699
698
|
else
|
data/build/tdclc/tdclc.cbproj
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
<VerInfo_Locale>1041</VerInfo_Locale>
|
63
63
|
<BRCC_CompilerToUse>rc</BRCC_CompilerToUse>
|
64
64
|
<BRCC_IncludePath>$(BDSINCLUDE)\windows\sdk;$(BRCC_IncludePath)</BRCC_IncludePath>
|
65
|
-
<DllSuffix>
|
65
|
+
<DllSuffix>_3_4</DllSuffix>
|
66
66
|
<DynamicRTL>false</DynamicRTL>
|
67
67
|
<BPILibOutputDir>..\..\lib</BPILibOutputDir>
|
68
68
|
<BCC_PCHUsage>None</BCC_PCHUsage>
|
data/build/tdclc/tdclc.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 3,
|
33
|
-
PRODUCTVERSION 3,
|
32
|
+
FILEVERSION 3,4,0,203
|
33
|
+
PRODUCTVERSION 3,4,0,203
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd C client"
|
50
|
-
VALUE "FileVersion", "3.
|
50
|
+
VALUE "FileVersion", "3.4.0.203"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2016 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "3.
|
52
|
+
VALUE "ProductVersion", "3.4.0.203"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
data/build/tdclcpp/tdclcpp.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 3,
|
33
|
-
PRODUCTVERSION 3,
|
32
|
+
FILEVERSION 3,4,0,203
|
33
|
+
PRODUCTVERSION 3,4,0,203
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd C++ client"
|
50
|
-
VALUE "FileVersion", "3.
|
50
|
+
VALUE "FileVersion", "3.4.0.203"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2016 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "3.
|
52
|
+
VALUE "ProductVersion", "3.4.0.203"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
@@ -153,7 +153,7 @@
|
|
153
153
|
<BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
|
154
154
|
<BCC_ExtendedErrorInfo>true</BCC_ExtendedErrorInfo>
|
155
155
|
<TD_VER_MAJOR>3</TD_VER_MAJOR>
|
156
|
-
<TD_VER_MINOR>
|
156
|
+
<TD_VER_MINOR>4</TD_VER_MINOR>
|
157
157
|
<DllSuffix>$(TD_VER_MAJOR)_$(TD_VER_MINOR)</DllSuffix>
|
158
158
|
<TD_CPU>32</TD_CPU>
|
159
159
|
</PropertyGroup>
|
data/build/tdclrb/tdclrb.rc
CHANGED
@@ -29,8 +29,8 @@
|
|
29
29
|
//
|
30
30
|
|
31
31
|
VS_VERSION_INFO VERSIONINFO
|
32
|
-
FILEVERSION 3,
|
33
|
-
PRODUCTVERSION 3,
|
32
|
+
FILEVERSION 3,4,0,203
|
33
|
+
PRODUCTVERSION 3,4,0,203
|
34
34
|
FILEFLAGSMASK 0x3fL
|
35
35
|
#ifdef _DEBUG
|
36
36
|
FILEFLAGS 0x1L
|
@@ -47,9 +47,9 @@ BEGIN
|
|
47
47
|
BEGIN
|
48
48
|
VALUE "CompanyName", "BizStation Corp."
|
49
49
|
VALUE "FileDescription", "Transactd Ruby client"
|
50
|
-
VALUE "FileVersion", "3.
|
50
|
+
VALUE "FileVersion", "3.4.0.203"
|
51
51
|
VALUE "LegalCopyright", "Copyright(C) 2016 BizStation Corp"
|
52
|
-
VALUE "ProductVersion", "3.
|
52
|
+
VALUE "ProductVersion", "3.4.0.203"
|
53
53
|
VALUE "ProductName", "Transactd Client (GPL V2)"
|
54
54
|
END
|
55
55
|
END
|
@@ -32,6 +32,10 @@
|
|
32
32
|
|
33
33
|
extern unsigned int g_timestamp_always;
|
34
34
|
|
35
|
+
/* implemnts in mysqlProtocol.cpp */
|
36
|
+
extern short getBinlogPos(THD* thd, binlogPos* pos, THD* tmpThd, bzs::db::IblobBuffer* bb);
|
37
|
+
|
38
|
+
|
35
39
|
namespace bzs
|
36
40
|
{
|
37
41
|
namespace db
|
@@ -193,7 +197,7 @@ tableCacheCounter database::tableRef;
|
|
193
197
|
database::database(const char* name, short cid)
|
194
198
|
: m_dbname(name), m_thd(createThdForThread()),m_inAutoTransaction(NULL),
|
195
199
|
m_privilege(0xFFFF), m_inTransaction(0), m_inSnapshot(0), m_stat(0),
|
196
|
-
m_usingExclusive(false), m_trnType(0), m_cid(cid)
|
200
|
+
m_usingExclusive(false), m_trnType(0), m_cid(cid), m_inprocessSnapshot(false)
|
197
201
|
{
|
198
202
|
cp_security_ctx(m_thd)->skip_grants();
|
199
203
|
|
@@ -494,7 +498,7 @@ table* database::useTable(int index, enum_sql_command cmd, rowLockMode* lck)
|
|
494
498
|
if (tb == NULL)
|
495
499
|
THROW_BZS_ERROR_WITH_CODEMSG(STATUS_FILE_NOT_OPENED,
|
496
500
|
"Invalid table id.");
|
497
|
-
if (tb->m_blobBuffer && tb->blobFields())
|
501
|
+
if (tb->m_blobBuffer && tb->blobFields() && !m_inprocessSnapshot)
|
498
502
|
tb->m_blobBuffer->clear();
|
499
503
|
|
500
504
|
// Change to shared lock is user tranasction only.
|
@@ -710,7 +714,7 @@ void database::useAllTables()
|
|
710
714
|
}
|
711
715
|
}
|
712
716
|
|
713
|
-
bool database::beginSnapshot(enum_tx_isolation iso, binlogPos* bpos, THD* tmpThd)
|
717
|
+
bool database::beginSnapshot(enum_tx_isolation iso, binlogPos* bpos, THD* tmpThd, IblobBuffer* bb)
|
714
718
|
{
|
715
719
|
if (m_inTransaction)
|
716
720
|
THROW_BZS_ERROR_WITH_CODEMSG(STATUS_ALREADY_INTRANSACTION, "Transaction is already beginning.");
|
@@ -735,9 +739,14 @@ bool database::beginSnapshot(enum_tx_isolation iso, binlogPos* bpos, THD* tmpThd
|
|
735
739
|
m_stat = STATUS_LOCK_ERROR;
|
736
740
|
return false;
|
737
741
|
}
|
738
|
-
|
742
|
+
bb->clear();
|
743
|
+
|
744
|
+
m_stat = getBinlogPos(m_thd, bpos, tmpThd, bb);
|
745
|
+
|
739
746
|
if (m_stat) return false;
|
740
|
-
|
747
|
+
m_inprocessSnapshot = true;
|
748
|
+
useAllTables(); // execute scope in safe_commit_lock
|
749
|
+
m_inprocessSnapshot = false;
|
741
750
|
}else
|
742
751
|
useAllTables();
|
743
752
|
}
|
@@ -133,6 +133,7 @@ private:
|
|
133
133
|
int m_usingExclusive;
|
134
134
|
short m_trnType;
|
135
135
|
short m_cid;
|
136
|
+
bool m_inprocessSnapshot;
|
136
137
|
enum_tx_isolation m_iso;
|
137
138
|
std::vector<sec_db> m_securityCtxs;
|
138
139
|
Security_context* m_backup_sctx;
|
@@ -183,7 +184,7 @@ public:
|
|
183
184
|
return m_tables;
|
184
185
|
}
|
185
186
|
|
186
|
-
bool beginSnapshot(enum_tx_isolation iso, binlogPos* bpos, THD* tmpThd);
|
187
|
+
bool beginSnapshot(enum_tx_isolation iso, binlogPos* bpos, THD* tmpThd, IblobBuffer* bb);
|
187
188
|
bool endSnapshot();
|
188
189
|
table* openTable(const std::string& name, short mode,
|
189
190
|
const char* ownerName, std::string dbname);
|
@@ -476,6 +476,7 @@ inline int cp_store_create_info(THD *thd, TABLE_LIST *table_list, String *packet
|
|
476
476
|
return store_create_info(thd, table_list, packet, create_info_arg, with_db_name!=0);
|
477
477
|
}
|
478
478
|
|
479
|
+
#define cp_get_executed_gtids get_executed_gtids
|
479
480
|
|
480
481
|
#else //Not MySQL 5.7
|
481
482
|
|
@@ -614,6 +615,8 @@ inline int cp_store_create_info(THD *thd, TABLE_LIST *table_list, String *packet
|
|
614
615
|
return store_create_info(thd, table_list, packet, create_info_arg, with_db_name!=0);
|
615
616
|
}
|
616
617
|
|
618
|
+
#define cp_get_executed_gtids get_logged_gtids
|
619
|
+
|
617
620
|
#endif // Not MARIADB_10_1 || MARIADB_10_0
|
618
621
|
|
619
622
|
#endif // Not MySQL 5.7
|
@@ -29,6 +29,7 @@
|
|
29
29
|
|
30
30
|
#if defined(USE_BINLOG_VAR) && (!defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID > 50600)
|
31
31
|
# include "sql/binlog.h"
|
32
|
+
# include "rpl_gtid.h"
|
32
33
|
#endif
|
33
34
|
|
34
35
|
//----------------------------------------------------------------------
|
@@ -47,28 +48,28 @@
|
|
47
48
|
|
48
49
|
class dummyProtocol : public Protocol_mysql
|
49
50
|
{
|
50
|
-
|
51
|
+
THD* m_thd;
|
51
52
|
Protocol_mysql* m_backup;
|
52
53
|
|
53
54
|
public:
|
54
55
|
#if defined(MYSQL_5_7)
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
inline dummyProtocol(THD *thd_arg) : Protocol_mysql()
|
57
|
+
{
|
58
|
+
m_thd = thd_arg;
|
58
59
|
m_backup = m_thd->get_protocol();
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
m_thd->set_protocol(this);
|
61
|
+
}
|
62
|
+
inline virtual ~dummyProtocol()
|
62
63
|
{
|
63
64
|
m_thd->set_protocol(m_backup);
|
64
65
|
}
|
65
66
|
#else
|
66
|
-
|
67
|
-
|
68
|
-
|
67
|
+
inline dummyProtocol(THD *thd_arg) : Protocol_mysql(thd_arg)
|
68
|
+
{
|
69
|
+
m_thd = thd_arg;
|
69
70
|
m_backup = m_thd->protocol;
|
70
71
|
m_thd->protocol = this;
|
71
|
-
|
72
|
+
}
|
72
73
|
inline virtual ~dummyProtocol()
|
73
74
|
{
|
74
75
|
m_thd->protocol = m_backup;
|
@@ -92,7 +93,7 @@ public:
|
|
92
93
|
const CHARSET_INFO* /*tocs*/){return false;}
|
93
94
|
|
94
95
|
virtual bool send_out_parameters(List<Item_param> *sp_params){return false;}
|
95
|
-
|
96
|
+
virtual Protocol::enum_protocol_type type(void){ return CP_PROTOCOL; };
|
96
97
|
#ifdef MARIADB_BASE_VERSION //Mariadb 5.5 10.0 10.1
|
97
98
|
virtual bool store(MYSQL_TIME *time, int decimals){return false;}
|
98
99
|
virtual bool store_time(MYSQL_TIME *time, int decimals){ return false;}
|
@@ -100,30 +101,30 @@ public:
|
|
100
101
|
virtual bool store_time(MYSQL_TIME *time){return true;};
|
101
102
|
virtual bool store(MYSQL_TIME *time){return true;}
|
102
103
|
virtual bool store(const char *from, size_t length,
|
103
|
-
|
104
|
+
CHARSET_INFO *fromcs, CHARSET_INFO *tocs){return false;}
|
104
105
|
#elif defined(MYSQL_5_7)
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
106
|
+
bool store_decimal(const my_decimal *, uint, uint){ return true; }
|
107
|
+
bool store(Proto_field *){ return true; }
|
108
|
+
void start_row(){}
|
109
|
+
int read_packet(void){ return 0; }
|
110
|
+
int get_command(COM_DATA *, enum_server_command *){ return m_thd->lex->sql_command; }
|
111
|
+
enum_vio_type connection_type(void){ return VIO_TYPE_PLUGIN; }
|
112
|
+
ulong get_client_capabilities(void){ return 0; }
|
113
|
+
bool has_client_capability(unsigned long){ return false; }
|
114
|
+
bool connection_alive(void){ return false; }
|
115
|
+
bool end_row(void){ return false; }
|
116
|
+
void abort_row(void){}
|
117
|
+
void end_partial_result_set(void){}
|
118
|
+
int shutdown(bool){ return 0; }
|
119
|
+
SSL_handle get_ssl(void){ return NULL; }
|
120
|
+
uint get_rw_status(void){ return 0; }
|
121
|
+
bool get_compression(void){ return false; }
|
122
|
+
bool start_result_metadata(uint, uint, const CHARSET_INFO *){ return false; }
|
123
|
+
bool send_field_metadata(Send_field *, const CHARSET_INFO *){ return false; }
|
124
|
+
bool end_result_metadata(void){ return false; }
|
125
|
+
bool send_ok(uint, uint, ulonglong, ulonglong, const char *){ return false; }
|
126
|
+
bool send_eof(uint, uint){ return false; }
|
127
|
+
bool send_error(uint, const char *, const char *){ return false; }
|
127
128
|
#endif
|
128
129
|
};
|
129
130
|
|
@@ -134,10 +135,12 @@ public:
|
|
134
135
|
class masterStatus : public dummyProtocol
|
135
136
|
{
|
136
137
|
binlogPos* m_bpos;
|
137
|
-
|
138
|
+
bzs::db::IblobBuffer* m_bb;
|
139
|
+
int m_index;
|
140
|
+
|
138
141
|
public:
|
139
|
-
inline masterStatus(THD *thd_arg, binlogPos* bpos) :
|
140
|
-
dummyProtocol(thd_arg), m_bpos(bpos),
|
142
|
+
inline masterStatus(THD *thd_arg, binlogPos* bpos, bzs::db::IblobBuffer* bb) :
|
143
|
+
dummyProtocol(thd_arg), m_bpos(bpos), m_bb(bb), m_index(0) {}
|
141
144
|
bool store_longlong(longlong from, bool unsigned_flag)
|
142
145
|
{
|
143
146
|
m_bpos->pos = (ulonglong)from;
|
@@ -148,21 +151,26 @@ public:
|
|
148
151
|
#if (MYSQL_VERSION_ID < 50600 || defined(MARIADB_BASE_VERSION)) // mariadb 5.5
|
149
152
|
bool store(const char *from, size_t length, CHARSET_INFO *cs)
|
150
153
|
{
|
151
|
-
if (
|
152
|
-
|
153
|
-
|
154
|
-
m_writed = true;
|
155
|
-
}
|
154
|
+
if (m_index == 0)
|
155
|
+
strncpy(m_bpos->filename, from, BINLOGNAME_SIZE);
|
156
|
+
++m_index;
|
156
157
|
return false;
|
157
158
|
}
|
158
159
|
#else
|
159
160
|
bool store(const char *from, size_t length, const CHARSET_INFO *cs)
|
160
161
|
{
|
161
|
-
if (
|
162
|
+
if (m_index == 0)
|
163
|
+
strncpy(m_bpos->filename, from, BINLOGNAME_SIZE);
|
164
|
+
else if (m_index == 3)
|
162
165
|
{
|
163
|
-
|
164
|
-
|
166
|
+
if (length)
|
167
|
+
{
|
168
|
+
m_bpos->type = REPL_POSTYPE_GTID;
|
169
|
+
m_bb->addBlob((unsigned int)length + 1, 0, (const unsigned char *)from);
|
170
|
+
m_bb->setFieldCount(1);
|
171
|
+
}
|
165
172
|
}
|
173
|
+
++m_index;
|
166
174
|
return false;
|
167
175
|
}
|
168
176
|
#endif
|
@@ -182,11 +190,11 @@ bool safe_commit_lock::lock()
|
|
182
190
|
if (m_thd)
|
183
191
|
{
|
184
192
|
MDL_request mdl_request;
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
193
|
+
#if ((MYSQL_VERSION_NUM > 50700) && !defined(MARIADB_BASE_VERSION))
|
194
|
+
mdl_request.init_with_source(MDL_key::COMMIT, "", "", MDL_SHARED, MDL_EXPLICIT, __FILE__, __LINE__);
|
195
|
+
#else
|
196
|
+
mdl_request.init(MDL_key::COMMIT, "", "", MDL_SHARED, MDL_EXPLICIT);
|
197
|
+
#endif
|
190
198
|
if (m_thd->mdl_context.acquire_lock(&mdl_request,
|
191
199
|
m_thd->variables.lock_wait_timeout))
|
192
200
|
return false;
|
@@ -205,14 +213,14 @@ safe_commit_lock::~safe_commit_lock()
|
|
205
213
|
}
|
206
214
|
|
207
215
|
|
208
|
-
#ifdef NOTUSE_BINLOG_VAR
|
209
|
-
|
216
|
+
#ifdef NOTUSE_BINLOG_VAR //Only MySQL 5.6 Windows
|
217
|
+
inline short getBinlogPosInternal(THD* currentThd, binlogPos* bpos, THD* tmpThd, bzs::db::IblobBuffer* bb)
|
210
218
|
{
|
211
219
|
short result = 0;
|
212
220
|
{
|
213
221
|
attachThd(tmpThd);
|
214
222
|
copyGrant(tmpThd, currentThd, NULL);
|
215
|
-
masterStatus p(tmpThd, bpos);
|
223
|
+
masterStatus p(tmpThd, bpos, bb);
|
216
224
|
cp_query_command(tmpThd, "show master status");
|
217
225
|
if (tmpThd->is_error())
|
218
226
|
result = tmpThd->cp_get_sql_error();
|
@@ -223,8 +231,8 @@ safe_commit_lock::~safe_commit_lock()
|
|
223
231
|
}
|
224
232
|
#endif
|
225
233
|
|
226
|
-
#ifdef USE_BINLOG_GTID
|
227
|
-
|
234
|
+
#ifdef USE_BINLOG_GTID //MariaDB 10-
|
235
|
+
inline short getBinlogPosInternal(THD* currentThd, binlogPos* bpos, THD* /*tmpThd*/, bzs::db::IblobBuffer* /*bb*/)
|
228
236
|
{
|
229
237
|
if (mysql_bin_log.is_open())
|
230
238
|
{
|
@@ -234,9 +242,9 @@ safe_commit_lock::~safe_commit_lock()
|
|
234
242
|
{
|
235
243
|
sprintf_s(bpos->gtid, GTID_SIZE, "%u-%u-%llu", gtid.domain_id, gtid.server_id, gtid.seq_no);
|
236
244
|
size_t dir_len = dirname_length(mysql_bin_log.get_log_fname());
|
237
|
-
|
238
|
-
|
239
|
-
|
245
|
+
strncpy(bpos->filename, mysql_bin_log.get_log_fname() + dir_len, BINLOGNAME_SIZE);
|
246
|
+
bpos->pos = my_b_tell(mysql_bin_log.get_log_file());
|
247
|
+
bpos->filename[BINLOGNAME_SIZE-1] = 0x00;
|
240
248
|
}
|
241
249
|
}
|
242
250
|
return 0;
|
@@ -244,34 +252,57 @@ safe_commit_lock::~safe_commit_lock()
|
|
244
252
|
#endif
|
245
253
|
|
246
254
|
#ifdef USE_BINLOG_VAR
|
255
|
+
inline void readGtid(binlogPos* bpos, bzs::db::IblobBuffer* bb)
|
256
|
+
{
|
257
|
+
#if (MYSQL_VERSION_ID > 50600)
|
258
|
+
char p[1024] = { 0 };
|
259
|
+
char* buf = p;
|
260
|
+
global_sid_lock->wrlock();
|
261
|
+
const Gtid_set* gtid_set = gtid_state->cp_get_executed_gtids();
|
262
|
+
int size = gtid_set->get_string_length();
|
263
|
+
if (size)
|
264
|
+
{
|
265
|
+
++size;
|
266
|
+
if (size > 1024) buf = new char[size];
|
267
|
+
gtid_set->to_string(buf);
|
268
|
+
bpos->type = REPL_POSTYPE_GTID;
|
269
|
+
bb->addBlob((unsigned int)size, 0, (const unsigned char *)buf);
|
270
|
+
bb->setFieldCount(1);
|
271
|
+
if (p != buf) delete[] buf;
|
272
|
+
}
|
273
|
+
global_sid_lock->unlock();
|
274
|
+
#endif
|
275
|
+
}
|
276
|
+
|
247
277
|
// Linux MySQL can access to the mysql_bin_log variable
|
248
|
-
|
278
|
+
inline short getBinlogPosInternal(THD*, binlogPos* bpos, THD* /*tmpThd*/, bzs::db::IblobBuffer* bb)
|
249
279
|
{
|
250
280
|
if (mysql_bin_log.is_open())
|
251
281
|
{
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
282
|
+
size_t dir_len = dirname_length(mysql_bin_log.get_log_fname());
|
283
|
+
strncpy(bpos->filename, mysql_bin_log.get_log_fname() + dir_len, BINLOGNAME_SIZE);
|
284
|
+
bpos->pos = my_b_tell(mysql_bin_log.get_log_file());
|
285
|
+
bpos->filename[BINLOGNAME_SIZE-1] = 0x00;
|
256
286
|
bpos->type = REPL_POSTYPE_POS;
|
287
|
+
readGtid(bpos, bb);
|
257
288
|
}
|
258
289
|
return 0;
|
259
290
|
}
|
260
291
|
#endif //USE_BINLOG_VAR
|
261
292
|
|
262
|
-
short getBinlogPos(THD* thd, binlogPos* bpos, THD* tmpThd)
|
293
|
+
short getBinlogPos(THD* thd, binlogPos* bpos, THD* tmpThd, bzs::db::IblobBuffer* bb)
|
263
294
|
{
|
264
295
|
#ifndef NOTUSE_BINLOG_VAR
|
265
296
|
safe_mysql_mutex_lock lck(mysql_bin_log.get_log_lock());
|
266
297
|
#endif
|
267
|
-
return getBinlogPosInternal(thd, bpos, tmpThd);
|
298
|
+
return getBinlogPosInternal(thd, bpos, tmpThd, bb);
|
268
299
|
}
|
269
300
|
|
270
301
|
int execSql(THD* thd, const char* sql)
|
271
302
|
{
|
272
303
|
thd->variables.lock_wait_timeout = OPEN_TABLE_TIMEOUT_SEC;
|
273
304
|
thd->clear_error();
|
274
|
-
|
305
|
+
int result = cp_query_command(thd, (char*)sql);
|
275
306
|
if (thd->is_error())
|
276
307
|
result = thd->cp_get_sql_error();
|
277
308
|
cp_lex_clear(thd); // reset values for insert
|
@@ -349,8 +380,8 @@ public:
|
|
349
380
|
|
350
381
|
int getSlaveStatus(THD* thd, connection::records& recs, bzs::db::IblobBuffer* bb)
|
351
382
|
{
|
352
|
-
|
353
|
-
|
383
|
+
slaveStatus ss(thd, recs, bb);
|
384
|
+
return execSql(thd, "show slave status");
|
354
385
|
}
|
355
386
|
|
356
387
|
#pragma GCC diagnostic warning "-Woverloaded-virtual"
|
@@ -396,17 +427,17 @@ bool setGrant(THD* thd, const char* host, const char* user, const char* db)
|
|
396
427
|
bool copyGrant(THD* thd, THD* thdSrc, const char* db)
|
397
428
|
{
|
398
429
|
Security_context* sctx = cp_security_ctx(thdSrc);
|
399
|
-
|
430
|
+
if (sctx->cp_master_accsess() == (ulong)~NO_ACCESS)
|
400
431
|
{
|
401
432
|
cp_security_ctx(thd)->skip_grants();
|
402
433
|
return true;
|
403
434
|
}
|
404
|
-
|
435
|
+
return setGrant(thd, sctx->cp_priv_host(), sctx->cp_priv_user(), db);
|
405
436
|
}
|
406
437
|
|
407
438
|
void setDbName(THD* thd, const char* name)
|
408
439
|
{
|
409
|
-
|
440
|
+
cp_set_db(thd, name);
|
410
441
|
}
|
411
442
|
|
412
443
|
/*
|