Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 733f2a4

Browse files
author
Thomas G. Lockhart
committed
Change constraint syntax to SQL92 style.
Add tests for PRIMARY KEY and UNIQUE clauses.
1 parent 5d7c911 commit 733f2a4

File tree

2 files changed

+280
-87
lines changed

2 files changed

+280
-87
lines changed
+118-23
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,37 @@
11
--
22
-- Check constraints
3-
-- Constraints can be specified with either DEFAULT or CHECK clauses.
3+
-- Constraints can be specified with:
4+
-- - DEFAULT clause
5+
-- - CHECK clauses
6+
-- - PRIMARY KEY clauses
7+
-- - UNIQUE clauses
48
--
59

610
--
711
-- DEFAULT syntax
812
--
913

1014
CREATE TABLE DEFAULT_TBL (i int DEFAULT 100,
11-
x text DEFAULT 'vadim', f float8 DEFAULT 123.456);
15+
x text DEFAULT 'vadim', f float8 DEFAULT 123.456);
1216

1317
INSERT INTO DEFAULT_TBL VALUES (1, 'thomas', 57.0613);
1418
INSERT INTO DEFAULT_TBL VALUES (1, 'bruce');
1519
INSERT INTO DEFAULT_TBL (i, f) VALUES (2, 987.654);
16-
INSERT INTO DEFAULT_TBL (x) VALUES ('tgl');
20+
INSERT INTO DEFAULT_TBL (x) VALUES ('marc');
1721
INSERT INTO DEFAULT_TBL VALUES (3, null, 1.0);
1822

19-
SELECT '' AS four, * FROM DEFAULT_TBL;
23+
SELECT '' AS five, * FROM DEFAULT_TBL;
2024

2125
CREATE SEQUENCE DEFAULT_SEQ;
26+
2227
CREATE TABLE DEFAULTEXPR_TBL (i1 int DEFAULT 100 + (200-199) * 2,
23-
i2 int DEFAULT nextval('default_seq'));
28+
i2 int DEFAULT nextval('default_seq'));
2429

2530
INSERT INTO DEFAULTEXPR_TBL VALUES (-1, -2);
2631
INSERT INTO DEFAULTEXPR_TBL (i1) VALUES (-3);
2732
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (-4);
2833
INSERT INTO DEFAULTEXPR_TBL (i2) VALUES (NULL);
34+
2935
SELECT '' AS four, * FROM DEFAULTEXPR_TBL;
3036

3137
-- errors
@@ -39,8 +45,8 @@ CREATE TABLE error_tbl (b1 bool DEFAULT 1 < 2);
3945
-- CHECK syntax
4046
--
4147

42-
CREATE TABLE CHECK_TBL (x int)
43-
CONSTRAINT CHECK_CON CHECK (x > 3);
48+
CREATE TABLE CHECK_TBL (x int,
49+
CONSTRAINT CHECK_CON CHECK (x > 3));
4450

4551
INSERT INTO CHECK_TBL VALUES (5);
4652
INSERT INTO CHECK_TBL VALUES (4);
@@ -49,32 +55,40 @@ INSERT INTO CHECK_TBL VALUES (2);
4955
INSERT INTO CHECK_TBL VALUES (6);
5056
INSERT INTO CHECK_TBL VALUES (1);
5157

58+
SELECT '' AS three, * FROM CHECK_TBL;
59+
5260
CREATE SEQUENCE CHECK_SEQ;
53-
CREATE TABLE CHECK2_TBL (x int, y text, z int)
54-
CONSTRAINT SEQUENCE_CON CHECK (x > 3 and y <> 'check failed' and x < 8);
61+
62+
CREATE TABLE CHECK2_TBL (x int, y text, z int,
63+
CONSTRAINT SEQUENCE_CON
64+
CHECK (x > 3 and y <> 'check failed' and z < 8));
65+
5566
INSERT INTO CHECK2_TBL VALUES (4, 'check ok', -2);
5667
INSERT INTO CHECK2_TBL VALUES (1, 'x check failed', -2);
5768
INSERT INTO CHECK2_TBL VALUES (5, 'z check failed', 10);
5869
INSERT INTO CHECK2_TBL VALUES (0, 'check failed', -2);
5970
INSERT INTO CHECK2_TBL VALUES (6, 'check failed', 11);
6071
INSERT INTO CHECK2_TBL VALUES (7, 'check ok', 7);
6172

73+
SELECT '' AS two, * from CHECK2_TBL;
74+
6275
--
6376
-- Check constraints on INSERT
6477
--
6578

6679
CREATE SEQUENCE INSERT_SEQ;
6780

6881
CREATE TABLE INSERT_TBL (x INT DEFAULT nextval('insert_seq'),
69-
y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('insert_seq') )
70-
CONSTRAINT INSERT_CON CHECK (x >= 3 AND y <> 'check failed' AND x < 8),
71-
CHECK x + z = 0;
82+
y TEXT DEFAULT '-NULL-', z INT DEFAULT -1 * currval('insert_seq'),
83+
CONSTRAINT INSERT_CON CHECK (x >= 3 AND y <> 'check failed' AND x < 8),
84+
CHECK (x + z = 0));
7285

7386
INSERT INTO INSERT_TBL VALUES (null, null, null);
7487
INSERT INTO INSERT_TBL(x,z) VALUES (2, -2);
7588

76-
SELECT * FROM INSERT_TBL;
77-
SELECT nextval('insert_seq');
89+
SELECT '' AS zero, * FROM INSERT_TBL;
90+
91+
SELECT 'one' AS one, nextval('insert_seq');
7892

7993
INSERT INTO INSERT_TBL(y) VALUES ('Y');
8094
INSERT INTO INSERT_TBL(y) VALUES ('Y');
@@ -83,34 +97,45 @@ INSERT INTO INSERT_TBL(z,x) VALUES (-7, 7);
8397
INSERT INTO INSERT_TBL VALUES (5, 'check failed', -5);
8498
INSERT INTO INSERT_TBL VALUES (7, '!check failed', -7);
8599
INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
86-
SELECT * FROM INSERT_TBL;
100+
101+
SELECT '' AS four, * FROM INSERT_TBL;
102+
87103
INSERT INTO INSERT_TBL(y,z) VALUES ('check failed', 4);
88104
INSERT INTO INSERT_TBL(x,y) VALUES (5, 'check failed');
89105
INSERT INTO INSERT_TBL(x,y) VALUES (5, '!check failed');
90106
INSERT INTO INSERT_TBL(y) VALUES ('-!NULL-');
91-
SELECT * FROM INSERT_TBL;
92-
SELECT nextval('insert_seq');
107+
108+
SELECT '' AS six, * FROM INSERT_TBL;
109+
110+
SELECT 'seven' AS one, nextval('insert_seq');
111+
93112
INSERT INTO INSERT_TBL(y) VALUES ('Y');
94-
SELECT currval('insert_seq');
113+
114+
SELECT 'eight' AS one, currval('insert_seq');
95115

96116
--
97117
-- Check constraints on INSERT INTO
98118
--
99119

100120
DELETE FROM INSERT_TBL;
101121
DROP SEQUENCE INSERT_SEQ;
122+
102123
CREATE SEQUENCE INSERT_SEQ START 4;
124+
103125
CREATE TABLE TEMP (xd INT, yd TEXT, zd INT);
104126

105127
INSERT INTO TEMP VALUES (null, 'Y', null);
106128
INSERT INTO TEMP VALUES (5, '!check failed', null);
107129
INSERT INTO TEMP VALUES (null, 'try again', null);
108130
INSERT INTO INSERT_TBL(y) select yd from TEMP;
109-
SELECT * FROM INSERT_TBL;
131+
132+
SELECT '' AS three, * FROM INSERT_TBL;
133+
110134
INSERT INTO INSERT_TBL SELECT * FROM TEMP WHERE yd = 'try again';
111135
INSERT INTO INSERT_TBL(y,z) SELECT yd, -7 FROM TEMP WHERE yd = 'try again';
112136
INSERT INTO INSERT_TBL(y,z) SELECT yd, -8 FROM TEMP WHERE yd = 'try again';
113-
SELECT * FROM INSERT_TBL;
137+
138+
SELECT '' AS four, * FROM INSERT_TBL;
114139

115140
DROP TABLE TEMP;
116141

@@ -122,17 +147,87 @@ UPDATE INSERT_TBL SET x = NULL WHERE x = 6;
122147
UPDATE INSERT_TBL SET x = 6 WHERE x = 6;
123148
UPDATE INSERT_TBL SET x = -z, z = -x;
124149
UPDATE INSERT_TBL SET x = z, z = x;
150+
125151
SELECT * FROM INSERT_TBL;
126152

