]> granicus.if.org Git - postgresql/commitdiff
Remove unnecessary int2vector-specific hash function and equality operator.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Oct 2016 18:54:08 +0000 (14:54 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Oct 2016 18:54:08 +0000 (14:54 -0400)
These functions were originally added in commit d8cedf67a to support
use of int2vector columns as catcache lookup keys.  However, there are
no catcaches that use such columns.  (Indeed I now think it must always
have been dead code: a catcache with such a key column would need an
underlying unique index on the column, but we've never had an int2vector
btree opclass.)

Getting rid of the int2vector-specific operator and function does not
lose any functionality, because operations on int2vectors will now fall
back to the generic anyarray support.  This avoids a wart that a btree
index on an int2vector column (made using anyarray_ops) would fail to
match equality searches, because int2vectoreq wasn't a member of the
opclass.  We don't really care much about that, since int2vector is not
meant as a type for users to use, but it's silly to have extra code and
less functionality.

If we ever do want a catcache to be indexed by an int2vector column,
we'd need to put back full btree and hash opclasses for int2vector,
comparable to the support for oidvector.  (The anyarray code can't be
used at such a low level, because it needs to do catcache lookups.)
But we'll deal with that if/when the need arises.

Also worth noting is that removal of the hash int2vector_ops opclass will
break any user-created hash indexes on int2vector columns.  While hash
anyarray_ops would serve the same purpose, it would probably not compute
the same hash values and thus wouldn't be on-disk-compatible.  Given that
int2vector isn't a user-facing type and we're planning other incompatible
changes in hash indexes for v10 anyway, this doesn't seem like something
to worry about, but it's probably worth mentioning here.

Amit Langote

Discussion: <d9bb74f8-b194-7307-9ebd-90645d377e45@lab.ntt.co.jp>

12 files changed:
src/backend/access/hash/hashfunc.c
src/backend/utils/adt/int.c
src/backend/utils/cache/catcache.c
src/include/access/hash.h
src/include/catalog/catversion.h
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_opfamily.h
src/include/catalog/pg_proc.h
src/include/utils/builtins.h

index 614f4ff2f5bd1e8d8f626c34309936d8e03028e3..12dce2e2b43a8e4725aef59b4b553d270abb3e5f 100644 (file)
@@ -130,14 +130,6 @@ hashoidvector(PG_FUNCTION_ARGS)
        return hash_any((unsigned char *) key->values, key->dim1 * sizeof(Oid));
 }
 
-Datum
-hashint2vector(PG_FUNCTION_ARGS)
-{
-       int2vector *key = (int2vector *) PG_GETARG_POINTER(0);
-
-       return hash_any((unsigned char *) key->values, key->dim1 * sizeof(int16));
-}
-
 Datum
 hashname(PG_FUNCTION_ARGS)
 {
index 29d92a7d04adaa921f8db04b2f36e0bb87c15555..8c44014ab628b15a7dc68f677d4a116583a427d8 100644 (file)
@@ -254,21 +254,6 @@ int2vectorsend(PG_FUNCTION_ARGS)
        return array_send(fcinfo);
 }
 
