]> granicus.if.org Git - postgresql/commit
Improve regression tests' code coverage for plpgsql control structures.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Dec 2017 22:04:11 +0000 (17:04 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Dec 2017 22:04:11 +0000 (17:04 -0500)
commitdd2243f2ade43bcad8e615e6cf4286be250e374a
tree89d5d66551b90b3fff2c2164a13db919bc561050
parent5303ffe71b4d28663e0881199bb1a5ea26217ce4
Improve regression tests' code coverage for plpgsql control structures.

I noticed that our code coverage report showed considerable deficiency
in test coverage for PL/pgSQL control statements.  Notably, both
exec_stmt_block and most of the loop control statements had very poor
coverage of handling of return/exit/continue result codes from their
child statements; and exec_stmt_fori was seriously lacking in feature
coverage, having no test that exercised its BY or REVERSE features,
nor verification that its overflow defenses work.

Now that we have some infrastructure for plpgsql-specific test scripts,
the natural thing to do is make a new script rather than further extend
plpgsql.sql.  So I created a new script plpgsql_control.sql with the
charter to test plpgsql control structures, and moved a few existing
tests there because they fell entirely under that charter.  I then
added new test cases that exercise the bits of code complained of above.

Of the five kinds of loop statements, only exec_stmt_while's result code
handling is fully exercised by these tests.  That would be a deficiency
as things stand, but a follow-on commit will merge the loop statements'
result code handling into one implementation.  So testing each usage of
that implementation separately seems redundant.

In passing, also add a couple test cases to plpgsql.sql to more fully
exercise plpgsql's code related to expanded arrays --- I had thought
that area was sufficiently covered already, but the coverage report
showed a couple of un-executed code paths.

Discussion: https://postgr.es/m/26314.1514670401@sss.pgh.pa.us
src/pl/plpgsql/src/Makefile
src/pl/plpgsql/src/expected/plpgsql_control.out [new file with mode: 0644]
src/pl/plpgsql/src/sql/plpgsql_control.sql [new file with mode: 0644]
src/test/regress/expected/plpgsql.out
src/test/regress/sql/plpgsql.sql