16
16
// under the License.
17
17
18
18
use datafusion_functions:: string;
19
+ use insta:: assert_snapshot;
19
20
use std:: { collections:: HashMap , sync:: Arc } ;
20
21
21
22
use datafusion_common:: { Diagnostic , Location , Result , Span } ;
@@ -136,7 +137,7 @@ fn test_table_not_found() -> Result<()> {
136
137
let query = "SELECT * FROM /*a*/personx/*a*/" ;
137
138
let spans = get_spans ( query) ;
138
139
let diag = do_query ( query) ;
139
- assert_eq ! ( diag. message, "table 'personx' not found" ) ;
140
+ assert_snapshot ! ( diag. message, @ "table 'personx' not found" ) ;
140
141
assert_eq ! ( diag. span, Some ( spans[ "a" ] ) ) ;
141
142
Ok ( ( ) )
142
143
}
@@ -146,7 +147,7 @@ fn test_unqualified_column_not_found() -> Result<()> {
146
147
let query = "SELECT /*a*/first_namex/*a*/ FROM person" ;
147
148
let spans = get_spans ( query) ;
148
149
let diag = do_query ( query) ;
149
- assert_eq ! ( diag. message, "column 'first_namex' not found" ) ;
150
+ assert_snapshot ! ( diag. message, @ "column 'first_namex' not found" ) ;
150
151
assert_eq ! ( diag. span, Some ( spans[ "a" ] ) ) ;
151
152
Ok ( ( ) )
152
153
}
@@ -156,7 +157,7 @@ fn test_qualified_column_not_found() -> Result<()> {
156
157
let query = "SELECT /*a*/person.first_namex/*a*/ FROM person" ;
157
158
let spans = get_spans ( query) ;
158
159
let diag = do_query ( query) ;
159
- assert_eq ! ( diag. message, "column 'first_namex' not found in 'person'" ) ;
160
+ assert_snapshot ! ( diag. message, @ "column 'first_namex' not found in 'person'" ) ;
160
161
assert_eq ! ( diag. span, Some ( spans[ "a" ] ) ) ;
161
162
Ok ( ( ) )
162
163
}
@@ -166,14 +167,11 @@ fn test_union_wrong_number_of_columns() -> Result<()> {
166
167
let query = "/*whole+left*/SELECT first_name FROM person/*left*/ UNION ALL /*right*/SELECT first_name, last_name FROM person/*right+whole*/" ;
167
168
let spans = get_spans ( query) ;
168
169
let diag = do_query ( query) ;
169
- assert_eq ! (
170
- diag. message,
171
- "UNION queries have different number of columns"
172
- ) ;
170
+ assert_snapshot ! ( diag. message, @"UNION queries have different number of columns" ) ;
173
171
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
174
- assert_eq ! ( diag. notes[ 0 ] . message, "this side has 1 fields" ) ;
172
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @ "this side has 1 fields" ) ;
175
173
assert_eq ! ( diag. notes[ 0 ] . span, Some ( spans[ "left" ] ) ) ;
176
- assert_eq ! ( diag. notes[ 1 ] . message, "this side has 2 fields" ) ;
174
+ assert_snapshot ! ( diag. notes[ 1 ] . message, @ "this side has 2 fields" ) ;
177
175
assert_eq ! ( diag. notes[ 1 ] . span, Some ( spans[ "right" ] ) ) ;
178
176
Ok ( ( ) )
179
177
}
@@ -183,15 +181,9 @@ fn test_missing_non_aggregate_in_group_by() -> Result<()> {
183
181
let query = "SELECT id, /*a*/first_name/*a*/ FROM person GROUP BY id" ;
184
182
let spans = get_spans ( query) ;
185
183
let diag = do_query ( query) ;
186
- assert_eq ! (
187
- diag. message,
188
- "'person.first_name' must appear in GROUP BY clause because it's not an aggregate expression"
189
- ) ;
184
+ assert_snapshot ! ( diag. message, @"'person.first_name' must appear in GROUP BY clause because it's not an aggregate expression" ) ;
190
185
assert_eq ! ( diag. span, Some ( spans[ "a" ] ) ) ;
191
- assert_eq ! (
192
- diag. helps[ 0 ] . message,
193
- "Either add 'person.first_name' to GROUP BY clause, or use an aggregare function like ANY_VALUE(person.first_name)"
194
- ) ;
186
+ assert_snapshot ! ( diag. helps[ 0 ] . message, @"Either add 'person.first_name' to GROUP BY clause, or use an aggregare function like ANY_VALUE(person.first_name)" ) ;
195
187
Ok ( ( ) )
196
188
}
197
189
@@ -200,10 +192,10 @@ fn test_ambiguous_reference() -> Result<()> {
200
192
let query = "SELECT /*a*/first_name/*a*/ FROM person a, person b" ;
201
193
let spans = get_spans ( query) ;
202
194
let diag = do_query ( query) ;
203
- assert_eq ! ( diag. message, "column 'first_name' is ambiguous" ) ;
195
+ assert_snapshot ! ( diag. message, @ "column 'first_name' is ambiguous" ) ;
204
196
assert_eq ! ( diag. span, Some ( spans[ "a" ] ) ) ;
205
- assert_eq ! ( diag. notes[ 0 ] . message, "possible column a.first_name" ) ;
206
- assert_eq ! ( diag. notes[ 1 ] . message, "possible column b.first_name" ) ;
197
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @ "possible column a.first_name" ) ;
198
+ assert_snapshot ! ( diag. notes[ 1 ] . message, @ "possible column b.first_name" ) ;
207
199
Ok ( ( ) )
208
200
}
209
201
@@ -213,11 +205,11 @@ fn test_incompatible_types_binary_arithmetic() -> Result<()> {
213
205
"SELECT /*whole+left*/id/*left*/ + /*right*/first_name/*right+whole*/ FROM person" ;
214
206
let spans = get_spans ( query) ;
215
207
let diag = do_query ( query) ;
216
- assert_eq ! ( diag. message, "expressions have incompatible types" ) ;
208
+ assert_snapshot ! ( diag. message, @ "expressions have incompatible types" ) ;
217
209
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
218
- assert_eq ! ( diag. notes[ 0 ] . message, "has type UInt32" ) ;
210
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @ "has type UInt32" ) ;
219
211
assert_eq ! ( diag. notes[ 0 ] . span, Some ( spans[ "left" ] ) ) ;
220
- assert_eq ! ( diag. notes[ 1 ] . message, "has type Utf8" ) ;
212
+ assert_snapshot ! ( diag. notes[ 1 ] . message, @ "has type Utf8" ) ;
221
213
assert_eq ! ( diag. notes[ 1 ] . span, Some ( spans[ "right" ] ) ) ;
222
214
Ok ( ( ) )
223
215
}
@@ -227,7 +219,7 @@ fn test_field_not_found_suggestion() -> Result<()> {
227
219
let query = "SELECT /*whole*/first_na/*whole*/ FROM person" ;
228
220
let spans = get_spans ( query) ;
229
221
let diag = do_query ( query) ;
230
- assert_eq ! ( diag. message, "column 'first_na' not found" ) ;
222
+ assert_snapshot ! ( diag. message, @ "column 'first_na' not found" ) ;
231
223
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
232
224
assert_eq ! ( diag. notes. len( ) , 1 ) ;
233
225
@@ -243,7 +235,7 @@ fn test_field_not_found_suggestion() -> Result<()> {
243
235
} )
244
236
. collect ( ) ;
245
237
suggested_fields. sort ( ) ;
246
- assert_eq ! ( suggested_fields[ 0 ] , "person.first_name" ) ;
238
+ assert_snapshot ! ( suggested_fields[ 0 ] , @ "person.first_name" ) ;
247
239
Ok ( ( ) )
248
240
}
249
241
@@ -253,7 +245,7 @@ fn test_ambiguous_column_suggestion() -> Result<()> {
253
245
let spans = get_spans ( query) ;
254
246
let diag = do_query ( query) ;
255
247
256
- assert_eq ! ( diag. message, "column 'id' is ambiguous" ) ;
248
+ assert_snapshot ! ( diag. message, @ "column 'id' is ambiguous" ) ;
257
249
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
258
250
259
251
assert_eq ! ( diag. notes. len( ) , 2 ) ;
@@ -281,8 +273,8 @@ fn test_invalid_function() -> Result<()> {
281
273
let query = "SELECT /*whole*/concat_not_exist/*whole*/()" ;
282
274
let spans = get_spans ( query) ;
283
275
let diag = do_query ( query) ;
284
- assert_eq ! ( diag. message, "Invalid function 'concat_not_exist'" ) ;
285
- assert_eq ! ( diag. notes[ 0 ] . message, "Possible function 'concat'" ) ;
276
+ assert_snapshot ! ( diag. message, @ "Invalid function 'concat_not_exist'" ) ;
277
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @ "Possible function 'concat'" ) ;
286
278
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
287
279
Ok ( ( ) )
288
280
}
@@ -292,10 +284,7 @@ fn test_scalar_subquery_multiple_columns() -> Result<(), Box<dyn std::error::Err
292
284
let spans = get_spans ( query) ;
293
285
let diag = do_query ( query) ;
294
286
295
- assert_eq ! (
296
- diag. message,
297
- "Too many columns! The subquery should only return one column"
298
- ) ;
287
+ assert_snapshot ! ( diag. message, @"Too many columns! The subquery should only return one column" ) ;
299
288
300
289
let expected_span = Some ( Span {
301
290
start : spans[ "x" ] . start ,
@@ -327,10 +316,7 @@ fn test_in_subquery_multiple_columns() -> Result<(), Box<dyn std::error::Error>>
327
316
let spans = get_spans ( query) ;
328
317
let diag = do_query ( query) ;
329
318
330
- assert_eq ! (
331
- diag. message,
332
- "Too many columns! The subquery should only return one column"
333
- ) ;
319
+ assert_snapshot ! ( diag. message, @"Too many columns! The subquery should only return one column" ) ;
334
320
335
321
let expected_span = Some ( Span {
336
322
start : spans[ "id" ] . start ,
@@ -360,16 +346,10 @@ fn test_unary_op_plus_with_column() -> Result<()> {
360
346
let query = "SELECT +/*whole*/first_name/*whole*/ FROM person" ;
361
347
let spans = get_spans ( query) ;
362
348
let diag = do_query ( query) ;
363
- assert_eq ! ( diag. message, "+ cannot be used with Utf8" ) ;
349
+ assert_snapshot ! ( diag. message, @ "+ cannot be used with Utf8" ) ;
364
350
assert_eq ! ( diag. span, Some ( spans[ "whole" ] ) ) ;
365
- assert_eq ! (
366
- diag. notes[ 0 ] . message,
367
- "+ can only be used with numbers, intervals, and timestamps"
368
- ) ;
369
- assert_eq ! (
370
- diag. helps[ 0 ] . message,
371
- "perhaps you need to cast person.first_name"
372
- ) ;
351
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @"+ can only be used with numbers, intervals, and timestamps" ) ;
352
+ assert_snapshot ! ( diag. helps[ 0 ] . message, @"perhaps you need to cast person.first_name" ) ;
373
353
Ok ( ( ) )
374
354
}
375
355
@@ -379,15 +359,9 @@ fn test_unary_op_plus_with_non_column() -> Result<()> {
379
359
let query = "SELECT +'a'" ;
380
360
let diag = do_query ( query) ;
381
361
assert_eq ! ( diag. message, "+ cannot be used with Utf8" ) ;
382
- assert_eq ! (
383
- diag. notes[ 0 ] . message,
384
- "+ can only be used with numbers, intervals, and timestamps"
385
- ) ;
362
+ assert_snapshot ! ( diag. notes[ 0 ] . message, @"+ can only be used with numbers, intervals, and timestamps" ) ;
386
363
assert_eq ! ( diag. notes[ 0 ] . span, None ) ;
387
- assert_eq ! (
388
- diag. helps[ 0 ] . message,
389
- "perhaps you need to cast Utf8(\" a\" )"
390
- ) ;
364
+ assert_snapshot ! ( diag. helps[ 0 ] . message, @r#"perhaps you need to cast Utf8("a")"# ) ;
391
365
assert_eq ! ( diag. helps[ 0 ] . span, None ) ;
392
366
assert_eq ! ( diag. span, None ) ;
393
367
Ok ( ( ) )
0 commit comments