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

daily update

  1. update vitess dependency
  2. explain database prefix check
上级 347ad1db
# 更新日志
# CHANGELOG
## 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
- Fix SplitStatement mulitstatement eof bug #66
......
......@@ -42,4 +42,4 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化
## 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
## 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() {
explainInfo, err := rEnv.Explain(q.Query,
database.ExplainType[common.Config.ExplainType],
database.ExplainFormatType[common.Config.ExplainFormat])
if err != nil {
if err != nil && strings.HasPrefix(vEnv.Database, "optimizer_") {
// 线上环境执行失败才到测试环境 EXPLAIN,比如在用户提供建表语句及查询语句的场景
common.Log.Warn("rEnv.Explain Warn: %v", err)
explainInfo, err = vEnv.Explain(q.Query,
......
......@@ -35,8 +35,8 @@ type VirtualEnv struct {
*database.Connector
// 保存DB测试环境映射关系,防止vEnv环境冲突。
DBRef map[string]string
hash2Db map[string]string
DBRef map[string]string // db -> optimizer_xxx
hash2Db map[string]string // optimizer_xxx -> db
// 保存Table创建关系,防止重复创建表
TableMap map[string]map[string]string
// 错误
......
......@@ -1016,68 +1016,68 @@
{
"checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=",
"path": "vitess.io/vitess",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=",
"path": "vitess.io/vitess/go/sqltypes",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=",
"path": "vitess.io/vitess/go/vt/log",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=",
"path": "vitess.io/vitess/go/vt/proto/query",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=",
"path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=",
"path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "3rucaIfitefjezWeglPndd50Mcw=",
"checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=",
"path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
},
{
"checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=",
"path": "vitess.io/vitess/go/vt/vterrors",
"revision": "54855ec7b36906b6d53aa5af0f0293a0a73ae928",
"revisionTime": "2018-11-05T03:16:12Z"
"revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9",
"revisionTime": "2018-11-09T17:11:46Z"
}
],
"rootPath": "github.com/XiaoMi/soar"
......
......@@ -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)
// 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 {
Name *ColName
From Expr
To Expr
Name *ColName
StrVal *SQLVal
From Expr
To Expr
}
// Format formats the node.
func (node *SubstrExpr) Format(buf *TrackedBuffer) {
var val interface{}
if node.Name != nil {
val = node.Name
} else {
val = node.StrVal
}
if node.To == nil {
buf.Myprintf("substr(%v, %v)", node.Name, node.From)
buf.Myprintf("substr(%v, %v)", val, node.From)
} 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 {
}
func (node *SubstrExpr) walkSubtree(visit Visit) error {
if node == nil {
if node == nil || node.Name == nil {
return nil
}
return Walk(
......
......@@ -2464,6 +2464,30 @@ function_call_keyword:
{
$$ = &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
{
$$ = &MatchExpr{Columns: $3, Expr: $7, Option: $8}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册