Skip to content

Commit 4a57f02

Browse files
committed
add simple conversion test
1 parent 626ff8c commit 4a57f02

2 files changed

Lines changed: 42 additions & 11 deletions

File tree

libsql-sqlite3/src/vector.c

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -610,31 +610,45 @@ static void vectorFuncHintedType(
610610
sqlite3_context *context,
611611
int argc,
612612
sqlite3_value **argv,
613-
int typeHint
613+
int targetType
614614
){
615615
char *pzErrMsg = NULL;
616-
Vector *pVector;
616+
Vector *pVector = NULL, *pTarget = NULL;
617617
int type, dims;
618618
if( argc < 1 ){
619-
return;
619+
goto out;
620620
}
621-
if( detectVectorParameters(argv[0], typeHint, &type, &dims, &pzErrMsg) != 0 ){
621+
if( detectVectorParameters(argv[0], targetType, &type, &dims, &pzErrMsg) != 0 ){
622622
sqlite3_result_error(context, pzErrMsg, -1);
623623
sqlite3_free(pzErrMsg);
624-
return;
624+
goto out;
625625
}
626626
pVector = vectorContextAlloc(context, type, dims);
627-
if( pVector==NULL ){
628-
return;
627+
if( pVector == NULL ){
628+
goto out;
629629
}
630630
if( vectorParseWithType(argv[0], pVector, &pzErrMsg) != 0 ){
631631
sqlite3_result_error(context, pzErrMsg, -1);
632632
sqlite3_free(pzErrMsg);
633-
goto out_free_vec;
633+
goto out;
634+
}
635+
if( type == targetType ){
636+
vectorSerializeWithType(context, pVector);
637+
}else{
638+
pTarget = vectorContextAlloc(context, targetType, dims);
639+
if( pTarget == NULL ){
640+
goto out;
641+
}
642+
vectorConvert(pVector, pTarget);
643+
vectorSerializeWithType(context, pTarget);
644+
}
645+
out:
646+
if( pVector != NULL ){
647+
vectorFree(pVector);
648+
}
649+
if( pTarget != NULL ){
650+
vectorFree(pTarget);
634651
}
635-
vectorSerializeWithType(context, pVector);
636-
out_free_vec:
637-
vectorFree(pVector);
638652
}
639653

640654
static void vector32Func(

libsql-sqlite3/test/libsql_vector.test

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,23 @@ do_execsql_test vector-1-func-valid {
6767
{0.200000002980232}
6868
}
6969

70+
do_execsql_test vector-1-conversion {
71+
SELECT hex(vector32('[]'));
72+
SELECT hex(vector64(vector32('[]')));
73+
74+
SELECT hex(vector32(vector32('[0.000001,1e-100,1e100,1e10,1e-10,0,1.5]')));
75+
SELECT hex(vector32(vector64('[0.000001,1e-100,1e100,1e10,1e-10,0,1.5]')));
76+
SELECT hex(vector64(vector32('[0.000001,1e-100,1e100,1e10,1e-10,0,1.5]')));
77+
SELECT hex(vector64(vector64('[0.000001,1e-100,1e100,1e10,1e-10,0,1.5]')));
78+
} {
79+
{}
80+
02
81+
BD378635000000000000807FF9021550FFE6DB2E000000000000C03F
82+
BD378635000000000000807FF9021550FFE6DB2E000000000000C03F
83+
000000A0F7C6B03E0000000000000000000000000000F07F000000205FA00242000000E0DF7CDB3D0000000000000000000000000000F83F02
84+
8DEDB5A0F7C6B03E30058EE42EFF2B2B7DC39425AD49B254000000205FA00242BBBDD7D9DF7CDB3D0000000000000000000000000000F83F02
85+
}
86+
7087
proc error_messages {sql} {
7188
set ret ""
7289
set stmt [sqlite3_prepare db $sql -1 dummy]

0 commit comments

Comments
 (0)