mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05: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
 | 
			
		||||
# $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
 | 
			
		||||
top_builddir = ../../..
 | 
			
		||||
@ -37,7 +37,7 @@ OBJS = plperl.o spi_internal.o SPI.o
 | 
			
		||||
SHLIB_LINK = $(perl_embed_ldflags) $(BE_DLLLIBS)
 | 
			
		||||
 | 
			
		||||
REGRESS_OPTS = --dbname=$(PL_TESTDB) --load-language=plperl
 | 
			
		||||
REGRESS = plperl
 | 
			
		||||
REGRESS = plperl plperl_trigger plperl_shared
 | 
			
		||||
 | 
			
		||||
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