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

Commit 2784f7c

Browse files
committed
From: Jan Wieck <jwieck@debis.com>
A few minutes ago I sent down the PL/Tcl directory to this list. Look at it and reuse anything that might help to build PL/perl. I really hope that PL/perl and PL/Tcl appear in the 6.3 distribution. I'll do whatever I can to make this happen.
1 parent 957a614 commit 2784f7c

File tree

6 files changed

+721
-0
lines changed

6 files changed

+721
-0
lines changed

src/pl/tcl/test/README

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
This is a small test suite for PL/Tcl.
3+
4+
Just run the script runtest and compare the files
5+
test.expected against test.out after.
6+
7+
8+
Jan

src/pl/tcl/test/runtest

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/sh
2+
3+
DBNAME=pltcl_test
4+
export DBNAME
5+
6+
echo "**** Destroy old database $DBNAME ****"
7+
destroydb $DBNAME
8+
9+
echo "**** Create test database $DBNAME ****"
10+
createdb $DBNAME
11+
12+
echo "**** Create procedural language pltcl ****"
13+
psql -q -n $DBNAME <test_mklang.sql
14+
15+
echo "**** Create tables, functions and triggers ****"
16+
psql -q -n $DBNAME <test_setup.sql
17+
18+
echo "**** Running test queries ****"
19+
psql -q -n -e $DBNAME <test_queries.sql > test.out 2>&1
20+
21+
if diff test.expected test.out >/dev/null 2>&1 ; then
22+
echo " Tests passed O.K."
23+
else
24+
echo " Tests faild - look at diffs between"
25+
echo " test.expected and test.out"
26+
fi
27+

