Draft: Project: add 'last_updated_at' column and trigger
What does this MR do and why?
This is the first step of the implementation plan in #349493 (closed).
This MR adds a new last_updated_at
column to the projects
table. It also adds a trigger to ensure that the column is updated automatically when one of the three timestamps (last_activity_at
, last_repository_updated_at
, updated_at
) is updated.
/cc @bufferoverflow
Database Migration
$ rails db:migrate
== 20220103155507 AddLastUpdatedAtToProjects: migrating =======================
-- add_column(:projects, :last_updated_at, :datetime_with_timezone, {:null=>true})
-> 0.0089s
== 20220103155507 AddLastUpdatedAtToProjects: migrated (0.0091s) ==============
== 20220103162901 AddLastUpdatedAtTriggerToProjects: migrating ================
-- execute("CREATE OR REPLACE FUNCTION update_project_last_updated_at()\nRETURNS TRIGGER AS\n$$\nBEGIN\nNEW.last_updated_at := GREATEST(TIMEZONE('UTC', NEW.updated_at), TIMEZONE('UTC', NEW.last_activity_at), TIMEZONE('UTC', NEW.last_repository_updated_at));\nRETURN NEW;\n\nEND\n$$ LANGUAGE PLPGSQL\n")
-> 0.0088s
-- execute("CREATE TRIGGER trigger_update_project_last_updated_at_on_project_update\nBEFORE UPDATE OF updated_at, last_activity_at, last_repository_updated_at ON projects\nFOR EACH ROW\n\nEXECUTE FUNCTION update_project_last_updated_at()\n")
-> 0.0044s
== 20220103162901 AddLastUpdatedAtTriggerToProjects: migrated (0.0513s) =======
$ rails db:rollback STEP=2
== 20220103162901 AddLastUpdatedAtTriggerToProjects: reverting ================
-- execute("DROP TRIGGER IF EXISTS trigger_update_project_last_updated_at_on_project_update ON projects")
-> 0.0053s
-- execute("DROP FUNCTION IF EXISTS update_project_last_updated_at()")
-> 0.0013s
== 20220103162901 AddLastUpdatedAtTriggerToProjects: reverted (0.0068s) =======
== 20220103155507 AddLastUpdatedAtToProjects: reverting =======================
-- remove_column(:projects, :last_updated_at, :datetime_with_timezone, {:null=>true})
-> 0.0056s
== 20220103155507 AddLastUpdatedAtToProjects: reverted (0.0094s) ==============
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Jonas Wälter