From 72c2227df1375848535425d55a0caacd72badc2f Mon Sep 17 00:00:00 2001 From: Khor Shu Heng <32997938+khorshuheng@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:17:53 +0800 Subject: [PATCH] chore: test retroactive migration fix (#891) --- ...43023_user.sql => 20230312043024_user.sql} | 19 ++------------ ...space.sql => 20230906101223_workspace.sql} | 18 ++----------- ...1_collab.sql => 20230906102652_collab.sql} | 25 +++++++------------ 3 files changed, 13 insertions(+), 49 deletions(-) rename migrations/{20230312043023_user.sql => 20230312043024_user.sql} (70%) rename migrations/{20230906101222_workspace.sql => 20230906101223_workspace.sql} (77%) rename migrations/{20230906102651_collab.sql => 20230906102652_collab.sql} (70%) diff --git a/migrations/20230312043023_user.sql b/migrations/20230312043024_user.sql similarity index 70% rename from migrations/20230312043023_user.sql rename to migrations/20230312043024_user.sql index 07bb72b7..3058f11e 100644 --- a/migrations/20230312043023_user.sql +++ b/migrations/20230312043024_user.sql @@ -18,7 +18,7 @@ CREATE OR REPLACE FUNCTION update_updated_at_column_func() RETURNS TRIGGER AS $$ RETURN NEW; END; $$ language 'plpgsql'; -CREATE TRIGGER update_af_user_modtime BEFORE +CREATE OR REPLACE TRIGGER update_af_user_modtime BEFORE UPDATE ON af_user FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column_func(); CREATE OR REPLACE FUNCTION prevent_reset_encryption_sign_func() RETURNS TRIGGER AS $$ BEGIN IF OLD.encryption_sign IS NOT NULL AND NEW.encryption_sign IS DISTINCT @@ -27,20 +27,5 @@ END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -CREATE TRIGGER trigger_prevent_reset_encryption_sign BEFORE +CREATE OR REPLACE TRIGGER trigger_prevent_reset_encryption_sign BEFORE UPDATE ON af_user FOR EACH ROW EXECUTE FUNCTION prevent_reset_encryption_sign_func(); - --- Enable RLS on the af_user table --- Policy for INSERT -ALTER TABLE af_user ENABLE ROW LEVEL SECURITY; -CREATE POLICY af_user_insert_policy ON public.af_user FOR -INSERT TO anon, - authenticated WITH CHECK (true); --- Policy for UPDATE -CREATE POLICY af_user_update_policy ON public.af_user FOR -UPDATE USING (true) WITH CHECK (true); --- Policy for SELECT -CREATE POLICY af_user_select_policy ON public.af_user FOR -SELECT TO anon, - authenticated USING (true); -ALTER TABLE af_user FORCE ROW LEVEL SECURITY; diff --git a/migrations/20230906101222_workspace.sql b/migrations/20230906101223_workspace.sql similarity index 77% rename from migrations/20230906101222_workspace.sql rename to migrations/20230906101223_workspace.sql index cab781e3..d0d64c37 100644 --- a/migrations/20230906101222_workspace.sql +++ b/migrations/20230906101223_workspace.sql @@ -10,12 +10,6 @@ CREATE TABLE IF NOT EXISTS af_workspace ( workspace_name TEXT DEFAULT 'My Workspace' ); --- Enable RLS on the af_workspace table -ALTER TABLE af_workspace ENABLE ROW LEVEL SECURITY; -CREATE POLICY af_workspace_policy ON af_workspace FOR ALL TO anon, - authenticated USING (true); -ALTER TABLE af_workspace FORCE ROW LEVEL SECURITY; - -- af_workspace_member contains all the members associated with a workspace and their roles. CREATE TABLE IF NOT EXISTS af_workspace_member ( uid BIGINT NOT NULL, @@ -26,15 +20,7 @@ CREATE TABLE IF NOT EXISTS af_workspace_member ( PRIMARY KEY (uid, workspace_id) ); --- Enable RLS on the af_workspace_member table -ALTER TABLE af_workspace_member ENABLE ROW LEVEL SECURITY; -CREATE POLICY af_workspace_member_policy ON af_workspace_member FOR ALL TO anon, - authenticated USING (true); -ALTER TABLE af_workspace_member FORCE ROW LEVEL SECURITY; - -- Listener for af_workspace_member table -DROP TRIGGER IF EXISTS af_workspace_member_change_trigger ON af_workspace_member; - CREATE OR REPLACE FUNCTION notify_af_workspace_member_change() RETURNS trigger AS $$ DECLARE payload TEXT; @@ -55,12 +41,12 @@ BEGIN END; $$ LANGUAGE plpgsql; -CREATE TRIGGER af_workspace_member_change_trigger +CREATE OR REPLACE TRIGGER af_workspace_member_change_trigger AFTER INSERT OR UPDATE OR DELETE ON af_workspace_member FOR EACH ROW EXECUTE FUNCTION notify_af_workspace_member_change(); -- Index -CREATE UNIQUE INDEX idx_af_workspace_member ON af_workspace_member (uid, workspace_id, role_id); +CREATE UNIQUE INDEX IF NOT EXISTS idx_af_workspace_member ON af_workspace_member (uid, workspace_id, role_id); -- Insert a workspace member if the user with given uid is the owner of the workspace CREATE OR REPLACE FUNCTION insert_af_workspace_member_if_owner( p_uid BIGINT, diff --git a/migrations/20230906102651_collab.sql b/migrations/20230906102652_collab.sql similarity index 70% rename from migrations/20230906102651_collab.sql rename to migrations/20230906102652_collab.sql index 2f971aea..0566c7e5 100644 --- a/migrations/20230906102651_collab.sql +++ b/migrations/20230906102652_collab.sql @@ -11,20 +11,20 @@ CREATE TABLE IF NOT EXISTS af_collab ( workspace_id UUID NOT NULL REFERENCES af_workspace(workspace_id) ON DELETE CASCADE, PRIMARY KEY (oid, partition_key) ) PARTITION BY LIST (partition_key); -CREATE TABLE af_collab_document PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_document PARTITION OF af_collab FOR VALUES IN (0); -CREATE TABLE af_collab_database PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_database PARTITION OF af_collab FOR VALUES IN (1); -CREATE TABLE af_collab_w_database PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_w_database PARTITION OF af_collab FOR VALUES IN (2); -CREATE TABLE af_collab_folder PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_folder PARTITION OF af_collab FOR VALUES IN (3); -CREATE TABLE af_collab_database_row PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_database_row PARTITION OF af_collab FOR VALUES IN (4); -CREATE TABLE af_collab_user_awareness PARTITION OF af_collab FOR +CREATE TABLE IF NOT EXISTS af_collab_user_awareness PARTITION OF af_collab FOR VALUES IN (5); -CREATE TABLE af_collab_member ( +CREATE TABLE IF NOT EXISTS af_collab_member ( uid BIGINT REFERENCES af_user(uid) ON DELETE CASCADE, oid TEXT NOT NULL, permission_id INTEGER REFERENCES af_permissions(id) NOT NULL, @@ -32,8 +32,6 @@ CREATE TABLE af_collab_member ( ); -- Listener -DROP TRIGGER IF EXISTS af_collab_member_change_trigger ON af_collab_member; - CREATE OR REPLACE FUNCTION notify_af_collab_member_change() RETURNS trigger AS $$ DECLARE payload TEXT; @@ -54,7 +52,7 @@ END IF; END; $$ LANGUAGE plpgsql; -CREATE TRIGGER af_collab_member_change_trigger +CREATE OR REPLACE TRIGGER af_collab_member_change_trigger AFTER INSERT OR UPDATE OR DELETE ON af_collab_member FOR EACH ROW EXECUTE FUNCTION notify_af_collab_member_change(); @@ -69,9 +67,4 @@ CREATE TABLE IF NOT EXISTS af_collab_snapshot ( workspace_id UUID NOT NULL REFERENCES af_workspace(workspace_id) ON DELETE CASCADE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL ); -CREATE INDEX idx_af_collab_snapshot_oid ON af_collab_snapshot(oid); --- Enable RLS on the af_collab table -ALTER TABLE af_collab ENABLE ROW LEVEL SECURITY; -CREATE POLICY af_collab_policy ON af_collab FOR ALL TO anon, - authenticated USING (true); -ALTER TABLE af_collab FORCE ROW LEVEL SECURITY; +CREATE INDEX IF NOT EXISTS idx_af_collab_snapshot_oid ON af_collab_snapshot(oid);