aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vondra <tomas.vondra@postgresql.org>2021-11-08 01:14:55 +0100
committerTomas Vondra <tomas.vondra@postgresql.org>2021-11-08 01:14:55 +0100
commite2fbb883720aa222f61eb9f3affad1c63bac7cbb (patch)
treea77979a6c39d24fa71ee6f3eda38a4c307f583c6
parentccf289745d3e50360653181dce6a277a1fc79730 (diff)
downloadpostgresql-e2fbb883720aa222f61eb9f3affad1c63bac7cbb.tar.gz
postgresql-e2fbb883720aa222f61eb9f3affad1c63bac7cbb.zip
Fix gist_bool_ops to use gbtreekey2
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
-rw-r--r--contrib/btree_gist/btree_bool.c2
-rw-r--r--contrib/btree_gist/btree_gist--1.6--1.7.sql23
2 files changed, 20 insertions, 5 deletions
diff --git a/contrib/btree_gist/btree_bool.c b/contrib/btree_gist/btree_bool.c
index 25ce1e2b773..1be246ea5e1 100644
--- a/contrib/btree_gist/btree_bool.c
+++ b/contrib/btree_gist/btree_bool.c
@@ -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,
diff --git a/contrib/btree_gist/btree_gist--1.6--1.7.sql b/contrib/btree_gist/btree_gist--1.6--1.7.sql
index 0e683569823..1085216501e 100644
--- a/contrib/btree_gist/btree_gist--1.6--1.7.sql
+++ b/contrib/btree_gist/btree_gist--1.6--1.7.sql
@@ -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;