summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane2006-02-12 06:37:05 +0000
committerTom Lane2006-02-12 06:37:05 +0000
commit15c72174f35d75d31efa35968e39f1bb09f5a9aa (patch)
tree49ee41492e1bb19caf04c8e153161a43688f21ea /src/test
parent58634caa0ff693f1ab82e7af1a579fba841e9df8 (diff)
Apply code-reviewed version of for-scalar-list patch: mostly, fixing
it to report reasonable errors in error cases.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/plpgsql.out45
-rw-r--r--src/test/regress/sql/plpgsql.sql23
2 files changed, 53 insertions, 15 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index 3bcafcfb4d0..1a4307dce28 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -2722,22 +2722,53 @@ $$ language plpgsql;
ERROR: end label "outer_label" specified for unlabelled block
CONTEXT: compile of PL/pgSQL function "end_label4" near line 5
-- using list of scalars in fori and fore stmts
-create function for_vect() returns void as $$
+create function for_vect() returns void as $proc$
<<lbl>>declare a integer; b varchar; c varchar; r record;
begin
- -- old fori
- for i in 1 .. 10 loop
+ -- fori
+ for i in 1 .. 3 loop
raise notice '%', i;
end loop;
- for a in select 1 from generate_series(1,4) 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;
- for a,b,c in select generate_series, 'BB','CC' from generate_series(1,4) 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 E'select generate_series, \'bb\',\'cc\' from generate_series(1,4)' loop
+ 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;
-$$ language plpgsql;
+$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)
+
diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql
index 63b8bef14eb..5e8db475720 100644
--- a/src/test/regress/sql/plpgsql.sql
+++ b/src/test/regress/sql/plpgsql.sql
@@ -2281,24 +2281,31 @@ begin
end;
$$ language plpgsql;
-
-- using list of scalars in fori and fore stmts
-create function for_vect() returns void as $$
+create function for_vect() returns void as $proc$
<<lbl>>declare a integer; b varchar; c varchar; r record;
begin
- -- old fori
- for i in 1 .. 10 loop
+ -- fori
+ for i in 1 .. 3 loop
raise notice '%', i;
end loop;
- for a in select 1 from generate_series(1,4) 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;
- for a,b,c in select generate_series, 'BB','CC' from generate_series(1,4) 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 E'select generate_series, \'bb\',\'cc\' from generate_series(1,4)' loop
+ 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;
-$$ language plpgsql;
+$proc$ language plpgsql;
+
+select for_vect();