Skip to content

Commit 9981d60

Browse files
committed
refine errors even more
1 parent ad766c4 commit 9981d60

File tree

4 files changed

+33
-28
lines changed

4 files changed

+33
-28
lines changed

libsql-sqlite3/src/vector.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ static int vectorParseSqliteText(
180180
pzText++;
181181

182182
if( *pzText != '[' ){
183-
*pzErrMsg = sqlite3_mprintf("invalid vector: must start with '['");
183+
*pzErrMsg = sqlite3_mprintf("vector: must start with '['");
184184
goto error;
185185
}
186186
pzText++;
@@ -195,7 +195,7 @@ static int vectorParseSqliteText(
195195
}
196196
if( this != ',' && this != ']' ){
197197
if( iBuf > MAX_FLOAT_CHAR_SZ ){
198-
*pzErrMsg = sqlite3_mprintf("invalid vector: float string length exceeded %d characters: '%s'", MAX_FLOAT_CHAR_SZ, valueBuf);
198+
*pzErrMsg = sqlite3_mprintf("vector: float string length exceeded %d characters: '%s'", MAX_FLOAT_CHAR_SZ, valueBuf);
199199
goto error;
200200
}
201201
valueBuf[iBuf++] = this;
@@ -206,11 +206,11 @@ static int vectorParseSqliteText(
206206
break;
207207
}
208208
if( sqlite3AtoF(valueBuf, &elem, iBuf, SQLITE_UTF8) <= 0 ){
209-
*pzErrMsg = sqlite3_mprintf("invalid vector: invalid float at position %d: '%s'", iElem, valueBuf);
209+
*pzErrMsg = sqlite3_mprintf("vector: invalid float at position %d: '%s'", iElem, valueBuf);
210210
goto error;
211211
}
212212
if( iElem >= MAX_VECTOR_SZ ){
213-
*pzErrMsg = sqlite3_mprintf("invalid vector: max size exceeded %d", MAX_VECTOR_SZ);
213+
*pzErrMsg = sqlite3_mprintf("vector: max size exceeded %d", MAX_VECTOR_SZ);
214214
goto error;
215215
}
216216
// clear only first bufidx positions - all other are zero
@@ -229,7 +229,7 @@ static int vectorParseSqliteText(
229229
pzText++;
230230

231231
if( *pzText != ']' ){
232-
*pzErrMsg = sqlite3_mprintf("invalid vector: must end with ']'");
232+
*pzErrMsg = sqlite3_mprintf("vector: must end with ']'");
233233
goto error;
234234
}
235235
pzText++;
@@ -238,7 +238,7 @@ static int vectorParseSqliteText(
238238
pzText++;
239239

240240
if( *pzText != '\0' ){
241-
*pzErrMsg = sqlite3_mprintf("invalid vector: non-space symbols after closing ']' are forbidden");
241+
*pzErrMsg = sqlite3_mprintf("vector: non-space symbols after closing ']' are forbidden");
242242
goto error;
243243
}
244244
pVector->dims = iElem;
@@ -283,11 +283,11 @@ int detectBlobVectorParameters(sqlite3_value *arg, int *pType, int *pDims, char
283283
} else if( *pType == VECTOR_TYPE_FLOAT64 ){
284284
*pDims = nBlobSize / sizeof(double);
285285
} else{
286-
*pzErrMsg = sqlite3_mprintf("invalid vector: unexpected binary type: got %d, expected %d or %d", *pType, VECTOR_TYPE_FLOAT32, VECTOR_TYPE_FLOAT64);
286+
*pzErrMsg = sqlite3_mprintf("vector: unexpected binary type: got %d, expected %d or %d", *pType, VECTOR_TYPE_FLOAT32, VECTOR_TYPE_FLOAT64);
287287
return -1;
288288
}
289289
if( *pDims > MAX_VECTOR_SZ ){
290-
*pzErrMsg = sqlite3_mprintf("invalid vector: max size exceeded: %d > %d", *pDims, MAX_VECTOR_SZ);
290+
*pzErrMsg = sqlite3_mprintf("vector: max size exceeded: %d > %d", *pDims, MAX_VECTOR_SZ);
291291
return -1;
292292
}
293293
return 0;
@@ -334,7 +334,7 @@ int detectVectorParameters(sqlite3_value *arg, int typeHint, int *pType, int *pD
334334
case SQLITE_TEXT:
335335
return detectTextVectorParameters(arg, typeHint, pType, pDims, pzErrMsg);
336336
default:
337-
*pzErrMsg = sqlite3_mprintf("invalid vector: unexpected value type: got %s, expected TEXT or BLOB", sqlite3_type_repr(sqlite3_value_type(arg)));
337+
*pzErrMsg = sqlite3_mprintf("vector: unexpected value type: got %s, expected TEXT or BLOB", sqlite3_type_repr(sqlite3_value_type(arg)));
338338
return -1;
339339
}
340340
}
@@ -350,7 +350,7 @@ int vectorParse(
350350
case SQLITE_TEXT:
351351
return vectorParseSqliteText(arg, pVector, pzErrMsg);
352352
default:
353-
*pzErrMsg = sqlite3_mprintf("invalid vector: unexpected value type: got %s, expected TEXT or BLOB", sqlite3_type_repr(sqlite3_value_type(arg)));
353+
*pzErrMsg = sqlite3_mprintf("vector: unexpected value type: got %s, expected TEXT or BLOB", sqlite3_type_repr(sqlite3_value_type(arg)));
354354
return -1;
355355
}
356356
}

libsql-sqlite3/src/vectorIndex.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ static int parseVectorIdxParam(const char *zParam, VectorIdxParams *pParams, con
411411
zValue = zParam + iDelimiter + 1;
412412
nValueLen = sqlite3Strlen30(zValue);
413413
for(i = 0; i < ArraySize(VECTOR_PARAM_NAMES); i++){
414-
if( sqlite3_strnicmp(VECTOR_PARAM_NAMES[i].zName, zParam, iDelimiter) != 0 ){
414+
if( iDelimiter != strlen(VECTOR_PARAM_NAMES[i].zName) || sqlite3_strnicmp(VECTOR_PARAM_NAMES[i].zName, zParam, iDelimiter) != 0 ){
415415
continue;
416416
}
417417
if( VECTOR_PARAM_NAMES[i].type == 1 ){
@@ -454,33 +454,33 @@ static int parseVectorIdxParam(const char *zParam, VectorIdxParams *pParams, con
454454
return -1;
455455
}
456456
}
457-
*pErrMsg = "unexpected parameter key";
457+
*pErrMsg = "invalid parameter";
458458
return -1;
459459
}
460460

461461
int parseVectorIdxParams(Parse *pParse, VectorIdxParams *pParams, int type, int dims, struct ExprList_item *pArgList, int nArgs) {
462462
int i;
463463
const char *pErrMsg;
464464
if( vectorIdxParamsPutU64(pParams, VECTOR_FORMAT_PARAM_ID, VECTOR_FORMAT_DEFAULT) != 0 ){
465-
sqlite3ErrorMsg(pParse, "unable to serialize vector index parameter: format");
465+
sqlite3ErrorMsg(pParse, "vector index: unable to serialize vector index parameter: format");
466466
return SQLITE_ERROR;
467467
}
468468
if( vectorIdxParamsPutU64(pParams, VECTOR_TYPE_PARAM_ID, type) != 0 ){
469-
sqlite3ErrorMsg(pParse, "unable to serialize vector index parameter: type");
469+
sqlite3ErrorMsg(pParse, "vector index: unable to serialize vector index parameter: type");
470470
return SQLITE_ERROR;
471471
}
472472
if( vectorIdxParamsPutU64(pParams, VECTOR_DIM_PARAM_ID, dims) != 0 ){
473-
sqlite3ErrorMsg(pParse, "unable to serialize vector index parameter: dim");
473+
sqlite3ErrorMsg(pParse, "vector index: unable to serialize vector index parameter: dim");
474474
return SQLITE_ERROR;
475475
}
476476
for(i = 0; i < nArgs; i++){
477477
Expr *pArgExpr = pArgList[i].pExpr;
478478
if( pArgExpr->op != TK_STRING ){
479-
sqlite3ErrorMsg(pParse, "all arguments after first must be strings");
479+
sqlite3ErrorMsg(pParse, "vector index: all arguments after first must be strings");
480480
return SQLITE_ERROR;
481481
}
482482
if( parseVectorIdxParam(pArgExpr->u.zToken, pParams, &pErrMsg) != 0 ){
483-
sqlite3ErrorMsg(pParse, "invalid vector index parameter '%s': %s", pArgExpr->u.zToken, pErrMsg);
483+
sqlite3ErrorMsg(pParse, "vector index: invalid vector index parameter '%s': %s", pArgExpr->u.zToken, pErrMsg);
484484
return SQLITE_ERROR;
485485
}
486486
}
@@ -909,7 +909,6 @@ int vectorIndexCreate(Parse *pParse, const Index *pIdx, const char *zDbSName, co
909909
}
910910
rc = parseVectorIdxParams(pParse, &idxParams, type, dims, pListItem + 1, pArgsList->nExpr - 1);
911911
if( rc != SQLITE_OK ){
912-
sqlite3ErrorMsg(pParse, "vector index: failed to parse binary parameters");
913912
return CREATE_FAIL;
914913
}
915914
if( vectorIdxKeyGet(pTable, &idxKey, &pzErrMsg) != 0 ){

libsql-sqlite3/test/libsql_vector.test

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,16 @@ do_test vector-1-func-errors {
9090
lappend ret [error_messages {SELECT vector_distance_cos('[1,2,3]', '[1,2]')}]
9191
lappend ret [error_messages {SELECT vector_distance_cos(vector32('[1,2,3]'), vector64('[1,2,3]'))}]
9292
} [list {*}{
93-
{invalid vector: unexpected value type: got FLOAT, expected TEXT or BLOB}
94-
{invalid vector: unexpected value type: got INTEGER, expected TEXT or BLOB}
95-
{invalid vector: unexpected value type: got NULL, expected TEXT or BLOB}
96-
{invalid vector: must start with '['}
97-
{invalid vector: must start with '['}
98-
{invalid vector: non-space symbols after closing ']' are forbidden}
99-
{invalid vector: invalid float at position 0: '[1'}
100-
{invalid vector: invalid float at position 2: '1.1.1'}
101-
{invalid vector: must end with ']'}
102-
{invalid vector: unexpected binary type: got 0, expected 1 or 2}
93+
{vector: unexpected value type: got FLOAT, expected TEXT or BLOB}
94+
{vector: unexpected value type: got INTEGER, expected TEXT or BLOB}
95+
{vector: unexpected value type: got NULL, expected TEXT or BLOB}
96+
{vector: must start with '['}
97+
{vector: must start with '['}
98+
{vector: non-space symbols after closing ']' are forbidden}
99+
{vector: invalid float at position 0: '[1'}
100+
{vector: invalid float at position 2: '1.1.1'}
101+
{vector: must end with ']'}
102+
{vector: unexpected binary type: got 0, expected 1 or 2}
103103
{vector_distance_cos: vectors must have the same length: 3 != 2}
104104
{vector_distance_cos: vectors must have the same type: 1 != 2}
105105
}]

libsql-sqlite3/test/libsql_vector_index.test

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ do_test vector-errors {
278278
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(b) )}]
279279
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(c) )}]
280280
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(d) )}]
281+
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(e, 'a=1') )}]
282+
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(e, 'metric=unknown') )}]
283+
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err( libsql_vector_idx(e, 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine', 'metric=cosine') )}]
281284
lappend ret [error_messages {CREATE INDEX t_err_idx ON t_err2( libsql_vector_idx(v) )}]
282285
sqlite3_exec db { CREATE TABLE t_err3 ( e FLOAT32(4) ) }
283286
sqlite3_exec db { CREATE INDEX t_err3_idx ON t_err3 (libsql_vector_idx(e)) }
@@ -298,6 +301,9 @@ do_test vector-errors {
298301
{vector index: unexpected vector column type: BLOB}
299302
{vector index: non digit symbol in vector column parameter: FLOAT32(-1)}
300303
{vector index: vector column must have non-zero dimension for index: FLOAT32(0)}
304+
{vector index: invalid vector index parameter 'a=1': invalid parameter}
305+
{vector index: invalid vector index parameter 'metric=unknown': invalid parameter}
306+
{vector index: invalid vector index parameter 'metric=cosine': unable to serialize vector index parameter}
301307
{vector index: unsupported for tables without ROWID and composite primary key}
302308
{vector index(insert): dimensions are different: 1 != 4}
303309
{vector index(insert): dimensions are different: 5 != 4}

0 commit comments

Comments
 (0)