diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index dd3e748c9f..895c3ad985 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -219,7 +219,7 @@ coerce_type(ParseState *pstate, Node *node, newcon->consttype = baseTypeId; newcon->consttypmod = inputTypeMod; - newcon->constcollid = get_typcollation(newcon->consttype); + newcon->constcollid = typeTypeCollation(targetType); newcon->constlen = typeLen(targetType); newcon->constbyval = typeByVal(targetType); newcon->constisnull = con->constisnull; diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index f413593f60..ac62cbc8c3 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -528,7 +528,7 @@ typeLen(Type t) return typ->typlen; } -/* given type (as type struct), return the value of its 'byval' attribute.*/ +/* given type (as type struct), return its 'byval' attribute */ bool typeByVal(Type t) { @@ -538,7 +538,7 @@ typeByVal(Type t) return typ->typbyval; } -/* given type (as type struct), return the name of type */ +/* given type (as type struct), return the type's name */ char * typeTypeName(Type t) { @@ -549,16 +549,26 @@ typeTypeName(Type t) return pstrdup(NameStr(typ->typname)); } +/* given type (as type struct), return its 'typrelid' attribute */ Oid typeTypeRelid(Type typ) { Form_pg_type typtup; typtup = (Form_pg_type) GETSTRUCT(typ); - return typtup->typrelid; } +/* given type (as type struct), return its 'typcollation' attribute */ +Oid +typeTypeCollation(Type typ) +{ + Form_pg_type typtup; + + typtup = (Form_pg_type) GETSTRUCT(typ); + return typtup->typcollation; +} + /* * Given a type structure and a string, returns the internal representation * of that string. The "string" can be NULL to perform conversion of a NULL diff --git a/src/include/parser/parse_type.h b/src/include/parser/parse_type.h index 92c9ecba4a..509e3b7f11 100644 --- a/src/include/parser/parse_type.h +++ b/src/include/parser/parse_type.h @@ -40,6 +40,7 @@ extern int16 typeLen(Type t); extern bool typeByVal(Type t); extern char *typeTypeName(Type t); extern Oid typeTypeRelid(Type typ); +extern Oid typeTypeCollation(Type typ); extern Datum stringTypeDatum(Type tp, char *string, int32 atttypmod); extern Oid typeidTypeRelid(Oid type_id);