@@ -339,39 +339,21 @@ int vectorParseSqliteBlobWithType(
339339
340340int detectBlobVectorParameters (sqlite3_value * arg , int * pType , int * pDims , char * * pzErrMsg ) {
341341 const u8 * pBlob ;
342- int nBlobSize ;
342+ size_t nBlobSize , nDataSize ;
343343
344344 assert ( sqlite3_value_type (arg ) == SQLITE_BLOB );
345345
346346 pBlob = sqlite3_value_blob (arg );
347347 nBlobSize = sqlite3_value_bytes (arg );
348- if ( nBlobSize % 2 != 0 ){
349- // we have trailing byte with explicit type definition
350- * pType = pBlob [nBlobSize - 1 ];
351- nBlobSize -- ;
352- } else {
353- // else, fallback to FLOAT32
354- * pType = VECTOR_TYPE_FLOAT32 ;
355- }
356- if ( * pType == VECTOR_TYPE_FLOAT32 ){
357- * pDims = nBlobSize / sizeof (float );
358- }else if ( * pType == VECTOR_TYPE_FLOAT64 ){
359- * pDims = nBlobSize / sizeof (double );
360- }else if ( * pType == VECTOR_TYPE_1BIT ){
361- if ( nBlobSize == 0 || nBlobSize % 2 != 0 ){
362- * pzErrMsg = sqlite3_mprintf ("vector: malformed 1bit float: blob size must has even size (without last byte): size=%d" , nBlobSize );
363- return -1 ;
364- }
365- * pDims = nBlobSize * 8 - pBlob [nBlobSize - 1 ];
366- }else {
367- * pzErrMsg = sqlite3_mprintf ("vector: unexpected binary type: got %d, expected %d or %d" , * pType , VECTOR_TYPE_FLOAT32 , VECTOR_TYPE_FLOAT64 );
368- return -1 ;
348+
349+ if ( vectorParseMeta (pBlob , nBlobSize , pType , pDims , & nDataSize , pzErrMsg ) != SQLITE_OK ){
350+ return SQLITE_ERROR ;
369351 }
370352 if ( * pDims > MAX_VECTOR_SZ ){
371353 * pzErrMsg = sqlite3_mprintf ("vector: max size exceeded: %d > %d" , * pDims , MAX_VECTOR_SZ );
372- return -1 ;
354+ return SQLITE_ERROR ;
373355 }
374- return 0 ;
356+ return SQLITE_OK ;
375357}
376358
377359int detectTextVectorParameters (sqlite3_value * arg , int typeHint , int * pType , int * pDims , char * * pzErrMsg ) {
@@ -560,16 +542,7 @@ size_t vectorSerializeToBlob(const Vector *pVector, unsigned char *pBlob, size_t
560542}
561543
562544void vectorInitFromBlob (Vector * pVector , const unsigned char * pBlob , size_t nBlobSize ){
563- switch (pVector -> type ) {
564- case VECTOR_TYPE_FLOAT32 :
565- vectorF32InitFromBlob (pVector , pBlob , nBlobSize );
566- break ;
567- case VECTOR_TYPE_FLOAT64 :
568- vectorF64InitFromBlob (pVector , pBlob , nBlobSize );
569- break ;
570- default :
571- assert (0 );
572- }
545+ pVector -> data = (void * )pBlob ;
573546}
574547
575548static void vectorConvertFromF32 (const Vector * pFrom , Vector * pTo ){
0 commit comments