@@ -135,173 +135,3 @@ impl fmt::Display for CompoundSelectOperator {
135
135
}
136
136
}
137
137
}
138
-
139
- #[ cfg( test) ]
140
- mod tests {
141
- use base:: column:: Column ;
142
- use base:: table:: Table ;
143
- use base:: { FieldDefinitionExpression , FieldValueExpression , Literal } ;
144
- use dms:: select:: SelectStatement ;
145
-
146
- use super :: * ;
147
-
148
- #[ test]
149
- fn simple ( ) {
150
- let sql = "SELECT * FROM my_table WHERE age < 30;" ;
151
- let res = CompoundSelectStatement :: parse ( sql) ;
152
- println ! ( "{:?}" , res) ;
153
- }
154
-
155
- #[ test]
156
- fn union ( ) {
157
- let qstr = "SELECT id, 1 FROM Vote UNION SELECT id, stars from Rating;" ;
158
- let qstr2 = "(SELECT id, 1 FROM Vote) UNION (SELECT id, stars from Rating);" ;
159
- let res = CompoundSelectStatement :: parse ( qstr) ;
160
- let res2 = CompoundSelectStatement :: parse ( qstr2) ;
161
-
162
- let first_select = SelectStatement {
163
- tables : vec ! [ Table :: from( "Vote" ) ] ,
164
- fields : vec ! [
165
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
166
- FieldDefinitionExpression :: Value ( FieldValueExpression :: Literal (
167
- Literal :: Integer ( 1 ) . into( ) ,
168
- ) ) ,
169
- ] ,
170
- ..Default :: default ( )
171
- } ;
172
- let second_select = SelectStatement {
173
- tables : vec ! [ Table :: from( "Rating" ) ] ,
174
- fields : vec ! [
175
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
176
- FieldDefinitionExpression :: Col ( Column :: from( "stars" ) ) ,
177
- ] ,
178
- ..Default :: default ( )
179
- } ;
180
- let expected = CompoundSelectStatement {
181
- selects : vec ! [
182
- ( None , first_select) ,
183
- ( Some ( CompoundSelectOperator :: DistinctUnion ) , second_select) ,
184
- ] ,
185
- order : None ,
186
- limit : None ,
187
- } ;
188
-
189
- assert_eq ! ( res. unwrap( ) . 1 , expected) ;
190
- assert_eq ! ( res2. unwrap( ) . 1 , expected) ;
191
- }
192
-
193
- #[ test]
194
- fn union_strict ( ) {
195
- let qstr = "SELECT id, 1 FROM Vote);" ;
196
- let qstr2 = "(SELECT id, 1 FROM Vote;" ;
197
- let qstr3 = "SELECT id, 1 FROM Vote) UNION (SELECT id, stars from Rating;" ;
198
- let res = CompoundSelectStatement :: parse ( qstr) ;
199
- let res2 = CompoundSelectStatement :: parse ( qstr2) ;
200
- let res3 = CompoundSelectStatement :: parse ( qstr3) ;
201
-
202
- assert ! ( & res. is_err( ) ) ;
203
- // assert_eq!(
204
- // res.unwrap_err(),
205
- // nom::Err::Error(nom::error::Error::new(");", nom::error::ErrorKind::Tag))
206
- // );
207
- assert ! ( & res2. is_err( ) ) ;
208
- // assert_eq!(
209
- // res2.unwrap_err(),
210
- // nom::Err::Error(nom::error::Error::new(";", nom::error::ErrorKind::Tag))
211
- // );
212
- assert ! ( & res3. is_err( ) ) ;
213
- // assert_eq!(
214
- // res3.unwrap_err(),
215
- // nom::Err::Error(nom::error::Error::new(
216
- // ") UNION (SELECT id, stars from Rating;",
217
- // nom::error::ErrorKind::Tag,
218
- // ))
219
- // );
220
- }
221
-
222
- #[ test]
223
- fn multi_union ( ) {
224
- let qstr = "SELECT id, 1 FROM Vote \
225
- UNION SELECT id, stars from Rating \
226
- UNION DISTINCT SELECT 42, 5 FROM Vote;";
227
- let res = CompoundSelectStatement :: parse ( qstr) ;
228
-
229
- let first_select = SelectStatement {
230
- tables : vec ! [ Table :: from( "Vote" ) ] ,
231
- fields : vec ! [
232
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
233
- FieldDefinitionExpression :: Value ( FieldValueExpression :: Literal (
234
- Literal :: Integer ( 1 ) . into( ) ,
235
- ) ) ,
236
- ] ,
237
- ..Default :: default ( )
238
- } ;
239
- let second_select = SelectStatement {
240
- tables : vec ! [ Table :: from( "Rating" ) ] ,
241
- fields : vec ! [
242
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
243
- FieldDefinitionExpression :: Col ( Column :: from( "stars" ) ) ,
244
- ] ,
245
- ..Default :: default ( )
246
- } ;
247
- let third_select = SelectStatement {
248
- tables : vec ! [ Table :: from( "Vote" ) ] ,
249
- fields : vec ! [
250
- FieldDefinitionExpression :: Value ( FieldValueExpression :: Literal (
251
- Literal :: Integer ( 42 ) . into( ) ,
252
- ) ) ,
253
- FieldDefinitionExpression :: Value ( FieldValueExpression :: Literal (
254
- Literal :: Integer ( 5 ) . into( ) ,
255
- ) ) ,
256
- ] ,
257
- ..Default :: default ( )
258
- } ;
259
-
260
- let expected = CompoundSelectStatement {
261
- selects : vec ! [
262
- ( None , first_select) ,
263
- ( Some ( CompoundSelectOperator :: DistinctUnion ) , second_select) ,
264
- ( Some ( CompoundSelectOperator :: DistinctUnion ) , third_select) ,
265
- ] ,
266
- order : None ,
267
- limit : None ,
268
- } ;
269
-
270
- assert_eq ! ( res. unwrap( ) . 1 , expected) ;
271
- }
272
-
273
- #[ test]
274
- fn union_all ( ) {
275
- let qstr = "SELECT id, 1 FROM Vote UNION ALL SELECT id, stars from Rating;" ;
276
- let res = CompoundSelectStatement :: parse ( qstr) ;
277
-
278
- let first_select = SelectStatement {
279
- tables : vec ! [ Table :: from( "Vote" ) ] ,
280
- fields : vec ! [
281
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
282
- FieldDefinitionExpression :: Value ( FieldValueExpression :: Literal (
283
- Literal :: Integer ( 1 ) . into( ) ,
284
- ) ) ,
285
- ] ,
286
- ..Default :: default ( )
287
- } ;
288
- let second_select = SelectStatement {
289
- tables : vec ! [ Table :: from( "Rating" ) ] ,
290
- fields : vec ! [
291
- FieldDefinitionExpression :: Col ( Column :: from( "id" ) ) ,
292
- FieldDefinitionExpression :: Col ( Column :: from( "stars" ) ) ,
293
- ] ,
294
- ..Default :: default ( )
295
- } ;
296
- let expected = CompoundSelectStatement {
297
- selects : vec ! [
298
- ( None , first_select) ,
299
- ( Some ( CompoundSelectOperator :: Union ) , second_select) ,
300
- ] ,
301
- order : None ,
302
- limit : None ,
303
- } ;
304
-
305
- assert_eq ! ( res. unwrap( ) . 1 , expected) ;
306
- }
307
- }
0 commit comments