This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 35c7b2c85b bug: Datafusion doesn't respect case sensitive table 
references (#8964)
35c7b2c85b is described below

commit 35c7b2c85bc436ef6544d0eaa2792675fe27a836
Author: Whis Liao <[email protected]>
AuthorDate: Fri Jan 26 19:38:22 2024 +0800

    bug: Datafusion doesn't respect case sensitive table references (#8964)
    
    * fix: table alias will process uppercase alias into lowercase
    
    * test: uppercase table alias
    
    * test: add table alias sqllogictest
    
    * test: move tests to sqllogictests
    
    * test: update cte.slt
    
    * chore: add test descriptions
---
 datafusion/sql/src/planner.rs                 |  2 +-
 datafusion/sqllogictest/test_files/cte.slt    | 19 +++++++++++++++++++
 datafusion/sqllogictest/test_files/select.slt | 22 ++++++++++++++++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/datafusion/sql/src/planner.rs b/datafusion/sql/src/planner.rs
index f1d4f3ff56..012b1c51a5 100644
--- a/datafusion/sql/src/planner.rs
+++ b/datafusion/sql/src/planner.rs
@@ -298,7 +298,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
         let plan = self.apply_expr_alias(plan, alias.columns)?;
 
         LogicalPlanBuilder::from(plan)
-            .alias(self.normalizer.normalize(alias.name))?
+            
.alias(TableReference::bare(self.normalizer.normalize(alias.name)))?
             .build()
     }
 
diff --git a/datafusion/sqllogictest/test_files/cte.slt 
b/datafusion/sqllogictest/test_files/cte.slt
index c62b565846..d341833ba1 100644
--- a/datafusion/sqllogictest/test_files/cte.slt
+++ b/datafusion/sqllogictest/test_files/cte.slt
@@ -19,3 +19,22 @@ query II
 select * from (WITH source AS (select 1 as e) SELECT * FROM source) t1,   
(WITH source AS (select 1 as e) SELECT * FROM source) t2
 ----
 1 1
+
+# Ensure table aliases can be case sensitive
+query I
+WITH "T" AS (SELECT 1 a) SELECT "T".* FROM "T"
+----
+1
+
+# Ensure table aliases can be case sensitive
+query TT
+EXPLAIN WITH "NUMBERS" AS (SELECT 1 as a, 2 as b, 3 as c) SELECT "NUMBERS".* 
FROM "NUMBERS"
+----
+logical_plan
+Projection: NUMBERS.a, NUMBERS.b, NUMBERS.c
+--SubqueryAlias: NUMBERS
+----Projection: Int64(1) AS a, Int64(2) AS b, Int64(3) AS c
+------EmptyRelation
+physical_plan
+ProjectionExec: expr=[1 as a, 2 as b, 3 as c]
+--PlaceholderRowExec
diff --git a/datafusion/sqllogictest/test_files/select.slt 
b/datafusion/sqllogictest/test_files/select.slt
index 50c62eff77..2b47fec7ac 100644
--- a/datafusion/sqllogictest/test_files/select.slt
+++ b/datafusion/sqllogictest/test_files/select.slt
@@ -515,6 +515,28 @@ select
 ----
 false true false true true false false true false true true false true true 
false false true
 
+# select uppercase alias table
+query I
+SELECT "T".* from (SELECT 1 a) AS "T"
+----
+1
+
+# explain select uppercase alias table
+query TT
+EXPLAIN SELECT * FROM ((SELECT column1 FROM foo) "T1" CROSS JOIN (SELECT 
column2 FROM foo) "T2") AS "F"
+----
+logical_plan
+SubqueryAlias: F
+--CrossJoin:
+----SubqueryAlias: T1
+------TableScan: foo projection=[column1]
+----SubqueryAlias: T2
+------TableScan: foo projection=[column2]
+physical_plan
+CrossJoinExec
+--MemoryExec: partitions=1, partition_sizes=[1]
+--MemoryExec: partitions=1, partition_sizes=[1]
+
 # select NaNs
 query BBBB
 select (isnan('NaN'::double) AND 'NaN'::double > 0) a, (isnan('-NaN'::double) 
AND '-NaN'::double < 0) b, (isnan('NaN'::float) AND 'NaN'::float > 0) c, 
(isnan('-NaN'::float) AND '-NaN'::float < 0) d

Reply via email to