transactd 3.3.0 → 3.4.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_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
|
/*
|