4646 import pandas as pd
4747 import polars as pl
4848
49+ from datafusion import TableProvider
4950 from datafusion .plan import ExecutionPlan , LogicalPlan
5051
5152
@@ -734,7 +735,7 @@ def from_polars(self, data: pl.DataFrame, name: str | None = None) -> DataFrame:
734735 # https://github.com/apache/datafusion-python/pull/1016#discussion_r1983239116
735736 # is the discussion on how we arrived at adding register_view
736737 def register_view (self , name : str , df : DataFrame ) -> None :
737- """Register a :py:class: `~datafusion.detaframe .DataFrame` as a view.
738+ """Register a :py:class:`~datafusion.dataframe .DataFrame` as a view.
738739
739740 Args:
740741 name (str): The name to register the view under.
@@ -743,16 +744,32 @@ def register_view(self, name: str, df: DataFrame) -> None:
743744 view = df .into_view ()
744745 self .ctx .register_table (name , view )
745746
746- def register_table (self , name : str , table : Table ) -> None :
747- """Register a :py:class: `~datafusion.catalog.Table` as a table.
747+ def register_table (
748+ self , name : str , table : Table | TableProvider | TableProviderExportable
749+ ) -> None :
750+ """Register a :py:class:`~datafusion.catalog.Table` or
751+ :py:class:`~datafusion.TableProvider`.
748752
749- The registered table can be referenced from SQL statement executed against.
753+ The registered table can be referenced from SQL statements executed against
754+ this context.
755+
756+ Plain :py:class:`~datafusion.dataframe.DataFrame` objects are not supported;
757+ convert them first with :meth:`datafusion.dataframe.DataFrame.into_view` or
758+ :meth:`datafusion.TableProvider.from_dataframe`.
759+
760+ Objects implementing ``__datafusion_table_provider__`` are also supported
761+ and treated as :py:class:`~datafusion.TableProvider` instances.
750762
751763 Args:
752764 name: Name of the resultant table.
753- table: DataFusion table to add to the session context.
765+ table: DataFusion :class:`Table`, :class:`TableProvider`, or any object
766+ implementing ``__datafusion_table_provider__`` to add to the session
767+ context.
754768 """
755- self .ctx .register_table (name , table .table )
769+ if isinstance (table , Table ):
770+ self .ctx .register_table (name , table .table )
771+ else :
772+ self .ctx .register_table (name , table )
756773
757774 def deregister_table (self , name : str ) -> None :
758775 """Remove a table from the session."""
@@ -772,14 +789,21 @@ def register_catalog_provider(
772789 self .ctx .register_catalog_provider (name , provider )
773790
774791 def register_table_provider (
775- self , name : str , provider : TableProviderExportable
792+ self , name : str , provider : Table | TableProvider | TableProviderExportable
776793 ) -> None :
777794 """Register a table provider.
778795
779- This table provider must have a method called ``__datafusion_table_provider__``
780- which returns a PyCapsule that exposes a ``FFI_TableProvider``.
796+ Deprecated: use :meth:`register_table` instead.
797+
798+ Objects implementing ``__datafusion_table_provider__`` are also supported
799+ and treated as :py:class:`~datafusion.TableProvider` instances.
781800 """
782- self .ctx .register_table_provider (name , provider )
801+ warnings .warn (
802+ "register_table_provider is deprecated; use register_table" ,
803+ DeprecationWarning ,
804+ stacklevel = 2 ,
805+ )
806+ self .register_table (name , provider )
783807
784808 def register_udtf (self , func : TableFunction ) -> None :
785809 """Register a user defined table function."""
0 commit comments