mirror of
https://github.com/asg017/sqlite-vec.git
synced 2026-04-25 00:36:56 +02:00
block WHERE constraints on auxiliary columns in KNN queries
This commit is contained in:
parent
7d4c023928
commit
743511af55
3 changed files with 81 additions and 1 deletions
13
sqlite-vec.c
13
sqlite-vec.c
|
|
@ -4923,6 +4923,7 @@ static int vec0BestIndex(sqlite3_vtab *pVTab, sqlite3_index_info *pIdxInfo) {
|
|||
int iRowidTerm = -1;
|
||||
int iKTerm = -1;
|
||||
int iRowidInTerm = -1;
|
||||
int hasAuxConstraint = 0;
|
||||
|
||||
#ifdef SQLITE_VEC_DEBUG
|
||||
printf("pIdxInfo->nOrderBy=%d, pIdxInfo->nConstraint=%d\n", pIdxInfo->nOrderBy, pIdxInfo->nConstraint);
|
||||
|
|
@ -4977,6 +4978,11 @@ static int vec0BestIndex(sqlite3_vtab *pVTab, sqlite3_index_info *pIdxInfo) {
|
|||
if (op == SQLITE_INDEX_CONSTRAINT_EQ && iColumn == vec0_column_k_idx(p)) {
|
||||
iKTerm = i;
|
||||
}
|
||||
if(
|
||||
(op != SQLITE_INDEX_CONSTRAINT_LIMIT && op != SQLITE_INDEX_CONSTRAINT_OFFSET)
|
||||
&& vec0_column_idx_is_auxiliary(p, iColumn)) {
|
||||
hasAuxConstraint = 1;
|
||||
}
|
||||
}
|
||||
|
||||
sqlite3_str *idxStr = sqlite3_str_new(NULL);
|
||||
|
|
@ -5019,6 +5025,13 @@ static int vec0BestIndex(sqlite3_vtab *pVTab, sqlite3_index_info *pIdxInfo) {
|
|||
}
|
||||
}
|
||||
|
||||
if(hasAuxConstraint) {
|
||||
// IMP: V25623_09693
|
||||
vtab_set_error(pVTab, "An illegal WHERE constraint was provided on a vec0 auxiliary column in a KNN query.");
|
||||
rc = SQLITE_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
sqlite3_str_appendchar(idxStr, 1, VEC0_QUERY_PLAN_KNN);
|
||||
|
||||
int argvIndex = 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue