From e6757994d5b4ab92d64dd39a64a6a846a98b8a38 Mon Sep 17 00:00:00 2001 From: Diego Imbert <70353967+diegoimbert@users.noreply.github.com> Date: Tue, 6 Jan 2026 18:55:05 +0100 Subject: [PATCH] fix: ducklake default connection extra_args (#7509) * Ducklake default extra_args * indicator nit --- backend/windmill-api/openapi.yaml | 2 + backend/windmill-common/src/workspaces.rs | 5 ++ .../windmill-worker/src/duckdb_executor.rs | 6 ++ .../workspaceSettings/DucklakeSettings.svelte | 74 +++++++++++++------ 4 files changed, 65 insertions(+), 22 deletions(-) diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index c050d48d70..2e860ed5ec 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -20606,6 +20606,8 @@ components: type: string required: - path + extra_args: + type: string DataTableSettings: type: object diff --git a/backend/windmill-common/src/workspaces.rs b/backend/windmill-common/src/workspaces.rs index 08352d0e60..06237536ce 100644 --- a/backend/windmill-common/src/workspaces.rs +++ b/backend/windmill-common/src/workspaces.rs @@ -213,6 +213,8 @@ pub async fn get_datatable_resource_from_db_unchecked( pub struct Ducklake { pub catalog: DucklakeCatalog, pub storage: DucklakeStorage, + #[serde(skip_serializing_if = "Option::is_none")] + pub extra_args: Option, } #[derive(Deserialize, Serialize, Debug)] @@ -244,6 +246,8 @@ pub struct DucklakeWithConnData { pub catalog: DucklakeCatalog, pub catalog_resource: serde_json::Value, pub storage: DucklakeStorage, + #[serde(skip_serializing_if = "Option::is_none")] + pub extra_args: Option, } pub async fn get_ducklake_from_db_unchecked( @@ -287,6 +291,7 @@ pub async fn get_ducklake_from_db_unchecked( catalog_resource, catalog: ducklake.catalog, storage: ducklake.storage, + extra_args: ducklake.extra_args, }; Ok(ducklake) } diff --git a/backend/windmill-worker/src/duckdb_executor.rs b/backend/windmill-worker/src/duckdb_executor.rs index 7e13464dde..79cffe839d 100644 --- a/backend/windmill-worker/src/duckdb_executor.rs +++ b/backend/windmill-worker/src/duckdb_executor.rs @@ -575,6 +575,12 @@ async fn transform_attach_ducklake( } else { format!(", OVERRIDE_DATA_PATH TRUE{extra_args}") }; + let extra_args = if let Some(default_extra_args) = ducklake.extra_args { + // premise : extra_args is always non empty (and doesn't end with a comma given it's valid) + format!("{},{}", extra_args, default_extra_args) + } else { + extra_args + }; let attach_str = format!( "ATTACH 'ducklake:{db_type}:{db_conn_str}' AS {alias_name} (DATA_PATH 's3://{storage}/{data_path}'{extra_args});", diff --git a/frontend/src/lib/components/workspaceSettings/DucklakeSettings.svelte b/frontend/src/lib/components/workspaceSettings/DucklakeSettings.svelte index e952638491..173c156044 100644 --- a/frontend/src/lib/components/workspaceSettings/DucklakeSettings.svelte +++ b/frontend/src/lib/components/workspaceSettings/DucklakeSettings.svelte @@ -12,6 +12,7 @@ storage?: string path: string } + extra_args?: string }[] } @@ -42,7 +43,8 @@ s.ducklakes[ducklake.name] = { catalog: ducklake.catalog, - storage: ducklake.storage + storage: ducklake.storage, + extra_args: ducklake.extra_args || undefined } } return s @@ -50,7 +52,7 @@