diff options
| author | Tom Lane | 2009-09-29 20:05:29 +0000 |
|---|---|---|
| committer | Tom Lane | 2009-09-29 20:05:29 +0000 |
| commit | 960d7ff02266b3e11684470d140ed26957aece5f (patch) | |
| tree | ec6348ffb8e39e7b6f9018defc6127890e3b3859 /src/test | |
| parent | 25549edb268d5d02de16ce2cab33fee24c6d0873 (diff) | |
Allow MOVE FORWARD n, MOVE BACKWARD n, MOVE FORWARD ALL, MOVE BACKWARD ALL
in plpgsql. Clean up a couple of corner cases in the MOVE/FETCH syntax.
Pavel Stehule
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/plpgsql.out | 46 | ||||
| -rw-r--r-- | src/test/regress/sql/plpgsql.sql | 39 |
2 files changed, 81 insertions, 4 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index ca4c9dc2331..a362fb53705 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -3027,6 +3027,28 @@ select * from sc_test(); create or replace function sc_test() returns setof integer as $$ declare + c refcursor; + x integer; +begin + open c scroll for execute 'select f1 from int4_tbl'; + fetch last from c into x; + while found loop + return next x; + move backward 2 from c; + fetch relative -1 from c into x; + end loop; + close c; +end; +$$ language plpgsql; +select * from sc_test(); + sc_test +------------- + -2147483647 + 123456 +(2 rows) + +create or replace function sc_test() returns setof integer as $$ +declare c cursor for select * from generate_series(1, 10); x integer; begin @@ -3052,6 +3074,26 @@ select * from sc_test(); 9 (3 rows) +create or replace function sc_test() returns setof integer as $$ +declare + c cursor for select * from generate_series(1, 10); + x integer; +begin + open c; + move forward all in c; + fetch backward from c into x; + if found then + return next x; + end if; + close c; +end; +$$ language plpgsql; +select * from sc_test(); + sc_test +--------- + 10 +(1 row) + drop function sc_test(); -- test qualified variable names create function pl_qual_names (param1 int) returns void as $$ @@ -3864,7 +3906,7 @@ drop function strtest(); -- Test anonymous code blocks. DO $$ DECLARE r record; -BEGIN +BEGIN FOR r IN SELECT rtrim(roomno) AS roomno, comment FROM Room ORDER BY roomno LOOP RAISE NOTICE '%, %', r.roomno, r.comment; @@ -3887,7 +3929,7 @@ LINE 1: DO LANGUAGE plpgsql $$begin return 1; end$$; ^ DO LANGUAGE plpgsql $$ DECLARE r record; -BEGIN +BEGIN FOR r IN SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomno LOOP RAISE NOTICE '%, %', r.roomno, r.comment; diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 96f89144b77..80de8eb72f8 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -2513,6 +2513,24 @@ select * from sc_test(); create or replace function sc_test() returns setof integer as $$ declare + c refcursor; + x integer; +begin + open c scroll for execute 'select f1 from int4_tbl'; + fetch last from c into x; + while found loop + return next x; + move backward 2 from c; + fetch relative -1 from c into x; + end loop; + close c; +end; +$$ language plpgsql; + +select * from sc_test(); + +create or replace function sc_test() returns setof integer as $$ +declare c cursor for select * from generate_series(1, 10); x integer; begin @@ -2533,6 +2551,23 @@ $$ language plpgsql; select * from sc_test(); +create or replace function sc_test() returns setof integer as $$ +declare + c cursor for select * from generate_series(1, 10); + x integer; +begin + open c; + move forward all in c; + fetch backward from c into x; + if found then + return next x; + end if; + close c; +end; +$$ language plpgsql; + +select * from sc_test(); + drop function sc_test(); -- test qualified variable names @@ -3084,7 +3119,7 @@ drop function strtest(); DO $$ DECLARE r record; -BEGIN +BEGIN FOR r IN SELECT rtrim(roomno) AS roomno, comment FROM Room ORDER BY roomno LOOP RAISE NOTICE '%, %', r.roomno, r.comment; @@ -3096,7 +3131,7 @@ DO LANGUAGE plpgsql $$begin return 1; end$$; DO LANGUAGE plpgsql $$ DECLARE r record; -BEGIN +BEGIN FOR r IN SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomno LOOP RAISE NOTICE '%, %', r.roomno, r.comment; |
