mirror of
https://github.com/postgres/postgres.git
synced 2025-12-15 02:22:24 +03:00
This patch makes a minor cleanup to the implementation of PERFORM in
PL/PgSQL. Previously, it had been bundled together with the assign statement implementation, for some reason that wasn't clear to me (they certainly don't share any code with one another). So I separated them and made PERFORM a statement like any other. No changes in functionality. Along the way, I added some regression tests for PERFORM, added a bunch more SGML tags to the PL/PgSQL docs, and removed an obsolete comment relating to the implementation of RETURN NEXT. Neil Conway
This commit is contained in:
@@ -1733,3 +1733,54 @@ SELECT * FROM test_ret_rec_dyn(5) AS (a int, b numeric, c text);
|
||||
50 | 5 | xxx
|
||||
(1 row)
|
||||
|
||||
--
|
||||
-- test PERFORM
|
||||
--
|
||||
create table perform_test (
|
||||
a INT,
|
||||
b INT
|
||||
);
|
||||
create function simple_func(int) returns boolean as '
|
||||
BEGIN
|
||||
IF $1 < 20 THEN
|
||||
INSERT INTO perform_test VALUES ($1, $1 + 10);
|
||||
RETURN TRUE;
|
||||
ELSE
|
||||
RETURN FALSE;
|
||||
END IF;
|
||||
END;' language 'plpgsql';
|
||||
create function perform_test_func() returns void as '
|
||||
BEGIN
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
PERFORM simple_func(5);
|
||||
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
PERFORM simple_func(50);
|
||||
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
RETURN;
|
||||
END;' language 'plpgsql';
|
||||
SELECT perform_test_func();
|
||||
perform_test_func
|
||||
-------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM perform_test;
|
||||
a | b
|
||||
-----+-----
|
||||
5 | 15
|
||||
100 | 100
|
||||
100 | 100
|
||||
(3 rows)
|
||||
|
||||
drop table perform_test;
|
||||
|
||||
@@ -1559,3 +1559,48 @@ END;' language 'plpgsql';
|
||||
|
||||
SELECT * FROM test_ret_rec_dyn(1500) AS (a int, b int, c int);
|
||||
SELECT * FROM test_ret_rec_dyn(5) AS (a int, b numeric, c text);
|
||||
|
||||
--
|
||||
-- test PERFORM
|
||||
--
|
||||
|
||||
create table perform_test (
|
||||
a INT,
|
||||
b INT
|
||||
);
|
||||
|
||||
create function simple_func(int) returns boolean as '
|
||||
BEGIN
|
||||
IF $1 < 20 THEN
|
||||
INSERT INTO perform_test VALUES ($1, $1 + 10);
|
||||
RETURN TRUE;
|
||||
ELSE
|
||||
RETURN FALSE;
|
||||
END IF;
|
||||
END;' language 'plpgsql';
|
||||
|
||||
create function perform_test_func() returns void as '
|
||||
BEGIN
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
PERFORM simple_func(5);
|
||||
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
PERFORM simple_func(50);
|
||||
|
||||
IF FOUND then
|
||||
INSERT INTO perform_test VALUES (100, 100);
|
||||
END IF;
|
||||
|
||||
RETURN;
|
||||
END;' language 'plpgsql';
|
||||
|
||||
SELECT perform_test_func();
|
||||
SELECT * FROM perform_test;
|
||||
|
||||
drop table perform_test;
|
||||
Reference in New Issue
Block a user