mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
During DELETE, if an index entry is missing, do not raise the
SQLITE_CORRUPT_INDEX error (added by [f339f31f9e9a856b]) if in "PRAGMA writable_schema=ON" mode. FossilOrigin-Name: 19e56291a7344c7aa69e2845f11cb865ee10a6b89a00bbe74b3babbeebe0357b
This commit is contained in:
@@ -5920,7 +5920,8 @@ case OP_SorterInsert: { /* in2 */
|
||||
** an UPDATE or DELETE statement and the index entry to be updated
|
||||
** or deleted is not found. For some uses of IdxDelete
|
||||
** (example: the EXCEPT operator) it does not matter that no matching
|
||||
** entry is found. For those cases, P5 is zero.
|
||||
** entry is found. For those cases, P5 is zero. Also, do not raise
|
||||
** this (self-correcting and non-critical) error if in writable_schema mode.
|
||||
*/
|
||||
case OP_IdxDelete: {
|
||||
VdbeCursor *pC;
|
||||
@@ -5946,7 +5947,7 @@ case OP_IdxDelete: {
|
||||
if( res==0 ){
|
||||
rc = sqlite3BtreeDelete(pCrsr, BTREE_AUXDELETE);
|
||||
if( rc ) goto abort_due_to_error;
|
||||
}else if( pOp->p5 ){
|
||||
}else if( pOp->p5 && !sqlite3WritableSchema(db) ){
|
||||
rc = sqlite3ReportError(SQLITE_CORRUPT_INDEX, __LINE__, "index corruption");
|
||||
goto abort_due_to_error;
|
||||
}
|
||||
|
Reference in New Issue
Block a user