]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Simplifications to the OP_Halt opcode implementation.
authordrh <drh@noemail.net>
Sat, 30 Apr 2016 02:59:15 +0000 (02:59 +0000)
committerdrh <drh@noemail.net>
Sat, 30 Apr 2016 02:59:15 +0000 (02:59 +0000)
FossilOrigin-Name: daf4630f96f13133664908045e279da9d5a40bb5

manifest
manifest.uuid
src/vdbe.c

index 1bc788b248fc5247773bf3d2c9abefc34ba05301..c3be714871ad243c447e59e91fc849576f8c497f 100644 (file)
--- 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
index d973fd4f41612faec925edd435714fbfabc29a82..5bb7f4d874dc11b167ae07d2ce76757b5b50112e 100644 (file)
@@ -1 +1 @@
-614bb709d34e11488da88861243023cc5de4b409
\ No newline at end of file
+daf4630f96f13133664908045e279da9d5a40bb5
\ No newline at end of file
index 5fba14a5c351870216b6a5a2834501de72ef643a..cb977e08544efa3667fce27ed73c16c06e572a1e 100644 (file)
@@ -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 );