Update output to new psql conventions.

This commit is contained in:
Thomas G. Lockhart 2000-01-05 17:31:08 +00:00
parent 6033cfd429
commit 9c1b29816e
10 changed files with 744 additions and 450 deletions

View File

@ -1,14 +1,20 @@
QUERY: CREATE AGGREGATE newavg ( --
sfunc1 = int4pl, basetype = int4, stype1 = int4, -- CREATE_AGGREGATE
--
-- all functions CREATEd
CREATE AGGREGATE newavg (
sfunc1 = int4pl, basetype = int4, stype1 = int4,
sfunc2 = int4inc, stype2 = int4, sfunc2 = int4inc, stype2 = int4,
finalfunc = int4div, finalfunc = int4div,
initcond1 = '0', initcond2 = '0' initcond1 = '0', initcond2 = '0'
); );
QUERY: CREATE AGGREGATE newsum ( -- sfunc1 (value-dependent) only
sfunc1 = int4pl, basetype = int4, stype1 = int4, CREATE AGGREGATE newsum (
sfunc1 = int4pl, basetype = int4, stype1 = int4,
initcond1 = '0' initcond1 = '0'
); );
QUERY: CREATE AGGREGATE newcnt ( -- sfunc2 (value-independent) only
sfunc2 = int4inc, basetype = int4, stype2 = int4, CREATE AGGREGATE newcnt (
sfunc2 = int4inc, basetype = int4, stype2 = int4,
initcond2 = '0' initcond2 = '0'
); );

View File

@ -1,22 +1,61 @@
QUERY: CREATE INDEX onek_unique1 ON onek USING btree(unique1 int4_ops); --
QUERY: CREATE INDEX onek_unique2 ON onek USING btree(unique2 int4_ops); -- CREATE_INDEX
QUERY: CREATE INDEX onek_hundred ON onek USING btree(hundred int4_ops); -- Create ancillary data structures (i.e. indices)
QUERY: CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 name_ops); --
QUERY: CREATE INDEX tenk1_unique1 ON tenk1 USING btree(unique1 int4_ops); --
QUERY: CREATE INDEX tenk1_unique2 ON tenk1 USING btree(unique2 int4_ops); -- BTREE
QUERY: CREATE INDEX tenk1_hundred ON tenk1 USING btree(hundred int4_ops); --
QUERY: CREATE INDEX tenk2_unique1 ON tenk2 USING btree(unique1 int4_ops); CREATE INDEX onek_unique1 ON onek USING btree(unique1 int4_ops);
QUERY: CREATE INDEX tenk2_unique2 ON tenk2 USING btree(unique2 int4_ops); CREATE INDEX onek_unique2 ON onek USING btree(unique2 int4_ops);
QUERY: CREATE INDEX tenk2_hundred ON tenk2 USING btree(hundred int4_ops); CREATE INDEX onek_hundred ON onek USING btree(hundred int4_ops);
QUERY: CREATE INDEX rix ON road USING btree (name text_ops); CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 name_ops);
QUERY: CREATE INDEX iix ON ihighway USING btree (name text_ops); CREATE INDEX tenk1_unique1 ON tenk1 USING btree(unique1 int4_ops);
QUERY: CREATE INDEX six ON shighway USING btree (name text_ops); CREATE INDEX tenk1_unique2 ON tenk1 USING btree(unique2 int4_ops);
QUERY: CREATE INDEX bt_i4_index ON bt_i4_heap USING btree (seqno int4_ops); CREATE INDEX tenk1_hundred ON tenk1 USING btree(hundred int4_ops);
QUERY: CREATE INDEX bt_name_index ON bt_name_heap USING btree (seqno name_ops); CREATE INDEX tenk2_unique1 ON tenk2 USING btree(unique1 int4_ops);
QUERY: CREATE INDEX bt_txt_index ON bt_txt_heap USING btree (seqno text_ops); CREATE INDEX tenk2_unique2 ON tenk2 USING btree(unique2 int4_ops);
QUERY: CREATE INDEX bt_f8_index ON bt_f8_heap USING btree (seqno float8_ops); CREATE INDEX tenk2_hundred ON tenk2 USING btree(hundred int4_ops);
QUERY: CREATE INDEX rect2ind ON fast_emp4000 USING rtree (home_base bigbox_ops); CREATE INDEX rix ON road USING btree (name text_ops);
QUERY: CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops); CREATE INDEX iix ON ihighway USING btree (name text_ops);
QUERY: CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops); CREATE INDEX six ON shighway USING btree (name text_ops);
QUERY: CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops); --
QUERY: CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops); -- BTREE ascending/descending cases
--
-- we load int4/text from pure descending data (each key is a new
-- low key) and name/f8 from pure ascending data (each key is a new
-- high key). we had a bug where new low keys would sometimes be
-- "lost".
--
CREATE INDEX bt_i4_index ON bt_i4_heap USING btree (seqno int4_ops);
CREATE INDEX bt_name_index ON bt_name_heap USING btree (seqno name_ops);
CREATE INDEX bt_txt_index ON bt_txt_heap USING btree (seqno text_ops);
CREATE INDEX bt_f8_index ON bt_f8_heap USING btree (seqno float8_ops);
--
-- BTREE partial indices
-- partial indices are not supported in PostgreSQL
--
--CREATE INDEX onek2_u1_prtl ON onek2 USING btree(unique1 int4_ops)
-- where onek2.unique1 < 20 or onek2.unique1 > 980;
--CREATE INDEX onek2_u2_prtl ON onek2 USING btree(unique2 int4_ops)
-- where onek2.stringu1 < 'B';
-- EXTEND INDEX onek2_u2_prtl where onek2.stringu1 < 'C';
-- EXTEND INDEX onek2_u2_prtl;
-- CREATE INDEX onek2_stu1_prtl ON onek2 USING btree(stringu1 name_ops)
-- where onek2.stringu1 >= 'J' and onek2.stringu1 < 'K';
--
-- RTREE
--
-- rtrees use a quadratic page-splitting algorithm that takes a
-- really, really long time. we don't test all rtree opclasses
-- in the regression test (we check them USING the sequoia 2000
-- benchmark).
--
CREATE INDEX rect2ind ON fast_emp4000 USING rtree (home_base bigbox_ops);
--
-- HASH
--
CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops);
CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops);
-- CREATE INDEX hash_ovfl_index ON hash_ovfl_heap USING hash (x int4_ops);

View File

