pub trait UserDefinedLogicalNodeCore:
Sized
+ Debug
+ Eq
+ PartialOrd
+ Hash
+ Send
+ Sync
+ 'static {
// Required methods
fn name(&self) -> &str;
fn inputs(&self) -> Vec<&LogicalPlan>;
fn schema(&self) -> &Arc<DFSchema>;
fn expressions(&self) -> Vec<Expr>;
fn fmt_for_explain(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
fn with_exprs_and_inputs(
&self,
exprs: Vec<Expr>,
inputs: Vec<LogicalPlan>,
) -> Result<Self, DataFusionError>;
// Provided methods
fn check_invariants(
&self,
_check: InvariantLevel,
_plan: &LogicalPlan,
) -> Result<(), DataFusionError> { ... }
fn prevent_predicate_push_down_columns(&self) -> HashSet<String> { ... }
fn necessary_children_exprs(
&self,
_output_columns: &[usize],
) -> Option<Vec<Vec<usize>>> { ... }
fn supports_limit_pushdown(&self) -> bool { ... }
}
Expand description Source
Return the plan’s name.
SourceReturn the logical plan’s inputs.
SourceReturn the output schema of this logical plan node.
SourceReturns 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.
SourceWrite a single line, human readable string to f
for use in explain plan.
For example: TopK: k=10
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
SourcePerform check of invariants for the extension node.
This is the default implementation for extension nodes.
SourceA 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.
SourceReturns 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
Returns true
if a limit can be safely pushed down through this UserDefinedLogicalNode
node.
If this method returns true
, and the query plan contains a limit at the output of this node, DataFusion will push the limit to the input of this node.
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4