Fossil SCM
Update the built-in SQLite with minor fixes discovered during release testing.
Commit
506dff5f7c7f781878597d5c086aed2dc5d7c0a6
Parent
53430370a5ab295…
2 files changed
+45
-38
+1
-1
+45
-38
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -381,11 +381,11 @@ | ||
| 381 | 381 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 382 | 382 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 383 | 383 | */ |
| 384 | 384 | #define SQLITE_VERSION "3.16.0" |
| 385 | 385 | #define SQLITE_VERSION_NUMBER 3016000 |
| 386 | -#define SQLITE_SOURCE_ID "2016-12-30 00:09:14 f57952bac652901e1bd48b68301941efbcf29dc4" | |
| 386 | +#define SQLITE_SOURCE_ID "2016-12-30 17:40:14 14d855d2b2b5b3485e0673d11405db7266b34c6d" | |
| 387 | 387 | |
| 388 | 388 | /* |
| 389 | 389 | ** CAPI3REF: Run-Time Library Version Numbers |
| 390 | 390 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 391 | 391 | ** |
| @@ -25727,11 +25727,11 @@ | ||
| 25727 | 25727 | assert( p->zText!=0 || p->nChar==0 || p->accError ); |
| 25728 | 25728 | assert( N>=0 ); |
| 25729 | 25729 | assert( p->accError==0 || p->nAlloc==0 ); |
| 25730 | 25730 | if( p->nChar+N >= p->nAlloc ){ |
| 25731 | 25731 | enlargeAndAppend(p,z,N); |
| 25732 | - }else{ | |
| 25732 | + }else if( N ){ | |
| 25733 | 25733 | assert( p->zText ); |
| 25734 | 25734 | p->nChar += N; |
| 25735 | 25735 | memcpy(&p->zText[p->nChar-N], z, N); |
| 25736 | 25736 | } |
| 25737 | 25737 | } |
| @@ -50629,10 +50629,11 @@ | ||
| 50629 | 50629 | rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr); |
| 50630 | 50630 | } |
| 50631 | 50631 | return rc; |
| 50632 | 50632 | } |
| 50633 | 50633 | |
| 50634 | +#if SQLITE_MAX_MMAP_SIZE>0 | |
| 50634 | 50635 | /* |
| 50635 | 50636 | ** Obtain a reference to a memory mapped page object for page number pgno. |
| 50636 | 50637 | ** The new object will use the pointer pData, obtained from xFetch(). |
| 50637 | 50638 | ** If successful, set *ppPage to point to the new page reference |
| 50638 | 50639 | ** and return SQLITE_OK. Otherwise, return an SQLite error code and set |
| @@ -50677,10 +50678,11 @@ | ||
| 50677 | 50678 | p->pData = pData; |
| 50678 | 50679 | pPager->nMmapOut++; |
| 50679 | 50680 | |
| 50680 | 50681 | return SQLITE_OK; |
| 50681 | 50682 | } |
| 50683 | +#endif | |
| 50682 | 50684 | |
| 50683 | 50685 | /* |
| 50684 | 50686 | ** Release a reference to page pPg. pPg must have been returned by an |
| 50685 | 50687 | ** earlier call to pagerAcquireMapPage(). |
| 50686 | 50688 | */ |
| @@ -52036,10 +52038,11 @@ | ||
| 52036 | 52038 | assert( pPager->errCode==SQLITE_OK ); |
| 52037 | 52039 | assert( pPager->eState>=PAGER_READER ); |
| 52038 | 52040 | assert( assert_pager_state(pPager) ); |
| 52039 | 52041 | assert( pPager->hasHeldSharedLock==1 ); |
| 52040 | 52042 | |
| 52043 | + if( pgno==0 ) return SQLITE_CORRUPT_BKPT; | |
| 52041 | 52044 | pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3); |
| 52042 | 52045 | if( pBase==0 ){ |
| 52043 | 52046 | pPg = 0; |
| 52044 | 52047 | rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase); |
| 52045 | 52048 | if( rc!=SQLITE_OK ) goto pager_acquire_err; |
| @@ -52063,15 +52066,14 @@ | ||
| 52063 | 52066 | |
| 52064 | 52067 | }else{ |
| 52065 | 52068 | /* The pager cache has created a new page. Its content needs to |
| 52066 | 52069 | ** be initialized. But first some error checks: |
| 52067 | 52070 | ** |
| 52068 | - ** (1) Minimum page number is 1 | |
| 52069 | - ** (2) The maximum page number is 2^31 | |
| 52070 | - ** (3) Never try to fetch the locking page | |
| 52071 | + ** (1) The maximum page number is 2^31 | |
| 52072 | + ** (2) Never try to fetch the locking page | |
| 52071 | 52073 | */ |
| 52072 | - if( pgno==0 || pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){ | |
| 52074 | + if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){ | |
| 52073 | 52075 | rc = SQLITE_CORRUPT_BKPT; |
| 52074 | 52076 | goto pager_acquire_err; |
| 52075 | 52077 | } |
| 52076 | 52078 | |
| 52077 | 52079 | pPg->pPager = pPager; |
| @@ -97866,11 +97868,13 @@ | ||
| 97866 | 97868 | pSample->p = sqlite3DbMallocZero(db, pSample->n + 2); |
| 97867 | 97869 | if( pSample->p==0 ){ |
| 97868 | 97870 | sqlite3_finalize(pStmt); |
| 97869 | 97871 | return SQLITE_NOMEM_BKPT; |
| 97870 | 97872 | } |
| 97871 | - memcpy(pSample->p, sqlite3_column_blob(pStmt, 4), pSample->n); | |
| 97873 | + if( pSample->n ){ | |
| 97874 | + memcpy(pSample->p, sqlite3_column_blob(pStmt, 4), pSample->n); | |
| 97875 | + } | |
| 97872 | 97876 | pIdx->nSample++; |
| 97873 | 97877 | } |
| 97874 | 97878 | rc = sqlite3_finalize(pStmt); |
| 97875 | 97879 | if( rc==SQLITE_OK ) initAvgEq(pPrevIdx); |
| 97876 | 97880 | return rc; |
| @@ -104863,29 +104867,32 @@ | ||
| 104863 | 104867 | typeHaystack = sqlite3_value_type(argv[0]); |
| 104864 | 104868 | typeNeedle = sqlite3_value_type(argv[1]); |
| 104865 | 104869 | if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; |
| 104866 | 104870 | nHaystack = sqlite3_value_bytes(argv[0]); |
| 104867 | 104871 | nNeedle = sqlite3_value_bytes(argv[1]); |
| 104868 | - if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ | |
| 104869 | - zHaystack = sqlite3_value_blob(argv[0]); | |
| 104870 | - zNeedle = sqlite3_value_blob(argv[1]); | |
| 104871 | - isText = 0; | |
| 104872 | - }else{ | |
| 104873 | - zHaystack = sqlite3_value_text(argv[0]); | |
| 104874 | - zNeedle = sqlite3_value_text(argv[1]); | |
| 104875 | - isText = 1; | |
| 104876 | - if( zNeedle==0 ) return; | |
| 104877 | - assert( zHaystack ); | |
| 104878 | - } | |
| 104879 | - while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ | |
| 104880 | - N++; | |
| 104881 | - do{ | |
| 104882 | - nHaystack--; | |
| 104883 | - zHaystack++; | |
| 104884 | - }while( isText && (zHaystack[0]&0xc0)==0x80 ); | |
| 104885 | - } | |
| 104886 | - if( nNeedle>nHaystack ) N = 0; | |
| 104872 | + if( nNeedle>0 ){ | |
| 104873 | + if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ | |
| 104874 | + zHaystack = sqlite3_value_blob(argv[0]); | |
| 104875 | + zNeedle = sqlite3_value_blob(argv[1]); | |
| 104876 | + assert( zNeedle!=0 ); | |
| 104877 | + assert( zHaystack!=0 || nHaystack==0 ); | |
| 104878 | + isText = 0; | |
| 104879 | + }else{ | |
| 104880 | + zHaystack = sqlite3_value_text(argv[0]); | |
| 104881 | + zNeedle = sqlite3_value_text(argv[1]); | |
| 104882 | + isText = 1; | |
| 104883 | + if( zHaystack==0 || zNeedle==0 ) return; | |
| 104884 | + } | |
| 104885 | + while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ | |
| 104886 | + N++; | |
| 104887 | + do{ | |
| 104888 | + nHaystack--; | |
| 104889 | + zHaystack++; | |
| 104890 | + }while( isText && (zHaystack[0]&0xc0)==0x80 ); | |
| 104891 | + } | |
| 104892 | + if( nNeedle>nHaystack ) N = 0; | |
| 104893 | + } | |
| 104887 | 104894 | sqlite3_result_int(context, N); |
| 104888 | 104895 | } |
| 104889 | 104896 | |
| 104890 | 104897 | /* |
| 104891 | 104898 | ** Implementation of the printf() function. |
| @@ -106294,11 +106301,11 @@ | ||
| 106294 | 106301 | nSep = sqlite3_value_bytes(argv[1]); |
| 106295 | 106302 | }else{ |
| 106296 | 106303 | zSep = ","; |
| 106297 | 106304 | nSep = 1; |
| 106298 | 106305 | } |
| 106299 | - if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep); | |
| 106306 | + if( zSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep); | |
| 106300 | 106307 | } |
| 106301 | 106308 | zVal = (char*)sqlite3_value_text(argv[0]); |
| 106302 | 106309 | nVal = sqlite3_value_bytes(argv[0]); |
| 106303 | 106310 | if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal); |
| 106304 | 106311 | } |
| @@ -141629,11 +141636,13 @@ | ||
| 141629 | 141636 | } |
| 141630 | 141637 | |
| 141631 | 141638 | }else{ |
| 141632 | 141639 | zFile = sqlite3_malloc64(nUri+2); |
| 141633 | 141640 | if( !zFile ) return SQLITE_NOMEM_BKPT; |
| 141634 | - memcpy(zFile, zUri, nUri); | |
| 141641 | + if( nUri ){ | |
| 141642 | + memcpy(zFile, zUri, nUri); | |
| 141643 | + } | |
| 141635 | 141644 | zFile[nUri] = '\0'; |
| 141636 | 141645 | zFile[nUri+1] = '\0'; |
| 141637 | 141646 | flags &= ~SQLITE_OPEN_URI; |
| 141638 | 141647 | } |
| 141639 | 141648 | |
| @@ -173199,13 +173208,11 @@ | ||
| 173199 | 173208 | if( z==0 && (eType!=SQLITE_BLOB || n>0) ) return SQLITE_NOMEM; |
| 173200 | 173209 | nVarint = sessionVarintLen(n); |
| 173201 | 173210 | |
| 173202 | 173211 | if( aBuf ){ |
| 173203 | 173212 | sessionVarintPut(&aBuf[1], n); |
| 173204 | - memcpy(&aBuf[nVarint + 1], eType==SQLITE_TEXT ? | |
| 173205 | - sqlite3_value_text(pValue) : sqlite3_value_blob(pValue), n | |
| 173206 | - ); | |
| 173213 | + if( n ) memcpy(&aBuf[nVarint + 1], z, n); | |
| 173207 | 173214 | } |
| 173208 | 173215 | |
| 173209 | 173216 | nByte = 1 + nVarint + n; |
| 173210 | 173217 | break; |
| 173211 | 173218 | } |
| @@ -174617,11 +174624,11 @@ | ||
| 174617 | 174624 | SessionBuffer *p, |
| 174618 | 174625 | const u8 *aBlob, |
| 174619 | 174626 | int nBlob, |
| 174620 | 174627 | int *pRc |
| 174621 | 174628 | ){ |
| 174622 | - if( 0==sessionBufferGrow(p, nBlob, pRc) ){ | |
| 174629 | + if( nBlob>0 && 0==sessionBufferGrow(p, nBlob, pRc) ){ | |
| 174623 | 174630 | memcpy(&p->aBuf[p->nBuf], aBlob, nBlob); |
| 174624 | 174631 | p->nBuf += nBlob; |
| 174625 | 174632 | } |
| 174626 | 174633 | } |
| 174627 | 174634 | |
| @@ -174803,17 +174810,17 @@ | ||
| 174803 | 174810 | bChanged = 1; |
| 174804 | 174811 | break; |
| 174805 | 174812 | } |
| 174806 | 174813 | |
| 174807 | 174814 | default: { |
| 174808 | - int nByte; | |
| 174809 | - int nHdr = 1 + sessionVarintGet(&pCsr[1], &nByte); | |
| 174815 | + int n; | |
| 174816 | + int nHdr = 1 + sessionVarintGet(&pCsr[1], &n); | |
| 174810 | 174817 | assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); |
| 174811 | - nAdvance = nHdr + nByte; | |
| 174818 | + nAdvance = nHdr + n; | |
| 174812 | 174819 | if( eType==sqlite3_column_type(pStmt, i) |
| 174813 | - && nByte==sqlite3_column_bytes(pStmt, i) | |
| 174814 | - && 0==memcmp(&pCsr[nHdr], sqlite3_column_blob(pStmt, i), nByte) | |
| 174820 | + && n==sqlite3_column_bytes(pStmt, i) | |
| 174821 | + && (n==0 || 0==memcmp(&pCsr[nHdr], sqlite3_column_blob(pStmt, i), n)) | |
| 174815 | 174822 | ){ |
| 174816 | 174823 | break; |
| 174817 | 174824 | } |
| 174818 | 174825 | bChanged = 1; |
| 174819 | 174826 | } |
| @@ -196760,11 +196767,11 @@ | ||
| 196760 | 196767 | int nArg, /* Number of args */ |
| 196761 | 196768 | sqlite3_value **apUnused /* Function arguments */ |
| 196762 | 196769 | ){ |
| 196763 | 196770 | assert( nArg==0 ); |
| 196764 | 196771 | UNUSED_PARAM2(nArg, apUnused); |
| 196765 | - sqlite3_result_text(pCtx, "fts5: 2016-12-29 19:48:46 afcdc4a60e357d171156e0de705bf7ad1b37daab", -1, SQLITE_TRANSIENT); | |
| 196772 | + sqlite3_result_text(pCtx, "fts5: 2016-12-30 15:16:20 a0971e713682a73d8c7c20511db256c20d2f6388", -1, SQLITE_TRANSIENT); | |
| 196766 | 196773 | } |
| 196767 | 196774 | |
| 196768 | 196775 | static int fts5Init(sqlite3 *db){ |
| 196769 | 196776 | static const sqlite3_module fts5Mod = { |
| 196770 | 196777 | /* iVersion */ 2, |
| 196771 | 196778 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -381,11 +381,11 @@ | |
| 381 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 382 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 383 | */ |
| 384 | #define SQLITE_VERSION "3.16.0" |
| 385 | #define SQLITE_VERSION_NUMBER 3016000 |
| 386 | #define SQLITE_SOURCE_ID "2016-12-30 00:09:14 f57952bac652901e1bd48b68301941efbcf29dc4" |
| 387 | |
| 388 | /* |
| 389 | ** CAPI3REF: Run-Time Library Version Numbers |
| 390 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 391 | ** |
| @@ -25727,11 +25727,11 @@ | |
| 25727 | assert( p->zText!=0 || p->nChar==0 || p->accError ); |
| 25728 | assert( N>=0 ); |
| 25729 | assert( p->accError==0 || p->nAlloc==0 ); |
| 25730 | if( p->nChar+N >= p->nAlloc ){ |
| 25731 | enlargeAndAppend(p,z,N); |
| 25732 | }else{ |
| 25733 | assert( p->zText ); |
| 25734 | p->nChar += N; |
| 25735 | memcpy(&p->zText[p->nChar-N], z, N); |
| 25736 | } |
| 25737 | } |
| @@ -50629,10 +50629,11 @@ | |
| 50629 | rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr); |
| 50630 | } |
| 50631 | return rc; |
| 50632 | } |
| 50633 | |
| 50634 | /* |
| 50635 | ** Obtain a reference to a memory mapped page object for page number pgno. |
| 50636 | ** The new object will use the pointer pData, obtained from xFetch(). |
| 50637 | ** If successful, set *ppPage to point to the new page reference |
| 50638 | ** and return SQLITE_OK. Otherwise, return an SQLite error code and set |
| @@ -50677,10 +50678,11 @@ | |
| 50677 | p->pData = pData; |
| 50678 | pPager->nMmapOut++; |
| 50679 | |
| 50680 | return SQLITE_OK; |
| 50681 | } |
| 50682 | |
| 50683 | /* |
| 50684 | ** Release a reference to page pPg. pPg must have been returned by an |
| 50685 | ** earlier call to pagerAcquireMapPage(). |
| 50686 | */ |
| @@ -52036,10 +52038,11 @@ | |
| 52036 | assert( pPager->errCode==SQLITE_OK ); |
| 52037 | assert( pPager->eState>=PAGER_READER ); |
| 52038 | assert( assert_pager_state(pPager) ); |
| 52039 | assert( pPager->hasHeldSharedLock==1 ); |
| 52040 | |
| 52041 | pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3); |
| 52042 | if( pBase==0 ){ |
| 52043 | pPg = 0; |
| 52044 | rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase); |
| 52045 | if( rc!=SQLITE_OK ) goto pager_acquire_err; |
| @@ -52063,15 +52066,14 @@ | |
| 52063 | |
| 52064 | }else{ |
| 52065 | /* The pager cache has created a new page. Its content needs to |
| 52066 | ** be initialized. But first some error checks: |
| 52067 | ** |
| 52068 | ** (1) Minimum page number is 1 |
| 52069 | ** (2) The maximum page number is 2^31 |
| 52070 | ** (3) Never try to fetch the locking page |
| 52071 | */ |
| 52072 | if( pgno==0 || pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){ |
| 52073 | rc = SQLITE_CORRUPT_BKPT; |
| 52074 | goto pager_acquire_err; |
| 52075 | } |
| 52076 | |
| 52077 | pPg->pPager = pPager; |
| @@ -97866,11 +97868,13 @@ | |
| 97866 | pSample->p = sqlite3DbMallocZero(db, pSample->n + 2); |
| 97867 | if( pSample->p==0 ){ |
| 97868 | sqlite3_finalize(pStmt); |
| 97869 | return SQLITE_NOMEM_BKPT; |
| 97870 | } |
| 97871 | memcpy(pSample->p, sqlite3_column_blob(pStmt, 4), pSample->n); |
| 97872 | pIdx->nSample++; |
| 97873 | } |
| 97874 | rc = sqlite3_finalize(pStmt); |
| 97875 | if( rc==SQLITE_OK ) initAvgEq(pPrevIdx); |
| 97876 | return rc; |
| @@ -104863,29 +104867,32 @@ | |
| 104863 | typeHaystack = sqlite3_value_type(argv[0]); |
| 104864 | typeNeedle = sqlite3_value_type(argv[1]); |
| 104865 | if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; |
| 104866 | nHaystack = sqlite3_value_bytes(argv[0]); |
| 104867 | nNeedle = sqlite3_value_bytes(argv[1]); |
| 104868 | if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ |
| 104869 | zHaystack = sqlite3_value_blob(argv[0]); |
| 104870 | zNeedle = sqlite3_value_blob(argv[1]); |
| 104871 | isText = 0; |
| 104872 | }else{ |
| 104873 | zHaystack = sqlite3_value_text(argv[0]); |
| 104874 | zNeedle = sqlite3_value_text(argv[1]); |
| 104875 | isText = 1; |
| 104876 | if( zNeedle==0 ) return; |
| 104877 | assert( zHaystack ); |
| 104878 | } |
| 104879 | while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ |
| 104880 | N++; |
| 104881 | do{ |
| 104882 | nHaystack--; |
| 104883 | zHaystack++; |
| 104884 | }while( isText && (zHaystack[0]&0xc0)==0x80 ); |
| 104885 | } |
| 104886 | if( nNeedle>nHaystack ) N = 0; |
| 104887 | sqlite3_result_int(context, N); |
| 104888 | } |
| 104889 | |
| 104890 | /* |
| 104891 | ** Implementation of the printf() function. |
| @@ -106294,11 +106301,11 @@ | |
| 106294 | nSep = sqlite3_value_bytes(argv[1]); |
| 106295 | }else{ |
| 106296 | zSep = ","; |
| 106297 | nSep = 1; |
| 106298 | } |
| 106299 | if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep); |
| 106300 | } |
| 106301 | zVal = (char*)sqlite3_value_text(argv[0]); |
| 106302 | nVal = sqlite3_value_bytes(argv[0]); |
| 106303 | if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal); |
| 106304 | } |
| @@ -141629,11 +141636,13 @@ | |
| 141629 | } |
| 141630 | |
| 141631 | }else{ |
| 141632 | zFile = sqlite3_malloc64(nUri+2); |
| 141633 | if( !zFile ) return SQLITE_NOMEM_BKPT; |
| 141634 | memcpy(zFile, zUri, nUri); |
| 141635 | zFile[nUri] = '\0'; |
| 141636 | zFile[nUri+1] = '\0'; |
| 141637 | flags &= ~SQLITE_OPEN_URI; |
| 141638 | } |
| 141639 | |
| @@ -173199,13 +173208,11 @@ | |
| 173199 | if( z==0 && (eType!=SQLITE_BLOB || n>0) ) return SQLITE_NOMEM; |
| 173200 | nVarint = sessionVarintLen(n); |
| 173201 | |
| 173202 | if( aBuf ){ |
| 173203 | sessionVarintPut(&aBuf[1], n); |
| 173204 | memcpy(&aBuf[nVarint + 1], eType==SQLITE_TEXT ? |
| 173205 | sqlite3_value_text(pValue) : sqlite3_value_blob(pValue), n |
| 173206 | ); |
| 173207 | } |
| 173208 | |
| 173209 | nByte = 1 + nVarint + n; |
| 173210 | break; |
| 173211 | } |
| @@ -174617,11 +174624,11 @@ | |
| 174617 | SessionBuffer *p, |
| 174618 | const u8 *aBlob, |
| 174619 | int nBlob, |
| 174620 | int *pRc |
| 174621 | ){ |
| 174622 | if( 0==sessionBufferGrow(p, nBlob, pRc) ){ |
| 174623 | memcpy(&p->aBuf[p->nBuf], aBlob, nBlob); |
| 174624 | p->nBuf += nBlob; |
| 174625 | } |
| 174626 | } |
| 174627 | |
| @@ -174803,17 +174810,17 @@ | |
| 174803 | bChanged = 1; |
| 174804 | break; |
| 174805 | } |
| 174806 | |
| 174807 | default: { |
| 174808 | int nByte; |
| 174809 | int nHdr = 1 + sessionVarintGet(&pCsr[1], &nByte); |
| 174810 | assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); |
| 174811 | nAdvance = nHdr + nByte; |
| 174812 | if( eType==sqlite3_column_type(pStmt, i) |
| 174813 | && nByte==sqlite3_column_bytes(pStmt, i) |
| 174814 | && 0==memcmp(&pCsr[nHdr], sqlite3_column_blob(pStmt, i), nByte) |
| 174815 | ){ |
| 174816 | break; |
| 174817 | } |
| 174818 | bChanged = 1; |
| 174819 | } |
| @@ -196760,11 +196767,11 @@ | |
| 196760 | int nArg, /* Number of args */ |
| 196761 | sqlite3_value **apUnused /* Function arguments */ |
| 196762 | ){ |
| 196763 | assert( nArg==0 ); |
| 196764 | UNUSED_PARAM2(nArg, apUnused); |
| 196765 | sqlite3_result_text(pCtx, "fts5: 2016-12-29 19:48:46 afcdc4a60e357d171156e0de705bf7ad1b37daab", -1, SQLITE_TRANSIENT); |
| 196766 | } |
| 196767 | |
| 196768 | static int fts5Init(sqlite3 *db){ |
| 196769 | static const sqlite3_module fts5Mod = { |
| 196770 | /* iVersion */ 2, |
| 196771 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -381,11 +381,11 @@ | |
| 381 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 382 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 383 | */ |
| 384 | #define SQLITE_VERSION "3.16.0" |
| 385 | #define SQLITE_VERSION_NUMBER 3016000 |
| 386 | #define SQLITE_SOURCE_ID "2016-12-30 17:40:14 14d855d2b2b5b3485e0673d11405db7266b34c6d" |
| 387 | |
| 388 | /* |
| 389 | ** CAPI3REF: Run-Time Library Version Numbers |
| 390 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 391 | ** |
| @@ -25727,11 +25727,11 @@ | |
| 25727 | assert( p->zText!=0 || p->nChar==0 || p->accError ); |
| 25728 | assert( N>=0 ); |
| 25729 | assert( p->accError==0 || p->nAlloc==0 ); |
| 25730 | if( p->nChar+N >= p->nAlloc ){ |
| 25731 | enlargeAndAppend(p,z,N); |
| 25732 | }else if( N ){ |
| 25733 | assert( p->zText ); |
| 25734 | p->nChar += N; |
| 25735 | memcpy(&p->zText[p->nChar-N], z, N); |
| 25736 | } |
| 25737 | } |
| @@ -50629,10 +50629,11 @@ | |
| 50629 | rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr); |
| 50630 | } |
| 50631 | return rc; |
| 50632 | } |
| 50633 | |
| 50634 | #if SQLITE_MAX_MMAP_SIZE>0 |
| 50635 | /* |
| 50636 | ** Obtain a reference to a memory mapped page object for page number pgno. |
| 50637 | ** The new object will use the pointer pData, obtained from xFetch(). |
| 50638 | ** If successful, set *ppPage to point to the new page reference |
| 50639 | ** and return SQLITE_OK. Otherwise, return an SQLite error code and set |
| @@ -50677,10 +50678,11 @@ | |
| 50678 | p->pData = pData; |
| 50679 | pPager->nMmapOut++; |
| 50680 | |
| 50681 | return SQLITE_OK; |
| 50682 | } |
| 50683 | #endif |
| 50684 | |
| 50685 | /* |
| 50686 | ** Release a reference to page pPg. pPg must have been returned by an |
| 50687 | ** earlier call to pagerAcquireMapPage(). |
| 50688 | */ |
| @@ -52036,10 +52038,11 @@ | |
| 52038 | assert( pPager->errCode==SQLITE_OK ); |
| 52039 | assert( pPager->eState>=PAGER_READER ); |
| 52040 | assert( assert_pager_state(pPager) ); |
| 52041 | assert( pPager->hasHeldSharedLock==1 ); |
| 52042 | |
| 52043 | if( pgno==0 ) return SQLITE_CORRUPT_BKPT; |
| 52044 | pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3); |
| 52045 | if( pBase==0 ){ |
| 52046 | pPg = 0; |
| 52047 | rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase); |
| 52048 | if( rc!=SQLITE_OK ) goto pager_acquire_err; |
| @@ -52063,15 +52066,14 @@ | |
| 52066 | |
| 52067 | }else{ |
| 52068 | /* The pager cache has created a new page. Its content needs to |
| 52069 | ** be initialized. But first some error checks: |
| 52070 | ** |
| 52071 | ** (1) The maximum page number is 2^31 |
| 52072 | ** (2) Never try to fetch the locking page |
| 52073 | */ |
| 52074 | if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){ |
| 52075 | rc = SQLITE_CORRUPT_BKPT; |
| 52076 | goto pager_acquire_err; |
| 52077 | } |
| 52078 | |
| 52079 | pPg->pPager = pPager; |
| @@ -97866,11 +97868,13 @@ | |
| 97868 | pSample->p = sqlite3DbMallocZero(db, pSample->n + 2); |
| 97869 | if( pSample->p==0 ){ |
| 97870 | sqlite3_finalize(pStmt); |
| 97871 | return SQLITE_NOMEM_BKPT; |
| 97872 | } |
| 97873 | if( pSample->n ){ |
| 97874 | memcpy(pSample->p, sqlite3_column_blob(pStmt, 4), pSample->n); |
| 97875 | } |
| 97876 | pIdx->nSample++; |
| 97877 | } |
| 97878 | rc = sqlite3_finalize(pStmt); |
| 97879 | if( rc==SQLITE_OK ) initAvgEq(pPrevIdx); |
| 97880 | return rc; |
| @@ -104863,29 +104867,32 @@ | |
| 104867 | typeHaystack = sqlite3_value_type(argv[0]); |
| 104868 | typeNeedle = sqlite3_value_type(argv[1]); |
| 104869 | if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; |
| 104870 | nHaystack = sqlite3_value_bytes(argv[0]); |
| 104871 | nNeedle = sqlite3_value_bytes(argv[1]); |
| 104872 | if( nNeedle>0 ){ |
| 104873 | if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ |
| 104874 | zHaystack = sqlite3_value_blob(argv[0]); |
| 104875 | zNeedle = sqlite3_value_blob(argv[1]); |
| 104876 | assert( zNeedle!=0 ); |
| 104877 | assert( zHaystack!=0 || nHaystack==0 ); |
| 104878 | isText = 0; |
| 104879 | }else{ |
| 104880 | zHaystack = sqlite3_value_text(argv[0]); |
| 104881 | zNeedle = sqlite3_value_text(argv[1]); |
| 104882 | isText = 1; |
| 104883 | if( zHaystack==0 || zNeedle==0 ) return; |
| 104884 | } |
| 104885 | while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ |
| 104886 | N++; |
| 104887 | do{ |
| 104888 | nHaystack--; |
| 104889 | zHaystack++; |
| 104890 | }while( isText && (zHaystack[0]&0xc0)==0x80 ); |
| 104891 | } |
| 104892 | if( nNeedle>nHaystack ) N = 0; |
| 104893 | } |
| 104894 | sqlite3_result_int(context, N); |
| 104895 | } |
| 104896 | |
| 104897 | /* |
| 104898 | ** Implementation of the printf() function. |
| @@ -106294,11 +106301,11 @@ | |
| 106301 | nSep = sqlite3_value_bytes(argv[1]); |
| 106302 | }else{ |
| 106303 | zSep = ","; |
| 106304 | nSep = 1; |
| 106305 | } |
| 106306 | if( zSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep); |
| 106307 | } |
| 106308 | zVal = (char*)sqlite3_value_text(argv[0]); |
| 106309 | nVal = sqlite3_value_bytes(argv[0]); |
| 106310 | if( zVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal); |
| 106311 | } |
| @@ -141629,11 +141636,13 @@ | |
| 141636 | } |
| 141637 | |
| 141638 | }else{ |
| 141639 | zFile = sqlite3_malloc64(nUri+2); |
| 141640 | if( !zFile ) return SQLITE_NOMEM_BKPT; |
| 141641 | if( nUri ){ |
| 141642 | memcpy(zFile, zUri, nUri); |
| 141643 | } |
| 141644 | zFile[nUri] = '\0'; |
| 141645 | zFile[nUri+1] = '\0'; |
| 141646 | flags &= ~SQLITE_OPEN_URI; |
| 141647 | } |
| 141648 | |
| @@ -173199,13 +173208,11 @@ | |
| 173208 | if( z==0 && (eType!=SQLITE_BLOB || n>0) ) return SQLITE_NOMEM; |
| 173209 | nVarint = sessionVarintLen(n); |
| 173210 | |
| 173211 | if( aBuf ){ |
| 173212 | sessionVarintPut(&aBuf[1], n); |
| 173213 | if( n ) memcpy(&aBuf[nVarint + 1], z, n); |
| 173214 | } |
| 173215 | |
| 173216 | nByte = 1 + nVarint + n; |
| 173217 | break; |
| 173218 | } |
| @@ -174617,11 +174624,11 @@ | |
| 174624 | SessionBuffer *p, |
| 174625 | const u8 *aBlob, |
| 174626 | int nBlob, |
| 174627 | int *pRc |
| 174628 | ){ |
| 174629 | if( nBlob>0 && 0==sessionBufferGrow(p, nBlob, pRc) ){ |
| 174630 | memcpy(&p->aBuf[p->nBuf], aBlob, nBlob); |
| 174631 | p->nBuf += nBlob; |
| 174632 | } |
| 174633 | } |
| 174634 | |
| @@ -174803,17 +174810,17 @@ | |
| 174810 | bChanged = 1; |
| 174811 | break; |
| 174812 | } |
| 174813 | |
| 174814 | default: { |
| 174815 | int n; |
| 174816 | int nHdr = 1 + sessionVarintGet(&pCsr[1], &n); |
| 174817 | assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); |
| 174818 | nAdvance = nHdr + n; |
| 174819 | if( eType==sqlite3_column_type(pStmt, i) |
| 174820 | && n==sqlite3_column_bytes(pStmt, i) |
| 174821 | && (n==0 || 0==memcmp(&pCsr[nHdr], sqlite3_column_blob(pStmt, i), n)) |
| 174822 | ){ |
| 174823 | break; |
| 174824 | } |
| 174825 | bChanged = 1; |
| 174826 | } |
| @@ -196760,11 +196767,11 @@ | |
| 196767 | int nArg, /* Number of args */ |
| 196768 | sqlite3_value **apUnused /* Function arguments */ |
| 196769 | ){ |
| 196770 | assert( nArg==0 ); |
| 196771 | UNUSED_PARAM2(nArg, apUnused); |
| 196772 | sqlite3_result_text(pCtx, "fts5: 2016-12-30 15:16:20 a0971e713682a73d8c7c20511db256c20d2f6388", -1, SQLITE_TRANSIENT); |
| 196773 | } |
| 196774 | |
| 196775 | static int fts5Init(sqlite3 *db){ |
| 196776 | static const sqlite3_module fts5Mod = { |
| 196777 | /* iVersion */ 2, |
| 196778 |
+1
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -121,11 +121,11 @@ | ||
| 121 | 121 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 122 | 122 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 123 | 123 | */ |
| 124 | 124 | #define SQLITE_VERSION "3.16.0" |
| 125 | 125 | #define SQLITE_VERSION_NUMBER 3016000 |
| 126 | -#define SQLITE_SOURCE_ID "2016-12-30 00:09:14 f57952bac652901e1bd48b68301941efbcf29dc4" | |
| 126 | +#define SQLITE_SOURCE_ID "2016-12-30 17:40:14 14d855d2b2b5b3485e0673d11405db7266b34c6d" | |
| 127 | 127 | |
| 128 | 128 | /* |
| 129 | 129 | ** CAPI3REF: Run-Time Library Version Numbers |
| 130 | 130 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 131 | 131 | ** |
| 132 | 132 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -121,11 +121,11 @@ | |
| 121 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 122 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 123 | */ |
| 124 | #define SQLITE_VERSION "3.16.0" |
| 125 | #define SQLITE_VERSION_NUMBER 3016000 |
| 126 | #define SQLITE_SOURCE_ID "2016-12-30 00:09:14 f57952bac652901e1bd48b68301941efbcf29dc4" |
| 127 | |
| 128 | /* |
| 129 | ** CAPI3REF: Run-Time Library Version Numbers |
| 130 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 131 | ** |
| 132 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -121,11 +121,11 @@ | |
| 121 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 122 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 123 | */ |
| 124 | #define SQLITE_VERSION "3.16.0" |
| 125 | #define SQLITE_VERSION_NUMBER 3016000 |
| 126 | #define SQLITE_SOURCE_ID "2016-12-30 17:40:14 14d855d2b2b5b3485e0673d11405db7266b34c6d" |
| 127 | |
| 128 | /* |
| 129 | ** CAPI3REF: Run-Time Library Version Numbers |
| 130 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 131 | ** |
| 132 |