@ -1,135 +1,151 @@
QUERY: INSERT INTO tenk2 VALUES (tenk1.*); --
QUERY: SELECT * INTO TABLE onek2 FROM onek; -- CREATE_MISC
QUERY: INSERT INTO fast_emp4000 VALUES (slow_emp4000.*); --
QUERY: SELECT * -- CLASS POPULATION
-- (any resemblance to real life is purely coincidental)
--
INSERT INTO tenk2 VALUES (tenk1.*);
SELECT * INTO TABLE onek2 FROM onek;
INSERT INTO fast_emp4000 VALUES (slow_emp4000.*);
SELECT *
INTO TABLE Bprime INTO TABLE Bprime
FROM tenk1 FROM tenk1
WHERE unique2 < 1000; WHERE unique2 < 1000;
QUERY: INSERT INTO hobbies_r (name, person) INSERT INTO hobbies_r (name, person)
SELECT 'posthacking', p.name SELECT 'posthacking', p.name
FROM person* p FROM person* p
WHERE p.name = 'mike' or p.name = 'jeff'; WHERE p.name = 'mike' or p.name = 'jeff';
QUERY: INSERT INTO hobbies_r (name, person) INSERT INTO hobbies_r (name, person)
SELECT 'basketball', p.name SELECT 'basketball', p.name
FROM person p FROM person p
WHERE p.name = 'joe' or p.name = 'sally'; WHERE p.name = 'joe' or p.name = 'sally';
QUERY: INSERT INTO hobbies_r (name) VALUES ('skywalking'); INSERT INTO hobbies_r (name) VALUES ('skywalking');
QUERY: INSERT INTO equipment_r (name, hobby) VALUES ('advil', 'posthacking'); INSERT INTO equipment_r (name, hobby) VALUES ('advil', 'posthacking');
QUERY: INSERT INTO equipment_r (name, hobby) VALUES ('peet''s coffee', 'posthacking'); INSERT INTO equipment_r (name, hobby) VALUES ('peet''s coffee', 'posthacking');
QUERY: INSERT INTO equipment_r (name, hobby) VALUES ('hightops', 'basketball'); INSERT INTO equipment_r (name, hobby) VALUES ('hightops', 'basketball');
QUERY: INSERT INTO equipment_r (name, hobby) VALUES ('guts', 'skywalking'); INSERT INTO equipment_r (name, hobby) VALUES ('guts', 'skywalking');
QUERY: SELECT * SELECT *
INTO TABLE ramp INTO TABLE ramp
FROM road FROM road
WHERE name ~ '.*Ramp'; WHERE name ~ '.*Ramp';
QUERY: INSERT INTO ihighway INSERT INTO ihighway
SELECT * SELECT *
FROM road FROM road
WHERE name ~ 'I- .*'; WHERE name ~ 'I- .*';
QUERY: INSERT INTO shighway INSERT INTO shighway
SELECT * SELECT *
FROM road FROM road
WHERE name ~ 'State Hwy.*'; WHERE name ~ 'State Hwy.*';
QUERY: UPDATE shighway UPDATE shighway
SET surface = 'asphalt'; SET surface = 'asphalt';
QUERY: INSERT INTO a_star (class, a) VALUES ('a', 1); INSERT INTO a_star (class, a) VALUES ('a', 1);
QUERY: INSERT INTO a_star (class, a) VALUES ('a', 2); INSERT INTO a_star (class, a) VALUES ('a', 2);
QUERY: INSERT INTO a_star (class) VALUES ('a'); INSERT INTO a_star (class) VALUES ('a');
QUERY: INSERT INTO b_star (class, a, b) VALUES ('b', 3, 'mumble'::text); INSERT INTO b_star (class, a, b) VALUES ('b', 3, 'mumble'::text);
QUERY: INSERT INTO b_star (class, a) VALUES ('b', 4); INSERT INTO b_star (class, a) VALUES ('b', 4);
QUERY: INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text); INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text);
QUERY: INSERT INTO b_star (class) VALUES ('b'); INSERT INTO b_star (class) VALUES ('b');
QUERY: INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name); INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name);
QUERY: INSERT INTO c_star (class, a) VALUES ('c', 6); INSERT INTO c_star (class, a) VALUES ('c', 6);
QUERY: INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name); INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name);
QUERY: INSERT INTO c_star (class) VALUES ('c'); INSERT INTO c_star (class) VALUES ('c');
QUERY: INSERT INTO d_star (class, a, b, c, d) INSERT INTO d_star (class, a, b, c, d)
VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8); VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8);
QUERY: INSERT INTO d_star (class, a, b, c) INSERT INTO d_star (class, a, b, c)
VALUES ('d', 8, 'stumble'::text, 'hi koko'::name); VALUES ('d', 8, 'stumble'::text, 'hi koko'::name);
QUERY: INSERT INTO d_star (class, a, b, d) INSERT INTO d_star (class, a, b, d)
VALUES ('d', 9, 'rumble'::text, '1.1'::float8); VALUES ('d', 9, 'rumble'::text, '1.1'::float8);
QUERY: INSERT INTO d_star (class, a, c, d) INSERT INTO d_star (class, a, c, d)
VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8); VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8);
QUERY: INSERT INTO d_star (class, b, c, d) INSERT INTO d_star (class, b, c, d)
VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8); VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8);
QUERY: INSERT INTO d_star (class, a, b) INSERT INTO d_star (class, a, b)
VALUES ('d', 11, 'fumble'::text); VALUES ('d', 11, 'fumble'::text);
QUERY: INSERT INTO d_star (class, a, c) INSERT INTO d_star (class, a, c)
VALUES ('d', 12, 'hi avi'::name); VALUES ('d', 12, 'hi avi'::name);
QUERY: INSERT INTO d_star (class, a, d) INSERT INTO d_star (class, a, d)
VALUES ('d', 13, '1000.0001'::float8); VALUES ('d', 13, '1000.0001'::float8);
QUERY: INSERT INTO d_star (class, b, c) INSERT INTO d_star (class, b, c)
VALUES ('d', 'tumble'::text, 'hi andrew'::name); VALUES ('d', 'tumble'::text, 'hi andrew'::name);
QUERY: INSERT INTO d_star (class, b, d) INSERT INTO d_star (class, b, d)
VALUES ('d', 'humble'::text, '10000.00001'::float8); VALUES ('d', 'humble'::text, '10000.00001'::float8);
QUERY: INSERT INTO d_star (class, c, d) INSERT INTO d_star (class, c, d)
VALUES ('d', 'hi ginger'::name, '100000.000001'::float8); VALUES ('d', 'hi ginger'::name, '100000.000001'::float8);
QUERY: INSERT INTO d_star (class, a) VALUES ('d', 14); INSERT INTO d_star (class, a) VALUES ('d', 14);
QUERY: INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text); INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text);
QUERY: INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name); INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name);
QUERY: INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8); INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8);
QUERY: INSERT INTO d_star (class) VALUES ('d'); INSERT INTO d_star (class) VALUES ('d');
QUERY: INSERT INTO e_star (class, a, c, e) INSERT INTO e_star (class, a, c, e)
VALUES ('e', 15, 'hi carol'::name, '-1'::int2); VALUES ('e', 15, 'hi carol'::name, '-1'::int2);
QUERY: INSERT INTO e_star (class, a, c) INSERT INTO e_star (class, a, c)
VALUES ('e', 16, 'hi bob'::name); VALUES ('e', 16, 'hi bob'::name);
QUERY: INSERT INTO e_star (class, a, e) INSERT INTO e_star (class, a, e)
VALUES ('e', 17, '-2'::int2); VALUES ('e', 17, '-2'::int2);
QUERY: INSERT INTO e_star (class, c, e) INSERT INTO e_star (class, c, e)
VALUES ('e', 'hi michelle'::name, '-3'::int2); VALUES ('e', 'hi michelle'::name, '-3'::int2);
QUERY: INSERT INTO e_star (class, a) INSERT INTO e_star (class, a)
VALUES ('e', 18); VALUES ('e', 18);
QUERY: INSERT INTO e_star (class, c) INSERT INTO e_star (class, c)
VALUES ('e', 'hi elisa'::name); VALUES ('e', 'hi elisa'::name);
QUERY: INSERT INTO e_star (class, e) INSERT INTO e_star (class, e)
VALUES ('e', '-4'::int2); VALUES ('e', '-4'::int2);
QUERY: INSERT INTO f_star (class, a, c, e, f) INSERT INTO f_star (class, a, c, e, f)
VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon); VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon);
QUERY: INSERT INTO f_star (class, a, c, e) INSERT INTO f_star (class, a, c, e)
VALUES ('f', 20, 'hi mike'::name, '-6'::int2); VALUES ('f', 20, 'hi mike'::name, '-6'::int2);
QUERY: INSERT INTO f_star (class, a, c, f) INSERT INTO f_star (class, a, c, f)
VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon); VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon);
QUERY: INSERT INTO f_star (class, a, e, f) INSERT INTO f_star (class, a, e, f)
VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon); VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon);
QUERY: INSERT INTO f_star (class, c, e, f) INSERT INTO f_star (class, c, e, f)
VALUES ('f', 'hi keith'::name, '-8'::int2, VALUES ('f', 'hi keith'::name, '-8'::int2,
'(1111,3333),(2222,4444)'::polygon); '(1111,3333),(2222,4444)'::polygon);
QUERY: INSERT INTO f_star (class, a, c) INSERT INTO f_star (class, a, c)
VALUES ('f', 24, 'hi marc'::name); VALUES ('f', 24, 'hi marc'::name);
QUERY: INSERT INTO f_star (class, a, e) INSERT INTO f_star (class, a, e)
VALUES ('f', 25, '-9'::int2); VALUES ('f', 25, '-9'::int2);
QUERY: INSERT INTO f_star (class, a, f) INSERT INTO f_star (class, a, f)
VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon); VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon);
QUERY: INSERT INTO f_star (class, c, e) INSERT INTO f_star (class, c, e)
VALUES ('f', 'hi allison'::name, '-10'::int2); VALUES ('f', 'hi allison'::name, '-10'::int2);
QUERY: INSERT INTO f_star (class, c, f) INSERT INTO f_star (class, c, f)
VALUES ('f', 'hi jeff'::name, VALUES ('f', 'hi jeff'::name,
'(111111,333333),(222222,444444)'::polygon); '(111111,333333),(222222,444444)'::polygon);
QUERY: INSERT INTO f_star (class, e, f) INSERT INTO f_star (class, e, f)
VALUES ('f', '-11'::int2, '(1111111,3333333),(2222222,4444444)'::polygon); VALUES ('f', '-11'::int2, '(1111111,3333333),(2222222,4444444)'::polygon);
QUERY: INSERT INTO f_star (class, a) VALUES ('f', 27); INSERT INTO f_star (class, a) VALUES ('f', 27);
QUERY: INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name); INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name);
QUERY: INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2); INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2);
QUERY: INSERT INTO f_star (class, f) INSERT INTO f_star (class, f)
VALUES ('f', '(11111111,33333333),(22222222,44444444)'::polygon); VALUES ('f', '(11111111,33333333),(22222222,44444444)'::polygon);
QUERY: INSERT INTO f_star (class) VALUES ('f'); INSERT INTO f_star (class) VALUES ('f');
QUERY: INSERT INTO arrtest (a[5], b[2][1][2], c, d, f, g) --
-- ARRAYS
--
--
-- only this array as a 0-based 'e', the others are 1-based.
-- 'e' is also a large object.
--
INSERT INTO arrtest (a[5], b[2][1][2], c, d, f, g)
VALUES ('{1,2,3,4,5}', '{{{},{1,2}}}', '{}', '{}', '{}', '{}'); VALUES ('{1,2,3,4,5}', '{{{},{1,2}}}', '{}', '{}', '{}', '{}');
QUERY: UPDATE arrtest SET e[0] = '1.1'; UPDATE arrtest SET e[0] = '1.1';
QUERY: UPDATE arrtest SET e[1] = '2.2'; UPDATE arrtest SET e[1] = '2.2';
QUERY: INSERT INTO arrtest (a, b[2][2][1], c, d, e, f, g) INSERT INTO arrtest (a, b[2][2][1], c, d, e, f, g)
VALUES ('{11,12,23}', '{{3,4},{4,5}}', '{"foobar"}', VALUES ('{11,12,23}', '{{3,4},{4,5}}', '{"foobar"}',
'{{"elt1", "elt2"}}', '{"3.4", "6.7"}', '{{"elt1", "elt2"}}', '{"3.4", "6.7"}',
'{"abc","abcdefgh"}', '{"abc","abcdefgh"}'); '{"abc","abcdefgh"}', '{"abc","abcdefgh"}');
QUERY: INSERT INTO arrtest (a, b[1][2][2], c, d[2][1]) INSERT INTO arrtest (a, b[1][2][2], c, d[2][1])
VALUES ('{}', '{3,4}', '{foo,bar}', '{bar,foo}'); VALUES ('{}', '{3,4}', '{foo,bar}', '{bar,foo}');
QUERY: CREATE TABLE iportaltest ( --
i int4, -- for internal portal (cursor) tests
d float4, --
CREATE TABLE iportaltest (
i int4,
d float4,
p polygon p polygon
); );
QUERY: INSERT INTO iportaltest (i, d, p) INSERT INTO iportaltest (i, d, p)
VALUES (1, 3.567, '(3.0,1.0),(4.0,2.0)'::polygon); VALUES (1, 3.567, '(3.0,1.0),(4.0,2.0)'::polygon);
QUERY: INSERT INTO iportaltest (i, d, p) INSERT INTO iportaltest (i, d, p)
VALUES (2, 89.05, '(4.0,2.0),(3.0,1.0)'::polygon); VALUES (2, 89.05, '(4.0,2.0),(3.0,1.0)'::polygon);

