Skip to content

Commit

Permalink
bugfix: fix eval nullalbe() in simplify_exprs
Browse files Browse the repository at this point in the history
  • Loading branch information
jackwener committed Feb 7, 2023
1 parent 04b1367 commit f76e667
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions datafusion/optimizer/src/simplify_expressions/simplify_exprs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
//! Simplify expressions optimizer rule and implementation

use super::{ExprSimplifier, SimplifyContext};
use crate::utils::merge_schema;
use crate::{OptimizerConfig, OptimizerRule};
use datafusion_common::Result;
use datafusion_common::{DFSchemaRef, Result};
use datafusion_expr::{logical_plan::LogicalPlan, utils::from_plan};
use datafusion_physical_expr::execution_props::ExecutionProps;

Expand Down Expand Up @@ -59,13 +60,12 @@ impl SimplifyExpressions {
plan: &LogicalPlan,
execution_props: &ExecutionProps,
) -> Result<LogicalPlan> {
// We need to pass down the all schemas within the plan tree to `optimize_expr` in order to
// to evaluate expression types. For example, a projection plan's schema will only include
// projected columns. With just the projected schema, it's not possible to infer types for
// expressions that references non-projected columns within the same project plan or its
// children plans.
let info = plan
.all_schemas()
// Pass down the `children merge schema` and `plan schema` to evaluate expression types.
// pass all `child schema` and `plan schema` isn't enough, because like `t1 semi join t2 on
// on t1.id = t2.id`, each individual schema can't contain all the columns in it.
let children_merge_schema = DFSchemaRef::new(merge_schema(plan.inputs()));
let schemas = vec![plan.schema(), &children_merge_schema];
let info = schemas
.into_iter()
.fold(SimplifyContext::new(execution_props), |context, schema| {
context.with_schema(schema.clone())
Expand Down

0 comments on commit f76e667

Please sign in to comment.