@@ -12,165 +12,162 @@ import (
12
12
13
13
type TestPair struct {
14
14
Expected string
15
- Actual func (cond * Cond ) string
15
+ Actual string
16
+ }
17
+
18
+ func newTestPair (expected string , fn func (c * Cond ) string ) * TestPair {
19
+ cond := newCond ()
20
+ format := fn (cond )
21
+ sql , _ := cond .Args .CompileWithFlavor (format , PostgreSQL )
22
+ return & TestPair {
23
+ Expected : expected ,
24
+ Actual : sql ,
25
+ }
16
26
}
17
27
18
28
func TestCond (t * testing.T ) {
19
29
a := assert .New (t )
20
- cases := map [string ]func (cond * Cond ) string {
21
- "$a = $1" : func (cond * Cond ) string { return cond .Equal ("$a" , 123 ) },
22
- "$b = $1" : func (cond * Cond ) string { return cond .E ("$b" , 123 ) },
23
- "$c = $1" : func (cond * Cond ) string { return cond .EQ ("$c" , 123 ) },
24
- "$a <> $1" : func (cond * Cond ) string { return cond .NotEqual ("$a" , 123 ) },
25
- "$b <> $1" : func (cond * Cond ) string { return cond .NE ("$b" , 123 ) },
26
- "$c <> $1" : func (cond * Cond ) string { return cond .NEQ ("$c" , 123 ) },
27
- "$a > $1" : func (cond * Cond ) string { return cond .GreaterThan ("$a" , 123 ) },
28
- "$b > $1" : func (cond * Cond ) string { return cond .G ("$b" , 123 ) },
29
- "$c > $1" : func (cond * Cond ) string { return cond .GT ("$c" , 123 ) },
30
- "$a >= $1" : func (cond * Cond ) string { return cond .GreaterEqualThan ("$a" , 123 ) },
31
- "$b >= $1" : func (cond * Cond ) string { return cond .GE ("$b" , 123 ) },
32
- "$c >= $1" : func (cond * Cond ) string { return cond .GTE ("$c" , 123 ) },
33
- "$a < $1" : func (cond * Cond ) string { return cond .LessThan ("$a" , 123 ) },
34
- "$b < $1" : func (cond * Cond ) string { return cond .L ("$b" , 123 ) },
35
- "$c < $1" : func (cond * Cond ) string { return cond .LT ("$c" , 123 ) },
36
- "$a <= $1" : func (cond * Cond ) string { return cond .LessEqualThan ("$a" , 123 ) },
37
- "$b <= $1" : func (cond * Cond ) string { return cond .LE ("$b" , 123 ) },
38
- "$c <= $1" : func (cond * Cond ) string { return cond .LTE ("$c" , 123 ) },
39
- "$a IN ($1, $2, $3)" : func (cond * Cond ) string { return cond .In ("$a" , 1 , 2 , 3 ) },
40
- "$a NOT IN ($1, $2, $3)" : func (cond * Cond ) string { return cond .NotIn ("$a" , 1 , 2 , 3 ) },
41
- "$a LIKE $1" : func (cond * Cond ) string { return cond .Like ("$a" , "%Huan%" ) },
42
- "$a ILIKE $1" : func (cond * Cond ) string { return cond .ILike ("$a" , "%Huan%" ) },
43
- "$a NOT LIKE $1" : func (cond * Cond ) string { return cond .NotLike ("$a" , "%Huan%" ) },
44
- "$a NOT ILIKE $1" : func (cond * Cond ) string { return cond .NotILike ("$a" , "%Huan%" ) },
45
- "$a IS NULL" : func (cond * Cond ) string { return cond .IsNull ("$a" ) },
46
- "$a IS NOT NULL" : func (cond * Cond ) string { return cond .IsNotNull ("$a" ) },
47
- "$a BETWEEN $1 AND $2" : func (cond * Cond ) string { return cond .Between ("$a" , 123 , 456 ) },
48
- "$a NOT BETWEEN $1 AND $2" : func (cond * Cond ) string { return cond .NotBetween ("$a" , 123 , 456 ) },
49
- "NOT 1 = 1" : func (cond * Cond ) string { return cond .Not ("1 = 1" ) },
50
- "EXISTS ($1)" : func (cond * Cond ) string { return cond .Exists (1 ) },
51
- "NOT EXISTS ($1)" : func (cond * Cond ) string { return cond .NotExists (1 ) },
52
- "$a > ANY ($1, $2)" : func (cond * Cond ) string { return cond .Any ("$a" , ">" , 1 , 2 ) },
53
- "$a < ALL ($1)" : func (cond * Cond ) string { return cond .All ("$a" , "<" , 1 ) },
54
- "$a > SOME ($1, $2, $3)" : func (cond * Cond ) string { return cond .Some ("$a" , ">" , 1 , 2 , 3 ) },
55
- "$a IS DISTINCT FROM $1" : func (cond * Cond ) string { return cond .IsDistinctFrom ("$a" , 1 ) },
56
- "$a IS NOT DISTINCT FROM $1" : func (cond * Cond ) string { return cond .IsNotDistinctFrom ("$a" , 1 ) },
57
- "$1" : func (cond * Cond ) string { return cond .Var (123 ) },
58
- }
59
-
60
- for expected , f := range cases {
61
- actual := callCond (f )
62
- a .Equal (actual , expected )
30
+ cases := []* TestPair {
31
+ newTestPair ("$a = $1" , func (c * Cond ) string { return c .Equal ("$a" , 123 ) }),
32
+ newTestPair ("$b = $1" , func (c * Cond ) string { return c .E ("$b" , 123 ) }),
33
+ newTestPair ("$c = $1" , func (c * Cond ) string { return c .EQ ("$c" , 123 ) }),
34
+ newTestPair ("$a <> $1" , func (c * Cond ) string { return c .NotEqual ("$a" , 123 ) }),
35
+ newTestPair ("$b <> $1" , func (c * Cond ) string { return c .NE ("$b" , 123 ) }),
36
+ newTestPair ("$c <> $1" , func (c * Cond ) string { return c .NEQ ("$c" , 123 ) }),
37
+ newTestPair ("$a > $1" , func (c * Cond ) string { return c .GreaterThan ("$a" , 123 ) }),
38
+ newTestPair ("$b > $1" , func (c * Cond ) string { return c .G ("$b" , 123 ) }),
39
+ newTestPair ("$c > $1" , func (c * Cond ) string { return c .GT ("$c" , 123 ) }),
40
+ newTestPair ("$a >= $1" , func (c * Cond ) string { return c .GreaterEqualThan ("$a" , 123 ) }),
41
+ newTestPair ("$b >= $1" , func (c * Cond ) string { return c .GE ("$b" , 123 ) }),
42
+ newTestPair ("$c >= $1" , func (c * Cond ) string { return c .GTE ("$c" , 123 ) }),
43
+ newTestPair ("$a < $1" , func (c * Cond ) string { return c .LessThan ("$a" , 123 ) }),
44
+ newTestPair ("$b < $1" , func (c * Cond ) string { return c .L ("$b" , 123 ) }),
45
+ newTestPair ("$c < $1" , func (c * Cond ) string { return c .LT ("$c" , 123 ) }),
46
+ newTestPair ("$a <= $1" , func (c * Cond ) string { return c .LessEqualThan ("$a" , 123 ) }),
47
+ newTestPair ("$b <= $1" , func (c * Cond ) string { return c .LE ("$b" , 123 ) }),
48
+ newTestPair ("$c <= $1" , func (c * Cond ) string { return c .LTE ("$c" , 123 ) }),
49
+ newTestPair ("$a IN ($1, $2, $3)" , func (c * Cond ) string { return c .In ("$a" , 1 , 2 , 3 ) }),
50
+ newTestPair ("0 = 1" , func (c * Cond ) string { return c .In ("$a" ) }),
51
+ newTestPair ("$a NOT IN ($1, $2, $3)" , func (c * Cond ) string { return c .NotIn ("$a" , 1 , 2 , 3 ) }),
52
+ newTestPair ("$a LIKE $1" , func (c * Cond ) string { return c .Like ("$a" , "%Huan%" ) }),
53
+ newTestPair ("$a ILIKE $1" , func (c * Cond ) string { return c .ILike ("$a" , "%Huan%" ) }),
54
+ newTestPair ("$a NOT LIKE $1" , func (c * Cond ) string { return c .NotLike ("$a" , "%Huan%" ) }),
55
+ newTestPair ("$a NOT ILIKE $1" , func (c * Cond ) string { return c .NotILike ("$a" , "%Huan%" ) }),
56
+ newTestPair ("$a IS NULL" , func (c * Cond ) string { return c .IsNull ("$a" ) }),
57
+ newTestPair ("$a IS NOT NULL" , func (c * Cond ) string { return c .IsNotNull ("$a" ) }),
58
+ newTestPair ("$a BETWEEN $1 AND $2" , func (c * Cond ) string { return c .Between ("$a" , 123 , 456 ) }),
59
+ newTestPair ("$a NOT BETWEEN $1 AND $2" , func (c * Cond ) string { return c .NotBetween ("$a" , 123 , 456 ) }),
60
+ newTestPair ("NOT 1 = 1" , func (c * Cond ) string { return c .Not ("1 = 1" ) }),
61
+ newTestPair ("EXISTS ($1)" , func (c * Cond ) string { return c .Exists (1 ) }),
62
+ newTestPair ("NOT EXISTS ($1)" , func (c * Cond ) string { return c .NotExists (1 ) }),
63
+ newTestPair ("$a > ANY ($1, $2)" , func (c * Cond ) string { return c .Any ("$a" , ">" , 1 , 2 ) }),
64
+ newTestPair ("0 = 1" , func (c * Cond ) string { return c .Any ("$a" , ">" ) }),
65
+ newTestPair ("$a < ALL ($1)" , func (c * Cond ) string { return c .All ("$a" , "<" , 1 ) }),
66
+ newTestPair ("0 = 1" , func (c * Cond ) string { return c .All ("$a" , "<" ) }),
67
+ newTestPair ("$a > SOME ($1, $2, $3)" , func (c * Cond ) string { return c .Some ("$a" , ">" , 1 , 2 , 3 ) }),
68
+ newTestPair ("0 = 1" , func (c * Cond ) string { return c .Some ("$a" , ">" ) }),
69
+ newTestPair ("$a IS DISTINCT FROM $1" , func (c * Cond ) string { return c .IsDistinctFrom ("$a" , 1 ) }),
70
+ newTestPair ("$a IS NOT DISTINCT FROM $1" , func (c * Cond ) string { return c .IsNotDistinctFrom ("$a" , 1 ) }),
71
+ newTestPair ("$1" , func (c * Cond ) string { return c .Var (123 ) }),
72
+ }
73
+
74
+ for _ , f := range cases {
75
+ a .Equal (f .Actual , f .Expected )
63
76
}
64
77
}
65
78
66
79
func TestOrCond (t * testing.T ) {
67
80
a := assert .New (t )
68
- cases := []TestPair {
69
- { Expected : "(1 = 1 OR 2 = 2 OR 3 = 3)" , Actual : func (cond * Cond ) string { return cond .Or ("1 = 1" , "2 = 2" , "3 = 3" ) }} ,
81
+ cases := []* TestPair {
82
+ newTestPair ( "(1 = 1 OR 2 = 2 OR 3 = 3)" , func (c * Cond ) string { return c .Or ("1 = 1" , "2 = 2" , "3 = 3" ) }) ,
70
83
71
- { Expected : "(1 = 1 OR 2 = 2)" , Actual : func (cond * Cond ) string { return cond .Or ("" , "1 = 1" , "2 = 2" ) }} ,
72
- { Expected : "(1 = 1 OR 2 = 2)" , Actual : func (cond * Cond ) string { return cond .Or ("1 = 1" , "2 = 2" , "" ) }} ,
73
- { Expected : "(1 = 1 OR 2 = 2)" , Actual : func (cond * Cond ) string { return cond .Or ("1 = 1" , "" , "2 = 2" ) }} ,
84
+ newTestPair ( "(1 = 1 OR 2 = 2)" , func (c * Cond ) string { return c .Or ("" , "1 = 1" , "2 = 2" ) }) ,
85
+ newTestPair ( "(1 = 1 OR 2 = 2)" , func (c * Cond ) string { return c .Or ("1 = 1" , "2 = 2" , "" ) }) ,
86
+ newTestPair ( "(1 = 1 OR 2 = 2)" , func (c * Cond ) string { return c .Or ("1 = 1" , "" , "2 = 2" ) }) ,
74
87
75
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .Or ("1 = 1" , "" , "" ) }} ,
76
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .Or ("" , "1 = 1" , "" ) }} ,
77
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .Or ("" , "" , "1 = 1" ) }} ,
78
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .Or ("1 = 1" ) }} ,
88
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .Or ("1 = 1" , "" , "" ) }) ,
89
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .Or ("" , "1 = 1" , "" ) }) ,
90
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .Or ("" , "" , "1 = 1" ) }) ,
91
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .Or ("1 = 1" ) }) ,
79
92
80
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .Or ("" ) } },
81
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .Or () } },
82
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .Or ("" , "" , "" ) } },
93
+ {Expected : "" , Actual : newCond () .Or ("" )},
94
+ {Expected : "" , Actual : newCond () .Or ()},
95
+ {Expected : "" , Actual : newCond () .Or ("" , "" , "" )},
83
96
}
84
97
85
98
for _ , f := range cases {
86
- actual := callCond (f .Actual )
87
- a .Equal (actual , f .Expected )
99
+ a .Equal (f .Actual , f .Expected )
88
100
}
89
101
}
90
102
91
103
func TestAndCond (t * testing.T ) {
92
104
a := assert .New (t )
93
- cases := []TestPair {
94
- { Expected : "(1 = 1 AND 2 = 2 AND 3 = 3)" , Actual : func (cond * Cond ) string { return cond .And ("1 = 1" , "2 = 2" , "3 = 3" ) }} ,
105
+ cases := []* TestPair {
106
+ newTestPair ( "(1 = 1 AND 2 = 2 AND 3 = 3)" , func (c * Cond ) string { return c .And ("1 = 1" , "2 = 2" , "3 = 3" ) }) ,
95
107
96
- { Expected : "(1 = 1 AND 2 = 2)" , Actual : func (cond * Cond ) string { return cond .And ("" , "1 = 1" , "2 = 2" ) }} ,
97
- { Expected : "(1 = 1 AND 2 = 2)" , Actual : func (cond * Cond ) string { return cond .And ("1 = 1" , "2 = 2" , "" ) }} ,
98
- { Expected : "(1 = 1 AND 2 = 2)" , Actual : func (cond * Cond ) string { return cond .And ("1 = 1" , "" , "2 = 2" ) }} ,
108
+ newTestPair ( "(1 = 1 AND 2 = 2)" , func (c * Cond ) string { return c .And ("" , "1 = 1" , "2 = 2" ) }) ,
109
+ newTestPair ( "(1 = 1 AND 2 = 2)" , func (c * Cond ) string { return c .And ("1 = 1" , "2 = 2" , "" ) }) ,
110
+ newTestPair ( "(1 = 1 AND 2 = 2)" , func (c * Cond ) string { return c .And ("1 = 1" , "" , "2 = 2" ) }) ,
99
111
100
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .And ("1 = 1" , "" , "" ) }} ,
101
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .And ("" , "1 = 1" , "" ) }} ,
102
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .And ("" , "" , "1 = 1" ) }} ,
103
- { Expected : "(1 = 1)" , Actual : func (cond * Cond ) string { return cond .And ("1 = 1" ) }} ,
112
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .And ("1 = 1" , "" , "" ) }) ,
113
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .And ("" , "1 = 1" , "" ) }) ,
114
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .And ("" , "" , "1 = 1" ) }) ,
115
+ newTestPair ( "(1 = 1)" , func (c * Cond ) string { return c .And ("1 = 1" ) }) ,
104
116
105
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .And ("" ) } },
106
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .And () } },
107
- {Expected : "" , Actual : func ( cond * Cond ) string { return cond .And ("" , "" , "" ) } },
117
+ {Expected : "" , Actual : newCond () .And ("" )},
118
+ {Expected : "" , Actual : newCond () .And ()},
119
+ {Expected : "" , Actual : newCond () .And ("" , "" , "" )},
108
120
}
109
121
110
122
for _ , f := range cases {
111
- actual := callCond (f .Actual )
112
- a .Equal (actual , f .Expected )
123
+ a .Equal (f .Actual , f .Expected )
113
124
}
114
125
}
115
126
116
127
func TestEmptyCond (t * testing.T ) {
117
128
a := assert .New (t )
118
- cases := []func (cond * Cond ) string {
119
- func (cond * Cond ) string { return cond .Equal ("" , 123 ) },
120
- func (cond * Cond ) string { return cond .NotEqual ("" , 123 ) },
121
- func (cond * Cond ) string { return cond .GreaterThan ("" , 123 ) },
122
- func (cond * Cond ) string { return cond .GreaterEqualThan ("" , 123 ) },
123
- func (cond * Cond ) string { return cond .LessThan ("" , 123 ) },
124
- func (cond * Cond ) string { return cond .LessEqualThan ("" , 123 ) },
125
- func (cond * Cond ) string { return cond .In ("" , 1 , 2 , 3 ) },
126
- func (cond * Cond ) string { return cond .In ("a" ) },
127
- func (cond * Cond ) string { return cond .NotIn ("" , 1 , 2 , 3 ) },
128
- func (cond * Cond ) string { return cond .NotIn ("a" ) },
129
- func (cond * Cond ) string { return cond .Like ("" , "%Huan%" ) },
130
- func (cond * Cond ) string { return cond .ILike ("" , "%Huan%" ) },
131
- func (cond * Cond ) string { return cond .NotLike ("" , "%Huan%" ) },
132
- func (cond * Cond ) string { return cond .NotILike ("" , "%Huan%" ) },
133
- func (cond * Cond ) string { return cond .IsNull ("" ) },
134
- func (cond * Cond ) string { return cond .IsNotNull ("" ) },
135
- func (cond * Cond ) string { return cond .Between ("" , 123 , 456 ) },
136
- func (cond * Cond ) string { return cond .NotBetween ("" , 123 , 456 ) },
137
- func (cond * Cond ) string { return cond .Not ("" ) },
138
-
139
- func (cond * Cond ) string { return cond .Any ("" , "" , 1 , 2 ) },
140
- func (cond * Cond ) string { return cond .Any ("" , ">" , 1 , 2 ) },
141
- func (cond * Cond ) string { return cond .Any ("$a" , "" , 1 , 2 ) },
142
- func (cond * Cond ) string { return cond .Any ("$a" , ">" ) },
143
-
144
- func (cond * Cond ) string { return cond .All ("" , "" , 1 ) },
145
- func (cond * Cond ) string { return cond .All ("" , ">" , 1 ) },
146
- func (cond * Cond ) string { return cond .All ("$a" , "" , 1 ) },
147
- func (cond * Cond ) string { return cond .All ("$a" , ">" ) },
148
-
149
- func (cond * Cond ) string { return cond .Some ("" , "" , 1 , 2 , 3 ) },
150
- func (cond * Cond ) string { return cond .Some ("" , ">" , 1 , 2 , 3 ) },
151
- func (cond * Cond ) string { return cond .Some ("$a" , "" , 1 , 2 , 3 ) },
152
- func (cond * Cond ) string { return cond .Some ("$a" , ">" ) },
153
-
154
- func (cond * Cond ) string { return cond .IsDistinctFrom ("" , 1 ) },
155
- func (cond * Cond ) string { return cond .IsNotDistinctFrom ("" , 1 ) },
129
+ cases := []string {
130
+ newCond ().Equal ("" , 123 ),
131
+ newCond ().NotEqual ("" , 123 ),
132
+ newCond ().GreaterThan ("" , 123 ),
133
+ newCond ().GreaterEqualThan ("" , 123 ),
134
+ newCond ().LessThan ("" , 123 ),
135
+ newCond ().LessEqualThan ("" , 123 ),
136
+ newCond ().In ("" , 1 , 2 , 3 ),
137
+ newCond ().NotIn ("" , 1 , 2 , 3 ),
138
+ newCond ().NotIn ("a" ),
139
+ newCond ().Like ("" , "%Huan%" ),
140
+ newCond ().ILike ("" , "%Huan%" ),
141
+ newCond ().NotLike ("" , "%Huan%" ),
142
+ newCond ().NotILike ("" , "%Huan%" ),
143
+ newCond ().IsNull ("" ),
144
+ newCond ().IsNotNull ("" ),
145
+ newCond ().Between ("" , 123 , 456 ),
146
+ newCond ().NotBetween ("" , 123 , 456 ),
147
+ newCond ().Not ("" ),
148
+
149
+ newCond ().Any ("" , "" , 1 , 2 ),
150
+ newCond ().Any ("" , ">" , 1 , 2 ),
151
+ newCond ().Any ("$a" , "" , 1 , 2 ),
152
+
153
+ newCond ().All ("" , "" , 1 ),
154
+ newCond ().All ("" , ">" , 1 ),
155
+ newCond ().All ("$a" , "" , 1 ),
156
+
157
+ newCond ().Some ("" , "" , 1 , 2 , 3 ),
158
+ newCond ().Some ("" , ">" , 1 , 2 , 3 ),
159
+ newCond ().Some ("$a" , "" , 1 , 2 , 3 ),
160
+
161
+ newCond ().IsDistinctFrom ("" , 1 ),
162
+ newCond ().IsNotDistinctFrom ("" , 1 ),
156
163
}
157
164
158
165
expected := ""
159
- for _ , f := range cases {
160
- actual := callCond (f )
166
+ for _ , actual := range cases {
161
167
a .Equal (actual , expected )
162
168
}
163
169
}
164
170
165
- func callCond (fn func (cond * Cond ) string ) (actual string ) {
166
- cond := & Cond {
167
- Args : & Args {},
168
- }
169
- format := fn (cond )
170
- actual , _ = cond .Args .CompileWithFlavor (format , PostgreSQL )
171
- return
172
- }
173
-
174
171
func TestCondWithFlavor (t * testing.T ) {
175
172
a := assert .New (t )
176
173
cond := & Cond {
@@ -248,3 +245,10 @@ func TestCondMisuse(t *testing.T) {
248
245
a .Equal (sql , "SELECT * FROM t1 WHERE /* INVALID ARG $256 */" )
249
246
a .Equal (args , nil )
250
247
}
248
+
249
+ func newCond () * Cond {
250
+ args := & Args {}
251
+ return & Cond {
252
+ Args : args ,
253
+ }
254
+ }
0 commit comments