diff --git a/ext/vec1/vec1.c b/ext/vec1/vec1.c index ba07d080fd..288366952d 100644 --- a/ext/vec1/vec1.c +++ b/ext/vec1/vec1.c @@ -52,7 +52,7 @@ /* ** Software version. Returned by "SELECT vec1_info()". */ -#define VEC1_VERSION "0.7" +#define VEC1_VERSION "0.8" /* ** Values for Vec1ModelHeader.iVersion: @@ -105,11 +105,11 @@ typedef char i8; #if !defined(VEC1_TEST_SCALAR) -#define VERTICAL_SUM_GENERIC(aAcc, nAcc, I) { \ - int c; \ - for(c=4; c1 ) aAcc[0] = I (aAcc[0], aAcc[1]); \ +#define VERTICAL_SUM_GENERIC(aAcc, nAcc, I) { \ + int dd; \ + for(dd=4; dd1 ) aAcc[0] = I (aAcc[0], aAcc[1]); \ } #ifdef __AVX2__ @@ -2098,7 +2098,7 @@ static u32 vec1RandomNext(Vec1Random *p) { p->state = old * 6364136223846793005ULL + p->inc; xorshifted = (u32)(((old >> 18u) ^ old) >> 27u); rot = (u32)(old >> 59u); - return ((xorshifted >> rot) | (xorshifted << ((-rot) & 31))) & 0x7FFFFFFF; + return ((xorshifted >> rot) | (xorshifted << ((32 - rot) & 31))) & 0x7FFFFFFF; } static void vec1RandomInit(Vec1Random *p, u64 seed, u64 id){ @@ -2138,7 +2138,7 @@ static void vec1KMeansInitWork(void *pCtx){ float *vec = vec1TrainingVector(p->pVec, ii); for(jj=p->iFirstNew; jjnCentroid; jj++){ float *cent = &p->aCentroid[jj * nElem]; - float dist = vec1L2Dist(vec, cent, nElem); + float dist = (float)vec1L2Dist(vec, cent, nElem); if( jj==0 || distaMin[ii] ){ p->aMin[ii] = dist; if( p->aBest ) p->aBest[ii] = jj; @@ -2256,7 +2256,7 @@ static int vec1KMeansInitOne( /* Choose new centroids */ if( nNewCentroid==1 ){ /* KMeans ++ case */ - float fTarget = (fTotalMin * vec1RandomNext(&rnd)) / 0x7FFFFFFF; + float fTarget = (float)((fTotalMin * vec1RandomNext(&rnd)) / 0x7FFFFFFF); for(vv=0; vvnVec-1; vv++){ fTarget -= (aMin[vv] * (aWeight ? aWeight[vv] : 1)); if( fTarget<=0.0 ) break; @@ -2504,7 +2504,7 @@ static void vec1BestMatchTransposeN( const int nWidth = VEC1_NTRANSPOSE_WIDTH; float aDist[VEC1_MULTIMATCH_NVEC]; int aBest[VEC1_MULTIMATCH_NVEC]; - int vv; + int vv; /* For looping 0..VEC1_MULTIMATCH_NVEC-1 */ int iCent; const float *pTrans = aCentNT; @@ -2518,7 +2518,6 @@ static void vec1BestMatchTransposeN( for(iCent=0; iCent<=(nCent-nWidth); iCent+=nWidth){ __m256 aAcc[VEC1_MULTIMATCH_NVEC]; int d; - int vv; /* For looping 0..VEC1_MULTIMATCH_NVEC-1 */ for(vv=0; vviFirst; for( ; ii<=(p->iEof-VEC1_MULTIMATCH_NVEC); ii+=VEC1_MULTIMATCH_NVEC){ int vv; - int iCent; const float *aVec[VEC1_MULTIMATCH_NVEC]; int aBest[VEC1_MULTIMATCH_NVEC]; @@ -2813,7 +2811,6 @@ static int vec1Ann1KMeans( int *aCount = 0; float *aSum = 0; - int nVecPerJob = 0; LloydsJob *aJob = 0; int rc = SQLITE_OK; int nThread = p ? p->nThread : 1; @@ -3517,17 +3514,17 @@ static void vec1CodebookWork(void *pCtx){ for(ii=0; iinChunk; ii++){ /* Allocate space for this chunk. Either VEC1_TRAINING_SZCHUNK or ** enough space for all remaining sub-vectors, whichever is smaller. */ - int nByte = MIN(VEC1_TRAINING_SZCHUNK, + int nAlloc = MIN(VEC1_TRAINING_SZCHUNK, (pVec->nVec - (ii * pVec->nVecPerChunk)) * nBytePerVec ); - pVec->aChunk[ii] = (float*)sqlite3_malloc(nByte); + pVec->aChunk[ii] = (float*)sqlite3_malloc(nAlloc); if( pVec->aChunk[ii]==0 ){ pJob->rc = SQLITE_NOMEM; break; } if( nShort>0 ){ - memset(pVec->aChunk[ii], 0, nByte); + memset(pVec->aChunk[ii], 0, nAlloc); } } @@ -4272,10 +4269,11 @@ static void vec1CovarianceAccumulateN( int nElem ){ int ii = 0; + int vv; + #ifdef VEC1_HAVE_AVX2 #define VEC1_COVAR_NACC 8 __m256 vs[VEC1_COVAR_NVEC]; - int vv; for(vv=0; vvnThread * sizeof(Vec1RotationJob); Vec1RotationJob *aJob = vec1MallocZero(nByte); if( aJob ){ - int iNext = 0; /* First vector for next job */ int ii; for(ii=0; iinThread; ii++){ Vec1RotationJob *pJob = &aJob[ii]; @@ -4744,7 +4738,6 @@ static void vec1TrainRotation( const int nElem = p->tv.nElem; const int nMatrixByte = sizeof_f32 * nElem * nElem; int iRound = 0; /* Current OPQ round */ - int rc = SQLITE_OK; int ii; float *aRot = (float*)sqlite3_malloc(nMatrixByte * 2); float *aRot2 = &aRot[nElem*nElem]; @@ -5025,15 +5018,12 @@ static void vec1TrainFinal(sqlite3_context *pCtx){ int nByte = 0; u8 *aByte = 0; - int nReqVectors = 0; float *pCsr = 0; - int rc = SQLITE_OK; Vec1JobQueue *pQueue = 0; u32 flags = 0; int ii; - u32 nHdrCodebook = 0; /* Codebooks= value stored in header */ int bPQ = 0; /* Check that sufficient training vectors were provided. */ @@ -6064,7 +6054,6 @@ static int vec1CheckColumnName(const char *zName, char **pzErr){ char aName[16]; int nName = 0; const char *z = zName; - char q = 0; while( vec1IsWhitespace(*z) ) z++; @@ -6613,7 +6602,7 @@ static int vec1ModelTransform( if( pMod->aModel ){ const int nCodebook = pMod->hdr.nCodebook; const int nCodeElem = pMod->nCodeElem; - int M, d, K; + int M; float *pOut = (float*)sqlite3_malloc( sizeof_f32 * nCodebook * nCodeElem * VEC1_PQ_CODEBOOK_SZ @@ -7089,8 +7078,8 @@ static void vec1BinaryQuantLUTBuild( int nCodebook = pTab->mod.hdr.nCodebook; const int nCodeElem = pTab->mod.nCodeElem; - int M, K; - float c = 1.0 / sqrtf((float)nVec); + int M; + float c = 1.0f / sqrtf((float)nVec); assert( nCodeElem==8 || nCodeElem==16 ); @@ -7419,7 +7408,6 @@ static int vec1FilterToIntOp( )); if( pFilter->vop==VEC1_OP_IN ){ - int rc = SQLITE_OK; int *aRval = (int*)vec1MallocZero(sizeof_u32 * (pFilter->iVal+1)); if( aRval==0 ){ return SQLITE_NOMEM; @@ -7439,7 +7427,7 @@ static int vec1FilterToIntOp( }else if( pFilter->vop==VEC1_OP_NOTNULL ){ res = 1; }else if( pFilter->eType==SQLITE_NULL && pFilter->vop==VEC1_OP_IS ){ - rval = eNull; + rval = (int)eNull; op = VEC1_OP_EQ; }else if( pFilter->eType!=SQLITE_NULL ){ @@ -7472,7 +7460,7 @@ static int vec1FilterToIntOp( if( res>0 ){ assert( eNull==(iMax+1) ); op = VEC1_OP_LT; - rval = eNull; + rval = (int)eNull; } *pRval = rval; @@ -7965,7 +7953,7 @@ static VEC1_NOINLINE int vec1DoMetaFilters( } if( pFilter->vop==VEC1_OP_IN ){ - ii += pFilter->iVal; + ii += (int)pFilter->iVal; } VEC1_QINSTR_STOP(pTab, VEC1_QINSTR_METASCAN); } @@ -7983,7 +7971,7 @@ static void vec1EncodeVectorBit( u8 *pOut; assert( pMod->hdr.flags & VEC1_MODEL_BITQUANT ); - norm = vec1VectorNorm2(aVec, nElem); + norm = (float)vec1VectorNorm2(aVec, nElem); norm = sqrtf(norm); memcpy(aCode, &norm, sizeof_f32); @@ -8096,7 +8084,7 @@ static void vec1DecodeVector( /* The reconstructed vector uses the following value as the magnitude ** of each dimension. The value is -ve if the corresponding bit is clear, ** or +ve if it is set. */ - fVal = sqrt((fNorm*fNorm) / nElem); + fVal = (float)sqrt((fNorm*fNorm) / nElem); assert( pMod->nCodeElem==8 || pMod->nCodeElem==16 ); for(ii=0; ii=iEarly && (iBook & 0x03)==0x03 - && vec1AnyLessThan(aAcc, pHeap->fMin)==0 + && vec1AnyLessThan(aAcc, (float)pHeap->fMin)==0 ){ goto skip; } @@ -8210,7 +8198,7 @@ static void vec1ScanBlocked( for(jj=0; jjcfg.nElem); + fResidualNorm2 = (float)vec1VectorNorm2(aEncode, pTab->cfg.nElem); vec1EncodeVectorBit(&pTab->mod, aEncode, pQuery->aBit); } VEC1_QINSTR_STOP(pTab, VEC1_QINSTR_LUT); @@ -8795,7 +8783,7 @@ static void vec1ValueToFilter( case SQLITE_TEXT: pFilter->iVal = sqlite3_value_bytes(pVal); pFilter->pPtr = (u8*)vec1Dup( - pRc, sqlite3_value_text(pVal), pFilter->iVal + pRc, sqlite3_value_text(pVal), (int)pFilter->iVal ); break; default: { @@ -9038,13 +9026,12 @@ static int vec1QueryToSql(Vec1Csr *pCsr){ int bRhs = 1; const char *zOp = ""; if( p->vop==VEC1_OP_IN ){ - const char *zComma = ""; int jj; sqlite3_str_appendf(pWhere, "%sc%d IN(?%d", zAnd, p->iMeta, iNextVar++); for(jj=2; jj<=p->iVal; jj++){ sqlite3_str_appendf(pWhere, ", ?%d", iNextVar++); } - ii += p->iVal; + ii += (int)p->iVal; sqlite3_str_appendf(pWhere, ")"); }else{ switch( p->vop ){ @@ -9108,13 +9095,13 @@ static int vec1QueryToSql(Vec1Csr *pCsr){ break; case SQLITE_TEXT: rc = sqlite3_bind_text(pCsr->pStmt, - iNextVar, (const char*)p->pPtr, p->iVal, SQLITE_TRANSIENT + iNextVar, (const char*)p->pPtr, (int)p->iVal, SQLITE_TRANSIENT ); break; default: assert( p->eType==SQLITE_BLOB ); rc = sqlite3_bind_blob( - pCsr->pStmt, iNextVar, p->pPtr, p->iVal, SQLITE_TRANSIENT + pCsr->pStmt, iNextVar, p->pPtr, (int)p->iVal, SQLITE_TRANSIENT ); break; } @@ -9871,9 +9858,6 @@ static int vec1MetaValueSize(const u8 *aBuf){ return (int)(((V-5)/2) + n); } } - - assert( 0 ); - return 0; } #ifndef NDEBUG @@ -10268,7 +10252,6 @@ static int vec1ListBuilderAdd( ** buffer grows by depends on whether it is blocked or not. */ rc = vec1BufferGrow(&p->bufRowid, p->szRowid); if( rc==SQLITE_OK ){ - int nReq = 0; if( p->eBlocked==VEC1_BLOCKED_NONE ){ rc = vec1BufferGrow(&p->bufData, p->nVectorSize); }else{ @@ -10945,7 +10928,6 @@ static void vec1QuantizeVectorN( const int nBucket = pMod->hdr.nBucket; const int nStride = MAX(nElem, pMod->nCodeElem * (int)pMod->hdr.nCodebook); const float *aVec[VEC1_MULTIMATCH_NVEC]; - int iBucket = 0; int vv; vec1TransformInputVectorN(pMod, aVector, aVec, aTmp, nStride); @@ -11705,7 +11687,6 @@ static int vec1UpdateMethod( /* If this is an INSERT or UPDATE, write the new row. */ if( rc==SQLITE_OK ){ - int nVec = sqlite3_value_bytes(argv[2+VEC1_COLUMN_VECTOR]); int iBucket = 0; /* If there is an index (i.e. not index:"none"), then allocate an @@ -12083,9 +12064,9 @@ static int vec1IntegrityCheckEncoded( float e1 = 0.0; /* aEnc[] squared reconstruction error */ float e2 = 0.0; /* aIdx[] squared reconstruction error */ vec1DecodeVector(pMod, aEnc, v1); - e1 = vec1L2Dist(v1, aVec, nElem); + e1 = (float)vec1L2Dist(v1, aVec, nElem); vec1DecodeVector(pMod, aIdx, v1); - e2 = vec1L2Dist(v1, aVec, nElem); + e2 = (float)vec1L2Dist(v1, aVec, nElem); if( vec1FloatWithinTolerance(e1, e2, fTol)==0 ) return 1; } } @@ -12289,7 +12270,6 @@ static int vec1IntegrityMethod( ** norm followed by nCodebook bytes of data. For PQ or OPQ, ** aPQ[] just contains the nCodebook bytes of encoded vector. */ const float *aEnc = (const float*)aTransform; - int szElem0 = 0; if( (pMod->hdr.flags & VEC1_MODEL_RESIDUAL) ){ vec1Sub(aResidual, aEnc, &pMod->aCentroid[iCalc*nElem], nElem); aEnc = aResidual; diff --git a/manifest b/manifest index b6d82c68ac..990964243e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scase\scausing\sinfinitely\srecursive\scalls\sto\svec1.xSavepoint. -D 2026-10-06T10:30:12.845 +C Increase\sversion\snumber\sreturned\sby\svec1_info()\sto\s"0.8".\sAlso\sfix\ssome\swarnings\sin\svec1.c. +D 2026-10-06T11:13:01.512 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -641,7 +641,7 @@ F ext/vec1/tool/vec1_algo_test.c c62b828a3e46a39a8656f26b74804906cc3160758f8afc6 F ext/vec1/tool/vec1bench.tcl a117caee3cb99712f0477fe2fa85c94c260866951d3a9d667b62631b480c2d2d F ext/vec1/tool/vec1bench_addcols.tcl 8c509253d07b179928f2ee32e3591a2c70d13c914217e1328c01afa148717051 F ext/vec1/tool/vec1bench_vibe2db.py 84ddb0236bc3d02a0393abce41986a1b7dad7f0d83884576f8318c2883e3aed3 -F ext/vec1/vec1.c 80a28a4914a0abea720372d9ae36f6855aa664edfa0709542a0abce5945fe440 +F ext/vec1/vec1.c ded791a7a6fa35c0ba7f0b7800554c7f6077e8bf7de011f7e5c0925a53fa081d F ext/wasm/GNUmakefile cc28e65dec12f1b992957152d8395484f4fcf7f94e6b6736a09ee4f48e7ec048 F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a F ext/wasm/README.md 2e87804e12c98f1d194b7a06162a88441d33bb443efcfe00dc6565a780d2f259 @@ -2280,8 +2280,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 4bf968095f427e87ae3afe498f74e00e9058b154e12e2d261f317640f4b49cc4 -R 45397a61da4ae3f4271291969ad517da +P a6f0843000e537a68be9e65693e8da276a4f66302a9a3c72f3a3417b6d275272 +R a115038655f834113355eea1f395ac28 U dan -Z 51feb3211d73fd62480d652a105feaad +Z 66272de88466018fce34e80852ebe644 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 146fbb5650..ed6618a8f0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a6f0843000e537a68be9e65693e8da276a4f66302a9a3c72f3a3417b6d275272 +97014dfa8283019275e97f3245111b63cf9c3e2f2e9544e8790885ed0eac3c27