Skip to content

Commit 020be62

Browse files
committed
Well, here's the first pass on regression
tests for the Foreign Key support in 7.0 which was made against a CVS copy from this afternoon. This modifies src/test/regress/sql/run_check.tests src/test/regress/sql/alter_table.sql src/test/regress/expected/alter_table.out src/test/regress/sql/foreign_key.sql src/test/regress/expected/foreign_key.out sszabo@bigpanda.co
1 parent 991b974 commit 020be62

File tree

5 files changed

+152
-1
lines changed

5 files changed

+152
-1
lines changed

doc/src/sgml/release.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ Add Win1250 (Czech) support (Pavel Behal)
179179
<surname>Momjian</surname>
180180
</author>
181181
</authorgroup>
182-
<date>1998-06-09</date>
182+
<date>1999-06-09</date>
183183
</docinfo>
184184
-->
185185

src/test/regress/expected/alter_table.out

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,27 @@ SELECT unique1 FROM tenk1 WHERE unique1 < 5;
269269
4
270270
(5 rows)
271271

272+
-- FOREIGN KEY CONSTRAINT adding TEST
273+
CREATE TABLE tmp2 (a int primary key);
274+
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'tmp2_pkey' for table 'tmp2'
275+
CREATE TABLE tmp3 (a int, b int);
276+
-- Insert rows into tmp2 (pktable)
277+
INSERT INTO tmp2 values (1);
278+
INSERT INTO tmp2 values (2);
279+
INSERT INTO tmp2 values (3);
280+
INSERT INTO tmp2 values (4);
281+
-- Insert rows into tmp3
282+
INSERT INTO tmp3 values (1,10);
283+
INSERT INTO tmp3 values (1,20);
284+
INSERT INTO tmp3 values (5,50);
285+
-- Try (and fail) to add constraint due to invalid data
286+
ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
287+
NOTICE: ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for FOREIGN KEY check(s)
288+
ERROR: <unnamed> referential integrity violation - key referenced from tmp3 not found in tmp2
289+
-- Delete failing row
290+
DELETE FROM tmp3 where a=5;
291+
-- Try (and succeed)
292+
ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
293+
NOTICE: ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for FOREIGN KEY check(s)
294+
DROP TABLE tmp3
295+
DROP TABLE tmp2

src/test/regress/sql/alter_table.sql

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,33 @@ ALTER TABLE ten_k RENAME TO tenk1;
163163
-- 5 values, sorted
164164
SELECT unique1 FROM tenk1 WHERE unique1 < 5;
165165

166+
-- FOREIGN KEY CONSTRAINT adding TEST
167+
168+
CREATE TABLE tmp2 (a int primary key);
169+
170+
CREATE TABLE tmp3 (a int, b int);
171+
172+
-- Insert rows into tmp2 (pktable)
173+
INSERT INTO tmp2 values (1);
174+
INSERT INTO tmp2 values (2);
175+
INSERT INTO tmp2 values (3);
176+
INSERT INTO tmp2 values (4);
177+
178+
-- Insert rows into tmp3
179+
INSERT INTO tmp3 values (1,10);
180+
INSERT INTO tmp3 values (1,20);
181+
INSERT INTO tmp3 values (5,50);
182+
183+
-- Try (and fail) to add constraint due to invalid data
184+
ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
185+
186+
-- Delete failing row
187+
DELETE FROM tmp3 where a=5;
188+
189+
-- Try (and succeed)
190+
ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
191+
192+
DROP TABLE tmp3
193+
194+
DROP TABLE tmp2
195+

src/test/regress/sql/run_check.tests

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ parallel group5
119119
test alter_table
120120
test portals_p2
121121
test rules
122+
test foreign_key
122123
endparallel
123124

124125
# ----------

src/tools/pgcvslog

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
:
2+
# This utility is used to generate a compact list of changes for each
3+
# release, bjm 2000-02-22
4+
5+
# Usage $0 [-r 'revision pattern'] file
6+
7+
# cvs log -d '>1999-06-14 00:00:00 GMT' > log
8+
# pgcvslog -r '\.2\.[0-9]*$' log
9+
10+
if [ "X$1" = "X-r" ]
11+
then REV="$2"
12+
shift 2
13+
else REV=".*"
14+
fi
15+
16+
cat "$@" |
17+
18+
# mark each line with a datetime and line number, for sorting and merging
19+
# we don't print anything from the -- or == line and the date:
20+
21+
awk '
22+
$0 ~ /^Working file:/ {workingfile = $0}
23+
24+
$1 == "revision" && $2 !~ /'"$REV"'/ {skip = "Y"}
25+
26+
($0 ~ /^====*$/ || $0 ~ /^----*$/) && skip == "N" \
27+
{
28+
/* print blank line separating entries */
29+
if (datetime != "")
30+
{
31+
printf ("%s| %10d|%s\n", datetime, NR, "");
32+
printf ("%s| %10d|%s\n", datetime, NR, "---");
33+
printf ("%s| %10d|%s\n", datetime, NR+1, "");
34+
}
35+
}
36+
37+
$0 ~ /^====*$/ || $0 ~ /^----*$/ \
38+
{
39+
datetime="";
40+
skip="N";
41+
}
42+
43+
datetime != "" && skip == "N" \
44+
{printf ("%s| %10d| %s\n", datetime, NR, $0);}
45+
46+
$1 == "date:" \
47+
{
48+
/* get entry date */
49+
datetime=$2"-"$3
50+
if (workingfile != "" && skip == "N")
51+
{
52+
printf ("%s| %10d|%s\n", datetime, NR-1, workingfile);
53+
printf ("%s| %10d|%s\n", datetime, NR, $0);
54+
printf ("%s| %10d|%s\n", datetime, NR+1, "");
55+
}
56+
}
57+
58+
$0 ~ /^====*$/ {workingfile=""}' |
59+
60+
sort | cut -d'|' -f3 | cat |
61+
62+
# collect duplicate narratives
63+
awk ' BEGIN { slot = 0;}
64+
{
65+
if ($0 ~ /^Working file:/)
66+
{
67+
if (slot != oldslot)
68+
same = 0;
69+
else
70+
{
71+
same = 1;
72+
for (i=1; i <= slot; i++)
73+
{
74+
if (oldnarr[i] != narr[i])
75+
same = 0;
76+
}
77+
}
78+
79+
if (oldslot && !same)
80+
for (i=1; i <= oldslot; i++)
81+
print oldnarr[i];
82+
for (i=1; i <= slot; i++)
83+
oldnarr[i] = narr[i];
84+
oldslot = slot;
85+
slot = 0;
86+
print save_working;
87+
save_working = $0;
88+
}
89+
else if ($1 != "date:")
90+
narr[++slot] = $0;
91+
}
92+
END {
93+
print save_working;
94+
for (i=1; i <= slot; i++)
95+
print narr[i];
96+
}'

0 commit comments

Comments
 (0)