File tree Expand file tree Collapse file tree 3 files changed +38
-2
lines changed Open diff view settings
Expand file tree Collapse file tree 3 files changed +38
-2
lines changed Open diff view settings
Original file line number Diff line number Diff line change @@ -4,6 +4,18 @@ CREATE TRIGGER tsvectorupdate
44BEFORE UPDATE OR INSERT ON test_rum
55FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('a', 'pg_catalog.english', 't');
66CREATE INDEX rumidx ON test_rum USING rum (a rum_tsvector_ops);
7+ -- Check empty table using index scan
8+ SELECT
9+ a <=> to_tsquery('pg_catalog.english', 'way & (go | half)'),
10+ rum_ts_distance(a, to_tsquery('pg_catalog.english', 'way & (go | half)')),
11+ *
12+ FROM test_rum
13+ ORDER BY a <=> to_tsquery('pg_catalog.english', 'way & (go | half)') limit 2;
14+ ?column? | rum_ts_distance | t | a
15+ ----------+-----------------+---+---
16+ (0 rows)
17+
18+ -- Fill the table with data
719\copy test_rum(t) from 'data/rum.data';
820CREATE INDEX failed_rumidx ON test_rum USING rum (a rum_tsvector_addon_ops);
921ERROR: additional information attribute "a" is not found in index
Original file line number Diff line number Diff line change @@ -7,6 +7,15 @@ BEFORE UPDATE OR INSERT ON test_rum
77FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(' a' , ' pg_catalog.english' , ' t' );
88CREATE INDEX rumidx ON test_rum USING rum (a rum_tsvector_ops);
99
10+ -- Check empty table using index scan
11+ SELECT
12+ a <=> to_tsquery(' pg_catalog.english' , ' way & (go | half)' ),
13+ rum_ts_distance(a, to_tsquery(' pg_catalog.english' , ' way & (go | half)' )),
14+ *
15+ FROM test_rum
16+ ORDER BY a <=> to_tsquery(' pg_catalog.english' , ' way & (go | half)' ) limit 2 ;
17+
18+ -- Fill the table with data
1019\copy test_rum(t) from ' data/rum.data' ;
1120
1221CREATE INDEX failed_rumidx ON test_rum USING rum (a rum_tsvector_addon_ops);
Original file line number Diff line number Diff line change @@ -609,7 +609,17 @@ startScanEntry(RumState * rumstate, RumScanEntry entry, Snapshot snapshot)
609609 (entry -> queryCategory == RUM_CAT_EMPTY_QUERY &&
610610 entry -> scanWithAddInfo ))
611611 {
612- IndexTuple itup = (IndexTuple ) PageGetItem (page , PageGetItemId (page , stackEntry -> off ));
612+ IndexTuple itup ;
613+ ItemId itemid = PageGetItemId (page , stackEntry -> off );
614+
615+ /*
616+ * We don't want to crash if line pointer is not used.
617+ */
618+ if (entry -> queryCategory == RUM_CAT_EMPTY_QUERY &&
619+ !ItemIdHasStorage (itemid ))
620+ goto endScanEntry ;
621+
622+ itup = (IndexTuple ) PageGetItem (page , itemid );
613623
614624 if (RumIsPostingTree (itup ))
615625 {
@@ -689,6 +699,7 @@ startScanEntry(RumState * rumstate, RumScanEntry entry, Snapshot snapshot)
689699 SCAN_ENTRY_GET_KEY (entry , rumstate , itup );
690700 }
691701
702+ endScanEntry :
692703 if (needUnlock )
693704 LockBuffer (stackEntry -> buffer , RUM_UNLOCK );
694705 if (entry -> stack == NULL )
@@ -2043,8 +2054,12 @@ scanGetItemFull(IndexScanDesc scan, RumItem *advancePast,
20432054 */
20442055 entry = so -> entries [0 ];
20452056
2057+ if (entry -> isFinished )
2058+ return false;
2059+
20462060 entryGetItem (& so -> rumstate , entry , & nextEntryList , scan -> xs_snapshot );
2047- if (entry -> isFinished == true)
2061+
2062+ if (entry -> isFinished )
20482063 return false;
20492064
20502065 /* Fill outerAddInfo */
You can’t perform that action at this time.
0 commit comments