Skip to content

Commit

Permalink
Add bindings for GetIndexedField
Browse files Browse the repository at this point in the history
  • Loading branch information
jdye64 committed Feb 23, 2023
1 parent fa0d9d0 commit 369a604
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 22 deletions.
39 changes: 19 additions & 20 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions datafusion/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
ScalarVariable,
Sort,
TableScan,
GetIndexedField,
)

__version__ = importlib_metadata.version(__name__)
Expand Down Expand Up @@ -81,6 +82,7 @@
"SimilarTo",
"ScalarVariable",
"Alias",
"GetIndexedField",
]


Expand Down
2 changes: 2 additions & 0 deletions datafusion/tests/test_imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
SimilarTo,
ScalarVariable,
Alias,
GetIndexedField,
)


Expand Down Expand Up @@ -87,6 +88,7 @@ def test_class_module_is_datafusion():
SimilarTo,
ScalarVariable,
Alias,
GetIndexedField,
]:
assert klass.__module__ == "datafusion.expr"

Expand Down
1 change: 1 addition & 0 deletions src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ pub mod binary_expr;
pub mod column;
pub mod empty_relation;
pub mod filter;
pub mod indexed_field;
pub mod like;
pub mod limit;
pub mod literal;
Expand Down
4 changes: 2 additions & 2 deletions src/expr/empty_relation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
}
Expand Down
69 changes: 69 additions & 0 deletions src/expr/indexed_field.rs
Original file line number Diff line number Diff line change
@@ -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)
}
}

0 comments on commit 369a604

Please sign in to comment.