Cleanup and simplification of the output row count limit control of
PRAGMA integrity_check. FossilOrigin-Name: 5af7d72ed9ec758283d78ceb46627d72021c1c60
This commit is contained in:
parent
8b174f2916
commit
66accfc56b
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
|||||||
C Fix\sintegrity_check\sso\sthat\sit\sverifies\sNOT\sNULL\sconstraints\seven\sfor\stables\nthat\shave\sno\sindexes.\s\sEnhance\squick_check\sso\sthat\sit\sverifies\sNOT\sNULL\sand\nCHECK\sconstraints.
|
C Cleanup\sand\ssimplification\sof\sthe\soutput\srow\scount\slimit\scontrol\sof\nPRAGMA\sintegrity_check.
|
||||||
D 2017-02-22T15:11:36.862
|
D 2017-02-22T18:04:42.473
|
||||||
F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
|
F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc a89ea37ab5928026001569f056973b9059492fe2
|
F Makefile.msc a89ea37ab5928026001569f056973b9059492fe2
|
||||||
@ -388,7 +388,7 @@ F src/parse.y af8830094f4aecb91cb69721f3601ad10c36abc4
|
|||||||
F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
|
F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
|
||||||
F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490
|
F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490
|
||||||
F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953
|
F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953
|
||||||
F src/pragma.c ec83a3cb496d6d6d24f9de78ccbb24369dcedf48
|
F src/pragma.c b127edeb54c744a101b371cfa2e221fd741bcd72
|
||||||
F src/pragma.h 61aa5389118594bebb28120a6720401aee34ce1a
|
F src/pragma.h 61aa5389118594bebb28120a6720401aee34ce1a
|
||||||
F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
|
F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
|
||||||
F src/printf.c 67427bbee66d891fc6f6f5aada857e9cdb368c1c
|
F src/printf.c 67427bbee66d891fc6f6f5aada857e9cdb368c1c
|
||||||
@ -462,7 +462,7 @@ F src/update.c 456d4a4656f8a03c2abc88a51b19172197400e58
|
|||||||
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
||||||
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
|
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
|
||||||
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
|
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
|
||||||
F src/vdbe.c 16542e327eb38763490473dc0e9e9396924f30b2
|
F src/vdbe.c 83f387d9e6842b1dc99f6e85bb577c5bbc4e397d
|
||||||
F src/vdbe.h 59998ffd71d7caa8886bc78dafaf8caeccd4c13c
|
F src/vdbe.h 59998ffd71d7caa8886bc78dafaf8caeccd4c13c
|
||||||
F src/vdbeInt.h 4e4b15b2e1330e1636e4e01974eab2b0b985092f
|
F src/vdbeInt.h 4e4b15b2e1330e1636e4e01974eab2b0b985092f
|
||||||
F src/vdbeapi.c 3e4a8893feeb78620f4aac4ac5b85d92255b97e1
|
F src/vdbeapi.c 3e4a8893feeb78620f4aac4ac5b85d92255b97e1
|
||||||
@ -1557,7 +1557,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 549bae0856004ff65b505175460abd598b30fe57
|
P 5264844b069cdc20f456acee9f5b2b97c986120d
|
||||||
R ca36fe65b7e723d2451bfac8ac59f0b7
|
R 46f90a15a015e3c65c6378dae6f8ff19
|
||||||
U drh
|
U drh
|
||||||
Z 40e14a5b2e43e016c602364a556c9a0b
|
Z ac3f9bd06db21fa3e22e700d592b007d
|
||||||
|
@ -1 +1 @@
|
|||||||
5264844b069cdc20f456acee9f5b2b97c986120d
|
5af7d72ed9ec758283d78ceb46627d72021c1c60
|
60
src/pragma.c
60
src/pragma.c
@ -295,6 +295,22 @@ static const PragmaName *pragmaLocate(const char *zName){
|
|||||||
return lwr>upr ? 0 : &aPragmaName[mid];
|
return lwr>upr ? 0 : &aPragmaName[mid];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Helper subroutine for PRAGMA integrity_check:
|
||||||
|
**
|
||||||
|
** Generate code to output a single-column result row with the result
|
||||||
|
** held in register regResult. Decrement the result count and halt if
|
||||||
|
** the maximum number of result rows have been issued.
|
||||||
|
*/
|
||||||
|
static int integrityCheckResultRow(Vdbe *v, int regResult){
|
||||||
|
int addr;
|
||||||
|
sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 1);
|
||||||
|
addr = sqlite3VdbeAddOp3(v, OP_IfPos, 1, sqlite3VdbeCurrentAddr(v)+2, 1);
|
||||||
|
VdbeCoverage(v);
|
||||||
|
sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Process a pragma statement.
|
** Process a pragma statement.
|
||||||
**
|
**
|
||||||
@ -1418,7 +1434,7 @@ void sqlite3Pragma(
|
|||||||
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
|
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1); /* reg[1] holds errors left */
|
sqlite3VdbeAddOp2(v, OP_Integer, mxErr-1, 1); /* reg[1] holds errors left */
|
||||||
|
|
||||||
/* Do an integrity check on each database file */
|
/* Do an integrity check on each database file */
|
||||||
for(i=0; i<db->nDb; i++){
|
for(i=0; i<db->nDb; i++){
|
||||||
@ -1433,10 +1449,6 @@ void sqlite3Pragma(
|
|||||||
if( iDb>=0 && i!=iDb ) continue;
|
if( iDb>=0 && i!=iDb ) continue;
|
||||||
|
|
||||||
sqlite3CodeVerifySchema(pParse, i);
|
sqlite3CodeVerifySchema(pParse, i);
|
||||||
addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */
|
|
||||||
VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
|
|
||||||
sqlite3VdbeJumpHere(v, addr);
|
|
||||||
|
|
||||||
/* Do an integrity check of the B-Tree
|
/* Do an integrity check of the B-Tree
|
||||||
**
|
**
|
||||||
@ -1476,7 +1488,7 @@ void sqlite3Pragma(
|
|||||||
P4_DYNAMIC);
|
P4_DYNAMIC);
|
||||||
sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
|
sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
|
||||||
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
|
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
|
||||||
sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1);
|
integrityCheckResultRow(v, 2);
|
||||||
sqlite3VdbeJumpHere(v, addr);
|
sqlite3VdbeJumpHere(v, addr);
|
||||||
|
|
||||||
/* Make sure all the indices are constructed correctly.
|
/* Make sure all the indices are constructed correctly.
|
||||||
@ -1496,10 +1508,6 @@ void sqlite3Pragma(
|
|||||||
continue; /* No additional checks needed for this table */
|
continue; /* No additional checks needed for this table */
|
||||||
}
|
}
|
||||||
pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
|
pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
|
||||||
addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */
|
|
||||||
VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
|
|
||||||
sqlite3VdbeJumpHere(v, addr);
|
|
||||||
sqlite3ExprCacheClear(pParse);
|
sqlite3ExprCacheClear(pParse);
|
||||||
sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
|
sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
|
||||||
1, 0, &iDataCur, &iIdxCur);
|
1, 0, &iDataCur, &iIdxCur);
|
||||||
@ -1514,21 +1522,17 @@ void sqlite3Pragma(
|
|||||||
/* Verify that all NOT NULL columns really are NOT NULL */
|
/* Verify that all NOT NULL columns really are NOT NULL */
|
||||||
for(j=0; j<pTab->nCol; j++){
|
for(j=0; j<pTab->nCol; j++){
|
||||||
char *zErr;
|
char *zErr;
|
||||||
int jmp2, jmp3;
|
int jmp2;
|
||||||
if( j==pTab->iPKey ) continue;
|
if( j==pTab->iPKey ) continue;
|
||||||
if( pTab->aCol[j].notNull==0 ) continue;
|
if( pTab->aCol[j].notNull==0 ) continue;
|
||||||
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
|
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
|
||||||
sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
|
sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
|
||||||
jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
|
jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
|
||||||
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
|
|
||||||
zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
|
zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
|
||||||
pTab->aCol[j].zName);
|
pTab->aCol[j].zName);
|
||||||
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
|
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
|
||||||
sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
|
integrityCheckResultRow(v, 3);
|
||||||
jmp3 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp0(v, OP_Halt);
|
|
||||||
sqlite3VdbeJumpHere(v, jmp2);
|
sqlite3VdbeJumpHere(v, jmp2);
|
||||||
sqlite3VdbeJumpHere(v, jmp3);
|
|
||||||
}
|
}
|
||||||
/* Verify CHECK constraints */
|
/* Verify CHECK constraints */
|
||||||
if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){
|
if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){
|
||||||
@ -1545,13 +1549,10 @@ void sqlite3Pragma(
|
|||||||
sqlite3ExprIfTrue(pParse, pCheck->a[0].pExpr, addrCkOk,
|
sqlite3ExprIfTrue(pParse, pCheck->a[0].pExpr, addrCkOk,
|
||||||
SQLITE_JUMPIFNULL);
|
SQLITE_JUMPIFNULL);
|
||||||
sqlite3VdbeResolveLabel(v, addrCkFault);
|
sqlite3VdbeResolveLabel(v, addrCkFault);
|
||||||
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
|
|
||||||
zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s",
|
zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s",
|
||||||
pTab->zName);
|
pTab->zName);
|
||||||
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
|
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
|
||||||
sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
|
integrityCheckResultRow(v, 3);
|
||||||
sqlite3VdbeAddOp2(v, OP_IfPos, 1, addrCkOk); VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp0(v, OP_Halt);
|
|
||||||
sqlite3VdbeResolveLabel(v, addrCkOk);
|
sqlite3VdbeResolveLabel(v, addrCkOk);
|
||||||
sqlite3ExprCachePop(pParse);
|
sqlite3ExprCachePop(pParse);
|
||||||
}
|
}
|
||||||
@ -1567,16 +1568,13 @@ void sqlite3Pragma(
|
|||||||
/* Verify that an index entry exists for the current table row */
|
/* Verify that an index entry exists for the current table row */
|
||||||
jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
|
jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
|
||||||
pIdx->nColumn); VdbeCoverage(v);
|
pIdx->nColumn); VdbeCoverage(v);
|
||||||
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
|
|
||||||
sqlite3VdbeLoadString(v, 3, "row ");
|
sqlite3VdbeLoadString(v, 3, "row ");
|
||||||
sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
|
sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
|
||||||
sqlite3VdbeLoadString(v, 4, " missing from index ");
|
sqlite3VdbeLoadString(v, 4, " missing from index ");
|
||||||
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
|
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
|
||||||
jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
|
jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
|
||||||
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
|
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
|
||||||
sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
|
jmp4 = integrityCheckResultRow(v, 3);
|
||||||
jmp4 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp0(v, OP_Halt);
|
|
||||||
sqlite3VdbeJumpHere(v, jmp2);
|
sqlite3VdbeJumpHere(v, jmp2);
|
||||||
/* For UNIQUE indexes, verify that only one entry exists with the
|
/* For UNIQUE indexes, verify that only one entry exists with the
|
||||||
** current key. The entry is unique if (1) any column is NULL
|
** current key. The entry is unique if (1) any column is NULL
|
||||||
@ -1597,7 +1595,6 @@ void sqlite3Pragma(
|
|||||||
sqlite3VdbeJumpHere(v, jmp6);
|
sqlite3VdbeJumpHere(v, jmp6);
|
||||||
sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
|
sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
|
||||||
pIdx->nKeyCol); VdbeCoverage(v);
|
pIdx->nKeyCol); VdbeCoverage(v);
|
||||||
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
|
|
||||||
sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
|
sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
|
||||||
sqlite3VdbeGoto(v, jmp5);
|
sqlite3VdbeGoto(v, jmp5);
|
||||||
sqlite3VdbeResolveLabel(v, uniqOk);
|
sqlite3VdbeResolveLabel(v, uniqOk);
|
||||||
@ -1612,16 +1609,13 @@ void sqlite3Pragma(
|
|||||||
sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
|
sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
|
||||||
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
|
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
|
||||||
if( pPk==pIdx ) continue;
|
if( pPk==pIdx ) continue;
|
||||||
addr = sqlite3VdbeCurrentAddr(v);
|
|
||||||
sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr+2); VdbeCoverage(v);
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
|
sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
|
||||||
sqlite3VdbeAddOp3(v, OP_Eq, 8+j, addr+8, 3); VdbeCoverage(v);
|
addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v);
|
||||||
sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
|
sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
|
||||||
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1);
|
|
||||||
sqlite3VdbeLoadString(v, 3, pIdx->zName);
|
sqlite3VdbeLoadString(v, 3, pIdx->zName);
|
||||||
sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7);
|
sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7);
|
||||||
sqlite3VdbeAddOp2(v, OP_ResultRow, 7, 1);
|
integrityCheckResultRow(v, 7);
|
||||||
|
sqlite3VdbeJumpHere(v, addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_OMIT_BTREECOUNT */
|
#endif /* SQLITE_OMIT_BTREECOUNT */
|
||||||
@ -1631,7 +1625,7 @@ void sqlite3Pragma(
|
|||||||
static const int iLn = VDBE_OFFSET_LINENO(2);
|
static const int iLn = VDBE_OFFSET_LINENO(2);
|
||||||
static const VdbeOpList endCode[] = {
|
static const VdbeOpList endCode[] = {
|
||||||
{ OP_AddImm, 1, 0, 0}, /* 0 */
|
{ OP_AddImm, 1, 0, 0}, /* 0 */
|
||||||
{ OP_If, 1, 4, 0}, /* 1 */
|
{ OP_IfNotZero, 1, 4, 0}, /* 1 */
|
||||||
{ OP_String8, 0, 3, 0}, /* 2 */
|
{ OP_String8, 0, 3, 0}, /* 2 */
|
||||||
{ OP_ResultRow, 3, 1, 0}, /* 3 */
|
{ OP_ResultRow, 3, 1, 0}, /* 3 */
|
||||||
};
|
};
|
||||||
@ -1639,7 +1633,7 @@ void sqlite3Pragma(
|
|||||||
|
|
||||||
aOp = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode, iLn);
|
aOp = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode, iLn);
|
||||||
if( aOp ){
|
if( aOp ){
|
||||||
aOp[0].p2 = -mxErr;
|
aOp[0].p2 = 1-mxErr;
|
||||||
aOp[2].p4type = P4_STATIC;
|
aOp[2].p4type = P4_STATIC;
|
||||||
aOp[2].p4.z = "ok";
|
aOp[2].p4.z = "ok";
|
||||||
}
|
}
|
||||||
|
@ -5611,7 +5611,7 @@ case OP_DropTrigger: {
|
|||||||
** register P1 the text of an error message describing any problems.
|
** register P1 the text of an error message describing any problems.
|
||||||
** If no problems are found, store a NULL in register P1.
|
** If no problems are found, store a NULL in register P1.
|
||||||
**
|
**
|
||||||
** The register P3 contains the maximum number of allowed errors.
|
** The register P3 contains one less than the maximum number of allowed errors.
|
||||||
** At most reg(P3) errors will be reported.
|
** At most reg(P3) errors will be reported.
|
||||||
** In other words, the analysis stops as soon as reg(P1) errors are
|
** In other words, the analysis stops as soon as reg(P1) errors are
|
||||||
** seen. Reg(P1) is updated with the number of errors remaining.
|
** seen. Reg(P1) is updated with the number of errors remaining.
|
||||||
@ -5644,14 +5644,14 @@ case OP_IntegrityCk: {
|
|||||||
assert( pOp->p5<db->nDb );
|
assert( pOp->p5<db->nDb );
|
||||||
assert( DbMaskTest(p->btreeMask, pOp->p5) );
|
assert( DbMaskTest(p->btreeMask, pOp->p5) );
|
||||||
z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
|
z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
|
||||||
(int)pnErr->u.i, &nErr);
|
(int)pnErr->u.i+1, &nErr);
|
||||||
pnErr->u.i -= nErr;
|
|
||||||
sqlite3VdbeMemSetNull(pIn1);
|
sqlite3VdbeMemSetNull(pIn1);
|
||||||
if( nErr==0 ){
|
if( nErr==0 ){
|
||||||
assert( z==0 );
|
assert( z==0 );
|
||||||
}else if( z==0 ){
|
}else if( z==0 ){
|
||||||
goto no_mem;
|
goto no_mem;
|
||||||
}else{
|
}else{
|
||||||
|
pnErr->u.i -= nErr-1;
|
||||||
sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free);
|
sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free);
|
||||||
}
|
}
|
||||||
UPDATE_MAX_BLOBSIZE(pIn1);
|
UPDATE_MAX_BLOBSIZE(pIn1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user