From 151f634e5a59b6b74a84b1bcc84cf5e24273fd2d Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Fri, 13 Mar 2026 11:02:42 +0100 Subject: [PATCH] Fix fork overwriting all datatables --- .../windmill-api-workspaces/src/workspaces.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/backend/windmill-api-workspaces/src/workspaces.rs b/backend/windmill-api-workspaces/src/workspaces.rs index c10b01a479..fc59954cd9 100644 --- a/backend/windmill-api-workspaces/src/workspaces.rs +++ b/backend/windmill-api-workspaces/src/workspaces.rs @@ -1609,15 +1609,19 @@ async fn fork_datatable( resource_path: new_dbname.clone(), }, }; - let mut datatables = HashMap::new(); - datatables.insert(new_datatable_name.to_string(), new_datatable); - let new_settings = DataTableSettings { datatables }; - let config: serde_json::Value = - serde_json::to_value(new_settings).map_err(|err| Error::internal_err(err.to_string()))?; + let datatable_value: serde_json::Value = + serde_json::to_value(&new_datatable).map_err(|err| Error::internal_err(err.to_string()))?; sqlx::query!( - "UPDATE workspace_settings SET datatable = $1 WHERE workspace_id = $2", - config, + r#"UPDATE workspace_settings + SET datatable = jsonb_set( + COALESCE(datatable, '{"datatables":{}}'::jsonb), + ARRAY['datatables', $1], + $2 + ) + WHERE workspace_id = $3"#, + new_datatable_name, + datatable_value, w_id ) .execute(db)