提交 11f1bc33 编写于 作者: martianzhang's avatar martianzhang

daily update

  1. update vitess dependency
  2. explain database prefix check
上级 347ad1db
# 更新日志 # CHANGELOG
## 2018-11 ## 2018-11
- TODO: english translation - DOING: english translation
- add -cleanup-test-database command-line arg
- fix -config arg load file error
- fix #87 RuleImplicitConversion value type mistach check bug
- fix #38 always true where condition check
- abandon stdin terminal interactive mod, which may seems like hangup
## 2018-10 ## 2018-10
- Fix SplitStatement mulitstatement eof bug #66 - Fix SplitStatement mulitstatement eof bug #66
......
...@@ -42,4 +42,4 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化 ...@@ -42,4 +42,4 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化
## License ## License
[Apache License 2.0](http://github.com/XiaoMi/soar/blob/master/LICENSE). [Apache License 2.0](https://github.com/XiaoMi/soar/blob/master/LICENSE).
...@@ -37,4 +37,4 @@ SOAR (SQL Optimizer And Rewriter) is a tool, which can help SQL optimization and ...@@ -37,4 +37,4 @@ SOAR (SQL Optimizer And Rewriter) is a tool, which can help SQL optimization and
## License ## License
[Apache License 2.0](http://github.com/XiaoMi/soar/blob/master/LICENSE). [Apache License 2.0](https://github.com/XiaoMi/soar/blob/master/LICENSE).
...@@ -352,7 +352,7 @@ func main() { ...@@ -352,7 +352,7 @@ func main() {
explainInfo, err := rEnv.Explain(q.Query, explainInfo, err := rEnv.Explain(q.Query,
database.ExplainType[common.Config.ExplainType], database.ExplainType[common.Config.ExplainType],
database.ExplainFormatType[common.Config.ExplainFormat]) database.ExplainFormatType[common.Config.ExplainFormat])
if err != nil { if err != nil && strings.HasPrefix(vEnv.Database, "optimizer_") {
// 线上环境执行失败才到测试环境 EXPLAIN,比如在用户提供建表语句及查询语句的场景 // 线上环境执行失败才到测试环境 EXPLAIN,比如在用户提供建表语句及查询语句的场景
common.Log.Warn("rEnv.Explain Warn: %v", err) common.Log.Warn("rEnv.Explain Warn: %v", err)
explainInfo, err = vEnv.Explain(q.Query, explainInfo, err = vEnv.Explain(q.Query,
......
...@@ -35,8 +35,8 @@ type VirtualEnv struct { ...@@ -35,8 +35,8 @@ type VirtualEnv struct {
*database.Connector *database.Connector
// 保存DB测试环境映射关系,防止vEnv环境冲突。 // 保存DB测试环境映射关系,防止vEnv环境冲突。
DBRef map[string]string DBRef map[string]string // db -> optimizer_xxx
hash2Db map[string]string hash2Db map[string]string // optimizer_xxx -> db
// 保存Table创建关系,防止重复创建表 // 保存Table创建关系,防止重复创建表
TableMap map[string]map[string]string TableMap map[string]map[string]string
// 错误 // 错误
......
...@@ -1016,68 +1016,68 @@ ...@@ -1016,68 +1016,68 @@
{ {
"checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=", "checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=",
"path": "vitess.io/vitess", "path": "vitess.io/vitess",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2", "path": "vitess.io/vitess/go/bytes2",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=", "checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack", "path": "vitess.io/vitess/go/hack",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=", "checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=",
"path": "vitess.io/vitess/go/sqltypes", "path": "vitess.io/vitess/go/sqltypes",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=", "checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=",
"path": "vitess.io/vitess/go/vt/log", "path": "vitess.io/vitess/go/vt/log",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=", "checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=",
"path": "vitess.io/vitess/go/vt/proto/query", "path": "vitess.io/vitess/go/vt/proto/query",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=", "checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=",
"path": "vitess.io/vitess/go/vt/proto/topodata", "path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=", "checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=",
"path": "vitess.io/vitess/go/vt/proto/vtgate", "path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"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": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "3rucaIfitefjezWeglPndd50Mcw=", "checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=",
"path": "vitess.io/vitess/go/vt/sqlparser", "path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
}, },
{ {
"checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=", "checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=",
"path": "vitess.io/vitess/go/vt/vterrors", "path": "vitess.io/vitess/go/vt/vterrors",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928", "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-05T03:16:12Z" "revisionTime": "2018-11-09T17:11:46Z"
} }
], ],
"rootPath": "github.com/XiaoMi/soar" "rootPath": "github.com/XiaoMi/soar"
......
...@@ -2998,20 +2998,30 @@ func (node *ValuesFuncExpr) replace(from, to Expr) bool { ...@@ -2998,20 +2998,30 @@ func (node *ValuesFuncExpr) replace(from, to Expr) bool {
} }
// SubstrExpr represents a call to SubstrExpr(column, value_expression) or SubstrExpr(column, value_expression,value_expression) // SubstrExpr represents a call to SubstrExpr(column, value_expression) or SubstrExpr(column, value_expression,value_expression)
// also supported syntax SubstrExpr(column from value_expression for value_expression) // also supported syntax SubstrExpr(column from value_expression for value_expression).
// Additionally to column names, SubstrExpr is also supported for string values, e.g.:
// SubstrExpr('static string value', value_expression, value_expression)
// In this case StrVal will be set instead of Name.
type SubstrExpr struct { type SubstrExpr struct {
Name *ColName Name *ColName
From Expr StrVal *SQLVal
To Expr From Expr
To Expr
} }
// Format formats the node. // Format formats the node.
func (node *SubstrExpr) Format(buf *TrackedBuffer) { func (node *SubstrExpr) Format(buf *TrackedBuffer) {
var val interface{}
if node.Name != nil {
val = node.Name
} else {
val = node.StrVal
}
if node.To == nil { if node.To == nil {
buf.Myprintf("substr(%v, %v)", node.Name, node.From) buf.Myprintf("substr(%v, %v)", val, node.From)
} else { } else {
buf.Myprintf("substr(%v, %v, %v)", node.Name, node.From, node.To) buf.Myprintf("substr(%v, %v, %v)", val, node.From, node.To)
} }
} }
...@@ -3020,7 +3030,7 @@ func (node *SubstrExpr) replace(from, to Expr) bool { ...@@ -3020,7 +3030,7 @@ func (node *SubstrExpr) replace(from, to Expr) bool {
} }
func (node *SubstrExpr) walkSubtree(visit Visit) error { func (node *SubstrExpr) walkSubtree(visit Visit) error {
if node == nil { if node == nil || node.Name == nil {
return nil return nil
} }
return Walk( return Walk(
......
...@@ -2464,6 +2464,30 @@ function_call_keyword: ...@@ -2464,6 +2464,30 @@ function_call_keyword:
{ {
$$ = &SubstrExpr{Name: $3, From: $5, To: $7} $$ = &SubstrExpr{Name: $3, From: $5, To: $7}
} }
| SUBSTR openb STRING ',' value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: nil}
}
| SUBSTR openb STRING ',' value_expression ',' value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: $7}
}
| SUBSTR openb STRING FROM value_expression FOR value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: $7}
}
| SUBSTRING openb STRING ',' value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: nil}
}
| SUBSTRING openb STRING ',' value_expression ',' value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: $7}
}
| SUBSTRING openb STRING FROM value_expression FOR value_expression closeb
{
$$ = &SubstrExpr{StrVal: NewStrVal($3), From: $5, To: $7}
}
| MATCH openb select_expression_list closeb AGAINST openb value_expression match_option closeb | MATCH openb select_expression_list closeb AGAINST openb value_expression match_option closeb
{ {
$$ = &MatchExpr{Columns: $3, Expr: $7, Option: $8} $$ = &MatchExpr{Columns: $3, Expr: $7, Option: $8}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册