This repository was archived by the owner on Jan 28, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 109
/
Copy pathwalk_test.go
102 lines (84 loc) · 1.76 KB
/
walk_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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package expression
import (
"testing"
"github.com/src-d/go-mysql-server/sql"
"github.com/stretchr/testify/require"
)
func TestWalk(t *testing.T) {
lit1 := NewLiteral(1, sql.Int64)
lit2 := NewLiteral(2, sql.Int64)
col := NewUnresolvedColumn("foo")
fn := NewUnresolvedFunction(
"bar",
false,
lit1,
lit2,
)
and := NewAnd(col, fn)
e := NewNot(and)
var f visitor
var visited []sql.Expression
f = func(node sql.Expression) Visitor {
visited = append(visited, node)
return f
}
Walk(f, e)
require.Equal(t,
[]sql.Expression{e, and, col, nil, fn, lit1, nil, lit2, nil, nil, nil, nil},
visited,
)
visited = nil
f = func(node sql.Expression) Visitor {
visited = append(visited, node)
if _, ok := node.(*UnresolvedFunction); ok {
return nil
}
return f
}
Walk(f, e)
require.Equal(t,
[]sql.Expression{e, and, col, nil, fn, nil, nil},
visited,
)
}
type visitor func(sql.Expression) Visitor
func (f visitor) Visit(n sql.Expression) Visitor {
return f(n)
}
func TestInspect(t *testing.T) {
lit1 := NewLiteral(1, sql.Int64)
lit2 := NewLiteral(2, sql.Int64)
col := NewUnresolvedColumn("foo")
fn := NewUnresolvedFunction(
"bar",
false,
lit1,
lit2,
)
and := NewAnd(col, fn)
e := NewNot(and)
var f func(sql.Expression) bool
var visited []sql.Expression
f = func(node sql.Expression) bool {
visited = append(visited, node)
return true
}
Inspect(e, f)
require.Equal(t,
[]sql.Expression{e, and, col, nil, fn, lit1, nil, lit2, nil, nil, nil, nil},
visited,
)
visited = nil
f = func(node sql.Expression) bool {
visited = append(visited, node)
if _, ok := node.(*UnresolvedFunction); ok {
return false
}
return true
}
Inspect(e, f)
require.Equal(t,
[]sql.Expression{e, and, col, nil, fn, nil, nil},
visited,
)
}