From fb8ced02928b6c16d1588795100fdcd54b772284 Mon Sep 17 00:00:00 2001 From: tokoko Date: Thu, 17 Oct 2024 11:00:07 +0000 Subject: [PATCH 1/2] feat(substrait): add wildcard expand rule in producer --- .../substrait/src/logical_plan/producer.rs | 9 ++++- .../tests/cases/roundtrip_logical_plan.rs | 34 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/datafusion/substrait/src/logical_plan/producer.rs b/datafusion/substrait/src/logical_plan/producer.rs index 1165ce13d236..4111f1ce8e87 100644 --- a/datafusion/substrait/src/logical_plan/producer.rs +++ b/datafusion/substrait/src/logical_plan/producer.rs @@ -15,6 +15,9 @@ // specific language governing permissions and limitations // under the License. +use datafusion::config::ConfigOptions; +use datafusion::optimizer::analyzer::expand_wildcard_rule::ExpandWildcardRule; +use datafusion::optimizer::AnalyzerRule; use std::sync::Arc; use substrait::proto::expression_reference::ExprType; @@ -103,9 +106,13 @@ pub fn to_substrait_plan(plan: &LogicalPlan, ctx: &SessionContext) -> Result Result<()> { #[tokio::test] async fn wildcard_select() -> Result<()> { - roundtrip("SELECT * FROM data").await + assert_expected_plan_unoptimized( + "SELECT * FROM data", + "Projection: data.a, data.b, data.c, data.d, data.e, data.f\ + \n TableScan: data", + true, + ) + .await } #[tokio::test] @@ -1108,6 +1114,32 @@ async fn verify_post_join_filter_value(proto: Box) -> Result<()> { Ok(()) } +async fn assert_expected_plan_unoptimized( + sql: &str, + expected_plan_str: &str, + assert_schema: bool, +) -> Result<()> { + let ctx = create_context().await?; + let df = ctx.sql(sql).await?; + let plan = df.into_unoptimized_plan(); + let proto = to_substrait_plan(&plan, &ctx)?; + let plan2 = from_substrait_plan(&ctx, &proto).await?; + + println!("{plan}"); + println!("{plan2}"); + + println!("{proto:?}"); + + if assert_schema { + assert_eq!(plan.schema(), plan2.schema()); + } + + let plan2str = format!("{plan2}"); + assert_eq!(expected_plan_str, &plan2str); + + Ok(()) +} + async fn assert_expected_plan( sql: &str, expected_plan_str: &str, From 72d5c7253e51202f92d6e36bc9c436bfc41c672e Mon Sep 17 00:00:00 2001 From: tokoko Date: Thu, 17 Oct 2024 20:06:24 +0000 Subject: [PATCH 2/2] add comment describing need for ExpandWildcardRule --- datafusion/substrait/src/logical_plan/producer.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datafusion/substrait/src/logical_plan/producer.rs b/datafusion/substrait/src/logical_plan/producer.rs index 4111f1ce8e87..ee9304edcebf 100644 --- a/datafusion/substrait/src/logical_plan/producer.rs +++ b/datafusion/substrait/src/logical_plan/producer.rs @@ -107,6 +107,7 @@ pub fn to_substrait_plan(plan: &LogicalPlan, ctx: &SessionContext) -> Result