diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/insert.c | 4 | ||||
-rw-r--r-- | src/vdbe.h | 3 | ||||
-rw-r--r-- | src/vdbeaux.c | 7 |
3 files changed, 9 insertions, 5 deletions
diff --git a/src/insert.c b/src/insert.c index 3bb1ee706..77b402c7e 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1058,9 +1058,7 @@ void sqlite3Insert( ** cursor that is disturbed. And these instructions both clear the ** VdbeCursor.seekResult variable, disabling the OPFLAG_USESEEKRESULT ** functionality. */ - bUseSeek = (isReplace==0 || (pTrigger==0 && - ((db->flags & SQLITE_ForeignKeys)==0 || sqlite3FkReferences(pTab)==0) - )); + bUseSeek = (isReplace==0 || !sqlite3VdbeHasSubProgram(v)); sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur, regIns, aRegIdx, 0, appendFlag, bUseSeek ); diff --git a/src/vdbe.h b/src/vdbe.h index e3aaaa1ce..b59fc7a26 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -278,9 +278,8 @@ UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo*); typedef int (*RecordCompare)(int,const void*,UnpackedRecord*); RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*); -#ifndef SQLITE_OMIT_TRIGGER void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); -#endif +int sqlite3VdbeHasSubProgram(Vdbe*); int sqlite3NotPureFunc(sqlite3_context*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index c89b7d419..86980b4dd 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -1099,6 +1099,13 @@ void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){ } /* +** Return true if the given Vdbe has any SubPrograms. +*/ +int sqlite3VdbeHasSubProgram(Vdbe *pVdbe){ + return pVdbe->pProgram!=0; +} + +/* ** Change the opcode at addr into OP_Noop */ int sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ |