Add PostgreSQL function "is_guest_token"
This commit is contained in:
parent
a6b450366a
commit
3da668394d
2 changed files with 24 additions and 2 deletions
|
@ -2,6 +2,15 @@
|
||||||
|
|
||||||
class InitialMigration < ActiveRecord::Migration[6.0]
|
class InitialMigration < ActiveRecord::Migration[6.0]
|
||||||
def change
|
def change
|
||||||
|
func :is_guest_token, <<~SQL
|
||||||
|
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
RETURN str ~ '^[0-9a-f]{32}$';
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
SQL
|
||||||
|
|
||||||
func :is_nickname, <<~SQL
|
func :is_nickname, <<~SQL
|
||||||
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
||||||
$$
|
$$
|
||||||
|
@ -244,7 +253,7 @@ class InitialMigration < ActiveRecord::Migration[6.0]
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
constraint :accounts, :guest_token, <<~SQL
|
constraint :accounts, :guest_token, <<~SQL
|
||||||
guest_token ~ '^[0-9a-f]{32}$'
|
is_guest_token(guest_token)
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
constraint :accounts, :nickname, <<~SQL
|
constraint :accounts, :nickname, <<~SQL
|
||||||
|
|
|
@ -95,6 +95,19 @@ END;
|
||||||
$_$;
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: is_guest_token(text); Type: FUNCTION; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION public.is_guest_token(str text) RETURNS boolean
|
||||||
|
LANGUAGE plpgsql IMMUTABLE
|
||||||
|
AS $_$
|
||||||
|
BEGIN
|
||||||
|
RETURN str ~ '^[0-9a-f]{32}$';
|
||||||
|
END;
|
||||||
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: is_nickname(text); Type: FUNCTION; Schema: public; Owner: -
|
-- Name: is_nickname(text); Type: FUNCTION; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -162,7 +175,7 @@ CREATE TABLE public.accounts (
|
||||||
person_id bigint,
|
person_id bigint,
|
||||||
contacts_list_id bigint NOT NULL,
|
contacts_list_id bigint NOT NULL,
|
||||||
CONSTRAINT biography CHECK (((biography IS NULL) OR public.is_good_limited_text(biography, 3, 10000))),
|
CONSTRAINT biography CHECK (((biography IS NULL) OR public.is_good_limited_text(biography, 3, 10000))),
|
||||||
CONSTRAINT guest_token CHECK (((guest_token)::text ~ '^[0-9a-f]{32}$'::text)),
|
CONSTRAINT guest_token CHECK (public.is_guest_token((guest_token)::text)),
|
||||||
CONSTRAINT nickname CHECK (public.is_nickname((nickname)::text)),
|
CONSTRAINT nickname CHECK (public.is_nickname((nickname)::text)),
|
||||||
CONSTRAINT public_name CHECK (((public_name IS NULL) OR public.is_good_limited_text((public_name)::text, 3, 255)))
|
CONSTRAINT public_name CHECK (((public_name IS NULL) OR public.is_good_limited_text((public_name)::text, 3, 255)))
|
||||||
);
|
);
|
||||||
|
|
Reference in a new issue