diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2021-06-15 21:43:17 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2021-06-15 21:44:40 +0300 |
commit | 817bb0a7d1e02df4643d37304aed8574cf43f629 (patch) | |
tree | fd34a0b945e8627be7c4c61ec658c26c81e66455 /src/backend/commands/typecmds.c | |
parent | 958cfbcf2dd338e3179c2d8a35f48bde020eba60 (diff) | |
download | postgresql-817bb0a7d1e02df4643d37304aed8574cf43f629.tar.gz postgresql-817bb0a7d1e02df4643d37304aed8574cf43f629.zip |
Revert 29854ee8d1 due to buildfarm failures
Reported-by: Tom Lane
Discussion: https://postgr.es/m/CAPpHfdvcnw3x7jdV3r52p4%3D5S4WUxBCzcQKB3JukQHoicv1LSQ%40mail.gmail.com
Diffstat (limited to 'src/backend/commands/typecmds.c')
-rw-r--r-- | src/backend/commands/typecmds.c | 92 |
1 files changed, 8 insertions, 84 deletions
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 9ea0ce17e12..58ec65c6afc 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -114,11 +114,7 @@ static void makeRangeConstructors(const char *name, Oid namespace, Oid rangeOid, Oid subtype); static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, - Oid rangeArrayOid, - Oid *oneArgContructorOid); -static void makeMultirangeCasts(const char *name, Oid namespace, - Oid multirangeOid, Oid rangeOid, - Oid rangeArrayOid, Oid singleArgContructorOid); + Oid rangeArrayOid, Oid *castFuncOid); static Oid findTypeInputFunction(List *procname, Oid typeOid); static Oid findTypeOutputFunction(List *procname, Oid typeOid); static Oid findTypeReceiveFunction(List *procname, Oid typeOid); @@ -1369,7 +1365,7 @@ DefineRange(CreateRangeStmt *stmt) ListCell *lc; ObjectAddress address; ObjectAddress mltrngaddress PG_USED_FOR_ASSERTS_ONLY; - Oid singleArgContructorOid; + Oid castFuncOid; /* Convert list of names to a name and namespace */ typeNamespace = QualifiedNameGetCreationNamespace(stmt->typeName, @@ -1721,12 +1717,10 @@ DefineRange(CreateRangeStmt *stmt) makeRangeConstructors(typeName, typeNamespace, typoid, rangeSubtype); makeMultirangeConstructors(multirangeTypeName, typeNamespace, multirangeOid, typoid, rangeArrayOid, - &singleArgContructorOid); + &castFuncOid); - /* Create casts for this multirange type */ - makeMultirangeCasts(multirangeTypeName, typeNamespace, - multirangeOid, typoid, rangeArrayOid, - singleArgContructorOid); + /* Create cast from the range type to its multirange type */ + CastCreate(typoid, multirangeOid, castFuncOid, 'e', 'f', DEPENDENCY_INTERNAL); pfree(multirangeTypeName); pfree(multirangeArrayName); @@ -1814,13 +1808,13 @@ makeRangeConstructors(const char *name, Oid namespace, * If we had an anyrangearray polymorphic type we could use it here, * but since each type has its own constructor name there's no need. * - * Sets oneArgContructorOid to the oid of the new constructor that can be used + * Sets castFuncOid to the oid of the new constructor that can be used * to cast from a range to a multirange. */ static void makeMultirangeConstructors(const char *name, Oid namespace, Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, - Oid *oneArgContructorOid) + Oid *castFuncOid) { ObjectAddress myself, referenced; @@ -1910,7 +1904,7 @@ makeMultirangeConstructors(const char *name, Oid namespace, /* ditto */ recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); pfree(argtypes); - *oneArgContructorOid = myself.objectId; + *castFuncOid = myself.objectId; /* n-arg constructor - vararg */ argtypes = buildoidvector(&rangeArrayOid, 1); @@ -1956,76 +1950,6 @@ makeMultirangeConstructors(const char *name, Oid namespace, } /* - * Create casts for the multirange type. The first cast makes multirange from - * range, and it's based on the single-argument constructor. The second cast - * makes an array of ranges from multirange. - */ -static void -makeMultirangeCasts(const char *name, Oid namespace, - Oid multirangeOid, Oid rangeOid, Oid rangeArrayOid, - Oid singleArgContructorOid) -{ - ObjectAddress myself, - referenced; - oidvector *argtypes; - - /* - * Create cast from range to multirange using the existing single-argument - * constructor procedure. - */ - CastCreate(rangeOid, multirangeOid, singleArgContructorOid, 'e', 'f', - DEPENDENCY_INTERNAL); - - referenced.classId = TypeRelationId; - referenced.objectId = multirangeOid; - referenced.objectSubId = 0; - - /* multirange_to_array() function */ - argtypes = buildoidvector(&multirangeOid, 1); - myself = ProcedureCreate("multirange_to_array", /* name */ - namespace, - false, /* replace */ - false, /* returns set */ - rangeArrayOid, /* return type */ - BOOTSTRAP_SUPERUSERID, /* proowner */ - INTERNALlanguageId, /* language */ - F_FMGR_INTERNAL_VALIDATOR, - "multirange_to_array", /* prosrc */ - NULL, /* probin */ - NULL, /* prosqlbody */ - PROKIND_FUNCTION, - false, /* security_definer */ - false, /* leakproof */ - true, /* isStrict */ - PROVOLATILE_IMMUTABLE, /* volatility */ - PROPARALLEL_SAFE, /* parallel safety */ - argtypes, /* parameterTypes */ - PointerGetDatum(NULL), /* allParameterTypes */ - PointerGetDatum(NULL), /* parameterModes */ - PointerGetDatum(NULL), /* parameterNames */ - NIL, /* parameterDefaults */ - PointerGetDatum(NULL), /* trftypes */ - PointerGetDatum(NULL), /* proconfig */ - InvalidOid, /* prosupport */ - 1.0, /* procost */ - 0.0); /* prorows */ - - /* - * Make the multirange_to_array() function internally-dependent on the - * multirange type so that they go away silently when the type is dropped. - */ - recordDependencyOn(&myself, &referenced, DEPENDENCY_INTERNAL); - pfree(argtypes); - - /* - * Create cast from multirange to the array of ranges using - * multirange_to_array() function. - */ - CastCreate(multirangeOid, rangeArrayOid, myself.objectId, 'e', 'f', - DEPENDENCY_INTERNAL); -} - -/* * Find suitable I/O and other support functions for a type. * * typeOid is the type's OID (which will already exist, if only as a shell |