pub trait UserDefinedLogicalNodeCore:
Debug
+ Eq
+ Hash
+ Sized
+ Send
+ Sync
+ 'static {
// Required methods
fn name(&self) -> &str;
fn inputs(&self) -> Vec<&LogicalPlan>;
fn schema(&self) -> &DFSchemaRef;
fn expressions(&self) -> Vec<Expr>;
fn fmt_for_explain(&self, f: &mut Formatter<'_>) -> Result;
fn with_exprs_and_inputs(
&self,
exprs: Vec<Expr>,
inputs: Vec<LogicalPlan>,
) -> Result<Self>;
// Provided methods
fn prevent_predicate_push_down_columns(&self) -> HashSet<String> { ... }
fn from_template(&self, exprs: &[Expr], inputs: &[LogicalPlan]) -> Self { ... }
fn necessary_children_exprs(
&self,
_output_columns: &[usize],
) -> Option<Vec<Vec<usize>>> { ... }
}
Expand description
This trait facilitates implementation of the UserDefinedLogicalNode
.
See the example in user_defined_plan.rs for an example of how to use this extension API.
Required Methods§
sourcefn inputs(&self) -> Vec<&LogicalPlan>
fn inputs(&self) -> Vec<&LogicalPlan>
Return the logical plan’s inputs.
sourcefn schema(&self) -> &DFSchemaRef
fn schema(&self) -> &DFSchemaRef
Return the output schema of this logical plan node.
sourcefn expressions(&self) -> Vec<Expr>
fn expressions(&self) -> Vec<Expr>
Returns all expressions in the current logical plan node. This should not include expressions of any inputs (aka non-recursively). These expressions are used for optimizer passes and rewrites.
sourcefn fmt_for_explain(&self, f: &mut Formatter<'_>) -> Result
fn fmt_for_explain(&self, f: &mut Formatter<'_>) -> Result
Write a single line, human readable string to f
for use in explain plan.
For example: TopK: k=10
sourcefn with_exprs_and_inputs(
&self,
exprs: Vec<Expr>,
inputs: Vec<LogicalPlan>,
) -> Result<Self>
fn with_exprs_and_inputs( &self, exprs: Vec<Expr>, inputs: Vec<LogicalPlan>, ) -> Result<Self>
Create a new UserDefinedLogicalNode
with the specified children
and expressions. This function is used during optimization
when the plan is being rewritten and a new instance of the
UserDefinedLogicalNode
must be created.
Note that exprs and inputs are in the same order as the result of self.inputs and self.exprs.
So, `self.with_exprs_and_inputs(exprs, ..).expressions() == exprs
Provided Methods§
sourcefn prevent_predicate_push_down_columns(&self) -> HashSet<String>
fn prevent_predicate_push_down_columns(&self) -> HashSet<String>
A list of output columns (e.g. the names of columns in self.schema()) for which predicates can not be pushed below this node without changing the output.
By default, this returns all columns and thus prevents any predicates from being pushed below this node.
fn from_template(&self, exprs: &[Expr], inputs: &[LogicalPlan]) -> Self
sourcefn necessary_children_exprs(
&self,
_output_columns: &[usize],
) -> Option<Vec<Vec<usize>>>
fn necessary_children_exprs( &self, _output_columns: &[usize], ) -> Option<Vec<Vec<usize>>>
Returns the necessary input columns for this node required to compute the columns in the output schema
This is used for projection push-down when DataFusion has determined that only a subset of the output columns of this node are needed by its parents. This API is used to tell DataFusion which, if any, of the input columns are no longer needed.
Return None
, the default, if this information can not be determined.
Returns Some(_)
with the column indices for each child of this node that are
needed to compute output_columns