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

Commitdfbffd8

Browse files
committed
Add filtering feature. Fix bug introduced 8972219cd708f4ef654379efc86162ed7e10ef99
1 parent9b69c4b commitdfbffd8

File tree

4 files changed

+137
-24
lines changed

4 files changed

+137
-24
lines changed

‎expected/orderby.out

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,3 +277,83 @@ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER
277277
496 | Sun May 22 11:21:22.326724 2016
278278
(8 rows)
279279

280+
SET enable_bitmapscan=OFF;
281+
EXPLAIN (costs off)
282+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d <= '2016-05-16 14:21:25' ORDER BY d;
283+
QUERY PLAN
284+
----------------------------------------------------------------------------------------------------------------------------
285+
Sort
286+
Sort Key: d
287+
-> Index Scan using tsts_idx on tsts
288+
Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (d <= 'Mon May 16 14:21:25 2016'::timestamp without time zone))
289+
(4 rows)
290+
291+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d <= '2016-05-16 14:21:25' ORDER BY d;
292+
id | d
293+
-----+---------------------------------
294+
16 | Mon May 02 11:21:22.326724 2016
295+
39 | Tue May 03 10:21:22.326724 2016
296+
71 | Wed May 04 18:21:22.326724 2016
297+
135 | Sat May 07 10:21:22.326724 2016
298+
168 | Sun May 08 19:21:22.326724 2016
299+
232 | Wed May 11 11:21:22.326724 2016
300+
252 | Thu May 12 07:21:22.326724 2016
301+
354 | Mon May 16 13:21:22.326724 2016
302+
355 | Mon May 16 14:21:22.326724 2016
303+
(9 rows)
304+
305+
EXPLAIN (costs off)
306+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER BY d;
307+
QUERY PLAN
308+
----------------------------------------------------------------------------------------------------------------------------
309+
Sort
310+
Sort Key: d
311+
-> Index Scan using tsts_idx on tsts
312+
Index Cond: ((t @@ '''wr'' & ''qh'''::tsquery) AND (d >= 'Mon May 16 14:21:25 2016'::timestamp without time zone))
313+
(4 rows)
314+
315+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER BY d;
316+
id | d
317+
-----+---------------------------------
318+
371 | Tue May 17 06:21:22.326724 2016
319+
406 | Wed May 18 17:21:22.326724 2016
320+
415 | Thu May 19 02:21:22.326724 2016
321+
428 | Thu May 19 15:21:22.326724 2016
322+
457 | Fri May 20 20:21:22.326724 2016
323+
458 | Fri May 20 21:21:22.326724 2016
324+
484 | Sat May 21 23:21:22.326724 2016
325+
496 | Sun May 22 11:21:22.326724 2016
326+
(8 rows)
327+
328+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d <= '2016-05-16 14:21:25' ORDER BY d ASC LIMIT 3;
329+
id | d
330+
----+---------------------------------
331+
16 | Mon May 02 11:21:22.326724 2016
332+
39 | Tue May 03 10:21:22.326724 2016
333+
71 | Wed May 04 18:21:22.326724 2016
334+
(3 rows)
335+
336+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d <= '2016-05-16 14:21:25' ORDER BY d DESC LIMIT 3;
337+
id | d
338+
-----+---------------------------------
339+
355 | Mon May 16 14:21:22.326724 2016
340+
354 | Mon May 16 13:21:22.326724 2016
341+
252 | Thu May 12 07:21:22.326724 2016
342+
(3 rows)
343+
344+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER BY d ASC LIMIT 3;
345+
id | d
346+
-----+---------------------------------
347+
371 | Tue May 17 06:21:22.326724 2016
348+
406 | Wed May 18 17:21:22.326724 2016
349+
415 | Thu May 19 02:21:22.326724 2016
350+
(3 rows)
351+
352+
SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d >= '2016-05-16 14:21:25' ORDER BY d DESC LIMIT 3;
353+
id | d
354+
-----+---------------------------------
355+
496 | Sun May 22 11:21:22.326724 2016
356+
484 | Sat May 21 23:21:22.326724 2016
357+
458 | Fri May 20 21:21:22.326724 2016
358+
(3 rows)
359+

‎rumget.c

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,39 @@ callConsistentFn(RumState * rumstate, RumScanKey key)
106106
* long-lived memory context and, somehow, freeed. Seems, the
107107
* last is real problem
108108
*/
109-
key->outerAddInfo=key->addInfo[0];
109+
key->outerAddInfo=key->addInfo[i];
110110
break;
111111
}
112112
}
113+
114+
if (key->addInfoKeys)
115+
{
116+
if (key->outerAddInfoIsNull)
117+
res= false;/* assume strict operator */
118+
119+
for(i=0;res&&i<key->addInfoNKeys;i++)
120+
{
121+
RumScanKeysubkey=key->addInfoKeys[i];
122+
intj;
123+
124+
for(j=0;res&&j<subkey->nentries;j++)
125+
{
126+
RumScanEntryscanSubEntry=subkey->scanEntry[j];
127+
intcmp=
128+
DatumGetInt32(FunctionCall4Coll(
129+
&rumstate->comparePartialFn[scanSubEntry->attnumOrig-1],
130+
rumstate->supportCollation[scanSubEntry->attnumOrig-1],
131+
scanSubEntry->queryKey,
132+
key->outerAddInfo,
133+
UInt16GetDatum(scanSubEntry->strategy),
134+
PointerGetDatum(scanSubEntry->extra_data)
135+
));
136+
137+
if (cmp!=0)
138+
res= false;
139+
}
140+
}
141+
}
113142
}
114143

