Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9fe098f

Browse files
committed
rumvalidate(), rum_timestamp_ops, rum_timestamptz_ops, rum_anyarray_ops
- added test for rumvalidate()- added *_key_distance() for rum_timestamp_ops, rum_timestamptz_ops- *_key_distance() now has 3 arguments rum_TYPEIDENT_key_distance(TYPENAME, TYPENAME, smallint)- fix rum_anyarray_ordering() signature
1 parent3d0fc13 commit9fe098f

File tree

9 files changed

+339
-68
lines changed

9 files changed

+339
-68
lines changed

‎expected/rum.out

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,47 @@
11
CREATE EXTENSION rum;
2+
-- First validate operator classes
3+
SELECT opcname, amvalidate(opc.oid)
4+
FROM pg_opclass opc JOIN pg_am am ON am.oid = opcmethod
5+
WHERE amname = 'rum'
6+
ORDER BY opcname;
7+
opcname | amvalidate
8+
-----------------------------------+------------
9+
rum_anyarray_addon_ops | t
10+
rum_anyarray_ops | t
11+
rum_bit_ops | t
12+
rum_bytea_ops | t
13+
rum_char_ops | t
14+
rum_cidr_ops | t
15+
rum_date_ops | t
16+
rum_float4_ops | t
17+
rum_float8_ops | t
18+
rum_inet_ops | t
19+
rum_int2_ops | t
20+
rum_int4_ops | t
21+
rum_int8_ops | t
22+
rum_interval_ops | t
23+
rum_macaddr_ops | t
24+
rum_money_ops | t
25+
rum_numeric_ops | t
26+
rum_oid_ops | t
27+
rum_text_ops | t
28+
rum_time_ops | t
29+
rum_timestamp_ops | t
30+
rum_timestamptz_ops | t
31+
rum_timetz_ops | t
32+
rum_tsquery_ops | t
33+
rum_tsvector_addon_ops | t
34+
rum_tsvector_hash_addon_ops | t
35+
rum_tsvector_hash_ops | t
36+
rum_tsvector_hash_timestamp_ops | t
37+
rum_tsvector_hash_timestamptz_ops | t
38+
rum_tsvector_ops | t
39+
rum_tsvector_timestamp_ops | t
40+
rum_tsvector_timestamptz_ops | t
41+
rum_varbit_ops | t
42+
rum_varchar_ops | t
43+
(34 rows)
44+
245
CREATE TABLE test_rum( t text, a tsvector );
346
CREATE TRIGGER tsvectorupdate
447
BEFORE UPDATE OR INSERT ON test_rum

‎expected/timestamp.out

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ INSERT INTO test_timestamp VALUES
99
( '2004-10-26 09:55:08' ),
1010
( '2004-10-26 10:55:08' )
1111
;
12-
SELECT i::timestamptz AS i INTO test_timestamptz FROM test_timestamp;
1312
SELECT i <=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
1413
?column? | i
1514
----------+--------------------------
@@ -44,7 +43,6 @@ SELECT i |=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
4443
(6 rows)
4544

4645
CREATE INDEX idx_timestamp ON test_timestamp USING rum (i);
47-
CREATE INDEX idx_timestamptz ON test_timestamptz USING rum (i);
4846
set enable_seqscan=off;
4947
explain (costs off)
5048
SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i;
@@ -132,6 +130,50 @@ SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i
132130
Tue Oct 26 10:55:08 2004
133131
(2 rows)
134132

