summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane2002-09-01 16:28:06 +0000
committerTom Lane2002-09-01 16:28:06 +0000
commit470a1048ec145fe16b5baea56b9aef93f9878747 (patch)
treeb437c27ddac8636efbb746852ea72b3ed7f4970e /src/test
parent1903221517b7a5d8846d77160d9bad61721d48a1 (diff)
plpgsql functions can return RECORD, per Neil Conway.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/plpgsql.out53
-rw-r--r--src/test/regress/sql/plpgsql.sql35
2 files changed, 88 insertions, 0 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index 583543262e..e18a1d556a 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -1680,3 +1680,56 @@ select * from test_ret_set_scalar(1,10);
11
(10 rows)
+create function test_ret_set_rec_dyn(int) returns setof record as '
+DECLARE
+ retval RECORD;
+BEGIN
+ IF $1 > 10 THEN
+ SELECT INTO retval 5, 10, 15;
+ RETURN NEXT retval;
+ RETURN NEXT retval;
+ ELSE
+ SELECT INTO retval 50, 5::numeric, ''xxx''::text;
+ RETURN NEXT retval;
+ RETURN NEXT retval;
+ END IF;
+ RETURN;
+END;' language 'plpgsql';
+SELECT * FROM test_ret_set_rec_dyn(1500) AS (a int, b int, c int);
+ a | b | c
+---+----+----
+ 5 | 10 | 15
+ 5 | 10 | 15
+(2 rows)
+
+SELECT * FROM test_ret_set_rec_dyn(5) AS (a int, b numeric, c text);
+ a | b | c
+----+---+-----
+ 50 | 5 | xxx
+ 50 | 5 | xxx
+(2 rows)
+
+create function test_ret_rec_dyn(int) returns record as '
+DECLARE
+ retval RECORD;
+BEGIN
+ IF $1 > 10 THEN
+ SELECT INTO retval 5, 10, 15;
+ RETURN retval;
+ ELSE
+ SELECT INTO retval 50, 5::numeric, ''xxx''::text;
+ RETURN retval;
+ END IF;
+END;' language 'plpgsql';
+SELECT * FROM test_ret_rec_dyn(1500) AS (a int, b int, c int);
+ a | b | c
+---+----+----
+ 5 | 10 | 15
+(1 row)
+
+SELECT * FROM test_ret_rec_dyn(5) AS (a int, b numeric, c text);
+ a | b | c
+----+---+-----
+ 50 | 5 | xxx
+(1 row)
+
diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql
index e6795ed10a..b6607442d7 100644
--- a/src/test/regress/sql/plpgsql.sql
+++ b/src/test/regress/sql/plpgsql.sql
@@ -1524,3 +1524,38 @@ BEGIN
END;' language 'plpgsql';
select * from test_ret_set_scalar(1,10);
+
+create function test_ret_set_rec_dyn(int) returns setof record as '
+DECLARE
+ retval RECORD;
+BEGIN
+ IF $1 > 10 THEN
+ SELECT INTO retval 5, 10, 15;
+ RETURN NEXT retval;
+ RETURN NEXT retval;
+ ELSE
+ SELECT INTO retval 50, 5::numeric, ''xxx''::text;
+ RETURN NEXT retval;
+ RETURN NEXT retval;
+ END IF;
+ RETURN;
+END;' language 'plpgsql';
+
+SELECT * FROM test_ret_set_rec_dyn(1500) AS (a int, b int, c int);
+SELECT * FROM test_ret_set_rec_dyn(5) AS (a int, b numeric, c text);
+
+create function test_ret_rec_dyn(int) returns record as '
+DECLARE
+ retval RECORD;
+BEGIN
+ IF $1 > 10 THEN
+ SELECT INTO retval 5, 10, 15;
+ RETURN retval;
+ ELSE
+ SELECT INTO retval 50, 5::numeric, ''xxx''::text;
+ RETURN retval;
+ END IF;
+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);