github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/tidb/ast/flag_test.go (about) 1 package ast_test 2 3 import ( 4 "testing" 5 6 . "github.com/insionng/yougam/libraries/pingcap/check" 7 "github.com/insionng/yougam/libraries/pingcap/tidb/ast" 8 "github.com/insionng/yougam/libraries/pingcap/tidb/parser" 9 ) 10 11 func TestT(t *testing.T) { 12 TestingT(t) 13 } 14 15 var _ = Suite(&testFlagSuite{}) 16 17 type testFlagSuite struct { 18 } 19 20 func (ts *testFlagSuite) TestHasAggFlag(c *C) { 21 expr := &ast.BetweenExpr{} 22 cases := []struct { 23 flag uint64 24 hasAgg bool 25 }{ 26 {ast.FlagHasAggregateFunc, true}, 27 {ast.FlagHasAggregateFunc | ast.FlagHasVariable, true}, 28 {ast.FlagHasVariable, false}, 29 } 30 for _, ca := range cases { 31 expr.SetFlag(ca.flag) 32 c.Assert(ast.HasAggFlag(expr), Equals, ca.hasAgg) 33 } 34 } 35 36 func (ts *testFlagSuite) TestFlag(c *C) { 37 cases := []struct { 38 expr string 39 flag uint64 40 }{ 41 { 42 "1 between 0 and 2", 43 ast.FlagConstant, 44 }, 45 { 46 "case 1 when 1 then 1 else 0 end", 47 ast.FlagConstant, 48 }, 49 { 50 "case 1 when 1 then 1 else 0 end", 51 ast.FlagConstant, 52 }, 53 { 54 "1 = ANY (select 1) OR exists (select 1)", 55 ast.FlagHasSubquery, 56 }, 57 { 58 "1 in (1) or 1 is true or null is null or 'abc' like 'abc' or 'abc' rlike 'abc'", 59 ast.FlagConstant, 60 }, 61 { 62 "row (1, 1) = row (1, 1)", 63 ast.FlagConstant, 64 }, 65 { 66 "(1 + a) > ?", 67 ast.FlagHasReference | ast.FlagHasParamMarker, 68 }, 69 { 70 "trim('abc ')", 71 ast.FlagHasFunc, 72 }, 73 { 74 "now() + EXTRACT(YEAR FROM '2009-07-02') + CAST(1 AS UNSIGNED)", 75 ast.FlagHasFunc, 76 }, 77 { 78 "substring('abc', 1)", 79 ast.FlagHasFunc, 80 }, 81 { 82 "sum(a)", 83 ast.FlagHasAggregateFunc | ast.FlagHasReference, 84 }, 85 { 86 "(select 1) as a", 87 ast.FlagHasSubquery, 88 }, 89 { 90 "@auto_commit", 91 ast.FlagHasVariable, 92 }, 93 { 94 "default(a)", 95 ast.FlagHasDefault, 96 }, 97 } 98 for _, ca := range cases { 99 stmt, err := parser.ParseOneStmt("select "+ca.expr, "", "") 100 c.Assert(err, IsNil) 101 selectStmt := stmt.(*ast.SelectStmt) 102 ast.SetFlag(selectStmt) 103 expr := selectStmt.Fields.Fields[0].Expr 104 c.Assert(expr.GetFlag(), Equals, ca.flag, Commentf("For %s", ca.expr)) 105 } 106 }