forked from pingcap/tidb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdml_test.go
70 lines (61 loc) · 2.34 KB
/
dml_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast_test
import (
. "github.com/pingcap/check"
. "github.com/pingcap/tidb/ast"
)
var _ = Suite(&testDMLSuite{})
type testDMLSuite struct {
}
func (ts *testDMLSuite) TestDMLVisitorCover(c *C) {
ce := &checkExpr{}
tableRefsClause := &TableRefsClause{TableRefs: &Join{Left: &TableSource{Source: &TableName{}}, On: &OnCondition{Expr: ce}}}
stmts := []struct {
node Node
expectedEnterCnt int
expectedLeaveCnt int
}{
{&DeleteStmt{TableRefs: tableRefsClause, Tables: &DeleteTableList{}, Where: ce,
Order: &OrderByClause{}, Limit: &Limit{Count: ce, Offset: ce}}, 4, 4},
{&ShowStmt{Table: &TableName{}, Column: &ColumnName{}, Pattern: &PatternLikeExpr{Expr: ce, Pattern: ce}, Where: ce}, 3, 3},
{&LoadDataStmt{Table: &TableName{}, Columns: []*ColumnName{{}}, FieldsInfo: &FieldsClause{}, LinesInfo: &LinesClause{}}, 0, 0},
{&Assignment{Column: &ColumnName{}, Expr: ce}, 1, 1},
{&ByItem{Expr: ce}, 1, 1},
{&GroupByClause{Items: []*ByItem{{Expr: ce}, {Expr: ce}}}, 2, 2},
{&HavingClause{Expr: ce}, 1, 1},
{&Join{Left: &TableSource{Source: &TableName{}}}, 0, 0},
{&Limit{Count: ce, Offset: ce}, 2, 2},
{&OnCondition{Expr: ce}, 1, 1},
{&OrderByClause{Items: []*ByItem{{Expr: ce}, {Expr: ce}}}, 2, 2},
{&SelectField{Expr: ce, WildCard: &WildCardField{}}, 1, 1},
{&TableName{}, 0, 0},
{tableRefsClause, 1, 1},
{&TableSource{Source: &TableName{}}, 0, 0},
{&WildCardField{}, 0, 0},
// TODO: cover childrens
{&InsertStmt{Table: tableRefsClause}, 1, 1},
{&UnionStmt{}, 0, 0},
{&UpdateStmt{TableRefs: tableRefsClause}, 1, 1},
{&SelectStmt{}, 0, 0},
{&FieldList{}, 0, 0},
{&UnionSelectList{}, 0, 0},
}
for _, v := range stmts {
ce.reset()
v.node.Accept(checkVisitor{})
c.Check(ce.enterCnt, Equals, v.expectedEnterCnt)
c.Check(ce.leaveCnt, Equals, v.expectedLeaveCnt)
v.node.Accept(visitor1{})
}
}