Commit 632b03da authored by Peter Eisentraut's avatar Peter Eisentraut

Start a separate test suite for plpgsql

The plpgsql.sql test file in the main regression tests is now by far the
largest after numeric_big, making editing and managing the test cases
very cumbersome.  The other PLs have their own test suites split up into
smaller files by topic.  It would be nice to have that for plpgsql as
well.  So, to get that started, set up test infrastructure in
src/pl/plpgsql/src/ and split out the recently added procedure test
cases into a new file there.  That file now mirrors the test cases added
to the other PLs, making managing those matching tests a bit easier too.

msvc build system changes with help from Michael Paquier
parent 3d887422
/pl_gram.c /pl_gram.c
/pl_gram.h /pl_gram.h
/plerrcodes.h /plerrcodes.h
/log/
/results/
/tmp_check/
...@@ -24,6 +24,8 @@ OBJS = pl_gram.o pl_handler.o pl_comp.o pl_exec.o \ ...@@ -24,6 +24,8 @@ OBJS = pl_gram.o pl_handler.o pl_comp.o pl_exec.o \
DATA = plpgsql.control plpgsql--1.0.sql plpgsql--unpackaged--1.0.sql DATA = plpgsql.control plpgsql--1.0.sql plpgsql--unpackaged--1.0.sql
REGRESS = plpgsql_call
all: all-lib all: all-lib
# Shared library stuff # Shared library stuff
...@@ -65,6 +67,18 @@ pl_gram.c: BISONFLAGS += -d ...@@ -65,6 +67,18 @@ pl_gram.c: BISONFLAGS += -d
plerrcodes.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-plerrcodes.pl plerrcodes.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-plerrcodes.pl
$(PERL) $(srcdir)/generate-plerrcodes.pl $< > $@ $(PERL) $(srcdir)/generate-plerrcodes.pl $< > $@
check: submake
$(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)
installcheck: submake
$(pg_regress_installcheck) $(REGRESS_OPTS) $(REGRESS)
.PHONY: submake
submake:
$(MAKE) -C $(top_builddir)/src/test/regress pg_regress$(X)
distprep: pl_gram.h pl_gram.c plerrcodes.h distprep: pl_gram.h pl_gram.c plerrcodes.h
# pl_gram.c, pl_gram.h and plerrcodes.h are in the distribution tarball, # pl_gram.c, pl_gram.h and plerrcodes.h are in the distribution tarball,
......
--
-- Tests for procedures / CALL syntax
--
CREATE PROCEDURE test_proc1()
LANGUAGE plpgsql
AS $$
BEGIN
NULL;
END;
$$;
CALL test_proc1();
-- error: can't return non-NULL
CREATE PROCEDURE test_proc2()
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 5;
END;
$$;
CALL test_proc2();
ERROR: cannot return a value from a procedure
CONTEXT: PL/pgSQL function test_proc2() while casting return value to function's return type
CREATE TABLE test1 (a int);
CREATE PROCEDURE test_proc3(x int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO test1 VALUES (x);
END;
$$;
CALL test_proc3(55);
SELECT * FROM test1;
a
----
55
(1 row)
DROP PROCEDURE test_proc1;
DROP PROCEDURE test_proc2;
DROP PROCEDURE test_proc3;
DROP TABLE test1;
--
-- Tests for procedures / CALL syntax
--
CREATE PROCEDURE test_proc1()
LANGUAGE plpgsql
AS $$
BEGIN
NULL;
END;
$$;
CALL test_proc1();
-- error: can't return non-NULL
CREATE PROCEDURE test_proc2()
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 5;
END;
$$;
CALL test_proc2();
CREATE TABLE test1 (a int);
CREATE PROCEDURE test_proc3(x int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO test1 VALUES (x);
END;
$$;
CALL test_proc3(55);
SELECT * FROM test1;
DROP PROCEDURE test_proc1;
DROP PROCEDURE test_proc2;
DROP PROCEDURE test_proc3;
DROP TABLE test1;
...@@ -6067,44 +6067,3 @@ END; $$ LANGUAGE plpgsql; ...@@ -6067,44 +6067,3 @@ END; $$ LANGUAGE plpgsql;
ERROR: "x" is not a scalar variable ERROR: "x" is not a scalar variable
LINE 3: GET DIAGNOSTICS x = ROW_COUNT; LINE 3: GET DIAGNOSTICS x = ROW_COUNT;
^ ^
--
-- Procedures
--
CREATE PROCEDURE test_proc1()
LANGUAGE plpgsql
AS $$
BEGIN
NULL;
END;
$$;
CALL test_proc1();
-- error: can't return non-NULL
CREATE PROCEDURE test_proc2()
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 5;
END;
$$;
CALL test_proc2();
ERROR: cannot return a value from a procedure
CONTEXT: PL/pgSQL function test_proc2() while casting return value to function's return type
CREATE TABLE proc_test1 (a int);
CREATE PROCEDURE test_proc3(x int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO proc_test1 VALUES (x);
END;
$$;
CALL test_proc3(55);
SELECT * FROM proc_test1;
a
----
55
(1 row)
DROP PROCEDURE test_proc1;
DROP PROCEDURE test_proc2;
DROP PROCEDURE test_proc3;
DROP TABLE proc_test1;
...@@ -4843,52 +4843,3 @@ BEGIN ...@@ -4843,52 +4843,3 @@ BEGIN
GET DIAGNOSTICS x = ROW_COUNT; GET DIAGNOSTICS x = ROW_COUNT;
RETURN; RETURN;
END; $$ LANGUAGE plpgsql; END; $$ LANGUAGE plpgsql;
--
-- Procedures
--
CREATE PROCEDURE test_proc1()
LANGUAGE plpgsql
AS $$
BEGIN
NULL;
END;
$$;
CALL test_proc1();
-- error: can't return non-NULL
CREATE PROCEDURE test_proc2()
LANGUAGE plpgsql
AS $$
BEGIN
RETURN 5;
END;
$$;
CALL test_proc2();
CREATE TABLE proc_test1 (a int);
CREATE PROCEDURE test_proc3(x int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO proc_test1 VALUES (x);
END;
$$;
CALL test_proc3(55);
SELECT * FROM proc_test1;
DROP PROCEDURE test_proc1;
DROP PROCEDURE test_proc2;
DROP PROCEDURE test_proc3;
DROP TABLE proc_test1;
...@@ -248,23 +248,32 @@ sub taptest ...@@ -248,23 +248,32 @@ sub taptest
sub plcheck sub plcheck
{ {
chdir "../../pl"; chdir "$topdir/src/pl";
foreach my $pl (glob("*")) foreach my $dir (glob("*/src *"))
{ {
next unless -d "$pl/sql" && -d "$pl/expected"; next unless -d "$dir/sql" && -d "$dir/expected";
my $lang = $pl eq 'tcl' ? 'pltcl' : $pl; my $lang;
if ($dir eq 'plpgsql/src') {
$lang = 'plpgsql';
}
elsif ($dir eq 'tcl') {
$lang = 'pltcl';
}
else {
$lang = $dir;
}
if ($lang eq 'plpython') if ($lang eq 'plpython')
{ {
next unless -d "../../$Config/plpython2"; next unless -d "$topdir/$Config/plpython2";
$lang = 'plpythonu'; $lang = 'plpythonu';
} }
else else
{ {
next unless -d "../../$Config/$lang"; next unless -d "$topdir/$Config/$lang";
} }
my @lang_args = ("--load-extension=$lang"); my @lang_args = ("--load-extension=$lang");
chdir $pl; chdir $dir;
my @tests = fetchTests(); my @tests = fetchTests();
if ($lang eq 'plperl') if ($lang eq 'plperl')
{ {
...@@ -285,16 +294,16 @@ sub plcheck ...@@ -285,16 +294,16 @@ sub plcheck
"============================================================\n"; "============================================================\n";
print "Checking $lang\n"; print "Checking $lang\n";
my @args = ( my @args = (
"../../../$Config/pg_regress/pg_regress", "$topdir/$Config/pg_regress/pg_regress",
"--bindir=../../../$Config/psql", "--bindir=$topdir/$Config/psql",
"--dbname=pl_regression", @lang_args, @tests); "--dbname=pl_regression", @lang_args, @tests);
system(@args); system(@args);
my $status = $? >> 8; my $status = $? >> 8;
exit $status if $status; exit $status if $status;
chdir ".."; chdir "$topdir/src/pl";
} }
chdir "../../.."; chdir "$topdir";
} }
sub subdircheck sub subdircheck
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment