This refactors the schema package and subpackages to support editions.
An Edition is a collection of sql migrations. A given boundary binary
can have multiple migration editions. The `schema.Manager` is updated to
apply the necessary migrations in the correct order, leveraging an
Edition's priority to determine the order in which the separate Editions
are applied.
The sql migration files are now nested under a directory for the
edition.
This also switches from the generated code to using embed, which
eliminates the need for the `make migrations` target and the generated
code. As such this commit removes the target and generated code.
See:
https://pkg.go.dev/embed
59 lines
2.2 KiB
PL/PgSQL
59 lines
2.2 KiB
PL/PgSQL
begin;
|
|
|
|
-- wt_email defines a type for email which must be less than 320 chars and only
|
|
-- contain lower case values. The type is defined to allow nulls and not be
|
|
-- unique, which can be overriden as needed when used in tables.
|
|
create domain wt_email as text
|
|
constraint wt_email_too_short
|
|
check (length(trim(value)) > 0)
|
|
constraint wt_email_too_long
|
|
check (length(trim(value)) < 320);
|
|
comment on domain wt_email is
|
|
'standard column for email addresses';
|
|
|
|
-- wt_full_name defines a type for a person's full name which must be less than
|
|
-- 512 chars. The type is defined to allow nulls and not be unique, which can
|
|
-- be overriden as needed when used in tables.
|
|
create domain wt_full_name text
|
|
constraint wt_full_name_too_short
|
|
check (length(trim(value)) > 0)
|
|
constraint wt_full_name_too_long
|
|
check(length(trim(value)) <= 512); -- gotta pick some upper limit.
|
|
comment on domain wt_full_name is
|
|
'standard column for the full name of a person';
|
|
|
|
-- wt_url defines a type for URLs which must be longer that 3 chars and
|
|
-- less than 4k chars. It's defined to allow nulls, which can be overridden as
|
|
-- needed when used in tables.
|
|
create domain wt_url as text
|
|
constraint wt_url_too_short
|
|
check (length(trim(value)) > 3)
|
|
constraint wt_url_too_long
|
|
check (length(trim(value)) < 4000)
|
|
constraint wt_url_invalid_protocol
|
|
check (value ~ 'https?:\/\/*');
|
|
comment on domain wt_url is
|
|
'standard column for URLs';
|
|
|
|
-- wt_name defines a type for resource names that must be less than 128 chars.
|
|
-- It's defined to allow nulls.
|
|
create domain wt_name as text
|
|
constraint wt_name_too_short
|
|
check (length(trim(value)) > 0)
|
|
constraint wt_name_too_long
|
|
check (length(trim(value)) < 128);
|
|
comment on domain wt_name is
|
|
'standard column for resource names';
|
|
|
|
-- wt_description defines a type for resource descriptions that must be less
|
|
-- than 1024 chars. It's defined to allow nulls.
|
|
create domain wt_description as text
|
|
constraint wt_description_too_short
|
|
check (length(trim(value)) > 0)
|
|
constraint wt_description_too_long
|
|
check (length(trim(value)) < 1024);
|
|
comment on domain wt_description is
|
|
'standard column for resource descriptions';
|
|
|
|
commit;
|