MCPcopy Create free account
hub / github.com/apache/datafusion / create_physical_expr

Function create_physical_expr

datafusion/physical-expr/src/planner.rs:115–572  ·  view source on GitHub ↗
(
    e: &Expr,
    input_dfschema: &DFSchema,
    execution_props: &ExecutionProps,
)

Source from the content-addressed store, hash-verified

113/// to qualified or unqualified fields by name.
114#[cfg_attr(feature = "recursive_protection", recursive::recursive)]
115pub fn create_physical_expr(
116 e: &Expr,
117 input_dfschema: &DFSchema,
118 execution_props: &ExecutionProps,
119) -> Result<Arc<dyn PhysicalExpr>> {
120 let input_schema = input_dfschema.as_arrow();
121
122 match e {
123 Expr::Alias(Alias { expr, metadata, .. }) => {
124 if let Expr::Literal(v, prior_metadata) = expr.as_ref() {
125 let new_metadata = FieldMetadata::merge_options(
126 prior_metadata.as_ref(),
127 metadata.as_ref(),
128 );
129 Ok(Arc::new(Literal::new_with_metadata(
130 v.clone(),
131 new_metadata,
132 )))
133 } else {
134 Ok(create_physical_expr(expr, input_dfschema, execution_props)?)
135 }
136 }
137 Expr::Column(c) => {
138 let idx = input_dfschema.index_of_column(c)?;
139 Ok(Arc::new(Column::new(&c.name, idx)))
140 }
141 Expr::Literal(value, metadata) => Ok(Arc::new(Literal::new_with_metadata(
142 value.clone(),
143 metadata.clone(),
144 ))),
145 Expr::ScalarVariable(_, variable_names) => {
146 if is_system_variables(variable_names) {
147 match execution_props.get_var_provider(VarType::System) {
148 Some(provider) => {
149 let scalar_value = provider.get_value(variable_names.clone())?;
150 Ok(Arc::new(Literal::new(scalar_value)))
151 }
152 _ => plan_err!("No system variable provider found"),
153 }
154 } else {
155 match execution_props.get_var_provider(VarType::UserDefined) {
156 Some(provider) => {
157 let scalar_value = provider.get_value(variable_names.clone())?;
158 Ok(Arc::new(Literal::new(scalar_value)))
159 }
160 _ => plan_err!("No user defined variable provider found"),
161 }
162 }
163 }
164 Expr::IsTrue(expr) => {
165 let binary_op = binary_expr(
166 expr.as_ref().clone(),
167 Operator::IsNotDistinctFrom,
168 lit(true),
169 );
170 create_physical_expr(&binary_op, input_dfschema, execution_props)
171 }
172 Expr::IsNotTrue(expr) => {

Callers 15

create_pruning_predicateFunction · 0.85
type_coercion_demoFunction · 0.85
create_physical_exprsFunction · 0.85
logical2physicalFunction · 0.85
lower_cast_exprFunction · 0.85
buildMethod · 0.85

Calls 15

newFunction · 0.85
is_system_variablesFunction · 0.85
binaryFunction · 0.85
create_physical_exprsFunction · 0.85
cast_with_target_fieldFunction · 0.85
negativeFunction · 0.85
as_arrowMethod · 0.80
index_of_columnMethod · 0.80
get_var_providerMethod · 0.80
collectMethod · 0.80
to_fieldMethod · 0.80
strip_prefixMethod · 0.80

Used in the wild real call sites across dependent graphs

searching dependent graphs…