schema: Create a type for image areas

This creates a new postgres "domain" which is a subtype of some other type
(in this case, of INTEGER[]) with some constraints applied.
We use this to create a type which is explicitly an array of length 4.

This saves us from needing to repeat this constraint everywhere (which already led to one copy-paste error)
and is arguably clearer in intent.
master
Mike Lang 2 weeks ago
parent de3e85c893
commit 9e6e20cee2

@ -26,6 +26,10 @@ CREATE TYPE thumbnail_mode as ENUM (
'CUSTOM'
);
-- Represents an area in an image as (left, top, bottom, right)
-- or equivalently as (x1, y1, x2, y2) where x is the top-left corner and y is the bottom-right.
CREATE DOMAIN box_coords AS INTEGER[] CHECK (cardinality(VALUE) = 4 OR VALUE IS NULL);
-- The end time for an event can be unset, "--" or a timestamp.
-- If dashed is true, value should be the same as start time (which may be NULL if start time is unset).
-- Otherwise value is the value (which may be NULL if end time is unset).
@ -89,14 +93,8 @@ CREATE TABLE events (
OR thumbnail_mode = 'NONE'
OR thumbnail_last_written IS NOT NULL
),
thumbnail_crop INTEGER[] CHECK (
cardinality(thumbnail_crop) = 4
OR thumbnail_crop IS NULL
), -- left, upper, right, and lower pixel coordinates to crop the selected frame
thumbnail_location INTEGER[] CHECK (
cardinality(thumbnail_location) = 4
OR thumbnail_location IS NULL
), -- left, top, right, bottom pixel coordinates to position the cropped frame
thumbnail_crop box_coords, -- pixel coordinates to crop the selected frame
thumbnail_location box_coords, -- pixel coordinates to position the cropped frame
state event_state NOT NULL DEFAULT 'UNEDITED',
uploader TEXT CHECK (state IN ('UNEDITED', 'EDITED', 'DONE', 'MODIFIED') OR uploader IS NOT NULL),
@ -194,6 +192,6 @@ CREATE TABLE templates (
image BYTEA NOT NULL,
description TEXT NOT NULL DEFAULT '',
attribution TEXT NOT NULL DEFAULT '',
crop INTEGER[] NOT NULL CHECK (cardinality(crop) = 4),
location INTEGER[] NOT NULL CHECK (cardinality(location) = 4)
crop box_coords NOT NULL,
location box_coords NOT NULL
);

Loading…
Cancel
Save