Commit b8967bfe authored by Thomas G. Lockhart's avatar Thomas G. Lockhart

Add explicit, separate test sections for DEFAULT and CHECK.

Use conventions common to other regression test input files.
Leave non-temporary files at end of test.
parent 829354d8
-- --
-- Check constraints -- Check constraints
-- Constraints can be specified with either DEFAULT or CHECK clauses.
-- --
--
-- DEFAULT syntax
--
CREATE TABLE DEFAULT_TBL (i int DEFAULT 100,
x text DEFAULT 'vadim', f float8 DEFAULT 123.456);
INSERT INTO DEFAULT_TBL VALUES (1, 'thomas', 57.0613);
INSERT INTO DEFAULT_TBL VALUES (1, 'bruce');
INSERT INTO DEFAULT_TBL (i, f) VALUES (2, 987.654);
INSERT INTO DEFAULT_TBL (x) VALUES ('tgl');
SELECT '' AS four, * FROM DEFAULT_TBL;
CREATE SEQUENCE DEFAULT_SEQ;
CREATE TABLE DEFAULTEXPR_TBL (i1 int DEFAULT 100 + (200-199) * 2,
i2 int DEFAULT nextval('default_seq'));
INSERT INTO DEFAULTEXPR_TBL VALUES (-1, -2);
INSERT INTO DEFAULTEXPR_TBL (i1) VALUES (-3);
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (-4);
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (NULL);
SELECT '' AS four, * FROM DEFAULTEXPR_TBL;
-- errors
-- test for:
-- extraneous comma
-- booleans not allowed
CREATE TABLE error_tbl (i int DEFAULT (100, ));
CREATE TABLE error_tbl (b1 bool DEFAULT 1 < 2);
--
-- CHECK syntax
--
CREATE TABLE CHECK_TBL (x int)
CONSTRAINT CHECK_CON CHECK (x > 3);
INSERT INTO CHECK_TBL VALUES (5);
INSERT INTO CHECK_TBL VALUES (4);
INSERT INTO CHECK_TBL VALUES (3);
INSERT INTO CHECK_TBL VALUES (2);
INSERT INTO CHECK_TBL VALUES (6);
INSERT INTO CHECK_TBL VALUES (1);
CREATE SEQUENCE CHECK_SEQ;
CREATE TABLE CHECK2_TBL (x int, y text, z int)
CONSTRAINT SEQUENCE_CON CHECK (x > 3 and y <> 'check failed' and x < 8);
INSERT INTO CHECK2_TBL VALUES (4, 'check ok', -2);
INSERT INTO CHECK2_TBL VALUES (1, 'x check failed', -2);
INSERT INTO CHECK2_TBL VALUES (5, 'z check failed', 10);
INSERT INTO CHECK2_TBL VALUES (0, 'check failed', -2);
INSERT INTO CHECK2_TBL VALUES (6, 'check failed', 11);
INSERT INTO CHECK2_TBL VALUES (7, 'check ok', 7);
--
-- Check constraints on INSERT -- Check constraints on INSERT
drop sequence seq; --
drop table test;
create sequence seq;
create table test (x int default nextval ( 'seq') ,
y text default '-NULL-', z int default -1 * currval('seq') )
constraint test1 check (x > 3 and y <> 'check failed' and x < 8 ),
check x + z = 0;
insert into test values (null, null, null);
insert into test values (null, null, -2);
select * from test;
select nextval('seq');
insert into test values (null, null, null);
insert into test values (1, null, -2);
insert into test values (7, null, -7);
insert into test values (5, 'check failed', -5);
insert into test values (7, '!check failed', -7);
insert into test values (null, null, null);
select * from test;
insert into test values (null, 'check failed', 5);
insert into test values (5, 'check failed', null);
insert into test values (5, '!check failed', null);
insert into test values (null, null, null);
select * from test;
insert into test values (null, null, null);
select currval('seq');
CREATE SEQUENCE INSERT_SEQ;
CREATE TABLE INSERT_TBL (x INT DEFAULT nextval('insert_seq'),
y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('insert_seq') )
CONSTRAINT INSERT_CON CHECK (x > 3 AND y <> 'check failed' AND x < 8),
CHECK x + z = 0;
INSERT INTO INSERT_TBL VALUES (null, null, null);
INSERT INTO INSERT_TBL VALUES (null, null, -2);
SELECT * FROM INSERT_TBL;
SELECT nextval('insert_seq');
INSERT INTO INSERT_TBL VALUES (null, null, null);
INSERT INTO INSERT_TBL VALUES (1, null, -2);
INSERT INTO INSERT_TBL VALUES (7, null, -7);
INSERT INTO INSERT_TBL VALUES (5, 'check failed', -5);
INSERT INTO INSERT_TBL VALUES (7, '!check failed', -7);
INSERT INTO INSERT_TBL VALUES (null, null, null);
SELECT * FROM INSERT_TBL;
INSERT INTO INSERT_TBL VALUES (null, 'check failed', 5);
INSERT INTO INSERT_TBL VALUES (5, 'check failed', null);
INSERT INTO INSERT_TBL VALUES (5, '!check failed', null);
INSERT INTO INSERT_TBL VALUES (null, null, null);
SELECT * FROM INSERT_TBL;
INSERT INTO INSERT_TBL VALUES (null, null, null);
SELECT currval('insert_seq');
--
-- Check constraints on INSERT INTO -- Check constraints on INSERT INTO
--
drop table test; DELETE FROM INSERT_TBL;
drop sequence seq; DROP SEQUENCE INSERT_SEQ;
create sequence seq start 4; CREATE SEQUENCE INSERT_SEQ START 4;
create table dummy (xd int, yd text, zd int); CREATE TABLE TEMP (xd INT, yd TEXT, zd INT);
create table test (x int default nextval ( 'seq') , SELECT nextval('insert_seq');
y text default '-NULL-', z int default -1 * currval('seq') ) INSERT INTO TEMP VALUES (null, null, null);
constraint test1 check (x > 3 and y <> 'check failed' and x < 7 ), check INSERT INTO TEMP VALUES (5, '!check failed', null);
x + z = 0; INSERT INTO TEMP VALUES (null, 'try again', null);
INSERT INTO INSERT_TBL SELECT * FROM TEMP;
SELECT * FROM INSERT_TBL;
INSERT INTO INSERT_TBL SELECT * FROM TEMP WHERE yd = 'try again';
SELECT * FROM INSERT_TBL;
select nextval('seq'); DROP TABLE TEMP;
insert into dummy values (null, null, null);
insert into dummy values (5, '!check failed', null);
insert into dummy values (null, 'try again', null);
insert into test select * from dummy;
select * from test;
insert into test select * from dummy where yd = 'try again';
--
-- Check constraints on UPDATE -- Check constraints on UPDATE
update test set x = null where x = 6; --
select currval('seq');
UPDATE INSERT_TBL SET x = NULL WHERE x = 6;
SELECT currval('insert_seq');
SELECT * FROM INSERT_TBL;
UPDATE INSERT_TBL SET x = 6 WHERE x = 6;
SELECT * FROM INSERT_TBL;
UPDATE INSERT_TBL SET x = -z, z = -x;
SELECT * FROM INSERT_TBL;
--
-- Check constraints on COPY FROM -- Check constraints on COPY FROM
drop table test; --
drop sequence seq;
create sequence seq start 4; CREATE SEQUENCE COPY_SEQ START 4;
create table test (x int default nextval ( 'seq') , CREATE TABLE COPY_TBL (x INT DEFAULT nextval('copy_seq'),
y text default '-NULL-', z int default -1 * currval('seq') ) y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('copy_seq') )
constraint test1 check (x > 3 and y <> 'check failed' and x < 7 ), check CONSTRAINT COPY_CON CHECK (x > 3 AND y <> 'check failed' AND x < 7 ),
x + z = 0; CHECK x + z = 0;
copy test from '_OBJWD_/data/constro.data';
select * from test; COPY COPY_TBL FROM '_OBJWD_/data/constro.data';
copy test from '_OBJWD_/data/constrf.data'; SELECT * FROM COPY_TBL;
select * from test; COPY COPY_TBL FROM '_OBJWD_/data/constrf.data';
select nextval('seq') - 1 as currval;
SELECT * FROM COPY_TBL;
-- Clean up select nextval('copy_seq') - 1 as currval;
drop sequence seq;
drop table test;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment