From ddcd4448111b31d20db1a4ab3689f9923896d375 Mon Sep 17 00:00:00 2001 From: sjwmoveon Date: Fri, 3 May 2024 14:23:29 -0400 Subject: [PATCH 1/3] Update campaign_contact.updated_at on change --- ...0240503180901_campaigncontactsupdatedat.js | 32 +++++++++++++++++++ migrations/helpers/index.js | 8 +++++ 2 files changed, 40 insertions(+) create mode 100644 migrations/20240503180901_campaigncontactsupdatedat.js diff --git a/migrations/20240503180901_campaigncontactsupdatedat.js b/migrations/20240503180901_campaigncontactsupdatedat.js new file mode 100644 index 000000000..1ef891573 --- /dev/null +++ b/migrations/20240503180901_campaigncontactsupdatedat.js @@ -0,0 +1,32 @@ + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ + +const { onUpdateTrigger } = require('./helpers/index') +const ON_UPDATE_TIMESTAMP_FUNCTION = ` + CREATE OR REPLACE FUNCTION on_update_timestamp() + RETURNS trigger AS $$ + BEGIN + NEW.updated_at = now(); + RETURN NEW; + END; +$$ language 'plpgsql'; +` + +const DROP_ON_UPDATE_TIMESTAMP_FUNCTION = `DROP FUNCTION on_update_timestamp` + +exports.up = async function(knex) { + await knex.raw(ON_UPDATE_TIMESTAMP_FUNCTION); + await knex.raw(onUpdateTrigger('campaign_contact')); +}; + +/** + * @param { import("knex").Knex } knex + * @returns { Promise } + */ +exports.down = async function(knex) { + await knex.raw("DROP TRIGGER campaign_contact_updated_at on campaign_contact"); + await knex.raw(DROP_ON_UPDATE_TIMESTAMP_FUNCTION); +}; \ No newline at end of file diff --git a/migrations/helpers/index.js b/migrations/helpers/index.js index 5570a8aea..6eca405f0 100644 --- a/migrations/helpers/index.js +++ b/migrations/helpers/index.js @@ -11,3 +11,11 @@ exports.redefineSqliteTable = async (knex, tableName, newTableFn) => { await knex.schema.dropTable(tableName); await knex.schema.createTable(tableName, newTableFn); }; + + +exports.onUpdateTrigger = table => ` +CREATE TRIGGER ${table}_updated_at +BEFORE UPDATE ON ${table} +FOR EACH ROW +EXECUTE PROCEDURE on_update_timestamp(); +` \ No newline at end of file From 226f4e069dc8a22a7b41da7c41a978b988da8ccd Mon Sep 17 00:00:00 2001 From: sjwmoveon Date: Fri, 3 May 2024 14:32:57 -0400 Subject: [PATCH 2/3] Only run migration on postgres, not sqlite --- .../20240503180901_campaigncontactsupdatedat.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/migrations/20240503180901_campaigncontactsupdatedat.js b/migrations/20240503180901_campaigncontactsupdatedat.js index 1ef891573..eb483c4ae 100644 --- a/migrations/20240503180901_campaigncontactsupdatedat.js +++ b/migrations/20240503180901_campaigncontactsupdatedat.js @@ -18,8 +18,11 @@ $$ language 'plpgsql'; const DROP_ON_UPDATE_TIMESTAMP_FUNCTION = `DROP FUNCTION on_update_timestamp` exports.up = async function(knex) { - await knex.raw(ON_UPDATE_TIMESTAMP_FUNCTION); - await knex.raw(onUpdateTrigger('campaign_contact')); + const isSqlite = /sqlite/.test(knex.client.config.client); + if (!isSqlite) { + await knex.raw(ON_UPDATE_TIMESTAMP_FUNCTION); + await knex.raw(onUpdateTrigger('campaign_contact')); + } }; /** @@ -27,6 +30,9 @@ exports.up = async function(knex) { * @returns { Promise } */ exports.down = async function(knex) { - await knex.raw("DROP TRIGGER campaign_contact_updated_at on campaign_contact"); - await knex.raw(DROP_ON_UPDATE_TIMESTAMP_FUNCTION); + const isSqlite = /sqlite/.test(knex.client.config.client); + if (!isSqlite) { + await knex.raw("DROP TRIGGER campaign_contact_updated_at on campaign_contact"); + await knex.raw(DROP_ON_UPDATE_TIMESTAMP_FUNCTION); + } }; \ No newline at end of file From 454e1dbb2ff7df75b310b2958524066a4c1bf13c Mon Sep 17 00:00:00 2001 From: Sophie Waldman <62553142+sjwmoveon@users.noreply.github.com> Date: Fri, 3 May 2024 14:41:50 -0400 Subject: [PATCH 3/3] Fix comments --- .../20240503180901_campaigncontactsupdatedat.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/migrations/20240503180901_campaigncontactsupdatedat.js b/migrations/20240503180901_campaigncontactsupdatedat.js index eb483c4ae..39f79d864 100644 --- a/migrations/20240503180901_campaigncontactsupdatedat.js +++ b/migrations/20240503180901_campaigncontactsupdatedat.js @@ -1,9 +1,4 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ - const { onUpdateTrigger } = require('./helpers/index') const ON_UPDATE_TIMESTAMP_FUNCTION = ` CREATE OR REPLACE FUNCTION on_update_timestamp() @@ -17,6 +12,9 @@ $$ language 'plpgsql'; const DROP_ON_UPDATE_TIMESTAMP_FUNCTION = `DROP FUNCTION on_update_timestamp` +/** + * @param { import("knex").Knex } knex + */ exports.up = async function(knex) { const isSqlite = /sqlite/.test(knex.client.config.client); if (!isSqlite) { @@ -27,7 +25,6 @@ exports.up = async function(knex) { /** * @param { import("knex").Knex } knex - * @returns { Promise } */ exports.down = async function(knex) { const isSqlite = /sqlite/.test(knex.client.config.client); @@ -35,4 +32,4 @@ exports.down = async function(knex) { await knex.raw("DROP TRIGGER campaign_contact_updated_at on campaign_contact"); await knex.raw(DROP_ON_UPDATE_TIMESTAMP_FUNCTION); } -}; \ No newline at end of file +};