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

fix #101

上级 35977667
......@@ -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
......
......@@ -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,
......
......@@ -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
......
......@@ -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)
}
}
}
......@@ -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)
......
......@@ -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
......
......@@ -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")
}
......
......@@ -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"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册