1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-11 01:42:22 +03:00

Experimental change to use a single-pass approach for DELETE statements on non-virtual tables that do not fire triggers or require foriegn-key processing.

FossilOrigin-Name: eaeb2b80f6f8f83679c8323a81bb39570ec946fe
This commit is contained in:
dan
2015-09-12 19:26:11 +00:00
parent 04abf0878f
commit f0ee1d3c12
13 changed files with 338 additions and 113 deletions

View File

@@ -1347,10 +1347,10 @@ void sqlite3GenerateConstraintChecks(
if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
sqlite3MultiWrite(pParse);
sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur,
regNewData, 1, 0, OE_Replace, 1);
regNewData, 1, 0, OE_Replace, 1, -1);
}else if( pTab->pIndex ){
sqlite3MultiWrite(pParse);
sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, 0);
sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, 0, -1);
}
seenReplace = 1;
break;
@@ -1528,7 +1528,7 @@ void sqlite3GenerateConstraintChecks(
pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
}
sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur,
regR, nPkField, 0, OE_Replace, pIdx==pPk);
regR, nPkField, 0, OE_Replace, pIdx==pPk, -1);
seenReplace = 1;
break;
}