]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Simplification to the implementation of OP_Insert.
authordrh <drh@noemail.net>
Fri, 12 Jan 2018 19:33:18 +0000 (19:33 +0000)
committerdrh <drh@noemail.net>
Fri, 12 Jan 2018 19:33:18 +0000 (19:33 +0000)
FossilOrigin-Name: 6acbdba59e9df4313a6232d925a70390acdc43dfa380b4fba7bb8bd442d6e728

manifest
manifest.uuid
src/vdbe.c

index c35fcce3866c1aa9efd85188ee222624a5db571d..d9b6cfb745c2ba5682a32995559234acabeea32d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\serror\shandling\sin\ssqlite3session_diff()\swhen\sit\sis\sinvoked\sfor\stable\n"sqlite_stat1".
-D 2018-01-12T19:20:15.804
+C Simplification\sto\sthe\simplementation\sof\sOP_Insert.
+D 2018-01-12T19:33:18.062
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 38f84f301cbef443b2d269f67a74b8cc536469831f70df7c3e912acc04932cc2
@@ -554,7 +554,7 @@ F src/update.c 8bd52c38d6d426925be4488ee106db26d9ee344406315671ed246ddace8d6091
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c 7315e97a8dc2c8e19ca64196c652cf0a65d13fd0a211b2cec082062372dc6261
 F src/vacuum.c 90839322fd5f00df9617eb21b68beda9b6e2a2937576b0d65985e4aeb1c53739
-F src/vdbe.c a7d0f8312eea5c2084349f0ea13b25fa7ecdb3606d8aab393d4a98ca7ac4c62b
+F src/vdbe.c e660530c799acf41616200373cdaec7af3fce5a25de40d900e8319d50971df73
 F src/vdbe.h 134beb7a12a6213c00eba58febaede33447cc4441bc568a0d9c144b33fc3720a
 F src/vdbeInt.h a0969c14950bcc61b2dfa19c6f62b42c5012013fcda342ca927a192ed37e6592
 F src/vdbeapi.c f519346f6db99a1eb3f85ca3ae8aede9ff9c4d90fec809dae7cb946786b2e270
@@ -1699,7 +1699,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 ec96707eb359c7e0597ee22e5ae017774366463dffa6bdb06e4438b09549f5c0
-R 4a057707a8e14443ce6ba2a239747c3f
-U dan
-Z 642ce6373e880706da1a2277f3f81df3
+P 874285e477dd9bd164e25ddb08b6b80daaa8cfd111b4180ecce59b1ce26f77a5
+R 0ce0db05c5816c8a3f6d5399a0318468
+U drh
+Z 101b1825b326975007694adf2a0d837c
index 660ff794690b62b6ed5d82b7df3c8c7a3b6590ed..cf6d922bb8396452f21d1af675386ad767c4f392 100644 (file)
@@ -1 +1 @@
-874285e477dd9bd164e25ddb08b6b80daaa8cfd111b4180ecce59b1ce26f77a5
\ No newline at end of file
+6acbdba59e9df4313a6232d925a70390acdc43dfa380b4fba7bb8bd442d6e728
\ No newline at end of file
index 5a3908cda633ace6973ba8b99b04c4fb2d8ea37c..d66387d239b17be9c0f182a11742da3e07874550 100644 (file)
@@ -4415,10 +4415,8 @@ case OP_InsertInt: {
   int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
   const char *zDb;  /* database name - used by the update hook */
   Table *pTab;      /* Table structure - used by update and pre-update hooks */
-  int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
   BtreePayload x;   /* Payload to be inserted */
 
-  op = 0;
   pData = &aMem[pOp->p2];
   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
   assert( memIsValid(pData) );
@@ -4446,21 +4444,20 @@ case OP_InsertInt: {
     zDb = db->aDb[pC->iDb].zDbSName;
     pTab = pOp->p4.pTab;
     assert( (pOp->p5 & OPFLAG_ISNOOP) || HasRowid(pTab) );
-    op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
   }else{
-    pTab = 0; /* Not needed.  Silence a compiler warning. */
+    pTab = 0;
     zDb = 0;  /* Not needed.  Silence a compiler warning. */
   }
 
 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
   /* Invoke the pre-update hook, if any */
-  if( pOp->p4type==P4_TABLE ){
+  if( pTab ){
     if( db->xPreUpdateCallback && !(pOp->p5 & OPFLAG_ISUPDATE) ){
       sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey,pOp->p2);
     }
-    if( op && pTab->aCol==0 ){
-      assert( sqlite3_stricmp(pTab->zName, "sqlite_stat1")==0 );
-      op = 0;
+    if( db->xUpdateCallback==0 || pTab->aCol==0 ){
+      /* Prevent post-update hook from running in cases when it should not */
+      pTab = 0;
     }
   }
   if( pOp->p5 & OPFLAG_ISNOOP ) break;
@@ -4486,9 +4483,12 @@ case OP_InsertInt: {
 
   /* Invoke the update-hook if required. */
   if( rc ) goto abort_due_to_error;
-  if( db->xUpdateCallback && op ){
-    assert( pTab->aCol );
-    db->xUpdateCallback(db->pUpdateArg, op, zDb, pTab->zName, x.nKey);
+  if( pTab ){
+    assert( db->xUpdateCallback!=0 );
+    assert( pTab->aCol!=0 );
+    db->xUpdateCallback(db->pUpdateArg,
+           (pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT,
+           zDb, pTab->zName, x.nKey);
   }
   break;
 }