Struct datafusion_physical_expr::expressions::CaseExpr
source · pub struct CaseExpr { /* private fields */ }
Expand description
The CASE expression is similar to a series of nested if/else and there are two forms that can be used. The first form consists of a series of boolean “when” expressions with corresponding “then” expressions, and an optional “else” expression.
CASE WHEN condition THEN result [WHEN …] [ELSE result] END
The second form uses a base expression and then a series of “when” clauses that match on a literal value.
CASE expression WHEN value THEN result [WHEN …] [ELSE result] END
Implementations§
source§impl CaseExpr
impl CaseExpr
sourcepub fn try_new(
expr: Option<Arc<dyn PhysicalExpr>>,
when_then_expr: Vec<(Arc<dyn PhysicalExpr>, Arc<dyn PhysicalExpr>)>,
else_expr: Option<Arc<dyn PhysicalExpr>>
) -> Result<Self>
pub fn try_new(
expr: Option<Arc<dyn PhysicalExpr>>,
when_then_expr: Vec<(Arc<dyn PhysicalExpr>, Arc<dyn PhysicalExpr>)>,
else_expr: Option<Arc<dyn PhysicalExpr>>
) -> Result<Self>
Create a new CASE WHEN expression
sourcepub fn expr(&self) -> &Option<Arc<dyn PhysicalExpr>>
pub fn expr(&self) -> &Option<Arc<dyn PhysicalExpr>>
Optional base expression that can be compared to literal values in the “when” expressions
sourcepub fn when_then_expr(
&self
) -> &[(Arc<dyn PhysicalExpr>, Arc<dyn PhysicalExpr>)]
pub fn when_then_expr(
&self
) -> &[(Arc<dyn PhysicalExpr>, Arc<dyn PhysicalExpr>)]
One or more when/then expressions
sourcepub fn else_expr(&self) -> Option<&Arc<dyn PhysicalExpr>>
pub fn else_expr(&self) -> Option<&Arc<dyn PhysicalExpr>>
Optional “else” expression
Trait Implementations§
source§impl PartialEq<dyn Any + 'static> for CaseExpr
impl PartialEq<dyn Any + 'static> for CaseExpr
source§impl PhysicalExpr for CaseExpr
impl PhysicalExpr for CaseExpr
source§fn data_type(&self, input_schema: &Schema) -> Result<DataType>
fn data_type(&self, input_schema: &Schema) -> Result<DataType>
Get the data type of this expression, given the schema of the input
source§fn nullable(&self, input_schema: &Schema) -> Result<bool>
fn nullable(&self, input_schema: &Schema) -> Result<bool>
Determine whether this expression is nullable, given the schema of the input
source§fn evaluate(&self, batch: &RecordBatch) -> Result<ColumnarValue>
fn evaluate(&self, batch: &RecordBatch) -> Result<ColumnarValue>
Evaluate an expression against a RecordBatch
source§fn children(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
fn children(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
Get a list of child PhysicalExpr that provide the input for this expr.
source§fn with_new_children(
self: Arc<Self>,
children: Vec<Arc<dyn PhysicalExpr>>
) -> Result<Arc<dyn PhysicalExpr>>
fn with_new_children(
self: Arc<Self>,
children: Vec<Arc<dyn PhysicalExpr>>
) -> Result<Arc<dyn PhysicalExpr>>
Returns a new PhysicalExpr where all children were replaced by new exprs.
source§fn evaluate_selection(
&self,
batch: &RecordBatch,
selection: &BooleanArray
) -> Result<ColumnarValue>
fn evaluate_selection(
&self,
batch: &RecordBatch,
selection: &BooleanArray
) -> Result<ColumnarValue>
Evaluate an expression against a RecordBatch after first applying a
validity array
source§fn analyze(&self, context: AnalysisContext) -> AnalysisContext
fn analyze(&self, context: AnalysisContext) -> AnalysisContext
Return the boundaries of this expression. This method (and all the
related APIs) are experimental and subject to change.