Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

+2-1
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

+8
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

+7
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

+8
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

+8
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)
+127
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)