]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid compiler warnings and excess opcodes when SQLITE_ENABLE_PREUPDATE_HOOK sessions
authordrh <drh@noemail.net>
Wed, 30 Mar 2016 12:56:55 +0000 (12:56 +0000)
committerdrh <drh@noemail.net>
Wed, 30 Mar 2016 12:56:55 +0000 (12:56 +0000)
is not used.  Fix the EXPLAIN output for P4_TABLE opcodes.

FossilOrigin-Name: 5ab46d760dff327491703478d6d7c7c44a0147ca

manifest
manifest.uuid
src/update.c
src/vdbe.c
src/vdbeInt.h
src/vdbeaux.c

index a2911f768de3b8d4a6638f0ae4779b12682e7caa..bb8ac6846d64c43a7f31476c6a40d7d72eb8d2cc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\schanges\sfor\s3.12.0.
-D 2016-03-29T10:19:29.541
+C Avoid\scompiler\swarnings\sand\sexcess\sopcodes\swhen\sSQLITE_ENABLE_PREUPDATE_HOOK\nis\snot\sused.\s\sFix\sthe\sEXPLAIN\soutput\sfor\sP4_TABLE\sopcodes.
+D 2016-03-30T12:56:55.161
 F Makefile.in e812bb732d7af01baa09f1278bd4f4a2e3a09449
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e6ee58b849c116d5554024f524cbf61f064f6f01
@@ -435,15 +435,15 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
 F src/tokenize.c 3d338cdd00d916ce8a05c397001d64ed58e6fe1c
 F src/treeview.c e4b41a37530a191579d3c53142cc44ee2eb99373
 F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
-F src/update.c 14c6916d0194a7f25ad429292f4831b8c31e93d9
+F src/update.c 3e67ab3c0814635f355fb1f8ab010a2b9e016e7d
 F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
 F src/util.c 8873d696c9ccc4206058c402e09e101f1b81561a
 F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52
-F src/vdbe.c da8f4d04fb134d7e64fd34d519b0eba4883ed779
+F src/vdbe.c 04e0606bc0505924036a974759703af6a3664904
 F src/vdbe.h c16ba943d407baa1c7085eefea73a063fc631863
-F src/vdbeInt.h 9b704336a69f62ba189eafb06a46171e3463d27b
+F src/vdbeInt.h ddb157974436d87652de7dc641f7191496d9a8cd
 F src/vdbeapi.c ba85b78fe08dc4a9ce747e62c89a2b4a4547e74c
-F src/vdbeaux.c 03b2a622bf7714153bf06f9a6789e94aad9a5f89
+F src/vdbeaux.c fa06ba5441714160ab5f64422660ee286968672f
 F src/vdbeblob.c c9f2f494b911c6fa34efd9803f0a10807da80f77
 F src/vdbemem.c 5cfef60e60e19cab6275d1b975bf4c791d575beb
 F src/vdbesort.c 307460bfa4de4d1c3901fcd42089159131e34062
@@ -1480,7 +1480,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 beb5ea1439995fb8ab112451a8ffcc08fe42d0c4 e9bb4cf40f4971974a74468ef922bdee481c988b
-R 491d941731d06e3edceeb8f36a9265ac
+P ed22eb653f2809446ace6a27e7ea3926ac6db30c
+R 5630f9e5708bbc437f2437f3c1df072c
 U drh
