@@ -19,6 +19,7 @@ use datafusion::logical_expr::utils::exprlist_to_fields;
1919use datafusion:: logical_expr:: {
2020 ExprFuncBuilder , ExprFunctionExt , LogicalPlan , WindowFunctionDefinition ,
2121} ;
22+ use pyo3:: IntoPyObjectExt ;
2223use pyo3:: { basic:: CompareOp , prelude:: * } ;
2324use std:: convert:: { From , Into } ;
2425use std:: sync:: Arc ;
@@ -126,35 +127,35 @@ pub fn py_expr_list(expr: &[Expr]) -> PyResult<Vec<PyExpr>> {
126127#[ pymethods]
127128impl PyExpr {
128129 /// 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 > > {
130131 Python :: with_gil ( |_| {
131132 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) ? ) ,
134135 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) ? )
136137 }
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) ? ) ,
150151 Expr :: AggregateFunction ( expr) => {
151- Ok ( PyAggregateFunction :: from ( expr. clone ( ) ) . into_py ( py) )
152+ Ok ( PyAggregateFunction :: from ( expr. clone ( ) ) . into_bound_py_any ( py) ? )
152153 }
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) ? ) ,
158159 Expr :: ScalarFunction ( value) => Err ( py_unsupported_variant_err ( format ! (
159160 "Converting Expr::ScalarFunction to a Python object is not implemented: {:?}" ,
160161 value
@@ -163,29 +164,29 @@ impl PyExpr {
163164 "Converting Expr::WindowFunction to a Python object is not implemented: {:?}" ,
164165 value
165166 ) ) ) ,
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) ? ) ,
168169 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) ? )
170171 }
171172 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) ? )
173174 }
174175 Expr :: Wildcard { qualifier, options } => Err ( py_unsupported_variant_err ( format ! (
175176 "Converting Expr::Wildcard to a Python object is not implemented : {:?} {:?}" ,
176177 qualifier, options
177178 ) ) ) ,
178179 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) ? )
180181 }
181182 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) ? )
183184 }
184185 Expr :: OuterReferenceColumn ( data_type, column) => Err ( py_unsupported_variant_err ( format ! (
185186 "Converting Expr::OuterReferenceColumn to a Python object is not implemented: {:?} - {:?}" ,
186187 data_type, column
187188 ) ) ) ,
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) ? ) ,
189190 }
190191 } )
191192 }
0 commit comments