mirror of
https://github.com/supabase/supabase.git
synced 2026-05-09 10:19:50 -04:00
0106c4b319
* chore(pg-meta): port functions tests
141 lines
3.6 KiB
PL/PgSQL
141 lines
3.6 KiB
PL/PgSQL
-- We apply our test seedings to template1 so every new created db will have the same structure
|
|
\c template1
|
|
|
|
-- Tables for testing
|
|
|
|
CREATE TYPE public.user_status AS ENUM ('ACTIVE', 'INACTIVE');
|
|
CREATE TYPE composite_type_with_array_attribute AS (my_text_array text[]);
|
|
|
|
CREATE TABLE public.users (
|
|
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name text,
|
|
status user_status DEFAULT 'ACTIVE'
|
|
);
|
|
INSERT INTO
|
|
public.users (name)
|
|
VALUES
|
|
('Joe Bloggs'),
|
|
('Jane Doe');
|
|
|
|
CREATE TABLE public.todos (
|
|
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
details text,
|
|
"user-id" bigint REFERENCES users NOT NULL
|
|
);
|
|
|
|
INSERT INTO
|
|
public.todos (details, "user-id")
|
|
VALUES
|
|
('Star the repo', 1),
|
|
('Watch the releases', 2);
|
|
|
|
|
|
CREATE FUNCTION add(integer, integer) RETURNS integer
|
|
AS 'select $1 + $2;'
|
|
LANGUAGE SQL
|
|
IMMUTABLE
|
|
RETURNS NULL ON NULL INPUT;
|
|
|
|
create table public.users_audit (
|
|
id BIGINT generated by DEFAULT as identity,
|
|
created_at timestamptz DEFAULT now(),
|
|
user_id bigint,
|
|
previous_value jsonb
|
|
);
|
|
|
|
create function public.audit_action()
|
|
returns trigger as $$
|
|
begin
|
|
insert into public.users_audit (user_id, previous_value)
|
|
values (old.id, row_to_json(old));
|
|
|
|
return new;
|
|
end;
|
|
$$ language plpgsql;
|
|
|
|
CREATE VIEW todos_view AS SELECT * FROM public.todos;
|
|
-- For testing typegen on view-to-view relationships
|
|
create view users_view as select * from public.users;
|
|
|
|
create materialized view todos_matview as select * from public.todos;
|
|
|
|
create function public.blurb(public.todos) returns text as
|
|
$$
|
|
select substring($1.details, 1, 3);
|
|
$$ language sql stable;
|
|
|
|
create function public.blurb_varchar(public.todos) returns character varying as
|
|
$$
|
|
select substring($1.details, 1, 3);
|
|
$$ language sql stable;
|
|
|
|
create function public.details_length(public.todos) returns integer as
|
|
$$
|
|
select length($1.details);
|
|
$$ language sql stable;
|
|
|
|
create function public.details_is_long(public.todos) returns boolean as
|
|
$$
|
|
select $1.details_length > 20;
|
|
$$ language sql stable;
|
|
|
|
create function public.details_words(public.todos) returns text[] as
|
|
$$
|
|
select string_to_array($1.details, ' ');
|
|
$$ language sql stable;
|
|
|
|
create extension postgres_fdw;
|
|
create server foreign_server foreign data wrapper postgres_fdw options (host 'localhost', port '5432', dbname 'postgres');
|
|
create user mapping for postgres server foreign_server options (user 'postgres', password 'postgres');
|
|
create foreign table foreign_table (
|
|
id int8 not null,
|
|
name text,
|
|
status user_status
|
|
) server foreign_server options (schema_name 'public', table_name 'users');
|
|
|
|
create or replace function public.function_returning_row()
|
|
returns public.users
|
|
language sql
|
|
stable
|
|
as $$
|
|
select * from public.users limit 1;
|
|
$$;
|
|
|
|
create or replace function public.function_returning_set_of_rows()
|
|
returns setof public.users
|
|
language sql
|
|
stable
|
|
as $$
|
|
select * from public.users;
|
|
$$;
|
|
|
|
create or replace function public.function_returning_table()
|
|
returns table (id int, name text)
|
|
language sql
|
|
stable
|
|
as $$
|
|
select id, name from public.users;
|
|
$$;
|
|
|
|
create or replace function public.polymorphic_function(text) returns void language sql as '';
|
|
create or replace function public.polymorphic_function(bool) returns void language sql as '';
|
|
|
|
create table user_details (
|
|
user_id int8 references users(id) primary key,
|
|
details text
|
|
);
|
|
|
|
create view a_view as select id from users;
|
|
|
|
create table empty();
|
|
|
|
create table table_with_other_tables_row_type (
|
|
col1 user_details,
|
|
col2 a_view
|
|
);
|
|
|
|
create table table_with_primary_key_other_than_id (
|
|
other_id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name text
|
|
);
|