OSDN Git Service

Hash indexes had better pass the index collation to support functions, too.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Apr 2011 18:13:09 +0000 (14:13 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Apr 2011 18:13:09 +0000 (14:13 -0400)
Per experimentation with contrib/citext, whose hash function assumes that
it'll be passed a collation.

src/backend/access/hash/hashutil.c

index ac238d9..6283f4a 100644 (file)
@@ -80,11 +80,13 @@ uint32
 _hash_datum2hashkey(Relation rel, Datum key)
 {
        FmgrInfo   *procinfo;
+       Oid                     collation;
 
        /* XXX assumes index has only one attribute */
        procinfo = index_getprocinfo(rel, 1, HASHPROC);
+       collation = rel->rd_indcollation[0];
 
-       return DatumGetUInt32(FunctionCall1(procinfo, key));
+       return DatumGetUInt32(FunctionCall1Coll(procinfo, collation, key));
 }
 
 /*
@@ -98,6 +100,7 @@ uint32
 _hash_datum2hashkey_type(Relation rel, Datum key, Oid keytype)
 {
        RegProcedure hash_proc;
+       Oid                     collation;
 
        /* XXX assumes index has only one attribute */
        hash_proc = get_opfamily_proc(rel->rd_opfamily[0],
@@ -108,8 +111,9 @@ _hash_datum2hashkey_type(Relation rel, Datum key, Oid keytype)
                elog(ERROR, "missing support function %d(%u,%u) for index \"%s\"",
                         HASHPROC, keytype, keytype,
                         RelationGetRelationName(rel));
+       collation = rel->rd_indcollation[0];
 
-       return DatumGetUInt32(OidFunctionCall1(hash_proc, key));
+       return DatumGetUInt32(OidFunctionCall1Coll(hash_proc, collation, key));
 }
 
 /*