aboutsummaryrefslogtreecommitdiff
path: root/src/insert.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-08-20 23:54:25 +0000
committerdrh <drh@noemail.net>2015-08-20 23:54:25 +0000
commit89a10b2d5312ce304906e2ee2f9932302ed2b85b (patch)
treeefa18c5656cf051fb0d10a1576ec6f12f957dfc7 /src/insert.c
parent87c44ef2f76229eeb5086e8e5ddb41a0fc6db150 (diff)
parent0fee5969c8928e4043416fdc6cdfff738ce40f55 (diff)
downloadsqlite-89a10b2d5312ce304906e2ee2f9932302ed2b85b.tar.gz
sqlite-89a10b2d5312ce304906e2ee2f9932302ed2b85b.zip
Merge recent trunk enhancements, include table-valued functions.
FossilOrigin-Name: e9196d566690de0e9815f8cd85be7844322b5a79
Diffstat (limited to 'src/insert.c')
-rw-r--r--src/insert.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/insert.c b/src/insert.c
index e1b4344b7..d9d88cab6 100644
--- a/src/insert.c
+++ b/src/insert.c
@@ -2008,7 +2008,7 @@ static int xferOptimization(
sqlite3TableLock(pParse, iDbSrc, pSrc->tnum, 0, pSrc->zName);
}
for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
- u8 useSeekResult = 0;
+ u8 idxInsFlags = 0;
for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
}
@@ -2043,12 +2043,15 @@ static int xferOptimization(
if( sqlite3_stricmp("BINARY", zColl) ) break;
}
if( i==pSrcIdx->nColumn ){
- useSeekResult = OPFLAG_USESEEKRESULT;
+ idxInsFlags = OPFLAG_USESEEKRESULT;
sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
}
}
+ if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
+ idxInsFlags |= OPFLAG_NCHANGE;
+ }
sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
- sqlite3VdbeChangeP5(v, useSeekResult);
+ sqlite3VdbeChangeP5(v, idxInsFlags);
sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); VdbeCoverage(v);
sqlite3VdbeJumpHere(v, addr1);
sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);