Skip to content

Commit 1fd8917

Browse files
committed
timestamptz
1 parent c2dc080 commit 1fd8917

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed

expected/timestamp.out

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ 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;
1213
SELECT i <=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
1314
?column? | i
1415
----------+--------------------------
@@ -43,6 +44,7 @@ SELECT i |=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
4344
(6 rows)
4445

4546
CREATE INDEX idx_timestamp ON test_timestamp USING rum (i);
47+
CREATE INDEX idx_timestamptz ON test_timestamptz USING rum (i);
4648
set enable_seqscan=off;
4749
explain (costs off)
4850
SELECT * FROM test_timestamp WHERE i<'2004-10-26 08:55:08'::timestamp ORDER BY i;
@@ -130,3 +132,20 @@ SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i
130132
Tue Oct 26 10:55:08 2004
131133
(2 rows)
132134

135+
explain (costs off)
136+
SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i;
137+
QUERY PLAN
138+
------------------------------------------------------------------------------------
139+
Sort
140+
Sort Key: i
141+
-> Index Scan using idx_timestamptz on test_timestamptz
142+
Index Cond: (i > 'Tue Oct 26 08:55:08 2004 PDT'::timestamp with time zone)
143+
(4 rows)
144+
145+
SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i;
146+
i
147+
------------------------------
148+
Tue Oct 26 09:55:08 2004 PDT
149+
Tue Oct 26 10:55:08 2004 PDT
150+
(2 rows)
151+

rum--1.0.sql

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ AS
9595
FUNCTION 8 rum_tsquery_distance(internal,smallint,tsvector,int,internal,internal,internal,internal,internal),
9696
FUNCTION 10 rum_ts_join_pos(internal, internal),
9797
STORAGE text;
98-
9998
-- timestamp ops
10099

101100
CREATE FUNCTION timestamp_distance(timestamp, timestamp)
@@ -209,6 +208,83 @@ AS
209208
FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
210209
STORAGE text;
211210

211+
-- timestamptz ops
212+
213+
CREATE FUNCTION timestamptz_distance(timestamptz, timestamptz)
214+
RETURNS float8
215+
AS 'MODULE_PATHNAME', 'timestamp_distance'
216+
LANGUAGE C IMMUTABLE STRICT;
217+
218+
CREATE OPERATOR <=> (
219+
PROCEDURE = timestamptz_distance,
220+
LEFTARG = timestamptz,
221+
RIGHTARG = timestamptz,
222+
COMMUTATOR = <=>
223+
);
224+
225+
CREATE FUNCTION timestamptz_left_distance(timestamptz, timestamptz)
226+
RETURNS float8
227+
AS 'MODULE_PATHNAME', 'timestamp_left_distance'
228+
LANGUAGE C IMMUTABLE STRICT;
229+
230+
CREATE OPERATOR <=| (
231+
PROCEDURE = timestamptz_left_distance,
232+
LEFTARG = timestamptz,
233+
RIGHTARG = timestamptz,
234+
COMMUTATOR = |=>
235+
);
236+
237+
CREATE FUNCTION timestamptz_right_distance(timestamptz, timestamptz)
238+
RETURNS float8
239+
AS 'MODULE_PATHNAME', 'timestamp_right_distance'
240+
LANGUAGE C IMMUTABLE STRICT;
241+
242+
CREATE OPERATOR |=> (
243+
PROCEDURE = timestamptz_right_distance,
244+
LEFTARG = timestamptz,
245+
RIGHTARG = timestamptz,
246+
COMMUTATOR = <=|
247+
);
248+
249+
250+
CREATE OPERATOR CLASS timestamptz_ops
251+
DEFAULT FOR TYPE timestamptz USING rum
252+
AS
253+
OPERATOR 1 <,
254+
OPERATOR 2 <=,
255+
OPERATOR 3 =,
256+
OPERATOR 4 >=,
257+
OPERATOR 5 >,
258+
--support
259+
FUNCTION 1 timestamptz_cmp(timestamptz,timestamptz),
260+
FUNCTION 2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
261+
FUNCTION 3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
262+
FUNCTION 4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),
263+
FUNCTION 5 rum_timestamp_compare_prefix(timestamp,timestamp,smallint,internal),
264+
FUNCTION 6 rum_timestamp_config(internal),
265+
-- support to timestamptz disttance in rum_tsvector_timestamptz_ops
266+
FUNCTION 9 rum_timestamp_outer_distance(timestamp, timestamp, smallint),
267+
OPERATOR 20 <=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
268+
OPERATOR 21 <=| (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
269+
OPERATOR 22 |=> (timestamptz,timestamptz) FOR ORDER BY pg_catalog.float_ops,
270+
STORAGE timestamptz;
271+
272+
--together
273+
274+
CREATE OPERATOR CLASS rum_tsvector_timestamptz_ops
275+
FOR TYPE tsvector USING rum
276+
AS
277+
OPERATOR 1 @@ (tsvector, tsquery),
278+
--support function
279+
FUNCTION 1 gin_cmp_tslexeme(text, text),
280+
FUNCTION 2 rum_extract_tsvector(tsvector,internal,internal,internal,internal),
281+
FUNCTION 3 rum_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal),
282+
FUNCTION 4 rum_tsquery_timestamp_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
283+
FUNCTION 5 gin_cmp_prefix(text,text,smallint,internal),
284+
FUNCTION 7 rum_tsquery_pre_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
285+
STORAGE text;
286+
287+
-- inversed
212288

213289
CREATE FUNCTION ruminv_extract_tsquery(tsquery,internal,internal,internal,internal)
214290
RETURNS internal
@@ -240,3 +316,4 @@ AS
240316
FUNCTION 4 ruminv_tsvector_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal),
241317
FUNCTION 6 ruminv_tsquery_config(internal),
242318
STORAGE text;
319+

sql/timestamp.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ INSERT INTO test_timestamp VALUES
1212
( '2004-10-26 10:55:08' )
1313
;
1414

15+
SELECT i::timestamptz AS i INTO test_timestamptz FROM test_timestamp;
16+
1517
SELECT i <=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
1618
SELECT i <=| '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
1719
SELECT i |=> '2004-10-26 06:24:08', i FROM test_timestamp ORDER BY 1, 2 ASC;
1820

1921
CREATE INDEX idx_timestamp ON test_timestamp USING rum (i);
22+
CREATE INDEX idx_timestamptz ON test_timestamptz USING rum (i);
2023

2124
set enable_seqscan=off;
2225

@@ -39,3 +42,8 @@ SELECT * FROM test_timestamp WHERE i>='2004-10-26 08:55:08'::timestamp ORDER BY
3942
explain (costs off)
4043
SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i;
4144
SELECT * FROM test_timestamp WHERE i>'2004-10-26 08:55:08'::timestamp ORDER BY i;
45+
46+
explain (costs off)
47+
SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i;
48+
SELECT * FROM test_timestamptz WHERE i>'2004-10-26 08:55:08'::timestamptz ORDER BY i;
49+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy