@@ -19,6 +19,7 @@ use datafusion::logical_expr::utils::exprlist_to_fields;
19
19
use datafusion:: logical_expr:: {
20
20
ExprFuncBuilder , ExprFunctionExt , LogicalPlan , WindowFunctionDefinition ,
21
21
} ;
22
+ use pyo3:: IntoPyObjectExt ;
22
23
use pyo3:: { basic:: CompareOp , prelude:: * } ;
23
24
use std:: convert:: { From , Into } ;
24
25
use std:: sync:: Arc ;
@@ -126,35 +127,35 @@ pub fn py_expr_list(expr: &[Expr]) -> PyResult<Vec<PyExpr>> {
126
127
#[ pymethods]
127
128
impl PyExpr {
128
129
/// Return the specific expression
129
- fn to_variant ( & self , py : Python ) -> PyResult < PyObject > {
130
+ fn to_variant < ' py > ( & self , py : Python < ' py > ) -> PyResult < Bound < ' py , PyAny > > {
130
131
Python :: with_gil ( |_| {
131
132
match & self . expr {
132
- Expr :: Alias ( alias) => Ok ( PyAlias :: from ( alias. clone ( ) ) . into_py ( py) ) ,
133
- Expr :: Column ( col) => Ok ( PyColumn :: from ( col. clone ( ) ) . into_py ( py) ) ,
133
+ Expr :: Alias ( alias) => Ok ( PyAlias :: from ( alias. clone ( ) ) . into_bound_py_any ( py) ? ) ,
134
+ Expr :: Column ( col) => Ok ( PyColumn :: from ( col. clone ( ) ) . into_bound_py_any ( py) ? ) ,
134
135
Expr :: ScalarVariable ( data_type, variables) => {
135
- Ok ( PyScalarVariable :: new ( data_type, variables) . into_py ( py) )
136
+ Ok ( PyScalarVariable :: new ( data_type, variables) . into_bound_py_any ( py) ? )
136
137
}
137
- Expr :: Like ( value) => Ok ( PyLike :: from ( value. clone ( ) ) . into_py ( py) ) ,
138
- Expr :: Literal ( value) => Ok ( PyLiteral :: from ( value. clone ( ) ) . into_py ( py) ) ,
139
- Expr :: BinaryExpr ( expr) => Ok ( PyBinaryExpr :: from ( expr. clone ( ) ) . into_py ( py) ) ,
140
- Expr :: Not ( expr) => Ok ( PyNot :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
141
- Expr :: IsNotNull ( expr) => Ok ( PyIsNotNull :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
142
- Expr :: IsNull ( expr) => Ok ( PyIsNull :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
143
- Expr :: IsTrue ( expr) => Ok ( PyIsTrue :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
144
- Expr :: IsFalse ( expr) => Ok ( PyIsFalse :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
145
- Expr :: IsUnknown ( expr) => Ok ( PyIsUnknown :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
146
- Expr :: IsNotTrue ( expr) => Ok ( PyIsNotTrue :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
147
- Expr :: IsNotFalse ( expr) => Ok ( PyIsNotFalse :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
148
- Expr :: IsNotUnknown ( expr) => Ok ( PyIsNotUnknown :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
149
- Expr :: Negative ( expr) => Ok ( PyNegative :: new ( * expr. clone ( ) ) . into_py ( py) ) ,
138
+ Expr :: Like ( value) => Ok ( PyLike :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
139
+ Expr :: Literal ( value) => Ok ( PyLiteral :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
140
+ Expr :: BinaryExpr ( expr) => Ok ( PyBinaryExpr :: from ( expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
141
+ Expr :: Not ( expr) => Ok ( PyNot :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
142
+ Expr :: IsNotNull ( expr) => Ok ( PyIsNotNull :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
143
+ Expr :: IsNull ( expr) => Ok ( PyIsNull :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
144
+ Expr :: IsTrue ( expr) => Ok ( PyIsTrue :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
145
+ Expr :: IsFalse ( expr) => Ok ( PyIsFalse :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
146
+ Expr :: IsUnknown ( expr) => Ok ( PyIsUnknown :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
147
+ Expr :: IsNotTrue ( expr) => Ok ( PyIsNotTrue :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
148
+ Expr :: IsNotFalse ( expr) => Ok ( PyIsNotFalse :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
149
+ Expr :: IsNotUnknown ( expr) => Ok ( PyIsNotUnknown :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
150
+ Expr :: Negative ( expr) => Ok ( PyNegative :: new ( * expr. clone ( ) ) . into_bound_py_any ( py) ? ) ,
150
151
Expr :: AggregateFunction ( expr) => {
151
- Ok ( PyAggregateFunction :: from ( expr. clone ( ) ) . into_py ( py) )
152
+ Ok ( PyAggregateFunction :: from ( expr. clone ( ) ) . into_bound_py_any ( py) ? )
152
153
}
153
- Expr :: SimilarTo ( value) => Ok ( PySimilarTo :: from ( value. clone ( ) ) . into_py ( py) ) ,
154
- Expr :: Between ( value) => Ok ( between:: PyBetween :: from ( value. clone ( ) ) . into_py ( py) ) ,
155
- Expr :: Case ( value) => Ok ( case:: PyCase :: from ( value. clone ( ) ) . into_py ( py) ) ,
156
- Expr :: Cast ( value) => Ok ( cast:: PyCast :: from ( value. clone ( ) ) . into_py ( py) ) ,
157
- Expr :: TryCast ( value) => Ok ( cast:: PyTryCast :: from ( value. clone ( ) ) . into_py ( py) ) ,
154
+ Expr :: SimilarTo ( value) => Ok ( PySimilarTo :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
155
+ Expr :: Between ( value) => Ok ( between:: PyBetween :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
156
+ Expr :: Case ( value) => Ok ( case:: PyCase :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
157
+ Expr :: Cast ( value) => Ok ( cast:: PyCast :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
158
+ Expr :: TryCast ( value) => Ok ( cast:: PyTryCast :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
158
159
Expr :: ScalarFunction ( value) => Err ( py_unsupported_variant_err ( format ! (
159
160
"Converting Expr::ScalarFunction to a Python object is not implemented: {:?}" ,
160
161
value
@@ -163,29 +164,29 @@ impl PyExpr {
163
164
"Converting Expr::WindowFunction to a Python object is not implemented: {:?}" ,
164
165
value
165
166
) ) ) ,
166
- Expr :: InList ( value) => Ok ( in_list:: PyInList :: from ( value. clone ( ) ) . into_py ( py) ) ,
167
- Expr :: Exists ( value) => Ok ( exists:: PyExists :: from ( value. clone ( ) ) . into_py ( py) ) ,
167
+ Expr :: InList ( value) => Ok ( in_list:: PyInList :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
168
+ Expr :: Exists ( value) => Ok ( exists:: PyExists :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
168
169
Expr :: InSubquery ( value) => {
169
- Ok ( in_subquery:: PyInSubquery :: from ( value. clone ( ) ) . into_py ( py) )
170
+ Ok ( in_subquery:: PyInSubquery :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? )
170
171
}
171
172
Expr :: ScalarSubquery ( value) => {
172
- Ok ( scalar_subquery:: PyScalarSubquery :: from ( value. clone ( ) ) . into_py ( py) )
173
+ Ok ( scalar_subquery:: PyScalarSubquery :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? )
173
174
}
174
175
Expr :: Wildcard { qualifier, options } => Err ( py_unsupported_variant_err ( format ! (
175
176
"Converting Expr::Wildcard to a Python object is not implemented : {:?} {:?}" ,
176
177
qualifier, options
177
178
) ) ) ,
178
179
Expr :: GroupingSet ( value) => {
179
- Ok ( grouping_set:: PyGroupingSet :: from ( value. clone ( ) ) . into_py ( py) )
180
+ Ok ( grouping_set:: PyGroupingSet :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? )
180
181
}
181
182
Expr :: Placeholder ( value) => {
182
- Ok ( placeholder:: PyPlaceholder :: from ( value. clone ( ) ) . into_py ( py) )
183
+ Ok ( placeholder:: PyPlaceholder :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? )
183
184
}
184
185
Expr :: OuterReferenceColumn ( data_type, column) => Err ( py_unsupported_variant_err ( format ! (
185
186
"Converting Expr::OuterReferenceColumn to a Python object is not implemented: {:?} - {:?}" ,
186
187
data_type, column
187
188
) ) ) ,
188
- Expr :: Unnest ( value) => Ok ( unnest_expr:: PyUnnestExpr :: from ( value. clone ( ) ) . into_py ( py) ) ,
189
+ Expr :: Unnest ( value) => Ok ( unnest_expr:: PyUnnestExpr :: from ( value. clone ( ) ) . into_bound_py_any ( py) ? ) ,
189
190
}
190
191
} )
191
192
}
0 commit comments