Append shared env versioning sql scripts to route as comment

This commit is contained in:
Peter Stockings
2025-11-30 21:43:13 +11:00
parent a7dfc28a8b
commit eb6e5c5649

View File

@@ -71,6 +71,66 @@ CREATE TABLE IF NOT EXISTS timer_function_shared_envs (
);
CREATE INDEX idx_timer_func_shared_env ON timer_function_shared_envs(timer_function_id);
CREATE INDEX idx_shared_env_versions ON shared_environment_versions(shared_env_id);
-- 2. Add version_number column to main table
ALTER TABLE shared_environments
ADD COLUMN IF NOT EXISTS version_number INT NOT NULL DEFAULT 1;
-- 3. Create trigger function for automatic versioning
CREATE OR REPLACE FUNCTION fn_shared_env_versioning()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
DECLARE
next_version INT;
BEGIN
IF TG_OP = 'INSERT' THEN
-- Create initial version record
INSERT INTO shared_environment_versions (shared_env_id, environment, version_number)
VALUES (NEW.id, NEW.environment, 1);
-- Ensure version_number is set explicitly
UPDATE shared_environments
SET version_number = 1
WHERE id = NEW.id;
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
-- Only create new version if environment JSON changed
IF NEW.environment IS DISTINCT FROM OLD.environment THEN
-- Get next version number
SELECT COALESCE(MAX(version_number), 0) + 1
INTO next_version
FROM shared_environment_versions
WHERE shared_env_id = NEW.id;
-- Insert new version record
INSERT INTO shared_environment_versions (shared_env_id, environment, version_number)
VALUES (NEW.id, NEW.environment, next_version);
-- Update main table version number
UPDATE shared_environments
SET version_number = next_version
WHERE id = NEW.id;
END IF;
RETURN NEW;
END IF;
RETURN NEW;
END;
$$;
-- 4. Create trigger to fire on INSERT or UPDATE
CREATE TRIGGER tr_shared_env_versioning
AFTER INSERT OR UPDATE
ON shared_environments
FOR EACH ROW
EXECUTE PROCEDURE fn_shared_env_versioning();
'''
shared_env = Blueprint('shared_env', __name__)