20 lines
1.1 KiB
JavaScript
20 lines
1.1 KiB
JavaScript
// Existing immutable snapshots retain unknown context metadata; never fabricate old counts.
|
|
exports.up = pgm => pgm.sql(`
|
|
ALTER TABLE generated_image_jobs ADD context_included INTEGER, ADD context_total INTEGER,
|
|
ADD CONSTRAINT generated_image_context_counts CHECK (
|
|
(context_included IS NULL AND context_total IS NULL) OR
|
|
(context_included IS NOT NULL AND context_total IS NOT NULL AND context_included >= 0 AND context_total >= context_included));
|
|
CREATE FUNCTION guard_generated_image_context() RETURNS trigger LANGUAGE plpgsql AS $$
|
|
BEGIN
|
|
IF (NEW.context_included, NEW.context_total) IS DISTINCT FROM (OLD.context_included, OLD.context_total) THEN
|
|
RAISE EXCEPTION 'Image context metadata is immutable';
|
|
END IF;
|
|
RETURN NEW;
|
|
END; $$;
|
|
CREATE TRIGGER generated_image_context_immutable BEFORE UPDATE ON generated_image_jobs FOR EACH ROW EXECUTE FUNCTION guard_generated_image_context();
|
|
`);
|
|
exports.down = pgm => pgm.sql(`
|
|
DROP TRIGGER generated_image_context_immutable ON generated_image_jobs;
|
|
DROP FUNCTION guard_generated_image_context();
|
|
ALTER TABLE generated_image_jobs DROP context_included, DROP context_total;
|
|
`);
|