115144
returnres;
@@ -1631,7 +1660,7 @@ scanPage(RumState * rumstate, RumScanEntry entry, RumKey *item, Page page,
16311660
else
16321661
cmp=rumCompareItemPointers(&index->iptr,&item->iptr);
16331662

1634-
if (cmp<0|| (cmp <=0&&equalOk))
1663+
if (cmp<0|| (cmp <=0&&!equalOk))
16351664
{
16361665
ptr=RumDataPageGetData(page)+index->pageOffset;
16371666
first=index->offsetNumer;
@@ -1986,6 +2015,7 @@ scanGetItemFast(IndexScanDesc scan, RumKey *advancePast,
19862015
key->addInfoIsNull[j]= true;
19872016
}
19882017
}
2018+
19892019
if (!callConsistentFn(&so->rumstate,key))
19902020
{
19912021
consistentResult= false;

‎rumscan.c

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ initScanKey(RumScanOpaque so, ScanKey skey, bool *hasNullQuery)
307307
Datum*queryValues;
308308
int32nQueryValues=0;
309309
bool*partial_matches=NULL;
310-
Pointer*extra_data=NULL;
310+
Pointer*extra_data=NULL;
311311
bool*nullFlags=NULL;
312312
int32searchMode=GIN_SEARCH_MODE_DEFAULT;
313313

@@ -550,13 +550,15 @@ rumNewScanKey(IndexScanDesc scan)
550550
/*
551551
* Fill markAddInfo if possible
552552
*/
553-
for (i=0;so->rumstate.useAlternativeOrder&&i<so->nkeys;i++)
553+
for (i=0;i<so->nkeys;i++)
554554
{
555555
RumScanKeykey=so->keys[i];
556556

557-
if (key->orderBy&&key->useAddToColumn&&
557+
if (so->rumstate.useAlternativeOrder&&
558+
key->orderBy&&key->useAddToColumn&&
558559
key->attnum==so->rumstate.attrnAddToColumn)
559560
fillMarkAddInfo(so,key);
561+
560562
if (key->orderBy== false)
561563
{
562564
if (key->attnumOrig==so->rumstate.attrnAddToColumn)
@@ -570,27 +572,14 @@ rumNewScanKey(IndexScanDesc scan)
570572
(hasAddOnFilter&haofHasAddOnRestriction))
571573
{
572574
RumScanKey*keys=palloc(sizeof(*keys)*so->nkeys);
573-
intnkeys=0;
574-
#ifdefADD_INFO_FILTER
575+
intnkeys=0,
576+
j;
575577
RumScanKeyaddToKey=NULL;
576-
#endif
577578

578579
for(i=0;i<so->nkeys;i++)
579580
{
580581
RumScanKeykey=so->keys[i];
581582

582-
#ifndefADD_INFO_FILTER
583-
if (key->orderBy== false&&
584-
key->attnumOrig==so->rumstate.attrnAddToColumn)
585-
{
586-
intj;
587-
588-
for(j=0;j<key->nentries;j++)
589-
key->scanEntry[j]->forceUseBitmap= true;
590-
591-
keys[nkeys++]=key;
592-
}
593-
#else
594583
if (key->orderBy== false&&
595584
key->attnumOrig==so->rumstate.attrnOrderByColumn)
596585
{
@@ -605,11 +594,10 @@ rumNewScanKey(IndexScanDesc scan)
605594
}
606595

607596
if (addToKey==NULL)
608-
elog(ERROR,"could not find add_to column");
609-
610-
addToKey->addInfoKeys[addToKey->addInfoNKeys++ ]=key;
597+
keys[nkeys++]=key;
598+
else
599+
addToKey->addInfoKeys[addToKey->addInfoNKeys++ ]=key;
611600
}
612-
#endif
613601
else
614602
{
615603
keys[nkeys++]=key;

‎sql/orderby.sql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,18 @@ SELECT id, d FROM tsts WHERE t @@ 'wr&qh' AND d <= '2016-05-16 14:21:25' ORDER
6161
EXPLAIN (costs off)
6262
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY d;
6363
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY d;
64+
65+
SET enable_bitmapscan=OFF;
66+
67+
EXPLAIN (costs off)
68+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d<='2016-05-16 14:21:25'ORDER BY d;
69+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d<='2016-05-16 14:21:25'ORDER BY d;
70+
EXPLAIN (costs off)
71+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY d;
72+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY d;
73+
74+
75+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d<='2016-05-16 14:21:25'ORDER BY dASCLIMIT3;
76+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d<='2016-05-16 14:21:25'ORDER BY dDESCLIMIT3;
77+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY dASCLIMIT3;
78+
SELECT id, dFROM tstsWHERE t @@'wr&qh'AND d>='2016-05-16 14:21:25'ORDER BY dDESCLIMIT3;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp