pub struct ScalarSubqueryExpr { /* private fields */ }Expand description
A physical expression whose value is provided by a scalar subquery.
Subquery execution is handled by ScalarSubqueryExec, which stores the
result in a shared ScalarSubqueryResults container. This expression
simply reads from that container at the appropriate index.
Implementations§
Source§impl ScalarSubqueryExpr
impl ScalarSubqueryExpr
pub fn new( data_type: DataType, nullable: bool, index: SubqueryIndex, results: ScalarSubqueryResults, ) -> Self
pub fn results(&self) -> &ScalarSubqueryResults
pub fn data_type(&self) -> &DataType
was only used for proto serialization, which no longer needs it; use return_field for type/nullability. It will be removed in 61.0.0 or 6 months after 55.0.0 is released, whichever is longer.
pub fn nullable(&self) -> bool
was only used for proto serialization, which no longer needs it; use return_field for type/nullability. It will be removed in 61.0.0 or 6 months after 55.0.0 is released, whichever is longer.
Sourcepub fn index(&self) -> SubqueryIndex
👎Deprecated since 55.0.0: was only used for proto serialization, which no longer needs it. It will be removed in 61.0.0 or 6 months after 55.0.0 is released, whichever is longer.
pub fn index(&self) -> SubqueryIndex
was only used for proto serialization, which no longer needs it. It will be removed in 61.0.0 or 6 months after 55.0.0 is released, whichever is longer.
Returns the index of this subquery in the shared results container.
Source§impl ScalarSubqueryExpr
impl ScalarSubqueryExpr
Sourcepub fn try_from_proto(
node: &PhysicalExprNode,
_ctx: &PhysicalExprDecodeCtx<'_>,
results: &ScalarSubqueryResults,
) -> Result<Arc<dyn PhysicalExpr>>
Available on crate feature proto only.
pub fn try_from_proto( node: &PhysicalExprNode, _ctx: &PhysicalExprDecodeCtx<'_>, results: &ScalarSubqueryResults, ) -> Result<Arc<dyn PhysicalExpr>>
proto only.Reconstruct a ScalarSubqueryExpr from its protobuf representation.
Unlike other expressions, this takes a third argument: the shared
ScalarSubqueryResults container. That container is a runtime-only
Arc shared with the surrounding ScalarSubqueryExec and is not part of
the wire format, so it cannot be reconstructed here or carried on the
decode context (which lives in a crate that cannot depend on
datafusion-expr). The match arm in from_proto.rs fetches it from the
plan-level decode context and passes it in.
Trait Implementations§
Source§impl Debug for ScalarSubqueryExpr
impl Debug for ScalarSubqueryExpr
Source§impl Display for ScalarSubqueryExpr
impl Display for ScalarSubqueryExpr
impl Eq for ScalarSubqueryExpr
Source§impl Hash for ScalarSubqueryExpr
impl Hash for ScalarSubqueryExpr
Source§impl PartialEq for ScalarSubqueryExpr
impl PartialEq for ScalarSubqueryExpr
Source§impl PhysicalExpr for ScalarSubqueryExpr
impl PhysicalExpr for ScalarSubqueryExpr
Source§fn return_field(&self, _input_schema: &Schema) -> Result<FieldRef>
fn return_field(&self, _input_schema: &Schema) -> Result<FieldRef>
Source§fn evaluate(&self, _batch: &RecordBatch) -> Result<ColumnarValue>
fn evaluate(&self, _batch: &RecordBatch) -> Result<ColumnarValue>
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 get_properties(&self, _children: &[ExprProperties]) -> Result<ExprProperties>
fn get_properties(&self, _children: &[ExprProperties]) -> Result<ExprProperties>
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 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 data_type(&self, input_schema: &Schema) -> Result<DataType, DataFusionError>
fn data_type(&self, input_schema: &Schema) -> Result<DataType, DataFusionError>
Source§fn nullable(&self, input_schema: &Schema) -> Result<bool, DataFusionError>
fn nullable(&self, input_schema: &Schema) -> Result<bool, DataFusionError>
Source§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 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 Freeze for ScalarSubqueryExpr
impl RefUnwindSafe for ScalarSubqueryExpr
impl Send for ScalarSubqueryExpr
impl Sync for ScalarSubqueryExpr
impl Unpin for ScalarSubqueryExpr
impl UnsafeUnpin for ScalarSubqueryExpr
impl UnwindSafe for ScalarSubqueryExpr
Blanket Implementations§
impl<T> Allocation for T
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<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