Skip to content

Commit

Permalink
feat(duckdb): expose option to force reinstall extension
Browse files Browse the repository at this point in the history
This is apparently needed for (at least) Motherduck upgrades.
  • Loading branch information
gforsyth authored and cpcloud committed Oct 31, 2023
1 parent 6239794 commit 98080d0
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions ibis/backends/duckdb/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,9 @@ def configure_connection(dbapi_connection, connection_record):
super().do_connect(engine)

@staticmethod
def _sa_load_extensions(dbapi_con, extensions):
def _sa_load_extensions(
dbapi_con, extensions: list[str], force_install: bool = False
) -> None:
query = """
WITH exts AS (
SELECT extension_name AS name, aliases FROM duckdb_extensions()
Expand All @@ -253,22 +255,28 @@ def _sa_load_extensions(dbapi_con, extensions):
# Install and load all other extensions
todo = set(extensions).difference(installed)
for extension in todo:
dbapi_con.install_extension(extension)
dbapi_con.install_extension(extension, force_install=force_install)
dbapi_con.load_extension(extension)

def _load_extensions(self, extensions):
def _load_extensions(
self, extensions: list[str], force_install: bool = False
) -> None:
with self.begin() as con:
self._sa_load_extensions(con.connection, extensions)
self._sa_load_extensions(
con.connection, extensions, force_install=force_install
)

def load_extension(self, extension: str) -> None:
def load_extension(self, extension: str, force_install: bool = False) -> None:
"""Install and load a duckdb extension by name or path.
Parameters
----------
extension
The extension name or path.
force_install
Force reinstallation of the extension.
"""
self._load_extensions([extension])
self._load_extensions([extension], force_install=force_install)

def create_schema(
self, name: str, database: str | None = None, force: bool = False
Expand Down

0 comments on commit 98080d0

Please sign in to comment.