From f81851f83cb201d4b25bdfd66983e571f075ccc3 Mon Sep 17 00:00:00 2001 From: HuaiyuXu <391585975@qq.com> Date: Sun, 30 Sep 2018 16:15:11 +0800 Subject: [PATCH] ast, plan: return error when the arg of VALUES() function is not a column (#7817) --- ast/expressions.go | 4 +++- planner/core/logical_plan_builder.go | 4 ++++ planner/core/logical_plan_test.go | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ast/expressions.go b/ast/expressions.go index 440a89e06fdd6..e359b121c7444 100644 --- a/ast/expressions.go +++ b/ast/expressions.go @@ -927,7 +927,9 @@ func (n *ValuesExpr) Accept(v Visitor) (Node, bool) { if !ok { return n, false } - n.Column = node.(*ColumnNameExpr) + // `node` may be *ast.ValueExpr, to avoid panic, we write `ok` but do not use + // it. + n.Column, ok = node.(*ColumnNameExpr) return v.Leave(n) } diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 35653f2db8a8f..9ebf16ede572e 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -1164,6 +1164,10 @@ func (g *gbyResolver) Leave(inNode ast.Node) (ast.Node, bool) { return inNode, false } return ret, true + case *ast.ValuesExpr: + if v.Column == nil { + g.err = ErrUnknownColumn.GenWithStackByArgs("", "VALUES() function") + } } return inNode, true } diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index 569f97e45f199..7ebf51cc02c48 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -1985,6 +1985,7 @@ func (s *testPlanSuite) TestNameResolver(c *C) { {"select a from t group by t11.c1", "[planner:1054]Unknown column 't11.c1' in 'group statement'"}, {"delete a from (select * from t ) as a, t", "[planner:1288]The target table a of the DELETE is not updatable"}, {"delete b from (select * from t ) as a, t", "[planner:1109]Unknown table 'b' in MULTI DELETE"}, + {"select '' as fakeCol from t group by values(fakeCol)", "[planner:1054]Unknown column '' in 'VALUES() function'"}, {"update t, (select * from t) as b set b.a = t.a", "[planner:1288]The target table b of the UPDATE is not updatable"}, }