2017-12-30 22:46 GMT+01:00 Tom Lane <t...@sss.pgh.pa.us>:

> While I've been fooling around with plpgsql, I've been paying close
> attention to code coverage reports to make sure that the regression tests
> exercise all that new code.  It started to bug me that there were some
> serious gaps in the test coverage for existing code in pl_exec.c.
> One thing I noticed in particular was that coverage for the
> PLPGSQL_RC_EXIT/PLPGSQL_RC_RETURN/PLPGSQL_RC_CONTINUE management code
> in the various looping statements was nearly nonexistent, and coverage
> for integer FOR loops was pretty awful too (eg, not a single BY clause
> in the whole test corpus :-().  So I said to myself "let's fix that",
> and wrote up a new regression test file plpgsql_control.sql with a
> charter to test plpgsql's control structures.  I moved a few existing
> tests that seemed to fall into that charter into the new file, and
> added tests until I was happier with the state of the coverage report.
> The result is attached as plpgsql-better-code-coverage.patch.
>
> However, while I was doing that, it seemed like the tests I was adding
> were mighty repetitive, as many of them were just exactly the same thing
> adjusted for a different kind of loop statement.  And so I began to wonder
> why it was that we had five copies of the RC_FOO management logic, no two
> quite alike.  If we only had *one* copy then it would not seem necessary
> to have such duplicative test cases for it.  A bit of hacking later, and
> I had the management logic expressed as a macro, with only one copy for
> all five kinds of loop.  I verified it still passes the previous set of
> tests and then removed the ones that seemed redundant, yielding
> plpgsql-unify-loop-rc-code.patch below.  So what I propose actually
> committing is the combination of these two patches.
>
> Anyone feel like reviewing this, or should I just push it?  It seems
> pretty noncontroversial to me, but maybe I'm wrong about that.
>

I don't think any issue there. This macro is little bit massive, but
similar is used elsewhere.

+1

Pavel



>                         regards, tom lane
>
>

Reply via email to