diff options
author | drh <drh@noemail.net> | 2016-02-02 02:22:30 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2016-02-02 02:22:30 +0000 |
commit | 33c1eb64772caf48a33d92e1a3c5a577c9ba1aa9 (patch) | |
tree | e820c4a4276381c4c71f8cf891e75dc67302fa8b /src/delete.c | |
parent | e1ed0bb6077cc223fa54f58ae835f133d1c4aa59 (diff) | |
parent | b8db549832d2acc2fc30327e6fb5c0474820f122 (diff) | |
download | sqlite-33c1eb64772caf48a33d92e1a3c5a577c9ba1aa9.tar.gz sqlite-33c1eb64772caf48a33d92e1a3c5a577c9ba1aa9.zip |
Merge all recent enhancements from trunk.
FossilOrigin-Name: f3f9200115caf4b356f90ec97c351d1afbcb9bf6
Diffstat (limited to 'src/delete.c')
-rw-r--r-- | src/delete.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/delete.c b/src/delete.c index 68c4c4b36..feda71bf8 100644 --- a/src/delete.c +++ b/src/delete.c @@ -482,13 +482,12 @@ void sqlite3DeleteFrom( */ if( !isView ){ int iAddrOnce = 0; - u8 p5 = (eOnePass==ONEPASS_OFF ? 0 : OPFLAG_FORDELETE); if( eOnePass==ONEPASS_MULTI ){ iAddrOnce = sqlite3CodeOnce(pParse); VdbeCoverage(v); } testcase( IsVirtual(pTab) ); - sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, p5, iTabCur, - aToOpen, &iDataCur, &iIdxCur); + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, OPFLAG_FORDELETE, + iTabCur, aToOpen, &iDataCur, &iIdxCur); assert( pPk || IsVirtual(pTab) || iDataCur==iTabCur ); assert( pPk || IsVirtual(pTab) || iIdxCur==iDataCur+1 ); if( eOnePass==ONEPASS_MULTI ) sqlite3VdbeJumpHere(v, iAddrOnce); @@ -728,13 +727,18 @@ void sqlite3GenerateRowDelete( ** pre-update-hook is. */ if( pTab->pSelect==0 ){ + u8 p5 = 0; sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek); sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0)); sqlite3VdbeChangeP4(v, -1, (char*)pTab, P4_TABLE); + if( eMode!=ONEPASS_OFF ){ + sqlite3VdbeChangeP5(v, OPFLAG_AUXDELETE); + } if( iIdxNoSeek>=0 ){ sqlite3VdbeAddOp1(v, OP_Delete, iIdxNoSeek); } - sqlite3VdbeChangeP5(v, eMode==ONEPASS_MULTI); + if( eMode==ONEPASS_MULTI ) p5 |= OPFLAG_SAVEPOSITION; + sqlite3VdbeChangeP5(v, p5); } /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to |