Skip to content

Commit d348e40

Browse files
committed
fix: extend register_table method to support TableProviderExportable
1 parent eca360c commit d348e40

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

python/datafusion/catalog.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import pyarrow as pa
2929

3030
from datafusion import TableProvider
31+
from datafusion.context import TableProviderExportable
3132

3233
try:
3334
from warnings import deprecated # Python 3.13+
@@ -124,8 +125,14 @@ def table(self, name: str) -> Table:
124125
"""Return the table with the given ``name`` from this schema."""
125126
return Table(self._raw_schema.table(name))
126127

127-
def register_table(self, name, table: Table | TableProvider) -> None:
128-
"""Register a table or table provider in this schema."""
128+
def register_table(
129+
self, name, table: Table | TableProvider | TableProviderExportable
130+
) -> None:
131+
"""Register a table or table provider in this schema.
132+
133+
Objects implementing ``__datafusion_table_provider__`` are also supported
134+
and treated as :class:`TableProvider` instances.
135+
"""
129136
if isinstance(table, Table):
130137
return self._raw_schema.register_table(name, table.table)
131138
return self._raw_schema.register_table(name, table)
@@ -221,11 +228,16 @@ def table(self, name: str) -> Table | None:
221228
"""Retrieve a specific table from this schema."""
222229
...
223230

224-
def register_table(self, name: str, table: Table | TableProvider) -> None: # noqa: B027
231+
def register_table( # noqa: B027
232+
self, name: str, table: Table | TableProvider | TableProviderExportable
233+
) -> None:
225234
"""Add a table to this schema.
226235
227236
This method is optional. If your schema provides a fixed list of tables, you do
228237
not need to implement this method.
238+
239+
Objects implementing ``__datafusion_table_provider__`` are also supported
240+
and treated as :class:`TableProvider` instances.
229241
"""
230242

231243
def deregister_table(self, name, cascade: bool) -> None: # noqa: B027

python/datafusion/context.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,9 @@ def register_view(self, name: str, df: DataFrame) -> None:
744744
view = df.into_view()
745745
self.ctx.register_table(name, view)
746746

747-
def register_table(self, name: str, table: Table | TableProvider) -> None:
747+
def register_table(
748+
self, name: str, table: Table | TableProvider | TableProviderExportable
749+
) -> None:
748750
"""Register a :py:class:`~datafusion.catalog.Table` or ``TableProvider``.
749751
750752
The registered table can be referenced from SQL statements executed against
@@ -754,10 +756,14 @@ def register_table(self, name: str, table: Table | TableProvider) -> None:
754756
convert them first with :meth:`datafusion.dataframe.DataFrame.into_view` or
755757
:meth:`datafusion.catalog.TableProvider.from_dataframe`.
756758
759+
Objects implementing ``__datafusion_table_provider__`` are also supported
760+
and treated as :class:`~datafusion.catalog.TableProvider` instances.
761+
757762
Args:
758763
name: Name of the resultant table.
759-
table: DataFusion :class:`Table` or :class:`TableProvider` to add to the
760-
session context.
764+
table: DataFusion :class:`Table`, :class:`TableProvider`, or any object
765+
implementing ``__datafusion_table_provider__`` to add to the session
766+
context.
761767
"""
762768
if isinstance(table, Table):
763769
self.ctx.register_table(name, table.table)
@@ -782,11 +788,14 @@ def register_catalog_provider(
782788
self.ctx.register_catalog_provider(name, provider)
783789

784790
def register_table_provider(
785-
self, name: str, provider: TableProviderExportable | TableProvider
791+
self, name: str, provider: Table | TableProvider | TableProviderExportable
786792
) -> None:
787793
"""Register a table provider.
788794
789795
Deprecated: use :meth:`register_table` instead.
796+
797+
Objects implementing ``__datafusion_table_provider__`` are also supported
798+
and treated as :class:`~datafusion.catalog.TableProvider` instances.
790799
"""
791800
warnings.warn(
792801
"register_table_provider is deprecated; use register_table",

0 commit comments

Comments
 (0)