postgresql/src/include/utils
Tom Lane 687f096ea9 Make PL/Python handle domain-type conversions correctly.
Fix PL/Python so that it can handle domains over composite, and so that
it enforces domain constraints correctly in other cases that were not
always done properly before.  Notably, it didn't do arrays of domains
right (oversight in commit c12d570fa), and it failed to enforce domain
constraints when returning a composite type containing a domain field,
and if a transform function is being used for a domain's base type then
it failed to enforce domain constraints on the result.  Also, in many
places it missed checking domain constraints on null values, because
the plpy_typeio code simply wasn't called for Py_None.

Rather than try to band-aid these problems, I made a significant
refactoring of the plpy_typeio logic.  The existing design of recursing
for array and composite members is extended to also treat domains as
containers requiring recursion, and the APIs for the module are cleaned
up and simplified.

The patch also modifies plpy_typeio to rely on the typcache more than
it did before (which was pretty much not at all).  This reduces the
need for repetitive lookups, and lets us get rid of an ad-hoc scheme
for detecting changes in composite types.  I added a couple of small
features to typcache to help with that.

Although some of this is fixing bugs that long predate v11, I don't
think we should risk a back-patch: it's a significant amount of code
churn, and there've been no complaints from the field about the bugs.

Tom Lane, reviewed by Anthony Bykov

Discussion: https://postgr.es/m/24449.1509393613@sss.pgh.pa.us
2017-11-16 16:23:04 -05:00
..
.gitignore Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
acl.h Fix ordering in pg_dump of GRANTs 2017-09-13 20:02:09 -04:00
aclchk_internal.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
array.h Support arrays over domains. 2017-09-30 13:40:56 -04:00
arrayaccess.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ascii.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
attoptcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
backend_random.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
builtins.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
bytea.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
cash.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
catcache.h Improve sys/catcache performance. 2017-10-13 14:22:41 -07:00
combocid.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
date.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
datetime.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
datum.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
dsa.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
dynahash.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
dynamic_loader.h Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
elog.h Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
evtcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
expandeddatum.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
fmgrtab.h Msvc doesn't know UINT16_MAX, replace with PG_UINT16_MAX. 2017-10-04 10:01:02 -07:00
formatting.h Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
freepage.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
geo_decls.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
guc.h Fix problems with the "role" GUC and parallel query. 2017-10-29 12:58:40 +05:30
guc_tables.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
hashutils.h Fix unportable spelling of int64 constant. 2017-11-07 13:54:36 -05:00
help_config.h Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
hsearch.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
index_selfuncs.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
inet.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
int8.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
inval.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
json.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
jsonapi.h Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
jsonb.h Make DatumGetFoo/PG_GETARG_FOO/PG_RETURN_FOO macro names more consistent. 2017-09-18 15:21:23 -04:00
logtape.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
lsyscache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
memdebug.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
memutils.h Ensure SIZE_MAX can be used throughout our code. 2017-09-01 13:52:53 -04:00
nabstime.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
numeric.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
palloc.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_crc.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_locale.h Assume wcstombs(), towlower(), and sibling functions are always present. 2017-09-22 11:00:58 -04:00
pg_lsn.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_rusage.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pidfile.h Change pg_ctl to detect server-ready by watching status in postmaster.pid. 2017-06-28 17:31:32 -04:00
plancache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
portal.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ps_status.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
queryenvironment.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
rangetypes.h Make DatumGetFoo/PG_GETARG_FOO/PG_RETURN_FOO macro names more consistent. 2017-09-18 15:21:23 -04:00
regproc.h Post-PG 10 beta1 pgindent run 2017-05-17 16:31:56 -04:00
rel.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relcache.h Exclude pg_internal.init from BASE_BACKUP 2017-11-07 12:28:35 -05:00
relfilenodemap.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relmapper.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relptr.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
reltrigger.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
resowner.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
resowner_private.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
rls.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ruleutils.h Improve the error message when creating an empty range partition. 2017-08-10 13:46:56 -04:00
sampling.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
selfuncs.h Reduce excessive dereferencing of function pointers 2017-09-07 13:56:09 -04:00
snapmgr.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
snapshot.h Improve performance of get_actual_variable_range with recently-dead tuples. 2017-09-07 19:41:51 -04:00
sortsupport.h Reduce excessive dereferencing of function pointers 2017-09-07 13:56:09 -04:00
spccache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
syscache.h Improve sys/catcache performance. 2017-10-13 14:22:41 -07:00
timeout.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
timestamp.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
tqual.h Fix low-probability loss of NOTIFY messages due to XID wraparound. 2017-10-11 14:28:33 -04:00
tuplesort.h Propagate sort instrumentation from workers back to leader. 2017-08-29 13:26:33 -04:00
tuplestore.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
typcache.h Make PL/Python handle domain-type conversions correctly. 2017-11-16 16:23:04 -05:00
tzparser.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
uuid.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
varbit.h Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
varlena.h Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
xml.h Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00