Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion datafusion/expr/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ pub enum Expr {
///
/// This expr has to be resolved to a list of columns before translating logical
/// plan into physical plan.
Wildcard { qualifier: Option<String> },
Wildcard { qualifier: Option<TableReference> },
/// List of grouping set expressions. Only valid in the context of an aggregate
/// GROUP BY expression list
GroupingSet(GroupingSet),
Expand Down
14 changes: 6 additions & 8 deletions datafusion/expr/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ fn get_excluded_columns(
opt_exclude: Option<&ExcludeSelectItem>,
opt_except: Option<&ExceptSelectItem>,
schema: &DFSchema,
qualifier: &Option<TableReference>,
qualifier: Option<&TableReference>,
) -> Result<Vec<Column>> {
let mut idents = vec![];
if let Some(excepts) = opt_except {
Expand All @@ -343,8 +343,7 @@ fn get_excluded_columns(
let mut result = vec![];
for ident in unique_idents.into_iter() {
let col_name = ident.value.as_str();
let (qualifier, field) =
schema.qualified_field_with_name(qualifier.as_ref(), col_name)?;
let (qualifier, field) = schema.qualified_field_with_name(qualifier, col_name)?;
result.push(Column::from((qualifier, field)));
}
Ok(result)
Expand Down Expand Up @@ -406,7 +405,7 @@ pub fn expand_wildcard(
..
}) = wildcard_options
{
get_excluded_columns(opt_exclude.as_ref(), opt_except.as_ref(), schema, &None)?
get_excluded_columns(opt_exclude.as_ref(), opt_except.as_ref(), schema, None)?
} else {
vec![]
};
Expand All @@ -417,12 +416,11 @@ pub fn expand_wildcard(

/// Resolves an `Expr::Wildcard` to a collection of qualified `Expr::Column`'s.
pub fn expand_qualified_wildcard(
qualifier: &str,
qualifier: &TableReference,
schema: &DFSchema,
wildcard_options: Option<&WildcardAdditionalOptions>,
) -> Result<Vec<Expr>> {
let qualifier = TableReference::from(qualifier);
let qualified_indices = schema.fields_indices_with_qualified(&qualifier);
let qualified_indices = schema.fields_indices_with_qualified(qualifier);
let projected_func_dependencies = schema
.functional_dependencies()
.project_functional_dependencies(&qualified_indices, qualified_indices.len());
Expand All @@ -445,7 +443,7 @@ pub fn expand_qualified_wildcard(
opt_exclude.as_ref(),
opt_except.as_ref(),
schema,
&Some(qualifier),
Some(qualifier),
)?
} else {
vec![]
Expand Down
2 changes: 1 addition & 1 deletion datafusion/proto/proto/datafusion.proto
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ message LogicalExprNode {
}

message Wildcard {
string qualifier = 1;
TableReference qualifier = 1;
}

message PlaceholderNode {
Expand Down
10 changes: 5 additions & 5 deletions datafusion/proto/src/generated/pbjson.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions datafusion/proto/src/generated/prost.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 4 additions & 7 deletions datafusion/proto/src/logical_plan/from_proto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -593,13 +593,10 @@ pub fn parse_expr(
parse_exprs(&in_list.list, registry, codec)?,
in_list.negated,
))),
ExprType::Wildcard(protobuf::Wildcard { qualifier }) => Ok(Expr::Wildcard {
qualifier: if qualifier.is_empty() {
None
} else {
Some(qualifier.clone())
},
}),
ExprType::Wildcard(protobuf::Wildcard { qualifier }) => {
let qualifier = qualifier.to_owned().map(|x| x.try_into()).transpose()?;
Ok(Expr::Wildcard { qualifier })
}
ExprType::ScalarUdfExpr(protobuf::ScalarUdfExprNode {
fun_name,
args,
Expand Down
2 changes: 1 addition & 1 deletion datafusion/proto/src/logical_plan/to_proto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ pub fn serialize_expr(
}
Expr::Wildcard { qualifier } => protobuf::LogicalExprNode {
expr_type: Some(ExprType::Wildcard(protobuf::Wildcard {
qualifier: qualifier.clone().unwrap_or("".to_string()),
qualifier: qualifier.to_owned().map(|x| x.into()),
})),
},
Expr::ScalarSubquery(_)
Expand Down
8 changes: 5 additions & 3 deletions datafusion/sql/src/select.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
use std::collections::HashSet;
use std::sync::Arc;

use crate::planner::{ContextProvider, PlannerContext, SqlToRel};
use crate::planner::{
idents_to_table_reference, ContextProvider, PlannerContext, SqlToRel,
};
use crate::utils::{
check_columns_satisfy_exprs, extract_aliases, rebase_expr,
recursive_transform_unnest, resolve_aliases_to_exprs, resolve_columns,
Expand Down Expand Up @@ -475,9 +477,9 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
Ok(expanded_exprs)
}
}
SelectItem::QualifiedWildcard(ref object_name, options) => {
SelectItem::QualifiedWildcard(object_name, options) => {
Self::check_wildcard_options(&options)?;
let qualifier = format!("{object_name}");
let qualifier = idents_to_table_reference(object_name.0, false)?;
// do not expand from outer schema
let expanded_exprs = expand_qualified_wildcard(
&qualifier,
Expand Down