1/*
2 * RUM version 1.1
3 */
4
5CREATE FUNCTION rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal)
6RETURNS bool
7AS 'MODULE_PATHNAME'
8LANGUAGE C STRICT IMMUTABLE;
9
10ALTER FUNCTION
11	rum_tsquery_timestamp_consistent (internal,smallint,tsvector,int,internal,internal,internal,internal)
12	RENAME TO rum_tsquery_addon_consistent;
13
14CREATE FUNCTION rum_numeric_cmp(numeric, numeric)
15RETURNS int4
16AS 'MODULE_PATHNAME'
17LANGUAGE C STRICT IMMUTABLE;
18
19CREATE OPERATOR CLASS rum_tsvector_addon_ops
20FOR TYPE tsvector USING rum
21AS
22	OPERATOR	1	@@ (tsvector, tsquery),
23	--support function
24	FUNCTION	1	gin_cmp_tslexeme(text, text),
25	FUNCTION	2	rum_extract_tsvector(tsvector,internal,internal,internal,internal),
26	FUNCTION	3	rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
27	FUNCTION	4	rum_tsquery_addon_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
28	FUNCTION	5	gin_cmp_prefix(text,text,smallint,internal),
29	FUNCTION	7	rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
30	STORAGE	 text;
31
32CREATE OPERATOR CLASS rum_tsvector_hash_addon_ops
33FOR TYPE tsvector USING rum
34AS
35	OPERATOR	1	@@ (tsvector, tsquery),
36	--support function
37	FUNCTION	1	btint4cmp(integer, integer),
38	FUNCTION	2	rum_extract_tsvector_hash(tsvector,internal,internal,internal,internal),
39	FUNCTION	3	rum_extract_tsquery_hash(tsquery,internal,smallint,internal,internal,internal,internal),
40	FUNCTION	4	rum_tsquery_addon_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
41	FUNCTION	7	rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
42	STORAGE	 integer;
43
44/*--------------------int2-----------------------*/
45
46CREATE FUNCTION rum_int2_extract_value(int2, internal)
47RETURNS internal
48AS 'MODULE_PATHNAME'
49LANGUAGE C STRICT IMMUTABLE;
50
51CREATE FUNCTION rum_int2_compare_prefix(int2, int2, int2, internal)
52RETURNS int4
53AS 'MODULE_PATHNAME'
54LANGUAGE C STRICT IMMUTABLE;
55
56CREATE FUNCTION rum_int2_extract_query(int2, internal, int2, internal, internal)
57RETURNS internal
58AS 'MODULE_PATHNAME'
59LANGUAGE C STRICT IMMUTABLE;
60
61
62
63CREATE FUNCTION rum_int2_distance(int2, int2)
64RETURNS float8
65AS 'MODULE_PATHNAME'
66LANGUAGE C IMMUTABLE STRICT;
67
68CREATE OPERATOR <=> (
69	PROCEDURE = rum_int2_distance,
70	LEFTARG = int2,
71	RIGHTARG = int2,
72	COMMUTATOR = <=>
73);
74
75CREATE FUNCTION rum_int2_left_distance(int2, int2)
76RETURNS float8
77AS 'MODULE_PATHNAME'
78LANGUAGE C IMMUTABLE STRICT;
79
80CREATE OPERATOR <=| (
81	PROCEDURE = rum_int2_left_distance,
82	LEFTARG = int2,
83	RIGHTARG = int2,
84	COMMUTATOR = |=>
85);
86
87CREATE FUNCTION rum_int2_right_distance(int2, int2)
88RETURNS float8
89AS 'MODULE_PATHNAME'
90LANGUAGE C IMMUTABLE STRICT;
91
92CREATE OPERATOR |=> (
93	PROCEDURE = rum_int2_right_distance,
94	LEFTARG = int2,
95	RIGHTARG = int2,
96	COMMUTATOR = <=|
97);
98
99CREATE FUNCTION rum_int2_outer_distance(int2, int2, smallint)
100RETURNS float8
101AS 'MODULE_PATHNAME'
102LANGUAGE C STRICT IMMUTABLE;
103
104CREATE FUNCTION rum_int2_config(internal)
105RETURNS void
106AS 'MODULE_PATHNAME'
107LANGUAGE C IMMUTABLE STRICT;
108
109
110
111CREATE OPERATOR CLASS rum_int2_ops
112DEFAULT FOR TYPE int2 USING rum
113AS
114	OPERATOR	1	<	,
115	OPERATOR	2	<=	,
116	OPERATOR	3	=	,
117	OPERATOR	4	>=	,
118	OPERATOR	5	>	,
119	OPERATOR	20	<=> (int2,int2) FOR ORDER BY pg_catalog.float_ops,
120	OPERATOR	21	<=| (int2,int2) FOR ORDER BY pg_catalog.float_ops,
121	OPERATOR	22	|=> (int2,int2) FOR ORDER BY pg_catalog.float_ops,
122	FUNCTION	1	btint2cmp(int2,int2),
123	FUNCTION	2	rum_int2_extract_value(int2, internal),
124	FUNCTION	3	rum_int2_extract_query(int2, internal, int2, internal, internal),
125	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
126	FUNCTION	5	rum_int2_compare_prefix(int2,int2,int2, internal),
127	-- support to int2 distance in rum_tsvector_addon_ops
128	FUNCTION	6	rum_int2_config(internal),
129	FUNCTION	9	rum_int2_outer_distance(int2, int2, smallint),
130STORAGE		 int2;
131
132/*--------------------int4-----------------------*/
133
134CREATE FUNCTION rum_int4_extract_value(int4, internal)
135RETURNS internal
136AS 'MODULE_PATHNAME'
137LANGUAGE C STRICT IMMUTABLE;
138
139CREATE FUNCTION rum_int4_compare_prefix(int4, int4, int2, internal)
140RETURNS int4
141AS 'MODULE_PATHNAME'
142LANGUAGE C STRICT IMMUTABLE;
143
144CREATE FUNCTION rum_int4_extract_query(int4, internal, int2, internal, internal)
145RETURNS internal
146AS 'MODULE_PATHNAME'
147LANGUAGE C STRICT IMMUTABLE;
148
149
150
151CREATE FUNCTION rum_int4_distance(int4, int4)
152RETURNS float8
153AS 'MODULE_PATHNAME'
154LANGUAGE C IMMUTABLE STRICT;
155
156CREATE OPERATOR <=> (
157	PROCEDURE = rum_int4_distance,
158	LEFTARG = int4,
159	RIGHTARG = int4,
160	COMMUTATOR = <=>
161);
162
163CREATE FUNCTION rum_int4_left_distance(int4, int4)
164RETURNS float8
165AS 'MODULE_PATHNAME'
166LANGUAGE C IMMUTABLE STRICT;
167
168CREATE OPERATOR <=| (
169	PROCEDURE = rum_int4_left_distance,
170	LEFTARG = int4,
171	RIGHTARG = int4,
172	COMMUTATOR = |=>
173);
174
175CREATE FUNCTION rum_int4_right_distance(int4, int4)
176RETURNS float8
177AS 'MODULE_PATHNAME'
178LANGUAGE C IMMUTABLE STRICT;
179
180CREATE OPERATOR |=> (
181	PROCEDURE = rum_int4_right_distance,
182	LEFTARG = int4,
183	RIGHTARG = int4,
184	COMMUTATOR = <=|
185);
186
187CREATE FUNCTION rum_int4_outer_distance(int4, int4, smallint)
188RETURNS float8
189AS 'MODULE_PATHNAME'
190LANGUAGE C STRICT IMMUTABLE;
191
192CREATE FUNCTION rum_int4_config(internal)
193RETURNS void
194AS 'MODULE_PATHNAME'
195LANGUAGE C IMMUTABLE STRICT;
196
197
198
199CREATE OPERATOR CLASS rum_int4_ops
200DEFAULT FOR TYPE int4 USING rum
201AS
202	OPERATOR	1	<	,
203	OPERATOR	2	<=	,
204	OPERATOR	3	=	,
205	OPERATOR	4	>=	,
206	OPERATOR	5	>	,
207	OPERATOR	20	<=> (int4,int4) FOR ORDER BY pg_catalog.float_ops,
208	OPERATOR	21	<=| (int4,int4) FOR ORDER BY pg_catalog.float_ops,
209	OPERATOR	22	|=> (int4,int4) FOR ORDER BY pg_catalog.float_ops,
210	FUNCTION	1	btint4cmp(int4,int4),
211	FUNCTION	2	rum_int4_extract_value(int4, internal),
212	FUNCTION	3	rum_int4_extract_query(int4, internal, int2, internal, internal),
213	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
214	FUNCTION	5	rum_int4_compare_prefix(int4,int4,int2, internal),
215	-- support to int4 distance in rum_tsvector_addon_ops
216	FUNCTION	6	rum_int4_config(internal),
217	FUNCTION	9	rum_int4_outer_distance(int4, int4, smallint),
218STORAGE		 int4;
219
220/*--------------------int8-----------------------*/
221
222CREATE FUNCTION rum_int8_extract_value(int8, internal)
223RETURNS internal
224AS 'MODULE_PATHNAME'
225LANGUAGE C STRICT IMMUTABLE;
226
227CREATE FUNCTION rum_int8_compare_prefix(int8, int8, int2, internal)
228RETURNS int4
229AS 'MODULE_PATHNAME'
230LANGUAGE C STRICT IMMUTABLE;
231
232CREATE FUNCTION rum_int8_extract_query(int8, internal, int2, internal, internal)
233RETURNS internal
234AS 'MODULE_PATHNAME'
235LANGUAGE C STRICT IMMUTABLE;
236
237
238
239CREATE FUNCTION rum_int8_distance(int8, int8)
240RETURNS float8
241AS 'MODULE_PATHNAME'
242LANGUAGE C IMMUTABLE STRICT;
243
244CREATE OPERATOR <=> (
245	PROCEDURE = rum_int8_distance,
246	LEFTARG = int8,
247	RIGHTARG = int8,
248	COMMUTATOR = <=>
249);
250
251CREATE FUNCTION rum_int8_left_distance(int8, int8)
252RETURNS float8
253AS 'MODULE_PATHNAME'
254LANGUAGE C IMMUTABLE STRICT;
255
256CREATE OPERATOR <=| (
257	PROCEDURE = rum_int8_left_distance,
258	LEFTARG = int8,
259	RIGHTARG = int8,
260	COMMUTATOR = |=>
261);
262
263CREATE FUNCTION rum_int8_right_distance(int8, int8)
264RETURNS float8
265AS 'MODULE_PATHNAME'
266LANGUAGE C IMMUTABLE STRICT;
267
268CREATE OPERATOR |=> (
269	PROCEDURE = rum_int8_right_distance,
270	LEFTARG = int8,
271	RIGHTARG = int8,
272	COMMUTATOR = <=|
273);
274
275CREATE FUNCTION rum_int8_outer_distance(int8, int8, smallint)
276RETURNS float8
277AS 'MODULE_PATHNAME'
278LANGUAGE C STRICT IMMUTABLE;
279
280CREATE FUNCTION rum_int8_config(internal)
281RETURNS void
282AS 'MODULE_PATHNAME'
283LANGUAGE C IMMUTABLE STRICT;
284
285
286
287CREATE OPERATOR CLASS rum_int8_ops
288DEFAULT FOR TYPE int8 USING rum
289AS
290	OPERATOR	1	<	,
291	OPERATOR	2	<=	,
292	OPERATOR	3	=	,
293	OPERATOR	4	>=	,
294	OPERATOR	5	>	,
295	OPERATOR	20	<=> (int8,int8) FOR ORDER BY pg_catalog.float_ops,
296	OPERATOR	21	<=| (int8,int8) FOR ORDER BY pg_catalog.float_ops,
297	OPERATOR	22	|=> (int8,int8) FOR ORDER BY pg_catalog.float_ops,
298	FUNCTION	1	btint8cmp(int8,int8),
299	FUNCTION	2	rum_int8_extract_value(int8, internal),
300	FUNCTION	3	rum_int8_extract_query(int8, internal, int2, internal, internal),
301	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
302	FUNCTION	5	rum_int8_compare_prefix(int8,int8,int2, internal),
303	-- support to int8 distance in rum_tsvector_addon_ops
304	FUNCTION	6	rum_int8_config(internal),
305	FUNCTION	9	rum_int8_outer_distance(int8, int8, smallint),
306STORAGE		 int8;
307
308/*--------------------float4-----------------------*/
309
310CREATE FUNCTION rum_float4_extract_value(float4, internal)
311RETURNS internal
312AS 'MODULE_PATHNAME'
313LANGUAGE C STRICT IMMUTABLE;
314
315CREATE FUNCTION rum_float4_compare_prefix(float4, float4, int2, internal)
316RETURNS int4
317AS 'MODULE_PATHNAME'
318LANGUAGE C STRICT IMMUTABLE;
319
320CREATE FUNCTION rum_float4_extract_query(float4, internal, int2, internal, internal)
321RETURNS internal
322AS 'MODULE_PATHNAME'
323LANGUAGE C STRICT IMMUTABLE;
324
325
326
327CREATE FUNCTION rum_float4_distance(float4, float4)
328RETURNS float8
329AS 'MODULE_PATHNAME'
330LANGUAGE C IMMUTABLE STRICT;
331
332CREATE OPERATOR <=> (
333	PROCEDURE = rum_float4_distance,
334	LEFTARG = float4,
335	RIGHTARG = float4,
336	COMMUTATOR = <=>
337);
338
339CREATE FUNCTION rum_float4_left_distance(float4, float4)
340RETURNS float8
341AS 'MODULE_PATHNAME'
342LANGUAGE C IMMUTABLE STRICT;
343
344CREATE OPERATOR <=| (
345	PROCEDURE = rum_float4_left_distance,
346	LEFTARG = float4,
347	RIGHTARG = float4,
348	COMMUTATOR = |=>
349);
350
351CREATE FUNCTION rum_float4_right_distance(float4, float4)
352RETURNS float8
353AS 'MODULE_PATHNAME'
354LANGUAGE C IMMUTABLE STRICT;
355
356CREATE OPERATOR |=> (
357	PROCEDURE = rum_float4_right_distance,
358	LEFTARG = float4,
359	RIGHTARG = float4,
360	COMMUTATOR = <=|
361);
362
363CREATE FUNCTION rum_float4_outer_distance(float4, float4, smallint)
364RETURNS float8
365AS 'MODULE_PATHNAME'
366LANGUAGE C STRICT IMMUTABLE;
367
368CREATE FUNCTION rum_float4_config(internal)
369RETURNS void
370AS 'MODULE_PATHNAME'
371LANGUAGE C IMMUTABLE STRICT;
372
373
374
375CREATE OPERATOR CLASS rum_float4_ops
376DEFAULT FOR TYPE float4 USING rum
377AS
378	OPERATOR	1	<	,
379	OPERATOR	2	<=	,
380	OPERATOR	3	=	,
381	OPERATOR	4	>=	,
382	OPERATOR	5	>	,
383	OPERATOR	20	<=> (float4,float4) FOR ORDER BY pg_catalog.float_ops,
384	OPERATOR	21	<=| (float4,float4) FOR ORDER BY pg_catalog.float_ops,
385	OPERATOR	22	|=> (float4,float4) FOR ORDER BY pg_catalog.float_ops,
386	FUNCTION	1	btfloat4cmp(float4,float4),
387	FUNCTION	2	rum_float4_extract_value(float4, internal),
388	FUNCTION	3	rum_float4_extract_query(float4, internal, int2, internal, internal),
389	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
390	FUNCTION	5	rum_float4_compare_prefix(float4,float4,int2, internal),
391	-- support to float4 distance in rum_tsvector_addon_ops
392	FUNCTION	6	rum_float4_config(internal),
393	FUNCTION	9	rum_float4_outer_distance(float4, float4, smallint),
394STORAGE		 float4;
395
396/*--------------------float8-----------------------*/
397
398CREATE FUNCTION rum_float8_extract_value(float8, internal)
399RETURNS internal
400AS 'MODULE_PATHNAME'
401LANGUAGE C STRICT IMMUTABLE;
402
403CREATE FUNCTION rum_float8_compare_prefix(float8, float8, int2, internal)
404RETURNS int4
405AS 'MODULE_PATHNAME'
406LANGUAGE C STRICT IMMUTABLE;
407
408CREATE FUNCTION rum_float8_extract_query(float8, internal, int2, internal, internal)
409RETURNS internal
410AS 'MODULE_PATHNAME'
411LANGUAGE C STRICT IMMUTABLE;
412
413
414
415CREATE FUNCTION rum_float8_distance(float8, float8)
416RETURNS float8
417AS 'MODULE_PATHNAME'
418LANGUAGE C IMMUTABLE STRICT;
419
420CREATE OPERATOR <=> (
421	PROCEDURE = rum_float8_distance,
422	LEFTARG = float8,
423	RIGHTARG = float8,
424	COMMUTATOR = <=>
425);
426
427CREATE FUNCTION rum_float8_left_distance(float8, float8)
428RETURNS float8
429AS 'MODULE_PATHNAME'
430LANGUAGE C IMMUTABLE STRICT;
431
432CREATE OPERATOR <=| (
433	PROCEDURE = rum_float8_left_distance,
434	LEFTARG = float8,
435	RIGHTARG = float8,
436	COMMUTATOR = |=>
437);
438
439CREATE FUNCTION rum_float8_right_distance(float8, float8)
440RETURNS float8
441AS 'MODULE_PATHNAME'
442LANGUAGE C IMMUTABLE STRICT;
443
444CREATE OPERATOR |=> (
445	PROCEDURE = rum_float8_right_distance,
446	LEFTARG = float8,
447	RIGHTARG = float8,
448	COMMUTATOR = <=|
449);
450
451CREATE FUNCTION rum_float8_outer_distance(float8, float8, smallint)
452RETURNS float8
453AS 'MODULE_PATHNAME'
454LANGUAGE C STRICT IMMUTABLE;
455
456CREATE FUNCTION rum_float8_config(internal)
457RETURNS void
458AS 'MODULE_PATHNAME'
459LANGUAGE C IMMUTABLE STRICT;
460
461
462
463CREATE OPERATOR CLASS rum_float8_ops
464DEFAULT FOR TYPE float8 USING rum
465AS
466	OPERATOR	1	<	,
467	OPERATOR	2	<=	,
468	OPERATOR	3	=	,
469	OPERATOR	4	>=	,
470	OPERATOR	5	>	,
471	OPERATOR	20	<=> (float8,float8) FOR ORDER BY pg_catalog.float_ops,
472	OPERATOR	21	<=| (float8,float8) FOR ORDER BY pg_catalog.float_ops,
473	OPERATOR	22	|=> (float8,float8) FOR ORDER BY pg_catalog.float_ops,
474	FUNCTION	1	btfloat8cmp(float8,float8),
475	FUNCTION	2	rum_float8_extract_value(float8, internal),
476	FUNCTION	3	rum_float8_extract_query(float8, internal, int2, internal, internal),
477	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
478	FUNCTION	5	rum_float8_compare_prefix(float8,float8,int2, internal),
479	-- support to float8 distance in rum_tsvector_addon_ops
480	FUNCTION	6	rum_float8_config(internal),
481	FUNCTION	9	rum_float8_outer_distance(float8, float8, smallint),
482STORAGE		 float8;
483
484/*--------------------money-----------------------*/
485
486CREATE FUNCTION rum_money_extract_value(money, internal)
487RETURNS internal
488AS 'MODULE_PATHNAME'
489LANGUAGE C STRICT IMMUTABLE;
490
491CREATE FUNCTION rum_money_compare_prefix(money, money, int2, internal)
492RETURNS int4
493AS 'MODULE_PATHNAME'
494LANGUAGE C STRICT IMMUTABLE;
495
496CREATE FUNCTION rum_money_extract_query(money, internal, int2, internal, internal)
497RETURNS internal
498AS 'MODULE_PATHNAME'
499LANGUAGE C STRICT IMMUTABLE;
500
501
502
503CREATE FUNCTION rum_money_distance(money, money)
504RETURNS float8
505AS 'MODULE_PATHNAME'
506LANGUAGE C IMMUTABLE STRICT;
507
508CREATE OPERATOR <=> (
509	PROCEDURE = rum_money_distance,
510	LEFTARG = money,
511	RIGHTARG = money,
512	COMMUTATOR = <=>
513);
514
515CREATE FUNCTION rum_money_left_distance(money, money)
516RETURNS float8
517AS 'MODULE_PATHNAME'
518LANGUAGE C IMMUTABLE STRICT;
519
520CREATE OPERATOR <=| (
521	PROCEDURE = rum_money_left_distance,
522	LEFTARG = money,
523	RIGHTARG = money,
524	COMMUTATOR = |=>
525);
526
527CREATE FUNCTION rum_money_right_distance(money, money)
528RETURNS float8
529AS 'MODULE_PATHNAME'
530LANGUAGE C IMMUTABLE STRICT;
531
532CREATE OPERATOR |=> (
533	PROCEDURE = rum_money_right_distance,
534	LEFTARG = money,
535	RIGHTARG = money,
536	COMMUTATOR = <=|
537);
538
539CREATE FUNCTION rum_money_outer_distance(money, money, smallint)
540RETURNS float8
541AS 'MODULE_PATHNAME'
542LANGUAGE C STRICT IMMUTABLE;
543
544CREATE FUNCTION rum_money_config(internal)
545RETURNS void
546AS 'MODULE_PATHNAME'
547LANGUAGE C IMMUTABLE STRICT;
548
549
550
551CREATE OPERATOR CLASS rum_money_ops
552DEFAULT FOR TYPE money USING rum
553AS
554	OPERATOR	1	<	,
555	OPERATOR	2	<=	,
556	OPERATOR	3	=	,
557	OPERATOR	4	>=	,
558	OPERATOR	5	>	,
559	OPERATOR	20	<=> (money,money) FOR ORDER BY pg_catalog.float_ops,
560	OPERATOR	21	<=| (money,money) FOR ORDER BY pg_catalog.float_ops,
561	OPERATOR	22	|=> (money,money) FOR ORDER BY pg_catalog.float_ops,
562	FUNCTION	1	cash_cmp(money,money),
563	FUNCTION	2	rum_money_extract_value(money, internal),
564	FUNCTION	3	rum_money_extract_query(money, internal, int2, internal, internal),
565	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
566	FUNCTION	5	rum_money_compare_prefix(money,money,int2, internal),
567	-- support to money distance in rum_tsvector_addon_ops
568	FUNCTION	6	rum_money_config(internal),
569	FUNCTION	9	rum_money_outer_distance(money, money, smallint),
570STORAGE		 money;
571
572/*--------------------oid-----------------------*/
573
574CREATE FUNCTION rum_oid_extract_value(oid, internal)
575RETURNS internal
576AS 'MODULE_PATHNAME'
577LANGUAGE C STRICT IMMUTABLE;
578
579CREATE FUNCTION rum_oid_compare_prefix(oid, oid, int2, internal)
580RETURNS int4
581AS 'MODULE_PATHNAME'
582LANGUAGE C STRICT IMMUTABLE;
583
584CREATE FUNCTION rum_oid_extract_query(oid, internal, int2, internal, internal)
585RETURNS internal
586AS 'MODULE_PATHNAME'
587LANGUAGE C STRICT IMMUTABLE;
588
589
590
591CREATE FUNCTION rum_oid_distance(oid, oid)
592RETURNS float8
593AS 'MODULE_PATHNAME'
594LANGUAGE C IMMUTABLE STRICT;
595
596CREATE OPERATOR <=> (
597	PROCEDURE = rum_oid_distance,
598	LEFTARG = oid,
599	RIGHTARG = oid,
600	COMMUTATOR = <=>
601);
602
603CREATE FUNCTION rum_oid_left_distance(oid, oid)
604RETURNS float8
605AS 'MODULE_PATHNAME'
606LANGUAGE C IMMUTABLE STRICT;
607
608CREATE OPERATOR <=| (
609	PROCEDURE = rum_oid_left_distance,
610	LEFTARG = oid,
611	RIGHTARG = oid,
612	COMMUTATOR = |=>
613);
614
615CREATE FUNCTION rum_oid_right_distance(oid, oid)
616RETURNS float8
617AS 'MODULE_PATHNAME'
618LANGUAGE C IMMUTABLE STRICT;
619
620CREATE OPERATOR |=> (
621	PROCEDURE = rum_oid_right_distance,
622	LEFTARG = oid,
623	RIGHTARG = oid,
624	COMMUTATOR = <=|
625);
626
627CREATE FUNCTION rum_oid_outer_distance(oid, oid, smallint)
628RETURNS float8
629AS 'MODULE_PATHNAME'
630LANGUAGE C STRICT IMMUTABLE;
631
632CREATE FUNCTION rum_oid_config(internal)
633RETURNS void
634AS 'MODULE_PATHNAME'
635LANGUAGE C IMMUTABLE STRICT;
636
637
638
639CREATE OPERATOR CLASS rum_oid_ops
640DEFAULT FOR TYPE oid USING rum
641AS
642	OPERATOR	1	<	,
643	OPERATOR	2	<=	,
644	OPERATOR	3	=	,
645	OPERATOR	4	>=	,
646	OPERATOR	5	>	,
647	OPERATOR	20	<=> (oid,oid) FOR ORDER BY pg_catalog.float_ops,
648	OPERATOR	21	<=| (oid,oid) FOR ORDER BY pg_catalog.float_ops,
649	OPERATOR	22	|=> (oid,oid) FOR ORDER BY pg_catalog.float_ops,
650	FUNCTION	1	btoidcmp(oid,oid),
651	FUNCTION	2	rum_oid_extract_value(oid, internal),
652	FUNCTION	3	rum_oid_extract_query(oid, internal, int2, internal, internal),
653	FUNCTION	4	rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
654	FUNCTION	5	rum_oid_compare_prefix(oid,oid,int2, internal),
655	-- support to oid distance in rum_tsvector_addon_ops
656	FUNCTION	6	rum_oid_config(internal),
657	FUNCTION	9	rum_oid_outer_distance(oid, oid, smallint),
658STORAGE		 oid;
659
660/*--------------------time-----------------------*/
661
662CREATE FUNCTION rum_time_extract_value(time, internal)
663RETURNS internal
664AS 'MODULE_PATHNAME'
665LANGUAGE C STRICT IMMUTABLE;
666
667CREATE FUNCTION rum_time_compare_prefix(time, time, int2, internal)
668RETURNS int4
669AS 'MODULE_PATHNAME'
670LANGUAGE C STRICT IMMUTABLE;
671
672CREATE FUNCTION rum_time_extract_query(time, internal, int2, internal, internal)
673RETURNS internal
674AS 'MODULE_PATHNAME'
675LANGUAGE C STRICT IMMUTABLE;
676
677
678CREATE OPERATOR CLASS rum_time_ops
679DEFAULT FOR TYPE time USING rum
680AS
681	OPERATOR	1	  <		,
682	OPERATOR	2	  <=	,
683	OPERATOR	3	  =		,
684	OPERATOR	4	  >=	,
685	OPERATOR	5	  >		,
686	FUNCTION	1	  time_cmp(time,time),
687	FUNCTION	2	  rum_time_extract_value(time, internal),
688	FUNCTION	3	  rum_time_extract_query(time, internal, int2, internal, internal),
689	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
690	FUNCTION	5	  rum_time_compare_prefix(time,time,int2, internal),
691STORAGE		 time;
692
693/*--------------------timetz-----------------------*/
694
695CREATE FUNCTION rum_timetz_extract_value(timetz, internal)
696RETURNS internal
697AS 'MODULE_PATHNAME'
698LANGUAGE C STRICT IMMUTABLE;
699
700CREATE FUNCTION rum_timetz_compare_prefix(timetz, timetz, int2, internal)
701RETURNS int4
702AS 'MODULE_PATHNAME'
703LANGUAGE C STRICT IMMUTABLE;
704
705CREATE FUNCTION rum_timetz_extract_query(timetz, internal, int2, internal, internal)
706RETURNS internal
707AS 'MODULE_PATHNAME'
708LANGUAGE C STRICT IMMUTABLE;
709
710
711CREATE OPERATOR CLASS rum_timetz_ops
712DEFAULT FOR TYPE timetz USING rum
713AS
714	OPERATOR	1	  <		,
715	OPERATOR	2	  <=	,
716	OPERATOR	3	  =		,
717	OPERATOR	4	  >=	,
718	OPERATOR	5	  >		,
719	FUNCTION	1	  timetz_cmp(timetz,timetz),
720	FUNCTION	2	  rum_timetz_extract_value(timetz, internal),
721	FUNCTION	3	  rum_timetz_extract_query(timetz, internal, int2, internal, internal),
722	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
723	FUNCTION	5	  rum_timetz_compare_prefix(timetz,timetz,int2, internal),
724STORAGE		 timetz;
725
726/*--------------------date-----------------------*/
727
728CREATE FUNCTION rum_date_extract_value(date, internal)
729RETURNS internal
730AS 'MODULE_PATHNAME'
731LANGUAGE C STRICT IMMUTABLE;
732
733CREATE FUNCTION rum_date_compare_prefix(date, date, int2, internal)
734RETURNS int4
735AS 'MODULE_PATHNAME'
736LANGUAGE C STRICT IMMUTABLE;
737
738CREATE FUNCTION rum_date_extract_query(date, internal, int2, internal, internal)
739RETURNS internal
740AS 'MODULE_PATHNAME'
741LANGUAGE C STRICT IMMUTABLE;
742
743
744CREATE OPERATOR CLASS rum_date_ops
745DEFAULT FOR TYPE date USING rum
746AS
747	OPERATOR	1	  <		,
748	OPERATOR	2	  <=	,
749	OPERATOR	3	  =		,
750	OPERATOR	4	  >=	,
751	OPERATOR	5	  >		,
752	FUNCTION	1	  date_cmp(date,date),
753	FUNCTION	2	  rum_date_extract_value(date, internal),
754	FUNCTION	3	  rum_date_extract_query(date, internal, int2, internal, internal),
755	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
756	FUNCTION	5	  rum_date_compare_prefix(date,date,int2, internal),
757STORAGE		 date;
758
759/*--------------------interval-----------------------*/
760
761CREATE FUNCTION rum_interval_extract_value(interval, internal)
762RETURNS internal
763AS 'MODULE_PATHNAME'
764LANGUAGE C STRICT IMMUTABLE;
765
766CREATE FUNCTION rum_interval_compare_prefix(interval, interval, int2, internal)
767RETURNS int4
768AS 'MODULE_PATHNAME'
769LANGUAGE C STRICT IMMUTABLE;
770
771CREATE FUNCTION rum_interval_extract_query(interval, internal, int2, internal, internal)
772RETURNS internal
773AS 'MODULE_PATHNAME'
774LANGUAGE C STRICT IMMUTABLE;
775
776
777CREATE OPERATOR CLASS rum_interval_ops
778DEFAULT FOR TYPE interval USING rum
779AS
780	OPERATOR	1	  <		,
781	OPERATOR	2	  <=	,
782	OPERATOR	3	  =		,
783	OPERATOR	4	  >=	,
784	OPERATOR	5	  >		,
785	FUNCTION	1	  interval_cmp(interval,interval),
786	FUNCTION	2	  rum_interval_extract_value(interval, internal),
787	FUNCTION	3	  rum_interval_extract_query(interval, internal, int2, internal, internal),
788	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
789	FUNCTION	5	  rum_interval_compare_prefix(interval,interval,int2, internal),
790STORAGE		 interval;
791
792/*--------------------macaddr-----------------------*/
793
794CREATE FUNCTION rum_macaddr_extract_value(macaddr, internal)
795RETURNS internal
796AS 'MODULE_PATHNAME'
797LANGUAGE C STRICT IMMUTABLE;
798
799CREATE FUNCTION rum_macaddr_compare_prefix(macaddr, macaddr, int2, internal)
800RETURNS int4
801AS 'MODULE_PATHNAME'
802LANGUAGE C STRICT IMMUTABLE;
803
804CREATE FUNCTION rum_macaddr_extract_query(macaddr, internal, int2, internal, internal)
805RETURNS internal
806AS 'MODULE_PATHNAME'
807LANGUAGE C STRICT IMMUTABLE;
808
809
810CREATE OPERATOR CLASS rum_macaddr_ops
811DEFAULT FOR TYPE macaddr USING rum
812AS
813	OPERATOR	1	  <		,
814	OPERATOR	2	  <=	,
815	OPERATOR	3	  =		,
816	OPERATOR	4	  >=	,
817	OPERATOR	5	  >		,
818	FUNCTION	1	  macaddr_cmp(macaddr,macaddr),
819	FUNCTION	2	  rum_macaddr_extract_value(macaddr, internal),
820	FUNCTION	3	  rum_macaddr_extract_query(macaddr, internal, int2, internal, internal),
821	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
822	FUNCTION	5	  rum_macaddr_compare_prefix(macaddr,macaddr,int2, internal),
823STORAGE		 macaddr;
824
825/*--------------------inet-----------------------*/
826
827CREATE FUNCTION rum_inet_extract_value(inet, internal)
828RETURNS internal
829AS 'MODULE_PATHNAME'
830LANGUAGE C STRICT IMMUTABLE;
831
832CREATE FUNCTION rum_inet_compare_prefix(inet, inet, int2, internal)
833RETURNS int4
834AS 'MODULE_PATHNAME'
835LANGUAGE C STRICT IMMUTABLE;
836
837CREATE FUNCTION rum_inet_extract_query(inet, internal, int2, internal, internal)
838RETURNS internal
839AS 'MODULE_PATHNAME'
840LANGUAGE C STRICT IMMUTABLE;
841
842
843CREATE OPERATOR CLASS rum_inet_ops
844DEFAULT FOR TYPE inet USING rum
845AS
846	OPERATOR	1	  <		,
847	OPERATOR	2	  <=	,
848	OPERATOR	3	  =		,
849	OPERATOR	4	  >=	,
850	OPERATOR	5	  >		,
851	FUNCTION	1	  network_cmp(inet,inet),
852	FUNCTION	2	  rum_inet_extract_value(inet, internal),
853	FUNCTION	3	  rum_inet_extract_query(inet, internal, int2, internal, internal),
854	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
855	FUNCTION	5	  rum_inet_compare_prefix(inet,inet,int2, internal),
856STORAGE		 inet;
857
858/*--------------------cidr-----------------------*/
859
860CREATE FUNCTION rum_cidr_extract_value(cidr, internal)
861RETURNS internal
862AS 'MODULE_PATHNAME'
863LANGUAGE C STRICT IMMUTABLE;
864
865CREATE FUNCTION rum_cidr_compare_prefix(cidr, cidr, int2, internal)
866RETURNS int4
867AS 'MODULE_PATHNAME'
868LANGUAGE C STRICT IMMUTABLE;
869
870CREATE FUNCTION rum_cidr_extract_query(cidr, internal, int2, internal, internal)
871RETURNS internal
872AS 'MODULE_PATHNAME'
873LANGUAGE C STRICT IMMUTABLE;
874
875
876CREATE OPERATOR CLASS rum_cidr_ops
877DEFAULT FOR TYPE cidr USING rum
878AS
879	OPERATOR	1	  <		(inet, inet),
880	OPERATOR	2	  <=	(inet, inet),
881	OPERATOR	3	  =		(inet, inet),
882	OPERATOR	4	  >=	(inet, inet),
883	OPERATOR	5	  >		(inet, inet),
884	FUNCTION	1	  network_cmp(inet,inet),
885	FUNCTION	2	  rum_cidr_extract_value(cidr, internal),
886	FUNCTION	3	  rum_cidr_extract_query(cidr, internal, int2, internal, internal),
887	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
888	FUNCTION	5	  rum_cidr_compare_prefix(cidr,cidr,int2, internal),
889STORAGE		 cidr;
890
891/*--------------------text-----------------------*/
892
893CREATE FUNCTION rum_text_extract_value(text, internal)
894RETURNS internal
895AS 'MODULE_PATHNAME'
896LANGUAGE C STRICT IMMUTABLE;
897
898CREATE FUNCTION rum_text_compare_prefix(text, text, int2, internal)
899RETURNS int4
900AS 'MODULE_PATHNAME'
901LANGUAGE C STRICT IMMUTABLE;
902
903CREATE FUNCTION rum_text_extract_query(text, internal, int2, internal, internal)
904RETURNS internal
905AS 'MODULE_PATHNAME'
906LANGUAGE C STRICT IMMUTABLE;
907
908
909CREATE OPERATOR CLASS rum_text_ops
910DEFAULT FOR TYPE text USING rum
911AS
912	OPERATOR	1	  <		,
913	OPERATOR	2	  <=	,
914	OPERATOR	3	  =		,
915	OPERATOR	4	  >=	,
916	OPERATOR	5	  >		,
917	FUNCTION	1	  bttextcmp(text,text),
918	FUNCTION	2	  rum_text_extract_value(text, internal),
919	FUNCTION	3	  rum_text_extract_query(text, internal, int2, internal, internal),
920	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
921	FUNCTION	5	  rum_text_compare_prefix(text,text,int2, internal),
922STORAGE		 text;
923
924/*--------------------varchar-----------------------*/
925
926
927CREATE OPERATOR CLASS rum_varchar_ops
928DEFAULT FOR TYPE varchar USING rum
929AS
930	OPERATOR	1	  <		(text, text),
931	OPERATOR	2	  <=	(text, text),
932	OPERATOR	3	  =		(text, text),
933	OPERATOR	4	  >=	(text, text),
934	OPERATOR	5	  >		(text, text),
935	FUNCTION	1	  bttextcmp(text,text),
936	FUNCTION	2	  rum_text_extract_value(text, internal),
937	FUNCTION	3	  rum_text_extract_query(text, internal, int2, internal, internal),
938	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
939	FUNCTION	5	  rum_text_compare_prefix(text,text,int2, internal),
940STORAGE		 varchar;
941
942/*--------------------"char"-----------------------*/
943
944CREATE FUNCTION rum_char_extract_value("char", internal)
945RETURNS internal
946AS 'MODULE_PATHNAME'
947LANGUAGE C STRICT IMMUTABLE;
948
949CREATE FUNCTION rum_char_compare_prefix("char", "char", int2, internal)
950RETURNS int4
951AS 'MODULE_PATHNAME'
952LANGUAGE C STRICT IMMUTABLE;
953
954CREATE FUNCTION rum_char_extract_query("char", internal, int2, internal, internal)
955RETURNS internal
956AS 'MODULE_PATHNAME'
957LANGUAGE C STRICT IMMUTABLE;
958
959
960CREATE OPERATOR CLASS rum_char_ops
961DEFAULT FOR TYPE "char" USING rum
962AS
963	OPERATOR	1	  <		,
964	OPERATOR	2	  <=	,
965	OPERATOR	3	  =		,
966	OPERATOR	4	  >=	,
967	OPERATOR	5	  >		,
968	FUNCTION	1	  btcharcmp("char","char"),
969	FUNCTION	2	  rum_char_extract_value("char", internal),
970	FUNCTION	3	  rum_char_extract_query("char", internal, int2, internal, internal),
971	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
972	FUNCTION	5	  rum_char_compare_prefix("char","char",int2, internal),
973STORAGE		 "char";
974
975/*--------------------bytea-----------------------*/
976
977CREATE FUNCTION rum_bytea_extract_value(bytea, internal)
978RETURNS internal
979AS 'MODULE_PATHNAME'
980LANGUAGE C STRICT IMMUTABLE;
981
982CREATE FUNCTION rum_bytea_compare_prefix(bytea, bytea, int2, internal)
983RETURNS int4
984AS 'MODULE_PATHNAME'
985LANGUAGE C STRICT IMMUTABLE;
986
987CREATE FUNCTION rum_bytea_extract_query(bytea, internal, int2, internal, internal)
988RETURNS internal
989AS 'MODULE_PATHNAME'
990LANGUAGE C STRICT IMMUTABLE;
991
992
993CREATE OPERATOR CLASS rum_bytea_ops
994DEFAULT FOR TYPE bytea USING rum
995AS
996	OPERATOR	1	  <		,
997	OPERATOR	2	  <=	,
998	OPERATOR	3	  =		,
999	OPERATOR	4	  >=	,
1000	OPERATOR	5	  >		,
1001	FUNCTION	1	  byteacmp(bytea,bytea),
1002	FUNCTION	2	  rum_bytea_extract_value(bytea, internal),
1003	FUNCTION	3	  rum_bytea_extract_query(bytea, internal, int2, internal, internal),
1004	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1005	FUNCTION	5	  rum_bytea_compare_prefix(bytea,bytea,int2, internal),
1006STORAGE		 bytea;
1007
1008/*--------------------bit-----------------------*/
1009
1010CREATE FUNCTION rum_bit_extract_value(bit, internal)
1011RETURNS internal
1012AS 'MODULE_PATHNAME'
1013LANGUAGE C STRICT IMMUTABLE;
1014
1015CREATE FUNCTION rum_bit_compare_prefix(bit, bit, int2, internal)
1016RETURNS int4
1017AS 'MODULE_PATHNAME'
1018LANGUAGE C STRICT IMMUTABLE;
1019
1020CREATE FUNCTION rum_bit_extract_query(bit, internal, int2, internal, internal)
1021RETURNS internal
1022AS 'MODULE_PATHNAME'
1023LANGUAGE C STRICT IMMUTABLE;
1024
1025
1026CREATE OPERATOR CLASS rum_bit_ops
1027DEFAULT FOR TYPE bit USING rum
1028AS
1029	OPERATOR	1	  <		,
1030	OPERATOR	2	  <=	,
1031	OPERATOR	3	  =		,
1032	OPERATOR	4	  >=	,
1033	OPERATOR	5	  >		,
1034	FUNCTION	1	  bitcmp(bit,bit),
1035	FUNCTION	2	  rum_bit_extract_value(bit, internal),
1036	FUNCTION	3	  rum_bit_extract_query(bit, internal, int2, internal, internal),
1037	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1038	FUNCTION	5	  rum_bit_compare_prefix(bit,bit,int2, internal),
1039STORAGE		 bit;
1040
1041/*--------------------varbit-----------------------*/
1042
1043CREATE FUNCTION rum_varbit_extract_value(varbit, internal)
1044RETURNS internal
1045AS 'MODULE_PATHNAME'
1046LANGUAGE C STRICT IMMUTABLE;
1047
1048CREATE FUNCTION rum_varbit_compare_prefix(varbit, varbit, int2, internal)
1049RETURNS int4
1050AS 'MODULE_PATHNAME'
1051LANGUAGE C STRICT IMMUTABLE;
1052
1053CREATE FUNCTION rum_varbit_extract_query(varbit, internal, int2, internal, internal)
1054RETURNS internal
1055AS 'MODULE_PATHNAME'
1056LANGUAGE C STRICT IMMUTABLE;
1057
1058
1059CREATE OPERATOR CLASS rum_varbit_ops
1060DEFAULT FOR TYPE varbit USING rum
1061AS
1062	OPERATOR	1	  <		,
1063	OPERATOR	2	  <=	,
1064	OPERATOR	3	  =		,
1065	OPERATOR	4	  >=	,
1066	OPERATOR	5	  >		,
1067	FUNCTION	1	  varbitcmp(varbit,varbit),
1068	FUNCTION	2	  rum_varbit_extract_value(varbit, internal),
1069	FUNCTION	3	  rum_varbit_extract_query(varbit, internal, int2, internal, internal),
1070	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1071	FUNCTION	5	  rum_varbit_compare_prefix(varbit,varbit,int2, internal),
1072STORAGE		 varbit;
1073
1074/*--------------------numeric-----------------------*/
1075
1076CREATE FUNCTION rum_numeric_extract_value(numeric, internal)
1077RETURNS internal
1078AS 'MODULE_PATHNAME'
1079LANGUAGE C STRICT IMMUTABLE;
1080
1081CREATE FUNCTION rum_numeric_compare_prefix(numeric, numeric, int2, internal)
1082RETURNS int4
1083AS 'MODULE_PATHNAME'
1084LANGUAGE C STRICT IMMUTABLE;
1085
1086CREATE FUNCTION rum_numeric_extract_query(numeric, internal, int2, internal, internal)
1087RETURNS internal
1088AS 'MODULE_PATHNAME'
1089LANGUAGE C STRICT IMMUTABLE;
1090
1091
1092CREATE OPERATOR CLASS rum_numeric_ops
1093DEFAULT FOR TYPE numeric USING rum
1094AS
1095	OPERATOR	1	  <		,
1096	OPERATOR	2	  <=	,
1097	OPERATOR	3	  =		,
1098	OPERATOR	4	  >=	,
1099	OPERATOR	5	  >		,
1100	FUNCTION	1	  rum_numeric_cmp(numeric,numeric),
1101	FUNCTION	2	  rum_numeric_extract_value(numeric, internal),
1102	FUNCTION	3	  rum_numeric_extract_query(numeric, internal, int2, internal, internal),
1103	FUNCTION	4	  rum_btree_consistent(internal,smallint,internal,int,internal,internal,internal,internal),
1104	FUNCTION	5	  rum_numeric_compare_prefix(numeric,numeric,int2, internal),
1105STORAGE		 numeric;
1106
1107