@@ -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