mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
Add regression tests for previously-untested PL/Perl features. From
Andrew Dunstan.
This commit is contained in:
parent
443f21737d
commit
11a0c3741f
@ -1,5 +1,5 @@
|
|||||||
# Makefile for PL/Perl
|
# Makefile for PL/Perl
|
||||||
# $PostgreSQL: pgsql/src/pl/plperl/GNUmakefile,v 1.20 2005/05/17 18:26:22 tgl Exp $
|
# $PostgreSQL: pgsql/src/pl/plperl/GNUmakefile,v 1.21 2005/05/24 08:05:36 neilc Exp $
|
||||||
|
|
||||||
subdir = src/pl/plperl
|
subdir = src/pl/plperl
|
||||||
top_builddir = ../../..
|
top_builddir = ../../..
|
||||||
@ -37,7 +37,7 @@ OBJS = plperl.o spi_internal.o SPI.o
|
|||||||
SHLIB_LINK = $(perl_embed_ldflags) $(BE_DLLLIBS)
|
SHLIB_LINK = $(perl_embed_ldflags) $(BE_DLLLIBS)
|
||||||
|
|
||||||
REGRESS_OPTS = --dbname=$(PL_TESTDB) --load-language=plperl
|
REGRESS_OPTS = --dbname=$(PL_TESTDB) --load-language=plperl
|
||||||
REGRESS = plperl
|
REGRESS = plperl plperl_trigger plperl_shared
|
||||||
|
|
||||||
include $(top_srcdir)/src/Makefile.shlib
|
include $(top_srcdir)/src/Makefile.shlib
|
||||||
|
|
||||||
|
26
src/pl/plperl/expected/plperl_shared.out
Normal file
26
src/pl/plperl/expected/plperl_shared.out
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
-- test the shared hash
|
||||||
|
create function setme(key text, val text) returns void language plperl as $$
|
||||||
|
|
||||||
|
my $key = shift;
|
||||||
|
my $val = shift;
|
||||||
|
$_SHARED{$key}= $val;
|
||||||
|
|
||||||
|
$$;
|
||||||
|
create function getme(key text) returns text language plperl as $$
|
||||||
|
|
||||||
|
my $key = shift;
|
||||||
|
return $_SHARED{$key};
|
||||||
|
|
||||||
|
$$;
|
||||||
|
select setme('ourkey','ourval');
|
||||||
|
setme
|
||||||
|
-------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
select getme('ourkey');
|
||||||
|
getme
|
||||||
|
--------
|
||||||
|
ourval
|
||||||
|
(1 row)
|
||||||
|
|
67
src/pl/plperl/expected/plperl_trigger.out
Normal file
67
src/pl/plperl/expected/plperl_trigger.out
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
-- test plperl triggers
|
||||||
|
CREATE TABLE trigger_test (
|
||||||
|
i int,
|
||||||
|
v varchar
|
||||||
|
);
|
||||||
|
CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
|
||||||
|
|
||||||
|
if (($_TD->{new}{i}>=100) || ($_TD->{new}{i}<=0))
|
||||||
|
{
|
||||||
|
return "SKIP"; # Skip INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
elsif ($_TD->{new}{v} ne "immortal")
|
||||||
|
{
|
||||||
|
$_TD->{new}{v} .= "(modified by trigger)";
|
||||||
|
return "MODIFY"; # Modify tuple and proceed INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return; # Proceed INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
$$ LANGUAGE plperl;
|
||||||
|
CREATE TRIGGER "test_valid_id_trig" BEFORE INSERT OR UPDATE ON trigger_test
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE "valid_id"();
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (1,'first line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (2,'second line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (3,'third line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (4,'immortal');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (101,'bad id');
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
i | v
|
||||||
|
---+----------------------------------
|
||||||
|
1 | first line(modified by trigger)
|
||||||
|
2 | second line(modified by trigger)
|
||||||
|
3 | third line(modified by trigger)
|
||||||
|
4 | immortal
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
UPDATE trigger_test SET i = 5 where i=3;
|
||||||
|
UPDATE trigger_test SET i = 100 where i=1;
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
i | v
|
||||||
|
---+------------------------------------------------------
|
||||||
|
1 | first line(modified by trigger)
|
||||||
|
2 | second line(modified by trigger)
|
||||||
|
4 | immortal
|
||||||
|
5 | third line(modified by trigger)(modified by trigger)
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION immortal() RETURNS trigger AS $$
|
||||||
|
if ($_TD->{old}{v} eq $_TD->{args}[0])
|
||||||
|
{
|
||||||
|
return "SKIP"; # Skip DELETE command
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return; # Proceed DELETE command
|
||||||
|
};
|
||||||
|
$$ LANGUAGE plperl;
|
||||||
|
CREATE TRIGGER "immortal_trig" BEFORE DELETE ON trigger_test
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE immortal('immortal');
|
||||||
|
DELETE FROM trigger_test;
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
i | v
|
||||||
|
---+----------
|
||||||
|
4 | immortal
|
||||||
|
(1 row)
|
||||||
|
|
22
src/pl/plperl/sql/plperl_shared.sql
Normal file
22
src/pl/plperl/sql/plperl_shared.sql
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
-- test the shared hash
|
||||||
|
|
||||||
|
create function setme(key text, val text) returns void language plperl as $$
|
||||||
|
|
||||||
|
my $key = shift;
|
||||||
|
my $val = shift;
|
||||||
|
$_SHARED{$key}= $val;
|
||||||
|
|
||||||
|
$$;
|
||||||
|
|
||||||
|
create function getme(key text) returns text language plperl as $$
|
||||||
|
|
||||||
|
my $key = shift;
|
||||||
|
return $_SHARED{$key};
|
||||||
|
|
||||||
|
$$;
|
||||||
|
|
||||||
|
select setme('ourkey','ourval');
|
||||||
|
|
||||||
|
select getme('ourkey');
|
||||||
|
|
||||||
|
|
61
src/pl/plperl/sql/plperl_trigger.sql
Normal file
61
src/pl/plperl/sql/plperl_trigger.sql
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
-- test plperl triggers
|
||||||
|
|
||||||
|
CREATE TABLE trigger_test (
|
||||||
|
i int,
|
||||||
|
v varchar
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
|
||||||
|
|
||||||
|
if (($_TD->{new}{i}>=100) || ($_TD->{new}{i}<=0))
|
||||||
|
{
|
||||||
|
return "SKIP"; # Skip INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
elsif ($_TD->{new}{v} ne "immortal")
|
||||||
|
{
|
||||||
|
$_TD->{new}{v} .= "(modified by trigger)";
|
||||||
|
return "MODIFY"; # Modify tuple and proceed INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return; # Proceed INSERT/UPDATE command
|
||||||
|
}
|
||||||
|
$$ LANGUAGE plperl;
|
||||||
|
|
||||||
|
CREATE TRIGGER "test_valid_id_trig" BEFORE INSERT OR UPDATE ON trigger_test
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE "valid_id"();
|
||||||
|
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (1,'first line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (2,'second line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (3,'third line');
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (4,'immortal');
|
||||||
|
|
||||||
|
INSERT INTO trigger_test (i, v) VALUES (101,'bad id');
|
||||||
|
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
|
||||||
|
UPDATE trigger_test SET i = 5 where i=3;
|
||||||
|
|
||||||
|
UPDATE trigger_test SET i = 100 where i=1;
|
||||||
|
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION immortal() RETURNS trigger AS $$
|
||||||
|
if ($_TD->{old}{v} eq $_TD->{args}[0])
|
||||||
|
{
|
||||||
|
return "SKIP"; # Skip DELETE command
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return; # Proceed DELETE command
|
||||||
|
};
|
||||||
|
$$ LANGUAGE plperl;
|
||||||
|
|
||||||
|
CREATE TRIGGER "immortal_trig" BEFORE DELETE ON trigger_test
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE immortal('immortal');
|
||||||
|
|
||||||
|
DELETE FROM trigger_test;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT * FROM trigger_test;
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user