@@ -114,11 +114,7 @@ static void makeRangeConstructors(const char *name, Oid namespace,
114114 Oid rangeOid , Oid subtype );
115115static void makeMultirangeConstructors (const char * name , Oid namespace ,
116116 Oid multirangeOid , Oid rangeOid ,
117- Oid rangeArrayOid ,
118- Oid * oneArgContructorOid );
119- static void makeMultirangeCasts (const char * name , Oid namespace ,
120- Oid multirangeOid , Oid rangeOid ,
121- Oid rangeArrayOid , Oid singleArgContructorOid );
117+ Oid rangeArrayOid , Oid * castFuncOid );
122118static Oid findTypeInputFunction (List * procname , Oid typeOid );
123119static Oid findTypeOutputFunction (List * procname , Oid typeOid );
124120static Oid findTypeReceiveFunction (List * procname , Oid typeOid );
@@ -1369,7 +1365,7 @@ DefineRange(CreateRangeStmt *stmt)
13691365 ListCell * lc ;
13701366 ObjectAddress address ;
13711367 ObjectAddress mltrngaddress PG_USED_FOR_ASSERTS_ONLY ;
1372- Oid singleArgContructorOid ;
1368+ Oid castFuncOid ;
13731369
13741370 /* Convert list of names to a name and namespace */
13751371 typeNamespace = QualifiedNameGetCreationNamespace (stmt -> typeName ,
@@ -1721,12 +1717,10 @@ DefineRange(CreateRangeStmt *stmt)
17211717 makeRangeConstructors (typeName , typeNamespace , typoid , rangeSubtype );
17221718 makeMultirangeConstructors (multirangeTypeName , typeNamespace ,
17231719 multirangeOid , typoid , rangeArrayOid ,
1724- & singleArgContructorOid );
1720+ & castFuncOid );
17251721
1726- /* Create casts for this multirange type */
1727- makeMultirangeCasts (multirangeTypeName , typeNamespace ,
1728- multirangeOid , typoid , rangeArrayOid ,
1729- singleArgContructorOid );
1722+ /* Create cast from the range type to its multirange type */
1723+ CastCreate (typoid , multirangeOid , castFuncOid , 'e' , 'f' , DEPENDENCY_INTERNAL );
17301724
17311725 pfree (multirangeTypeName );
17321726 pfree (multirangeArrayName );
@@ -1814,13 +1808,13 @@ makeRangeConstructors(const char *name, Oid namespace,
18141808 * If we had an anyrangearray polymorphic type we could use it here,
18151809 * but since each type has its own constructor name there's no need.
18161810 *
1817- * Sets oneArgContructorOid to the oid of the new constructor that can be used
1811+ * Sets castFuncOid to the oid of the new constructor that can be used
18181812 * to cast from a range to a multirange.
18191813 */
18201814static void
18211815makeMultirangeConstructors (const char * name , Oid namespace ,
18221816 Oid multirangeOid , Oid rangeOid , Oid rangeArrayOid ,
1823- Oid * oneArgContructorOid )
1817+ Oid * castFuncOid )
18241818{
18251819 ObjectAddress myself ,
18261820 referenced ;
@@ -1910,7 +1904,7 @@ makeMultirangeConstructors(const char *name, Oid namespace,
19101904 /* ditto */
19111905 recordDependencyOn (& myself , & referenced , DEPENDENCY_INTERNAL );
19121906 pfree (argtypes );
1913- * oneArgContructorOid = myself .objectId ;
1907+ * castFuncOid = myself .objectId ;
19141908
19151909 /* n-arg constructor - vararg */
19161910 argtypes = buildoidvector (& rangeArrayOid , 1 );
@@ -1955,76 +1949,6 @@ makeMultirangeConstructors(const char *name, Oid namespace,
19551949 pfree (parameterModes );
19561950}
19571951
1958- /*
1959- * Create casts for the multirange type. The first cast makes multirange from
1960- * range, and it's based on the single-argument constructor. The second cast
1961- * makes an array of ranges from multirange.
1962- */
1963- static void
1964- makeMultirangeCasts (const char * name , Oid namespace ,
1965- Oid multirangeOid , Oid rangeOid , Oid rangeArrayOid ,
1966- Oid singleArgContructorOid )
1967- {
1968- ObjectAddress myself ,
1969- referenced ;
1970- oidvector * argtypes ;
1971-
1972- /*
1973- * Create cast from range to multirange using the existing single-argument
1974- * constructor procedure.
1975- */
1976- CastCreate (rangeOid , multirangeOid , singleArgContructorOid , 'e' , 'f' ,
1977- DEPENDENCY_INTERNAL );
1978-
1979- referenced .classId = TypeRelationId ;
1980- referenced .objectId = multirangeOid ;
1981- referenced .objectSubId = 0 ;
1982-
1983- /* multirange_to_array() function */
1984- argtypes = buildoidvector (& multirangeOid , 1 );
1985- myself = ProcedureCreate ("multirange_to_array" , /* name */
1986- namespace ,
1987- false, /* replace */
1988- false, /* returns set */
1989- rangeArrayOid , /* return type */
1990- BOOTSTRAP_SUPERUSERID , /* proowner */
1991- INTERNALlanguageId , /* language */
1992- F_FMGR_INTERNAL_VALIDATOR ,
1993- "multirange_to_array" , /* prosrc */
1994- NULL , /* probin */
1995- NULL , /* prosqlbody */
1996- PROKIND_FUNCTION ,
1997- false, /* security_definer */
1998- false, /* leakproof */
1999- true, /* isStrict */
2000- PROVOLATILE_IMMUTABLE , /* volatility */
2001- PROPARALLEL_SAFE , /* parallel safety */
2002- argtypes , /* parameterTypes */
2003- PointerGetDatum (NULL ), /* allParameterTypes */
2004- PointerGetDatum (NULL ), /* parameterModes */
2005- PointerGetDatum (NULL ), /* parameterNames */
2006- NIL , /* parameterDefaults */
2007- PointerGetDatum (NULL ), /* trftypes */
2008- PointerGetDatum (NULL ), /* proconfig */
2009- InvalidOid , /* prosupport */
2010- 1.0 , /* procost */
2011- 0.0 ); /* prorows */
2012-
2013- /*
2014- * Make the multirange_to_array() function internally-dependent on the
2015- * multirange type so that they go away silently when the type is dropped.
2016- */
2017- recordDependencyOn (& myself , & referenced , DEPENDENCY_INTERNAL );
2018- pfree (argtypes );
2019-
2020- /*
2021- * Create cast from multirange to the array of ranges using
2022- * multirange_to_array() function.
2023- */
2024- CastCreate (multirangeOid , rangeArrayOid , myself .objectId , 'e' , 'f' ,
2025- DEPENDENCY_INTERNAL );
2026- }
2027-
20281952/*
20291953 * Find suitable I/O and other support functions for a type.
20301954 *
0 commit comments