153+
-- DROP TABLE INSERT_TBL;
154+
127155
--
128156
-- Check constraints on COPY FROM
129157
--
130158

131-
CREATE TABLE COPY_TBL (x INT, y TEXT, z INT)
132-
CONSTRAINT COPY_CON CHECK (x > 3 AND y <> 'check failed' AND x < 7 );
159+
CREATE TABLE COPY_TBL (x INT, y TEXT, z INT,
160+
CONSTRAINT COPY_CON
161+
CHECK (x > 3 AND y <> 'check failed' AND x < 7 ));
133162

134163
COPY COPY_TBL FROM '_OBJWD_/data/constro.data';
135-
SELECT * FROM COPY_TBL;
164+
165+
SELECT '' AS two, * FROM COPY_TBL;
166+
136167
COPY COPY_TBL FROM '_OBJWD_/data/constrf.data';
137168

138169
SELECT * FROM COPY_TBL;
170+
171+
--
172+
-- Primary keys
173+
--
174+
175+
CREATE TABLE PRIMARY_TBL (i int PRIMARY KEY, t text);
176+
177+
INSERT INTO PRIMARY_TBL VALUES (1, 'one');
178+
INSERT INTO PRIMARY_TBL VALUES (2, 'two');
179+
INSERT INTO PRIMARY_TBL VALUES (1, 'three');
180+
INSERT INTO PRIMARY_TBL VALUES (4, 'three');
181+
INSERT INTO PRIMARY_TBL VALUES (5, 'one');
182+
INSERT INTO PRIMARY_TBL (t) VALUES ('six');
183+
184+
SELECT '' AS four, * FROM PRIMARY_TBL;
185+
186+
DROP TABLE PRIMARY_TBL;
187+
188+
CREATE TABLE PRIMARY_TBL (i int, t text,
189+
PRIMARY KEY(i,t));
190+
191+
INSERT INTO PRIMARY_TBL VALUES (1, 'one');
192+
INSERT INTO PRIMARY_TBL VALUES (2, 'two');
193+
INSERT INTO PRIMARY_TBL VALUES (1, 'three');
194+
INSERT INTO PRIMARY_TBL VALUES (4, 'three');
195+
INSERT INTO PRIMARY_TBL VALUES (5, 'one');
196+
INSERT INTO PRIMARY_TBL (t) VALUES ('six');
197+
198+
SELECT '' AS three, * FROM PRIMARY_TBL;
199+
200+
DROP TABLE PRIMARY_TBL;
201+
202+
--
203+
-- Unique keys
204+
--
205+
206+
CREATE TABLE UNIQUE_TBL (i int UNIQUE, t text);
207+
208+
INSERT INTO UNIQUE_TBL VALUES (1, 'one');
209+
INSERT INTO UNIQUE_TBL VALUES (2, 'two');
210+
INSERT INTO UNIQUE_TBL VALUES (1, 'three');
211+
INSERT INTO UNIQUE_TBL VALUES (4, 'four');
212+
INSERT INTO UNIQUE_TBL VALUES (5, 'one');
213+
INSERT INTO UNIQUE_TBL (t) VALUES ('six');
214+
INSERT INTO UNIQUE_TBL (t) VALUES ('seven');
215+
216+
SELECT '' AS five, * FROM UNIQUE_TBL;
217+
218+
DROP TABLE UNIQUE_TBL;
219+
220+
CREATE TABLE UNIQUE_TBL (i int, t text,
221+
UNIQUE(i,t));
222+
223+
INSERT INTO UNIQUE_TBL VALUES (1, 'one');
224+
INSERT INTO UNIQUE_TBL VALUES (2, 'two');
225+
INSERT INTO UNIQUE_TBL VALUES (1, 'three');
226+
INSERT INTO UNIQUE_TBL VALUES (1, 'one');
227+
INSERT INTO UNIQUE_TBL VALUES (5, 'one');
228+
INSERT INTO UNIQUE_TBL (t) VALUES ('six');
229+
230+
SELECT '' AS five, * FROM UNIQUE_TBL;
231+
232+
DROP TABLE UNIQUE_TBL;
233+

0 commit comments

Comments
 (0)