Skip _vector_chunks rename for non-FLAT vec0 columns#294
Merged
Conversation
vec0Rename emits an unconditional ALTER TABLE on `<name>_vector_chunks%02d` for every vector column, but non-FLAT columns (rescore, IVF, DiskANN) don't create that shadow table — so ALTER TABLE RENAME on a DiskANN-indexed (or rescore/IVF) vec0 table fails with `no such table` and leaves any cached prepared statements still referencing the old name. Mirror the guard already used at create time in vec0_init around VEC0_SHADOW_VECTOR_N_CREATE: only rename `_vector_chunks` when the column's index_type is VEC0_INDEX_TYPE_FLAT. Adds a regression test exercising rename on a DiskANN-indexed table.
Owner
|
Thank you @rolf-moz ! |
asg017
added a commit
that referenced
this pull request
May 18, 2026
vec0Rename only emitted ALTER TABLE on `<name>_ivf_cells%02d`, so renaming an IVF-indexed vec0 table left `_ivf_centroids`, `_ivf_rowid_map`, and `_ivf_vectors` (when quantizer != none) with the old prefix. Subsequent queries against the renamed table broke, and DROP TABLE left those three shadows orphaned in the schema. Same shape as the DiskANN/rescore bug fixed in #294, just for the IVF branch. Mirror ivf_create_shadow_tables: emit ALTER for all four IVF shadows, gating `_ivf_vectors` on quantizer != VEC0_IVF_QUANTIZER_NONE. Adds test-ivf-rename.py (auto-skipped on default builds via conftest's test-ivf prefix rule) covering quantizer=none, quantizer=binary, and DROP-after-rename. Also adds a rescore rename regression test to test-rename.py to lock down the (already-correct) rescore path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@asg017 I was using table renaming in order to force a flush in the DiskANN and this bug popped up with alter tables. I should note that don't know the sqlite-vec code very well and relied on Claude to identify this, so take with a grain of salt.
vec0Rename emits an unconditional ALTER TABLE on
<name>_vector_chunks%02dfor every vector column, but non-FLAT columns (rescore, IVF, DiskANN) don't create that shadow table — so ALTER TABLE RENAME on a DiskANN-indexed (or rescore/IVF) vec0 table fails withno such tableand leaves any cached prepared statements still referencing the old name.Mirror the guard already used at create time in vec0_init around VEC0_SHADOW_VECTOR_N_CREATE: only rename
_vector_chunkswhen the column's index_type is VEC0_INDEX_TYPE_FLAT.Adds a regression test exercising rename on a DiskANN-indexed table.