Enum datafusion::prelude::Expr

source ·
pub enum Expr {
Show 37 variants Alias(Box<Expr, Global>, String), Column(Column), ScalarVariable(DataType, Vec<String, Global>), Literal(ScalarValue), BinaryExpr(BinaryExpr), Like(Like), ILike(Like), SimilarTo(Like), Not(Box<Expr, Global>), IsNotNull(Box<Expr, Global>), IsNull(Box<Expr, Global>), IsTrue(Box<Expr, Global>), IsFalse(Box<Expr, Global>), IsUnknown(Box<Expr, Global>), IsNotTrue(Box<Expr, Global>), IsNotFalse(Box<Expr, Global>), IsNotUnknown(Box<Expr, Global>), Negative(Box<Expr, Global>), GetIndexedField(GetIndexedField), Between(Between), Case(Case), Cast(Cast), TryCast(TryCast), Sort(Sort), ScalarFunction { fun: BuiltinScalarFunction, args: Vec<Expr, Global>, }, ScalarUDF { fun: Arc<ScalarUDF>, args: Vec<Expr, Global>, }, AggregateFunction(AggregateFunction), WindowFunction(WindowFunction), AggregateUDF { fun: Arc<AggregateUDF>, args: Vec<Expr, Global>, filter: Option<Box<Expr, Global>>, }, InList { expr: Box<Expr, Global>, list: Vec<Expr, Global>, negated: bool, }, Exists { subquery: Subquery, negated: bool, }, InSubquery { expr: Box<Expr, Global>, subquery: Subquery, negated: bool, }, ScalarSubquery(Subquery), Wildcard, QualifiedWildcard { qualifier: String, }, GroupingSet(GroupingSet), Placeholder { id: String, data_type: Option<DataType>, },
}
Expand description

Expr is a central struct of DataFusion’s query API, and represent logical expressions such as A + 1, or CAST(c1 AS int).

An Expr can compute its DataType and nullability, and has functions for building up complex expressions.

Examples

Create an expression c1 referring to column named “c1”

let expr = col("c1");
assert_eq!(expr, Expr::Column(Column::from_name("c1")));

Create the expression c1 + c2 to add columns “c1” and “c2” together

let expr = col("c1") + col("c2");

assert!(matches!(expr, Expr::BinaryExpr { ..} ));
if let Expr::BinaryExpr(binary_expr) = expr {
  assert_eq!(*binary_expr.left, col("c1"));
  assert_eq!(*binary_expr.right, col("c2"));
  assert_eq!(binary_expr.op, Operator::Plus);
}

Create expression c1 = 42 to compare the value in column “c1” to the literal value 42

let expr = col("c1").eq(lit(42_i32));

assert!(matches!(expr, Expr::BinaryExpr { .. } ));
if let Expr::BinaryExpr(binary_expr) = expr {
  assert_eq!(*binary_expr.left, col("c1"));
  let scalar = ScalarValue::Int32(Some(42));
  assert_eq!(*binary_expr.right, Expr::Literal(scalar));
  assert_eq!(binary_expr.op, Operator::Eq);
}

Variants§

§

Alias(Box<Expr, Global>, String)

An expression with a specific name.

§

Column(Column)

A named reference to a qualified filed in a schema.

§

ScalarVariable(DataType, Vec<String, Global>)

A named reference to a variable in a registry.

§

Literal(ScalarValue)

A constant value.

§

BinaryExpr(BinaryExpr)

A binary expression such as “age > 21”

§

Like(Like)

LIKE expression

§

ILike(Like)

Case-insensitive LIKE expression

§

SimilarTo(Like)

LIKE expression that uses regular expressions

§

Not(Box<Expr, Global>)

Negation of an expression. The expression’s type must be a boolean to make sense.

§

IsNotNull(Box<Expr, Global>)

Whether an expression is not Null. This expression is never null.

§

IsNull(Box<Expr, Global>)

Whether an expression is Null. This expression is never null.

§

IsTrue(Box<Expr, Global>)

Whether an expression is True. Boolean operation

§

IsFalse(Box<Expr, Global>)

Whether an expression is False. Boolean operation

§

IsUnknown(Box<Expr, Global>)

Whether an expression is Unknown. Boolean operation

§

IsNotTrue(Box<Expr, Global>)

Whether an expression is not True. Boolean operation

§

IsNotFalse(Box<Expr, Global>)

Whether an expression is not False. Boolean operation

§

IsNotUnknown(Box<Expr, Global>)

Whether an expression is not Unknown. Boolean operation

§

Negative(Box<Expr, Global>)

arithmetic negation of an expression, the operand must be of a signed numeric data type

§

GetIndexedField(GetIndexedField)

Returns the field of a [arrow::array::ListArray] or [arrow::array::StructArray] by key

§

Between(Between)