133+
explain (costs off)
134+
SELECT *, i <=> '2004-10-26 08:55:08'::timestamp FROM test_timestamp
135+
ORDER BY i <=> '2004-10-26 08:55:08'::timestamp;
136+
QUERY PLAN
137+
-----------------------------------------------------------------------------
138+
Index Scan using idx_timestamp on test_timestamp
139+
Order By: (i <=> 'Tue Oct 26 08:55:08 2004'::timestamp without time zone)
140+
(2 rows)
141+
142+
SELECT *, i <=> '2004-10-26 08:55:08'::timestamp FROM test_timestamp
143+
ORDER BY i <=> '2004-10-26 08:55:08'::timestamp;
144+
i | ?column?
145+
--------------------------+----------
146+
Tue Oct 26 08:55:08 2004 | 0
147+
Tue Oct 26 09:55:08 2004 | 3600
148+
Tue Oct 26 10:55:08 2004 | 7200
149+
Tue Oct 26 05:55:08 2004 | 10800
150+
Tue Oct 26 04:55:08 2004 | 14400
151+
Tue Oct 26 03:55:08 2004 | 18000
152+
(6 rows)
153+
154+
explain (costs off)
155+
SELECT *, i <=> '2004-10-26 05:00:00'::timestamp FROM test_timestamp
156+
WHERE i>'2004-10-26 05:00:00'::timestamp ORDER BY i <=> '2004-10-26 05:00:00'::timestamp;
157+
QUERY PLAN
158+
-----------------------------------------------------------------------------
159+
Index Scan using idx_timestamp on test_timestamp
160+
Index Cond: (i > 'Tue Oct 26 05:00:00 2004'::timestamp without time zone)
161+
Order By: (i <=> 'Tue Oct 26 05:00:00 2004'::timestamp without time zone)
162+
(3 rows)
163+
164+
SELECT *, i <=> '2004-10-26 05:00:00'::timestamp FROM test_timestamp
165+
WHERE i>'2004-10-26 05:00:00'::timestamp ORDER BY i <=> '2004-10-26 05:00:00'::timestamp;
166+
i | ?column?
167+
--------------------------+----------
168+
Tue Oct 26 05:55:08 2004 | 3308
169+
Tue Oct 26 08:55:08 2004 | 14108
170+
Tue Oct 26 09:55:08 2004 | 17708
171+
Tue Oct 26 10:55:08 2004 | 21308
172+
(4 rows)
173+
174+
-- Tests for timestamptz
175+
SELECT i::timestamptz AS i INTO test_timestamptz FROM test_timestamp;
176+
CREATE INDEX idx_timestamptz ON test_timestamptz USING rum (i);
135177
explain (costs off)
136178
SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i;
137179
QUERY PLAN
@@ -149,3 +191,44 @@ SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER
149191
Tue Oct 26 10:55:08 2004 PDT
150192
(2 rows)
151193

194+
explain (costs off)
195+
SELECT *, i <=> '2004-10-26 08:55:08'::timestamptz FROM test_timestamptz
196+
ORDER BY i <=> '2004-10-26 08:55:08'::timestamptz;
197+
QUERY PLAN
198+
------------------------------------------------------------------------------
199+
Index Scan using idx_timestamptz on test_timestamptz
200+
Order By: (i <=> 'Tue Oct 26 08:55:08 2004 PDT'::timestamp with time zone)
201+
(2 rows)
202+
203+
SELECT *, i <=> '2004-10-26 08:55:08'::timestamptz FROM test_timestamptz
204+
ORDER BY i <=> '2004-10-26 08:55:08'::timestamptz;
205+
i | ?column?
206+
------------------------------+----------
207+
Tue Oct 26 08:55:08 2004 PDT | 0
208+
Tue Oct 26 09:55:08 2004 PDT | 3600
209+
Tue Oct 26 10:55:08 2004 PDT | 7200
210+
Tue Oct 26 05:55:08 2004 PDT | 10800
211+
Tue Oct 26 04:55:08 2004 PDT | 14400
212+
Tue Oct 26 03:55:08 2004 PDT | 18000
213+
(6 rows)
214+
215+
explain (costs off)
216+
SELECT *, i <=> '2004-10-26 05:00:00'::timestamptz FROM test_timestamptz
217+
WHERE i>'2004-10-26 05:00:00'::timestamptz ORDER BY i <=> '2004-10-26 05:00:00'::timestamptz;
218+
QUERY PLAN
219+
------------------------------------------------------------------------------
220+
Index Scan using idx_timestamptz on test_timestamptz
221+
Index Cond: (i > 'Tue Oct 26 05:00:00 2004 PDT'::timestamp with time zone)
222+
Order By: (i <=> 'Tue Oct 26 05:00:00 2004 PDT'::timestamp with time zone)
223+
(3 rows)
224+
225+
SELECT *, i <=> '2004-10-26 05:00:00'::timestamptz FROM test_timestamptz
226+
WHERE i>'2004-10-26 05:00:00'::timestamptz ORDER BY i <=> '2004-10-26 05:00:00'::timestamptz;
227+
i | ?column?
228+
------------------------------+----------
229+
Tue Oct 26 05:55:08 2004 PDT | 3308
230+
Tue Oct 26 08:55:08 2004 PDT | 14108
231+
Tue Oct 26 09:55:08 2004 PDT | 17708
232+
Tue Oct 26 10:55:08 2004 PDT | 21308
233+
(4 rows)
234+

‎gen_rum_sql--1.1--1.2.pl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
use warnings;
33

