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

Commit0050c0a

Browse files
committed
revert sort order for timestamp to make fast <=| instead of |=>
1 parent4576208 commit0050c0a

File tree

3 files changed

+35
-14
lines changed

3 files changed

+35
-14
lines changed

‎rum--1.0.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ CREATE OPERATOR |=> (
104104

105105
-- timestamp operator class
106106

107+
CREATEFUNCTIONrum_timestamp_cmp(timestamp,timestamp)
108+
RETURNSint
109+
AS'MODULE_PATHNAME'
110+
LANGUAGE C STRICT IMMUTABLE;
111+
107112
CREATEFUNCTIONrum_timestamp_extract_value(timestamp,internal,internal,internal,internal)
108113
RETURNS internal
109114
AS'MODULE_PATHNAME'
@@ -138,7 +143,7 @@ AS
138143
OPERATOR4>=,
139144
OPERATOR5>,
140145
--support
141-
FUNCTION1timestamp_cmp(timestamp,timestamp),
146+
FUNCTION1rum_timestamp_cmp(timestamp,timestamp),
142147
FUNCTION2 rum_timestamp_extract_value(timestamp,internal,internal,internal,internal),
143148
FUNCTION3 rum_timestamp_extract_query(timestamp,internal,smallint,internal,internal,internal,internal),
144149
FUNCTION4 rum_timestamp_consistent(internal,smallint,timestamp,int,internal,internal,internal,internal),

‎rum.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,6 @@ extern Datum FunctionCall10Coll(FmgrInfo *flinfo, Oid collation,
975975
Datumarg6,Datumarg7,Datumarg8,
976976
Datumarg9,Datumarg10);
977977

978-
#defineFROM_STRATEGY(22)
978+
#defineFROM_STRATEGY(21)
979979

980980
#endif/* __RUM_H__ */

‎rum_timestamp.c

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,16 @@ rum_timestamp_extract_query(PG_FUNCTION_ARGS)
5454

5555
switch (strategy)
5656
{
57-
caseBTLessStrategyNumber:
58-
caseBTLessEqualStrategyNumber:
59-
entries[0]=TimestampGetDatum(DT_NOBEGIN);/* leftmost */
60-
*ptr_partialmatch= true;
61-
break;
6257
caseBTGreaterEqualStrategyNumber:
6358
caseBTGreaterStrategyNumber:
59+
entries[0]=TimestampGetDatum(DT_NOEND);/* leftmost */
6460
*ptr_partialmatch= true;
61+
break;
62+
63+
caseBTLessStrategyNumber:
64+
caseBTLessEqualStrategyNumber:
65+
*ptr_partialmatch= true;
66+
6567
caseBTEqualStrategyNumber:
6668
caseRUM_TMST_DISTANCE:
6769
caseRUM_TMST_LEFT_DISTANCE:
@@ -75,6 +77,20 @@ rum_timestamp_extract_query(PG_FUNCTION_ARGS)
7577
PG_RETURN_POINTER(entries);
7678
}
7779

80+
PG_FUNCTION_INFO_V1(rum_timestamp_cmp);
81+
Datum
82+
rum_timestamp_cmp(PG_FUNCTION_ARGS)
83+
{
84+
Datuma=PG_GETARG_DATUM(0);
85+
Datumb=PG_GETARG_DATUM(1);
86+
int32cmp;
87+
88+
cmp=-DatumGetInt32(DirectFunctionCall2Coll(timestamp_cmp,
89+
PG_GET_COLLATION(),
90+
a,b));
91+
PG_RETURN_INT32(cmp);
92+
}
93+
7894
PG_FUNCTION_INFO_V1(rum_timestamp_compare_prefix);
7995
Datum
8096
rum_timestamp_compare_prefix(PG_FUNCTION_ARGS)
@@ -85,22 +101,22 @@ rum_timestamp_compare_prefix(PG_FUNCTION_ARGS)
85101
int32res,
86102
cmp;
87103

88-
cmp=DatumGetInt32(DirectFunctionCall2Coll(timestamp_cmp,
104+
cmp=DatumGetInt32(DirectFunctionCall2Coll(rum_timestamp_cmp,
89105
PG_GET_COLLATION(),
90-
(data->strategy==BTLessStrategyNumber||
91-
data->strategy==BTLessEqualStrategyNumber)
106+
(data->strategy==BTGreaterStrategyNumber||
107+
data->strategy==BTGreaterEqualStrategyNumber)
92108
?data->datum :a,b));
93109

94110
switch (data->strategy)
95111
{
96-
caseBTLessStrategyNumber:
112+
caseBTGreaterStrategyNumber:
97113
/* If original datum > indexed one then return match */
98114
if (cmp>0)
99115
res=0;
100116
else
101117
res=1;
102118
break;
103-
caseBTLessEqualStrategyNumber:
119+
caseBTGreaterEqualStrategyNumber:
104120
/* The same except equality */
105121
if (cmp >=0)
106122
res=0;
@@ -113,14 +129,14 @@ rum_timestamp_compare_prefix(PG_FUNCTION_ARGS)
113129
else
114130
res=0;
115131
break;
116-
caseBTGreaterEqualStrategyNumber:
132+
caseBTLessEqualStrategyNumber:
117133
/* If original datum <= indexed one then return match */
118134
if (cmp <=0)
119135
res=0;
120136
else
121137
res=1;
122138
break;
123-
caseBTGreaterStrategyNumber:
139+
caseBTLessStrategyNumber:
124140
/* If original datum <= indexed one then return match */
125141
/* If original datum == indexed one then continue scan */
126142
if (cmp<0)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp