@@ -3,11 +3,17 @@ RETURNS index_am_handler
33AS ' MODULE_PATHNAME'
44LANGUAGE C;
55
6- -- Access method
6+ /*
7+ * RUM access method
8+ */
9+
710CREATE ACCESS METHOD rum TYPE INDEX HANDLER rumhandler;
811
9- -- tsvector opclasses
12+ /*
13+ * RUM built-in types, operators and functions
14+ */
1015
16+ -- Type used in distance calculations with normalization argument
1117CREATE TYPE rum_distance_query AS (query tsquery, method int );
1218
1319CREATE FUNCTION tsquery_to_distance_query (tsquery)
@@ -45,22 +51,52 @@ CREATE OPERATOR <=> (
4551 PROCEDURE = rum_ts_distance
4652);
4753
48- CREATE FUNCTION rum_extract_tsvector (tsvector,internal,internal,internal,internal )
49- RETURNS internal
54+ CREATE FUNCTION rum_timestamp_distance ( timestamp , timestamp )
55+ RETURNS float8
5056AS ' MODULE_PATHNAME'
5157LANGUAGE C IMMUTABLE STRICT;
5258
53- CREATE FUNCTION rum_extract_tsvector_hash (tsvector,internal,internal,internal,internal)
54- RETURNS internal
59+ CREATE OPERATOR <=> (
60+ PROCEDURE = rum_timestamp_distance,
61+ LEFTARG = timestamp ,
62+ RIGHTARG = timestamp ,
63+ COMMUTATOR = <=>
64+ );
65+
66+ CREATE FUNCTION rum_timestamp_left_distance (timestamp , timestamp )
67+ RETURNS float8
5568AS ' MODULE_PATHNAME'
5669LANGUAGE C IMMUTABLE STRICT;
5770
58- CREATE FUNCTION rum_extract_tsquery (tsquery,internal,smallint ,internal,internal,internal,internal)
71+ CREATE OPERATOR <= | (
72+ PROCEDURE = rum_timestamp_left_distance,
73+ LEFTARG = timestamp ,
74+ RIGHTARG = timestamp ,
75+ COMMUTATOR = |=>
76+ );
77+
78+ CREATE FUNCTION rum_timestamp_right_distance (timestamp , timestamp )
79+ RETURNS float8
80+ AS ' MODULE_PATHNAME'
81+ LANGUAGE C IMMUTABLE STRICT;
82+
83+ CREATE OPERATOR |=> (
84+ PROCEDURE = rum_timestamp_right_distance,
85+ LEFTARG = timestamp ,
86+ RIGHTARG = timestamp ,
87+ COMMUTATOR = <= |
88+ );
89+
90+ /*
91+ * rum_tsvector_ops operator class
92+ */
93+
94+ CREATE FUNCTION rum_extract_tsvector (tsvector,internal,internal,internal,internal)
5995RETURNS internal
6096AS ' MODULE_PATHNAME'
6197LANGUAGE C IMMUTABLE STRICT;
6298
63- CREATE FUNCTION rum_extract_tsquery_hash (tsquery,internal,smallint ,internal,internal,internal,internal)
99+ CREATE FUNCTION rum_extract_tsquery (tsquery,internal,smallint ,internal,internal,internal,internal)
64100RETURNS internal
65101AS ' MODULE_PATHNAME'
66102LANGUAGE C IMMUTABLE STRICT;
@@ -85,13 +121,14 @@ RETURNS float8
85121AS ' MODULE_PATHNAME'
86122LANGUAGE C IMMUTABLE STRICT;
87123
88- CREATE FUNCTION rum_ts_join_pos (internal, internal) -- to prevent calling from SQL
124+ -- To prevent calling from SQL
125+ CREATE FUNCTION rum_ts_join_pos (internal, internal)
89126RETURNS bytea
90127AS ' MODULE_PATHNAME'
91128LANGUAGE C IMMUTABLE STRICT;
92129
93130CREATE OPERATOR CLASS rum_tsvector_ops
94- FOR TYPE tsvector USING rum
131+ DEFAULT FOR TYPE tsvector USING rum
95132AS
96133 OPERATOR 1 @@ (tsvector, tsquery),
97134 OPERATOR 2 <=> (tsvector, tsquery) FOR ORDER BY pg_catalog .float_ops ,
106143 FUNCTION 10 rum_ts_join_pos(internal, internal),
107144 STORAGE text ;
108145
146+ /*
147+ * rum_tsvector_hash_ops operator class.
148+ *
149+ * Stores hash of entries as keys in index.
150+ */
151+
152+ CREATE FUNCTION rum_extract_tsvector_hash (tsvector,internal,internal,internal,internal)
153+ RETURNS internal
154+ AS ' MODULE_PATHNAME'
155+ LANGUAGE C IMMUTABLE STRICT;
156+
157+ CREATE FUNCTION rum_extract_tsquery_hash (tsquery,internal,smallint ,internal,internal,internal,internal)
158+ RETURNS internal
159+ AS ' MODULE_PATHNAME'
160+ LANGUAGE C IMMUTABLE STRICT;
161+
109162CREATE OPERATOR CLASS rum_tsvector_hash_ops
110163FOR TYPE tsvector USING rum
111164AS
120173 FUNCTION 8 rum_tsquery_distance(internal,smallint ,tsvector,int ,internal,internal,internal,internal,internal),
121174 FUNCTION 10 rum_ts_join_pos(internal, internal),
122175 STORAGE integer ;
123- -- timestamp ops
124-
125- CREATE FUNCTION timestamp_distance (timestamp , timestamp )
126- RETURNS float8
127- AS ' MODULE_PATHNAME'
128- LANGUAGE C IMMUTABLE STRICT;
129-
130- CREATE OPERATOR <=> (
131- PROCEDURE = timestamp_distance,
132- LEFTARG = timestamp ,
133- RIGHTARG = timestamp ,
134- COMMUTATOR = <=>
135- );
136-
137- CREATE FUNCTION timestamp_left_distance (timestamp , timestamp )
138- RETURNS float8
139- AS ' MODULE_PATHNAME'
140- LANGUAGE C IMMUTABLE STRICT;
141-
142- CREATE OPERATOR <= | (
143- PROCEDURE = timestamp_left_distance,
144- LEFTARG = timestamp ,
145- RIGHTARG = timestamp ,
146- COMMUTATOR = |=>
147- );
148-
149- CREATE FUNCTION timestamp_right_distance (timestamp , timestamp )
150- RETURNS float8
151- AS ' MODULE_PATHNAME'
152- LANGUAGE C IMMUTABLE STRICT;
153-
154- CREATE OPERATOR |=> (
155- PROCEDURE = timestamp_right_distance,
156- LEFTARG = timestamp ,
157- RIGHTARG = timestamp ,
158- COMMUTATOR = <= |
159- );
160176
177+ /*
178+ * rum_timestamp_ops operator class
179+ */
161180
162181-- timestamp operator class
163182
@@ -191,7 +210,7 @@ RETURNS float8
191210AS ' MODULE_PATHNAME'
192211LANGUAGE C STRICT IMMUTABLE;
193212
194- CREATE OPERATOR CLASS timestamp_ops
213+ CREATE OPERATOR CLASS rum_timestamp_ops
195214DEFAULT FOR TYPE timestamp USING rum
196215AS
197216 OPERATOR 1 < ,
213232 OPERATOR 22 |=> (timestamp ,timestamp ) FOR ORDER BY pg_catalog .float_ops ,
214233STORAGE timestamp ;
215234
216- -- together
235+ /*
236+ * rum_tsvector_timestamp_ops operator class.
237+ *
238+ * Stores timestamp with tsvector.
239+ */
217240
218241CREATE FUNCTION rum_tsquery_timestamp_consistent (internal, smallint , tsvector, integer , internal, internal, internal, internal)
219242RETURNS bool
233256 FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint ,tsvector,int ,internal,internal,internal,internal),
234257 STORAGE text ;
235258
259+ /*
260+ * rum_tsvector_hash_timestamp_ops operator class
261+ */
262+
236263CREATE OPERATOR CLASS rum_tsvector_hash_timestamp_ops
237264FOR TYPE tsvector USING rum
238265AS
245272 FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint ,tsvector,int ,internal,internal,internal,internal),
246273 STORAGE integer ;
247274
248- -- timestamptz ops
275+ /*
276+ * rum_timestamptz_ops operator class
277+ */
249278
250- CREATE FUNCTION timestamptz_distance (timestamptz , timestamptz )
279+ CREATE FUNCTION rum_timestamptz_distance (timestamptz , timestamptz )
251280RETURNS float8
252- AS ' MODULE_PATHNAME' , ' timestamp_distance '
281+ AS ' MODULE_PATHNAME' , ' rum_timestamp_distance '
253282LANGUAGE C IMMUTABLE STRICT;
254283
255284CREATE OPERATOR <=> (
256- PROCEDURE = timestamptz_distance ,
285+ PROCEDURE = rum_timestamptz_distance ,
257286 LEFTARG = timestamptz ,
258287 RIGHTARG = timestamptz ,
259288 COMMUTATOR = <=>
260289);
261290
262- CREATE FUNCTION timestamptz_left_distance (timestamptz , timestamptz )
291+ CREATE FUNCTION rum_timestamptz_left_distance (timestamptz , timestamptz )
263292RETURNS float8
264- AS ' MODULE_PATHNAME' , ' timestamp_left_distance '
293+ AS ' MODULE_PATHNAME' , ' rum_timestamp_left_distance '
265294LANGUAGE C IMMUTABLE STRICT;
266295
267296CREATE OPERATOR <= | (
268- PROCEDURE = timestamptz_left_distance ,
297+ PROCEDURE = rum_timestamptz_left_distance ,
269298 LEFTARG = timestamptz ,
270299 RIGHTARG = timestamptz ,
271300 COMMUTATOR = |=>
272301);
273302
274- CREATE FUNCTION timestamptz_right_distance (timestamptz , timestamptz )
303+ CREATE FUNCTION rum_timestamptz_right_distance (timestamptz , timestamptz )
275304RETURNS float8
276- AS ' MODULE_PATHNAME' , ' timestamp_right_distance '
305+ AS ' MODULE_PATHNAME' , ' rum_timestamp_right_distance '
277306LANGUAGE C IMMUTABLE STRICT;
278307
279308CREATE OPERATOR |=> (
280- PROCEDURE = timestamptz_right_distance ,
309+ PROCEDURE = rum_timestamptz_right_distance ,
281310 LEFTARG = timestamptz ,
282311 RIGHTARG = timestamptz ,
283312 COMMUTATOR = <= |
284313);
285314
286-
287- CREATE OPERATOR CLASS timestamptz_ops
315+ CREATE OPERATOR CLASS rum_timestamptz_ops
288316DEFAULT FOR TYPE timestamptz USING rum
289317AS
290318 OPERATOR 1 < ,
299327 FUNCTION 4 rum_timestamp_consistent(internal,smallint ,timestamp ,int ,internal,internal,internal,internal),
300328 FUNCTION 5 rum_timestamp_compare_prefix(timestamp ,timestamp ,smallint ,internal),
301329 FUNCTION 6 rum_timestamp_config(internal),
302- -- support to timestamptz disttance in rum_tsvector_timestamptz_ops
330+ -- support to timestamptz distance in rum_tsvector_timestamptz_ops
303331 FUNCTION 9 rum_timestamp_outer_distance(timestamp , timestamp , smallint ),
304332 OPERATOR 20 <=> (timestamptz ,timestamptz ) FOR ORDER BY pg_catalog .float_ops ,
305333 OPERATOR 21 <= | (timestamptz ,timestamptz ) FOR ORDER BY pg_catalog .float_ops ,
306334 OPERATOR 22 |=> (timestamptz ,timestamptz ) FOR ORDER BY pg_catalog .float_ops ,
307335STORAGE timestamptz ;
308336
309- -- together
337+ /*
338+ * rum_tsvector_timestamptz_ops operator class.
339+ *
340+ * Stores tsvector with timestamptz.
341+ */
310342
311343CREATE OPERATOR CLASS rum_tsvector_timestamptz_ops
312344FOR TYPE tsvector USING rum
321353 FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint ,tsvector,int ,internal,internal,internal,internal),
322354 STORAGE text ;
323355
356+ /*
357+ * rum_tsvector_hash_timestamptz_ops operator class
358+ */
359+
324360CREATE OPERATOR CLASS rum_tsvector_hash_timestamptz_ops
325361FOR TYPE tsvector USING rum
326362AS
333369 FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint ,tsvector,int ,internal,internal,internal,internal),
334370 STORAGE integer ;
335371
336- -- inversed
372+ /*
373+ * rum_tsquery_ops operator class.
374+ *
375+ * Used for inversed text search.
376+ */
337377
338378CREATE FUNCTION ruminv_extract_tsquery (tsquery,internal,internal,internal,internal)
339379RETURNS internal
365405 FUNCTION 4 ruminv_tsvector_consistent(internal,smallint ,tsvector,int ,internal,internal,internal,internal),
366406 FUNCTION 6 ruminv_tsquery_config(internal),
367407 STORAGE text ;
368-
0 commit comments