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

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


The following commit(s) were added to refs/heads/main by this push:
     new d73c9d8bf2 Use qualified aliases to simplify searching DFSchema 
(#12546)
d73c9d8bf2 is described below

commit d73c9d8bf28e6797cd05a5b4296b3a7a121a8e23
Author: Jonah Gao <[email protected]>
AuthorDate: Mon Sep 23 10:16:06 2024 +0800

    Use qualified aliases to simplify searching DFSchema (#12546)
---
 datafusion/common/src/dfschema.rs                  | 13 +-----------
 .../optimizer/src/single_distinct_to_groupby.rs    | 23 ++++++++--------------
 datafusion/sqllogictest/test_files/select.slt      |  4 ++++
 3 files changed, 13 insertions(+), 27 deletions(-)

diff --git a/datafusion/common/src/dfschema.rs 
b/datafusion/common/src/dfschema.rs
index 7fb2d4dc12..0dec14e917 100644
--- a/datafusion/common/src/dfschema.rs
+++ b/datafusion/common/src/dfschema.rs
@@ -355,18 +355,7 @@ impl DFSchema {
                 // qualifier and name.
                 (Some(q), Some(field_q)) => q.resolved_eq(field_q) && f.name() 
== name,
                 // field to lookup is qualified but current field is 
unqualified.
-                (Some(qq), None) => {
-                    // the original field may now be aliased with a name that 
matches the
-                    // original qualified name
-                    let column = Column::from_qualified_name(f.name());
-                    match column {
-                        Column {
-                            relation: Some(r),
-                            name: column_name,
-                        } => &r == qq && column_name == name,
-                        _ => false,
-                    }
-                }
+                (Some(_), None) => false,
                 // field to lookup is unqualified, no need to compare qualifier
                 (None, Some(_)) | (None, None) => f.name() == name,
             })
diff --git a/datafusion/optimizer/src/single_distinct_to_groupby.rs 
b/datafusion/optimizer/src/single_distinct_to_groupby.rs
index dd82b056d0..2509e67dbe 100644
--- a/datafusion/optimizer/src/single_distinct_to_groupby.rs
+++ b/datafusion/optimizer/src/single_distinct_to_groupby.rs
@@ -22,9 +22,7 @@ use std::sync::Arc;
 use crate::optimizer::ApplyOrder;
 use crate::{OptimizerConfig, OptimizerRule};
 
-use datafusion_common::{
-    internal_err, qualified_name, tree_node::Transformed, DataFusionError, 
Result,
-};
+use datafusion_common::{internal_err, tree_node::Transformed, DataFusionError, 
Result};
 use datafusion_expr::builder::project;
 use datafusion_expr::{
     col,
@@ -135,7 +133,7 @@ impl OptimizerRule for SingleDistinctToGroupBy {
                 // alias all original group_by exprs
                 let (mut inner_group_exprs, out_group_expr_with_alias): (
                     Vec<Expr>,
-                    Vec<(Expr, Option<String>)>,
+                    Vec<(Expr, _)>,
                 ) = group_expr
                     .into_iter()
                     .enumerate()
@@ -166,10 +164,7 @@ impl OptimizerRule for SingleDistinctToGroupBy {
                             let (qualifier, field) = schema.qualified_field(i);
                             (
                                 group_expr.alias(alias_str.clone()),
-                                (
-                                    col(alias_str),
-                                    Some(qualified_name(qualifier, 
field.name())),
-                                ),
+                                (col(alias_str), Some((qualifier, 
field.name()))),
                             )
                         }
                     })
@@ -253,19 +248,17 @@ impl OptimizerRule for SingleDistinctToGroupBy {
                 // - aggr expr
                 let alias_expr: Vec<_> = out_group_expr_with_alias
                     .into_iter()
-                    .map(|(group_expr, original_field)| {
-                        if let Some(name) = original_field {
-                            group_expr.alias(name)
-                        } else {
-                            group_expr
+                    .map(|(group_expr, original_name)| match original_name {
+                        Some((qualifier, name)) => {
+                            group_expr.alias_qualified(qualifier.cloned(), 
name)
                         }
+                        None => group_expr,
                     })
                     .chain(outer_aggr_exprs.iter().cloned().enumerate().map(
                         |(idx, expr)| {
                             let idx = idx + group_size;
                             let (qualifier, field) = 
schema.qualified_field(idx);
-                            let name = qualified_name(qualifier, field.name());
-                            expr.alias(name)
+                            expr.alias_qualified(qualifier.cloned(), 
field.name())
                         },
                     ))
                     .collect();
diff --git a/datafusion/sqllogictest/test_files/select.slt 
b/datafusion/sqllogictest/test_files/select.slt
index 05de3e0b80..6950c41f54 100644
--- a/datafusion/sqllogictest/test_files/select.slt
+++ b/datafusion/sqllogictest/test_files/select.slt
@@ -1756,3 +1756,7 @@ SELECT "test.a" FROM (SELECT a AS "test.a" FROM test)
 
 statement ok
 DROP TABLE test;
+
+# Can't reference an unqualified column by a qualified name
+query error DataFusion error: Schema error: No field named t1\.v1\. Valid 
fields are "t1\.v1"\.
+SELECT t1.v1 FROM (SELECT 1 AS "t1.v1");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to