mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Increase version number returned by vec1_info() to "0.8". Also fix some warnings in vec1.c.
FossilOrigin-Name: 97014dfa8283019275e97f3245111b63cf9c3e2f2e9544e8790885ed0eac3c27
This commit is contained in:
@@ -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; c<nAcc; c++) aAcc[c & 3] = I (aAcc[c & 3], aAcc[c]); \
|
||||
for(c=2; c<4 && c<nAcc; c++) aAcc[c & 1] = I (aAcc[c & 1], aAcc[c]); \
|
||||
if( nAcc>1 ) aAcc[0] = I (aAcc[0], aAcc[1]); \
|
||||
#define VERTICAL_SUM_GENERIC(aAcc, nAcc, I) { \
|
||||
int dd; \
|
||||
for(dd=4; dd<nAcc; dd++) aAcc[dd & 3] = I (aAcc[dd & 3], aAcc[dd]); \
|
||||
for(dd=2; dd<4 && dd<nAcc; dd++) aAcc[dd & 1] = I (aAcc[dd & 1], aAcc[dd]); \
|
||||
if( nAcc>1 ) 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; jj<p->nCentroid; jj++){
|
||||
float *cent = &p->aCentroid[jj * nElem];
|
||||
float dist = vec1L2Dist(vec, cent, nElem);
|
||||
float dist = (float)vec1L2Dist(vec, cent, nElem);
|
||||
if( jj==0 || dist<p->aMin[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; vv<pVec->nVec-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; vv<VEC1_MULTIMATCH_NVEC; vv++){
|
||||
aAcc[vv] = _mm256_setzero_ps();
|
||||
@@ -2560,7 +2559,7 @@ static void vec1BestMatchTransposeN(
|
||||
for( ; iCent<nCent; iCent++){
|
||||
const float *cent = &aCent[iCent*nElem];
|
||||
for(vv=0; vv<VEC1_MULTIMATCH_NVEC; vv++){
|
||||
float dist = vec1L2Dist(aVec[vv], cent, nElem);
|
||||
float dist = (float)vec1L2Dist(aVec[vv], cent, nElem);
|
||||
if( dist<aDist[vv] ){
|
||||
aDist[vv] = dist;
|
||||
aBest[vv] = iCent;
|
||||
@@ -2616,7 +2615,7 @@ static void vec1BestMatchN(
|
||||
for(ii=0; ii<VEC1_MULTIMATCH_NCENT; ii++){
|
||||
const float *cent = &aCent[(ii+cc)*nElem];
|
||||
for(vv=0; vv<VEC1_MULTIMATCH_NCENT; vv++){
|
||||
float dist = vec1L2Dist(cent, aVec[vv], nElem);
|
||||
float dist = (float)vec1L2Dist(cent, aVec[vv], nElem);
|
||||
if( dist<aDist[vv] ){
|
||||
aDist[vv] = dist;
|
||||
aBest[vv] = ii+cc;
|
||||
@@ -2632,7 +2631,7 @@ static void vec1BestMatchN(
|
||||
int vv;
|
||||
const float *cent = &aCent[cc*nElem];
|
||||
for(vv=0; vv<VEC1_MULTIMATCH_NVEC; vv++){
|
||||
float dist = vec1L2Dist(aVec[vv], cent, nElem);
|
||||
float dist = (float)vec1L2Dist(aVec[vv], cent, nElem);
|
||||
if( dist<aDist[vv] ){
|
||||
aDist[vv] = dist;
|
||||
aBest[vv] = cc;
|
||||
@@ -2675,7 +2674,6 @@ static void vec1LloydsWork(void *pCtx){
|
||||
ii = p->iFirst;
|
||||
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; ii<pVec->nChunk; 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; vv<VEC1_COVAR_NVEC; vv++){
|
||||
vs[vv] = _mm256_set1_ps(aScalar[vv]);
|
||||
}
|
||||
@@ -4298,7 +4296,6 @@ static void vec1CovarianceAccumulateN(
|
||||
}
|
||||
|
||||
for(; ii<=(nElem-8); ii+=8){
|
||||
__m256d lo, hi;
|
||||
__m256 acc = _mm256_set1_ps(0.0f);
|
||||
for(vv=0; vv<VEC1_COVAR_NVEC; vv++){
|
||||
__m256 vf = LOADU(&aIn[vv][ii]);
|
||||
@@ -4313,7 +4310,6 @@ static void vec1CovarianceAccumulateN(
|
||||
** to avoid spilling vs[] to the stack inside the hot loop. */
|
||||
#define VEC1_COVAR_NACC_NEON (16/VEC1_COVAR_MULTIMATCH_MULT)
|
||||
float32x4_t vs[VEC1_COVAR_NVEC];
|
||||
int vv;
|
||||
for(vv=0; vv<VEC1_COVAR_NVEC; vv++){
|
||||
vs[vv] = vdupq_n_f32(aScalar[vv]);
|
||||
}
|
||||
@@ -4347,7 +4343,6 @@ static void vec1CovarianceAccumulateN(
|
||||
|
||||
for(; ii<nElem; ii++){
|
||||
double acc = aOut[ii];
|
||||
int vv;
|
||||
for(vv=0; vv<VEC1_COVAR_NVEC; vv++){
|
||||
acc += (double)aScalar[vv] * aIn[vv][ii];
|
||||
}
|
||||
@@ -4539,7 +4534,6 @@ static Vec1RotationJob *vec1RotationAlloc(
|
||||
int nByte = p->nThread * sizeof(Vec1RotationJob);
|
||||
Vec1RotationJob *aJob = vec1MallocZero(nByte);
|
||||
if( aJob ){
|
||||
int iNext = 0; /* First vector for next job */
|
||||
int ii;
|
||||
for(ii=0; ii<p->nThread; 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<nElem; ii++){
|
||||
@@ -8199,7 +8187,7 @@ static void vec1ScanBlocked(
|
||||
/* If all 16 distances sums are already greater than the required
|
||||
** minimum, quit processing this block early. */
|
||||
if( iBook>=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; jj<nSlot; jj++){
|
||||
float norm;
|
||||
memcpy(&norm, &aBlk[jj*sizeof_f32], sizeof_f32);
|
||||
aAcc[jj] = fResidualNorm2 + (norm - 2.0 * aAcc[jj]) * norm;
|
||||
aAcc[jj] = (float)(fResidualNorm2 + (norm - 2.0 * aAcc[jj]) * norm);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8290,7 +8278,7 @@ static int vec1DoKANNBucket(
|
||||
vec1PQLUTBuild(pTab, aEncode, aDist);
|
||||
}else{
|
||||
vec1BinaryQuantLUTBuild(pTab, aEncode, aDist);
|
||||
fResidualNorm2 = vec1VectorNorm2(aEncode, pTab->cfg.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;
|
||||
|
||||
12
manifest
12
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.
|
||||
|
||||
@@ -1 +1 @@
|
||||
a6f0843000e537a68be9e65693e8da276a4f66302a9a3c72f3a3417b6d275272
|
||||
97014dfa8283019275e97f3245111b63cf9c3e2f2e9544e8790885ed0eac3c27
|
||||
|
||||
Reference in New Issue
Block a user