8000 Add bindings for DropTable (#283) · chenqin/arrow-datafusion-python@7a5f183 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7a5f183

Browse files
authored
Add bindings for DropTable (apache#283)
1 parent 53d75b3 commit 7a5f183

File tree

4 files changed

+95
-0
lines changed

4 files changed

+95
-0
lines changed

datafusion/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
Extension,
8383
CreateView,
8484
Distinct,
85+
DropTable,
8586
)
8687

8788
__version__ = importlib_metadata.version(__name__)
@@ -139,6 +140,7 @@
139140
"CreateMemoryTable",
140141
"CreateView",
141142
"Distinct",
143+
"DropTable",
142144
]
143145

144146

datafusion/tests/test_imports.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
CreateMemoryTable,
8484
CreateView,
8585
Distinct,
86+
DropTable,
8687
)
8788

8889

@@ -155,6 +156,7 @@ def test_class_module_is_datafusion():
155156
CreateMemoryTable,
156157
CreateView,
157158
Distinct,
159+
DropTable,
158160
]:
159161
assert klass.__module__ == "datafusion.expr"
160162

src/expr.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub mod create_memory_table;
5151
pub mod create_view;
5252
pub mod cross_join;
5353
pub mod distinct;
54+
pub mod drop_table;
5455
pub mod empty_relation;
5556
pub mod exists;
5657
pub mod explain;
@@ -285,5 +286,6 @@ pub(crate) fn init_module(m: &PyModule) -> PyResult<()> {
285286
m.add_class::<create_view::PyCreateView>()?;
286287
m.add_class::<distinct::PyDistinct>()?;
287288
m.add_class::<subquery_alias::PySubqueryAlias>()?;
289+
m.add_class::<drop_table::PyDropTable>()?;
288290
Ok(())
289291
}

src/expr/drop_table.rs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
use std::fmt::{self, Display, Formatter};
19+
20+
use datafusion_expr::logical_plan::DropTable;
21+
use pyo3::prelude::*;
22+
23+
use crate::sql::logical::PyLogicalPlan;
24+
25+
use super::logical_node::LogicalNode;
26+
27+
#[pyclass(name = "DropTable", module = "datafusion.expr", subclass)]
28+
#[derive(Clone)]
29+
pub struct PyDropTable {
30+
drop: DropTable,
31+
}
32+
33+
impl From<PyDropTable> for DropTable {
34+
fn from(drop: PyDropTable) -> Self {
35+
drop.drop
36+
}
37+
}
38+
39+
impl From<DropTable> for PyDropTable {
40+
fn from(drop: DropTable) -> PyDropTable {
41+
PyDropTable { drop }
42+
}
43+
}
44+
45+
impl Display for PyDropTable {
46+
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
47+
write!(
48+
f,
49+
"DropTable
50+
name: {:?}
51+
if_exists: {:?}
52+
schema: {:?}",
53+
&self.drop.name, &self.drop.if_exists, &self.drop.schema,
54+
)
55+
}
56+
}
57+
58+
#[pymethods]
59+
impl PyDropTable {
60+
fn name(&self) -> PyResult<String> {
61+
Ok(self.drop.name.to_string())
62+
}
63+
64+
fn input(&self) -> PyResult<Vec<PyLogicalPlan>> {
65+
Ok(Self::inputs(self))
66+
}
67+
68+
fn if_exists(&self) -> bool {
69+
self.drop.if_exists
70+
}
71+
72+
fn __repr__(&self) -> PyResult<String> {
73+
Ok(format!("DropTable({})", self))
74+
}
75+
76+
fn __name__(&self) -> PyResult<String> {
77+
Ok("DropTable".to_string())
78+
}
79+
}
80+
81+
impl LogicalNode for PyDropTable {
82+
fn inputs(&self) -> Vec<PyLogicalPlan> {
83+
vec![]
84+
}
85+
86+
fn to_variant(&self, py: Python) -> PyResult<PyObject> {
87+
Ok(self.clone().into_py(py))
88+
}
89+
}

0 commit comments

Comments
 (0)
0