@@ -3634,6 +3634,173 @@ mod tests {
36343634        assert_eq ! ( result[ 0 ] . schema( ) . metadata( ) ,  result[ 1 ] . schema( ) . metadata( ) ) ; 
36353635    } 
36363636
3637+     #[ tokio:: test]  
3638+     async  fn  normalized_column_identifiers ( )  { 
3639+         // create local execution context 
3640+         let  mut  ctx = ExecutionContext :: new ( ) ; 
3641+ 
3642+         // register csv file with the execution context 
3643+         ctx. register_csv ( 
3644+             "case_insensitive_test" , 
3645+             "tests/example.csv" , 
3646+             CsvReadOptions :: new ( ) , 
3647+         ) 
3648+         . await 
3649+         . unwrap ( ) ; 
3650+ 
3651+         let  sql = "SELECT A, b FROM case_insensitive_test" ; 
3652+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3653+             . await 
3654+             . expect ( "ran plan correctly" ) ; 
3655+         let  expected = vec ! [ 
3656+             "+---+---+" , 
3657+             "| a | b |" , 
3658+             "+---+---+" , 
3659+             "| 1 | 2 |" , 
3660+             "+---+---+" , 
3661+         ] ; 
3662+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3663+ 
3664+         let  sql = "SELECT t.A, b FROM case_insensitive_test AS t" ; 
3665+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3666+             . await 
3667+             . expect ( "ran plan correctly" ) ; 
3668+         let  expected = vec ! [ 
3669+             "+---+---+" , 
3670+             "| a | b |" , 
3671+             "+---+---+" , 
3672+             "| 1 | 2 |" , 
3673+             "+---+---+" , 
3674+         ] ; 
3675+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3676+ 
3677+         // Aliases 
3678+ 
3679+         let  sql = "SELECT t.A as x, b FROM case_insensitive_test AS t" ; 
3680+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3681+             . await 
3682+             . expect ( "ran plan correctly" ) ; 
3683+         let  expected = vec ! [ 
3684+             "+---+---+" , 
3685+             "| x | b |" , 
3686+             "+---+---+" , 
3687+             "| 1 | 2 |" , 
3688+             "+---+---+" , 
3689+         ] ; 
3690+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3691+ 
3692+         let  sql = "SELECT t.A AS X, b FROM case_insensitive_test AS t" ; 
3693+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3694+             . await 
3695+             . expect ( "ran plan correctly" ) ; 
3696+         let  expected = vec ! [ 
3697+             "+---+---+" , 
3698+             "| x | b |" , 
3699+             "+---+---+" , 
3700+             "| 1 | 2 |" , 
3701+             "+---+---+" , 
3702+         ] ; 
3703+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3704+ 
3705+         let  sql = r#"SELECT t.A AS "X", b FROM case_insensitive_test AS t"# ; 
3706+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3707+             . await 
3708+             . expect ( "ran plan correctly" ) ; 
3709+         let  expected = vec ! [ 
3710+             "+---+---+" , 
3711+             "| X | b |" , 
3712+             "+---+---+" , 
3713+             "| 1 | 2 |" , 
3714+             "+---+---+" , 
3715+         ] ; 
3716+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3717+ 
3718+         // Order by 
3719+ 
3720+         let  sql = "SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY x" ; 
3721+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3722+             . await 
3723+             . expect ( "ran plan correctly" ) ; 
3724+         let  expected = vec ! [ 
3725+             "+---+---+" , 
3726+             "| x | b |" , 
3727+             "+---+---+" , 
3728+             "| 1 | 2 |" , 
3729+             "+---+---+" , 
3730+         ] ; 
3731+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3732+ 
3733+         let  sql = "SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY X" ; 
3734+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3735+             . await 
3736+             . expect ( "ran plan correctly" ) ; 
3737+         let  expected = vec ! [ 
3738+             "+---+---+" , 
3739+             "| x | b |" , 
3740+             "+---+---+" , 
3741+             "| 1 | 2 |" , 
3742+             "+---+---+" , 
3743+         ] ; 
3744+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3745+ 
3746+         let  sql = r#"SELECT t.A AS "X", b FROM case_insensitive_test AS t ORDER BY "X""# ; 
3747+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3748+             . await 
3749+             . expect ( "ran plan correctly" ) ; 
3750+         let  expected = vec ! [ 
3751+             "+---+---+" , 
3752+             "| X | b |" , 
3753+             "+---+---+" , 
3754+             "| 1 | 2 |" , 
3755+             "+---+---+" , 
3756+         ] ; 
3757+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3758+ 
3759+         // Where 
3760+ 
3761+         let  sql = "SELECT a, b FROM case_insensitive_test where A IS NOT null" ; 
3762+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3763+             . await 
3764+             . expect ( "ran plan correctly" ) ; 
3765+         let  expected = vec ! [ 
3766+             "+---+---+" , 
3767+             "| a | b |" , 
3768+             "+---+---+" , 
3769+             "| 1 | 2 |" , 
3770+             "+---+---+" , 
3771+         ] ; 
3772+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3773+ 
3774+         // Group by 
3775+ 
3776+         let  sql = "SELECT a as x, count(*) as c FROM case_insensitive_test GROUP BY X" ; 
3777+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3778+             . await 
3779+             . expect ( "ran plan correctly" ) ; 
3780+         let  expected = vec ! [ 
3781+             "+---+---+" , 
3782+             "| x | c |" , 
3783+             "+---+---+" , 
3784+             "| 1 | 1 |" , 
3785+             "+---+---+" , 
3786+         ] ; 
3787+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3788+ 
3789+         let  sql =
3790+             r#"SELECT a as "X", count(*) as c FROM case_insensitive_test GROUP BY "X""# ; 
3791+         let  result = plan_and_collect ( & mut  ctx,  sql) 
3792+             . await 
3793+             . expect ( "ran plan correctly" ) ; 
3794+         let  expected = vec ! [ 
3795+             "+---+---+" , 
3796+             "| X | c |" , 
3797+             "+---+---+" , 
3798+             "| 1 | 1 |" , 
3799+             "+---+---+" , 
3800+         ] ; 
3801+         assert_batches_sorted_eq ! ( expected,  & result) ; 
3802+     } 
3803+ 
36373804    struct  MyPhysicalPlanner  { } 
36383805
36393806    #[ async_trait]  
0 commit comments