提交 284281a6 编写于 作者: martianzhang's avatar martianzhang

fix #101

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