git.postgresql.org Git - postgresql.git/commitdiff (original) (raw)

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

{

gbt_t_bool,

sizeof(bool),

- 4, /* sizeof(gbtreekey4) */

+ 2, /* sizeof(gbtreekey2) */

gbt_boolgt,

gbt_boolge,

gbt_booleq,

\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)

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;

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;