Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e29daa2

Browse files
committed
Merge commit '5971718872b2129511107c1724b73ec0147cd114' into PGPROEE9_6_ALPHA
2 parents 7d05f96 + 5971718 commit e29daa2

File tree

9 files changed

+100
-93
lines changed

9 files changed

+100
-93
lines changed

contrib/rum/rum--1.0.sql

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ AS 'MODULE_PATHNAME', 'tsquery_to_distance_query'
1616
LANGUAGE C IMMUTABLE STRICT;
1717

1818
CREATE CAST (tsquery AS rum_distance_query)
19-
WITH FUNCTION tsquery_to_distance_query(tsquery) AS IMPLICIT;
19+
WITH FUNCTION tsquery_to_distance_query(tsquery) AS IMPLICIT;
2020

2121
CREATE FUNCTION rum_ts_distance(tsvector,tsquery)
2222
RETURNS float4
@@ -40,9 +40,9 @@ CREATE OPERATOR <=> (
4040
);
4141

4242
CREATE OPERATOR <=> (
43-
LEFTARG = tsvector,
44-
RIGHTARG = rum_distance_query,
45-
PROCEDURE = rum_ts_distance
43+
LEFTARG = tsvector,
44+
RIGHTARG = rum_distance_query,
45+
PROCEDURE = rum_ts_distance
4646
);
4747