44
my$func_distance_template=<<EOT;
5-
CREATE FUNCTION rum_TYPEIDENT_key_distance(internal,smallint,TYPENAME,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
5+
CREATE FUNCTION rum_TYPEIDENT_key_distance(TYPENAME,TYPENAME,smallint)
66
RETURNS float8
77
AS 'MODULE_PATHNAME'
88
LANGUAGE C IMMUTABLE STRICT;
@@ -12,7 +12,7 @@
1212
my$opclass_distance_template=<<EOT;
1313
1414
ALTER OPERATOR FAMILY rum_TYPEIDENT_ops USING rum ADD
15-
FUNCTION8(TYPENAME,TYPENAME) rum_TYPEIDENT_key_distance(internal,smallint,TYPENAME,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
15+
FUNCTION8(TYPENAME,TYPENAME) rum_TYPEIDENT_key_distance(TYPENAME,TYPENAME,smallint);
1616
1717
EOT
1818

@@ -55,6 +55,16 @@
5555
func_tmpl=>\$func_distance_template,
5656
opclass_tmpl=>\$opclass_distance_template,
5757
},
58+
{
59+
TYPENAME=>'timestamp',
60+
func_tmpl=>\$func_distance_template,
61+
opclass_tmpl=>\$opclass_distance_template,
62+
},
63+
{
64+
TYPENAME=>'timestamptz',
65+
func_tmpl=>\$func_distance_template,
66+
opclass_tmpl=>\$opclass_distance_template,
67+
},
5868
);
5969

6070
##############Generate!!!
@@ -115,7 +125,7 @@
115125
AS 'MODULE_PATHNAME'
116126
LANGUAGE C IMMUTABLE STRICT;
117127
118-
CREATE FUNCTION rum_anyarray_ordering(internal,smallint,tsvector,int,internal,internal,internal,internal,internal)
128+
CREATE FUNCTION rum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal)
119129
RETURNS float8
120130
AS 'MODULE_PATHNAME'
121131
LANGUAGE C IMMUTABLE STRICT;
@@ -135,7 +145,7 @@
135145
FUNCTION3rum_extract_anyarray_query(anyarray,internal,smallint,internal,internal,internal,internal),
136146
FUNCTION4rum_anyarray_consistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
137147
FUNCTION6rum_anyarray_config(internal),
138-
FUNCTION8rum_anyarray_ordering(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
148+
FUNCTION8rum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal),
139149
STORAGE anyelement;
140150
141151
CREATE OPERATOR CLASS rum_anyarray_addon_ops

‎rum--1.1--1.2.sql

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ RETURNS bool
5353
AS'MODULE_PATHNAME'
5454
LANGUAGE C IMMUTABLE STRICT;
5555

56-
CREATEFUNCTIONrum_anyarray_ordering(internal,smallint,tsvector,int,internal,internal,internal,internal,internal)
56+
CREATEFUNCTIONrum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal)
5757
RETURNS float8
5858
AS'MODULE_PATHNAME'
5959
LANGUAGE C IMMUTABLE STRICT;
@@ -73,7 +73,7 @@ AS
7373
FUNCTION3rum_extract_anyarray_query(anyarray,internal,smallint,internal,internal,internal,internal),
7474
FUNCTION4rum_anyarray_consistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
7575
FUNCTION6rum_anyarray_config(internal),
76-
FUNCTION8rum_anyarray_ordering(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
76+
FUNCTION8rum_anyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal),
7777
STORAGE anyelement;
7878

7979
CREATEOPERATOR CLASSrum_anyarray_addon_ops
@@ -91,78 +91,100 @@ AS
9191

9292
/*--------------------int2-----------------------*/
9393

