diff --git a/src/hnswscan.c b/src/hnswscan.c index 791ca4f..a2f6f8b 100644 --- a/src/hnswscan.c +++ b/src/hnswscan.c @@ -117,6 +117,8 @@ hnswbeginscan(Relation index, int nkeys, int norderbys) so = (HnswScanOpaque) palloc(sizeof(HnswScanOpaqueData)); so->typeInfo = HnswGetTypeInfo(index); so->first = true; + so->v.tids = NULL; + so->discarded = NULL; so->tmpCtx = AllocSetContextCreate(CurrentMemoryContext, "Hnsw scan temporary context", ALLOCSET_DEFAULT_SIZES); @@ -139,11 +141,12 @@ hnswrescan(IndexScanDesc scan, ScanKey keys, int nkeys, ScanKey orderbys, int no { HnswScanOpaque so = (HnswScanOpaque) scan->opaque; - if (!so->first) - { - pairingheap_reset(so->discarded); + if (so->v.tids != NULL) tidhash_reset(so->v.tids); - } + + if (so->discarded != NULL) + pairingheap_reset(so->discarded); + so->first = true; so->tuples = 0; MemoryContextReset(so->tmpCtx); @@ -219,6 +222,10 @@ hnswgettuple(IndexScanDesc scan, ScanDirection dir) if (!hnsw_streaming) break; + /* Empty index */ + if (so->discarded == NULL) + break; + /* Reached max number of additional tuples */ if (hnsw_ef_stream != -1 && so->tuples >= hnsw_ef_search + hnsw_ef_stream) {