From: drh Date: Fri, 9 Dec 2011 17:27:51 +0000 (+0000) Subject: Take out the OP_JumpOnce opcode. Revert compound SELECT to use OP_IfNot, X-Git-Tag: mountain-lion~8^2~54^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ec86c724ac430e33fb2d707afd59aab1dcb86790;p=thirdparty%2Fsqlite.git Take out the OP_JumpOnce opcode. Revert compound SELECT to use OP_IfNot, which is the correct behavior. Mark trigger registers as initially invalid. FossilOrigin-Name: 6a9fb47d5060fe641915f5f99cc9265409a4583b --- diff --git a/manifest b/manifest index 2814c2eb42..4cca45f7b7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Previous\scheck-in\sbroke\sauto-increment.\s\sThis\scheck-in\sappears\sto\sfix\sit. -D 2011-12-09T16:59:19.303 +C Take\sout\sthe\sOP_JumpOnce\sopcode.\s\sRevert\scompound\sSELECT\sto\suse\sOP_IfNot,\nwhich\sis\sthe\scorrect\sbehavior.\s\sMark\strigger\sregisters\sas\sinitially\ninvalid. +D 2011-12-09T17:27:51.519 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5b4a3e12a850b021547e43daf886b25133b44c07 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -180,7 +180,7 @@ F src/printf.c 03104cbff6959ff45df69dc9060ba6212f60a869 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c 365ab1c870e38596d6869e76fb544fe6e4ffc809 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 -F src/select.c d1895ff59f2051ad55e9075bf093fd28bcd36a89 +F src/select.c fd3046fb39a1de8dce269e9b5ecbf58fe7e7e480 F src/shell.c 29812a900a780eb0f835c4bc65e216272689def8 F src/sqlite.h.in 57081d8e6b53ce29541d7437c93bce6087ac53b5 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477 @@ -239,7 +239,7 @@ F src/update.c d3076782c887c10e882996550345da9c4c9f9dea F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84 F src/util.c 01238e2b0f24a14779181dbf991fe02620a80e31 F src/vacuum.c 0c0ba2242355c6048d65e2b333abe0f7c06348fa -F src/vdbe.c 9fc8110b1f2c5285e53948ac59ab4d0e75f18d28 +F src/vdbe.c 029add0c5197a61db588824a58570547330b9d8f F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb F src/vdbeInt.h 23a9506c9ab31e7823d7257d1828d2d7843443a0 F src/vdbeapi.c 86189ebba2c49791d75eaa12929f3ce6527596bd @@ -978,7 +978,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P 521d72bdf67b4b1972331307345a18c231a6e1d6 -R 28ec5920c638a4a7052dc1caf48390ef +P 28ffd39c7162c8f7139711545122cffa257911dd +R 121bb37be8c24842afbf4add96953aee U drh -Z 3eb2c2f097e358392b3aefdceca7c178 +Z 11be617eddaa1f2d6fdfc985cd0a65fa diff --git a/manifest.uuid b/manifest.uuid index 9695c697d7..c01915d14d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -28ffd39c7162c8f7139711545122cffa257911dd \ No newline at end of file +6a9fb47d5060fe641915f5f99cc9265409a4583b \ No newline at end of file diff --git a/src/select.c b/src/select.c index 870db3f850..793b849b79 100644 --- a/src/select.c +++ b/src/select.c @@ -1947,12 +1947,13 @@ static int generateOutputSubroutine( */ if( regPrev ){ int j1, j2; - j1 = sqlite3VdbeAddOp1(v, OP_JumpOnce, pParse->nOnce++); + j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem, (char*)pKeyInfo, p4type); sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2); sqlite3VdbeJumpHere(v, j1); sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem); + sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev); } if( pParse->db->mallocFailed ) return 0; diff --git a/src/vdbe.c b/src/vdbe.c index 7f763cfe69..64ae54e3db 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2052,22 +2052,6 @@ case OP_Once: { /* jump */ break; } -/* Opcode: JumpOnce P1 P2 * * * -** -** Check if OP_Once flag P1 is clear. If so, set the flag and -** jump to instruction P2. Otherwise fall through. -** -** See also: Once -*/ -case OP_JumpOnce: { /* jump */ - assert( pOp->p1nOnceFlag ); - if( !p->aOnceFlag[pOp->p1] ){ - pc = pOp->p2-1; - p->aOnceFlag[pOp->p1] = 1; - } - break; -} - /* Opcode: If P1 P2 P3 * * ** ** Jump to P2 if the value in register P1 is true. The value @@ -5101,7 +5085,6 @@ case OP_Program: { /* jump */ pProgram = pOp->p4.pProgram; pRt = &aMem[pOp->p3]; - /*assert( memIsValid(pRt) );*/ assert( pProgram->nOp>0 ); /* If the p5 flag is clear, then recursive invocation of triggers is @@ -5166,7 +5149,7 @@ case OP_Program: { /* jump */ pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ - pMem->flags = MEM_Null; + pMem->flags = MEM_Invalid; pMem->db = db; } }else{ @@ -5278,7 +5261,7 @@ case OP_MemMax: { /* in2 */ }else{ pIn1 = &aMem[pOp->p1]; } - /*assert( memIsValid(pIn1) ); FIXME */ + assert( memIsValid(pIn1) ); sqlite3VdbeMemIntegerify(pIn1); pIn2 = &aMem[pOp->p2]; sqlite3VdbeMemIntegerify(pIn2);