src/pl/tcl/test/test.expected

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
QUERY: insert into T_pkey1 values (1, 'key1-1', 'test key');
2+
QUERY: insert into T_pkey1 values (1, 'key1-2', 'test key');
3+
QUERY: insert into T_pkey1 values (1, 'key1-3', 'test key');
4+
QUERY: insert into T_pkey1 values (2, 'key2-1', 'test key');
5+
QUERY: insert into T_pkey1 values (2, 'key2-2', 'test key');
6+
QUERY: insert into T_pkey1 values (2, 'key2-3', 'test key');
7+
QUERY: insert into T_pkey2 values (1, 'key1-1', 'test key');
8+
QUERY: insert into T_pkey2 values (1, 'key1-2', 'test key');
9+
QUERY: insert into T_pkey2 values (1, 'key1-3', 'test key');
10+
QUERY: insert into T_pkey2 values (2, 'key2-1', 'test key');
11+
QUERY: insert into T_pkey2 values (2, 'key2-2', 'test key');
12+
QUERY: insert into T_pkey2 values (2, 'key2-3', 'test key');
13+
QUERY: select * from T_pkey1;
14+
key1|key2 |txt
15+
----+--------------------+----------------------------------------
16+
1|key1-1 |test key
17+
1|key1-2 |test key
18+
1|key1-3 |test key
19+
2|key2-1 |test key
20+
2|key2-2 |test key
21+
2|key2-3 |test key
22+
(6 rows)
23+
24+
QUERY: select * from T_pkey2;
25+
key1|key2 |txt
26+
----+--------------------+----------------------------------------
27+
1|KEY1-1 |test key
28+
1|KEY1-2 |test key
29+
1|KEY1-3 |test key
30+
2|KEY2-1 |test key
31+
2|KEY2-2 |test key
32+
2|KEY2-3 |test key
33+
(6 rows)
34+
35+
QUERY: insert into T_pkey1 values (1, 'KEY1-3', 'should work');
36+
QUERY: insert into T_pkey2 values (1, 'KEY1-3', 'should fail');
37+
ERROR: duplicate key '1', 'KEY1-3' for T_pkey2
38+
QUERY: insert into T_dta1 values ('trec 1', 1, 'key1-1');
39+
QUERY: insert into T_dta1 values ('trec 2', 1, 'key1-2');
40+
QUERY: insert into T_dta1 values ('trec 3', 1, 'key1-3');
41+
QUERY: insert into T_dta1 values ('trec 4', 1, 'key1-4');
42+
ERROR: key for t_dta1 not in t_pkey1
43+
QUERY: insert into T_dta2 values ('trec 1', 1, 'KEY1-1');
44+
QUERY: insert into T_dta2 values ('trec 2', 1, 'KEY1-2');
45+
QUERY: insert into T_dta2 values ('trec 3', 1, 'KEY1-3');
46+
QUERY: insert into T_dta2 values ('trec 4', 1, 'KEY1-4');
47+
ERROR: key for t_dta2 not in t_pkey2
48+
QUERY: select * from T_dta1;
49+
tkey |ref1|ref2
50+
----------+----+--------------------
51+
trec 1 | 1|key1-1
52+
trec 2 | 1|key1-2
53+
trec 3 | 1|key1-3
54+
(3 rows)
55+
56+
QUERY: select * from T_dta2;
57+
tkey |ref1|ref2
58+
----------+----+--------------------
59+
trec 1 | 1|KEY1-1
60+
trec 2 | 1|KEY1-2
61+
trec 3 | 1|KEY1-3
62+
(3 rows)
63+
64+
QUERY: update T_pkey1 set key2 = 'key2-9' where key1 = 2 and key2 = 'key2-1';
65+
QUERY: update T_pkey1 set key2 = 'key1-9' where key1 = 1 and key2 = 'key1-1';
66+
ERROR: key '1', 'key1-1 ' referenced by T_dta1
67+
QUERY: delete from T_pkey1 where key1 = 2 and key2 = 'key2-2';
68+
QUERY: delete from T_pkey1 where key1 = 1 and key2 = 'key1-2';
69+
ERROR: key '1', 'key1-2 ' referenced by T_dta1
70+
QUERY: update T_pkey2 set key2 = 'KEY2-9' where key1 = 2 and key2 = 'KEY2-1';
71+
QUERY: update T_pkey2 set key2 = 'KEY1-9' where key1 = 1 and key2 = 'KEY1-1';
72+
NOTICE: updated 1 entries in T_dta2 for new key in T_pkey2
73+
QUERY: delete from T_pkey2 where key1 = 2 and key2 = 'KEY2-2';
74+
QUERY: delete from T_pkey2 where key1 = 1 and key2 = 'KEY1-2';
75+
NOTICE: deleted 1 entries from T_dta2
76+
QUERY: select * from T_pkey1;
77+
key1|key2 |txt
78+
----+--------------------+----------------------------------------
79+
1|key1-1 |test key
80+
1|key1-2 |test key
81+
1|key1-3 |test key
82+
2|key2-3 |test key
83+
1|KEY1-3 |should work
84+
2|key2-9 |test key
85+
(6 rows)
86+
87+
QUERY: select * from T_pkey2;
88+
key1|key2 |txt
89+
----+--------------------+----------------------------------------
90+
1|KEY1-3 |test key
91+
2|KEY2-3 |test key
92+
2|KEY2-9 |test key
93+
1|KEY1-9 |test key
94+
(4 rows)
95+
96+
QUERY: select * from T_dta1;
97+
tkey |ref1|ref2
98+
----------+----+--------------------
99+
trec 1 | 1|key1-1
100+
trec 2 | 1|key1-2
101+
trec 3 | 1|key1-3
102+
(3 rows)
103+
104+
QUERY: select * from T_dta2;
105+
tkey |ref1|ref2
106+
----------+----+--------------------
107+
trec 3 | 1|KEY1-3
108+
trec 1 | 1|KEY1-9
109+
(2 rows)
110+
111+
QUERY: select tcl_avg(key1) from T_pkey1;
112+
tcl_avg
113+
-------
114+
1
115+
(1 row)
116+
117+
QUERY: select tcl_sum(key1) from T_pkey1;
118+
tcl_sum
119+
-------
120+
8
121+
(1 row)
122+
123+
QUERY: select tcl_avg(key1) from T_pkey2;
124+
tcl_avg
125+
-------
126+
1
127+
(1 row)
128+
129+
QUERY: select tcl_sum(key1) from T_pkey2;
130+
tcl_sum
131+
-------
132+
6
133+
(1 row)
134+
135+
QUERY: select tcl_avg(key1) from T_pkey1 where key1 = 99;
136+
tcl_avg
137+
-------
138+
139+
(1 row)
140+
141+
QUERY: select tcl_sum(key1) from T_pkey1 where key1 = 99;
142+
tcl_sum
143+
-------
144+
0
145+
(1 row)
146+
147+
QUERY: select 1 @< 2;
148+
?column?
149+
--------
150+
t
151+
(1 row)
152+
153+
QUERY: select 100 @< 4;
154+
?column?
155+
--------
156+
f
157+
(1 row)
158+
159+
QUERY: select * from T_pkey1 order by key1 using @<;
160+
key1|key2 |txt
161+
----+--------------------+----------------------------------------
162+
1|key1-1 |test key
163+
1|key1-2 |test key
164+
1|key1-3 |test key
165+
1|KEY1-3 |should work
166+
2|key2-3 |test key
167+
2|key2-9 |test key
168+
(6 rows)
169+
170+
QUERY: select * from T_pkey2 order by key1 using @<;
171+
key1|key2 |txt
172+
----+--------------------+----------------------------------------
173+
1|KEY1-3 |test key
174+
1|KEY1-9 |test key
175+
2|KEY2-3 |test key
176+
2|KEY2-9 |test key
177+
(4 rows)
178+

