]> granicus.if.org Git - postgresql/commitdiff
Avoid an unnecessary syscache lookup in parse_coerce.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Apr 2011 20:11:04 +0000 (16:11 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Apr 2011 20:11:41 +0000 (16:11 -0400)
All the other fields of the constant are being extracted from the syscache
entry we already have, so handle collation similarly.  (There don't seem
to be any other uses for the new function at the moment.)

src/backend/parser/parse_coerce.c
src/backend/parser/parse_type.c
src/include/parser/parse_type.h

index dd3e748c9f6d21fb9be56f28441ef47663e008d0..895c3ad98565d0c9e160b2e74863e4fa1d26a3e3 100644 (file)
@@ -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;
index f413593f60220a6cc0e0080ded0836c6f310f513..ac62cbc8c3322accb3ff7cf5fd312d3d60fd9d69 100644 (file)
@@ -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
index 92c9ecba4acc7303a3a3c0ba4bf1f402d26dbb81..509e3b7f11adec06b31bef6cde66e697e7f9dc6f 100644 (file)
@@ -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);