This is an automated email from the ASF dual-hosted git repository.

agrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion-python.git


The following commit(s) were added to refs/heads/main by this push:
     new bdcbb9f  Make expr member of PyExpr public (#375)
bdcbb9f is described below

commit bdcbb9f12e59ee863c418fdf21f64182aab66b11
Author: Jeremy Dyer <jdy...@gmail.com>
AuthorDate: Tue May 9 08:39:50 2023 -0400

    Make expr member of PyExpr public (#375)
---
 src/common/data_type.rs | 11 +++++++++++
 src/expr.rs             | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/src/common/data_type.rs b/src/common/data_type.rs
index a9b0d17..d55a0e8 100644
--- a/src/common/data_type.rs
+++ b/src/common/data_type.rs
@@ -21,6 +21,17 @@ use pyo3::prelude::*;
 
 use crate::errors::py_datafusion_err;
 
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+#[pyclass(name = "RexType", module = "datafusion.common")]
+pub enum RexType {
+    Alias,
+    Literal,
+    Call,
+    Reference,
+    ScalarSubquery,
+    Other,
+}
+
 /// These bindings are tying together several disparate systems.
 /// You have SQL types for the SQL strings and RDBMS systems itself.
 /// Rust types for the DataFusion code
diff --git a/src/expr.rs b/src/expr.rs
index 7c80d0d..4ada4c1 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -22,6 +22,7 @@ use datafusion::arrow::datatypes::DataType;
 use datafusion::arrow::pyarrow::PyArrowType;
 use datafusion_expr::{col, lit, Cast, Expr, GetIndexedField};
 
+use crate::common::data_type::RexType;
 use crate::errors::py_runtime_err;
 use crate::expr::aggregate_expr::PyAggregateFunction;
 use crate::expr::binary_expr::PyBinaryExpr;
@@ -83,7 +84,7 @@ pub mod union;
 #[pyclass(name = "Expr", module = "datafusion.expr", subclass)]
 #[derive(Debug, Clone)]
 pub struct PyExpr {
-    pub(crate) expr: Expr,
+    pub expr: Expr,
 }
 
 impl From<PyExpr> for Expr {
@@ -228,6 +229,51 @@ impl PyExpr {
         let expr = Expr::Cast(Cast::new(Box::new(self.expr.clone()), to.0));
         expr.into()
     }
+
+    /// A Rex (Row Expression) specifies a single row of data. That 
specification
+    /// could include user defined functions or types. RexType identifies the 
row
+    /// as one of the possible valid `RexTypes`.
+    pub fn rex_type(&self) -> PyResult<RexType> {
+        Ok(match self.expr {
+            Expr::Alias(..) => RexType::Alias,
+            Expr::Column(..) | Expr::QualifiedWildcard { .. } | 
Expr::GetIndexedField { .. } => {
+                RexType::Reference
+            }
+            Expr::ScalarVariable(..) | Expr::Literal(..) => RexType::Literal,
+            Expr::BinaryExpr { .. }
+            | Expr::Not(..)
+            | Expr::IsNotNull(..)
+            | Expr::Negative(..)
+            | Expr::IsNull(..)
+            | Expr::Like { .. }
+            | Expr::ILike { .. }
+            | Expr::SimilarTo { .. }
+            | Expr::Between { .. }
+            | Expr::Case { .. }
+            | Expr::Cast { .. }
+            | Expr::TryCast { .. }
+            | Expr::Sort { .. }
+            | Expr::ScalarFunction { .. }
+            | Expr::AggregateFunction { .. }
+            | Expr::WindowFunction { .. }
+            | Expr::AggregateUDF { .. }
+            | Expr::InList { .. }
+            | Expr::Wildcard
+            | Expr::ScalarUDF { .. }
+            | Expr::Exists { .. }
+            | Expr::InSubquery { .. }
+            | Expr::GroupingSet(..)
+            | Expr::IsTrue(..)
+            | Expr::IsFalse(..)
+            | Expr::IsUnknown(_)
+            | Expr::IsNotTrue(..)
+            | Expr::IsNotFalse(..)
+            | Expr::Placeholder { .. }
+            | Expr::OuterReferenceColumn(_, _)
+            | Expr::IsNotUnknown(_) => RexType::Call,
+            Expr::ScalarSubquery(..) => RexType::ScalarSubquery,
+        })
+    }
 }
 
 /// Initializes the `expr` module to match the pattern of `datafusion-expr` 
https://docs.rs/datafusion-expr/latest/datafusion_expr/

Reply via email to