[parser] parser: add agg_to_cop hint (#517)

This commit is contained in:
Zijie Zhang
2019-08-23 14:47:02 +08:00
committed by Ti Chi Robot
parent c7bb4e645c
commit aa86dbe09c
6 changed files with 7281 additions and 7248 deletions

View File

@ -2064,7 +2064,7 @@ func (n *TableOptimizerHint) Restore(ctx *RestoreCtx) error {
}
// Hints without args except query block.
switch n.HintName.L {
case "hash_agg", "stream_agg", "read_consistent_replica", "no_index_merge", "qb_name":
case "hash_agg", "stream_agg", "agg_to_cop", "read_consistent_replica", "no_index_merge", "qb_name":
ctx.WritePlain(")")
return nil
}

View File

@ -239,6 +239,8 @@ func (ts *testMiscSuite) TestTableOptimizerHintRestore(c *C) {
{"HASH_AGG(@sel1)", "HASH_AGG(@`sel1`)"},
{"STREAM_AGG()", "STREAM_AGG()"},
{"STREAM_AGG(@sel1)", "STREAM_AGG(@`sel1`)"},
{"AGG_TO_COP()", "AGG_TO_COP()"},
{"AGG_TO_COP(@sel_1)", "AGG_TO_COP(@`sel_1`)"},
{"NO_INDEX_MERGE()", "NO_INDEX_MERGE()"},
{"NO_INDEX_MERGE(@sel1)", "NO_INDEX_MERGE(@`sel1`)"},
{"READ_CONSISTENT_REPLICA()", "READ_CONSISTENT_REPLICA()"},

View File

@ -138,6 +138,7 @@ var tokenMap = map[string]int{
"ADDDATE": addDate,
"ADMIN": admin,
"AFTER": after,
"AGG_TO_COP": hintAggToCop,
"ALL": all,
"ALGORITHM": algorithm,
"ALTER": alter,

File diff suppressed because it is too large Load Diff

View File

@ -579,6 +579,7 @@ import (
statsBuckets "STATS_BUCKETS"
statsHealthy "STATS_HEALTHY"
tidb "TIDB"
hintAggToCop "AGG_TO_COP"
hintHJ "HASH_JOIN"
hintSMJ "SM_JOIN"
hintINLJ "INL_JOIN"
@ -4209,7 +4210,7 @@ UnReservedKeyword:
TiDBKeyword:
"ADMIN" | "BUCKETS" | "CANCEL" | "CMSKETCH" | "DDL" | "DEPTH" | "DRAINER" | "JOBS" | "JOB" | "NODE_ID" | "NODE_STATE" | "PUMP" | "SAMPLES" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB"
| "HASH_JOIN" | "SM_JOIN" | "INL_JOIN" | "HASH_AGG" | "STREAM_AGG" | "USE_INDEX_MERGE" | "NO_INDEX_MERGE" | "USE_TOJA" | "ENABLE_PLAN_CACHE" | "USE_PLAN_CACHE"
| "AGG_TO_COP" | "HASH_JOIN" | "SM_JOIN" | "INL_JOIN" | "HASH_AGG" | "STREAM_AGG" | "USE_INDEX_MERGE" | "NO_INDEX_MERGE" | "USE_TOJA" | "ENABLE_PLAN_CACHE" | "USE_PLAN_CACHE"
| "READ_CONSISTENT_REPLICA" | "QB_NAME" | "QUERY_TYPE" | "MEMORY_QUOTA" | "OLAP" | "OLTP" |"TOPN" | "SPLIT" | "OPTIMISTIC" | "PESSIMISTIC" | "WIDTH" | "REGIONS"
NotKeywordToken:
@ -6558,6 +6559,10 @@ TableOptimizerHintOpt:
{
$$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), QBName: $3.(model.CIStr)}
}
| hintAggToCop '(' QueryBlockOpt ')'
{
$$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), QBName: $3.(model.CIStr)}
}
| hintNoIndexMerge '(' QueryBlockOpt ')'
{
$$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), QBName: $3.(model.CIStr)}

View File

@ -2868,6 +2868,16 @@ func (s *testParserSuite) TestOptimizerHints(c *C) {
c.Assert(hints[0].HintName.L, Equals, "stream_agg")
c.Assert(hints[1].HintName.L, Equals, "stream_agg")
// Test AGG_TO_COP
stmt, _, err = parser.Parse("select /*+ AGG_TO_COP(), agg_to_cop() */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "")
c.Assert(err, IsNil)
selectStmt = stmt[0].(*ast.SelectStmt)
hints = selectStmt.TableHints
c.Assert(hints, HasLen, 2)
c.Assert(hints[0].HintName.L, Equals, "agg_to_cop")
c.Assert(hints[1].HintName.L, Equals, "agg_to_cop")
// Test NO_INDEX_MERGE
stmt, _, err = parser.Parse("select /*+ NO_INDEX_MERGE(), no_index_merge() */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "")
c.Assert(err, IsNil)