From 9e218f73dfb630df1c094d0dd152902ef3de4f57 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 19 Apr 2023 09:04:45 -0500 Subject: [PATCH 1/3] chore: Enforce workspace proxy unique name case insensitive --- .../000119_workspace_proxy_name_idx.down.sql | 8 ++++++++ .../migrations/000119_workspace_proxy_name_idx.up.sql | 11 +++++++++++ 2 files changed, 19 insertions(+) create mode 100644 coderd/database/migrations/000119_workspace_proxy_name_idx.down.sql create mode 100644 coderd/database/migrations/000119_workspace_proxy_name_idx.up.sql diff --git a/coderd/database/migrations/000119_workspace_proxy_name_idx.down.sql b/coderd/database/migrations/000119_workspace_proxy_name_idx.down.sql new file mode 100644 index 0000000000000..3311a6cd7ce8c --- /dev/null +++ b/coderd/database/migrations/000119_workspace_proxy_name_idx.down.sql @@ -0,0 +1,8 @@ +BEGIN; + +DROP INDEX IF EXISTS workspace_proxies_lower_name_idx; + +-- Enforces no active proxies have the same name. +CREATE UNIQUE INDEX ON workspace_proxies (name) WHERE deleted = FALSE; + +COMMIT; diff --git a/coderd/database/migrations/000119_workspace_proxy_name_idx.up.sql b/coderd/database/migrations/000119_workspace_proxy_name_idx.up.sql new file mode 100644 index 0000000000000..0101905491672 --- /dev/null +++ b/coderd/database/migrations/000119_workspace_proxy_name_idx.up.sql @@ -0,0 +1,11 @@ +BEGIN; + +-- No one is using this feature yet as of writing this migration, so this is +-- fine. Just delete all workspace proxies to prevent the new index from having +-- conflicts. +DELETE FROM workspace_proxies; + +DROP INDEX IF EXISTS workspace_proxies_name_idx; +CREATE UNIQUE INDEX workspace_proxies_lower_name_idx ON workspace_proxies USING btree (lower(name)) WHERE deleted = FALSE; + +COMMIT; From d9a9937d69df835a4b37b623e8640639977f9c31 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 20 Apr 2023 10:15:04 -0500 Subject: [PATCH 2/3] Make gen --- coderd/database/dump.sql | 2 +- coderd/database/unique_constraint.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index a96c622a03463..50a27bc0ede48 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -889,7 +889,7 @@ CREATE INDEX workspace_agents_auth_token_idx ON workspace_agents USING btree (au CREATE INDEX workspace_agents_resource_id_idx ON workspace_agents USING btree (resource_id); -CREATE UNIQUE INDEX workspace_proxies_name_idx ON workspace_proxies USING btree (name) WHERE (deleted = false); +CREATE UNIQUE INDEX workspace_proxies_lower_name_idx ON workspace_proxies USING btree (lower(name)) WHERE (deleted = false); CREATE INDEX workspace_resources_job_id_idx ON workspace_resources USING btree (job_id); diff --git a/coderd/database/unique_constraint.go b/coderd/database/unique_constraint.go index f0e564c81a5ee..f0ba6c702ac93 100644 --- a/coderd/database/unique_constraint.go +++ b/coderd/database/unique_constraint.go @@ -31,6 +31,6 @@ const ( UniqueTemplatesOrganizationIDNameIndex UniqueConstraint = "templates_organization_id_name_idx" // CREATE UNIQUE INDEX templates_organization_id_name_idx ON templates USING btree (organization_id, lower((name)::text)) WHERE (deleted = false); UniqueUsersEmailLowerIndex UniqueConstraint = "users_email_lower_idx" // CREATE UNIQUE INDEX users_email_lower_idx ON users USING btree (lower(email)) WHERE (deleted = false); UniqueUsersUsernameLowerIndex UniqueConstraint = "users_username_lower_idx" // CREATE UNIQUE INDEX users_username_lower_idx ON users USING btree (lower(username)) WHERE (deleted = false); - UniqueWorkspaceProxiesNameIndex UniqueConstraint = "workspace_proxies_name_idx" // CREATE UNIQUE INDEX workspace_proxies_name_idx ON workspace_proxies USING btree (name) WHERE (deleted = false); + UniqueWorkspaceProxiesLowerNameIndex UniqueConstraint = "workspace_proxies_lower_name_idx" // CREATE UNIQUE INDEX workspace_proxies_lower_name_idx ON workspace_proxies USING btree (lower(name)) WHERE (deleted = false); UniqueWorkspacesOwnerIDLowerIndex UniqueConstraint = "workspaces_owner_id_lower_idx" // CREATE UNIQUE INDEX workspaces_owner_id_lower_idx ON workspaces USING btree (owner_id, lower((name)::text)) WHERE (deleted = false); ) From 980f84f3cd994da16646c1da61c68280c34023f0 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 20 Apr 2023 10:41:16 -0500 Subject: [PATCH 3/3] Bump fixture --- ...ace_proxy_token.up.sql => 000119_workspace_proxy_token.up.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename coderd/database/migrations/testdata/fixtures/{000118_workspace_proxy_token.up.sql => 000119_workspace_proxy_token.up.sql} (100%) diff --git a/coderd/database/migrations/testdata/fixtures/000118_workspace_proxy_token.up.sql b/coderd/database/migrations/testdata/fixtures/000119_workspace_proxy_token.up.sql similarity index 100% rename from coderd/database/migrations/testdata/fixtures/000118_workspace_proxy_token.up.sql rename to coderd/database/migrations/testdata/fixtures/000119_workspace_proxy_token.up.sql