View File

@ -1,25 +1,28 @@
QUERY: CREATE OPERATOR ## ( --
-- CREATE_OPERATOR
--
CREATE OPERATOR ## (
leftarg = path, leftarg = path,
rightarg = path, rightarg = path,
procedure = path_inter, procedure = path_inter,
commutator = ## commutator = ##
); );
QUERY: CREATE OPERATOR <% ( CREATE OPERATOR <% (
leftarg = point, leftarg = point,
rightarg = widget, rightarg = widget,
procedure = pt_in_widget, procedure = pt_in_widget,
commutator = >% , commutator = >% ,
negator = >=% negator = >=%
); );
QUERY: CREATE OPERATOR @#@ ( CREATE OPERATOR @#@ (
rightarg = int4, rightarg = int4, -- left unary
procedure = int4fac procedure = int4fac
); );
QUERY: CREATE OPERATOR #@# ( CREATE OPERATOR #@# (
leftarg = int4, leftarg = int4, -- right unary
procedure = int4fac procedure = int4fac
); );
QUERY: CREATE OPERATOR #%# ( CREATE OPERATOR #%# (
leftarg = int4, leftarg = int4, -- right unary
procedure = int4fac procedure = int4fac
); );

View File

@ -1,169 +1,192 @@
QUERY: CREATE TABLE hobbies_r ( --
name text, -- CREATE_TABLE
--
--
-- CLASS DEFINITIONS
--
CREATE TABLE hobbies_r (
name text,
person text person text
); );
QUERY: CREATE TABLE equipment_r ( CREATE TABLE equipment_r (
name text, name text,
hobby text hobby text
); );
QUERY: CREATE TABLE onek ( CREATE TABLE onek (
unique1 int4, unique1 int4,
unique2 int4, unique2 int4,
two int4, two int4,
four int4, four int4,
ten int4, ten int4,
twenty int4, twenty int4,
hundred int4, hundred int4,
thousand int4, thousand int4,
twothousand int4, twothousand int4,
fivethous int4, fivethous int4,
tenthous int4, tenthous int4,
odd int4, odd int4,
even int4, even int4,
stringu1 name, stringu1 name,
stringu2 name, stringu2 name,
string4 name string4 name
); );
QUERY: CREATE TABLE tenk1 ( CREATE TABLE tenk1 (
unique1 int4, unique1 int4,
unique2 int4, unique2 int4,
two int4, two int4,
four int4, four int4,
ten int4, ten int4,
twenty int4, twenty int4,
hundred int4, hundred int4,
thousand int4, thousand int4,
twothousand int4, twothousand int4,
fivethous int4, fivethous int4,
tenthous int4, tenthous int4,
odd int4, odd int4,
even int4, even int4,
stringu1 name, stringu1 name,
stringu2 name, stringu2 name,
string4 name string4 name
); );
QUERY: CREATE TABLE tenk2 ( CREATE TABLE tenk2 (
unique1 int4, unique1 int4,
unique2 int4, unique2 int4,
two int4, two int4,
four int4, four int4,
ten int4, ten int4,
twenty int4, twenty int4,
hundred int4, hundred int4,
thousand int4, thousand int4,
twothousand int4, twothousand int4,
fivethous int4, fivethous int4,
tenthous int4, tenthous int4,
odd int4, odd int4,
even int4, even int4,
stringu1 name, stringu1 name,
stringu2 name, stringu2 name,
string4 name string4 name
); );
QUERY: CREATE TABLE person ( CREATE TABLE person (
name text, name text,
age int4, age int4,
location point location point
); );
QUERY: CREATE TABLE emp ( CREATE TABLE emp (
salary int4, salary int4,
manager name manager name
) INHERITS (person); ) INHERITS (person);
QUERY: CREATE TABLE student ( CREATE TABLE student (
gpa float8 gpa float8
) INHERITS (person); ) INHERITS (person);
QUERY: CREATE TABLE stud_emp ( CREATE TABLE stud_emp (
percent int4 percent int4
) INHERITS (emp, student); ) INHERITS (emp, student);
QUERY: CREATE TABLE city ( CREATE TABLE city (
name name, name name,
location box, location box,
budget city_budget budget city_budget
); );
QUERY: CREATE TABLE dept ( CREATE TABLE dept (
dname name, dname name,
mgrname text mgrname text
); );
QUERY: CREATE TABLE slow_emp4000 ( CREATE TABLE slow_emp4000 (
home_base box home_base box
); );
QUERY: CREATE TABLE fast_emp4000 ( CREATE TABLE fast_emp4000 (
home_base box home_base box
); );
QUERY: CREATE TABLE road ( CREATE TABLE road (
name text, name text,
thepath path thepath path
); );
QUERY: CREATE TABLE ihighway () INHERITS (road); CREATE TABLE ihighway () INHERITS (road);
QUERY: CREATE TABLE shighway ( CREATE TABLE shighway (
surface text surface text
) INHERITS (road); ) INHERITS (road);
QUERY: CREATE TABLE real_city ( CREATE TABLE real_city (
pop int4, pop int4,
cname text, cname text,
outline path outline path
); );
QUERY: CREATE TABLE a_star ( --
class char, -- test the "star" operators a bit more thoroughly -- this time,
a int4 -- throw in lots of NULL fields...
--
-- a is the type root
-- b and c inherit from a (one-level single inheritance)
-- d inherits from b and c (two-level multiple inheritance)
-- e inherits from c (two-level single inheritance)
-- f inherits from e (three-level single inheritance)
--
CREATE TABLE a_star (
class char,
a int4
); );
QUERY: CREATE TABLE b_star ( CREATE TABLE b_star (
b text b text
) INHERITS (a_star); ) INHERITS (a_star);
QUERY: CREATE TABLE c_star ( CREATE TABLE c_star (
c name c name
) INHERITS (a_star); ) INHERITS (a_star);
QUERY: CREATE TABLE d_star ( CREATE TABLE d_star (
d float8 d float8
) INHERITS (b_star, c_star); ) INHERITS (b_star, c_star);
QUERY: CREATE TABLE e_star ( CREATE TABLE e_star (
e int2 e int2
) INHERITS (c_star); ) INHERITS (c_star);
QUERY: CREATE TABLE f_star ( CREATE TABLE f_star (
f polygon f polygon
) INHERITS (e_star); ) INHERITS (e_star);
QUERY: CREATE TABLE aggtest ( CREATE TABLE aggtest (
a int2, a int2,
b float4 b float4
); );
QUERY: CREATE TABLE arrtest ( CREATE TABLE arrtest (
a int2[], a int2[],
b int4[][][], b int4[][][],
c name[], c name[],
d text[][], d text[][],
e float8[], e float8[],
f char(5)[], f char(5)[],
g varchar(5)[] g varchar(5)[]
); );
QUERY: CREATE TABLE hash_i4_heap ( CREATE TABLE hash_i4_heap (
seqno int4, seqno int4,
random int4 random int4
); );
QUERY: CREATE TABLE hash_name_heap ( CREATE TABLE hash_name_heap (
seqno int4, seqno int4,
random name random name
); );
QUERY: CREATE TABLE hash_txt_heap ( CREATE TABLE hash_txt_heap (
seqno int4, seqno int4,
random text random text
); );
QUERY: CREATE TABLE hash_f8_heap ( CREATE TABLE hash_f8_heap (
seqno int4, seqno int4,
random float8 random float8
); );
QUERY: CREATE TABLE bt_i4_heap ( -- don't include the hash_ovfl_heap stuff in the distribution
-- the data set is too large for what it's worth
--
-- CREATE TABLE hash_ovfl_heap (
-- x int4,
-- y int4
-- );
CREATE TABLE bt_i4_heap (
seqno int4, seqno int4,
random int4 random int4
); );
QUERY: CREATE TABLE bt_name_heap ( CREATE TABLE bt_name_heap (
seqno name, seqno name,
random int4 random int4
); );
QUERY: CREATE TABLE bt_txt_heap ( CREATE TABLE bt_txt_heap (
seqno text, seqno text,
random int4 random int4
); );
QUERY: CREATE TABLE bt_f8_heap ( CREATE TABLE bt_f8_heap (
seqno float8, seqno float8,
random int4 random int4
); );

