Lordworms commented on issue #9495:
URL: 
https://github.com/apache/arrow-datafusion/issues/9495#issuecomment-1984954313

   Since We have so many Expr
   ```Rust
   pub enum Expr {
       /// An expression with a specific name.
       Alias(Alias),
       /// A named reference to a qualified filed in a schema.
       Column(Column),
       /// A named reference to a variable in a registry.
       ScalarVariable(DataType, Vec<String>),
       /// A constant value.
       Literal(ScalarValue),
       /// A binary expression such as "age > 21"
       BinaryExpr(BinaryExpr),
       /// LIKE expression
       Like(Like),
       /// LIKE expression that uses regular expressions
       SimilarTo(Like),
       /// Negation of an expression. The expression's type must be a boolean 
to make sense.
       Not(Box<Expr>),
       /// True if argument is not NULL, false otherwise. This expression 
itself is never NULL.
       IsNotNull(Box<Expr>),
       /// True if argument is NULL, false otherwise. This expression itself is 
never NULL.
       IsNull(Box<Expr>),
       /// True if argument is true, false otherwise. This expression itself is 
never NULL.
       IsTrue(Box<Expr>),
       /// True if argument is  false, false otherwise. This expression itself 
is never NULL.
       IsFalse(Box<Expr>),
       /// True if argument is NULL, false otherwise. This expression itself is 
never NULL.
       IsUnknown(Box<Expr>),
       /// True if argument is FALSE or NULL, false otherwise. This expression 
itself is never NULL.
       IsNotTrue(Box<Expr>),
       /// True if argument is TRUE OR NULL, false otherwise. This expression 
itself is never NULL.
       IsNotFalse(Box<Expr>),
       /// True if argument is TRUE or FALSE, false otherwise. This expression 
itself is never NULL.
       IsNotUnknown(Box<Expr>),
       /// arithmetic negation of an expression, the operand must be of a 
signed numeric data type
       Negative(Box<Expr>),
       /// Returns the field of a [`arrow::array::ListArray`] or
       /// [`arrow::array::StructArray`] by index or range
       GetIndexedField(GetIndexedField),
       /// Whether an expression is between a given range.
       Between(Between),
       /// 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
       Case(Case),
       /// 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.
       Cast(Cast),
       /// 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.
       TryCast(TryCast),
       /// A sort expression, that can be used to sort values.
       Sort(Sort),
       /// Represents the call of a scalar function with a set of arguments.
       ScalarFunction(ScalarFunction),
       /// Represents the call of an aggregate built-in function with arguments.
       AggregateFunction(AggregateFunction),
       /// Represents the call of a window function with arguments.
       WindowFunction(WindowFunction),
       /// Returns whether the list contains the expr value.
       InList(InList),
       /// EXISTS subquery
       Exists(Exists),
       /// IN subquery
       InSubquery(InSubquery),
       /// Scalar subquery
       ScalarSubquery(Subquery),
       /// Represents a reference to all available fields in a specific schema,
       /// with an optional (schema) qualifier.
       ///
       /// This expr has to be resolved to a list of columns before translating 
logical
       /// plan into physical plan.
       Wildcard { qualifier: Option<String> },
       /// List of grouping set expressions. Only valid in the context of an 
aggregate
       /// GROUP BY expression list
       GroupingSet(GroupingSet),
       /// A place holder for parameters in a prepared statement
       /// (e.g. `$foo` or `$1`)
       Placeholder(Placeholder),
       /// A place holder which hold a reference to a qualified field
       /// in the outer query, used for correlated sub queries.
       OuterReferenceColumn(DataType, Column),
       /// Unnest expression
       Unnest(Unnest),
   }
   ```
   Guess we can use a Trait to split the workload. I'd like to pick up some of 
them


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to