Skip to content

Commit e09b483

Browse files
committed
Add index-only scan support to btree_gist.
inet, cidr, and timetz indexes still cannot support index-only scans, because they don't store the original unmodified value in the index, but a derived approximate value.
1 parent 735cd61 commit e09b483

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+614
-51
lines changed

contrib/btree_gist/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ OBJS = btree_gist.o btree_utils_num.o btree_utils_var.o btree_int2.o \
99
btree_numeric.o $(WIN32RES)
1010

1111
EXTENSION = btree_gist
12-
DATA = btree_gist--1.0.sql btree_gist--unpackaged--1.0.sql
12+
DATA = btree_gist--1.1.sql btree_gist--unpackaged--1.0.sql \
13+
btree_gist--1.0--1.1.sql
1314
PGFILEDESC = "btree_gist - B-tree equivalent GIST operator classes"
1415

1516
REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \

contrib/btree_gist/btree_cash.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typedef struct
1717
** Cash ops
1818
*/
1919
PG_FUNCTION_INFO_V1(gbt_cash_compress);
20+
PG_FUNCTION_INFO_V1(gbt_cash_fetch);
2021
PG_FUNCTION_INFO_V1(gbt_cash_union);
2122
PG_FUNCTION_INFO_V1(gbt_cash_picksplit);
2223
PG_FUNCTION_INFO_V1(gbt_cash_consistent);
@@ -123,6 +124,13 @@ gbt_cash_compress(PG_FUNCTION_ARGS)
123124
PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
124125
}
125126

127+
Datum
128+
gbt_cash_fetch(PG_FUNCTION_ARGS)
129+
{
130+
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
131+
132+
PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
133+
}
126134

127135
Datum
128136
gbt_cash_consistent(PG_FUNCTION_ARGS)

contrib/btree_gist/btree_date.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typedef struct
1717
** date ops
1818
*/
1919
PG_FUNCTION_INFO_V1(gbt_date_compress);
20+
PG_FUNCTION_INFO_V1(gbt_date_fetch);
2021
PG_FUNCTION_INFO_V1(gbt_date_union);
2122
PG_FUNCTION_INFO_V1(gbt_date_picksplit);
2223
PG_FUNCTION_INFO_V1(gbt_date_consistent);
@@ -134,7 +135,13 @@ gbt_date_compress(PG_FUNCTION_ARGS)
134135
PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
135136
}
136137

138+
Datum
139+
gbt_date_fetch(PG_FUNCTION_ARGS)
140+
{
141+
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
137142

143+
PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
144+
}
138145

139146
Datum
140147
gbt_date_consistent(PG_FUNCTION_ARGS)

contrib/btree_gist/btree_float4.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ typedef struct float4key
1616
** float4 ops
1717
*/
1818
PG_FUNCTION_INFO_V1(gbt_float4_compress);
19+
PG_FUNCTION_INFO_V1(gbt_float4_fetch);
1920
PG_FUNCTION_INFO_V1(gbt_float4_union);
2021
PG_FUNCTION_INFO_V1(gbt_float4_picksplit);
2122
PG_FUNCTION_INFO_V1(gbt_float4_consistent);
@@ -116,6 +117,13 @@ gbt_float4_compress(PG_FUNCTION_ARGS)
116117
PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
117118
}
118119

120+
Datum
121+
gbt_float4_fetch(PG_FUNCTION_ARGS)
122+
{
123+
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
124+
125+
PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
126+
}
119127

120128
Datum
121129
gbt_float4_consistent(PG_FUNCTION_ARGS)

contrib/btree_gist/btree_float8.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ typedef struct float8key
1616
** float8 ops
1717
*/
1818
PG_FUNCTION_INFO_V1(gbt_float8_compress);
19+
PG_FUNCTION_INFO_V1(gbt_float8_fetch);
1920
PG_FUNCTION_INFO_V1(gbt_float8_union);
2021
PG_FUNCTION_INFO_V1(gbt_float8_picksplit);
2122
PG_FUNCTION_INFO_V1(gbt_float8_consistent);
@@ -123,6 +124,13 @@ gbt_float8_compress(PG_FUNCTION_ARGS)
123124
PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
124125
}
125126

127+
Datum
128+
gbt_float8_fetch(PG_FUNCTION_ARGS)
129+
{
130+
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
131+
132+
PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
133+
}
126134