View File

@ -1,12 +1,15 @@
QUERY: CREATE TYPE widget ( --
internallength = 24, -- CREATE_TYPE
--
CREATE TYPE widget (
internallength = 24,
input = widget_in, input = widget_in,
output = widget_out, output = widget_out,
alignment = double alignment = double
); );
QUERY: CREATE TYPE city_budget ( CREATE TYPE city_budget (
internallength = 16, internallength = 16,
input = int44in, input = int44in,
output = int44out, output = int44out,
element = int4 element = int4
); );

View File

@ -1,12 +1,17 @@
QUERY: CREATE VIEW street AS --
SELECT r.name, r.thepath, c.cname AS cname -- CREATE_VIEW
-- Virtual class definitions
-- (this also tests the query rewrite system)
--
CREATE VIEW street AS
SELECT r.name, r.thepath, c.cname AS cname
FROM road r, real_city c FROM road r, real_city c
WHERE c.outline ## r.thepath; WHERE c.outline ## r.thepath;
QUERY: CREATE VIEW iexit AS CREATE VIEW iexit AS
SELECT ih.name, ih.thepath, SELECT ih.name, ih.thepath,
interpt_pp(ih.thepath, r.thepath) AS exit interpt_pp(ih.thepath, r.thepath) AS exit
FROM ihighway ih, ramp r FROM ihighway ih, ramp r
WHERE ih.thepath ## r.thepath; WHERE ih.thepath ## r.thepath;
QUERY: CREATE VIEW toyemp AS CREATE VIEW toyemp AS
SELECT name, age, location, 12*salary AS annualsal SELECT name, age, location, 12*salary AS annualsal
FROM emp; FROM emp;

View File

