From 58eeefeef48619d8f3f15954c9f923a56515dd51 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 25 Mar 2024 15:40:15 -0700 Subject: [PATCH] Handle nulls --- src/hnswscan.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/hnswscan.c b/src/hnswscan.c index eaf0519..ce0c2f3 100644 --- a/src/hnswscan.c +++ b/src/hnswscan.c @@ -6,6 +6,7 @@ #include "storage/bufmgr.h" #include "storage/lmgr.h" #include "utils/memutils.h" +#include "utils/varbit.h" /* * Algorithm 5 from paper @@ -73,7 +74,22 @@ GetScanValue(IndexScanDesc scan) Datum value; if (scan->orderByData->sk_flags & SK_ISNULL) - value = PointerGetDatum(InitVector(GetDimensions(scan->indexRelation))); + { + Oid typid = TupleDescAttr(scan->indexRelation->rd_att, 0)->atttypid; + int dimensions = GetDimensions(scan->indexRelation); + + if (typid == BITOID || typid == VARBITOID) + { + int len = VARBITTOTALLEN(dimensions); + VarBit *v = (VarBit *) palloc0(len); + + SET_VARSIZE(v, len); + VARBITLEN(v) = dimensions; + value = PointerGetDatum(v); + } + else + value = PointerGetDatum(InitVector(dimensions)); + } else { value = scan->orderByData->sk_argument;