-/*
- * We don't have a complete set of int2vector support routines,
- * but we need int2vectoreq for catcache indexing.
- */
-Datum
-int2vectoreq(PG_FUNCTION_ARGS)
-{
-       int2vector *a = (int2vector *) PG_GETARG_POINTER(0);
-       int2vector *b = (int2vector *) PG_GETARG_POINTER(1);
-
-       if (a->dim1 != b->dim1)
-               PG_RETURN_BOOL(false);
-       PG_RETURN_BOOL(memcmp(a->values, b->values, a->dim1 * sizeof(int16)) == 0);
-}
-
 
 /*****************************************************************************
  *      PUBLIC ROUTINES                                                                                                                 *
index db7099fc0e9efdaad4e27a497552495ae725667f..6016d192a5c8f99cd1dee3cf4e98ae5dc67b8eb1 100644 (file)
@@ -126,11 +126,6 @@ GetCCHashEqFuncs(Oid keytype, PGFunction *hashfunc, RegProcedure *eqfunc)
 
                        *eqfunc = F_INT2EQ;
                        break;
-               case INT2VECTOROID:
-                       *hashfunc = hashint2vector;
-
-                       *eqfunc = F_INT2VECTOREQ;
-                       break;
                case INT4OID:
                        *hashfunc = hashint4;
 
index 491d4c90bbc4b2bd699040480631df67ff0da8fb..725e2f251cc68c6bc70e38f19715d91aee52a066 100644 (file)
@@ -283,7 +283,6 @@ extern Datum hashenum(PG_FUNCTION_ARGS);
 extern Datum hashfloat4(PG_FUNCTION_ARGS);
 extern Datum hashfloat8(PG_FUNCTION_ARGS);
 extern Datum hashoidvector(PG_FUNCTION_ARGS);
-extern Datum hashint2vector(PG_FUNCTION_ARGS);
 extern Datum hashname(PG_FUNCTION_ARGS);
 extern Datum hashtext(PG_FUNCTION_ARGS);
 extern Datum hashvarlena(PG_FUNCTION_ARGS);
index 3fdd0d6129580986e2b76e7a4a2c78f802f614df..bfa6b870a10df1c76ed84871ec49923b84e93f32 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     201609261
+#define CATALOG_VERSION_NO     201610121
 
 #endif
index 15b629029fe0c604f91fc6c924f2f64649c29e8c..e4c35150320a52b62f89407c12153db2a7623345 100644 (file)
@@ -573,8 +573,6 @@ DATA(insert (       2040   1114 1114 1 s 2060 405 0 ));
 DATA(insert (  2222   16 16 1 s   91 405 0 ));
 /* bytea_ops */
 DATA(insert (  2223   17 17 1 s 1955 405 0 ));
-/* int2vector_ops */
-DATA(insert (  2224   22 22 1 s        386 405 0 ));
 /* xid_ops */
 DATA(insert (  2225   28 28 1 s        352 405 0 ));
 /* cid_ops */
index 1b654d5be48605fa9ee151632300df72be00eeab..f01a5b4fb1e6bec13270497fcb7f6edbf9c49c50 100644 (file)
@@ -173,7 +173,6 @@ DATA(insert (       2001   1266 1266 1 1696 ));
 DATA(insert (  2040   1114 1114 1 2039 ));
 DATA(insert (  2222   16 16 1 454 ));
 DATA(insert (  2223   17 17 1 456 ));
-DATA(insert (  2224   22 22 1 398 ));
 DATA(insert (  2225   28 28 1 450 ));
 DATA(insert (  2226   29 29 1 450 ));
 DATA(insert (  2227   702 702 1 450 ));
index 5900cdc5b0b055866ed8c2ebb56801fe488fb012..ade8da3f34632360dee040e7eebf1fb3fceabbee 100644 (file)
@@ -168,7 +168,6 @@ DATA(insert (       403             bpchar_pattern_ops      PGNSP PGUID 2097 1042 f 0 ));
 DATA(insert (  403             money_ops                       PGNSP PGUID 2099  790 t 0 ));
 DATA(insert (  405             bool_ops                        PGNSP PGUID 2222   16 t 0 ));
 DATA(insert (  405             bytea_ops                       PGNSP PGUID 2223   17 t 0 ));
-DATA(insert (  405             int2vector_ops          PGNSP PGUID 2224   22 t 0 ));
 DATA(insert (  403             tid_ops                         PGNSP PGUID 2789   27 t 0 ));
 DATA(insert (  405             xid_ops                         PGNSP PGUID 2225   28 t 0 ));
 DATA(insert (  405             cid_ops                         PGNSP PGUID 2226   29 t 0 ));
index b8f06b350025a9a771596455973f1394b37f2473..26fa6188fa4b58fb0606287e47d3efcf2e435805 100644 (file)
@@ -156,8 +156,6 @@ DATA(insert OID = 389 (  "!!"          PGNSP PGUID l f f     0      20      1700  0  0 numeric_fac
 DESCR("deprecated, use ! instead");
 DATA(insert OID = 385 (  "="      PGNSP PGUID b f t    29      29      16 385   0 cideq eqsel eqjoinsel ));
 DESCR("equal");
-DATA(insert OID = 386 (  "="      PGNSP PGUID b f t    22      22      16 386   0 int2vectoreq eqsel eqjoinsel ));
-DESCR("equal");
 
 DATA(insert OID = 387 (  "="      PGNSP PGUID b t f    27      27      16 387 402 tideq eqsel eqjoinsel ));
 DESCR("equal");
index ac6b3047873e3848724278827c3b1d27f74f8921..7ba23e5cf9ad6d4acd7c0ae21df511e00212cbce 100644 (file)
@@ -117,7 +117,6 @@ DATA(insert OID = 2099 (    403             money_ops               PGNSP PGUID ));
 DATA(insert OID = 2222 (       405             bool_ops                PGNSP PGUID ));
 #define BOOL_HASH_FAM_OID 2222
 DATA(insert OID = 2223 (       405             bytea_ops               PGNSP PGUID ));
-DATA(insert OID = 2224 (       405             int2vector_ops  PGNSP PGUID ));
 DATA(insert OID = 2789 (       403             tid_ops                 PGNSP PGUID ));
 DATA(insert OID = 2225 (       405             xid_ops                 PGNSP PGUID ));
 DATA(insert OID = 2226 (       405             cid_ops                 PGNSP PGUID ));
index e2d08babda8647c36e5538dfdb7005aa737097ee..17ec71d47eeacd586dfbf93c1d6adad07398da3d 100644 (file)
@@ -540,7 +540,6 @@ DATA(insert OID = 313 (  int4                          PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23
 DESCR("convert int2 to int4");
 DATA(insert OID = 314 (  int2                     PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 21        "23" _null_ _null_ _null_ _null_ _null_ i4toi2 _null_ _null_ _null_ ));
 DESCR("convert int4 to int2");
-DATA(insert OID = 315 (  int2vectoreq     PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 16 "22 22" _null_ _null_ _null_ _null_ _null_ int2vectoreq _null_ _null_ _null_ ));
 DATA(insert OID = 316 (  float8                           PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 701  "23" _null_ _null_ _null_ _null_ _null_      i4tod _null_ _null_ _null_ ));
 DESCR("convert int4 to float8");
 DATA(insert OID = 317 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "701" _null_ _null_ _null_ _null_ _null_ dtoi4 _null_ _null_ _null_ ));
@@ -687,8 +686,6 @@ DATA(insert OID = 457 (  hashoidvector         PGNSP PGUID 12 1 0 0 0 f f f f t f i s
 DESCR("hash");
 DATA(insert OID = 329 (  hash_aclitem     PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "1033" _null_ _null_ _null_ _null_ _null_      hash_aclitem _null_ _null_ _null_ ));
 DESCR("hash");
-DATA(insert OID = 398 (  hashint2vector    PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "22" _null_ _null_ _null_ _null_ _null_ hashint2vector _null_ _null_ _null_ ));
-DESCR("hash");
 DATA(insert OID = 399 (  hashmacaddr      PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "829" _null_ _null_ _null_ _null_ _null_ hashmacaddr _null_ _null_ _null_ ));
 DESCR("hash");
 DATA(insert OID = 422 (  hashinet                 PGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "869" _null_ _null_ _null_ _null_ _null_ hashinet _null_ _null_ _null_ ));
index 2ae212a9c3f48130821fe2f5bb1f2d9fdc08c60e..90f5132b033f616da5e6f71545b1b9d2c014537c 100644 (file)
@@ -192,7 +192,6 @@ extern Datum int2vectorin(PG_FUNCTION_ARGS);
 extern Datum int2vectorout(PG_FUNCTION_ARGS);
 extern Datum int2vectorrecv(PG_FUNCTION_ARGS);
 extern Datum int2vectorsend(PG_FUNCTION_ARGS);
-extern Datum int2vectoreq(PG_FUNCTION_ARGS);
 extern Datum int4in(PG_FUNCTION_ARGS);
 extern Datum int4out(PG_FUNCTION_ARGS);
 extern Datum int4recv(PG_FUNCTION_ARGS);