127135
Datum
128136
gbt_float8_consistent(PG_FUNCTION_ARGS)
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/* contrib/btree_gist/btree_gist--1.0--1.1.sql */
2+
3+
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
4+
\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.1'" to load this file. \quit
5+
6+
-- Index-only scan support new in 9.5.
7+
CREATE FUNCTION gbt_oid_fetch(internal)
8+
RETURNS internal
9+
AS 'MODULE_PATHNAME'
10+
LANGUAGE C IMMUTABLE STRICT;
11+
12+
CREATE FUNCTION gbt_int2_fetch(internal)
13+
RETURNS internal
14+
AS 'MODULE_PATHNAME'
15+
LANGUAGE C IMMUTABLE STRICT;
16+
17+
CREATE FUNCTION gbt_int4_fetch(internal)
18+
RETURNS internal
19+
AS 'MODULE_PATHNAME'
20+
LANGUAGE C IMMUTABLE STRICT;
21+
22+
CREATE FUNCTION gbt_int8_fetch(internal)
23+
RETURNS internal
24+
AS 'MODULE_PATHNAME'
25+
LANGUAGE C IMMUTABLE STRICT;
26+
27+
CREATE FUNCTION gbt_float4_fetch(internal)
28+
RETURNS internal
29+
AS 'MODULE_PATHNAME'
30+
LANGUAGE C IMMUTABLE STRICT;
31+
32+
CREATE FUNCTION gbt_float8_fetch(internal)
33+
RETURNS internal
34+
AS 'MODULE_PATHNAME'
35+
LANGUAGE C IMMUTABLE STRICT;
36+
37+
CREATE FUNCTION gbt_ts_fetch(internal)
38+
RETURNS internal
39+
AS 'MODULE_PATHNAME'
40+
LANGUAGE C IMMUTABLE STRICT;
41+
42+
CREATE FUNCTION gbt_time_fetch(internal)
43+
RETURNS internal
44+
AS 'MODULE_PATHNAME'
45+
LANGUAGE C IMMUTABLE STRICT;
46+
47+
CREATE FUNCTION gbt_date_fetch(internal)
48+
RETURNS internal
49+
AS 'MODULE_PATHNAME'
50+
LANGUAGE C IMMUTABLE STRICT;
51+
52+
CREATE FUNCTION gbt_intv_fetch(internal)
53+
RETURNS internal
54+
AS 'MODULE_PATHNAME'
55+
LANGUAGE C IMMUTABLE STRICT;
56+
57+
CREATE FUNCTION gbt_cash_fetch(internal)
58+
RETURNS internal
59+
AS 'MODULE_PATHNAME'
60+
LANGUAGE C IMMUTABLE STRICT;
61+
62+
CREATE FUNCTION gbt_macad_fetch(internal)
63+
RETURNS internal
64+
AS 'MODULE_PATHNAME'
65+
LANGUAGE C IMMUTABLE STRICT;
66+
67+
CREATE FUNCTION gbt_var_fetch(internal)
68+
RETURNS internal
69+
AS 'MODULE_PATHNAME'
70+
LANGUAGE C IMMUTABLE STRICT;
71+
72+
ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD
73+
FUNCTION 9 (oid, oid) gbt_oid_fetch (internal) ;
74+
75+
ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD
76+
FUNCTION 9 (int2, int2) gbt_int2_fetch (internal) ;
77+
78+
ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD
79+
FUNCTION 9 (int4, int4) gbt_int4_fetch (internal) ;
80+
81+
ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD
82+
FUNCTION 9 (int8, int8) gbt_int8_fetch (internal) ;
83+
84+
ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD
85+
FUNCTION 9 (float4, float4) gbt_float4_fetch (internal) ;
86+
87+
ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD
88+
FUNCTION 9 (float8, float8) gbt_float8_fetch (internal) ;
89+
90+
ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD
91+
FUNCTION 9 (timestamp, timestamp) gbt_ts_fetch (internal) ;
92+
93+
ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD
94+
FUNCTION 9 (timestamptz, timestamptz) gbt_ts_fetch (internal) ;
95+
96+
ALTER OPERATOR FAMILY gist_time_ops USING gist ADD
97+
FUNCTION 9 (time, time) gbt_time_fetch (internal) ;
98+
99+
ALTER OPERATOR FAMILY gist_date_ops USING gist ADD
100+
FUNCTION 9 (date, date) gbt_date_fetch (internal) ;
101+
102+
ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD
103+
FUNCTION 9 (interval, interval) gbt_intv_fetch (internal) ;
104+
105+
ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD
106+
FUNCTION 9 (money, money) gbt_cash_fetch (internal) ;
107+
108+
ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD
109+
FUNCTION 9 (macaddr, macaddr) gbt_macad_fetch (internal) ;
110+
111+
ALTER OPERATOR FAMILY gist_text_ops USING gist ADD
112+
FUNCTION 9 (text, text) gbt_var_fetch (internal) ;
113+
114+
ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD
115+
FUNCTION 9 (bpchar, bpchar) gbt_var_fetch (internal) ;
116+
117+
ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD
118+
FUNCTION 9 (bytea, bytea) gbt_var_fetch (internal) ;
119+
120+
ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD
121+
FUNCTION 9 (numeric, numeric) gbt_var_fetch (internal) ;
122+
123+
ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD
124+
FUNCTION 9 (bit, bit) gbt_var_fetch (internal) ;
125+
126+
ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD
127+
FUNCTION 9 (varbit, varbit) gbt_var_fetch (internal) ;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy