Fossil SCM

Update the built-in SQLite to include the "PRAGMA integrity_check" fix.

drh 2016-03-19 03:05 trunk
Commit 567ab1937e1a15bee3ee566f78ee2678666982d1
2 files changed +34 -4 +1 -1
+34 -4
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -336,11 +336,11 @@
336336
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
337337
** [sqlite_version()] and [sqlite_source_id()].
338338
*/
339339
#define SQLITE_VERSION "3.12.0"
340340
#define SQLITE_VERSION_NUMBER 3012000
341
-#define SQLITE_SOURCE_ID "2016-03-18 00:39:40 b199637d81d7e2a767131ac03c7679b101fd459c"
341
+#define SQLITE_SOURCE_ID "2016-03-19 00:35:02 88439a866b3b16ad7c308ebe59198662a05e7eeb"
342342
343343
/*
344344
** CAPI3REF: Run-Time Library Version Numbers
345345
** KEYWORDS: sqlite3_version, sqlite3_sourceid
346346
**
@@ -14340,10 +14340,13 @@
1434014340
SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
1434114341
SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
1434214342
SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
1434314343
SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
1434414344
SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*);
14345
+#ifdef SQLITE_DEBUG
14346
+SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse*,int,int);
14347
+#endif
1434514348
SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
1434614349
SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
1434714350
SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
1434814351
SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
1434914352
SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
@@ -90826,10 +90829,33 @@
9082690829
SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
9082790830
pParse->nTempReg = 0;
9082890831
pParse->nRangeReg = 0;
9082990832
}
9083090833
90834
+/*
90835
+** Validate that no temporary register falls within the range of
90836
+** iFirst..iLast, inclusive. This routine is only call from within assert()
90837
+** statements.
90838
+*/
90839
+#ifdef SQLITE_DEBUG
90840
+SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse *pParse, int iFirst, int iLast){
90841
+ int i;
90842
+ if( pParse->nRangeReg>0
90843
+ && pParse->iRangeReg+pParse->nRangeReg<iLast
90844
+ && pParse->iRangeReg>=iFirst
90845
+ ){
90846
+ return 0;
90847
+ }
90848
+ for(i=0; i<pParse->nTempReg; i++){
90849
+ if( pParse->aTempReg[i]>=iFirst && pParse->aTempReg[i]<=iLast ){
90850
+ return 0;
90851
+ }
90852
+ }
90853
+ return 1;
90854
+}
90855
+#endif /* SQLITE_DEBUG */
90856
+
9083190857
/************** End of expr.c ************************************************/
9083290858
/************** Begin file alter.c *******************************************/
9083390859
/*
9083490860
** 2005 February 15
9083590861
**
@@ -108967,10 +108993,12 @@
108967108993
for(i=0; i<db->nDb; i++){
108968108994
HashElem *x;
108969108995
Hash *pTbls;
108970108996
int *aRoot;
108971108997
int cnt = 0;
108998
+ int mxIdx = 0;
108999
+ int nIdx;
108972109000
108973109001
if( OMIT_TEMPDB && i==1 ) continue;
108974109002
if( iDb>=0 && i!=iDb ) continue;
108975109003
108976109004
sqlite3CodeVerifySchema(pParse, i);
@@ -108988,11 +109016,12 @@
108988109016
pTbls = &db->aDb[i].pSchema->tblHash;
108989109017
for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
108990109018
Table *pTab = sqliteHashData(x);
108991109019
Index *pIdx;
108992109020
if( HasRowid(pTab) ) cnt++;
108993
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ cnt++; }
109021
+ for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
109022
+ if( nIdx>mxIdx ) mxIdx = nIdx;
108994109023
}
108995109024
aRoot = sqlite3DbMallocRawNN(db, sizeof(int)*(cnt+1));
108996109025
if( aRoot==0 ) break;
108997109026
for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
108998109027
Table *pTab = sqliteHashData(x);
@@ -109003,11 +109032,11 @@
109003109032
}
109004109033
}
109005109034
aRoot[cnt] = 0;
109006109035
109007109036
/* Make sure sufficient number of registers have been allocated */
109008
- pParse->nMem = MAX( pParse->nMem, 14 );
109037
+ pParse->nMem = MAX( pParse->nMem, 8+mxIdx );
109009109038
109010109039
/* Do the b-tree integrity checks */
109011109040
sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY);
109012109041
sqlite3VdbeChangeP5(v, (u8)i);
109013109042
addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v);
@@ -109040,11 +109069,12 @@
109040109069
1, 0, &iDataCur, &iIdxCur);
109041109070
sqlite3VdbeAddOp2(v, OP_Integer, 0, 7);
109042109071
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
109043109072
sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
109044109073
}
109045
- pParse->nMem = MAX(pParse->nMem, 8+j);
109074
+ assert( pParse->nMem>=8+j );
109075
+ assert( sqlite3NoTempsInRange(pParse,1,7+j) );
109046109076
sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v);
109047109077
loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1);
109048109078
/* Verify that all NOT NULL columns really are NOT NULL */
109049109079
for(j=0; j<pTab->nCol; j++){
109050109080
char *zErr;
109051109081
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -336,11 +336,11 @@
336 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
337 ** [sqlite_version()] and [sqlite_source_id()].
338 */
339 #define SQLITE_VERSION "3.12.0"
340 #define SQLITE_VERSION_NUMBER 3012000
341 #define SQLITE_SOURCE_ID "2016-03-18 00:39:40 b199637d81d7e2a767131ac03c7679b101fd459c"
342
343 /*
344 ** CAPI3REF: Run-Time Library Version Numbers
345 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
346 **
@@ -14340,10 +14340,13 @@
14340 SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
14341 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
14342 SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
14343 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
14344 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*);
 
 
 
14345 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
14346 SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
14347 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
14348 SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
14349 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
@@ -90826,10 +90829,33 @@
90826 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
90827 pParse->nTempReg = 0;
90828 pParse->nRangeReg = 0;
90829 }
90830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90831 /************** End of expr.c ************************************************/
90832 /************** Begin file alter.c *******************************************/
90833 /*
90834 ** 2005 February 15
90835 **
@@ -108967,10 +108993,12 @@
108967 for(i=0; i<db->nDb; i++){
108968 HashElem *x;
108969 Hash *pTbls;
108970 int *aRoot;
108971 int cnt = 0;
 
 
108972
108973 if( OMIT_TEMPDB && i==1 ) continue;
108974 if( iDb>=0 && i!=iDb ) continue;
108975
108976 sqlite3CodeVerifySchema(pParse, i);
@@ -108988,11 +109016,12 @@
108988 pTbls = &db->aDb[i].pSchema->tblHash;
108989 for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
108990 Table *pTab = sqliteHashData(x);
108991 Index *pIdx;
108992 if( HasRowid(pTab) ) cnt++;
108993 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ cnt++; }
 
108994 }
108995 aRoot = sqlite3DbMallocRawNN(db, sizeof(int)*(cnt+1));
108996 if( aRoot==0 ) break;
108997 for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
108998 Table *pTab = sqliteHashData(x);
@@ -109003,11 +109032,11 @@
109003 }
109004 }
109005 aRoot[cnt] = 0;
109006
109007 /* Make sure sufficient number of registers have been allocated */
109008 pParse->nMem = MAX( pParse->nMem, 14 );
109009
109010 /* Do the b-tree integrity checks */
109011 sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY);
109012 sqlite3VdbeChangeP5(v, (u8)i);
109013 addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v);
@@ -109040,11 +109069,12 @@
109040 1, 0, &iDataCur, &iIdxCur);
109041 sqlite3VdbeAddOp2(v, OP_Integer, 0, 7);
109042 for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
109043 sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
109044 }
109045 pParse->nMem = MAX(pParse->nMem, 8+j);
 
109046 sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v);
109047 loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1);
109048 /* Verify that all NOT NULL columns really are NOT NULL */
109049 for(j=0; j<pTab->nCol; j++){
109050 char *zErr;
109051
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -336,11 +336,11 @@
336 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
337 ** [sqlite_version()] and [sqlite_source_id()].
338 */
339 #define SQLITE_VERSION "3.12.0"
340 #define SQLITE_VERSION_NUMBER 3012000
341 #define SQLITE_SOURCE_ID "2016-03-19 00:35:02 88439a866b3b16ad7c308ebe59198662a05e7eeb"
342
343 /*
344 ** CAPI3REF: Run-Time Library Version Numbers
345 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
346 **
@@ -14340,10 +14340,13 @@
14340 SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
14341 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
14342 SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
14343 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
14344 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*);
14345 #ifdef SQLITE_DEBUG
14346 SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse*,int,int);
14347 #endif
14348 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
14349 SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
14350 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
14351 SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
14352 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
@@ -90826,10 +90829,33 @@
90829 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
90830 pParse->nTempReg = 0;
90831 pParse->nRangeReg = 0;
90832 }
90833
90834 /*
90835 ** Validate that no temporary register falls within the range of
90836 ** iFirst..iLast, inclusive. This routine is only call from within assert()
90837 ** statements.
90838 */
90839 #ifdef SQLITE_DEBUG
90840 SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse *pParse, int iFirst, int iLast){
90841 int i;
90842 if( pParse->nRangeReg>0
90843 && pParse->iRangeReg+pParse->nRangeReg<iLast
90844 && pParse->iRangeReg>=iFirst
90845 ){
90846 return 0;
90847 }
90848 for(i=0; i<pParse->nTempReg; i++){
90849 if( pParse->aTempReg[i]>=iFirst && pParse->aTempReg[i]<=iLast ){
90850 return 0;
90851 }
90852 }
90853 return 1;
90854 }
90855 #endif /* SQLITE_DEBUG */
90856
90857 /************** End of expr.c ************************************************/
90858 /************** Begin file alter.c *******************************************/
90859 /*
90860 ** 2005 February 15
90861 **
@@ -108967,10 +108993,12 @@
108993 for(i=0; i<db->nDb; i++){
108994 HashElem *x;
108995 Hash *pTbls;
108996 int *aRoot;
108997 int cnt = 0;
108998 int mxIdx = 0;
108999 int nIdx;
109000
109001 if( OMIT_TEMPDB && i==1 ) continue;
109002 if( iDb>=0 && i!=iDb ) continue;
109003
109004 sqlite3CodeVerifySchema(pParse, i);
@@ -108988,11 +109016,12 @@
109016 pTbls = &db->aDb[i].pSchema->tblHash;
109017 for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
109018 Table *pTab = sqliteHashData(x);
109019 Index *pIdx;
109020 if( HasRowid(pTab) ) cnt++;
109021 for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
109022 if( nIdx>mxIdx ) mxIdx = nIdx;
109023 }
109024 aRoot = sqlite3DbMallocRawNN(db, sizeof(int)*(cnt+1));
109025 if( aRoot==0 ) break;
109026 for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
109027 Table *pTab = sqliteHashData(x);
@@ -109003,11 +109032,11 @@
109032 }
109033 }
109034 aRoot[cnt] = 0;
109035
109036 /* Make sure sufficient number of registers have been allocated */
109037 pParse->nMem = MAX( pParse->nMem, 8+mxIdx );
109038
109039 /* Do the b-tree integrity checks */
109040 sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY);
109041 sqlite3VdbeChangeP5(v, (u8)i);
109042 addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v);
@@ -109040,11 +109069,12 @@
109069 1, 0, &iDataCur, &iIdxCur);
109070 sqlite3VdbeAddOp2(v, OP_Integer, 0, 7);
109071 for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
109072 sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
109073 }
109074 assert( pParse->nMem>=8+j );
109075 assert( sqlite3NoTempsInRange(pParse,1,7+j) );
109076 sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v);
109077 loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1);
109078 /* Verify that all NOT NULL columns really are NOT NULL */
109079 for(j=0; j<pTab->nCol; j++){
109080 char *zErr;
109081
+1 -1
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -111,11 +111,11 @@
111111
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
112112
** [sqlite_version()] and [sqlite_source_id()].
113113
*/
114114
#define SQLITE_VERSION "3.12.0"
115115
#define SQLITE_VERSION_NUMBER 3012000
116
-#define SQLITE_SOURCE_ID "2016-03-18 00:39:40 b199637d81d7e2a767131ac03c7679b101fd459c"
116
+#define SQLITE_SOURCE_ID "2016-03-19 00:35:02 88439a866b3b16ad7c308ebe59198662a05e7eeb"
117117
118118
/*
119119
** CAPI3REF: Run-Time Library Version Numbers
120120
** KEYWORDS: sqlite3_version, sqlite3_sourceid
121121
**
122122
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -111,11 +111,11 @@
111 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
112 ** [sqlite_version()] and [sqlite_source_id()].
113 */
114 #define SQLITE_VERSION "3.12.0"
115 #define SQLITE_VERSION_NUMBER 3012000
116 #define SQLITE_SOURCE_ID "2016-03-18 00:39:40 b199637d81d7e2a767131ac03c7679b101fd459c"
117
118 /*
119 ** CAPI3REF: Run-Time Library Version Numbers
120 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
121 **
122
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -111,11 +111,11 @@
111 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
112 ** [sqlite_version()] and [sqlite_source_id()].
113 */
114 #define SQLITE_VERSION "3.12.0"
115 #define SQLITE_VERSION_NUMBER 3012000
116 #define SQLITE_SOURCE_ID "2016-03-19 00:35:02 88439a866b3b16ad7c308ebe59198662a05e7eeb"
117
118 /*
119 ** CAPI3REF: Run-Time Library Version Numbers
120 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
121 **
122

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button