@@ -463,13 +463,13 @@ pub fn in_list(
463
463
464
464
#[ cfg( test) ]
465
465
mod tests {
466
-
467
466
use super :: * ;
468
467
use crate :: expressions;
469
468
use crate :: expressions:: { col, lit, try_cast} ;
470
469
use datafusion_common:: plan_err;
471
470
use datafusion_expr:: type_coercion:: binary:: comparison_coercion;
472
471
use datafusion_physical_expr_common:: physical_expr:: fmt_sql;
472
+ use insta:: assert_snapshot;
473
473
use itertools:: Itertools as _;
474
474
475
475
type InListCastResult = ( Arc < dyn PhysicalExpr > , Vec < Arc < dyn PhysicalExpr > > ) ;
@@ -1443,7 +1443,7 @@ mod tests {
1443
1443
}
1444
1444
1445
1445
#[ test]
1446
- fn test_fmt_sql ( ) -> Result < ( ) > {
1446
+ fn test_fmt_sql_1 ( ) -> Result < ( ) > {
1447
1447
let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Utf8 , true ) ] ) ;
1448
1448
let col_a = col ( "a" , & schema) ?;
1449
1449
@@ -1452,33 +1452,51 @@ mod tests {
1452
1452
let expr = in_list ( Arc :: clone ( & col_a) , list, & false , & schema) ?;
1453
1453
let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
1454
1454
let display_string = expr. to_string ( ) ;
1455
- assert_eq ! ( sql_string, "a IN (a, b)" ) ;
1456
- assert_eq ! ( display_string, "Use a@0 IN (SET) ([Literal { value: Utf8(\" a\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(\" b\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }])" ) ;
1455
+ assert_snapshot ! ( sql_string, @"a IN (a, b)" ) ;
1456
+ assert_snapshot ! ( display_string, @r#"Use a@0 IN (SET) ([Literal { value: Utf8("a"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8("b"), field: Field { name: "lit", data_type: Utf8 } }])"# ) ;
1457
+ Ok ( ( ) )
1458
+ }
1459
+
1460
+ #[ test]
1461
+ fn test_fmt_sql_2 ( ) -> Result < ( ) > {
1462
+ let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Utf8 , true ) ] ) ;
1463
+ let col_a = col ( "a" , & schema) ?;
1457
1464
1458
1465
// Test: a NOT IN ('a', 'b')
1459
1466
let list = vec ! [ lit( "a" ) , lit( "b" ) ] ;
1460
1467
let expr = in_list ( Arc :: clone ( & col_a) , list, & true , & schema) ?;
1461
1468
let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
1462
1469
let display_string = expr. to_string ( ) ;
1463
- assert_eq ! ( sql_string, "a NOT IN (a, b)" ) ;
1464
- assert_eq ! ( display_string, "a@0 NOT IN (SET) ([Literal { value: Utf8(\" a\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(\" b\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }])" ) ;
1470
+ assert_snapshot ! ( sql_string, @"a NOT IN (a, b)" ) ;
1471
+ assert_snapshot ! ( display_string, @r#"a@0 NOT IN (SET) ([Literal { value: Utf8("a"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8("b"), field: Field { name: "lit", data_type: Utf8 } }])"# ) ;
1472
+ Ok ( ( ) )
1473
+ }
1465
1474
1475
+ #[ test]
1476
+ fn test_fmt_sql_3 ( ) -> Result < ( ) > {
1477
+ let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Utf8 , true ) ] ) ;
1478
+ let col_a = col ( "a" , & schema) ?;
1466
1479
// Test: a IN ('a', 'b', NULL)
1467
1480
let list = vec ! [ lit( "a" ) , lit( "b" ) , lit( ScalarValue :: Utf8 ( None ) ) ] ;
1468
1481
let expr = in_list ( Arc :: clone ( & col_a) , list, & false , & schema) ?;
1469
1482
let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
1470
1483
let display_string = expr. to_string ( ) ;
1471
- assert_eq ! ( sql_string, "a IN (a, b, NULL)" ) ;
1472
- assert_eq ! ( display_string, "Use a@0 IN (SET) ([Literal { value: Utf8(\" a\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(\" b\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(NULL), field: Field { name: \" lit\" , data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} } }])" ) ;
1484
+ assert_snapshot ! ( sql_string, @"a IN (a, b, NULL)" ) ;
1485
+ assert_snapshot ! ( display_string, @r#"Use a@0 IN (SET) ([Literal { value: Utf8("a"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8("b"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8(NULL), field: Field { name: "lit", data_type: Utf8, nullable: true } }])"# ) ;
1486
+ Ok ( ( ) )
1487
+ }
1473
1488
1489
+ #[ test]
1490
+ fn test_fmt_sql_4 ( ) -> Result < ( ) > {
1491
+ let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Utf8 , true ) ] ) ;
1492
+ let col_a = col ( "a" , & schema) ?;
1474
1493
// Test: a NOT IN ('a', 'b', NULL)
1475
1494
let list = vec ! [ lit( "a" ) , lit( "b" ) , lit( ScalarValue :: Utf8 ( None ) ) ] ;
1476
1495
let expr = in_list ( Arc :: clone ( & col_a) , list, & true , & schema) ?;
1477
1496
let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
1478
1497
let display_string = expr. to_string ( ) ;
1479
- assert_eq ! ( sql_string, "a NOT IN (a, b, NULL)" ) ;
1480
- assert_eq ! ( display_string, "a@0 NOT IN (SET) ([Literal { value: Utf8(\" a\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(\" b\" ), field: Field { name: \" lit\" , data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }, Literal { value: Utf8(NULL), field: Field { name: \" lit\" , data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} } }])" ) ;
1481
-
1498
+ assert_snapshot ! ( sql_string, @"a NOT IN (a, b, NULL)" ) ;
1499
+ assert_snapshot ! ( display_string, @r#"a@0 NOT IN (SET) ([Literal { value: Utf8("a"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8("b"), field: Field { name: "lit", data_type: Utf8 } }, Literal { value: Utf8(NULL), field: Field { name: "lit", data_type: Utf8, nullable: true } }])"# ) ;
1482
1500
Ok ( ( ) )
1483
1501
}
1484
1502
}
0 commit comments