-Z 3f9fc483108428866f896f452f439d76
+Z eacbad43019a9bff0f7b72fbe90e323f
index b49c17cf93941feea7d978c6ac464779bbd2f42c..a44439793ab41e539998262f1afbb480da9d9816 100644 (file)
@@ -1 +1 @@
-ed22eb653f2809446ace6a27e7ea3926ac6db30c
\ No newline at end of file
+5ab46d760dff327491703478d6d7c7c44a0147ca
\ No newline at end of file
index c147eaaad925215e6182d13a8ce0ff67fb637744..7b38c5bcc515c84dd54333341063ad6714198afa 100644 (file)
@@ -601,6 +601,7 @@ void sqlite3Update(
     ** is the column index supplied by the user.
     */
     assert( regNew==regNewRowid+1 );
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
     sqlite3VdbeAddOp3(v, OP_Delete, iDataCur,
         OPFLAG_ISUPDATE | ((hasFK || chngKey || pPk!=0) ? 0 : OPFLAG_ISNOOP),
         regNewRowid
@@ -608,6 +609,11 @@ void sqlite3Update(
     if( !pParse->nested ){
       sqlite3VdbeChangeP4(v, -1, (char*)pTab, P4_TABLE);
     }
+#else
+    if( hasFK || chngKey || pPk!=0 ){
+      sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, 0);
+    }
+#endif
     if( bReplace || chngKey ){
       sqlite3VdbeJumpHere(v, addr1);
     }
index 18e955c0ff5d94463214d18aa6726cfa21aa757b..787d2b7b48bcd3e1d236d8908543268f8ebfe5c7 100644 (file)
@@ -91,9 +91,9 @@ static void updateMaxBlobsize(Mem *p){
 ** hook are enabled for database connect DB.
 */
 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
-# define HAS_UPDATE_HOOK(DB)   ((DB)->xPreUpdateCallback||(DB)->xUpdateCallback)
+# define HAS_UPDATE_HOOK(DB) ((DB)->xPreUpdateCallback||(DB)->xUpdateCallback)
 #else
-# define HAS_UPDATE_HOOK(DB)  ((DB)->xUpdateCallback)
+# define HAS_UPDATE_HOOK(DB) ((DB)->xUpdateCallback)
 #endif
 
 /*
@@ -4287,8 +4287,9 @@ 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 = 0;       /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
+  int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
 
+  op = 0;
   pData = &aMem[pOp->p2];
   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
   assert( memIsValid(pData) );
@@ -4317,6 +4318,9 @@ case OP_InsertInt: {
     zDb = db->aDb[pC->iDb].zName;
     pTab = pOp->p4.pTab;
     op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
+  }else{
+    pTab = 0; /* Not needed.  Silence a comiler warning. */
+    zDb = 0;  /* Not needed.  Silence a compiler warning. */
   }
 
 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
@@ -4431,6 +4435,9 @@ case OP_Delete: {
     if( pOp->p5 && pC->isTable ){
       sqlite3BtreeKeySize(pC->uc.pCursor, &pC->movetoTarget);
     }
+  }else{
+    zDb = 0;   /* Not needed.  Silence a compiler warning. */
+    pTab = 0;  /* Not needed.  Silence a compiler warning. */
   }
 
 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
index 1218009d0a89c57f94754937634507efb07bfbfb..61561e9dce2b991a1fc7b3ea969cfc21a36ea66a 100644 (file)
@@ -506,8 +506,9 @@ int sqlite3VdbeMemClearAndResize(Mem *pMem, int n);
 int sqlite3VdbeCloseStatement(Vdbe *, int);
 void sqlite3VdbeFrameDelete(VdbeFrame*);
 int sqlite3VdbeFrameRestore(VdbeFrame *);
-void sqlite3VdbePreUpdateHook(
-    Vdbe *, VdbeCursor *, int, const char*, Table *, i64, int);
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+void sqlite3VdbePreUpdateHook(Vdbe*,VdbeCursor*,int,const char*,Table*,i64,int);
+#endif
 int sqlite3VdbeTransferError(Vdbe *p);
 
 int sqlite3VdbeSorterInit(sqlite3 *, int, VdbeCursor *);
index 932821f3832c004665101cc2976c292635567bf3..48d1b5ae15493c6d0641dfbf7a83914240bc3672 100644 (file)
@@ -1318,6 +1318,10 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
       zTemp[0] = 0;
       break;
     }
+    case P4_TABLE: {
+      sqlite3XPrintf(&x, "%s", pOp->p4.pTab->zName);
+      break;
+    }
     default: {
       zP4 = pOp->p4.z;
       if( zP4==0 ){
@@ -4509,7 +4513,9 @@ static void vdbeFreeUnpacked(sqlite3 *db, UnpackedRecord *p){
     sqlite3DbFree(db, p);
   }
 }
+#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
 
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
 /*
 ** Invoke the pre-update hook. If this is an UPDATE or DELETE pre-update call,
 ** then cursor passed as the second argument should point to the row about