mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-05 03:26:27 +00:00
fix: create separate triggers for insert/update
This commit is contained in:
@@ -7,29 +7,49 @@ import { TableName } from "@app/db/schemas";
|
|||||||
|
|
||||||
// this is a postgres function to keep name in-sync with slug during transition period
|
// this is a postgres function to keep name in-sync with slug during transition period
|
||||||
export const createKmsKeyNameSyncTrigger = async (knex: Knex) => {
|
export const createKmsKeyNameSyncTrigger = async (knex: Knex) => {
|
||||||
// create function
|
// function to update name if slug is updated
|
||||||
await knex.raw(`
|
await knex.raw(`
|
||||||
CREATE OR REPLACE FUNCTION on_sync_kms_key_name() RETURNS TRIGGER AS $$ BEGIN NEW."name" = NEW."slug";
|
CREATE OR REPLACE FUNCTION on_update_kms_key_slug() RETURNS TRIGGER AS $$ BEGIN NEW."name" = NEW."slug";
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
`);
|
`);
|
||||||
|
|
||||||
// create trigger
|
// function to set name if kms key created with slug
|
||||||
await knex.raw(`
|
await knex.raw(`
|
||||||
CREATE TRIGGER "${TableName.KmsKey}_name_sync"
|
CREATE OR REPLACE FUNCTION on_insert_kms_key() RETURNS TRIGGER AS $$ BEGIN NEW."name" = coalesce(NEW."name", NEW."slug");
|
||||||
BEFORE INSERT OR UPDATE OF "slug" ON ${TableName.KmsKey}
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
`);
|
||||||
|
|
||||||
|
// create trigger to update name if slug is updated
|
||||||
|
await knex.raw(`
|
||||||
|
CREATE TRIGGER "${TableName.KmsKey}_update_name"
|
||||||
|
BEFORE UPDATE OF "slug" ON ${TableName.KmsKey}
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
EXECUTE PROCEDURE on_sync_kms_key_name();
|
EXECUTE PROCEDURE on_update_kms_key_slug();
|
||||||
|
`);
|
||||||
|
|
||||||
|
// create trigger to set name if key created with slug
|
||||||
|
await knex.raw(`
|
||||||
|
CREATE TRIGGER "${TableName.KmsKey}_set_name"
|
||||||
|
BEFORE INSERT ON ${TableName.KmsKey}
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE PROCEDURE on_insert_kms_key();
|
||||||
`);
|
`);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const dropKmsKeyNameSyncTrigger = async (knex: Knex) => {
|
export const dropKmsKeyNameSyncTrigger = async (knex: Knex) => {
|
||||||
// drop trigger
|
// drop triggers
|
||||||
await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_name_sync" ON ${TableName.KmsKey}`);
|
await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_update_name" ON ${TableName.KmsKey}`);
|
||||||
|
await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_set_name" ON ${TableName.KmsKey}`);
|
||||||
|
|
||||||
// drop function
|
// drop functions
|
||||||
await knex.raw(`
|
await knex.raw(`
|
||||||
DROP FUNCTION IF EXISTS on_sync_kms_key_name() CASCADE;
|
DROP FUNCTION IF EXISTS on_update_kms_key_slug() CASCADE;
|
||||||
|
`);
|
||||||
|
await knex.raw(`
|
||||||
|
DROP FUNCTION IF EXISTS on_insert_kms_key() CASCADE;
|
||||||
`);
|
`);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user