Whether an expression is between a given range.

§

Case(Case)

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

§

Cast(Cast)

Casts the expression to a given type and will return a runtime error if the expression cannot be cast. This expression is guaranteed to have a fixed type.

§

TryCast(TryCast)

Casts the expression to a given type and will return a null value if the expression cannot be cast. This expression is guaranteed to have a fixed type.

§

Sort(Sort)

A sort expression, that can be used to sort values.

§

ScalarFunction

Fields

§fun: BuiltinScalarFunction

The function

§args: Vec<Expr, Global>

List of expressions to feed to the functions as arguments

Represents the call of a built-in scalar function with a set of arguments.

§

ScalarUDF

Fields

§fun: Arc<ScalarUDF>

The function

§args: Vec<Expr, Global>

List of expressions to feed to the functions as arguments

Represents the call of a user-defined scalar function with arguments.

§

AggregateFunction(AggregateFunction)

Represents the call of an aggregate built-in function with arguments.

§

WindowFunction(WindowFunction)

Represents the call of a window function with arguments.

§

AggregateUDF

Fields

§fun: Arc<AggregateUDF>

The function

§args: Vec<Expr, Global>

List of expressions to feed to the functions as arguments

§filter: Option<Box<Expr, Global>>

Optional filter applied prior to aggregating

aggregate function

§

InList

Fields

§expr: Box<Expr, Global>

The expression to compare

§list: Vec<Expr, Global>

A list of values to compare against

§negated: bool

Whether the expression is negated

Returns whether the list contains the expr value.

§

Exists

Fields

§subquery: Subquery

subquery that will produce a single column of data

§negated: bool

Whether the expression is negated

EXISTS subquery

§

InSubquery

Fields

§expr: Box<Expr, Global>

The expression to compare

§subquery: Subquery

subquery that will produce a single column of data to compare against

§negated: bool

Whether the expression is negated

IN subquery

§

ScalarSubquery(Subquery)

Scalar subquery

§

Wildcard

Represents a reference to all fields in a schema.

§

QualifiedWildcard

Fields

§qualifier: String

Represents a reference to all fields in a specific schema.

§

GroupingSet(GroupingSet)

List of grouping set expressions. Only valid in the context of an aggregate GROUP BY expression list

§

Placeholder

Fields

§id: String

The identifier of the parameter (e.g, $1 or $foo)

§data_type: Option<DataType>

The type the parameter will be filled in with

A place holder for parameters in a prepared statement (e.g. $foo or $1)

Implementations§

source§

impl Expr

source

pub fn display_name(&self) -> Result<String, DataFusionError>

Returns the name of this expression as it should appear in a schema. This name will not include any CAST expressions.

source

pub fn name(&self) -> Result<String, DataFusionError>

👎Deprecated since 14.0.0: please use display_name instead

Returns the name of this expression as it should appear in a schema. This name will not include any CAST expressions.

source

pub fn canonical_name(&self) -> String

Returns a full and complete string representation of this expression.

source

pub fn variant_name(&self) -> &str

Return String representation of the variant represented by self Useful for non-rust based bindings

source

pub fn eq(self, other: Expr) -> Expr

Return self == other

source

pub fn not_eq(self, other: Expr) -> Expr

Return self != other

source

pub fn gt(self, other: Expr) -> Expr

Return self > other

source

pub fn gt_eq(self, other: Expr) -> Expr

Return self >= other

source

pub fn lt(self, other: Expr) -> Expr

Return self < other

source

pub fn lt_eq(self, other: Expr) -> Expr

Return self <= other

source

pub fn and(self, other: Expr) -> Expr

Return self && other

source

pub fn or(self, other: Expr) -> Expr

Return self || other

source

pub fn not(self) -> Expr

Return !self

source

pub fn modulus(self, other: Expr) -> Expr

Calculate the modulus of two expressions. Return self % other

source

pub fn like(self, other: Expr) -> Expr

Return self LIKE other

source

pub fn not_like(self, other: Expr) -> Expr

Return self NOT LIKE other

source

pub fn ilike(self, other: Expr) -> Expr

Return self ILIKE other

source

pub fn not_ilike(self, other: Expr) -> Expr

Return self NOT ILIKE other

source

pub fn alias(self, name: impl Into<String>) -> Expr

Return self AS name alias expression

source

pub fn unalias(self) -> Expr

Remove an alias from an expression if one exists.

source

pub fn in_list(self, list: Vec<Expr, Global>, negated: bool) -> Expr

Return self IN <list> if negated is false, otherwise return self NOT IN <list>.a

source

pub fn is_null(self) -> Expr

Return `IsNull(Box(self))

source

pub fn is_not_null(self) -> Expr

Return `IsNotNull(Box(self))

source

pub fn sort(self, asc: bool, nulls_first: bool) -> Expr

