-- This file creates some tables to be used in the tests.
--
-- Note that the reset-db program that reads this file is dumb and reads
-- it one line at a time. Hence each statement must be on a single line.

CREATE TABLE testtab1 (id integer PRIMARY KEY, t varchar(20));
INSERT INTO testtab1 VALUES (1, 'foo');
INSERT INTO testtab1 VALUES (2, 'bar');
INSERT INTO testtab1 VALUES (3, 'foobar');

CREATE TABLE testtab_fk (id integer REFERENCES testtab1, t varchar(20));
INSERT INTO testtab_fk VALUES (1, 'hoge');
INSERT INTO testtab_fk VALUES (2, 'pogno');
INSERT INTO testtab_fk VALUES (3, 'poco');

CREATE TABLE byteatab (id integer, t bytea);
INSERT INTO byteatab VALUES (1, E'\\001\\002\\003\\004\\005\\006\\007\\010'::bytea);
INSERT INTO byteatab VALUES (2, 'bar');
INSERT INTO byteatab VALUES (3, 'foobar');
INSERT INTO byteatab VALUES (4, 'foo');
INSERT INTO byteatab VALUES (5, 'barf');

CREATE TABLE intervaltable(id integer, iv interval, d varchar(100));
INSERT INTO intervaltable VALUES (1, '1 day', 'one day');
INSERT INTO intervaltable VALUES (2, '10 seconds', 'ten secs');
INSERT INTO intervaltable VALUES (3, '100 years', 'hundred years');

CREATE TABLE booltab (id integer, t varchar(5), b boolean);
INSERT INTO booltab VALUES (1, 'yeah', true);
INSERT INTO booltab VALUES (2, 'yes', true);
INSERT INTO booltab VALUES (3, 'true', true);
INSERT INTO booltab VALUES (4, 'false', false);
INSERT INTO booltab VALUES (5, 'not', false);

CREATE TABLE test_special_primary(id integer primary key, uniq integer unique);
CREATE TABLE test_special( id integer, ival integer);
CREATE UNIQUE index test_special_id on public.test_special(id);
CREATE UNIQUE index test_special_ui on public.test_special(ival);

-- View
CREATE VIEW testview AS SELECT * FROM testtab1;

-- Materialized view
CREATE MATERIALIZED VIEW testmatview AS SELECT * FROM testtab1;

-- Foreign table
CREATE FOREIGN DATA WRAPPER testfdw;
CREATE SERVER testserver FOREIGN DATA WRAPPER testfdw;
CREATE FOREIGN TABLE testforeign (c1 int) SERVER testserver;

-- Procedure for catalog function checks
CREATE FUNCTION simple_add(in int, in int, out int) AS $$ SELECT $1 + $2; $$ LANGUAGE SQL;
-- 	Function Returning composite type
CREATE FUNCTION getfoo(int) RETURNS booltab AS $$ SELECT * FROM booltab WHERE id = $1; $$ LANGUAGE SQL;
--	Function Returning set of composite type
CREATE FUNCTION getboo(int) RETURNS SETOF booltab AS $$ SELECT * FROM booltab WHERE id = $1; $$ LANGUAGE SQL;
--	Function Returning table
CREATE FUNCTION tbl_arg(in p_f1 int) returns table(p_f2 text, p_f3 boolean) AS $$ SELECT t, b from booltab where id = p_f1; $$ LANGUAGE SQL;
--	The previous one is equivalent to using one or more OUT parameters
--	plus marking the function as returning SETOF record (or SETOF a single
--	output parameter's type, as appropriate).
CREATE FUNCTION set_of(in p_f1 int, out p_f2 text, out p_f3 boolean) returns setof record AS $$ SELECT t, b from booltab where id = p_f1; $$ LANGUAGE SQL;

-- Large object support
CREATE DOMAIN lo AS oid;
CREATE TABLE lo_test_tab (id int4, large_data lo);
