Upgrade SQLite to version 3051003
This commit is contained in:
committed by
mattn
parent
8c99a68554
commit
4ea2a9fb44
@@ -1,7 +1,7 @@
|
|||||||
#ifndef USE_LIBSQLITE3
|
#ifndef USE_LIBSQLITE3
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
** This file is an amalgamation of many separate C source files from SQLite
|
** This file is an amalgamation of many separate C source files from SQLite
|
||||||
** version 3.51.2. By combining all the individual C code files into this
|
** version 3.51.3. By combining all the individual C code files into this
|
||||||
** single large file, the entire code can be compiled as a single translation
|
** single large file, the entire code can be compiled as a single translation
|
||||||
** unit. This allows many compilers to do optimizations that would not be
|
** unit. This allows many compilers to do optimizations that would not be
|
||||||
** possible if the files were compiled separately. Performance improvements
|
** possible if the files were compiled separately. Performance improvements
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
** separate file. This file contains only code for the core SQLite library.
|
** separate file. This file contains only code for the core SQLite library.
|
||||||
**
|
**
|
||||||
** The content in this amalgamation comes from Fossil check-in
|
** The content in this amalgamation comes from Fossil check-in
|
||||||
** b270f8339eb13b504d0b2ba154ebca966b7d with changes in files:
|
** 737ae4a34738ffa0c3ff7f9bb18df914dd1c with changes in files:
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
@@ -468,12 +468,12 @@ extern "C" {
|
|||||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||||
** [sqlite_version()] and [sqlite_source_id()].
|
** [sqlite_version()] and [sqlite_source_id()].
|
||||||
*/
|
*/
|
||||||
#define SQLITE_VERSION "3.51.2"
|
#define SQLITE_VERSION "3.51.3"
|
||||||
#define SQLITE_VERSION_NUMBER 3051002
|
#define SQLITE_VERSION_NUMBER 3051003
|
||||||
#define SQLITE_SOURCE_ID "2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075"
|
#define SQLITE_SOURCE_ID "2026-03-13 10:38:09 737ae4a34738ffa0c3ff7f9bb18df914dd1cad163f28fd6b6e114a344fe6d618"
|
||||||
#define SQLITE_SCM_BRANCH "branch-3.51"
|
#define SQLITE_SCM_BRANCH "branch-3.51"
|
||||||
#define SQLITE_SCM_TAGS "release version-3.51.2"
|
#define SQLITE_SCM_TAGS "release version-3.51.3"
|
||||||
#define SQLITE_SCM_DATETIME "2026-01-09T17:27:48.405Z"
|
#define SQLITE_SCM_DATETIME "2026-03-13T10:38:09.694Z"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Run-Time Library Version Numbers
|
** CAPI3REF: Run-Time Library Version Numbers
|
||||||
@@ -14335,6 +14335,27 @@ struct fts5_api {
|
|||||||
#endif
|
#endif
|
||||||
#define SQLITE_MIN_LENGTH 30 /* Minimum value for the length limit */
|
#define SQLITE_MIN_LENGTH 30 /* Minimum value for the length limit */
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Maximum size of any single memory allocation.
|
||||||
|
**
|
||||||
|
** This is not a limit on the total amount of memory used. This is
|
||||||
|
** a limit on the size parameter to sqlite3_malloc() and sqlite3_realloc().
|
||||||
|
**
|
||||||
|
** The upper bound is slightly less than 2GiB: 0x7ffffeff == 2,147,483,391
|
||||||
|
** This provides a 256-byte safety margin for defense against 32-bit
|
||||||
|
** signed integer overflow bugs when computing memory allocation sizes.
|
||||||
|
** Paranoid applications might want to reduce the maximum allocation size
|
||||||
|
** further for an even larger safety margin. 0x3fffffff or 0x0fffffff
|
||||||
|
** or even smaller would be reasonable upper bounds on the size of a memory
|
||||||
|
** allocations for most applications.
|
||||||
|
*/
|
||||||
|
#ifndef SQLITE_MAX_ALLOCATION_SIZE
|
||||||
|
# define SQLITE_MAX_ALLOCATION_SIZE 2147483391
|
||||||
|
#endif
|
||||||
|
#if SQLITE_MAX_ALLOCATION_SIZE>2147483391
|
||||||
|
# error Maximum size for SQLITE_MAX_ALLOCATION_SIZE is 2147483391
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This is the maximum number of
|
** This is the maximum number of
|
||||||
**
|
**
|
||||||
@@ -21665,6 +21686,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList
|
|||||||
Expr*,ExprList*,u32,Expr*);
|
Expr*,ExprList*,u32,Expr*);
|
||||||
SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
|
SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
|
||||||
SQLITE_PRIVATE void sqlite3SelectDeleteGeneric(sqlite3*,void*);
|
SQLITE_PRIVATE void sqlite3SelectDeleteGeneric(sqlite3*,void*);
|
||||||
|
SQLITE_PRIVATE void sqlite3SelectCheckOnClauses(Parse *pParse, Select *pSelect);
|
||||||
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
|
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
|
||||||
SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, Trigger*);
|
SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, Trigger*);
|
||||||
SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
|
SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
|
||||||
@@ -31311,27 +31333,6 @@ static void mallocWithAlarm(int n, void **pp){
|
|||||||
*pp = p;
|
*pp = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
** Maximum size of any single memory allocation.
|
|
||||||
**
|
|
||||||
** This is not a limit on the total amount of memory used. This is
|
|
||||||
** a limit on the size parameter to sqlite3_malloc() and sqlite3_realloc().
|
|
||||||
**
|
|
||||||
** The upper bound is slightly less than 2GiB: 0x7ffffeff == 2,147,483,391
|
|
||||||
** This provides a 256-byte safety margin for defense against 32-bit
|
|
||||||
** signed integer overflow bugs when computing memory allocation sizes.
|
|
||||||
** Paranoid applications might want to reduce the maximum allocation size
|
|
||||||
** further for an even larger safety margin. 0x3fffffff or 0x0fffffff
|
|
||||||
** or even smaller would be reasonable upper bounds on the size of a memory
|
|
||||||
** allocations for most applications.
|
|
||||||
*/
|
|
||||||
#ifndef SQLITE_MAX_ALLOCATION_SIZE
|
|
||||||
# define SQLITE_MAX_ALLOCATION_SIZE 2147483391
|
|
||||||
#endif
|
|
||||||
#if SQLITE_MAX_ALLOCATION_SIZE>2147483391
|
|
||||||
# error Maximum size for SQLITE_MAX_ALLOCATION_SIZE is 2147483391
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Allocate memory. This routine is like sqlite3_malloc() except that it
|
** Allocate memory. This routine is like sqlite3_malloc() except that it
|
||||||
** assumes the memory subsystem has already been initialized.
|
** assumes the memory subsystem has already been initialized.
|
||||||
@@ -31555,8 +31556,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
|
|||||||
sqlite3_free(pOld); /* IMP: R-26507-47431 */
|
sqlite3_free(pOld); /* IMP: R-26507-47431 */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if( nBytes>=0x7fffff00 ){
|
if( nBytes>SQLITE_MAX_ALLOCATION_SIZE ){
|
||||||
/* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
nOld = sqlite3MallocSize(pOld);
|
nOld = sqlite3MallocSize(pOld);
|
||||||
@@ -69011,6 +69011,17 @@ static int walCheckpoint(
|
|||||||
&& (rc = walBusyLock(pWal,xBusy,pBusyArg,WAL_READ_LOCK(0),1))==SQLITE_OK
|
&& (rc = walBusyLock(pWal,xBusy,pBusyArg,WAL_READ_LOCK(0),1))==SQLITE_OK
|
||||||
){
|
){
|
||||||
u32 nBackfill = pInfo->nBackfill;
|
u32 nBackfill = pInfo->nBackfill;
|
||||||
|
WalIndexHdr *pLive = (WalIndexHdr*)walIndexHdr(pWal);
|
||||||
|
|
||||||
|
/* Now that read-lock slot 0 is locked, check that the wal has not been
|
||||||
|
** wrapped since the header was read for this checkpoint. If it was, then
|
||||||
|
** there was no work to do anyway. In this case the
|
||||||
|
** (pInfo->nBackfill<pWal->hdr.mxFrame) test above only passed because
|
||||||
|
** pInfo->nBackfill had already been set to 0 by the writer that wrapped
|
||||||
|
** the wal file. It would also be dangerous to proceed, as there may be
|
||||||
|
** fewer than pWal->hdr.mxFrame valid frames in the wal file. */
|
||||||
|
int bChg = memcmp(pLive->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt));
|
||||||
|
if( 0==bChg ){
|
||||||
pInfo->nBackfillAttempted = mxSafeFrame; SEH_INJECT_FAULT;
|
pInfo->nBackfillAttempted = mxSafeFrame; SEH_INJECT_FAULT;
|
||||||
|
|
||||||
/* Sync the WAL to disk */
|
/* Sync the WAL to disk */
|
||||||
@@ -69032,13 +69043,15 @@ static int walCheckpoint(
|
|||||||
** must be corruption somewhere. */
|
** must be corruption somewhere. */
|
||||||
rc = SQLITE_CORRUPT_BKPT;
|
rc = SQLITE_CORRUPT_BKPT;
|
||||||
}else{
|
}else{
|
||||||
sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT,&nReq);
|
sqlite3OsFileControlHint(
|
||||||
|
pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Iterate through the contents of the WAL, copying data to the db file */
|
/* Iterate through the contents of the WAL, copying data to the
|
||||||
|
** db file */
|
||||||
while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
|
while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
|
||||||
i64 iOffset;
|
i64 iOffset;
|
||||||
assert( walFramePgno(pWal, iFrame)==iDbpage );
|
assert( walFramePgno(pWal, iFrame)==iDbpage );
|
||||||
@@ -69075,6 +69088,7 @@ static int walCheckpoint(
|
|||||||
AtomicStore(&pInfo->nBackfill, mxSafeFrame); SEH_INJECT_FAULT;
|
AtomicStore(&pInfo->nBackfill, mxSafeFrame); SEH_INJECT_FAULT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Release the reader lock held while backfilling */
|
/* Release the reader lock held while backfilling */
|
||||||
walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
|
walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
|
||||||
@@ -71122,6 +71136,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint(
|
|||||||
|
|
||||||
/* Copy data from the log to the database file. */
|
/* Copy data from the log to the database file. */
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
|
sqlite3FaultSim(660);
|
||||||
if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
|
if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
|
||||||
rc = SQLITE_CORRUPT_BKPT;
|
rc = SQLITE_CORRUPT_BKPT;
|
||||||
}else if( eMode2!=SQLITE_CHECKPOINT_NOOP ){
|
}else if( eMode2!=SQLITE_CHECKPOINT_NOOP ){
|
||||||
@@ -77557,7 +77572,7 @@ static int accessPayload(
|
|||||||
|
|
||||||
getCellInfo(pCur);
|
getCellInfo(pCur);
|
||||||
aPayload = pCur->info.pPayload;
|
aPayload = pCur->info.pPayload;
|
||||||
assert( offset+amt <= pCur->info.nPayload );
|
assert( (u64)offset+(u64)amt <= (u64)pCur->info.nPayload );
|
||||||
|
|
||||||
assert( aPayload > pPage->aData );
|
assert( aPayload > pPage->aData );
|
||||||
if( (uptr)(aPayload - pPage->aData) > (pBt->usableSize - pCur->info.nLocal) ){
|
if( (uptr)(aPayload - pPage->aData) > (pBt->usableSize - pCur->info.nLocal) ){
|
||||||
@@ -86031,7 +86046,12 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
|
|||||||
){
|
){
|
||||||
int rc;
|
int rc;
|
||||||
pMem->flags = MEM_Null;
|
pMem->flags = MEM_Null;
|
||||||
if( sqlite3BtreeMaxRecordSize(pCur)<offset+amt ){
|
testcase( amt==SQLITE_MAX_ALLOCATION_SIZE-1 );
|
||||||
|
testcase( amt==SQLITE_MAX_ALLOCATION_SIZE );
|
||||||
|
if( amt>=SQLITE_MAX_ALLOCATION_SIZE ){
|
||||||
|
return SQLITE_NOMEM_BKPT;
|
||||||
|
}
|
||||||
|
if( (u64)amt + (u64)offset > (u64)sqlite3BtreeMaxRecordSize(pCur) ){
|
||||||
return SQLITE_CORRUPT_BKPT;
|
return SQLITE_CORRUPT_BKPT;
|
||||||
}
|
}
|
||||||
if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){
|
if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){
|
||||||
@@ -93444,7 +93464,7 @@ static int valueFromValueList(
|
|||||||
Mem sMem; /* Raw content of current row */
|
Mem sMem; /* Raw content of current row */
|
||||||
memset(&sMem, 0, sizeof(sMem));
|
memset(&sMem, 0, sizeof(sMem));
|
||||||
sz = sqlite3BtreePayloadSize(pRhs->pCsr);
|
sz = sqlite3BtreePayloadSize(pRhs->pCsr);
|
||||||
rc = sqlite3VdbeMemFromBtreeZeroOffset(pRhs->pCsr,(int)sz,&sMem);
|
rc = sqlite3VdbeMemFromBtreeZeroOffset(pRhs->pCsr,sz,&sMem);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
u8 *zBuf = (u8*)sMem.z;
|
u8 *zBuf = (u8*)sMem.z;
|
||||||
u32 iSerial;
|
u32 iSerial;
|
||||||
@@ -111186,6 +111206,14 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
|
|||||||
return WRC_Abort;
|
return WRC_Abort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the SELECT statement contains ON clauses that were moved into
|
||||||
|
** the WHERE clause, go through and verify that none of the terms
|
||||||
|
** in the ON clauses reference tables to the right of the ON clause. */
|
||||||
|
if( (p->selFlags & SF_OnToWhere) ){
|
||||||
|
sqlite3SelectCheckOnClauses(pParse, p);
|
||||||
|
if( pParse->nErr ) return WRC_Abort;
|
||||||
|
}
|
||||||
|
|
||||||
/* Advance to the next term of the compound
|
/* Advance to the next term of the compound
|
||||||
*/
|
*/
|
||||||
p = p->pPrior;
|
p = p->pPrior;
|
||||||
@@ -154357,7 +154385,7 @@ static int selectCheckOnClausesSelect(Walker *pWalker, Select *pSelect){
|
|||||||
** Check all ON clauses in pSelect to verify that they do not reference
|
** Check all ON clauses in pSelect to verify that they do not reference
|
||||||
** columns to the right.
|
** columns to the right.
|
||||||
*/
|
*/
|
||||||
static void selectCheckOnClauses(Parse *pParse, Select *pSelect){
|
SQLITE_PRIVATE void sqlite3SelectCheckOnClauses(Parse *pParse, Select *pSelect){
|
||||||
Walker w;
|
Walker w;
|
||||||
CheckOnCtx sCtx;
|
CheckOnCtx sCtx;
|
||||||
assert( pSelect->selFlags & SF_OnToWhere );
|
assert( pSelect->selFlags & SF_OnToWhere );
|
||||||
@@ -154500,18 +154528,6 @@ SQLITE_PRIVATE int sqlite3Select(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* If the SELECT statement contains ON clauses that were moved into
|
|
||||||
** the WHERE clause, go through and verify that none of the terms
|
|
||||||
** in the ON clauses reference tables to the right of the ON clause.
|
|
||||||
** Do this now, after name resolution, but before query flattening
|
|
||||||
*/
|
|
||||||
if( p->selFlags & SF_OnToWhere ){
|
|
||||||
selectCheckOnClauses(pParse, p);
|
|
||||||
if( pParse->nErr ){
|
|
||||||
goto select_end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the SF_UFSrcCheck flag is set, then this function is being called
|
/* If the SF_UFSrcCheck flag is set, then this function is being called
|
||||||
** as part of populating the temp table for an UPDATE...FROM statement.
|
** as part of populating the temp table for an UPDATE...FROM statement.
|
||||||
** In this case, it is an error if the target object (pSrc->a[0]) name
|
** In this case, it is an error if the target object (pSrc->a[0]) name
|
||||||
@@ -164678,6 +164694,15 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop(
|
|||||||
sqlite3ExprDup(pParse->db, pTerm->pExpr, 0));
|
sqlite3ExprDup(pParse->db, pTerm->pExpr, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( pLevel->iIdxCur ){
|
||||||
|
/* pSubWhere may contain expressions that read from an index on the
|
||||||
|
** table on the RHS of the right join. All such expressions first test
|
||||||
|
** if the index is pointing at a NULL row, and if so, read from the
|
||||||
|
** table cursor instead. So ensure that the index cursor really is
|
||||||
|
** pointing at a NULL row here, so that no values are read from it during
|
||||||
|
** the scan of the RHS of the RIGHT join below. */
|
||||||
|
sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
|
||||||
|
}
|
||||||
pFrom = &uSrc.sSrc;
|
pFrom = &uSrc.sSrc;
|
||||||
pFrom->nSrc = 1;
|
pFrom->nSrc = 1;
|
||||||
pFrom->nAlloc = 1;
|
pFrom->nAlloc = 1;
|
||||||
@@ -224164,7 +224189,7 @@ static int rbuDeltaApply(
|
|||||||
/* ERROR: copy exceeds output file size */
|
/* ERROR: copy exceeds output file size */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if( (int)(ofst+cnt) > lenSrc ){
|
if( (u64)ofst+(u64)cnt > (u64)lenSrc ){
|
||||||
/* ERROR: copy extends past end of input */
|
/* ERROR: copy extends past end of input */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -252451,7 +252476,7 @@ static void fts5DoSecureDelete(
|
|||||||
int iSegid = pSeg->pSeg->iSegid;
|
int iSegid = pSeg->pSeg->iSegid;
|
||||||
u8 *aPg = pSeg->pLeaf->p;
|
u8 *aPg = pSeg->pLeaf->p;
|
||||||
int nPg = pSeg->pLeaf->nn;
|
int nPg = pSeg->pLeaf->nn;
|
||||||
int iPgIdx = pSeg->pLeaf->szLeaf;
|
int iPgIdx = pSeg->pLeaf->szLeaf; /* Offset of page footer */
|
||||||
|
|
||||||
u64 iDelta = 0;
|
u64 iDelta = 0;
|
||||||
int iNextOff = 0;
|
int iNextOff = 0;
|
||||||
@@ -252530,7 +252555,7 @@ static void fts5DoSecureDelete(
|
|||||||
iSOP += fts5GetVarint32(&aPg[iSOP], nPos);
|
iSOP += fts5GetVarint32(&aPg[iSOP], nPos);
|
||||||
}
|
}
|
||||||
assert_nc( iSOP==pSeg->iLeafOffset );
|
assert_nc( iSOP==pSeg->iLeafOffset );
|
||||||
iNextOff = pSeg->iLeafOffset + pSeg->nPos;
|
iNextOff = iSOP + pSeg->nPos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260349,7 +260374,7 @@ static void fts5SourceIdFunc(
|
|||||||
){
|
){
|
||||||
assert( nArg==0 );
|
assert( nArg==0 );
|
||||||
UNUSED_PARAM2(nArg, apUnused);
|
UNUSED_PARAM2(nArg, apUnused);
|
||||||
sqlite3_result_text(pCtx, "fts5: 2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075", -1, SQLITE_TRANSIENT);
|
sqlite3_result_text(pCtx, "fts5: 2026-03-13 10:38:09 737ae4a34738ffa0c3ff7f9bb18df914dd1cad163f28fd6b6e114a344fe6d618", -1, SQLITE_TRANSIENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -147,12 +147,12 @@ extern "C" {
|
|||||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||||
** [sqlite_version()] and [sqlite_source_id()].
|
** [sqlite_version()] and [sqlite_source_id()].
|
||||||
*/
|
*/
|
||||||
#define SQLITE_VERSION "3.51.2"
|
#define SQLITE_VERSION "3.51.3"
|
||||||
#define SQLITE_VERSION_NUMBER 3051002
|
#define SQLITE_VERSION_NUMBER 3051003
|
||||||
#define SQLITE_SOURCE_ID "2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075"
|
#define SQLITE_SOURCE_ID "2026-03-13 10:38:09 737ae4a34738ffa0c3ff7f9bb18df914dd1cad163f28fd6b6e114a344fe6d618"
|
||||||
#define SQLITE_SCM_BRANCH "branch-3.51"
|
#define SQLITE_SCM_BRANCH "branch-3.51"
|
||||||
#define SQLITE_SCM_TAGS "release version-3.51.2"
|
#define SQLITE_SCM_TAGS "release version-3.51.3"
|
||||||
#define SQLITE_SCM_DATETIME "2026-01-09T17:27:48.405Z"
|
#define SQLITE_SCM_DATETIME "2026-03-13T10:38:09.694Z"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Run-Time Library Version Numbers
|
** CAPI3REF: Run-Time Library Version Numbers
|
||||||
|
|||||||
Reference in New Issue
Block a user