diff --git a/Makefile b/Makefile index 6e0b0b0621373bb4a6e54365b7ef7aa8d04dae34..b90af7115fc1bd823013c51c87c15a72da40e28c 100644 --- a/Makefile +++ b/Makefile @@ -180,7 +180,7 @@ docker: .PHONY: connect connect: - mysql -h 127.0.0.1 -u root -p1tIsB1g3rt + mysql -h 127.0.0.1 -u root -p1tIsB1g3rt -c .PHONY: main_test main_test: install diff --git a/common/config.go b/common/config.go index 8f5a0d836abf040cd9d514a638fd2c17df49407f..f794857f292277767eb30a1571e9d7b1bf12c28c 100644 --- a/common/config.go +++ b/common/config.go @@ -145,13 +145,13 @@ var Config = &Configuration{ Schema: "information_schema", Charset: "utf8mb4", Disable: true, - Version: 999, + Version: 99999, }, TestDSN: &dsn{ Schema: "information_schema", Charset: "utf8mb4", Disable: true, - Version: 999, + Version: 99999, }, AllowOnlineAsTest: false, DropTestTemporary: true, diff --git a/common/meta.go b/common/meta.go index 8b295c47dcc0d485447c06ce8aec8f39a0d6756b..433704eff8c0059df662a48542a877a2165707e1 100644 --- a/common/meta.go +++ b/common/meta.go @@ -377,19 +377,19 @@ func timeStorageReq(dataType string, version int) int { case "date": return 3 case "time": - if version < 564 { + if version < 50604 { return 3 } // 3 bytes + fractional seconds storage return 3 + extr(typeLength[0]) case "datetime": - if version < 564 { + if version < 50604 { return 8 } // 5 bytes + fractional seconds storage return 5 + extr(typeLength[0]) case "timestamp": - if version < 564 { + if version < 50604 { return 4 } // 4 bytes + fractional seconds storage diff --git a/common/meta_test.go b/common/meta_test.go index e1114ed47934207100ff205a1c0e6ecdb067651c..c6e8080dad5125774b827e0b4e76318569a3fe6e 100644 --- a/common/meta_test.go +++ b/common/meta_test.go @@ -56,7 +56,7 @@ func TestGetDataTypeBase(t *testing.T) { } func TestGetDataBytes(t *testing.T) { - cols564 := map[*Column]int{ + cols50604 := map[*Column]int{ // numeric type {Name: "col000", DataType: "tinyint", Character: "utf8"}: 1, {Name: "col001", DataType: "SMALLINT", Character: "utf8"}: 2, @@ -91,13 +91,13 @@ func TestGetDataBytes(t *testing.T) { {Name: "col025", DataType: "varchar(191)", Character: "utf8mb4"}: 765, } - for col, bytes := range cols564 { - if got := col.GetDataBytes(564); got != bytes { - t.Errorf("Version 564, %s Not match, want %d, got %d", col.Name, bytes, got) + for col, bytes := range cols50604 { + if got := col.GetDataBytes(50604); got != bytes { + t.Errorf("Version 5.6.4, %s Not match, want %d, got %d", col.Name, bytes, got) } } - cols550 := map[*Column]int{ + cols50500 := map[*Column]int{ // numeric type {Name: "col000", DataType: "tinyint", Character: "utf8"}: 1, {Name: "col001", DataType: "SMALLINT", Character: "utf8"}: 2, @@ -132,9 +132,9 @@ func TestGetDataBytes(t *testing.T) { {Name: "col025", DataType: "varchar(191)", Character: "utf8mb4"}: 765, } - for col, bytes := range cols550 { - if got := col.GetDataBytes(550); got != bytes { - t.Errorf("Version: 550, %s Not match, want %d, got %d", col.Name, bytes, got) + for col, bytes := range cols50500 { + if got := col.GetDataBytes(50500); got != bytes { + t.Errorf("Version: 5.5.0, %s Not match, want %d, got %d", col.Name, bytes, got) } } } diff --git a/database/explain.go b/database/explain.go index faf963a498e5463a0dafe7d5be50b7ea55ef8d72..7b9571a525f741ab8b7a412fda1121cb49bcd545 100644 --- a/database/explain.go +++ b/database/explain.go @@ -473,7 +473,7 @@ func (db *Connector) supportExplainWrite() (bool, error) { // 5.6以上版本支持 EXPLAIN UPDATE/DELETE 等语句,但需要开启写入 // 如开启了 read_only, EXPLAIN UPDATE/DELETE 也会受限制 - if common.Config.TestDSN.Version >= 560 { + if common.Config.TestDSN.Version >= 50600 { readOnly, err := db.SingleIntValue("read_only") if err != nil { return false, err @@ -541,7 +541,7 @@ func (db *Connector) executeExplain(sql string, explainType int, formatType int) explainFormat := "" switch formatType { case JSONFormatExplain: - if common.Config.TestDSN.Version >= 560 { + if common.Config.TestDSN.Version >= 50600 { explainFormat = "FORMAT=JSON" } } @@ -550,7 +550,7 @@ func (db *Connector) executeExplain(sql string, explainType int, formatType int) switch explainType { case ExtendedExplainType: // 5.6以上extended关键字已经不推荐使用,8.0废弃了这个关键字 - if common.Config.TestDSN.Version >= 560 { + if common.Config.TestDSN.Version >= 50600 { res, err = db.Query("explain %s", sql) } else { res, err = db.Query("explain extended %s", sql) diff --git a/database/mysql.go b/database/mysql.go index 170d6f06558ada8334aa9fa77e013716f3b6171a..14783af0590b1d3fcae06ccd7434275b2e10b0fc 100644 --- a/database/mysql.go +++ b/database/mysql.go @@ -121,29 +121,23 @@ func (db *Connector) Query(sql string, params ...interface{}) (*QueryResult, err // Version 获取MySQL数据库版本 func (db *Connector) Version() (int, error) { + version := 99999 // 从数据库中获取版本信息 res, err := db.Query("select @@version") if err != nil { common.Log.Warn("(db *Connector) Version() Error: %v", err) - return -1, err + return version, err } - // 从MySQL版本中获取版本号 - var reg *regexp.Regexp - var v int - reg, err = regexp.Compile(`[^0-9]+`) - if err != nil { - // 如果获取不到version信息,则以最新版本为准 - v = 999 - return v, err - } - version := reg.ReplaceAllString(res.Rows[0].Str(0), "")[:3] - v, err = strconv.Atoi(version) - if err != nil { - // 如果获取不到version信息,则以最新版本为准 - v = 999 + // MariaDB https://mariadb.com/kb/en/library/comment-syntax/ + // MySQL https://dev.mysql.com/doc/refman/8.0/en/comments.html + versionStr := strings.Split(res.Rows[0].Str(0), "-")[0] + versionSeg := strings.Split(versionStr, ".") + if len(versionSeg) == 3 { + versionStr = fmt.Sprintf("%s%02s%02s", versionSeg[0], versionSeg[1], versionSeg[2]) + version, err = strconv.Atoi(versionStr) } - return v, err + return version, err } // Source execute sql from file diff --git a/database/trace.go b/database/trace.go index 0fe890a48d7ad7363aebb2fa27cc96b3661b4212..0ba611aba68fc5f62bc41aa2518f7011b763da27 100644 --- a/database/trace.go +++ b/database/trace.go @@ -45,7 +45,7 @@ type TraceRow struct { // Trace 执行SQL,并对其Trace func (db *Connector) Trace(sql string, params ...interface{}) (*QueryResult, error) { common.Log.Debug("Trace SQL: %s", sql) - if common.Config.TestDSN.Version < 560 { + if common.Config.TestDSN.Version < 50600 { return nil, errors.New("version < 5.6, not support trace") } diff --git a/vendor/vendor.json b/vendor/vendor.json index cf63c3fb1d286bb102838548a4303fe3aea2ef75..5389605c9fb779d54f6ecbd457359163bba18d0e 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1016,68 +1016,68 @@ { "checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=", "path": "vitess.io/vitess", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "path": "vitess.io/vitess/go/bytes2", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=", "path": "vitess.io/vitess/go/hack", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=", "path": "vitess.io/vitess/go/sqltypes", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=", "path": "vitess.io/vitess/go/vt/log", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=", "path": "vitess.io/vitess/go/vt/proto/query", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=", "path": "vitess.io/vitess/go/vt/proto/topodata", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=", "path": "vitess.io/vitess/go/vt/proto/vtgate", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=", "path": "vitess.io/vitess/go/vt/proto/vtrpc", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=", "path": "vitess.io/vitess/go/vt/sqlparser", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" }, { "checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=", "path": "vitess.io/vitess/go/vt/vterrors", - "revision": "870177ca857e3bba2941a999174cc97d2c40c864", - "revisionTime": "2018-11-13T00:32:13Z" + "revision": "3dc3648303ff7f553dc3c90fbc87e0709acf08f0", + "revisionTime": "2018-11-14T14:39:22Z" } ], "rootPath": "github.com/XiaoMi/soar"