diff --git a/sqlite-vec.c b/sqlite-vec.c index ab77083c..42a166ce 100644 --- a/sqlite-vec.c +++ b/sqlite-vec.c @@ -9576,7 +9576,7 @@ int vec0Update_Delete_ClearValidity(vec0_vtab *p, i64 chunk_id, p->schemaName, p->shadowChunksName, chunk_id, validityOffset); goto cleanup; } - if (!(bx >> (chunk_offset % CHAR_BIT))) { + if (!((bx >> (chunk_offset % CHAR_BIT)) & 1)) { // IMP: V21193_05263 rc = SQLITE_ERROR; vtab_set_error( diff --git a/tests/test-loadable.py b/tests/test-loadable.py index 0ef935c5..6f53a89f 100644 --- a/tests/test-loadable.py +++ b/tests/test-loadable.py @@ -1451,6 +1451,14 @@ def test_vec0_delete_errors(): ): db.execute("delete from t1 where rowid = 1") db.rollback() + # only the row's own bit counts, not a higher one in the same byte + db.execute("begin") + db.execute("UPDATE t1_chunks SET validity = x'02'") + with _raises( + "vec0 deletion error: validity bit is not set for main.t1_chunks.1 at 0" + ): + db.execute("delete from t1 where rowid = 1") + db.rollback() # EVIDENCE-OF: V21193_05263 vec0 DELETE raises error on validity blob error db.commit()