4848
CREATE FUNCTION rum_extract_tsvector(tsvector,internal,internal,internal,internal)
@@ -93,7 +93,7 @@ AS
9393
FUNCTION 6 rum_tsvector_config(internal),
9494
FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
9595
FUNCTION 8 rum_tsquery_distance(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
96-
FUNCTION 10 rum_ts_join_pos(internal, internal),
96+
FUNCTION 10 rum_ts_join_pos(internal, internal),
9797
STORAGE text;
9898
-- timestamp ops
9999

@@ -103,10 +103,10 @@ AS 'MODULE_PATHNAME'
103103
LANGUAGE C IMMUTABLE STRICT;
104104

105105
CREATE OPERATOR <=> (
106-
PROCEDURE = timestamp_distance,
107-
LEFTARG = timestamp,
108-
RIGHTARG = timestamp,
109-
COMMUTATOR = <=>
106+
PROCEDURE = timestamp_distance,
107+
LEFTARG = timestamp,
108+
RIGHTARG = timestamp,
109+
COMMUTATOR = <=>
110110
);
111111

112112
CREATE FUNCTION timestamp_left_distance(timestamp, timestamp)
@@ -115,10 +115,10 @@ AS 'MODULE_PATHNAME'
115115
LANGUAGE C IMMUTABLE STRICT;
116116

117117
CREATE OPERATOR <=| (
118-
PROCEDURE = timestamp_left_distance,
119-
LEFTARG = timestamp,
120-
RIGHTARG = timestamp,
121-
COMMUTATOR = |=>
118+
PROCEDURE = timestamp_left_distance,
119+
LEFTARG = timestamp,
120+
RIGHTARG = timestamp,
121+
COMMUTATOR = |=>
122122
);
123123

124124
CREATE FUNCTION timestamp_right_distance(timestamp, timestamp)
@@ -127,10 +127,10 @@ AS 'MODULE_PATHNAME'
127127
LANGUAGE C IMMUTABLE STRICT;
128128

129129
CREATE OPERATOR |=> (
130-
PROCEDURE = timestamp_right_distance,
131-
LEFTARG = timestamp,
132-
RIGHTARG = timestamp,
133-
COMMUTATOR = <=|
130+
PROCEDURE = timestamp_right_distance,
131+
LEFTARG = timestamp,
132+
RIGHTARG = timestamp,
133+
COMMUTATOR = <=|
134134
);
135135

136136

@@ -169,23 +169,23 @@ LANGUAGE C STRICT IMMUTABLE;
169169
CREATE OPERATOR CLASS timestamp_ops
170170
DEFAULT FOR TYPE timestamp USING rum
171171
AS
172-
OPERATOR 1 <,
173-
OPERATOR 2 <=,
174-
OPERATOR 3 =,
175-
OPERATOR 4 >=,
176-
OPERATOR 5 >,
177-
--support
178-
FUNCTION 1 timestamp_cmp(timestamp,timestamp),
179-
FUNCTION 2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
180-
FUNCTION 3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
181-
FUNCTION 4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
182-
FUNCTION 5 rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
183-
FUNCTION 6 rum_timestamp_config(internal),
184-
-- support to timestamp disttance in rum_tsvector_timestamp_ops
185-
FUNCTION 9 rum_timestamp_outer_distance(timestamp, timestamp, smallint),
186-
OPERATOR 20 <=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
187-
OPERATOR 21 <=| (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
188-
OPERATOR 22 |=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
172+
OPERATOR 1 <,
173+
OPERATOR 2 <=,
174+
OPERATOR 3 =,
175+
OPERATOR 4 >=,
176+
OPERATOR 5 >,
177+
--support
178+
FUNCTION 1 timestamp_cmp(timestamp,timestamp),
179+
FUNCTION 2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
180+
FUNCTION 3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
181+
FUNCTION 4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
182+
FUNCTION 5 rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
183+
FUNCTION 6 rum_timestamp_config(internal),
184+
-- support to timestamp disttance in rum_tsvector_timestamp_ops
185+
FUNCTION 9 rum_timestamp_outer_distance(timestamp, timestamp, smallint),
186+
OPERATOR 20 <=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
187+
OPERATOR 21 <=| (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
188+
OPERATOR 22 |=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
189189
STORAGE timestamp;
190190

191191
--together
@@ -199,7 +199,7 @@ CREATE OPERATOR CLASS rum_tsvector_timestamp_ops
199199
FOR TYPE tsvector USING rum
200200
AS
201201
OPERATOR 1 @@ (tsvector, tsquery),
202-
--support function
202+
--support function
203203
FUNCTION 1 gin_cmp_tslexeme(text, text),
204204
FUNCTION 2 rum_extract_tsvector(tsvector,internal,internal,internal,internal),
205205
FUNCTION 3 rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
@@ -216,10 +216,10 @@ AS 'MODULE_PATHNAME', 'timestamp_distance'
216216
LANGUAGE C IMMUTABLE STRICT;
217217

218218
CREATE OPERATOR <=> (
219-
PROCEDURE = timestamptz_distance,
220-
LEFTARG = timestamptz,
221-
RIGHTARG = timestamptz,
222-
COMMUTATOR = <=>
219+
PROCEDURE = timestamptz_distance,
220+
LEFTARG = timestamptz,
221+
RIGHTARG = timestamptz,
222+
COMMUTATOR = <=>
223223
);
224224

225225
CREATE FUNCTION timestamptz_left_distance(timestamptz, timestamptz)
@@ -228,10 +228,10 @@ AS 'MODULE_PATHNAME', 'timestamp_left_distance'
228228
LANGUAGE C IMMUTABLE STRICT;
229229

230230
CREATE OPERATOR <=| (
231-
PROCEDURE = timestamptz_left_distance,
232-
LEFTARG = timestamptz,
233-
RIGHTARG = timestamptz,
234-
COMMUTATOR = |=>
231+
PROCEDURE = timestamptz_left_distance,
232+
LEFTARG = timestamptz,
233+
RIGHTARG = timestamptz,
234+
COMMUTATOR = |=>
235235
);
236236

237237
CREATE FUNCTION timestamptz_right_distance(timestamptz, timestamptz)
@@ -240,33 +240,33 @@ AS 'MODULE_PATHNAME', 'timestamp_right_distance'
240240
LANGUAGE C IMMUTABLE STRICT;
241241

242242
CREATE OPERATOR |=> (
243-
PROCEDURE = timestamptz_right_distance,
244-
LEFTARG = timestamptz,
245-
RIGHTARG = timestamptz,
246-
COMMUTATOR = <=|
243+
PROCEDURE = timestamptz_right_distance,
244+
LEFTARG = timestamptz,
245+
RIGHTARG = timestamptz,
246+
COMMUTATOR = <=|
247247
);
248248

249249

250250
CREATE OPERATOR CLASS timestamptz_ops
251251
DEFAULT FOR TYPE timestamptz USING rum
252252
AS
253-
OPERATOR 1 <,
254-
OPERATOR 2 <=,
255-
OPERATOR 3 =,
256-
OPERATOR 4 >=,
257-
OPERATOR 5 >,
258-
--support
259-
FUNCTION 1 timestamptz_cmp(timestamptz,timestamptz),
260-
FUNCTION 2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
261-
FUNCTION 3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
262-
FUNCTION 4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
263-
FUNCTION 5 rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
264-
FUNCTION 6 rum_timestamp_config(internal),
265-
-- support to timestamptz disttance in rum_tsvector_timestamptz_ops
266-
FUNCTION 9 rum_timestamp_outer_distance(timestamp, timestamp, smallint),
267-
OPERATOR 20 <=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
268-
OPERATOR 21 <=| (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
269-
OPERATOR 22 |=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
253+
OPERATOR 1 <,
254+
OPERATOR 2 <=,
255+
OPERATOR 3 =,
256+
OPERATOR 4 >=,
257+
OPERATOR 5 >,
258+
--support
259+
FUNCTION 1 timestamptz_cmp(timestamptz,timestamptz),
260+
FUNCTION 2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
261+
FUNCTION 3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
262+
FUNCTION 4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
263+
FUNCTION 5 rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
264+
FUNCTION 6 rum_timestamp_config(internal),
265+
-- support to timestamptz disttance in rum_tsvector_timestamptz_ops
266+
FUNCTION 9 rum_timestamp_outer_distance(timestamp, timestamp, smallint),
267+
OPERATOR 20 <=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
268+
OPERATOR 21 <=| (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
269+
OPERATOR 22 |=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
270270
STORAGE timestamptz;
271271

272272
--together
@@ -275,7 +275,7 @@ CREATE OPERATOR CLASS rum_tsvector_timestamptz_ops
275275
FOR TYPE tsvector USING rum
276276
AS
277277
OPERATOR 1 @@ (tsvector, tsquery),
278-
--support function
278+
--support function
279279
FUNCTION 1 gin_cmp_tslexeme(text, text),
280280
FUNCTION 2 rum_extract_tsvector(tsvector,internal,internal,internal,internal),
281281
FUNCTION 3 rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),

contrib/rum/rum.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,10 @@ typedef signed char RumNullCategory;
211211
#define RumCategoryOffset(itup,rumstate) \
212212
(IndexInfoFindDataOffset((itup)->t_info) + \
213213
((rumstate)->oneCol ? 0 : sizeof(int16)))
214-
/*#define RumGetNullCategory(itup,rumstate) \
215-
(*((RumNullCategory *) ((char*)(itup) + RumCategoryOffset(itup,rumstate))))
216-
#define RumSetNullCategory(itup,rumstate,c) \
217-
(*((RumNullCategory *) ((char*)(itup) + RumCategoryOffset(itup,rumstate))) = (c))*/
218214

219-
#define RumGetNullCategory(itup,rumstate) \
215+
#define RumGetNullCategory(itup) \
220216
(*((RumNullCategory *) ((char*)(itup) + IndexTupleSize(itup) - sizeof(RumNullCategory))))
221-
#define RumSetNullCategory(itup,rumstate,c) \
217+
#define RumSetNullCategory(itup,c) \
222218
(*((RumNullCategory *) ((char*)(itup) + IndexTupleSize(itup) - sizeof(RumNullCategory))) = (c))
223219

224220
/*

contrib/rum/rum_ts_utils.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ PG_FUNCTION_INFO_V1(rum_ts_join_pos);
4040
PG_FUNCTION_INFO_V1(tsquery_to_distance_query);
4141

4242
static int count_pos(char *ptr, int len);
43-
static char *decompress_pos(char *ptr, uint16 *pos);
43+
static char *decompress_pos(char *ptr, WordEntryPos *pos);
4444

4545
typedef struct
4646
{
@@ -317,7 +317,7 @@ rum_tsquery_timestamp_consistent(PG_FUNCTION_ARGS)
317317
#define LOWERMASK 0x1F
318318

319319
static int
320-
compress_pos(char *target, uint16 *pos, int npos)
320+
compress_pos(char *target, WordEntryPos *pos, int npos)
321321
{
322322
int i;
323323
uint16 prev = 0,
@@ -350,7 +350,7 @@ compress_pos(char *target, uint16 *pos, int npos)
350350
}
351351

352352
static char *
353-
decompress_pos(char *ptr, uint16 *pos)
353+
decompress_pos(char *ptr, WordEntryPos *pos)
354354
{
355355
int i;
356356
uint8 v;
@@ -1319,23 +1319,24 @@ rum_tsvector_config(PG_FUNCTION_ARGS)
13191319
Datum
13201320
rum_ts_join_pos(PG_FUNCTION_ARGS)
13211321
{
1322-
Datum addInfo1 = PG_GETARG_DATUM(0);
1323-
Datum addInfo2 = PG_GETARG_DATUM(1);
1324-
char *in1 = VARDATA_ANY(addInfo1),
1325-
*in2 = VARDATA_ANY(addInfo2);
1326-
bytea *result;
1327-
int count1 = count_pos(in1, VARSIZE_ANY_EXHDR(addInfo1)),
1328-
count2 = count_pos(in2, VARSIZE_ANY_EXHDR(addInfo2)),
1329-
countRes = 0,
1330-
i1 = 0, i2 = 0, size;
1331-
uint16 pos1, pos2, *pos;
1332-
1333-
result = palloc(VARHDRSZ + sizeof(uint16) * (count1 + count2));
1334-
pos = palloc(sizeof(uint16) * (count1 + count2));
1322+
Datum addInfo1 = PG_GETARG_DATUM(0);
1323+
Datum addInfo2 = PG_GETARG_DATUM(1);
1324+
char *in1 = VARDATA_ANY(addInfo1),
1325+
*in2 = VARDATA_ANY(addInfo2);
1326+
bytea *result;
1327+
int count1 = count_pos(in1, VARSIZE_ANY_EXHDR(addInfo1)),
1328+
count2 = count_pos(in2, VARSIZE_ANY_EXHDR(addInfo2)),
1329+
countRes = 0,
1330+
i1 = 0, i2 = 0, size;
1331+
WordEntryPos pos1 = 0,
1332+
pos2 = 0,
1333+
*pos;
1334+
1335+
result = palloc(VARHDRSZ + sizeof(WordEntryPos) * (count1 + count2));
1336+
pos = palloc(sizeof(WordEntryPos) * (count1 + count2));
13351337

13361338
Assert(count1 > 0 && count2 > 0);
13371339

1338-
13391340
in1 = decompress_pos(in1, &pos1);
13401341
in2 = decompress_pos(in2, &pos2);
13411342

contrib/rum/rumentrypage.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ static IndexTuple
6868
RumFormInteriorTuple(IndexTuple itup, Page page, BlockNumber childblk)
6969
{
7070
IndexTuple nitup;
71+
RumNullCategory category;
7172

7273
if (RumPageIsLeaf(page) && !RumIsPostingTree(itup))
7374
{
@@ -91,6 +92,14 @@ RumFormInteriorTuple(IndexTuple itup, Page page, BlockNumber childblk)
9192
/* Now insert the correct downlink */
9293
RumSetDownlink(nitup, childblk);
9394

95+
category = RumGetNullCategory(itup);
96+
if (category == RUM_CAT_NULL_KEY || category == RUM_CAT_EMPTY_ITEM ||
97+
category == RUM_CAT_NULL_ITEM)
98+
{
99+
nitup->t_info |= INDEX_NULL_MASK;
100+
RumSetNullCategory(nitup, category);
101+
}
102+
94103
return nitup;
95104
}
96105

contrib/rum/rumfast.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ RumFastFormTuple(RumState * rumstate,
421421
if (category != RUM_CAT_NORM_KEY)
422422
{
423423
Assert(IndexTupleHasNulls(itup));
424-
RumSetNullCategory(itup, rumstate, category);
424+
RumSetNullCategory(itup, category);
425425
}
426426

427427
return itup;

contrib/rum/ruminsert.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ RumFormTuple(RumState * rumstate,
227227
if (category != RUM_CAT_NORM_KEY)
228228
{
229229
Assert(IndexTupleHasNulls(itup));
230-
RumSetNullCategory(itup, rumstate, category);
230+
RumSetNullCategory(itup, category);
231231
}
232232

233233
return itup;

contrib/rum/rumutil.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ rumtuple_get_key(RumState * rumstate, IndexTuple tuple,
419419
}
420420

421421
if (isnull)
422-
*category = RumGetNullCategory(tuple, rumstate);
422+
*category = RumGetNullCategory(tuple);
423423
else
424424
*category = RUM_CAT_NORM_KEY;
425425

contrib/rum/rumvacuum.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ RumFormTuple(RumState * rumstate,
203203
if (category != RUM_CAT_NORM_KEY)
204204
{
205205
Assert(IndexTupleHasNulls(itup));
206-
RumSetNullCategory(itup, rumstate, category);
206+
RumSetNullCategory(itup, category);
207207
}
208208
return itup;
209209
}

contrib/rum/rumvalidate.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ rumvalidate(Oid opclassoid)
160160
opcintype, opcintype, INT2OID);
161161
break;
162162
case RUM_ADDINFO_JOIN:
163-
ok = true; /* XXX */
163+
ok = check_amproc_signature(procform->amproc, BYTEAOID, false,
164+
2, 2, opckeytype, opckeytype);
164165
break;
165166
default:
166167
ereport(INFO,

0 commit comments

Comments
 (0)