From b9efad86b768f2c39a6c5b73270081b8e2774ac4 Mon Sep 17 00:00:00 2001 From: Valentin Skirdin Date: Wed, 17 Aug 2016 17:24:34 +0000 Subject: [PATCH] SQLite 3.14.1 --- far/changelog | 4 +++ far/thirdparty/sqlite/sqlite3.c | 44 ++++++++++++++++++++++++--------- far/thirdparty/sqlite/sqlite3.h | 6 ++--- far/vbuild.m4 | 2 +- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/far/changelog b/far/changelog index 2e9bdcfc87..ca2d33ee4a 100644 --- a/far/changelog +++ b/far/changelog @@ -1,3 +1,7 @@ +svs 17.08.2016 20:23:57 +0300 - build 4759 + +1. SQLite 3.14.1 + drkns 15.08.2016 09:23:14 +0200 - build 4758 1. Более параноидальные опции для GCC. diff --git a/far/thirdparty/sqlite/sqlite3.c b/far/thirdparty/sqlite/sqlite3.c index 1f085b01cb..ccddfe69b2 100644 --- a/far/thirdparty/sqlite/sqlite3.c +++ b/far/thirdparty/sqlite/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.14.0. By combining all the individual C code files into this +** version 3.14.1. By combining all the individual C code files into this ** 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 ** possible if the files were compiled separately. Performance improvements @@ -380,9 +380,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.14.0" -#define SQLITE_VERSION_NUMBER 3014000 -#define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de" +#define SQLITE_VERSION "3.14.1" +#define SQLITE_VERSION_NUMBER 3014001 +#define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -44998,12 +44998,30 @@ static void pcache1TruncateUnsafe( PCache1 *pCache, /* The cache to truncate */ unsigned int iLimit /* Drop pages with this pgno or larger */ ){ - TESTONLY( unsigned int nPage = 0; ) /* To assert pCache->nPage is correct */ - unsigned int h; + TESTONLY( int nPage = 0; ) /* To assert pCache->nPage is correct */ + unsigned int h, iStop; assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); - for(h=0; hnHash; h++){ - PgHdr1 **pp = &pCache->apHash[h]; + assert( pCache->iMaxKey >= iLimit ); + assert( pCache->nHash > 0 ); + if( pCache->iMaxKey - iLimit < pCache->nHash ){ + /* If we are just shaving the last few pages off the end of the + ** cache, then there is no point in scanning the entire hash table. + ** Only scan those hash slots that might contain pages that need to + ** be removed. */ + h = iLimit % pCache->nHash; + iStop = pCache->iMaxKey % pCache->nHash; + TESTONLY( nPage = -10; ) /* Disable the pCache->nPage validity check */ + }else{ + /* This is the general case where many pages are being removed. + ** It is necessary to scan the entire hash table */ + h = pCache->nHash/2; + iStop = h - 1; + } + for(;;){ + PgHdr1 **pp; PgHdr1 *pPage; + assert( hnHash ); + pp = &pCache->apHash[h]; while( (pPage = *pp)!=0 ){ if( pPage->iKey>=iLimit ){ pCache->nPage--; @@ -45012,11 +45030,13 @@ static void pcache1TruncateUnsafe( pcache1FreePage(pPage); }else{ pp = &pPage->pNext; - TESTONLY( nPage++; ) + TESTONLY( if( nPage>=0 ) nPage++; ) } } + if( h==iStop ) break; + h = (h+1) % pCache->nHash; } - assert( pCache->nPage==nPage ); + assert( nPage<0 || pCache->nPage==(unsigned)nPage ); } /******************************************************************************/ @@ -45493,7 +45513,7 @@ static void pcache1Destroy(sqlite3_pcache *p){ PGroup *pGroup = pCache->pGroup; assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) ); pcache1EnterMutex(pGroup); - pcache1TruncateUnsafe(pCache, 0); + if( pCache->nPage ) pcache1TruncateUnsafe(pCache, 0); assert( pGroup->nMaxPage >= pCache->nMax ); pGroup->nMaxPage -= pCache->nMax; assert( pGroup->nMinPage >= pCache->nMin ); @@ -194000,7 +194020,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b", -1, SQLITE_TRANSIENT); } static int fts5Init(sqlite3 *db){ diff --git a/far/thirdparty/sqlite/sqlite3.h b/far/thirdparty/sqlite/sqlite3.h index 4e2df5ebfa..3b6b07cf87 100644 --- a/far/thirdparty/sqlite/sqlite3.h +++ b/far/thirdparty/sqlite/sqlite3.h @@ -120,9 +120,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.14.0" -#define SQLITE_VERSION_NUMBER 3014000 -#define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de" +#define SQLITE_VERSION "3.14.1" +#define SQLITE_VERSION_NUMBER 3014001 +#define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b" /* ** CAPI3REF: Run-Time Library Version Numbers diff --git a/far/vbuild.m4 b/far/vbuild.m4 index a5dcf1b9c7..b6706ae446 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,4758)m4_dnl +m4_define(BUILD,4759)m4_dnl