35 lines
1.7 KiB
SQL
35 lines
1.7 KiB
SQL
ALTER TABLE attempts
|
|
DROP CONSTRAINT attempts_state_check,
|
|
DROP CONSTRAINT attempts_state_timestamps_check,
|
|
ADD COLUMN stopped_at TIMESTAMPTZ,
|
|
ADD COLUMN committed_at TIMESTAMPTZ,
|
|
ADD COLUMN failure JSONB,
|
|
ADD CONSTRAINT attempts_state_check CHECK (
|
|
state IN ('authorized', 'executing', 'reaped', 'stopped', 'committed')
|
|
),
|
|
ADD CONSTRAINT attempts_state_timestamps_check CHECK (
|
|
(state = 'authorized' AND executing_at IS NULL AND reaped_at IS NULL
|
|
AND stopped_at IS NULL AND committed_at IS NULL)
|
|
OR (state = 'executing' AND executing_at IS NOT NULL AND reaped_at IS NULL
|
|
AND stopped_at IS NULL AND committed_at IS NULL)
|
|
OR (state = 'reaped' AND executing_at IS NULL AND reaped_at IS NOT NULL
|
|
AND stopped_at IS NULL AND committed_at IS NULL)
|
|
OR (state = 'stopped' AND executing_at IS NOT NULL AND reaped_at IS NULL
|
|
AND stopped_at IS NOT NULL AND committed_at IS NULL)
|
|
OR (state = 'committed' AND executing_at IS NOT NULL AND reaped_at IS NULL
|
|
AND stopped_at IS NULL AND committed_at IS NOT NULL)
|
|
);
|
|
|
|
ALTER TABLE jobs
|
|
ADD COLUMN cancel_requested BOOLEAN NOT NULL DEFAULT FALSE,
|
|
ADD COLUMN resolved_source JSONB,
|
|
ADD COLUMN checkpoint JSONB,
|
|
ADD COLUMN committed_result JSONB,
|
|
ADD COLUMN failure JSONB,
|
|
ADD COLUMN terminal_at TIMESTAMPTZ,
|
|
ADD CONSTRAINT jobs_terminal_projection_check CHECK (
|
|
((phase = 'succeeded') = (committed_result IS NOT NULL))
|
|
AND ((phase = 'failed') = (failure IS NOT NULL))
|
|
AND ((phase IN ('succeeded', 'failed', 'cancelled')) = (terminal_at IS NOT NULL))
|
|
AND (committed_result IS NULL OR failure IS NULL)
|
|
);
|