Create a sort expression from an existing expression.

let sort_expr = col("foo").sort(true, true); // SORT ASC NULLS_FIRST
source

pub fn is_true(self) -> Expr

Return IsTrue(Box(self))

source

pub fn is_not_true(self) -> Expr

Return IsNotTrue(Box(self))

source

pub fn is_false(self) -> Expr

Return IsFalse(Box(self))

source

pub fn is_not_false(self) -> Expr

Return IsNotFalse(Box(self))

source

pub fn is_unknown(self) -> Expr

Return IsUnknown(Box(self))

source

pub fn is_not_unknown(self) -> Expr

Return IsNotUnknown(Box(self))

source

pub fn try_into_col(&self) -> Result<Column, DataFusionError>

source

pub fn to_columns( &self ) -> Result<HashSet<Column, RandomState>, DataFusionError>

Return all referenced columns of this expression.

Trait Implementations§

source§

impl Add<Expr> for Expr

§

type Output = Expr

The resulting type after applying the + operator.
source§

fn add(self, rhs: Expr) -> Expr

Performs the + operation. Read more
source§

impl Clone for Expr

source§

fn clone(&self) -> Expr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Expr

Format expressions for display as part of a logical plan. In many cases, this will produce similar output to Expr.name() except that column names will be prefixed with ‘#’.

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Display for Expr

Format expressions for display as part of a logical plan. In many cases, this will produce similar output to Expr.name() except that column names will be prefixed with ‘#’.

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Div<Expr> for Expr

§

type Output = Expr

The resulting type after applying the / operator.
source§

fn div(self, rhs: Expr) -> Expr

Performs the / operation. Read more
source§

impl ExprRewritable for Expr

source§

fn rewrite<R>(self, rewriter: &mut R) -> Result<Expr, DataFusionError>where R: ExprRewriter<Expr>,

see comments on ExprRewritable for details

source§

impl ExprSchemable for Expr

source§

fn get_type<S>(&self, schema: &S) -> Result<DataType, DataFusionError>where S: ExprSchema,

Returns the [arrow::datatypes::DataType] of the expression based on ExprSchema

Note: DFSchema implements ExprSchema.

Errors

This function errors when it is not possible to compute its [arrow::datatypes::DataType]. This happens when e.g. the expression refers to a column that does not exist in the schema, or when the expression is incorrectly typed (e.g. [utf8] + [bool]).

source§

fn nullable<S>(&self, input_schema: &S) -> Result<bool, DataFusionError>where S: ExprSchema,

Returns the nullability of the expression based on ExprSchema.

Note: DFSchema implements ExprSchema.

Errors

This function errors when it is not possible to compute its nullability. This happens when the expression refers to a column that does not exist in the schema.

source§

fn to_field(&self, input_schema: &DFSchema) -> Result<DFField, DataFusionError>

Returns a [arrow::datatypes::Field] compatible with this expression.

So for example, a projected expression col(c1) + col(c2) is placed in an output field named col(“c1 + c2”)

source§

fn cast_to<S>( self, cast_to_type: &DataType, schema: &S ) -> Result<Expr, DataFusionError>where S: ExprSchema,

Wraps this expression in a cast to a target [arrow::datatypes::DataType].

Errors

This function errors when it is impossible to cast the expression to the target [arrow::datatypes::DataType].

source§

impl ExprVisitable for Expr

source§

fn accept<V>(&self, visitor: V) -> Result<V, DataFusionError>where V: ExpressionVisitor<Expr>,

Performs a depth first walk of an expression and its children, see ExpressionVisitor for more details

source§

impl Hash for Expr

source§

fn hash<__H>(&self, state: &mut __H)where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Mul<Expr> for Expr

§

type Output = Expr

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Expr) -> Expr

Performs the * operation. Read more
source§

impl Not for Expr

§

type Output = Expr

The resulting type after applying the ! operator.
source§

fn not(self) -> <Expr as Not>::Output

Performs the unary ! operation. Read more
source§

impl PartialEq<Expr> for Expr

source§

fn eq(&self, other: &Expr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<Expr> for Expr

source§

fn partial_cmp(&self, other: &Expr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Rem<Expr> for Expr

§

type Output = Expr

The resulting type after applying the % operator.
source§

fn rem(self, rhs: Expr) -> Expr

Performs the % operation. Read more
source§

impl Sub<Expr> for Expr

§

type Output = Expr

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Expr) -> Expr

Performs the - operation. Read more
source§

impl Eq for Expr

source§

impl StructuralEq for Expr

source§

impl StructuralPartialEq for Expr

Auto Trait Implementations§

§

impl !RefUnwindSafe for Expr

§

impl Send for Expr

§

impl Sync for Expr

§

impl Unpin for Expr

§

impl !UnwindSafe for Expr

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for Twhere T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,