]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor simplification of the previous checkin.
authordrh <drh@noemail.net>
Fri, 20 Apr 2018 16:27:57 +0000 (16:27 +0000)
committerdrh <drh@noemail.net>
Fri, 20 Apr 2018 16:27:57 +0000 (16:27 +0000)
FossilOrigin-Name: d1906689abdb685f78aa97bca4bf301204d12846016d27bc86dcc9ce2b024d24

manifest
manifest.uuid
src/update.c

index 3f45c797e9175c6f2d349cd53c362ced352fa110..10143260fd68b2be1b9a45b0ab97899a9514e31b 100644 (file)
--- 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
index d25963f495a0ecc39448b797f6b68e09d6c8783d..fa79342f6118e1d7b693082bfe10ef4590ce35b9 100644 (file)
@@ -1 +1 @@
-7c4b6d5475092a3e205f01a6972366e27a404568e8e7ba327f2feefac2ce2c7c
\ No newline at end of file
+d1906689abdb685f78aa97bca4bf301204d12846016d27bc86dcc9ce2b024d24
\ No newline at end of file
index 76148380176e0356878147bc3c34ff7da1e92e1c..30d8a1ec638e150fbb298a3da9263404ed0175bb 100644 (file)
@@ -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