@ -1,58 +1,118 @@
QUERY: select 1 --
-- errors.source
--
-- $Header: /cvsroot/pgsql/src/test/regress/expected/errors.out,v 1.15 2000/01/05 17:31:08 thomas Exp $
-- bad in postquel, but ok in postsql
select 1
--
-- UNSUPPORTED STUFF
-- doesn't work
-- attachas nonesuch
--
-- doesn't work
-- notify pg_class
--
--
-- RETRIEVE
-- missing relation name
select select
-- no such relation
select * from nonesuch; select * from nonesuch;
ERROR: parser: parse error at or near "select" ERROR: parser: parse error at or near "select"
QUERY: select nonesuch from pg_database; -- bad name in target list
select nonesuch from pg_database;
ERROR: attribute 'nonesuch' not found ERROR: attribute 'nonesuch' not found
QUERY: select * from pg_database where nonesuch = pg_database.datname; -- bad attribute name on lhs of operator
select * from pg_database where nonesuch = pg_database.datname;
ERROR: attribute 'nonesuch' not found ERROR: attribute 'nonesuch' not found
QUERY: select * from pg_database where pg_database.datname = nonesuch; -- bad attribute name on rhs of operator
select * from pg_database where pg_database.datname = nonesuch;
ERROR: attribute 'nonesuch' not found ERROR: attribute 'nonesuch' not found
QUERY: select distinct on foobar from pg_database; -- bad select distinct on syntax, distinct attribute missing
select distinct on foobar from pg_database;
ERROR: parser: parse error at or near "from" ERROR: parser: parse error at or near "from"
QUERY: select distinct on foobar * from pg_database; -- bad select distinct on syntax, distinct attribute not in target list
select distinct on foobar * from pg_database;
ERROR: All fields in the UNIQUE ON clause must appear in the target list ERROR: All fields in the UNIQUE ON clause must appear in the target list
QUERY: delete from; --
ERROR: parser: parse error at or near ";" -- DELETE
QUERY: delete from nonesuch;
-- missing relation name (this had better not wildcard!)
delete from;
ERROR: parser: parse error at or near ""
-- no such relation
delete from nonesuch;
ERROR: Relation 'nonesuch' does not exist ERROR: Relation 'nonesuch' does not exist
QUERY: drop table; --
ERROR: parser: parse error at or near ";" -- DESTROY
QUERY: drop table nonesuch;
-- missing relation name (this had better not wildcard!)
drop table;
ERROR: parser: parse error at or near ""
-- no such relation
drop table nonesuch;
ERROR: Relation 'nonesuch' does not exist ERROR: Relation 'nonesuch' does not exist
QUERY: alter table rename; --
ERROR: parser: parse error at or near ";" -- RENAME
QUERY: alter table nonesuch rename to newnonesuch;
-- relation renaming
-- missing relation name
alter table rename;
ERROR: parser: parse error at or near ""
-- no such relation
alter table nonesuch rename to newnonesuch;
ERROR: Relation 'nonesuch' does not exist ERROR: Relation 'nonesuch' does not exist
QUERY: alter table nonesuch rename to stud_emp; -- no such relation
alter table nonesuch rename to stud_emp;
ERROR: Relation 'nonesuch' does not exist ERROR: Relation 'nonesuch' does not exist
QUERY: alter table stud_emp rename to pg_stud_emp; -- system relation
alter table stud_emp rename to pg_stud_emp;
ERROR: renamerel: Illegal class name: "pg_stud_emp" -- pg_ is reserved for system catalogs ERROR: renamerel: Illegal class name: "pg_stud_emp" -- pg_ is reserved for system catalogs
QUERY: alter table stud_emp rename to aggtest; -- conflict
alter table stud_emp rename to aggtest;
ERROR: renamerel: relation "aggtest" exists ERROR: renamerel: relation "aggtest" exists
QUERY: alter table stud_emp rename to stud_emp; -- self-conflict
alter table stud_emp rename to stud_emp;
ERROR: renamerel: relation "stud_emp" exists ERROR: renamerel: relation "stud_emp" exists
QUERY: alter table nonesuchrel rename column nonesuchatt to newnonesuchatt; -- attribute renaming
-- no such relation
alter table nonesuchrel rename column nonesuchatt to newnonesuchatt;
ERROR: Relation 'nonesuchrel' does not exist ERROR: Relation 'nonesuchrel' does not exist
QUERY: alter table emp rename column nonesuchatt to newnonesuchatt; -- no such attribute
alter table emp rename column nonesuchatt to newnonesuchatt;
ERROR: renameatt: attribute "nonesuchatt" nonexistent ERROR: renameatt: attribute "nonesuchatt" nonexistent
QUERY: alter table emp rename column salary to manager; -- conflict
alter table emp rename column salary to manager;
ERROR: renameatt: attribute "manager" exists ERROR: renameatt: attribute "manager" exists
QUERY: alter table emp rename column salary to oid; -- conflict
alter table emp rename column salary to oid;
ERROR: renameatt: attribute "oid" exists ERROR: renameatt: attribute "oid" exists
QUERY: abort; --
-- TRANSACTION STUFF
-- not in a xact
NOTICE: UserAbortTransactionBlock and not in in-progress state NOTICE: UserAbortTransactionBlock and not in in-progress state
QUERY: end; abort;
-- not in a xact
NOTICE: EndTransactionBlock and not inprogress/abort state NOTICE: EndTransactionBlock and not inprogress/abort state
QUERY: create aggregate newavg1 (sfunc1 = int4pl, end;
--
-- DEFINE AGGREGATE
-- left out finalfunc
create aggregate newavg1 (sfunc1 = int4pl,
basetype = int4, basetype = int4,
stype1 = int4, stype1 = int4,
sfunc2 = int4inc, sfunc2 = int4inc,
stype2 = int4, stype2 = int4,
initcond1 = '0', initcond1 = '0',
initcond2 = '0'); initcond2 = '0');
ERROR: AggregateCreate: Aggregate must have final function with both transition functions ERROR: AggregateCreate: Aggregate must have final function with both transition functions
QUERY: create aggregate newavg2 (sfunc1 = int4pl, -- sfunc return type disagreement
create aggregate newavg2 (sfunc1 = int4pl,
basetype = int4, basetype = int4,
stype1 = int4, stype1 = int4,
sfunc2 = int2inc, sfunc2 = int2inc,
@ -61,7 +121,8 @@ QUERY: create aggregate newavg2 (sfunc1 = int4pl,
initcond1 = '0', initcond1 = '0',
initcond2 = '0'); initcond2 = '0');
ERROR: AggregateCreate: 'int4div'('int4','int2') does not exist ERROR: AggregateCreate: 'int4div'('int4','int2') does not exist
QUERY: create aggregate newavg3 (sfunc1 = int4pl, -- sfunc/finalfunc type disagreement
create aggregate newavg3 (sfunc1 = int4pl,
basetype = int4, basetype = int4,
stype1 = int4, stype1 = int4,
sfunc2 = int4inc, sfunc2 = int4inc,
@ -70,79 +131,133 @@ QUERY: create aggregate newavg3 (sfunc1 = int4pl,
initcond1 = '0', initcond1 = '0',
initcond2 = '0'); initcond2 = '0');
ERROR: AggregateCreate: 'int2div'('int4','int4') does not exist ERROR: AggregateCreate: 'int2div'('int4','int4') does not exist
QUERY: create aggregate newcnt1 (sfunc2 = int4inc, -- left out basetype
create aggregate newcnt1 (sfunc2 = int4inc,
stype2 = int4, stype2 = int4,
initcond2 = '0'); initcond2 = '0');
ERROR: Define: "basetype" unspecified ERROR: Define: "basetype" unspecified
QUERY: create aggregate newcnt1 (sfunc2 = int4inc, -- left out initcond2 (for sfunc2)
create aggregate newcnt1 (sfunc2 = int4inc,
basetype = int4, basetype = int4,
stype2 = int4); stype2 = int4);
ERROR: AggregateCreate: transition function 2 MUST have an initial value ERROR: AggregateCreate: transition function 2 MUST have an initial value
QUERY: drop index; --
ERROR: parser: parse error at or near ";" -- REMOVE INDEX
QUERY: drop index 314159;
-- missing index name
drop index;
ERROR: parser: parse error at or near ""
-- bad index name
drop index 314159;
ERROR: parser: parse error at or near "314159" ERROR: parser: parse error at or near "314159"
QUERY: drop index nonesuch; -- no such index
drop index nonesuch;
ERROR: index "nonesuch" nonexistent ERROR: index "nonesuch" nonexistent
QUERY: drop aggregate; --
ERROR: parser: parse error at or near ";" -- REMOVE AGGREGATE
QUERY: drop aggregate 314159;
-- missing aggregate name
drop aggregate;
ERROR: parser: parse error at or near ""
-- bad aggregate name
drop aggregate 314159;
ERROR: parser: parse error at or near "314159" ERROR: parser: parse error at or near "314159"
QUERY: drop aggregate nonesuch; -- no such aggregate
ERROR: parser: parse error at or near ";" drop aggregate nonesuch;
QUERY: drop aggregate newcnt1; ERROR: parser: parse error at or near ""
ERROR: parser: parse error at or near ";" -- missing aggregate type
QUERY: drop aggregate newcnt nonesuch; drop aggregate newcnt1;
ERROR: parser: parse error at or near ""
-- bad aggregate type
drop aggregate newcnt nonesuch;
ERROR: RemoveAggregate: type 'nonesuch' does not exist ERROR: RemoveAggregate: type 'nonesuch' does not exist
QUERY: drop aggregate newcnt float4; -- no such aggregate for type
drop aggregate newcnt float4;
ERROR: RemoveAggregate: aggregate 'newcnt' for 'float4' does not exist ERROR: RemoveAggregate: aggregate 'newcnt' for 'float4' does not exist
QUERY: drop function (); --
-- REMOVE FUNCTION
-- missing function name
drop function ();
ERROR: parser: parse error at or near "(" ERROR: parser: parse error at or near "("
QUERY: drop function 314159(); -- bad function name
drop function 314159();
ERROR: parser: parse error at or near "314159" ERROR: parser: parse error at or near "314159"
QUERY: drop function nonesuch(); -- no such function
drop function nonesuch();
ERROR: RemoveFunction: function 'nonesuch()' does not exist ERROR: RemoveFunction: function 'nonesuch()' does not exist
QUERY: drop type; --
ERROR: parser: parse error at or near ";" -- REMOVE TYPE
QUERY: drop type 314159;
-- missing type name
drop type;
ERROR: parser: parse error at or near ""
-- bad type name
drop type 314159;
ERROR: parser: parse error at or near "314159" ERROR: parser: parse error at or near "314159"
QUERY: drop type nonesuch; -- no such type
drop type nonesuch;
ERROR: RemoveType: type 'nonesuch' does not exist ERROR: RemoveType: type 'nonesuch' does not exist
QUERY: drop operator; --
ERROR: parser: parse error at or near ";" -- DROP OPERATOR
QUERY: drop operator equals;
-- missing everything
drop operator;
ERROR: parser: parse error at or near ""
-- bad operator name
drop operator equals;
ERROR: parser: parse error at or near "equals" ERROR: parser: parse error at or near "equals"
QUERY: drop operator ===; -- missing type list
ERROR: parser: parse error at or near ";" drop operator ===;
QUERY: drop operator int4, int4; ERROR: parser: parse error at or near ""
-- missing parentheses
drop operator int4, int4;
ERROR: parser: parse error at or near "int4" ERROR: parser: parse error at or near "int4"
QUERY: drop operator (int4, int4); -- missing operator name
drop operator (int4, int4);
ERROR: parser: parse error at or near "(" ERROR: parser: parse error at or near "("
QUERY: drop operator === (); -- missing type list contents
drop operator === ();
ERROR: parser: parse error at or near ")" ERROR: parser: parse error at or near ")"
QUERY: drop operator === (int4); -- no such operator
drop operator === (int4);
ERROR: parser: argument type missing (use NONE for unary operators) ERROR: parser: argument type missing (use NONE for unary operators)
QUERY: drop operator === (int4, int4); -- no such operator by that name
drop operator === (int4, int4);
ERROR: RemoveOperator: binary operator '===' taking 'int4' and 'int4' does not exist ERROR: RemoveOperator: binary operator '===' taking 'int4' and 'int4' does not exist
QUERY: drop operator = (nonesuch); -- no such type1
drop operator = (nonesuch);
ERROR: parser: argument type missing (use NONE for unary operators) ERROR: parser: argument type missing (use NONE for unary operators)
QUERY: drop operator = ( , int4); -- no such type1
drop operator = ( , int4);
ERROR: parser: parse error at or near "," ERROR: parser: parse error at or near ","
QUERY: drop operator = (nonesuch, int4); -- no such type1
drop operator = (nonesuch, int4);
ERROR: RemoveOperator: type 'nonesuch' does not exist ERROR: RemoveOperator: type 'nonesuch' does not exist
QUERY: drop operator = (int4, nonesuch); -- no such type2
drop operator = (int4, nonesuch);
ERROR: RemoveOperator: type 'nonesuch' does not exist ERROR: RemoveOperator: type 'nonesuch' does not exist
QUERY: drop operator = (int4, ); -- no such type2
drop operator = (int4, );
ERROR: parser: parse error at or near ")" ERROR: parser: parse error at or near ")"
QUERY: drop rule; --
ERROR: parser: parse error at or near ";" -- DROP RULE
QUERY: drop rule 314159;
-- missing rule name
drop rule;
ERROR: parser: parse error at or near ""
-- bad rule name
drop rule 314159;
ERROR: parser: parse error at or near "314159" ERROR: parser: parse error at or near "314159"
QUERY: drop rule nonesuch; -- no such rule
drop rule nonesuch;
ERROR: Rule or view 'nonesuch' not found ERROR: Rule or view 'nonesuch' not found
QUERY: drop tuple rule nonesuch; -- bad keyword
drop tuple rule nonesuch;
ERROR: parser: parse error at or near "tuple" ERROR: parser: parse error at or near "tuple"
QUERY: drop instance rule nonesuch; -- no such rule
drop instance rule nonesuch;
ERROR: parser: parse error at or near "instance" ERROR: parser: parse error at or near "instance"
QUERY: drop rewrite rule nonesuch; -- no such rule
drop rewrite rule nonesuch;
ERROR: parser: parse error at or near "rewrite" ERROR: parser: parse error at or near "rewrite"

View File

@ -1,44 +1,56 @@
QUERY: VACUUM; VACUUM;
QUERY: SELECT relname, relhasindex --
-- sanity check, if we don't have indices the test will take years to
-- complete.
--
SELECT relname, relhasindex
FROM pg_class FROM pg_class
WHERE relhasindex WHERE relhasindex
ORDER BY relname; ORDER BY relname;
relname |relhasindex relname | relhasindex
--------------+----------- ---------------------+-------------
bt_f8_heap |t bt_f8_heap | t
bt_i4_heap |t bt_i4_heap | t
bt_name_heap |t bt_name_heap | t
bt_txt_heap |t bt_txt_heap | t
fast_emp4000 |t fast_emp4000 | t
hash_f8_heap |t hash_f8_heap | t
hash_i4_heap |t hash_i4_heap | t
hash_name_heap|t hash_name_heap | t
hash_txt_heap |t hash_txt_heap | t
ihighway |t ihighway | t
onek |t num_exp_add | t
pg_aggregate |t num_exp_div | t
pg_am |t num_exp_ln | t
pg_amop |t num_exp_log10 | t
pg_attrdef |t num_exp_mul | t
pg_attribute |t num_exp_power_10_ln | t
pg_class |t num_exp_sqrt | t
pg_description|t num_exp_sub | t
pg_group |t onek | t
pg_index |t pg_aggregate | t
pg_inherits |t pg_am | t
pg_language |t pg_amop | t
pg_listener |t pg_attrdef | t
pg_opclass |t pg_attribute | t
pg_operator |t pg_class | t
pg_proc |t pg_description | t
pg_relcheck |t pg_group | t
pg_rewrite |t pg_index | t
pg_statistic |t pg_inherits | t
pg_trigger |t pg_language | t
pg_type |t pg_listener | t
road |t pg_opclass | t
shighway |t pg_operator | t
tenk1 |t pg_proc | t
tenk2 |t pg_relcheck | t
(35 rows) pg_rewrite | t
pg_statistic | t
pg_trigger | t
pg_type | t
road | t
shighway | t
tenk1 | t
tenk2 | t
(43 rows)

View File

@ -1,190 +1,262 @@
QUERY: create table pkeys (pkey1 int4 not null, pkey2 text not null); --
QUERY: create table fkeys (fkey1 int4, fkey2 text, fkey3 int); -- TRIGGERS
QUERY: create table fkeys2 (fkey21 int4, fkey22 text, pkey23 int not null); --
QUERY: create index fkeys_i on fkeys (fkey1, fkey2); create table pkeys (pkey1 int4 not null, pkey2 text not null);
QUERY: create index fkeys2_i on fkeys2 (fkey21, fkey22); create table fkeys (fkey1 int4, fkey2 text, fkey3 int);
QUERY: create index fkeys2p_i on fkeys2 (pkey23); create table fkeys2 (fkey21 int4, fkey22 text, pkey23 int not null);
QUERY: insert into pkeys values (10, '1'); create index fkeys_i on fkeys (fkey1, fkey2);
QUERY: insert into pkeys values (20, '2'); create index fkeys2_i on fkeys2 (fkey21, fkey22);
QUERY: insert into pkeys values (30, '3'); create index fkeys2p_i on fkeys2 (pkey23);
QUERY: insert into pkeys values (40, '4'); insert into pkeys values (10, '1');
QUERY: insert into pkeys values (50, '5'); insert into pkeys values (20, '2');
QUERY: insert into pkeys values (60, '6'); insert into pkeys values (30, '3');
QUERY: create unique index pkeys_i on pkeys (pkey1, pkey2); insert into pkeys values (40, '4');
QUERY: create trigger check_fkeys_pkey_exist insert into pkeys values (50, '5');
before insert or update on fkeys insert into pkeys values (60, '6');
for each row create unique index pkeys_i on pkeys (pkey1, pkey2);
execute procedure --
-- For fkeys:
-- (fkey1, fkey2) --> pkeys (pkey1, pkey2)
-- (fkey3) --> fkeys2 (pkey23)
--
create trigger check_fkeys_pkey_exist
before insert or update on fkeys
for each row
execute procedure
check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2'); check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2');
QUERY: create trigger check_fkeys_pkey2_exist create trigger check_fkeys_pkey2_exist
before insert or update on fkeys before insert or update on fkeys
for each row for each row
execute procedure check_primary_key ('fkey3', 'fkeys2', 'pkey23'); execute procedure check_primary_key ('fkey3', 'fkeys2', 'pkey23');
QUERY: create trigger check_fkeys2_pkey_exist --
before insert or update on fkeys2 -- For fkeys2:
for each row -- (fkey21, fkey22) --> pkeys (pkey1, pkey2)
execute procedure --
create trigger check_fkeys2_pkey_exist
before insert or update on fkeys2
for each row
execute procedure
check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2'); check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2');
QUERY: create trigger check_pkeys_fkey_cascade --
before delete or update on pkeys -- For pkeys:
for each row -- ON DELETE/UPDATE (pkey1, pkey2) CASCADE:
execute procedure -- fkeys (fkey1, fkey2) and fkeys2 (fkey21, fkey22)
check_foreign_key (2, 'cascade', 'pkey1', 'pkey2', --
create trigger check_pkeys_fkey_cascade
before delete or update on pkeys
for each row
execute procedure
check_foreign_key (2, 'cascade', 'pkey1', 'pkey2',
'fkeys', 'fkey1', 'fkey2', 'fkeys2', 'fkey21', 'fkey22'); 'fkeys', 'fkey1', 'fkey2', 'fkeys2', 'fkey21', 'fkey22');
QUERY: create trigger check_fkeys2_fkey_restrict --
-- For fkeys2:
-- ON DELETE/UPDATE (pkey23) RESTRICT:
-- fkeys (fkey3)
--
create trigger check_fkeys2_fkey_restrict
before delete or update on fkeys2 before delete or update on fkeys2
for each row for each row
execute procedure check_foreign_key (1, 'restrict', 'pkey23', 'fkeys', 'fkey3'); execute procedure check_foreign_key (1, 'restrict', 'pkey23', 'fkeys', 'fkey3');
QUERY: insert into fkeys2 values (10, '1', 1); insert into fkeys2 values (10, '1', 1);
QUERY: insert into fkeys2 values (30, '3', 2); insert into fkeys2 values (30, '3', 2);
QUERY: insert into fkeys2 values (40, '4', 5); insert into fkeys2 values (40, '4', 5);
QUERY: insert into fkeys2 values (50, '5', 3); insert into fkeys2 values (50, '5', 3);
QUERY: insert into fkeys2 values (70, '5', 3); -- no key in pkeys
insert into fkeys2 values (70, '5', 3);
ERROR: check_fkeys2_pkey_exist: tuple references non-existing key in pkeys ERROR: check_fkeys2_pkey_exist: tuple references non-existing key in pkeys
QUERY: insert into fkeys values (10, '1', 2); insert into fkeys values (10, '1', 2);
QUERY: insert into fkeys values (30, '3', 3); insert into fkeys values (30, '3', 3);
QUERY: insert into fkeys values (40, '4', 2); insert into fkeys values (40, '4', 2);
QUERY: insert into fkeys values (50, '5', 2); insert into fkeys values (50, '5', 2);
QUERY: insert into fkeys values (70, '5', 1); -- no key in pkeys
insert into fkeys values (70, '5', 1);
ERROR: check_fkeys_pkey_exist: tuple references non-existing key in pkeys ERROR: check_fkeys_pkey_exist: tuple references non-existing key in pkeys
QUERY: insert into fkeys values (60, '6', 4); -- no key in fkeys2
insert into fkeys values (60, '6', 4);
ERROR: check_fkeys_pkey2_exist: tuple references non-existing key in fkeys2 ERROR: check_fkeys_pkey2_exist: tuple references non-existing key in fkeys2
QUERY: delete from pkeys where pkey1 = 30 and pkey2 = '3';
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted
delete from pkeys where pkey1 = 30 and pkey2 = '3';
ERROR: check_fkeys2_fkey_restrict: tuple referenced in fkeys ERROR: check_fkeys2_fkey_restrict: tuple referenced in fkeys
QUERY: delete from pkeys where pkey1 = 40 and pkey2 = '4';
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are deleted
QUERY: update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 50 and pkey2 = '5'; delete from pkeys where pkey1 = 40 and pkey2 = '4';
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted
update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 50 and pkey2 = '5';
ERROR: check_fkeys2_fkey_restrict: tuple referenced in fkeys ERROR: check_fkeys2_fkey_restrict: tuple referenced in fkeys
QUERY: update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 10 and pkey2 = '1';
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys are deleted
NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are deleted NOTICE: check_pkeys_fkey_cascade: 1 tuple(s) of fkeys2 are deleted
QUERY: DROP TABLE pkeys; update pkeys set pkey1 = 7, pkey2 = '70' where pkey1 = 10 and pkey2 = '1';
QUERY: DROP TABLE fkeys; DROP TABLE pkeys;
QUERY: DROP TABLE fkeys2; DROP TABLE fkeys;
QUERY: create sequence ttdummy_seq increment 10 start 0 minvalue 0; DROP TABLE fkeys2;
QUERY: create table tttest ( -- -- I've disabled the funny_dup17 test because the new semantics
price_id int4, -- -- of AFTER ROW triggers, which get now fired at the end of a
price_val int4, -- -- query allways, cause funny_dup17 to enter an endless loop.
-- --
-- -- Jan
--
-- create table dup17 (x int4);
--
-- create trigger dup17_before
-- before insert on dup17
-- for each row
-- execute procedure
-- funny_dup17 ()
-- ;
--
-- insert into dup17 values (17);
-- select count(*) from dup17;
-- insert into dup17 values (17);
-- select count(*) from dup17;
--
-- drop trigger dup17_before on dup17;
--
-- create trigger dup17_after
-- after insert on dup17
-- for each row
-- execute procedure
-- funny_dup17 ()
-- ;
-- insert into dup17 values (13);
-- select count(*) from dup17 where x = 13;
-- insert into dup17 values (13);
-- select count(*) from dup17 where x = 13;
--
-- DROP TABLE dup17;
create sequence ttdummy_seq increment 10 start 0 minvalue 0;
create table tttest (
price_id int4,
price_val int4,
price_on int4, price_on int4,
price_off int4 default 999999 price_off int4 default 999999
); );
QUERY: create trigger ttdummy create trigger ttdummy
before delete or update on tttest before delete or update on tttest
for each row for each row
execute procedure execute procedure
ttdummy (price_on, price_off); ttdummy (price_on, price_off);
QUERY: create trigger ttserial create trigger ttserial
before insert or update on tttest before insert or update on tttest
for each row for each row
execute procedure execute procedure
autoinc (price_on, ttdummy_seq); autoinc (price_on, ttdummy_seq);
QUERY: insert into tttest values (1, 1, null); insert into tttest values (1, 1, null);
QUERY: insert into tttest values (2, 2, null); insert into tttest values (2, 2, null);
QUERY: insert into tttest values (3, 3, 0); insert into tttest values (3, 3, 0);
QUERY: select * from tttest; select * from tttest;
price_id|price_val|price_on|price_off price_id | price_val | price_on | price_off
--------+---------+--------+--------- ----------+-----------+----------+-----------
1| 1| 10| 999999 1 | 1 | 10 | 999999
2| 2| 20| 999999 2 | 2 | 20 | 999999
3| 3| 30| 999999 3 | 3 | 30 | 999999
(3 rows) (3 rows)
QUERY: delete from tttest where price_id = 2; delete from tttest where price_id = 2;
QUERY: select * from tttest; select * from tttest;
price_id|price_val|price_on|price_off price_id | price_val | price_on | price_off
--------+---------+--------+--------- ----------+-----------+----------+-----------
1| 1| 10| 999999 1 | 1 | 10 | 999999
3| 3| 30| 999999 3 | 3 | 30 | 999999
2| 2| 20| 40 2 | 2 | 20 | 40
(3 rows) (3 rows)
QUERY: select * from tttest where price_off = 999999; -- what do we see ?
price_id|price_val|price_on|price_off -- get current prices
--------+---------+--------+--------- select * from tttest where price_off = 999999;
1| 1| 10| 999999 price_id | price_val | price_on | price_off
3| 3| 30| 999999 ----------+-----------+----------+-----------
1 | 1 | 10 | 999999
3 | 3 | 30 | 999999
(2 rows) (2 rows)
QUERY: update tttest set price_val = 30 where price_id = 3; -- change price for price_id == 3
QUERY: select * from tttest; update tttest set price_val = 30 where price_id = 3;
price_id|price_val|price_on|price_off select * from tttest;
--------+---------+--------+--------- price_id | price_val | price_on | price_off
1| 1| 10| 999999 ----------+-----------+----------+-----------
2| 2| 20| 40 1 | 1 | 10 | 999999
3| 30| 50| 999999 2 | 2 | 20 | 40
3| 3| 30| 50 3 | 30 | 50 | 999999
3 | 3 | 30 | 50
(4 rows) (4 rows)
QUERY: update tttest set price_id = 5 where price_id = 3; -- now we want to change pric_id in ALL tuples
QUERY: select * from tttest; -- this gets us not what we need
price_id|price_val|price_on|price_off update tttest set price_id = 5 where price_id = 3;
--------+---------+--------+--------- select * from tttest;
1| 1| 10| 999999 price_id | price_val | price_on | price_off
2| 2| 20| 40 ----------+-----------+----------+-----------
3| 3| 30| 50 1 | 1 | 10 | 999999
5| 30| 60| 999999 2 | 2 | 20 | 40
3| 30| 50| 60 3 | 3 | 30 | 50
5 | 30 | 60 | 999999
3 | 30 | 50 | 60
(5 rows) (5 rows)
QUERY: select set_ttdummy(0); -- restore data as before last update:
set_ttdummy select set_ttdummy(0);
----------- set_ttdummy
1 -------------
1
(1 row) (1 row)
QUERY: delete from tttest where price_id = 5; delete from tttest where price_id = 5;
QUERY: update tttest set price_off = 999999 where price_val = 30; update tttest set price_off = 999999 where price_val = 30;
QUERY: select * from tttest; select * from tttest;
price_id|price_val|price_on|price_off price_id | price_val | price_on | price_off
--------+---------+--------+--------- ----------+-----------+----------+-----------
1| 1| 10| 999999 1 | 1 | 10 | 999999
2| 2| 20| 40 2 | 2 | 20 | 40
3| 3| 30| 50 3 | 3 | 30 | 50
3| 30| 50| 999999 3 | 30 | 50 | 999999
(4 rows) (4 rows)
QUERY: update tttest set price_id = 5 where price_id = 3; -- and try change price_id now!
QUERY: select * from tttest; update tttest set price_id = 5 where price_id = 3;
price_id|price_val|price_on|price_off select * from tttest;
--------+---------+--------+--------- price_id | price_val | price_on | price_off
1| 1| 10| 999999 ----------+-----------+----------+-----------
2| 2| 20| 40 1 | 1 | 10 | 999999
5| 3| 30| 50 2 | 2 | 20 | 40
5| 30| 50| 999999 5 | 3 | 30 | 50
5 | 30 | 50 | 999999
(4 rows) (4 rows)
QUERY: select set_ttdummy(1); -- isn't it what we need ?
set_ttdummy select set_ttdummy(1);
----------- set_ttdummy
0 -------------
0
(1 row) (1 row)
QUERY: update tttest set price_on = -1 where price_id = 1; -- we want to correct some "date"
update tttest set price_on = -1 where price_id = 1;
ERROR: ttdummy (tttest): you can't change price_on and/or price_off columns (use set_ttdummy) ERROR: ttdummy (tttest): you can't change price_on and/or price_off columns (use set_ttdummy)
QUERY: select set_ttdummy(0); -- but this doesn't work
set_ttdummy -- try in this way
----------- select set_ttdummy(0);
1 set_ttdummy
-------------
1
(1 row) (1 row)
QUERY: update tttest set price_on = -1 where price_id = 1; update tttest set price_on = -1 where price_id = 1;
QUERY: select * from tttest; select * from tttest;
price_id|price_val|price_on|price_off price_id | price_val | price_on | price_off
--------+---------+--------+--------- ----------+-----------+----------+-----------
2| 2| 20| 40 2 | 2 | 20 | 40
5| 3| 30| 50 5 | 3 | 30 | 50
5| 30| 50| 999999 5 | 30 | 50 | 999999
1| 1| -1| 999999 1 | 1 | -1 | 999999
(4 rows) (4 rows)
QUERY: select * from tttest where price_on <= 35 and price_off > 35 and price_id = 5; -- isn't it what we need ?
price_id|price_val|price_on|price_off -- get price for price_id == 5 as it was @ "date" 35
--------+---------+--------+--------- select * from tttest where price_on <= 35 and price_off > 35 and price_id = 5;
5| 3| 30| 50 price_id | price_val | price_on | price_off
----------+-----------+----------+-----------
5 | 3 | 30 | 50
(1 row) (1 row)
QUERY: drop table tttest; drop table tttest;
QUERY: drop sequence ttdummy_seq; drop sequence ttdummy_seq;