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 f23a1a3 Add bindings for GetIndexedField (#227)
f23a1a3 is described below
commit f23a1a33780bff07ad1c906dabbd3cdc3bc1e9a2
Author: Jeremy Dyer <[email protected]>
AuthorDate: Thu Feb 23 16:35:56 2023 -0500
Add bindings for GetIndexedField (#227)
* Add bindings for GetIndexedField
* Fix unfinished merge conflicts
* pytest fixes
---
datafusion/__init__.py | 2 ++
datafusion/tests/test_imports.py | 2 ++
src/expr.rs | 2 ++
src/expr/empty_relation.rs | 4 +--
src/expr/indexed_field.rs | 69 ++++++++++++++++++++++++++++++++++++++++
5 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/datafusion/__init__.py b/datafusion/__init__.py
index 748a291..2a81a4d 100644
--- a/datafusion/__init__.py
+++ b/datafusion/__init__.py
@@ -53,6 +53,7 @@ from .expr import (
ScalarVariable,
Sort,
TableScan,
+ GetIndexedField,
Not,
IsNotNull,
IsTrue,
@@ -91,6 +92,7 @@ __all__ = [
"SimilarTo",
"ScalarVariable",
"Alias",
+ "GetIndexedField",
"Not",
"IsNotNull",
"IsTrue",
diff --git a/datafusion/tests/test_imports.py b/datafusion/tests/test_imports.py
index 683b061..ccdfeff 100644
--- a/datafusion/tests/test_imports.py
+++ b/datafusion/tests/test_imports.py
@@ -49,6 +49,7 @@ from datafusion.expr import (
SimilarTo,
ScalarVariable,
Alias,
+ GetIndexedField,
Not,
IsNotNull,
IsTrue,
@@ -97,6 +98,7 @@ def test_class_module_is_datafusion():
SimilarTo,
ScalarVariable,
Alias,
+ GetIndexedField,
Not,
IsNotNull,
IsTrue,
diff --git a/src/expr.rs b/src/expr.rs
index 56f1633..3d184fa 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -47,6 +47,7 @@ pub mod bool_expr;
pub mod column;
pub mod empty_relation;
pub mod filter;
+pub mod indexed_field;
pub mod like;
pub mod limit;
pub mod literal;
@@ -232,6 +233,7 @@ pub(crate) fn init_module(m: &PyModule) -> PyResult<()> {
m.add_class::<PyScalarVariable>()?;
m.add_class::<alias::PyAlias>()?;
m.add_class::<between::PyBetween>()?;
+ m.add_class::<indexed_field::PyGetIndexedField>()?;
// operators
m.add_class::<table_scan::PyTableScan>()?;
m.add_class::<projection::PyProjection>()?;
diff --git a/src/expr/empty_relation.rs b/src/expr/empty_relation.rs
index f3008d1..8b2621d 100644
--- a/src/expr/empty_relation.rs
+++ b/src/expr/empty_relation.rs
@@ -43,8 +43,8 @@ impl Display for PyEmptyRelation {
write!(
f,
"Empty Relation
- \nProduce One Row: {:?}
- \nSchema: {:?}",
+ Produce One Row: {:?}
+ Schema: {:?}",
&self.empty.produce_one_row, &self.empty.schema
)
}
diff --git a/src/expr/indexed_field.rs b/src/expr/indexed_field.rs
new file mode 100644
index 0000000..c986077
--- /dev/null
+++ b/src/expr/indexed_field.rs
@@ -0,0 +1,69 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+use crate::expr::PyExpr;
+use datafusion_expr::expr::GetIndexedField;
+use pyo3::prelude::*;
+use std::fmt::{Display, Formatter};
+
+use super::literal::PyLiteral;
+
+#[pyclass(name = "GetIndexedField", module = "datafusion.expr", subclass)]
+#[derive(Clone)]
+pub struct PyGetIndexedField {
+ indexed_field: GetIndexedField,
+}
+
+impl From<PyGetIndexedField> for GetIndexedField {
+ fn from(indexed_field: PyGetIndexedField) -> Self {
+ indexed_field.indexed_field
+ }
+}
+
+impl From<GetIndexedField> for PyGetIndexedField {
+ fn from(indexed_field: GetIndexedField) -> PyGetIndexedField {
+ PyGetIndexedField { indexed_field }
+ }
+}
+
+impl Display for PyGetIndexedField {
+ fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
+ write!(
+ f,
+ "GetIndexedField
+ Expr: {:?}
+ Key: {:?}",
+ &self.indexed_field.expr, &self.indexed_field.key
+ )
+ }
+}
+
+#[pymethods]
+impl PyGetIndexedField {
+ fn expr(&self) -> PyResult<PyExpr> {
+ Ok((*self.indexed_field.expr).clone().into())
+ }
+
+ fn key(&self) -> PyResult<PyLiteral> {
+ Ok(self.indexed_field.key.clone().into())
+ }
+
+ /// Get a String representation of this column
+ fn __repr__(&self) -> String {
+ format!("{}", self)
+ }
+}