Fix gist_bool_ops to use gbtreekey2
authorTomas Vondra <tomas.vondra@postgresql.org>
Mon, 8 Nov 2021 00:14:55 +0000 (01:14 +0100)
committerTomas Vondra <tomas.vondra@postgresql.org>
Mon, 8 Nov 2021 00:14:55 +0000 (01:14 +0100)
Commit 57e3c5160b added a new GiST bool opclass, but it used gbtreekey4
to store the data, which left two bytes undefined, as reported by skink,
our valgrind animal. There was a bit more confusion, because the opclass
also used gbtreekey8 in the definition.

Fix by defining a new gbtreekey2 struct, and using it in all the places.

Discussion: https://postgr.es/m/CAE2gYzyDKJBZngssR84VGZEN=Ux=V9FV23QfPgo+7-yYnKKg4g@mail.gmail.com

contrib/btree_gist/btree_bool.c
contrib/btree_gist/btree_gist--1.6--1.7.sql

index 25ce1e2b773aeb3d7470bea8ddf7e58798b63772..1be246ea5e15c27889d4b029220770e06aaf059e 100644 (file)
@@ -72,7 +72,7 @@ static const gbtree_ninfo tinfo =
 {
    gbt_t_bool,
    sizeof(bool),
-   4,                          /* sizeof(gbtreekey4) */
+   2,                          /* sizeof(gbtreekey2) */
    gbt_boolgt,
    gbt_boolge,
    gbt_booleq,
index 0e68356982304bb033dbb15d37836fd7d752fb64..1085216501eb89a8ecddc4ac080dc8e311b7f6a5 100644 (file)
@@ -4,6 +4,21 @@
 \echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.7'" to load this file. \quit
 
 -- This upgrade scripts add support for bool.
+CREATE FUNCTION gbtreekey2_in(cstring)
+RETURNS gbtreekey2
+AS 'MODULE_PATHNAME', 'gbtreekey_in'
+LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
+
+CREATE FUNCTION gbtreekey2_out(gbtreekey2)
+RETURNS cstring
+AS 'MODULE_PATHNAME', 'gbtreekey_out'
+LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
+
+CREATE TYPE gbtreekey2 (
+   INTERNALLENGTH = 2,
+   INPUT  = gbtreekey2_in,
+   OUTPUT = gbtreekey2_out
+);
 
 -- Define the GiST support methods
 CREATE FUNCTION gbt_bool_consistent(internal,bool,int2,oid,internal)
@@ -32,11 +47,11 @@ AS 'MODULE_PATHNAME'
 LANGUAGE C IMMUTABLE STRICT;
 
 CREATE FUNCTION gbt_bool_union(internal, internal)
-RETURNS gbtreekey8
+RETURNS gbtreekey2
 AS 'MODULE_PATHNAME'
 LANGUAGE C IMMUTABLE STRICT;
 
-CREATE FUNCTION gbt_bool_same(gbtreekey8, gbtreekey8, internal)
+CREATE FUNCTION gbt_bool_same(gbtreekey2, gbtreekey2, internal)
 RETURNS internal
 AS 'MODULE_PATHNAME'
 LANGUAGE C IMMUTABLE STRICT;
@@ -57,6 +72,6 @@ AS
    FUNCTION    4   gbt_decompress (internal),
    FUNCTION    5   gbt_bool_penalty (internal, internal, internal),
    FUNCTION    6   gbt_bool_picksplit (internal, internal),
-   FUNCTION    7   gbt_bool_same (gbtreekey8, gbtreekey8, internal),
+   FUNCTION    7   gbt_bool_same (gbtreekey2, gbtreekey2, internal),
    FUNCTION    9   gbt_bool_fetch (internal),
-   STORAGE     gbtreekey8;
+   STORAGE     gbtreekey2;