pub struct TryCastExpr { /* private fields */ }Expand description
TRY_CAST expression casts an expression to a specific data type and returns NULL on invalid cast
Implementations§
Source§impl TryCastExpr
impl TryCastExpr
Sourcepub fn new(expr: Arc<dyn PhysicalExpr>, cast_type: DataType) -> Self
pub fn new(expr: Arc<dyn PhysicalExpr>, cast_type: DataType) -> Self
Create a new TryCastExpr using only a DataType.
This constructor creates a type-only cast where metadata is passed through from the source expression (with extension type keys stripped). TRY_CAST results are always nullable since failed casts return NULL.
Sourcepub fn new_with_target_field(
expr: Arc<dyn PhysicalExpr>,
target_field: FieldRef,
) -> Self
pub fn new_with_target_field( expr: Arc<dyn PhysicalExpr>, target_field: FieldRef, ) -> Self
Create a new TryCastExpr with an explicit target FieldRef.
The provided target_field determines the output characteristics:
- The field’s data type becomes the cast target type
- The field’s metadata is used exactly as provided
TRY_CAST results are always nullable since failed casts return NULL.
See TryCastExpr::new for type-only casts where source metadata should
pass through.
Sourcepub fn expr(&self) -> &Arc<dyn PhysicalExpr> ⓘ
pub fn expr(&self) -> &Arc<dyn PhysicalExpr> ⓘ
The expression to cast
Sourcepub fn target_metadata(&self) -> Option<&HashMap<String, String>>
pub fn target_metadata(&self) -> Option<&HashMap<String, String>>
Explicit metadata for the output field, or None to pass through source metadata.
Sourcepub fn target_field(&self) -> &FieldRef
pub fn target_field(&self) -> &FieldRef
The target field this cast was constructed with.
For a type-only cast this is a field synthesized from the target data type alone; only its data type is meaningful. TRY_CAST results are always nullable regardless of the target field’s nullability.
Source§impl TryCastExpr
impl TryCastExpr
Sourcepub fn try_from_proto(
node: &PhysicalExprNode,
ctx: &PhysicalExprDecodeCtx<'_>,
) -> Result<Arc<dyn PhysicalExpr>>
Available on crate feature proto only.
pub fn try_from_proto( node: &PhysicalExprNode, ctx: &PhysicalExprDecodeCtx<'_>, ) -> Result<Arc<dyn PhysicalExpr>>
proto only.Reconstruct a TryCastExpr from its protobuf representation.
Trait Implementations§
Source§impl Clone for TryCastExpr
impl Clone for TryCastExpr
Source§fn clone(&self) -> TryCastExpr
fn clone(&self) -> TryCastExpr
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TryCastExpr
impl Debug for TryCastExpr
Source§impl Display for TryCastExpr
impl Display for TryCastExpr
impl Eq for TryCastExpr
Source§impl Hash for TryCastExpr
impl Hash for TryCastExpr
Source§impl PartialEq for TryCastExpr
impl PartialEq for TryCastExpr
Source§impl PhysicalExpr for TryCastExpr
impl PhysicalExpr for TryCastExpr
Source§fn data_type(&self, _input_schema: &Schema) -> Result<DataType>
fn data_type(&self, _input_schema: &Schema) -> Result<DataType>
Source§fn nullable(&self, _input_schema: &Schema) -> Result<bool>
fn nullable(&self, _input_schema: &Schema) -> Result<bool>
Source§fn evaluate(&self, batch: &RecordBatch) -> Result<ColumnarValue>
fn evaluate(&self, batch: &RecordBatch) -> Result<ColumnarValue>
Source§fn return_field(&self, input_schema: &Schema) -> Result<FieldRef>
fn return_field(&self, input_schema: &Schema) -> Result<FieldRef>
Source§fn children(&self) -> Vec<&Arc<dyn PhysicalExpr>>
fn children(&self) -> Vec<&Arc<dyn PhysicalExpr>>
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>>
Source§fn fmt_sql(&self, f: &mut Formatter<'_>) -> Result
fn fmt_sql(&self, f: &mut Formatter<'_>) -> Result
PhysicalExpr in nice human readable “SQL” format Read moreSource§fn try_to_proto(
&self,
ctx: &PhysicalExprEncodeCtx<'_>,
) -> Result<Option<PhysicalExprNode>>
fn try_to_proto( &self, ctx: &PhysicalExprEncodeCtx<'_>, ) -> Result<Option<PhysicalExprNode>>
proto only.PhysicalExprNode proto message. Read moreSource§fn evaluate_selection(
&self,
batch: &RecordBatch,
selection: &BooleanArray,
) -> Result<ColumnarValue, DataFusionError>
fn evaluate_selection( &self, batch: &RecordBatch, selection: &BooleanArray, ) -> Result<ColumnarValue, DataFusionError>
Source§fn evaluate_bounds(
&self,
_children: &[&Interval],
) -> Result<Interval, DataFusionError>
fn evaluate_bounds( &self, _children: &[&Interval], ) -> Result<Interval, DataFusionError>
Source§fn propagate_constraints(
&self,
_interval: &Interval,
_children: &[&Interval],
) -> Result<Option<Vec<Interval>>, DataFusionError>
fn propagate_constraints( &self, _interval: &Interval, _children: &[&Interval], ) -> Result<Option<Vec<Interval>>, DataFusionError>
Source§fn evaluate_statistics(
&self,
children: &[&Distribution],
) -> Result<Distribution, DataFusionError>
fn evaluate_statistics( &self, children: &[&Distribution], ) -> Result<Distribution, DataFusionError>
Part of the unused Statistics V2 framework; see https://github.com/apache/datafusion/pull/22071
Source§fn propagate_statistics(
&self,
parent: &Distribution,
children: &[&Distribution],
) -> Result<Option<Vec<Distribution>>, DataFusionError>
fn propagate_statistics( &self, parent: &Distribution, children: &[&Distribution], ) -> Result<Option<Vec<Distribution>>, DataFusionError>
Part of the unused Statistics V2 framework; see https://github.com/apache/datafusion/pull/22071
Source§fn get_properties(
&self,
_children: &[ExprProperties],
) -> Result<ExprProperties, DataFusionError>
fn get_properties( &self, _children: &[ExprProperties], ) -> Result<ExprProperties, DataFusionError>
PhysicalExpr based on its
children’s properties (i.e. order and range), recursively aggregating
the information from its children. In cases where the PhysicalExpr
has no children (e.g., Literal or Column), these properties should
be specified externally, as the function defaults to unknown properties.Source§fn snapshot(&self) -> Result<Option<Arc<dyn PhysicalExpr>>, DataFusionError>
fn snapshot(&self) -> Result<Option<Arc<dyn PhysicalExpr>>, DataFusionError>
PhysicalExpr, if it is dynamic. Read moreSource§fn snapshot_generation(&self) -> u64
fn snapshot_generation(&self) -> u64
PhysicalExpr for snapshotting purposes.
The generation is an arbitrary u64 that can be used to track changes
in the state of the PhysicalExpr over time without having to do an exhaustive comparison.
This is useful to avoid unnecessary computation or serialization if there are no changes to the expression.
In particular, dynamic expressions that may change over time; this allows cheap checks for changes.
Static expressions that do not change over time should return 0, as does the default implementation.
You should not call this method directly as it does not handle recursion.
Instead use snapshot_generation to handle recursion and capture the
full state of the PhysicalExpr.Source§fn is_volatile_node(&self) -> bool
fn is_volatile_node(&self) -> bool
Source§fn placement(&self) -> ExpressionPlacement
fn placement(&self) -> ExpressionPlacement
Source§fn expression_id(&self) -> Option<u64>
fn expression_id(&self) -> Option<u64>
PhysicalExpr, if it
has one. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for TryCastExpr
impl !UnwindSafe for TryCastExpr
impl Freeze for TryCastExpr
impl Send for TryCastExpr
impl Sync for TryCastExpr
impl Unpin for TryCastExpr
impl UnsafeUnpin for TryCastExpr
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more