From: drh Date: Sat, 30 Apr 2016 02:59:15 +0000 (+0000) Subject: Simplifications to the OP_Halt opcode implementation. X-Git-Tag: version-3.13.0~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=99f5de771faee5c3bcf2ab8758e821220edf4867;p=thirdparty%2Fsqlite.git Simplifications to the OP_Halt opcode implementation. FossilOrigin-Name: daf4630f96f13133664908045e279da9d5a40bb5 --- diff --git a/manifest b/manifest index 1bc788b248..c3be714871 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\stemporary\sdirectory\ssearch\salgorithm\sfor\sunix\sso\sthat\sit\sfails\ngracefully\seven\sif\sall\scandidate\sdirectories\sare\sinaccessible.\s\sThis\sfixes\na\sbug\sthat\swas\sintroduced\sby\scheck-in\s[9b8fec60d8e]. -D 2016-04-29T20:30:56.115 +C Simplifications\sto\sthe\sOP_Halt\sopcode\simplementation. +D 2016-04-30T02:59:15.737 F Makefile.in 9e816d0323e418fbc0f8b2c05fc14e0b3763d9e8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836 @@ -443,7 +443,7 @@ F src/update.c 3e67ab3c0814635f355fb1f8ab010a2b9e016e7d F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c F src/util.c 810ec3f22e2d1b62e66c30fe3621ebdedd23584d F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52 -F src/vdbe.c 08fbea00a7f7f723973093c5f5bf7c40c025e2b3 +F src/vdbe.c b2067cd06a0f30a6dea865f93c690df15e0314a8 F src/vdbe.h 5591b5add447096e31288b5a0a78ec5d7b5c5170 F src/vdbeInt.h ddb157974436d87652de7dc641f7191496d9a8cd F src/vdbeapi.c ba85b78fe08dc4a9ce747e62c89a2b4a4547e74c @@ -1486,7 +1486,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 9d0a5ae00273686ea35b43bc2ffaa8775c176363 -R a933a7d712b512086a1e3835745ceb3a +P 614bb709d34e11488da88861243023cc5de4b409 +R b15a9da5ab52f0ada1f3249ae1287c3e U drh -Z 98ad5e2467f45a0f2dba904fa48c29d6 +Z 574106fd28e4252d413254df9dee5be2 diff --git a/manifest.uuid b/manifest.uuid index d973fd4f41..5bb7f4d874 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -614bb709d34e11488da88861243023cc5de4b409 \ No newline at end of file +daf4630f96f13133664908045e279da9d5a40bb5 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 5fba14a5c3..cb977e0854 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -949,8 +949,6 @@ case OP_HaltIfNull: { /* in3 */ ** is the same as executing Halt. */ case OP_Halt: { - const char *zType; - const char *zLogFmt; VdbeFrame *pFrame; int pcx; @@ -979,34 +977,28 @@ case OP_Halt: { p->rc = pOp->p1; p->errorAction = (u8)pOp->p2; p->pc = pcx; + assert( pOp->p5>=0 && pOp->p5<=4 ); if( p->rc ){ if( pOp->p5 ){ static const char * const azType[] = { "NOT NULL", "UNIQUE", "CHECK", "FOREIGN KEY" }; - assert( pOp->p5>=1 && pOp->p5<=4 ); testcase( pOp->p5==1 ); testcase( pOp->p5==2 ); testcase( pOp->p5==3 ); testcase( pOp->p5==4 ); - zType = azType[pOp->p5-1]; + sqlite3VdbeError(p, "%s constraint failed", azType[pOp->p5-1]); + if( pOp->p4.z ){ + p->zErrMsg = sqlite3MPrintf(db, "%z: %s", p->zErrMsg, pOp->p4.z); + } }else{ - zType = 0; - } - assert( zType!=0 || pOp->p4.z!=0 ); - zLogFmt = "abort at %d in [%s]: %s"; - if( zType && pOp->p4.z ){ - sqlite3VdbeError(p, "%s constraint failed: %s", zType, pOp->p4.z); - }else if( pOp->p4.z ){ sqlite3VdbeError(p, "%s", pOp->p4.z); - }else{ - sqlite3VdbeError(p, "%s constraint failed", zType); } - sqlite3_log(pOp->p1, zLogFmt, pcx, p->zSql, p->zErrMsg); + sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pcx, p->zSql, p->zErrMsg); } rc = sqlite3VdbeHalt(p); assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR ); if( rc==SQLITE_BUSY ){ - p->rc = rc = SQLITE_BUSY; + p->rc = SQLITE_BUSY; }else{ assert( rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ); assert( rc==SQLITE_OK || db->nDeferredCons>0 || db->nDeferredImmCons>0 );