Fix plpgsql to enforce domain checks when returning a NULL domain value.
Tom Lane <tgl@sss.pgh.pa.us>
Fix plpgsql to enforce domain checks when returning a NULL domain value. If a plpgsql function is declared to return a domain type, and the domain's constraints forbid a null value, it was nonetheless possible to return NULL, because we didn't bother to check the constraints for a null result. I'd noticed this while fooling with domains-over-composite, but had not gotten around to fixing it immediately. Add a regression test script exercising this and various other domain cases, largely borrowed from the plpython_types test. Although this is clearly a bug fix, I'm not sure whether anyone would thank us for changing the behavior in stable branches, so I'm inclined not to back-patch.
Files
| Path | Change | +/− |
|---|---|---|
| src/pl/plpgsql/src/expected/plpgsql_domain.out | added | +397 −0 |
| src/pl/plpgsql/src/Makefile | modified | +1 −1 |
| src/pl/plpgsql/src/pl_comp.c | modified | +4 −0 |
| src/pl/plpgsql/src/pl_exec.c | modified | +16 −0 |
| src/pl/plpgsql/src/plpgsql.h | modified | +1 −0 |
| src/pl/plpgsql/src/sql/plpgsql_domain.sql | added | +279 −0 |