src/pl/tcl/test/test_mklang.sql

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
create function pltcl_call_handler() returns opaque
3+
as '/usr/local/pgsql/lib/pltcl.so'
4+
language 'C';
5+
6+
create trusted procedural language 'pltcl'
7+
handler pltcl_call_handler
8+
lancompiler 'PL/Tcl';
9+

src/pl/tcl/test/test_queries.sql

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
2+
insert into T_pkey1 values (1, 'key1-1', 'test key');
3+
insert into T_pkey1 values (1, 'key1-2', 'test key');
4+
insert into T_pkey1 values (1, 'key1-3', 'test key');
5+
insert into T_pkey1 values (2, 'key2-1', 'test key');
6+
insert into T_pkey1 values (2, 'key2-2', 'test key');
7+
insert into T_pkey1 values (2, 'key2-3', 'test key');
8+
9+
insert into T_pkey2 values (1, 'key1-1', 'test key');
10+
insert into T_pkey2 values (1, 'key1-2', 'test key');
11+
insert into T_pkey2 values (1, 'key1-3', 'test key');
12+
insert into T_pkey2 values (2, 'key2-1', 'test key');
13+
insert into T_pkey2 values (2, 'key2-2', 'test key');
14+
insert into T_pkey2 values (2, 'key2-3', 'test key');
15+
16+
select * from T_pkey1;
17+
18+
-- key2 in T_pkey2 should have upper case only
19+
select * from T_pkey2;
20+
21+
insert into T_pkey1 values (1, 'KEY1-3', 'should work');
22+
23+
-- Due to the upper case translation in trigger this must fail
24+
insert into T_pkey2 values (1, 'KEY1-3', 'should fail');
25+
26+
insert into T_dta1 values ('trec 1', 1, 'key1-1');
27+
insert into T_dta1 values ('trec 2', 1, 'key1-2');
28+
insert into T_dta1 values ('trec 3', 1, 'key1-3');
29+
30+
-- Must fail due to unknown key in T_pkey1
31+
insert into T_dta1 values ('trec 4', 1, 'key1-4');
32+
33+
insert into T_dta2 values ('trec 1', 1, 'KEY1-1');
34+
insert into T_dta2 values ('trec 2', 1, 'KEY1-2');
35+
insert into T_dta2 values ('trec 3', 1, 'KEY1-3');
36+
37+
-- Must fail due to unknown key in T_pkey2
38+
insert into T_dta2 values ('trec 4', 1, 'KEY1-4');
39+
40+
select * from T_dta1;
41+
42+
select * from T_dta2;
43+
44+
update T_pkey1 set key2 = 'key2-9' where key1 = 2 and key2 = 'key2-1';
45+
update T_pkey1 set key2 = 'key1-9' where key1 = 1 and key2 = 'key1-1';
46+
delete from T_pkey1 where key1 = 2 and key2 = 'key2-2';
47+
delete from T_pkey1 where key1 = 1 and key2 = 'key1-2';
48+
49+
update T_pkey2 set key2 = 'KEY2-9' where key1 = 2 and key2 = 'KEY2-1';
50+
update T_pkey2 set key2 = 'KEY1-9' where key1 = 1 and key2 = 'KEY1-1';
51+
delete from T_pkey2 where key1 = 2 and key2 = 'KEY2-2';
52+
delete from T_pkey2 where key1 = 1 and key2 = 'KEY1-2';
53+
54+
select * from T_pkey1;
55+
select * from T_pkey2;
56+
select * from T_dta1;
57+
select * from T_dta2;
58+
59+
select tcl_avg(key1) from T_pkey1;
60+
select tcl_sum(key1) from T_pkey1;
61+
select tcl_avg(key1) from T_pkey2;
62+
select tcl_sum(key1) from T_pkey2;
63+
64+
-- The following should return NULL instead of 0
65+
select tcl_avg(key1) from T_pkey1 where key1 = 99;
66+
select tcl_sum(key1) from T_pkey1 where key1 = 99;
67+
68+
select 1 @< 2;
69+
select 100 @< 4;
70+
71+
select * from T_pkey1 order by key1 using @<;
72+
select * from T_pkey2 order by key1 using @<;
73+

0 commit comments

Comments
 (0)