Add strict_multi_assignment and too_many_rows plpgsql checks
authorTomas Vondra <tomas.vondra@postgresql.org>
Tue, 24 Jul 2018 23:09:03 +0000 (01:09 +0200)
committerTomas Vondra <tomas.vondra@postgresql.org>
Tue, 24 Jul 2018 23:46:32 +0000 (01:46 +0200)
commit167075be3ab1547e186096bb8e6e448cd8eea5af
treebf406f5eb63f2ea68c60c673d832a95c903c0c8d
parent2d3067595299d2ac1f29bbc26a83a99d59b33d4e
Add strict_multi_assignment and too_many_rows plpgsql checks

Until now shadowed_variables was the only plpgsql check supported by
plpgsql.extra_warnings and plpgsql.extra_errors.  This patch introduces
two new checks - strict_multi_assignment and too_many_rows.  Unlike
shadowed_variables, these new checks are enforced at run-time.

strict_multi_assignment checks that commands allowing multi-assignment
(for example SELECT INTO) have the same number of sources and targets.
too_many_rows checks that queries with an INTO clause return one row
exactly.

These checks are aimed at cases that are technically valid and allowed,
but are often a sign of a bug.  Therefore those checks are expected to
be enabled primarily in development and testing environments.

Author: Pavel Stehule
Reviewed-by: Stephen Frost, Tomas Vondra
Discussion: https://www.postgresql.org/message-id/flat/CAFj8pRA2kKRDKpUNwLY0GeG1OqOp+tLS2yQA1V41gzuSz-hCng@mail.gmail.com
doc/src/sgml/plpgsql.sgml
src/pl/plpgsql/src/pl_exec.c
src/pl/plpgsql/src/pl_handler.c
src/pl/plpgsql/src/plpgsql.h
src/test/regress/expected/plpgsql.out
src/test/regress/sql/plpgsql.sql