@@ -463,13 +463,13 @@ pub fn in_list(
463463
464464#[ cfg( test) ]
465465mod tests {
466-
467466 use super :: * ;
468467 use crate :: expressions;
469468 use crate :: expressions:: { col, lit, try_cast} ;
470469 use datafusion_common:: plan_err;
471470 use datafusion_expr:: type_coercion:: binary:: comparison_coercion;
472471 use datafusion_physical_expr_common:: physical_expr:: fmt_sql;
472+ use insta:: assert_snapshot;
473473 use itertools:: Itertools as _;
474474
475475 type InListCastResult = ( Arc < dyn PhysicalExpr > , Vec < Arc < dyn PhysicalExpr > > ) ;
@@ -1443,7 +1443,7 @@ mod tests {
14431443 }
14441444
14451445 #[ test]
1446- fn test_fmt_sql ( ) -> Result < ( ) > {
1446+ fn test_fmt_sql_1 ( ) -> Result < ( ) > {
14471447 let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Utf8 , true ) ] ) ;
14481448 let col_a = col ( "a" , & schema) ?;
14491449
@@ -1452,33 +1452,51 @@ mod tests {
14521452 let expr = in_list ( Arc :: clone ( & col_a) , list, & false , & schema) ?;
14531453 let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
14541454 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) ?;
14571464
14581465 // Test: a NOT IN ('a', 'b')
14591466 let list = vec ! [ lit( "a" ) , lit( "b" ) ] ;
14601467 let expr = in_list ( Arc :: clone ( & col_a) , list, & true , & schema) ?;
14611468 let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
14621469 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+ }
14651474
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) ?;
14661479 // Test: a IN ('a', 'b', NULL)
14671480 let list = vec ! [ lit( "a" ) , lit( "b" ) , lit( ScalarValue :: Utf8 ( None ) ) ] ;
14681481 let expr = in_list ( Arc :: clone ( & col_a) , list, & false , & schema) ?;
14691482 let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
14701483 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+ }
14731488
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) ?;
14741493 // Test: a NOT IN ('a', 'b', NULL)
14751494 let list = vec ! [ lit( "a" ) , lit( "b" ) , lit( ScalarValue :: Utf8 ( None ) ) ] ;
14761495 let expr = in_list ( Arc :: clone ( & col_a) , list, & true , & schema) ?;
14771496 let sql_string = fmt_sql ( expr. as_ref ( ) ) . to_string ( ) ;
14781497 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 } }])"# ) ;
14821500 Ok ( ( ) )
14831501 }
14841502}
0 commit comments