From: drh Date: Fri, 20 Apr 2018 16:27:57 +0000 (+0000) Subject: Minor simplification of the previous checkin. X-Git-Tag: version-3.24.0~129^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5deb1813cdd1504cf26d5c4ed458fff652901da7;p=thirdparty%2Fsqlite.git Minor simplification of the previous checkin. FossilOrigin-Name: d1906689abdb685f78aa97bca4bf301204d12846016d27bc86dcc9ce2b024d24 --- diff --git a/manifest b/manifest index 3f45c797e9..10143260fd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sunnecessary\scursor\sseeks\sduring\supsert\sprocessing. -D 2018-04-20T15:56:24.816 +C Minor\ssimplification\sof\sthe\sprevious\scheckin. +D 2018-04-20T16:27:57.105 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439 @@ -557,7 +557,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 5b0c661a85f783d35b9883830736eeb63be4aefc4f6b7d9cd081d48782c041e2 F src/treeview.c 14d5d1254702ec96876aa52642cb31548612384134970409fae333b25b39d6bb F src/trigger.c 4ace6d1d5ba9a89822deb287317f33c810440526eafe185c2d8a48c31df1e995 -F src/update.c 2f460e57440cd673bb375b5601029d736f3d604cad2b476e31b1f63b10356bce +F src/update.c ae56e307cf9009290845b79a5f930b7c71613dc9d3ff1d290cdc91c4bd0487d9 F src/upsert.c 4f1d04b8cbae727c066cb2203dcefb6c4a4e3c54ba6345e5ec0b515e48381299 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 @@ -1724,10 +1724,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d8eb9f8d9b61400c7e12f01ef5c233257b03532221f7c7a8386f7ac2db439626 -R 75119827b876db768b1909c51e8a9eca -T *branch * upsert-opt2 -T *sym-upsert-opt2 * -T -sym-trunk * +P 7c4b6d5475092a3e205f01a6972366e27a404568e8e7ba327f2feefac2ce2c7c +R ba9fca97057e7381fd94c7852f29e2a1 U drh -Z 388a812d3bddf28e9c1a7fb5f5cfd19e +Z 4f1c2dd14e09fbddc1a4bf8066b62778 diff --git a/manifest.uuid b/manifest.uuid index d25963f495..fa79342f61 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7c4b6d5475092a3e205f01a6972366e27a404568e8e7ba327f2feefac2ce2c7c \ No newline at end of file +d1906689abdb685f78aa97bca4bf301204d12846016d27bc86dcc9ce2b024d24 \ No newline at end of file diff --git a/src/update.c b/src/update.c index 7614838017..30d8a1ec63 100644 --- a/src/update.c +++ b/src/update.c @@ -393,6 +393,33 @@ void sqlite3Update( /* Jump to labelBreak to abandon further processing of this UPDATE */ labelBreak = sqlite3VdbeMakeLabel(v); + /* Not an UPSERT. Normal processing. Begin by + ** initialize the count of updated rows */ + if( (db->flags&SQLITE_CountRows)!=0 + && !pParse->pTriggerTab + && !pParse->nested + && pUpsert==0 + ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + } + + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); + }else{ + assert( pPk!=0 ); + nPk = pPk->nKeyCol; + iPk = pParse->nMem+1; + pParse->nMem += nPk; + regKey = ++pParse->nMem; + if( pUpsert==0 ){ + iEph = pParse->nTab++; + sqlite3VdbeAddOp3(v, OP_Null, 0, iPk, iPk+nPk-1); + addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nPk); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + } + } + if( pUpsert ){ /* If this is an UPSERT, then all cursors have already been opened by ** the outer INSERT and the data cursor should be pointing at the row @@ -402,39 +429,8 @@ void sqlite3Update( pWInfo = 0; eOnePass = ONEPASS_SINGLE; labelContinue = labelBreak; - if( !HasRowid(pTab) ){ - nPk = pPk->nKeyCol; - iPk = pParse->nMem+1; - pParse->nMem += nPk; - regKey = ++pParse->nMem; - } sqlite3ExprIfFalse(pParse, pWhere, labelBreak, SQLITE_JUMPIFNULL); }else{ - /* Not an UPSERT. Normal processing. Begin by - ** initialize the count of updated rows */ - if( (db->flags&SQLITE_CountRows)!=0 - && !pParse->pTriggerTab - && !pParse->nested - ){ - regRowCount = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); - } - - if( HasRowid(pTab) ){ - sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); - }else{ - assert( pPk!=0 ); - nPk = pPk->nKeyCol; - iPk = pParse->nMem+1; - pParse->nMem += nPk; - regKey = ++pParse->nMem; - iEph = pParse->nTab++; - - sqlite3VdbeAddOp3(v, OP_Null, 0, iPk, iPk+nPk-1); - addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nPk); - sqlite3VdbeSetP4KeyInfo(pParse, pPk); - } - /* Begin the database scan. ** ** Do not consider a single-pass strategy for a multi-row update if