1CREATE OR REPLACE FUNCTION rumhandler(internal)
2RETURNS index_am_handler
3AS 'MODULE_PATHNAME'
4LANGUAGE C;
5
6/*
7 * RUM access method
8 */
9
10CREATE ACCESS METHOD rum TYPE INDEX HANDLER rumhandler;
11
12/*
13 * RUM built-in types, operators and functions
14 */
15
16-- Type used in distance calculations with normalization argument
17CREATE TYPE rum_distance_query AS (query tsquery, method int);
18
19CREATE FUNCTION tsquery_to_distance_query(tsquery)
20RETURNS rum_distance_query
21AS 'MODULE_PATHNAME', 'tsquery_to_distance_query'
22LANGUAGE C IMMUTABLE STRICT;
23
24CREATE CAST (tsquery AS rum_distance_query)
25        WITH FUNCTION tsquery_to_distance_query(tsquery) AS IMPLICIT;
26
27CREATE FUNCTION rum_ts_distance(tsvector,tsquery)
28RETURNS float4
29AS 'MODULE_PATHNAME', 'rum_ts_distance_tt'
30LANGUAGE C IMMUTABLE STRICT;
31
32CREATE FUNCTION rum_ts_distance(tsvector,tsquery,int)
33RETURNS float4
34AS 'MODULE_PATHNAME', 'rum_ts_distance_ttf'
35LANGUAGE C IMMUTABLE STRICT;
36
37CREATE FUNCTION rum_ts_distance(tsvector,rum_distance_query)
38RETURNS float4
39AS 'MODULE_PATHNAME', 'rum_ts_distance_td'
40LANGUAGE C IMMUTABLE STRICT;
41
42CREATE OPERATOR <=> (
43        LEFTARG = tsvector,
44        RIGHTARG = tsquery,
45        PROCEDURE = rum_ts_distance
46);
47
48CREATE OPERATOR <=> (
49        LEFTARG = tsvector,
50        RIGHTARG = rum_distance_query,
51        PROCEDURE = rum_ts_distance
52);
53
54CREATE FUNCTION rum_timestamp_distance(timestamp, timestamp)
55RETURNS float8
56AS 'MODULE_PATHNAME'
57LANGUAGE C IMMUTABLE STRICT;
58
59CREATE OPERATOR <=> (
60        PROCEDURE = rum_timestamp_distance,
61        LEFTARG = timestamp,
62        RIGHTARG = timestamp,
63        COMMUTATOR = <=>
64);
65
66CREATE FUNCTION rum_timestamp_left_distance(timestamp, timestamp)
67RETURNS float8
68AS 'MODULE_PATHNAME'
69LANGUAGE C IMMUTABLE STRICT;
70
71CREATE OPERATOR <=| (
72        PROCEDURE = rum_timestamp_left_distance,
73        LEFTARG = timestamp,
74        RIGHTARG = timestamp,
75        COMMUTATOR = |=>
76);
77
78CREATE FUNCTION rum_timestamp_right_distance(timestamp, timestamp)
79RETURNS float8
80AS 'MODULE_PATHNAME'
81LANGUAGE C IMMUTABLE STRICT;
82
83CREATE 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
94CREATE FUNCTION rum_extract_tsvector(tsvector,internal,internal,internal,internal)
95RETURNS internal
96AS 'MODULE_PATHNAME'
97LANGUAGE C IMMUTABLE STRICT;
98
99CREATE FUNCTION rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal)
100RETURNS internal
101AS 'MODULE_PATHNAME'
102LANGUAGE C IMMUTABLE STRICT;
103
104CREATE FUNCTION rum_tsvector_config(internal)
105RETURNS void
106AS 'MODULE_PATHNAME'
107LANGUAGE C IMMUTABLE STRICT;
108
109CREATE FUNCTION rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal)
110RETURNS bool
111AS 'MODULE_PATHNAME'
112LANGUAGE C IMMUTABLE STRICT;
113
114CREATE FUNCTION rum_tsquery_consistent(internal, smallint, tsvector, integer, internal, internal, internal, internal)
115RETURNS bool
116AS 'MODULE_PATHNAME'
117LANGUAGE C IMMUTABLE STRICT;
118
119CREATE FUNCTION rum_tsquery_distance(internal,smallint,tsvector,int,internal,internal,internal,internal,internal)
120RETURNS float8
121AS 'MODULE_PATHNAME'
122LANGUAGE C IMMUTABLE STRICT;
123
124-- To prevent calling from SQL
125CREATE FUNCTION rum_ts_join_pos(internal, internal)
126RETURNS bytea
127AS 'MODULE_PATHNAME'
128LANGUAGE C IMMUTABLE STRICT;
129
130CREATE OPERATOR CLASS rum_tsvector_ops
131DEFAULT FOR TYPE tsvector USING rum
132AS
133        OPERATOR        1       @@ (tsvector, tsquery),
134        OPERATOR        2       <=> (tsvector, tsquery) FOR ORDER BY pg_catalog.float_ops,
135        FUNCTION        1       gin_cmp_tslexeme(text, text),
136        FUNCTION        2       rum_extract_tsvector(tsvector,internal,internal,internal,internal),
137        FUNCTION        3       rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
138        FUNCTION        4       rum_tsquery_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
139        FUNCTION        5       gin_cmp_prefix(text,text,smallint,internal),
140        FUNCTION        6       rum_tsvector_config(internal),
141        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
142        FUNCTION        8       rum_tsquery_distance(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
143        FUNCTION        10      rum_ts_join_pos(internal, internal),
144        STORAGE         text;
145
146/*
147 * rum_tsvector_hash_ops operator class.
148 *
149 * Stores hash of entries as keys in index.
150 */
151
152CREATE FUNCTION rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal)
153RETURNS internal
154AS 'MODULE_PATHNAME'
155LANGUAGE C IMMUTABLE STRICT;
156
157CREATE FUNCTION rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal)
158RETURNS internal
159AS 'MODULE_PATHNAME'
160LANGUAGE C IMMUTABLE STRICT;
161
162CREATE OPERATOR CLASS rum_tsvector_hash_ops
163FOR TYPE tsvector USING rum
164AS
165        OPERATOR        1       @@ (tsvector, tsquery),
166        OPERATOR        2       <=> (tsvector, tsquery) FOR ORDER BY pg_catalog.float_ops,
167        FUNCTION        1       btint4cmp(integer, integer),
168        FUNCTION        2       rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal),
169        FUNCTION        3       rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal),
170        FUNCTION        4       rum_tsquery_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
171        FUNCTION        6       rum_tsvector_config(internal),
172        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
173        FUNCTION        8       rum_tsquery_distance(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
174        FUNCTION        10      rum_ts_join_pos(internal, internal),
175        STORAGE         integer;
176
177/*
178 * rum_timestamp_ops operator class
179 */
180
181-- timestamp operator class
182
183CREATE FUNCTION rum_timestamp_extract_value(timestamp,internal,internal,internal,internal)
184RETURNS internal
185AS 'MODULE_PATHNAME'
186LANGUAGE C STRICT IMMUTABLE;
187
188CREATE FUNCTION rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal)
189RETURNS int4
190AS 'MODULE_PATHNAME'
191LANGUAGE C STRICT IMMUTABLE;
192
193CREATE FUNCTION rum_timestamp_config(internal)
194RETURNS void
195AS 'MODULE_PATHNAME'
196LANGUAGE C IMMUTABLE STRICT;
197
198CREATE FUNCTION rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal)
199RETURNS internal
200AS 'MODULE_PATHNAME'
201LANGUAGE C STRICT IMMUTABLE;
202
203CREATE FUNCTION rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal)
204RETURNS bool
205AS 'MODULE_PATHNAME'
206LANGUAGE C STRICT IMMUTABLE;
207
208CREATE FUNCTION rum_timestamp_outer_distance(timestamp, timestamp, smallint)
209RETURNS float8
210AS 'MODULE_PATHNAME'
211LANGUAGE C STRICT IMMUTABLE;
212
213CREATE OPERATOR CLASS rum_timestamp_ops
214DEFAULT FOR TYPE timestamp USING rum
215AS
216        OPERATOR        1       <,
217        OPERATOR        2       <=,
218        OPERATOR        3       =,
219        OPERATOR        4       >=,
220        OPERATOR        5       >,
221        --support
222        FUNCTION        1       timestamp_cmp(timestamp,timestamp),
223        FUNCTION        2       rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
224        FUNCTION        3       rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
225        FUNCTION        4       rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
226        FUNCTION        5       rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
227        FUNCTION        6       rum_timestamp_config(internal),
228        -- support to timestamp distance in rum_tsvector_timestamp_ops
229        FUNCTION        9       rum_timestamp_outer_distance(timestamp, timestamp, smallint),
230        OPERATOR        20      <=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
231        OPERATOR        21      <=| (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
232        OPERATOR        22      |=> (timestamp,timestamp) FOR ORDER BY pg_catalog.float_ops,
233STORAGE         timestamp;
234
235/*
236 * rum_tsvector_timestamp_ops operator class.
237 *
238 * Stores timestamp with tsvector.
239 */
240
241CREATE FUNCTION rum_tsquery_timestamp_consistent(internal, smallint, tsvector, integer, internal, internal, internal, internal)
242RETURNS bool
243AS 'MODULE_PATHNAME'
244LANGUAGE C IMMUTABLE STRICT;
245
246/*
247 *	!!!deprecated, use rum_tsvector_addon_ops!!!
248 */
249CREATE OPERATOR CLASS rum_tsvector_timestamp_ops
250FOR TYPE tsvector USING rum
251AS
252        OPERATOR        1       @@ (tsvector, tsquery),
253        --support function
254        FUNCTION        1       gin_cmp_tslexeme(text, text),
255        FUNCTION        2       rum_extract_tsvector(tsvector,internal,internal,internal,internal),
256        FUNCTION        3       rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
257        FUNCTION        4       rum_tsquery_timestamp_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
258        FUNCTION        5       gin_cmp_prefix(text,text,smallint,internal),
259        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
260        STORAGE         text;
261
262/*
263 * rum_tsvector_hash_timestamp_ops operator class
264 *	!!!deprecated, use rum_tsvector_hash_addon_ops!!!
265 */
266
267CREATE OPERATOR CLASS rum_tsvector_hash_timestamp_ops
268FOR TYPE tsvector USING rum
269AS
270        OPERATOR        1       @@ (tsvector, tsquery),
271        --support function
272        FUNCTION        1       btint4cmp(integer, integer),
273        FUNCTION        2       rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal),
274        FUNCTION        3       rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal),
275        FUNCTION        4       rum_tsquery_timestamp_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
276        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
277        STORAGE         integer;
278
279/*
280 * rum_timestamptz_ops operator class
281 */
282
283CREATE FUNCTION rum_timestamptz_distance(timestamptz, timestamptz)
284RETURNS float8
285AS 'MODULE_PATHNAME', 'rum_timestamp_distance'
286LANGUAGE C IMMUTABLE STRICT;
287
288CREATE OPERATOR <=> (
289        PROCEDURE = rum_timestamptz_distance,
290        LEFTARG = timestamptz,
291        RIGHTARG = timestamptz,
292        COMMUTATOR = <=>
293);
294
295CREATE FUNCTION rum_timestamptz_left_distance(timestamptz, timestamptz)
296RETURNS float8
297AS 'MODULE_PATHNAME', 'rum_timestamp_left_distance'
298LANGUAGE C IMMUTABLE STRICT;
299
300CREATE OPERATOR <=| (
301        PROCEDURE = rum_timestamptz_left_distance,
302        LEFTARG = timestamptz,
303        RIGHTARG = timestamptz,
304        COMMUTATOR = |=>
305);
306
307CREATE FUNCTION rum_timestamptz_right_distance(timestamptz, timestamptz)
308RETURNS float8
309AS 'MODULE_PATHNAME', 'rum_timestamp_right_distance'
310LANGUAGE C IMMUTABLE STRICT;
311
312CREATE OPERATOR |=> (
313        PROCEDURE = rum_timestamptz_right_distance,
314        LEFTARG = timestamptz,
315        RIGHTARG = timestamptz,
316        COMMUTATOR = <=|
317);
318
319CREATE OPERATOR CLASS rum_timestamptz_ops
320DEFAULT FOR TYPE timestamptz USING rum
321AS
322        OPERATOR        1       <,
323        OPERATOR        2       <=,
324        OPERATOR        3       =,
325        OPERATOR        4       >=,
326        OPERATOR        5       >,
327        --support
328        FUNCTION        1       timestamptz_cmp(timestamptz,timestamptz),
329        FUNCTION        2       rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
330        FUNCTION        3       rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
331        FUNCTION        4       rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
332        FUNCTION        5       rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
333        FUNCTION        6       rum_timestamp_config(internal),
334        -- support to timestamptz distance in rum_tsvector_timestamptz_ops
335        FUNCTION        9       rum_timestamp_outer_distance(timestamp, timestamp, smallint),
336        OPERATOR        20      <=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
337        OPERATOR        21      <=| (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
338        OPERATOR        22      |=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
339STORAGE         timestamptz;
340
341/*
342 * rum_tsvector_timestamptz_ops operator class.
343 *
344 * Stores tsvector with timestamptz.
345 */
346
347CREATE OPERATOR CLASS rum_tsvector_timestamptz_ops
348FOR TYPE tsvector USING rum
349AS
350        OPERATOR        1       @@ (tsvector, tsquery),
351        --support function
352        FUNCTION        1       gin_cmp_tslexeme(text, text),
353        FUNCTION        2       rum_extract_tsvector(tsvector,internal,internal,internal,internal),
354        FUNCTION        3       rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
355        FUNCTION        4       rum_tsquery_timestamp_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
356        FUNCTION        5       gin_cmp_prefix(text,text,smallint,internal),
357        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
358        STORAGE         text;
359
360/*
361 * rum_tsvector_hash_timestamptz_ops operator class
362 */
363
364CREATE OPERATOR CLASS rum_tsvector_hash_timestamptz_ops
365FOR TYPE tsvector USING rum
366AS
367        OPERATOR        1       @@ (tsvector, tsquery),
368        --support function
369        FUNCTION        1       btint4cmp(integer, integer),
370        FUNCTION        2       rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal),
371        FUNCTION        3       rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal),
372        FUNCTION        4       rum_tsquery_timestamp_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
373        FUNCTION        7       rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
374        STORAGE         integer;
375
376/*
377 * rum_tsquery_ops operator class.
378 *
379 * Used for inversed text search.
380 */
381
382CREATE FUNCTION ruminv_extract_tsquery(tsquery,internal,internal,internal,internal)
383RETURNS internal
384AS 'MODULE_PATHNAME'
385LANGUAGE C IMMUTABLE STRICT;
386
387CREATE FUNCTION ruminv_extract_tsvector(tsvector,internal,smallint,internal,internal,internal,internal)
388RETURNS internal
389AS 'MODULE_PATHNAME'
390LANGUAGE C IMMUTABLE STRICT;
391
392CREATE FUNCTION ruminv_tsvector_consistent(internal, smallint, tsvector, integer, internal, internal, internal, internal)
393RETURNS bool
394AS 'MODULE_PATHNAME'
395LANGUAGE C IMMUTABLE STRICT;
396
397CREATE FUNCTION ruminv_tsquery_config(internal)
398RETURNS void
399AS 'MODULE_PATHNAME'
400LANGUAGE C IMMUTABLE STRICT;
401
402CREATE OPERATOR CLASS rum_tsquery_ops
403DEFAULT FOR TYPE tsquery USING rum
404AS
405        OPERATOR        1       @@ (tsquery, tsvector),
406        FUNCTION        1       gin_cmp_tslexeme(text, text),
407        FUNCTION        2       ruminv_extract_tsquery(tsquery,internal,internal,internal,internal),
408        FUNCTION        3       ruminv_extract_tsvector(tsvector,internal,smallint,internal,internal,internal,internal),
409        FUNCTION        4       ruminv_tsvector_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
410        FUNCTION        6       ruminv_tsquery_config(internal),
411        STORAGE         text;
412/*
413 * RUM version 1.1
414 */
415
416CREATE FUNCTION rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal)
417RETURNS bool
418AS 'MODULE_PATHNAME'
419LANGUAGE C STRICT IMMUTABLE;
420
421ALTER FUNCTION
422	rum_tsquery_timestamp_consistent (internal,smallint,tsvector,int,internal,internal,internal,internal)
423	RENAME TO rum_tsquery_addon_consistent;
424
425CREATE FUNCTION rum_numeric_cmp(numeric, numeric)
426RETURNS int4
427AS 'MODULE_PATHNAME'
428LANGUAGE C STRICT IMMUTABLE;
429
430CREATE OPERATOR CLASS rum_tsvector_addon_ops
431FOR TYPE tsvector USING rum
432AS
433	OPERATOR	1	@@ (tsvector, tsquery),
434	--support function
435	FUNCTION	1	gin_cmp_tslexeme(text, text),
436	FUNCTION	2	rum_extract_tsvector(tsvector,internal,internal,internal,internal),
437	FUNCTION	3	rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
438	FUNCTION	4	rum_tsquery_addon_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
439	FUNCTION	5	gin_cmp_prefix(text,text,smallint,internal),
440	FUNCTION	7	rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
441	STORAGE	 text;
442
443CREATE OPERATOR CLASS rum_tsvector_hash_addon_ops
444FOR TYPE tsvector USING rum
445AS
446	OPERATOR	1	@@ (tsvector, tsquery),
447	--support function
448	FUNCTION	1	btint4cmp(integer, integer),
449	FUNCTION	2	rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal),
450	FUNCTION	3	rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal),
451	FUNCTION	4	rum_tsquery_addon_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
452	FUNCTION	7	rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
453	STORAGE	 integer;
454
455/*--------------------int2-----------------------*/
456
457CREATE FUNCTION rum_int2_extract_value(int2, internal)
458RETURNS internal
459AS 'MODULE_PATHNAME'
460LANGUAGE C STRICT IMMUTABLE;
461
462CREATE FUNCTION rum_int2_compare_prefix(int2, int2, int2, internal)
463RETURNS int4
464AS 'MODULE_PATHNAME'
465LANGUAGE C STRICT IMMUTABLE;
466
467CREATE FUNCTION rum_int2_extract_query(int2, internal, int2, internal, internal)
468RETURNS internal
469AS 'MODULE_PATHNAME'
470LANGUAGE C STRICT IMMUTABLE;
471
472
473
474CREATE FUNCTION rum_int2_distance(int2, int2)
475RETURNS float8
476AS 'MODULE_PATHNAME'
477LANGUAGE C IMMUTABLE STRICT;
478
479CREATE OPERATOR <=> (
480	PROCEDURE = rum_int2_distance,
481	LEFTARG = int2,
482	RIGHTARG = int2,
483	COMMUTATOR = <=>
484);
485
486CREATE FUNCTION rum_int2_left_distance(int2, int2)
487RETURNS float8
488AS 'MODULE_PATHNAME'
489LANGUAGE C IMMUTABLE STRICT;
490
491CREATE OPERATOR <=| (
492	PROCEDURE = rum_int2_left_distance,
493	LEFTARG = int2,
494	RIGHTARG = int2,
495	COMMUTATOR = |=>
496);
497
498CREATE FUNCTION rum_int2_right_distance(int2, int2)
499RETURNS float8
500AS 'MODULE_PATHNAME'
501LANGUAGE C IMMUTABLE STRICT;
502
503CREATE OPERATOR |=> (
504	PROCEDURE = rum_int2_right_distance,
505	LEFTARG = int2,
506	RIGHTARG = int2,
507	COMMUTATOR = <=|
508);
509
510CREATE FUNCTION rum_int2_outer_distance(int2, int2, smallint)
511RETURNS float8
512AS 'MODULE_PATHNAME'
513LANGUAGE C STRICT IMMUTABLE;
514
515CREATE FUNCTION rum_int2_config(internal)
516RETURNS void
517AS 'MODULE_PATHNAME'
518LANGUAGE C IMMUTABLE STRICT;
519
520
521
522CREATE OPERATOR CLASS rum_int2_ops
523DEFAULT FOR TYPE int2 USING rum
524AS
525	OPERATOR	1	<	,
526	OPERATOR	2	<=	,
527	OPERATOR	3	=	,
528	OPERATOR	4	>=	,
529	OPERATOR	5	>	,
530	OPERATOR	20	<=> (int2,int2) FOR ORDER BY pg_catalog.float_ops,
531	OPERATOR	21	<=| (int2,int2) FOR ORDER BY pg_catalog.float_ops,
532	OPERATOR	22	|=> (int2,int2) FOR ORDER BY pg_catalog.float_ops,
533	FUNCTION	1	btint2cmp(int2,int2),
534	FUNCTION	2	rum_int2_extract_value(int2, internal),
535	FUNCTION	3	rum_int2_extract_query(int2, internal, int2, internal, internal),
536	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
537	FUNCTION	5	rum_int2_compare_prefix(int2,int2,int2, internal),
538	-- support to int2 distance in rum_tsvector_addon_ops
539	FUNCTION	6	rum_int2_config(internal),
540	FUNCTION	9	rum_int2_outer_distance(int2, int2, smallint),
541STORAGE		 int2;
542
543/*--------------------int4-----------------------*/
544
545CREATE FUNCTION rum_int4_extract_value(int4, internal)
546RETURNS internal
547AS 'MODULE_PATHNAME'
548LANGUAGE C STRICT IMMUTABLE;
549
550CREATE FUNCTION rum_int4_compare_prefix(int4, int4, int2, internal)
551RETURNS int4
552AS 'MODULE_PATHNAME'
553LANGUAGE C STRICT IMMUTABLE;
554
555CREATE FUNCTION rum_int4_extract_query(int4, internal, int2, internal, internal)
556RETURNS internal
557AS 'MODULE_PATHNAME'
558LANGUAGE C STRICT IMMUTABLE;
559
560
561
562CREATE FUNCTION rum_int4_distance(int4, int4)
563RETURNS float8
564AS 'MODULE_PATHNAME'
565LANGUAGE C IMMUTABLE STRICT;
566
567CREATE OPERATOR <=> (
568	PROCEDURE = rum_int4_distance,
569	LEFTARG = int4,
570	RIGHTARG = int4,
571	COMMUTATOR = <=>
572);
573
574CREATE FUNCTION rum_int4_left_distance(int4, int4)
575RETURNS float8
576AS 'MODULE_PATHNAME'
577LANGUAGE C IMMUTABLE STRICT;
578
579CREATE OPERATOR <=| (
580	PROCEDURE = rum_int4_left_distance,
581	LEFTARG = int4,
582	RIGHTARG = int4,
583	COMMUTATOR = |=>
584);
585
586CREATE FUNCTION rum_int4_right_distance(int4, int4)
587RETURNS float8
588AS 'MODULE_PATHNAME'
589LANGUAGE C IMMUTABLE STRICT;
590
591CREATE OPERATOR |=> (
592	PROCEDURE = rum_int4_right_distance,
593	LEFTARG = int4,
594	RIGHTARG = int4,
595	COMMUTATOR = <=|
596);
597
598CREATE FUNCTION rum_int4_outer_distance(int4, int4, smallint)
599RETURNS float8
600AS 'MODULE_PATHNAME'
601LANGUAGE C STRICT IMMUTABLE;
602
603CREATE FUNCTION rum_int4_config(internal)
604RETURNS void
605AS 'MODULE_PATHNAME'
606LANGUAGE C IMMUTABLE STRICT;
607
608
609
610CREATE OPERATOR CLASS rum_int4_ops
611DEFAULT FOR TYPE int4 USING rum
612AS
613	OPERATOR	1	<	,
614	OPERATOR	2	<=	,
615	OPERATOR	3	=	,
616	OPERATOR	4	>=	,
617	OPERATOR	5	>	,
618	OPERATOR	20	<=> (int4,int4) FOR ORDER BY pg_catalog.float_ops,
619	OPERATOR	21	<=| (int4,int4) FOR ORDER BY pg_catalog.float_ops,
620	OPERATOR	22	|=> (int4,int4) FOR ORDER BY pg_catalog.float_ops,
621	FUNCTION	1	btint4cmp(int4,int4),
622	FUNCTION	2	rum_int4_extract_value(int4, internal),
623	FUNCTION	3	rum_int4_extract_query(int4, internal, int2, internal, internal),
624	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
625	FUNCTION	5	rum_int4_compare_prefix(int4,int4,int2, internal),
626	-- support to int4 distance in rum_tsvector_addon_ops
627	FUNCTION	6	rum_int4_config(internal),
628	FUNCTION	9	rum_int4_outer_distance(int4, int4, smallint),
629STORAGE		 int4;
630
631/*--------------------int8-----------------------*/
632
633CREATE FUNCTION rum_int8_extract_value(int8, internal)
634RETURNS internal
635AS 'MODULE_PATHNAME'
636LANGUAGE C STRICT IMMUTABLE;
637
638CREATE FUNCTION rum_int8_compare_prefix(int8, int8, int2, internal)
639RETURNS int4
640AS 'MODULE_PATHNAME'
641LANGUAGE C STRICT IMMUTABLE;
642
643CREATE FUNCTION rum_int8_extract_query(int8, internal, int2, internal, internal)
644RETURNS internal
645AS 'MODULE_PATHNAME'
646LANGUAGE C STRICT IMMUTABLE;
647
648
649
650CREATE FUNCTION rum_int8_distance(int8, int8)
651RETURNS float8
652AS 'MODULE_PATHNAME'
653LANGUAGE C IMMUTABLE STRICT;
654
655CREATE OPERATOR <=> (
656	PROCEDURE = rum_int8_distance,
657	LEFTARG = int8,
658	RIGHTARG = int8,
659	COMMUTATOR = <=>
660);
661
662CREATE FUNCTION rum_int8_left_distance(int8, int8)
663RETURNS float8
664AS 'MODULE_PATHNAME'
665LANGUAGE C IMMUTABLE STRICT;
666
667CREATE OPERATOR <=| (
668	PROCEDURE = rum_int8_left_distance,
669	LEFTARG = int8,
670	RIGHTARG = int8,
671	COMMUTATOR = |=>
672);
673
674CREATE FUNCTION rum_int8_right_distance(int8, int8)
675RETURNS float8
676AS 'MODULE_PATHNAME'
677LANGUAGE C IMMUTABLE STRICT;
678
679CREATE OPERATOR |=> (
680	PROCEDURE = rum_int8_right_distance,
681	LEFTARG = int8,
682	RIGHTARG = int8,
683	COMMUTATOR = <=|
684);
685
686CREATE FUNCTION rum_int8_outer_distance(int8, int8, smallint)
687RETURNS float8
688AS 'MODULE_PATHNAME'
689LANGUAGE C STRICT IMMUTABLE;
690
691CREATE FUNCTION rum_int8_config(internal)
692RETURNS void
693AS 'MODULE_PATHNAME'
694LANGUAGE C IMMUTABLE STRICT;
695
696
697
698CREATE OPERATOR CLASS rum_int8_ops
699DEFAULT FOR TYPE int8 USING rum
700AS
701	OPERATOR	1	<	,
702	OPERATOR	2	<=	,
703	OPERATOR	3	=	,
704	OPERATOR	4	>=	,
705	OPERATOR	5	>	,
706	OPERATOR	20	<=> (int8,int8) FOR ORDER BY pg_catalog.float_ops,
707	OPERATOR	21	<=| (int8,int8) FOR ORDER BY pg_catalog.float_ops,
708	OPERATOR	22	|=> (int8,int8) FOR ORDER BY pg_catalog.float_ops,
709	FUNCTION	1	btint8cmp(int8,int8),
710	FUNCTION	2	rum_int8_extract_value(int8, internal),
711	FUNCTION	3	rum_int8_extract_query(int8, internal, int2, internal, internal),
712	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
713	FUNCTION	5	rum_int8_compare_prefix(int8,int8,int2, internal),
714	-- support to int8 distance in rum_tsvector_addon_ops
715	FUNCTION	6	rum_int8_config(internal),
716	FUNCTION	9	rum_int8_outer_distance(int8, int8, smallint),
717STORAGE		 int8;
718
719/*--------------------float4-----------------------*/
720
721CREATE FUNCTION rum_float4_extract_value(float4, internal)
722RETURNS internal
723AS 'MODULE_PATHNAME'
724LANGUAGE C STRICT IMMUTABLE;
725
726CREATE FUNCTION rum_float4_compare_prefix(float4, float4, int2, internal)
727RETURNS int4
728AS 'MODULE_PATHNAME'
729LANGUAGE C STRICT IMMUTABLE;
730
731CREATE FUNCTION rum_float4_extract_query(float4, internal, int2, internal, internal)
732RETURNS internal
733AS 'MODULE_PATHNAME'
734LANGUAGE C STRICT IMMUTABLE;
735
736
737
738CREATE FUNCTION rum_float4_distance(float4, float4)
739RETURNS float8
740AS 'MODULE_PATHNAME'
741LANGUAGE C IMMUTABLE STRICT;
742
743CREATE OPERATOR <=> (
744	PROCEDURE = rum_float4_distance,
745	LEFTARG = float4,
746	RIGHTARG = float4,
747	COMMUTATOR = <=>
748);
749
750CREATE FUNCTION rum_float4_left_distance(float4, float4)
751RETURNS float8
752AS 'MODULE_PATHNAME'
753LANGUAGE C IMMUTABLE STRICT;
754
755CREATE OPERATOR <=| (
756	PROCEDURE = rum_float4_left_distance,
757	LEFTARG = float4,
758	RIGHTARG = float4,
759	COMMUTATOR = |=>
760);
761
762CREATE FUNCTION rum_float4_right_distance(float4, float4)
763RETURNS float8
764AS 'MODULE_PATHNAME'
765LANGUAGE C IMMUTABLE STRICT;
766
767CREATE OPERATOR |=> (
768	PROCEDURE = rum_float4_right_distance,
769	LEFTARG = float4,
770	RIGHTARG = float4,
771	COMMUTATOR = <=|
772);
773
774CREATE FUNCTION rum_float4_outer_distance(float4, float4, smallint)
775RETURNS float8
776AS 'MODULE_PATHNAME'
777LANGUAGE C STRICT IMMUTABLE;
778
779CREATE FUNCTION rum_float4_config(internal)
780RETURNS void
781AS 'MODULE_PATHNAME'
782LANGUAGE C IMMUTABLE STRICT;
783
784
785
786CREATE OPERATOR CLASS rum_float4_ops
787DEFAULT FOR TYPE float4 USING rum
788AS
789	OPERATOR	1	<	,
790	OPERATOR	2	<=	,
791	OPERATOR	3	=	,
792	OPERATOR	4	>=	,
793	OPERATOR	5	>	,
794	OPERATOR	20	<=> (float4,float4) FOR ORDER BY pg_catalog.float_ops,
795	OPERATOR	21	<=| (float4,float4) FOR ORDER BY pg_catalog.float_ops,
796	OPERATOR	22	|=> (float4,float4) FOR ORDER BY pg_catalog.float_ops,
797	FUNCTION	1	btfloat4cmp(float4,float4),
798	FUNCTION	2	rum_float4_extract_value(float4, internal),
799	FUNCTION	3	rum_float4_extract_query(float4, internal, int2, internal, internal),
800	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
801	FUNCTION	5	rum_float4_compare_prefix(float4,float4,int2, internal),
802	-- support to float4 distance in rum_tsvector_addon_ops
803	FUNCTION	6	rum_float4_config(internal),
804	FUNCTION	9	rum_float4_outer_distance(float4, float4, smallint),
805STORAGE		 float4;
806
807/*--------------------float8-----------------------*/
808
809CREATE FUNCTION rum_float8_extract_value(float8, internal)
810RETURNS internal
811AS 'MODULE_PATHNAME'
812LANGUAGE C STRICT IMMUTABLE;
813
814CREATE FUNCTION rum_float8_compare_prefix(float8, float8, int2, internal)
815RETURNS int4
816AS 'MODULE_PATHNAME'
817LANGUAGE C STRICT IMMUTABLE;
818
819CREATE FUNCTION rum_float8_extract_query(float8, internal, int2, internal, internal)
820RETURNS internal
821AS 'MODULE_PATHNAME'
822LANGUAGE C STRICT IMMUTABLE;
823
824
825
826CREATE FUNCTION rum_float8_distance(float8, float8)
827RETURNS float8
828AS 'MODULE_PATHNAME'
829LANGUAGE C IMMUTABLE STRICT;
830
831CREATE OPERATOR <=> (
832	PROCEDURE = rum_float8_distance,
833	LEFTARG = float8,
834	RIGHTARG = float8,
835	COMMUTATOR = <=>
836);
837
838CREATE FUNCTION rum_float8_left_distance(float8, float8)
839RETURNS float8
840AS 'MODULE_PATHNAME'
841LANGUAGE C IMMUTABLE STRICT;
842
843CREATE OPERATOR <=| (
844	PROCEDURE = rum_float8_left_distance,
845	LEFTARG = float8,
846	RIGHTARG = float8,
847	COMMUTATOR = |=>
848);
849
850CREATE FUNCTION rum_float8_right_distance(float8, float8)
851RETURNS float8
852AS 'MODULE_PATHNAME'
853LANGUAGE C IMMUTABLE STRICT;
854
855CREATE OPERATOR |=> (
856	PROCEDURE = rum_float8_right_distance,
857	LEFTARG = float8,
858	RIGHTARG = float8,
859	COMMUTATOR = <=|
860);
861
862CREATE FUNCTION rum_float8_outer_distance(float8, float8, smallint)
863RETURNS float8
864AS 'MODULE_PATHNAME'
865LANGUAGE C STRICT IMMUTABLE;
866
867CREATE FUNCTION rum_float8_config(internal)
868RETURNS void
869AS 'MODULE_PATHNAME'
870LANGUAGE C IMMUTABLE STRICT;
871
872
873
874CREATE OPERATOR CLASS rum_float8_ops
875DEFAULT FOR TYPE float8 USING rum
876AS
877	OPERATOR	1	<	,
878	OPERATOR	2	<=	,
879	OPERATOR	3	=	,
880	OPERATOR	4	>=	,
881	OPERATOR	5	>	,
882	OPERATOR	20	<=> (float8,float8) FOR ORDER BY pg_catalog.float_ops,
883	OPERATOR	21	<=| (float8,float8) FOR ORDER BY pg_catalog.float_ops,
884	OPERATOR	22	|=> (float8,float8) FOR ORDER BY pg_catalog.float_ops,
885	FUNCTION	1	btfloat8cmp(float8,float8),
886	FUNCTION	2	rum_float8_extract_value(float8, internal),
887	FUNCTION	3	rum_float8_extract_query(float8, internal, int2, internal, internal),
888	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
889	FUNCTION	5	rum_float8_compare_prefix(float8,float8,int2, internal),
890	-- support to float8 distance in rum_tsvector_addon_ops
891	FUNCTION	6	rum_float8_config(internal),
892	FUNCTION	9	rum_float8_outer_distance(float8, float8, smallint),
893STORAGE		 float8;
894
895/*--------------------money-----------------------*/
896
897CREATE FUNCTION rum_money_extract_value(money, internal)
898RETURNS internal
899AS 'MODULE_PATHNAME'
900LANGUAGE C STRICT IMMUTABLE;
901
902CREATE FUNCTION rum_money_compare_prefix(money, money, int2, internal)
903RETURNS int4
904AS 'MODULE_PATHNAME'
905LANGUAGE C STRICT IMMUTABLE;
906
907CREATE FUNCTION rum_money_extract_query(money, internal, int2, internal, internal)
908RETURNS internal
909AS 'MODULE_PATHNAME'
910LANGUAGE C STRICT IMMUTABLE;
911
912
913
914CREATE FUNCTION rum_money_distance(money, money)
915RETURNS float8
916AS 'MODULE_PATHNAME'
917LANGUAGE C IMMUTABLE STRICT;
918
919CREATE OPERATOR <=> (
920	PROCEDURE = rum_money_distance,
921	LEFTARG = money,
922	RIGHTARG = money,
923	COMMUTATOR = <=>
924);
925
926CREATE FUNCTION rum_money_left_distance(money, money)
927RETURNS float8
928AS 'MODULE_PATHNAME'
929LANGUAGE C IMMUTABLE STRICT;
930
931CREATE OPERATOR <=| (
932	PROCEDURE = rum_money_left_distance,
933	LEFTARG = money,
934	RIGHTARG = money,
935	COMMUTATOR = |=>
936);
937
938CREATE FUNCTION rum_money_right_distance(money, money)
939RETURNS float8
940AS 'MODULE_PATHNAME'
941LANGUAGE C IMMUTABLE STRICT;
942
943CREATE OPERATOR |=> (
944	PROCEDURE = rum_money_right_distance,
945	LEFTARG = money,
946	RIGHTARG = money,
947	COMMUTATOR = <=|
948);
949
950CREATE FUNCTION rum_money_outer_distance(money, money, smallint)
951RETURNS float8
952AS 'MODULE_PATHNAME'
953LANGUAGE C STRICT IMMUTABLE;
954
955CREATE FUNCTION rum_money_config(internal)
956RETURNS void
957AS 'MODULE_PATHNAME'
958LANGUAGE C IMMUTABLE STRICT;
959
960
961
962CREATE OPERATOR CLASS rum_money_ops
963DEFAULT FOR TYPE money USING rum
964AS
965	OPERATOR	1	<	,
966	OPERATOR	2	<=	,
967	OPERATOR	3	=	,
968	OPERATOR	4	>=	,
969	OPERATOR	5	>	,
970	OPERATOR	20	<=> (money,money) FOR ORDER BY pg_catalog.float_ops,
971	OPERATOR	21	<=| (money,money) FOR ORDER BY pg_catalog.float_ops,
972	OPERATOR	22	|=> (money,money) FOR ORDER BY pg_catalog.float_ops,
973	FUNCTION	1	cash_cmp(money,money),
974	FUNCTION	2	rum_money_extract_value(money, internal),
975	FUNCTION	3	rum_money_extract_query(money, internal, int2, internal, internal),
976	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
977	FUNCTION	5	rum_money_compare_prefix(money,money,int2, internal),
978	-- support to money distance in rum_tsvector_addon_ops
979	FUNCTION	6	rum_money_config(internal),
980	FUNCTION	9	rum_money_outer_distance(money, money, smallint),
981STORAGE		 money;
982
983/*--------------------oid-----------------------*/
984
985CREATE FUNCTION rum_oid_extract_value(oid, internal)
986RETURNS internal
987AS 'MODULE_PATHNAME'
988LANGUAGE C STRICT IMMUTABLE;
989
990CREATE FUNCTION rum_oid_compare_prefix(oid, oid, int2, internal)
991RETURNS int4
992AS 'MODULE_PATHNAME'
993LANGUAGE C STRICT IMMUTABLE;
994
995CREATE FUNCTION rum_oid_extract_query(oid, internal, int2, internal, internal)
996RETURNS internal
997AS 'MODULE_PATHNAME'
998LANGUAGE C STRICT IMMUTABLE;
999
1000
1001
1002CREATE FUNCTION rum_oid_distance(oid, oid)
1003RETURNS float8
1004AS 'MODULE_PATHNAME'
1005LANGUAGE C IMMUTABLE STRICT;
1006
1007CREATE OPERATOR <=> (
1008	PROCEDURE = rum_oid_distance,
1009	LEFTARG = oid,
1010	RIGHTARG = oid,
1011	COMMUTATOR = <=>
1012);
1013
1014CREATE FUNCTION rum_oid_left_distance(oid, oid)
1015RETURNS float8
1016AS 'MODULE_PATHNAME'
1017LANGUAGE C IMMUTABLE STRICT;
1018
1019CREATE OPERATOR <=| (
1020	PROCEDURE = rum_oid_left_distance,
1021	LEFTARG = oid,
1022	RIGHTARG = oid,
1023	COMMUTATOR = |=>
1024);
1025
1026CREATE FUNCTION rum_oid_right_distance(oid, oid)
1027RETURNS float8
1028AS 'MODULE_PATHNAME'
1029LANGUAGE C IMMUTABLE STRICT;
1030
1031CREATE OPERATOR |=> (
1032	PROCEDURE = rum_oid_right_distance,
1033	LEFTARG = oid,
1034	RIGHTARG = oid,
1035	COMMUTATOR = <=|
1036);
1037
1038CREATE FUNCTION rum_oid_outer_distance(oid, oid, smallint)
1039RETURNS float8
1040AS 'MODULE_PATHNAME'
1041LANGUAGE C STRICT IMMUTABLE;
1042
1043CREATE FUNCTION rum_oid_config(internal)
1044RETURNS void
1045AS 'MODULE_PATHNAME'
1046LANGUAGE C IMMUTABLE STRICT;
1047
1048
1049
1050CREATE OPERATOR CLASS rum_oid_ops
1051DEFAULT FOR TYPE oid USING rum
1052AS
1053	OPERATOR	1	<	,
1054	OPERATOR	2	<=	,
1055	OPERATOR	3	=	,
1056	OPERATOR	4	>=	,
1057	OPERATOR	5	>	,
1058	OPERATOR	20	<=> (oid,oid) FOR ORDER BY pg_catalog.float_ops,
1059	OPERATOR	21	<=| (oid,oid) FOR ORDER BY pg_catalog.float_ops,
1060	OPERATOR	22	|=> (oid,oid) FOR ORDER BY pg_catalog.float_ops,
1061	FUNCTION	1	btoidcmp(oid,oid),
1062	FUNCTION	2	rum_oid_extract_value(oid, internal),
1063	FUNCTION	3	rum_oid_extract_query(oid, internal, int2, internal, internal),
1064	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1065	FUNCTION	5	rum_oid_compare_prefix(oid,oid,int2, internal),
1066	-- support to oid distance in rum_tsvector_addon_ops
1067	FUNCTION	6	rum_oid_config(internal),
1068	FUNCTION	9	rum_oid_outer_distance(oid, oid, smallint),
1069STORAGE		 oid;
1070
1071/*--------------------time-----------------------*/
1072
1073CREATE FUNCTION rum_time_extract_value(time, internal)
1074RETURNS internal
1075AS 'MODULE_PATHNAME'
1076LANGUAGE C STRICT IMMUTABLE;
1077
1078CREATE FUNCTION rum_time_compare_prefix(time, time, int2, internal)
1079RETURNS int4
1080AS 'MODULE_PATHNAME'
1081LANGUAGE C STRICT IMMUTABLE;
1082
1083CREATE FUNCTION rum_time_extract_query(time, internal, int2, internal, internal)
1084RETURNS internal
1085AS 'MODULE_PATHNAME'
1086LANGUAGE C STRICT IMMUTABLE;
1087
1088
1089CREATE OPERATOR CLASS rum_time_ops
1090DEFAULT FOR TYPE time USING rum
1091AS
1092	OPERATOR	1	  <		,
1093	OPERATOR	2	  <=	,
1094	OPERATOR	3	  =		,
1095	OPERATOR	4	  >=	,
1096	OPERATOR	5	  >		,
1097	FUNCTION	1	  time_cmp(time,time),
1098	FUNCTION	2	  rum_time_extract_value(time, internal),
1099	FUNCTION	3	  rum_time_extract_query(time, internal, int2, internal, internal),
1100	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1101	FUNCTION	5	  rum_time_compare_prefix(time,time,int2, internal),
1102STORAGE		 time;
1103
1104/*--------------------timetz-----------------------*/
1105
1106CREATE FUNCTION rum_timetz_extract_value(timetz, internal)
1107RETURNS internal
1108AS 'MODULE_PATHNAME'
1109LANGUAGE C STRICT IMMUTABLE;
1110
1111CREATE FUNCTION rum_timetz_compare_prefix(timetz, timetz, int2, internal)
1112RETURNS int4
1113AS 'MODULE_PATHNAME'
1114LANGUAGE C STRICT IMMUTABLE;
1115
1116CREATE FUNCTION rum_timetz_extract_query(timetz, internal, int2, internal, internal)
1117RETURNS internal
1118AS 'MODULE_PATHNAME'
1119LANGUAGE C STRICT IMMUTABLE;
1120
1121
1122CREATE OPERATOR CLASS rum_timetz_ops
1123DEFAULT FOR TYPE timetz USING rum
1124AS
1125	OPERATOR	1	  <		,
1126	OPERATOR	2	  <=	,
1127	OPERATOR	3	  =		,
1128	OPERATOR	4	  >=	,
1129	OPERATOR	5	  >		,
1130	FUNCTION	1	  timetz_cmp(timetz,timetz),
1131	FUNCTION	2	  rum_timetz_extract_value(timetz, internal),
1132	FUNCTION	3	  rum_timetz_extract_query(timetz, internal, int2, internal, internal),
1133	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1134	FUNCTION	5	  rum_timetz_compare_prefix(timetz,timetz,int2, internal),
1135STORAGE		 timetz;
1136
1137/*--------------------date-----------------------*/
1138
1139CREATE FUNCTION rum_date_extract_value(date, internal)
1140RETURNS internal
1141AS 'MODULE_PATHNAME'
1142LANGUAGE C STRICT IMMUTABLE;
1143
1144CREATE FUNCTION rum_date_compare_prefix(date, date, int2, internal)
1145RETURNS int4
1146AS 'MODULE_PATHNAME'
1147LANGUAGE C STRICT IMMUTABLE;
1148
1149CREATE FUNCTION rum_date_extract_query(date, internal, int2, internal, internal)
1150RETURNS internal
1151AS 'MODULE_PATHNAME'
1152LANGUAGE C STRICT IMMUTABLE;
1153
1154
1155CREATE OPERATOR CLASS rum_date_ops
1156DEFAULT FOR TYPE date USING rum
1157AS
1158	OPERATOR	1	  <		,
1159	OPERATOR	2	  <=	,
1160	OPERATOR	3	  =		,
1161	OPERATOR	4	  >=	,
1162	OPERATOR	5	  >		,
1163	FUNCTION	1	  date_cmp(date,date),
1164	FUNCTION	2	  rum_date_extract_value(date, internal),
1165	FUNCTION	3	  rum_date_extract_query(date, internal, int2, internal, internal),
1166	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1167	FUNCTION	5	  rum_date_compare_prefix(date,date,int2, internal),
1168STORAGE		 date;
1169
1170/*--------------------interval-----------------------*/
1171
1172CREATE FUNCTION rum_interval_extract_value(interval, internal)
1173RETURNS internal
1174AS 'MODULE_PATHNAME'
1175LANGUAGE C STRICT IMMUTABLE;
1176
1177CREATE FUNCTION rum_interval_compare_prefix(interval, interval, int2, internal)
1178RETURNS int4
1179AS 'MODULE_PATHNAME'
1180LANGUAGE C STRICT IMMUTABLE;
1181
1182CREATE FUNCTION rum_interval_extract_query(interval, internal, int2, internal, internal)
1183RETURNS internal
1184AS 'MODULE_PATHNAME'
1185LANGUAGE C STRICT IMMUTABLE;
1186
1187
1188CREATE OPERATOR CLASS rum_interval_ops
1189DEFAULT FOR TYPE interval USING rum
1190AS
1191	OPERATOR	1	  <		,
1192	OPERATOR	2	  <=	,
1193	OPERATOR	3	  =		,
1194	OPERATOR	4	  >=	,
1195	OPERATOR	5	  >		,
1196	FUNCTION	1	  interval_cmp(interval,interval),
1197	FUNCTION	2	  rum_interval_extract_value(interval, internal),
1198	FUNCTION	3	  rum_interval_extract_query(interval, internal, int2, internal, internal),
1199	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1200	FUNCTION	5	  rum_interval_compare_prefix(interval,interval,int2, internal),
1201STORAGE		 interval;
1202
1203/*--------------------macaddr-----------------------*/
1204
1205CREATE FUNCTION rum_macaddr_extract_value(macaddr, internal)
1206RETURNS internal
1207AS 'MODULE_PATHNAME'
1208LANGUAGE C STRICT IMMUTABLE;
1209
1210CREATE FUNCTION rum_macaddr_compare_prefix(macaddr, macaddr, int2, internal)
1211RETURNS int4
1212AS 'MODULE_PATHNAME'
1213LANGUAGE C STRICT IMMUTABLE;
1214
1215CREATE FUNCTION rum_macaddr_extract_query(macaddr, internal, int2, internal, internal)
1216RETURNS internal
1217AS 'MODULE_PATHNAME'
1218LANGUAGE C STRICT IMMUTABLE;
1219
1220
1221CREATE OPERATOR CLASS rum_macaddr_ops
1222DEFAULT FOR TYPE macaddr USING rum
1223AS
1224	OPERATOR	1	  <		,
1225	OPERATOR	2	  <=	,
1226	OPERATOR	3	  =		,
1227	OPERATOR	4	  >=	,
1228	OPERATOR	5	  >		,
1229	FUNCTION	1	  macaddr_cmp(macaddr,macaddr),
1230	FUNCTION	2	  rum_macaddr_extract_value(macaddr, internal),
1231	FUNCTION	3	  rum_macaddr_extract_query(macaddr, internal, int2, internal, internal),
1232	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1233	FUNCTION	5	  rum_macaddr_compare_prefix(macaddr,macaddr,int2, internal),
1234STORAGE		 macaddr;
1235
1236/*--------------------inet-----------------------*/
1237
1238CREATE FUNCTION rum_inet_extract_value(inet, internal)
1239RETURNS internal
1240AS 'MODULE_PATHNAME'
1241LANGUAGE C STRICT IMMUTABLE;
1242
1243CREATE FUNCTION rum_inet_compare_prefix(inet, inet, int2, internal)
1244RETURNS int4
1245AS 'MODULE_PATHNAME'
1246LANGUAGE C STRICT IMMUTABLE;
1247
1248CREATE FUNCTION rum_inet_extract_query(inet, internal, int2, internal, internal)
1249RETURNS internal
1250AS 'MODULE_PATHNAME'
1251LANGUAGE C STRICT IMMUTABLE;
1252
1253
1254CREATE OPERATOR CLASS rum_inet_ops
1255DEFAULT FOR TYPE inet USING rum
1256AS
1257	OPERATOR	1	  <		,
1258	OPERATOR	2	  <=	,
1259	OPERATOR	3	  =		,
1260	OPERATOR	4	  >=	,
1261	OPERATOR	5	  >		,
1262	FUNCTION	1	  network_cmp(inet,inet),
1263	FUNCTION	2	  rum_inet_extract_value(inet, internal),
1264	FUNCTION	3	  rum_inet_extract_query(inet, internal, int2, internal, internal),
1265	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1266	FUNCTION	5	  rum_inet_compare_prefix(inet,inet,int2, internal),
1267STORAGE		 inet;
1268
1269/*--------------------cidr-----------------------*/
1270
1271CREATE FUNCTION rum_cidr_extract_value(cidr, internal)
1272RETURNS internal
1273AS 'MODULE_PATHNAME'
1274LANGUAGE C STRICT IMMUTABLE;
1275
1276CREATE FUNCTION rum_cidr_compare_prefix(cidr, cidr, int2, internal)
1277RETURNS int4
1278AS 'MODULE_PATHNAME'
1279LANGUAGE C STRICT IMMUTABLE;
1280
1281CREATE FUNCTION rum_cidr_extract_query(cidr, internal, int2, internal, internal)
1282RETURNS internal
1283AS 'MODULE_PATHNAME'
1284LANGUAGE C STRICT IMMUTABLE;
1285
1286
1287CREATE OPERATOR CLASS rum_cidr_ops
1288DEFAULT FOR TYPE cidr USING rum
1289AS
1290	OPERATOR	1	  <		(inet, inet),
1291	OPERATOR	2	  <=	(inet, inet),
1292	OPERATOR	3	  =		(inet, inet),
1293	OPERATOR	4	  >=	(inet, inet),
1294	OPERATOR	5	  >		(inet, inet),
1295	FUNCTION	1	  network_cmp(inet,inet),
1296	FUNCTION	2	  rum_cidr_extract_value(cidr, internal),
1297	FUNCTION	3	  rum_cidr_extract_query(cidr, internal, int2, internal, internal),
1298	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1299	FUNCTION	5	  rum_cidr_compare_prefix(cidr,cidr,int2, internal),
1300STORAGE		 cidr;
1301
1302/*--------------------text-----------------------*/
1303
1304CREATE FUNCTION rum_text_extract_value(text, internal)
1305RETURNS internal
1306AS 'MODULE_PATHNAME'
1307LANGUAGE C STRICT IMMUTABLE;
1308
1309CREATE FUNCTION rum_text_compare_prefix(text, text, int2, internal)
1310RETURNS int4
1311AS 'MODULE_PATHNAME'
1312LANGUAGE C STRICT IMMUTABLE;
1313
1314CREATE FUNCTION rum_text_extract_query(text, internal, int2, internal, internal)
1315RETURNS internal
1316AS 'MODULE_PATHNAME'
1317LANGUAGE C STRICT IMMUTABLE;
1318
1319
1320CREATE OPERATOR CLASS rum_text_ops
1321DEFAULT FOR TYPE text USING rum
1322AS
1323	OPERATOR	1	  <		,
1324	OPERATOR	2	  <=	,
1325	OPERATOR	3	  =		,
1326	OPERATOR	4	  >=	,
1327	OPERATOR	5	  >		,
1328	FUNCTION	1	  bttextcmp(text,text),
1329	FUNCTION	2	  rum_text_extract_value(text, internal),
1330	FUNCTION	3	  rum_text_extract_query(text, internal, int2, internal, internal),
1331	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1332	FUNCTION	5	  rum_text_compare_prefix(text,text,int2, internal),
1333STORAGE		 text;
1334
1335/*--------------------varchar-----------------------*/
1336
1337
1338CREATE OPERATOR CLASS rum_varchar_ops
1339DEFAULT FOR TYPE varchar USING rum
1340AS
1341	OPERATOR	1	  <		(text, text),
1342	OPERATOR	2	  <=	(text, text),
1343	OPERATOR	3	  =		(text, text),
1344	OPERATOR	4	  >=	(text, text),
1345	OPERATOR	5	  >		(text, text),
1346	FUNCTION	1	  bttextcmp(text,text),
1347	FUNCTION	2	  rum_text_extract_value(text, internal),
1348	FUNCTION	3	  rum_text_extract_query(text, internal, int2, internal, internal),
1349	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1350	FUNCTION	5	  rum_text_compare_prefix(text,text,int2, internal),
1351STORAGE		 varchar;
1352
1353/*--------------------"char"-----------------------*/
1354
1355CREATE FUNCTION rum_char_extract_value("char", internal)
1356RETURNS internal
1357AS 'MODULE_PATHNAME'
1358LANGUAGE C STRICT IMMUTABLE;
1359
1360CREATE FUNCTION rum_char_compare_prefix("char", "char", int2, internal)
1361RETURNS int4
1362AS 'MODULE_PATHNAME'
1363LANGUAGE C STRICT IMMUTABLE;
1364
1365CREATE FUNCTION rum_char_extract_query("char", internal, int2, internal, internal)
1366RETURNS internal
1367AS 'MODULE_PATHNAME'
1368LANGUAGE C STRICT IMMUTABLE;
1369
1370
1371CREATE OPERATOR CLASS rum_char_ops
1372DEFAULT FOR TYPE "char" USING rum
1373AS
1374	OPERATOR	1	  <		,
1375	OPERATOR	2	  <=	,
1376	OPERATOR	3	  =		,
1377	OPERATOR	4	  >=	,
1378	OPERATOR	5	  >		,
1379	FUNCTION	1	  btcharcmp("char","char"),
1380	FUNCTION	2	  rum_char_extract_value("char", internal),
1381	FUNCTION	3	  rum_char_extract_query("char", internal, int2, internal, internal),
1382	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1383	FUNCTION	5	  rum_char_compare_prefix("char","char",int2, internal),
1384STORAGE		 "char";
1385
1386/*--------------------bytea-----------------------*/
1387
1388CREATE FUNCTION rum_bytea_extract_value(bytea, internal)
1389RETURNS internal
1390AS 'MODULE_PATHNAME'
1391LANGUAGE C STRICT IMMUTABLE;
1392
1393CREATE FUNCTION rum_bytea_compare_prefix(bytea, bytea, int2, internal)
1394RETURNS int4
1395AS 'MODULE_PATHNAME'
1396LANGUAGE C STRICT IMMUTABLE;
1397
1398CREATE FUNCTION rum_bytea_extract_query(bytea, internal, int2, internal, internal)
1399RETURNS internal
1400AS 'MODULE_PATHNAME'
1401LANGUAGE C STRICT IMMUTABLE;
1402
1403
1404CREATE OPERATOR CLASS rum_bytea_ops
1405DEFAULT FOR TYPE bytea USING rum
1406AS
1407	OPERATOR	1	  <		,
1408	OPERATOR	2	  <=	,
1409	OPERATOR	3	  =		,
1410	OPERATOR	4	  >=	,
1411	OPERATOR	5	  >		,
1412	FUNCTION	1	  byteacmp(bytea,bytea),
1413	FUNCTION	2	  rum_bytea_extract_value(bytea, internal),
1414	FUNCTION	3	  rum_bytea_extract_query(bytea, internal, int2, internal, internal),
1415	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1416	FUNCTION	5	  rum_bytea_compare_prefix(bytea,bytea,int2, internal),
1417STORAGE		 bytea;
1418
1419/*--------------------bit-----------------------*/
1420
1421CREATE FUNCTION rum_bit_extract_value(bit, internal)
1422RETURNS internal
1423AS 'MODULE_PATHNAME'
1424LANGUAGE C STRICT IMMUTABLE;
1425
1426CREATE FUNCTION rum_bit_compare_prefix(bit, bit, int2, internal)
1427RETURNS int4
1428AS 'MODULE_PATHNAME'
1429LANGUAGE C STRICT IMMUTABLE;
1430
1431CREATE FUNCTION rum_bit_extract_query(bit, internal, int2, internal, internal)
1432RETURNS internal
1433AS 'MODULE_PATHNAME'
1434LANGUAGE C STRICT IMMUTABLE;
1435
1436
1437CREATE OPERATOR CLASS rum_bit_ops
1438DEFAULT FOR TYPE bit USING rum
1439AS
1440	OPERATOR	1	  <		,
1441	OPERATOR	2	  <=	,
1442	OPERATOR	3	  =		,
1443	OPERATOR	4	  >=	,
1444	OPERATOR	5	  >		,
1445	FUNCTION	1	  bitcmp(bit,bit),
1446	FUNCTION	2	  rum_bit_extract_value(bit, internal),
1447	FUNCTION	3	  rum_bit_extract_query(bit, internal, int2, internal, internal),
1448	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1449	FUNCTION	5	  rum_bit_compare_prefix(bit,bit,int2, internal),
1450STORAGE		 bit;
1451
1452/*--------------------varbit-----------------------*/
1453
1454CREATE FUNCTION rum_varbit_extract_value(varbit, internal)
1455RETURNS internal
1456AS 'MODULE_PATHNAME'
1457LANGUAGE C STRICT IMMUTABLE;
1458
1459CREATE FUNCTION rum_varbit_compare_prefix(varbit, varbit, int2, internal)
1460RETURNS int4
1461AS 'MODULE_PATHNAME'
1462LANGUAGE C STRICT IMMUTABLE;
1463
1464CREATE FUNCTION rum_varbit_extract_query(varbit, internal, int2, internal, internal)
1465RETURNS internal
1466AS 'MODULE_PATHNAME'
1467LANGUAGE C STRICT IMMUTABLE;
1468
1469
1470CREATE OPERATOR CLASS rum_varbit_ops
1471DEFAULT FOR TYPE varbit USING rum
1472AS
1473	OPERATOR	1	  <		,
1474	OPERATOR	2	  <=	,
1475	OPERATOR	3	  =		,
1476	OPERATOR	4	  >=	,
1477	OPERATOR	5	  >		,
1478	FUNCTION	1	  varbitcmp(varbit,varbit),
1479	FUNCTION	2	  rum_varbit_extract_value(varbit, internal),
1480	FUNCTION	3	  rum_varbit_extract_query(varbit, internal, int2, internal, internal),
1481	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1482	FUNCTION	5	  rum_varbit_compare_prefix(varbit,varbit,int2, internal),
1483STORAGE		 varbit;
1484
1485/*--------------------numeric-----------------------*/
1486
1487CREATE FUNCTION rum_numeric_extract_value(numeric, internal)
1488RETURNS internal
1489AS 'MODULE_PATHNAME'
1490LANGUAGE C STRICT IMMUTABLE;
1491
1492CREATE FUNCTION rum_numeric_compare_prefix(numeric, numeric, int2, internal)
1493RETURNS int4
1494AS 'MODULE_PATHNAME'
1495LANGUAGE C STRICT IMMUTABLE;
1496
1497CREATE FUNCTION rum_numeric_extract_query(numeric, internal, int2, internal, internal)
1498RETURNS internal
1499AS 'MODULE_PATHNAME'
1500LANGUAGE C STRICT IMMUTABLE;
1501
1502
1503CREATE OPERATOR CLASS rum_numeric_ops
1504DEFAULT FOR TYPE numeric USING rum
1505AS
1506	OPERATOR	1	  <		,
1507	OPERATOR	2	  <=	,
1508	OPERATOR	3	  =		,
1509	OPERATOR	4	  >=	,
1510	OPERATOR	5	  >		,
1511	FUNCTION	1	  rum_numeric_cmp(numeric,numeric),
1512	FUNCTION	2	  rum_numeric_extract_value(numeric, internal),
1513	FUNCTION	3	  rum_numeric_extract_query(numeric, internal, int2, internal, internal),
1514	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1515	FUNCTION	5	  rum_numeric_compare_prefix(numeric,numeric,int2, internal),
1516STORAGE		 numeric;
1517
1518/*
1519 * RUM version 1.2
1520 */
1521
1522/*--------------------anyarray-----------------------*/
1523
1524CREATE FUNCTION rum_anyarray_config(internal)
1525RETURNS void
1526AS 'MODULE_PATHNAME'
1527LANGUAGE C IMMUTABLE STRICT;
1528
1529
1530CREATE OR REPLACE FUNCTION rum_anyarray_similar(anyarray,anyarray)
1531RETURNS bool
1532AS 'MODULE_PATHNAME'
1533LANGUAGE C STRICT STABLE;
1534
1535CREATE OPERATOR % (
1536	PROCEDURE = rum_anyarray_similar,
1537	LEFTARG = anyarray,
1538	RIGHTARG = anyarray,
1539	COMMUTATOR = '%',
1540	RESTRICT = contsel,
1541	JOIN = contjoinsel
1542);
1543
1544
1545CREATE OR REPLACE FUNCTION rum_anyarray_distance(anyarray,anyarray)
1546RETURNS float8
1547AS 'MODULE_PATHNAME'
1548LANGUAGE C STRICT STABLE;
1549
1550CREATE OPERATOR <=> (
1551	PROCEDURE = rum_anyarray_distance,
1552	LEFTARG = anyarray,
1553	RIGHTARG = anyarray,
1554	COMMUTATOR = '<=>'
1555);
1556
1557
1558CREATE FUNCTION rum_extract_anyarray(anyarray,internal,internal,internal,internal)
1559RETURNS internal
1560AS 'MODULE_PATHNAME'
1561LANGUAGE C IMMUTABLE STRICT;
1562
1563CREATE FUNCTION rum_extract_anyarray_query(anyarray,internal,smallint,internal,internal,internal,internal)
1564RETURNS internal
1565AS 'MODULE_PATHNAME'
1566LANGUAGE C IMMUTABLE STRICT;
1567
1568CREATE FUNCTION rum_anyarray_consistent(internal, smallint, anyarray, integer, internal, internal, internal, internal)
1569RETURNS bool
1570AS 'MODULE_PATHNAME'
1571LANGUAGE C IMMUTABLE STRICT;
1572
1573CREATE FUNCTION rum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal)
1574RETURNS float8
1575AS 'MODULE_PATHNAME'
1576LANGUAGE C IMMUTABLE STRICT;
1577
1578
1579CREATE OPERATOR CLASS rum_anyarray_ops
1580DEFAULT FOR TYPE anyarray USING rum
1581AS
1582	OPERATOR	1	&&  (anyarray, anyarray),
1583	OPERATOR	2	@>  (anyarray, anyarray),
1584	OPERATOR	3	<@  (anyarray, anyarray),
1585	OPERATOR	4	=   (anyarray, anyarray),
1586	OPERATOR	5	%   (anyarray, anyarray),
1587	OPERATOR	20	<=> (anyarray, anyarray) FOR ORDER BY pg_catalog.float_ops,
1588	--dispatch function 1 for concrete type
1589	FUNCTION	2	rum_extract_anyarray(anyarray,internal,internal,internal,internal),
1590	FUNCTION	3	rum_extract_anyarray_query(anyarray,internal,smallint,internal,internal,internal,internal),
1591	FUNCTION	4	rum_anyarray_consistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
1592	FUNCTION	6	rum_anyarray_config(internal),
1593	FUNCTION	8	rum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal),
1594	STORAGE anyelement;
1595
1596CREATE OPERATOR CLASS rum_anyarray_addon_ops
1597FOR TYPE anyarray USING rum
1598AS
1599	OPERATOR	1	&& (anyarray, anyarray),
1600	OPERATOR	2	@> (anyarray, anyarray),
1601	OPERATOR	3	<@ (anyarray, anyarray),
1602	OPERATOR	4	=  (anyarray, anyarray),
1603	--dispatch function 1 for concrete type
1604	FUNCTION	2	ginarrayextract(anyarray,internal,internal),
1605	FUNCTION	3	ginqueryarrayextract(anyarray,internal,smallint,internal,internal,internal,internal),
1606	FUNCTION	4	ginarrayconsistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
1607	STORAGE anyelement;
1608
1609/*--------------------int2-----------------------*/
1610
1611CREATE FUNCTION rum_int2_key_distance(int2, int2, smallint)
1612RETURNS float8
1613AS 'MODULE_PATHNAME'
1614LANGUAGE C IMMUTABLE STRICT;
1615
1616
1617ALTER OPERATOR FAMILY rum_int2_ops USING rum ADD
1618	FUNCTION	8	(int2,int2) rum_int2_key_distance(int2, int2, smallint);
1619
1620/*--------------------int4-----------------------*/
1621
1622CREATE FUNCTION rum_int4_key_distance(int4, int4, smallint)
1623RETURNS float8
1624AS 'MODULE_PATHNAME'
1625LANGUAGE C IMMUTABLE STRICT;
1626
1627
1628ALTER OPERATOR FAMILY rum_int4_ops USING rum ADD
1629	FUNCTION	8	(int4,int4) rum_int4_key_distance(int4, int4, smallint);
1630
1631/*--------------------int8-----------------------*/
1632
1633CREATE FUNCTION rum_int8_key_distance(int8, int8, smallint)
1634RETURNS float8
1635AS 'MODULE_PATHNAME'
1636LANGUAGE C IMMUTABLE STRICT;
1637
1638
1639ALTER OPERATOR FAMILY rum_int8_ops USING rum ADD
1640	FUNCTION	8	(int8,int8) rum_int8_key_distance(int8, int8, smallint);
1641
1642/*--------------------float4-----------------------*/
1643
1644CREATE FUNCTION rum_float4_key_distance(float4, float4, smallint)
1645RETURNS float8
1646AS 'MODULE_PATHNAME'
1647LANGUAGE C IMMUTABLE STRICT;
1648
1649
1650ALTER OPERATOR FAMILY rum_float4_ops USING rum ADD
1651	FUNCTION	8	(float4,float4) rum_float4_key_distance(float4, float4, smallint);
1652
1653/*--------------------float8-----------------------*/
1654
1655CREATE FUNCTION rum_float8_key_distance(float8, float8, smallint)
1656RETURNS float8
1657AS 'MODULE_PATHNAME'
1658LANGUAGE C IMMUTABLE STRICT;
1659
1660
1661ALTER OPERATOR FAMILY rum_float8_ops USING rum ADD
1662	FUNCTION	8	(float8,float8) rum_float8_key_distance(float8, float8, smallint);
1663
1664/*--------------------money-----------------------*/
1665
1666CREATE FUNCTION rum_money_key_distance(money, money, smallint)
1667RETURNS float8
1668AS 'MODULE_PATHNAME'
1669LANGUAGE C IMMUTABLE STRICT;
1670
1671
1672ALTER OPERATOR FAMILY rum_money_ops USING rum ADD
1673	FUNCTION	8	(money,money) rum_money_key_distance(money, money, smallint);
1674
1675/*--------------------oid-----------------------*/
1676
1677CREATE FUNCTION rum_oid_key_distance(oid, oid, smallint)
1678RETURNS float8
1679AS 'MODULE_PATHNAME'
1680LANGUAGE C IMMUTABLE STRICT;
1681
1682
1683ALTER OPERATOR FAMILY rum_oid_ops USING rum ADD
1684	FUNCTION	8	(oid,oid) rum_oid_key_distance(oid, oid, smallint);
1685
1686/*--------------------timestamp-----------------------*/
1687
1688CREATE FUNCTION rum_timestamp_key_distance(timestamp, timestamp, smallint)
1689RETURNS float8
1690AS 'MODULE_PATHNAME'
1691LANGUAGE C IMMUTABLE STRICT;
1692
1693
1694ALTER OPERATOR FAMILY rum_timestamp_ops USING rum ADD
1695	FUNCTION	8	(timestamp,timestamp) rum_timestamp_key_distance(timestamp, timestamp, smallint);
1696
1697/*--------------------timestamptz-----------------------*/
1698
1699CREATE FUNCTION rum_timestamptz_key_distance(timestamptz, timestamptz, smallint)
1700RETURNS float8
1701AS 'MODULE_PATHNAME'
1702LANGUAGE C IMMUTABLE STRICT;
1703
1704
1705ALTER OPERATOR FAMILY rum_timestamptz_ops USING rum ADD
1706	FUNCTION	8	(timestamptz,timestamptz) rum_timestamptz_key_distance(timestamptz, timestamptz, smallint);
1707
1708