From: drh Date: Wed, 30 Mar 2016 12:56:55 +0000 (+0000) Subject: Avoid compiler warnings and excess opcodes when SQLITE_ENABLE_PREUPDATE_HOOK X-Git-Tag: version-3.13.0~148^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fsessions;p=thirdparty%2Fsqlite.git Avoid compiler warnings and excess opcodes when SQLITE_ENABLE_PREUPDATE_HOOK is not used. Fix the EXPLAIN output for P4_TABLE opcodes. FossilOrigin-Name: 5ab46d760dff327491703478d6d7c7c44a0147ca --- diff --git a/manifest b/manifest index a2911f768d..bb8ac6846d 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index b49c17cf93..a44439793a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ed22eb653f2809446ace6a27e7ea3926ac6db30c \ No newline at end of file +5ab46d760dff327491703478d6d7c7c44a0147ca \ No newline at end of file diff --git a/src/update.c b/src/update.c index c147eaaad9..7b38c5bcc5 100644 --- a/src/update.c +++ b/src/update.c @@ -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); } diff --git a/src/vdbe.c b/src/vdbe.c index 18e955c0ff..787d2b7b48 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -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->p1nCursor ); 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 diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 1218009d0a..61561e9dce 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -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 *); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 932821f383..48d1b5ae15 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -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