94-
CREATEFUNCTIONrum_int2_key_distance(internal,smallint,int2,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
94+
CREATEFUNCTIONrum_int2_key_distance(int2,int2,smallint)
9595
RETURNS float8
9696
AS'MODULE_PATHNAME'
9797
LANGUAGE C IMMUTABLE STRICT;
9898

9999

100100
ALTEROPERATOR FAMILY rum_int2_ops USING rum ADD
101-
FUNCTION8(int2,int2) rum_int2_key_distance(internal,smallint,int2,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
101+
FUNCTION8(int2,int2) rum_int2_key_distance(int2,int2,smallint);
102102

103103
/*--------------------int4-----------------------*/
104104

105-
CREATEFUNCTIONrum_int4_key_distance(internal,smallint,int4,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
105+
CREATEFUNCTIONrum_int4_key_distance(int4,int4,smallint)
106106
RETURNS float8
107107
AS'MODULE_PATHNAME'
108108
LANGUAGE C IMMUTABLE STRICT;
109109

110110

111111
ALTEROPERATOR FAMILY rum_int4_ops USING rum ADD
112-
FUNCTION8(int4,int4) rum_int4_key_distance(internal,smallint,int4,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
112+
FUNCTION8(int4,int4) rum_int4_key_distance(int4,int4,smallint);
113113

114114
/*--------------------int8-----------------------*/
115115

116-
CREATEFUNCTIONrum_int8_key_distance(internal,smallint,int8,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
116+
CREATEFUNCTIONrum_int8_key_distance(int8,int8,smallint)
117117
RETURNS float8
118118
AS'MODULE_PATHNAME'
119119
LANGUAGE C IMMUTABLE STRICT;
120120

121121

122122
ALTEROPERATOR FAMILY rum_int8_ops USING rum ADD
123-
FUNCTION8(int8,int8) rum_int8_key_distance(internal,smallint,int8,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
123+
FUNCTION8(int8,int8) rum_int8_key_distance(int8,int8,smallint);
124124

125125
/*--------------------float4-----------------------*/
126126

127-
CREATEFUNCTIONrum_float4_key_distance(internal,smallint,float4,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
127+
CREATEFUNCTIONrum_float4_key_distance(float4,float4,smallint)
128128
RETURNS float8
129129
AS'MODULE_PATHNAME'
130130
LANGUAGE C IMMUTABLE STRICT;
131131

132132

133133
ALTEROPERATOR FAMILY rum_float4_ops USING rum ADD
134-
FUNCTION8(float4,float4) rum_float4_key_distance(internal,smallint,float4,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
134+
FUNCTION8(float4,float4) rum_float4_key_distance(float4,float4,smallint);
135135

136136
/*--------------------float8-----------------------*/
137137

138-
CREATEFUNCTIONrum_float8_key_distance(internal,smallint,float8,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
138+
CREATEFUNCTIONrum_float8_key_distance(float8,float8,smallint)
139139
RETURNS float8
140140
AS'MODULE_PATHNAME'
141141
LANGUAGE C IMMUTABLE STRICT;
142142

143143

144144
ALTEROPERATOR FAMILY rum_float8_ops USING rum ADD
145-
FUNCTION8(float8,float8) rum_float8_key_distance(internal,smallint,float8,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
145+
FUNCTION8(float8,float8) rum_float8_key_distance(float8,float8,smallint);
146146

147147
/*--------------------money-----------------------*/
148148

149-
CREATEFUNCTIONrum_money_key_distance(internal,smallint,money,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
149+
CREATEFUNCTIONrum_money_key_distance(money,money,smallint)
150150
RETURNS float8
151151
AS'MODULE_PATHNAME'
152152
LANGUAGE C IMMUTABLE STRICT;
153153

154154

155155
ALTEROPERATOR FAMILY rum_money_ops USING rum ADD
156-
FUNCTION8(money,money) rum_money_key_distance(internal,smallint,money,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
156+
FUNCTION8(money,money) rum_money_key_distance(money,money,smallint);
157157

158158
/*--------------------oid-----------------------*/
159159

160-
CREATEFUNCTIONrum_oid_key_distance(internal,smallint,oid,smallint,tsvector,int,internal,internal,internal,internal,internal,internal)
160+
CREATEFUNCTIONrum_oid_key_distance(oid,oid,smallint)
161161
RETURNS float8
162162
AS'MODULE_PATHNAME'
163163
LANGUAGE C IMMUTABLE STRICT;
164164

165165

166166
ALTEROPERATOR FAMILY rum_oid_ops USING rum ADD
167-
FUNCTION8(oid,oid) rum_oid_key_distance(internal,smallint,oid,smallint,tsvector,int,internal,internal,internal,internal,internal,internal);
167+
FUNCTION8(oid,oid) rum_oid_key_distance(oid,oid,smallint);
168+
169+
/*--------------------timestamp-----------------------*/
170+
171+
CREATEFUNCTIONrum_timestamp_key_distance(timestamp,timestamp,smallint)
172+
RETURNS float8
173+
AS'MODULE_PATHNAME'
174+
LANGUAGE C IMMUTABLE STRICT;
175+
176+
177+
ALTEROPERATOR FAMILY rum_timestamp_ops USING rum ADD
178+
FUNCTION8(timestamp,timestamp) rum_timestamp_key_distance(timestamp,timestamp,smallint);
179+
180+
/*--------------------timestamptz-----------------------*/
181+
182+
CREATEFUNCTIONrum_timestamptz_key_distance(timestamptz,timestamptz,smallint)
183+
RETURNS float8
184+
AS'MODULE_PATHNAME'
185+
LANGUAGE C IMMUTABLE STRICT;
186+
187+
188+
ALTEROPERATOR FAMILY rum_timestamptz_ops USING rum ADD
189+
FUNCTION8(timestamptz,timestamptz) rum_timestamptz_key_distance(timestamptz,timestamptz,smallint);
168190

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp