aboutsummaryrefslogtreecommitdiff
path: root/src/test/regress/expected/plpgsql.out
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/regress/expected/plpgsql.out')
-rw-r--r--src/test/regress/expected/plpgsql.out476
1 files changed, 13 insertions, 463 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index a2df411132b..4783807ae04 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -2706,339 +2706,6 @@ NOTICE: {10,20,30}; 20; xyz; xyzabc; (10,aaa,,30); <NULL>
(1 row)
drop function raise_exprs();
--- continue statement
-create table conttesttbl(idx serial, v integer);
-insert into conttesttbl(v) values(10);
-insert into conttesttbl(v) values(20);
-insert into conttesttbl(v) values(30);
-insert into conttesttbl(v) values(40);
-create function continue_test1() returns void as $$
-declare _i integer = 0; _r record;
-begin
- raise notice '---1---';
- loop
- _i := _i + 1;
- raise notice '%', _i;
- continue when _i < 10;
- exit;
- end loop;
-
- raise notice '---2---';
- <<lbl>>
- loop
- _i := _i - 1;
- loop
- raise notice '%', _i;
- continue lbl when _i > 0;
- exit lbl;
- end loop;
- end loop;
-
- raise notice '---3---';
- <<the_loop>>
- while _i < 10 loop
- _i := _i + 1;
- continue the_loop when _i % 2 = 0;
- raise notice '%', _i;
- end loop;
-
- raise notice '---4---';
- for _i in 1..10 loop
- begin
- -- applies to outer loop, not the nested begin block
- continue when _i < 5;
- raise notice '%', _i;
- end;
- end loop;
-
- raise notice '---5---';
- for _r in select * from conttesttbl loop
- continue when _r.v <= 20;
- raise notice '%', _r.v;
- end loop;
-
- raise notice '---6---';
- for _r in execute 'select * from conttesttbl' loop
- continue when _r.v <= 20;
- raise notice '%', _r.v;
- end loop;
-
- raise notice '---7---';
- for _i in 1..3 loop
- raise notice '%', _i;
- continue when _i = 3;
- end loop;
-
- raise notice '---8---';
- _i := 1;
- while _i <= 3 loop
- raise notice '%', _i;
- _i := _i + 1;
- continue when _i = 3;
- end loop;
-
- raise notice '---9---';
- for _r in select * from conttesttbl order by v limit 1 loop
- raise notice '%', _r.v;
- continue;
- end loop;
-
- raise notice '---10---';
- for _r in execute 'select * from conttesttbl order by v limit 1' loop
- raise notice '%', _r.v;
- continue;
- end loop;
-end; $$ language plpgsql;
-select continue_test1();
-NOTICE: ---1---
-NOTICE: 1
-NOTICE: 2
-NOTICE: 3
-NOTICE: 4
-NOTICE: 5
-NOTICE: 6
-NOTICE: 7
-NOTICE: 8
-NOTICE: 9
-NOTICE: 10
-NOTICE: ---2---
-NOTICE: 9
-NOTICE: 8
-NOTICE: 7
-NOTICE: 6
-NOTICE: 5
-NOTICE: 4
-NOTICE: 3
-NOTICE: 2
-NOTICE: 1
-NOTICE: 0
-NOTICE: ---3---
-NOTICE: 1
-NOTICE: 3
-NOTICE: 5
-NOTICE: 7
-NOTICE: 9
-NOTICE: ---4---
-NOTICE: 5
-NOTICE: 6
-NOTICE: 7
-NOTICE: 8
-NOTICE: 9
-NOTICE: 10
-NOTICE: ---5---
-NOTICE: 30
-NOTICE: 40
-NOTICE: ---6---
-NOTICE: 30
-NOTICE: 40
-NOTICE: ---7---
-NOTICE: 1
-NOTICE: 2
-NOTICE: 3
-NOTICE: ---8---
-NOTICE: 1
-NOTICE: 2
-NOTICE: 3
-NOTICE: ---9---
-NOTICE: 10
-NOTICE: ---10---
-NOTICE: 10
- continue_test1
-----------------
-
-(1 row)
-
-drop function continue_test1();
-drop table conttesttbl;
--- should fail: CONTINUE is only legal inside a loop
-create function continue_error1() returns void as $$
-begin
- begin
- continue;
- end;
-end;
-$$ language plpgsql;
-ERROR: CONTINUE cannot be used outside a loop
-LINE 4: continue;
- ^
--- should fail: unlabeled EXIT is only legal inside a loop
-create function exit_error1() returns void as $$
-begin
- begin
- exit;
- end;
-end;
-$$ language plpgsql;
-ERROR: EXIT cannot be used outside a loop, unless it has a label
-LINE 4: exit;
- ^
--- should fail: no such label
-create function continue_error2() returns void as $$
-begin
- begin
- loop
- continue no_such_label;
- end loop;
- end;
-end;
-$$ language plpgsql;
-ERROR: there is no label "no_such_label" attached to any block or loop enclosing this statement
-LINE 5: continue no_such_label;
- ^
--- should fail: no such label
-create function exit_error2() returns void as $$
-begin
- begin
- loop
- exit no_such_label;
- end loop;
- end;
-end;
-$$ language plpgsql;
-ERROR: there is no label "no_such_label" attached to any block or loop enclosing this statement
-LINE 5: exit no_such_label;
- ^
--- should fail: CONTINUE can't reference the label of a named block
-create function continue_error3() returns void as $$
-begin
- <<begin_block1>>
- begin
- loop
- continue begin_block1;
- end loop;
- end;
-end;
-$$ language plpgsql;
-ERROR: block label "begin_block1" cannot be used in CONTINUE
-LINE 6: continue begin_block1;
- ^
--- On the other hand, EXIT *can* reference the label of a named block
-create function exit_block1() returns void as $$
-begin
- <<begin_block1>>
- begin
- loop
- exit begin_block1;
- raise exception 'should not get here';
- end loop;
- end;
-end;
-$$ language plpgsql;
-select exit_block1();
- exit_block1
--------------
-
-(1 row)
-
-drop function exit_block1();
--- verbose end block and end loop
-create function end_label1() returns void as $$
-<<blbl>>
-begin
- <<flbl1>>
- for _i in 1 .. 10 loop
- exit flbl1;
- end loop flbl1;
- <<flbl2>>
- for _i in 1 .. 10 loop
- exit flbl2;
- end loop;
-end blbl;
-$$ language plpgsql;
-select end_label1();
- end_label1
-------------
-
-(1 row)
-
-drop function end_label1();
--- should fail: undefined end label
-create function end_label2() returns void as $$
-begin
- for _i in 1 .. 10 loop
- exit;
- end loop flbl1;
-end;
-$$ language plpgsql;
-ERROR: end label "flbl1" specified for unlabelled block
-LINE 5: end loop flbl1;
- ^
--- should fail: end label does not match start label
-create function end_label3() returns void as $$
-<<outer_label>>
-begin
- <<inner_label>>
- for _i in 1 .. 10 loop
- exit;
- end loop outer_label;
-end;
-$$ language plpgsql;
-ERROR: end label "outer_label" differs from block's label "inner_label"
-LINE 7: end loop outer_label;
- ^
--- should fail: end label on a block without a start label
-create function end_label4() returns void as $$
-<<outer_label>>
-begin
- for _i in 1 .. 10 loop
- exit;
- end loop outer_label;
-end;
-$$ language plpgsql;
-ERROR: end label "outer_label" specified for unlabelled block
-LINE 6: end loop outer_label;
- ^
--- using list of scalars in fori and fore stmts
-create function for_vect() returns void as $proc$
-<<lbl>>declare a integer; b varchar; c varchar; r record;
-begin
- -- fori
- for i in 1 .. 3 loop
- raise notice '%', i;
- end loop;
- -- fore with record var
- for r in select gs as aa, 'BB' as bb, 'CC' as cc from generate_series(1,4) gs loop
- raise notice '% % %', r.aa, r.bb, r.cc;
- end loop;
- -- fore with single scalar
- for a in select gs from generate_series(1,4) gs loop
- raise notice '%', a;
- end loop;
- -- fore with multiple scalars
- for a,b,c in select gs, 'BB','CC' from generate_series(1,4) gs loop
- raise notice '% % %', a, b, c;
- end loop;
- -- using qualified names in fors, fore is enabled, disabled only for fori
- for lbl.a, lbl.b, lbl.c in execute $$select gs, 'bb','cc' from generate_series(1,4) gs$$ loop
- raise notice '% % %', a, b, c;
- end loop;
-end;
-$proc$ language plpgsql;
-select for_vect();
-NOTICE: 1
-NOTICE: 2
-NOTICE: 3
-NOTICE: 1 BB CC
-NOTICE: 2 BB CC
-NOTICE: 3 BB CC
-NOTICE: 4 BB CC
-NOTICE: 1
-NOTICE: 2
-NOTICE: 3
-NOTICE: 4
-NOTICE: 1 BB CC
-NOTICE: 2 BB CC
-NOTICE: 3 BB CC
-NOTICE: 4 BB CC
-NOTICE: 1 bb cc
-NOTICE: 2 bb cc
-NOTICE: 3 bb cc
-NOTICE: 4 bb cc
- for_vect
-----------
-
-(1 row)
-
-- regression test: verify that multiple uses of same plpgsql datum within
-- a SQL command all get mapped to the same $n parameter. The return value
-- of the SELECT is not important, we only care that it doesn't fail with
@@ -4368,136 +4035,6 @@ NOTICE: column >>some column name<<, constraint >>some constraint name<<, type
(1 row)
drop function stacked_diagnostics_test();
--- test CASE statement
-create or replace function case_test(bigint) returns text as $$
-declare a int = 10;
- b int = 1;
-begin
- case $1
- when 1 then
- return 'one';
- when 2 then
- return 'two';
- when 3,4,3+5 then
- return 'three, four or eight';
- when a then
- return 'ten';
- when a+b, a+b+1 then
- return 'eleven, twelve';
- end case;
-end;
-$$ language plpgsql immutable;
-select case_test(1);
- case_test
------------
- one
-(1 row)
-
-select case_test(2);
- case_test
------------
- two
-(1 row)
-
-select case_test(3);
- case_test
-----------------------
- three, four or eight
-(1 row)
-
-select case_test(4);
- case_test
-----------------------
- three, four or eight
-(1 row)
-
-select case_test(5); -- fails
-ERROR: case not found
-HINT: CASE statement is missing ELSE part.
-CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE
-select case_test(8);
- case_test
-----------------------
- three, four or eight
-(1 row)
-
-select case_test(10);
- case_test
------------
- ten
-(1 row)
-
-select case_test(11);
- case_test
-----------------
- eleven, twelve
-(1 row)
-
-select case_test(12);
- case_test
-----------------
- eleven, twelve
-(1 row)
-
-select case_test(13); -- fails
-ERROR: case not found
-HINT: CASE statement is missing ELSE part.
-CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE
-create or replace function catch() returns void as $$
-begin
- raise notice '%', case_test(6);
-exception
- when case_not_found then
- raise notice 'caught case_not_found % %', SQLSTATE, SQLERRM;
-end
-$$ language plpgsql;
-select catch();
-NOTICE: caught case_not_found 20000 case not found
- catch
--------
-
-(1 row)
-
--- test the searched variant too, as well as ELSE
-create or replace function case_test(bigint) returns text as $$
-declare a int = 10;
-begin
- case
- when $1 = 1 then
- return 'one';
- when $1 = a + 2 then
- return 'twelve';
- else
- return 'other';
- end case;
-end;
-$$ language plpgsql immutable;
-select case_test(1);
- case_test
------------
- one
-(1 row)
-
-select case_test(2);
- case_test
------------
- other
-(1 row)
-
-select case_test(12);
- case_test
------------
- twelve
-(1 row)
-
-select case_test(13);
- case_test
------------
- other
-(1 row)
-
-drop function catch();
-drop function case_test(bigint);
-- test variadic functions
create or replace function vari(variadic int[])
returns void as $$
@@ -5409,6 +4946,12 @@ create function consumes_rw_array(int[]) returns int
language plpgsql as $$
begin return $1[1]; end;
$$ stable;
+select consumes_rw_array(returns_rw_array(42));
+ consumes_rw_array
+-------------------
+ 42
+(1 row)
+
-- bug #14174
explain (verbose, costs off)
select i, a from
@@ -5465,6 +5008,13 @@ select consumes_rw_array(a), a from
2 | {2,2}
(2 rows)
+do $$
+declare a int[] := array[1,2];
+begin
+ a := a || 3;
+ raise notice 'a = %', a;
+end$$;
+NOTICE: a = {1,2,3}
--
-- Test access to call stack
--