Skip to content
Draft
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: 2 additions & 0 deletions datafusion-examples/examples/dataframe/cache_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use datafusion::error::Result;
use datafusion::execution::context::QueryPlanner;
use datafusion::execution::session_state::CacheFactory;
use datafusion::execution::{SessionState, SessionStateBuilder};
use datafusion::logical_expr::execution_props::SubqueryContext;
use datafusion::logical_expr::{
Extension, LogicalPlan, UserDefinedLogicalNode, UserDefinedLogicalNodeCore,
};
Expand Down Expand Up @@ -146,6 +147,7 @@ impl ExtensionPlanner for CacheNodePlanner {
logical_inputs: &[&LogicalPlan],
physical_inputs: &[Arc<dyn ExecutionPlan>],
session_state: &SessionState,
_subquery_ctx: &SubqueryContext,
) -> Result<Option<Arc<dyn ExecutionPlan>>> {
if let Some(cache_node) = node.as_any().downcast_ref::<CacheNode>() {
assert_eq!(logical_inputs.len(), 1, "Inconsistent number of inputs");
Expand Down
12 changes: 10 additions & 2 deletions datafusion-examples/examples/query_planning/expr_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ use datafusion::common::{ScalarValue, ToDFSchema};
use datafusion::error::Result;
use datafusion::functions_aggregate::first_last::first_value_udaf;
use datafusion::logical_expr::execution_props::ExecutionProps;
use datafusion::logical_expr::execution_props::SubqueryContext;
use datafusion::logical_expr::expr::BinaryExpr;
use datafusion::logical_expr::interval_arithmetic::Interval;
use datafusion::logical_expr::simplify::SimplifyContext;
Expand Down Expand Up @@ -541,8 +542,12 @@ fn type_coercion_demo() -> Result<()> {

// Evaluation with an expression that has not been type coerced cannot succeed.
let props = ExecutionProps::default();
let physical_expr =
datafusion::physical_expr::create_physical_expr(&expr, &df_schema, &props)?;
let physical_expr = datafusion::physical_expr::create_physical_expr(
&expr,
&df_schema,
&props,
&SubqueryContext::default(),
)?;
let e = physical_expr.evaluate(&batch).unwrap_err();
assert!(
e.find_root()
Expand All @@ -566,6 +571,7 @@ fn type_coercion_demo() -> Result<()> {
&coerced_expr,
&df_schema,
&props,
&SubqueryContext::default(),
)?;
assert!(physical_expr.evaluate(&batch).is_ok());

Expand All @@ -578,6 +584,7 @@ fn type_coercion_demo() -> Result<()> {
&coerced_expr,
&df_schema,
&props,
&SubqueryContext::default(),
)?;
assert!(physical_expr.evaluate(&batch).is_ok());

Expand Down Expand Up @@ -606,6 +613,7 @@ fn type_coercion_demo() -> Result<()> {
&coerced_expr,
&df_schema,
&props,
&SubqueryContext::default(),
)?;
assert!(physical_expr.evaluate(&batch).is_ok());

Expand Down
5 changes: 4 additions & 1 deletion datafusion-examples/examples/query_planning/pruning.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ use datafusion::common::pruning::PruningStatistics;
use datafusion::common::{DFSchema, ScalarValue};
use datafusion::error::Result;
use datafusion::execution::context::ExecutionProps;
use datafusion::logical_expr::execution_props::SubqueryContext;
use datafusion::physical_expr::create_physical_expr;
use datafusion::physical_optimizer::pruning::PruningPredicate;
use datafusion::prelude::*;
Expand Down Expand Up @@ -194,7 +195,9 @@ impl PruningStatistics for MyCatalog {
fn create_pruning_predicate(expr: Expr, schema: &SchemaRef) -> PruningPredicate {
let df_schema = DFSchema::try_from(Arc::clone(schema)).unwrap();
let props = ExecutionProps::new();
let physical_expr = create_physical_expr(&expr, &df_schema, &props).unwrap();
let physical_expr =
create_physical_expr(&expr, &df_schema, &props, &SubqueryContext::default())
.unwrap();
PruningPredicate::try_new(physical_expr, Arc::clone(schema)).unwrap()
}

Expand Down
2 changes: 2 additions & 0 deletions datafusion-examples/examples/relation_planner/table_sample.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ use datafusion_common::{
DFSchemaRef, DataFusionError, Result, Statistics, internal_err, not_impl_err,
plan_datafusion_err, plan_err,
};
use datafusion_expr::execution_props::SubqueryContext;
use datafusion_expr::{
UserDefinedLogicalNode, UserDefinedLogicalNodeCore,
logical_plan::{Extension, LogicalPlan, LogicalPlanBuilder},
Expand Down Expand Up @@ -587,6 +588,7 @@ impl ExtensionPlanner for TableSampleExtensionPlanner {
_logical_inputs: &[&LogicalPlan],
physical_inputs: &[Arc<dyn ExecutionPlan>],
_session_state: &SessionState,
_subquery_ctx: &SubqueryContext,
) -> Result<Option<Arc<dyn ExecutionPlan>>> {
let Some(sample_node) = node.as_any().downcast_ref::<TableSamplePlanNode>()
else {
Expand Down
5 changes: 3 additions & 2 deletions datafusion/catalog-listing/src/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use arrow::{
datatypes::{DataType, Field},
record_batch::RecordBatch,
};
use datafusion_expr::execution_props::ExecutionProps;
use datafusion_expr::execution_props::{ExecutionProps, SubqueryContext};
use futures::stream::FuturesUnordered;
use futures::{StreamExt, TryStreamExt, stream::BoxStream};
use log::{debug, trace};
Expand Down Expand Up @@ -328,7 +328,8 @@ pub fn filter_partitioned_file(

let filter = utils::conjunction(filters.iter().cloned()).unwrap_or_else(|| lit(true));
let props = ExecutionProps::new();
let expr = create_physical_expr(&filter, df_schema, &props)?;
let expr =
create_physical_expr(&filter, df_schema, &props, &SubqueryContext::default())?;

// Since we're only operating on a single file, our batch and resulting "array" holds only one
// value indicating if the input file matches the provided filters
Expand Down
3 changes: 2 additions & 1 deletion datafusion/catalog-listing/src/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use datafusion_execution::cache::cache_manager::{
CachedFileMetadata, FileStatisticsCache, SchemaFingerprint, TableScopedPath,
};
use datafusion_expr::dml::InsertOp;
use datafusion_expr::execution_props::ExecutionProps;
use datafusion_expr::execution_props::{ExecutionProps, SubqueryContext};
use datafusion_expr::{
Expr, Partitioning as LogicalPartitioning, TableProviderFilterPushDown, TableType,
};
Expand Down Expand Up @@ -614,6 +614,7 @@ impl TableProvider for ListingTable {
output_partitioning,
&df_schema,
state.execution_props(),
&SubqueryContext::default(),
)?
}
};
Expand Down
25 changes: 19 additions & 6 deletions datafusion/catalog/src/memory/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use datafusion_datasource::memory::{MemSink, MemorySourceConfig};
use datafusion_datasource::sink::DataSinkExec;
use datafusion_datasource::source::DataSourceExec;
use datafusion_expr::dml::InsertOp;
use datafusion_expr::execution_props::SubqueryContext;
use datafusion_expr::{Expr, SortExpr, TableType};
use datafusion_physical_expr::{
LexOrdering, PhysicalExpr, create_physical_expr, create_physical_sort_exprs,
Expand Down Expand Up @@ -209,8 +210,12 @@ impl TableProvider for MemTable {
let eqp = state.execution_props();
let mut file_sort_order = vec![];
for sort_exprs in sort_order.iter() {
let physical_exprs =
create_physical_sort_exprs(sort_exprs, &df_schema, eqp)?;
let physical_exprs = create_physical_sort_exprs(
sort_exprs,
&df_schema,
eqp,
&SubqueryContext::default(),
)?;
file_sort_order.extend(LexOrdering::new(physical_exprs));
}
source = source.try_with_sort_information(file_sort_order)?;
Expand Down Expand Up @@ -356,8 +361,12 @@ impl TableProvider for MemTable {
let physical_assignments: HashMap<String, Arc<dyn PhysicalExpr>> = assignments
.iter()
.map(|(name, expr)| {
let physical_expr =
create_physical_expr(expr, &df_schema, state.execution_props())?;
let physical_expr = create_physical_expr(
expr,
&df_schema,
state.execution_props(),
&SubqueryContext::default(),
)?;
Ok((name.clone(), physical_expr))
})
.collect::<Result<_>>()?;
Expand Down Expand Up @@ -470,8 +479,12 @@ fn evaluate_filters_to_mask(
let mut combined_mask: Option<BooleanArray> = None;

for filter_expr in filters {
let physical_expr =
create_physical_expr(filter_expr, df_schema, execution_props)?;
let physical_expr = create_physical_expr(
filter_expr,
df_schema,
execution_props,
&SubqueryContext::default(),
)?;

let result = physical_expr.evaluate(batch)?;
let array = result.into_array(batch.num_rows())?;
Expand Down
9 changes: 7 additions & 2 deletions datafusion/catalog/src/streaming.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ use std::sync::Arc;
use arrow::datatypes::SchemaRef;
use async_trait::async_trait;
use datafusion_common::{DFSchema, Result, plan_err};
use datafusion_expr::execution_props::SubqueryContext;
use datafusion_expr::{Expr, SortExpr, TableType};
use datafusion_physical_expr::equivalence::project_ordering;
use datafusion_physical_expr::projection::ProjectionMapping;
Expand Down Expand Up @@ -131,8 +132,12 @@ impl TableProvider for StreamingTable {
let df_schema = DFSchema::try_from(Arc::clone(&self.schema))?;
let eqp = state.execution_props();

let original_sort_exprs =
create_physical_sort_exprs(&self.sort_order, &df_schema, eqp)?;
let original_sort_exprs = create_physical_sort_exprs(
&self.sort_order,
&df_schema,
eqp,
&SubqueryContext::default(),
)?;

if let Some(p) = projection {
// When performing a projection, the output columns will not match
Expand Down
2 changes: 2 additions & 0 deletions datafusion/core/src/execution/context/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2383,6 +2383,7 @@ mod tests {
use arrow_schema::FieldRef;
use datafusion_common::DataFusionError;
use datafusion_common::datatype::DataTypeExt;
use datafusion_expr::execution_props::SubqueryContext;
use std::error::Error;
use std::path::PathBuf;

Expand Down Expand Up @@ -2851,6 +2852,7 @@ mod tests {
_expr: &Expr,
_input_dfschema: &DFSchema,
_session_state: &SessionState,
_subquery_ctx: &SubqueryContext,
) -> Result<Arc<dyn PhysicalExpr>> {
unimplemented!()
}
Expand Down
9 changes: 7 additions & 2 deletions datafusion/core/src/execution/session_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ use datafusion_execution::config::SessionConfig;
use datafusion_execution::runtime_env::RuntimeEnv;
#[cfg(feature = "sql")]
use datafusion_expr::TableSource;
use datafusion_expr::execution_props::ExecutionProps;
use datafusion_expr::execution_props::{ExecutionProps, SubqueryContext};
use datafusion_expr::expr_rewriter::FunctionRewrite;
use datafusion_expr::planner::ExprPlanner;
#[cfg(feature = "sql")]
Expand Down Expand Up @@ -798,7 +798,12 @@ impl SessionState {
.transform_up(|expr| rewrite.rewrite(expr, df_schema, config_options))?
.data;
}
create_physical_expr(&expr, df_schema, self.execution_props())
create_physical_expr(
&expr,
df_schema,
self.execution_props(),
&SubqueryContext::default(),
)
}

/// Return the session ID
Expand Down
Loading