Skip to content

Commit 98080d0

Browse files
gforsythcpcloud
authored andcommitted
feat(duckdb): expose option to force reinstall extension
This is apparently needed for (at least) Motherduck upgrades.
1 parent 6239794 commit 98080d0

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

ibis/backends/duckdb/__init__.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,9 @@ def configure_connection(dbapi_connection, connection_record):
240240
super().do_connect(engine)
241241

242242
@staticmethod
243-
def _sa_load_extensions(dbapi_con, extensions):
243+
def _sa_load_extensions(
244+
dbapi_con, extensions: list[str], force_install: bool = False
245+
) -> None:
244246
query = """
245247
WITH exts AS (
246248
SELECT extension_name AS name, aliases FROM duckdb_extensions()
@@ -253,22 +255,28 @@ def _sa_load_extensions(dbapi_con, extensions):
253255
# Install and load all other extensions
254256
todo = set(extensions).difference(installed)
255257
for extension in todo:
256-
dbapi_con.install_extension(extension)
258+
dbapi_con.install_extension(extension, force_install=force_install)
257259
dbapi_con.load_extension(extension)
258260

259-
def _load_extensions(self, extensions):
261+
def _load_extensions(
262+
self, extensions: list[str], force_install: bool = False
263+
) -> None:
260264
with self.begin() as con:
261-
self._sa_load_extensions(con.connection, extensions)
265+
self._sa_load_extensions(
266+
con.connection, extensions, force_install=force_install
267+
)
262268

263-
def load_extension(self, extension: str) -> None:
269+
def load_extension(self, extension: str, force_install: bool = False) -> None:
264270
"""Install and load a duckdb extension by name or path.
265271
266272
Parameters
267273
----------
268274
extension
269275
The extension name or path.
276+
force_install
277+
Force reinstallation of the extension.
270278
"""
271-
self._load_extensions([extension])
279+
self._load_extensions([extension], force_install=force_install)
272280

273281
def create_schema(
274282
self, name: str, database: str | None = None, force: bool = False

0 commit comments

Comments
 (0)