• Tom Lane's avatar
    Make PL/Python handle domain-type conversions correctly. · 687f096e
    Tom Lane authored
    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 c12d570f), 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
    687f096e
typcache.c 77.8 KB