Append shared env versioning sql scripts to route as comment
This commit is contained in:
@@ -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__)
|
||||
|
||||
Reference in New Issue
Block a user