Skip duplicate center check for bit [skip ci]

This commit is contained in:
Andrew Kane
2024-04-16 17:20:48 -07:00
parent 04af15c9d6
commit 4e2b76e627
3 changed files with 20 additions and 14 deletions

View File

@@ -707,21 +707,22 @@ CheckCenters(Relation index, VectorArray centers, IvfflatType type)
elog(ERROR, "Unsupported type");
}
/* Ensure no duplicate centers */
/* Fine to sort in-place */
if (type == IVFFLAT_TYPE_VECTOR)
qsort(centers->items, centers->length, centers->itemsize, CompareVectors);
else if (type == IVFFLAT_TYPE_HALFVEC)
qsort(centers->items, centers->length, centers->itemsize, CompareHalfVectors);
else if (type == IVFFLAT_TYPE_BIT)
qsort(centers->items, centers->length, centers->itemsize, CompareBitVectors);
else
elog(ERROR, "Unsupported type");
for (int i = 1; i < centers->length; i++)
if (type != IVFFLAT_TYPE_BIT)
{
if (datumIsEqual(PointerGetDatum(VectorArrayGet(centers, i)), PointerGetDatum(VectorArrayGet(centers, i - 1)), false, -1))
elog(ERROR, "Duplicate centers detected. Please report a bug.");
/* Ensure no duplicate centers */
/* Fine to sort in-place */
if (type == IVFFLAT_TYPE_VECTOR)
qsort(centers->items, centers->length, centers->itemsize, CompareVectors);
else if (type == IVFFLAT_TYPE_HALFVEC)
qsort(centers->items, centers->length, centers->itemsize, CompareHalfVectors);
else
elog(ERROR, "Unsupported type");
for (int i = 1; i < centers->length; i++)
{
if (datumIsEqual(PointerGetDatum(VectorArrayGet(centers, i)), PointerGetDatum(VectorArrayGet(centers, i - 1)), false, -1))
elog(ERROR, "Duplicate centers detected. Please report a bug.");
}
}
/* Ensure no zero vectors for cosine distance */