@@ -197,7 +197,9 @@ impl PySchema {
197197 }
198198
199199 fn register_table ( & self , name : & str , table_provider : Bound < ' _ , PyAny > ) -> PyResult < ( ) > {
200- let provider = if table_provider. hasattr ( "__datafusion_table_provider__" ) ? {
200+ let provider = if let Ok ( py_table) = table_provider. extract :: < PyTable > ( ) {
201+ py_table. table
202+ } else if table_provider. hasattr ( "__datafusion_table_provider__" ) ? {
201203 let capsule = table_provider
202204 . getattr ( "__datafusion_table_provider__" ) ?
203205 . call0 ( ) ?;
@@ -208,14 +210,9 @@ impl PySchema {
208210 let provider: ForeignTableProvider = provider. into ( ) ;
209211 Arc :: new ( provider) as Arc < dyn TableProvider >
210212 } else {
211- match table_provider. extract :: < PyTable > ( ) {
212- Ok ( py_table) => py_table. table ,
213- Err ( _) => {
214- let py = table_provider. py ( ) ;
215- let provider = Dataset :: new ( & table_provider, py) ?;
216- Arc :: new ( provider) as Arc < dyn TableProvider >
217- }
218- }
213+ let py = table_provider. py ( ) ;
214+ let provider = Dataset :: new ( & table_provider, py) ?;
215+ Arc :: new ( provider) as Arc < dyn TableProvider >
219216 } ;
220217
221218 let _ = self
@@ -322,6 +319,10 @@ impl RustWrappedPySchemaProvider {
322319 return Ok ( None ) ;
323320 }
324321
322+ if let Ok ( inner_table) = py_table. extract :: < PyTable > ( ) {
323+ return Ok ( Some ( inner_table. table ) ) ;
324+ }
325+
325326 if py_table. hasattr ( "__datafusion_table_provider__" ) ? {
326327 let capsule = py_table. getattr ( "__datafusion_table_provider__" ) ?. call0 ( ) ?;
327328 let capsule = capsule. downcast :: < PyCapsule > ( ) . map_err ( py_datafusion_err) ?;
@@ -338,13 +339,8 @@ impl RustWrappedPySchemaProvider {
338339 }
339340 }
340341
341- match py_table. extract :: < PyTable > ( ) {
342- Ok ( py_table) => Ok ( Some ( py_table. table ) ) ,
343- Err ( _) => {
344- let ds = Dataset :: new ( & py_table, py) . map_err ( py_datafusion_err) ?;
345- Ok ( Some ( Arc :: new ( ds) as Arc < dyn TableProvider > ) )
346- }
347- }
342+ let ds = Dataset :: new ( & py_table, py) . map_err ( py_datafusion_err) ?;
343+ Ok ( Some ( Arc :: new ( ds) as Arc < dyn TableProvider > ) )
348344 }
349345 } )
350346 }
0 commit comments