From: drh Date: Mon, 22 Jun 2009 11:10:47 +0000 (+0000) Subject: More simplifications to vdbe.c. Remove a NEVER() from vdbe.c that is possible X-Git-Tag: cvs-to-fossil-cutover~176 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=653b82a516c3a830941c1d9d349b8a06bfcc6116;p=thirdparty%2Fsqlite.git More simplifications to vdbe.c. Remove a NEVER() from vdbe.c that is possible after all. (CVS 6796) FossilOrigin-Name: c8f009bd24cb4e4b5ce9fbfd8ab09921f19d41af --- diff --git a/manifest b/manifest index c069454670..ce7eee0994 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C If\san\sOOM\serror\soccurs\sjust\safter\sobtaining\sa\sshared\slock\son\sthe\sdatabase\sfile,\srelease\sthe\slock\sbefore\sreturning.\s(CVS\s6795) -D 2009-06-22T05:43:24 +C More\ssimplifications\sto\svdbe.c.\s\sRemove\sa\sNEVER()\sfrom\svdbe.c\sthat\sis\spossible\nafter\sall.\s(CVS\s6796) +D 2009-06-22T11:10:48 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 8b8fb7823264331210cddf103831816c286ba446 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -203,7 +203,7 @@ F src/update.c 6ae6c26adff8dc34532d578f66e6cfde04b5d177 F src/utf.c 9541d28f40441812c0b40f00334372a0542c00ff F src/util.c a7e981e032c3c9c0887d50d7e658a33cb355b43d F src/vacuum.c 0e14f371ea3326c6b8cfba257286d798cd20db59 -F src/vdbe.c 67ec344095e6d9d68292aec3be3d96295561b8d6 +F src/vdbe.c 1507638139808e854fd58b9112d65221244040d6 F src/vdbe.h 35a648bc3279a120da24f34d9a25213ec15daf8a F src/vdbeInt.h 7823eac611229163c6a5df0e9e0d54ffcda527e7 F src/vdbeapi.c 73bd1d2c57b953bc688d1d8c84b24c2084c2aec7 @@ -736,7 +736,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746 -P 16680f05bd169dfb1b4bf0eb082e69701f9b07ab -R 6e54a2a88699861ffa872d10b9c1ee9c -U danielk1977 -Z 3e419879a697596c75cae7156314a88e +P 971a9650f66f079630489c34e40003eee97d1683 +R 30c799203416212bb38dcdf20431687b +U drh +Z a2040a8c613ec65598b68da6e231fca8 diff --git a/manifest.uuid b/manifest.uuid index 271db0feef..10e29b40db 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -971a9650f66f079630489c34e40003eee97d1683 \ No newline at end of file +c8f009bd24cb4e4b5ce9fbfd8ab09921f19d41af \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 7b7815242b..6adf7a2db0 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.858 2009/06/22 00:55:31 drh Exp $ +** $Id: vdbe.c,v 1.859 2009/06/22 11:10:48 drh Exp $ */ #include "sqliteInt.h" #include "vdbeInt.h" @@ -2467,15 +2467,13 @@ case OP_Count: { /* out2-prerelease */ ** has an index of 1. */ case OP_Statement: { - int i; Btree *pBt; if( db->autoCommit==0 || db->activeVdbeCnt>1 ){ - i = pOp->p1; - assert( i>=0 && inDb ); - assert( db->aDb[i].pBt!=0 ); - pBt = db->aDb[i].pBt; + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( db->aDb[pOp->p1].pBt!=0 ); + pBt = db->aDb[pOp->p1].pBt; assert( sqlite3BtreeIsInTrans(pBt) ); - assert( (p->btreeMask & (1<btreeMask & (1<p1))!=0 ); if( p->iStatement==0 ){ assert( db->nStatement>=0 && db->nSavepoint>=0 ); db->nStatement++; @@ -2717,13 +2715,11 @@ case OP_AutoCommit: { ** If P2 is zero, then a read-lock is obtained on the database file. */ case OP_Transaction: { - int i; Btree *pBt; - i = pOp->p1; - assert( i>=0 && inDb ); - assert( (p->btreeMask & (1<aDb[i].pBt; + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( (p->btreeMask & (1<p1))!=0 ); + pBt = db->aDb[pOp->p1].pBt; if( pBt ){ rc = sqlite3BtreeBeginTrans(pBt, pOp->p2); @@ -2912,7 +2908,6 @@ case OP_OpenRead: case OP_OpenWrite: { int nField; KeyInfo *pKeyInfo; - int i; int p2; int iDb; int wrFlag; @@ -2923,7 +2918,6 @@ case OP_OpenWrite: { nField = 0; pKeyInfo = 0; - i = pOp->p1; p2 = pOp->p2; iDb = pOp->p3; assert( iDb>=0 && iDbnDb ); @@ -2945,12 +2939,11 @@ case OP_OpenWrite: { pIn2 = &p->aMem[p2]; sqlite3VdbeMemIntegerify(pIn2); p2 = (int)pIn2->u.i; - if( NEVER(p2<2) ) { + if( p2<2 ) { rc = SQLITE_CORRUPT_BKPT; goto abort_due_to_error; } } - assert( i>=0 ); if( pOp->p4type==P4_KEYINFO ){ pKeyInfo = pOp->p4.pKeyInfo; pKeyInfo->enc = ENC(p->db); @@ -2958,7 +2951,8 @@ case OP_OpenWrite: { }else if( pOp->p4type==P4_INT32 ){ nField = pOp->p4.i; } - pCur = allocateCursor(p, i, nField, iDb, 1); + assert( pOp->p1>=0 ); + pCur = allocateCursor(p, pOp->p1, nField, iDb, 1); if( pCur==0 ) goto no_mem; pCur->nullRow = 1; rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->pCursor); @@ -3025,7 +3019,6 @@ case OP_OpenWrite: { ** that created confusion with the whole virtual-table idea. */ case OP_OpenEphemeral: { - int i; VdbeCursor *pCx; static const int openFlags = SQLITE_OPEN_READWRITE | @@ -3034,9 +3027,8 @@ case OP_OpenEphemeral: { SQLITE_OPEN_DELETEONCLOSE | SQLITE_OPEN_TRANSIENT_DB; - i = pOp->p1; - assert( i>=0 ); - pCx = allocateCursor(p, i, pOp->p2, -1, 1); + assert( pOp->p1>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); if( pCx==0 ) goto no_mem; pCx->nullRow = 1; rc = sqlite3BtreeFactory(db, 0, 1, SQLITE_DEFAULT_TEMP_CACHE_SIZE, openFlags, @@ -3095,12 +3087,10 @@ case OP_OpenEphemeral: { ** the pseudo-table. */ case OP_OpenPseudo: { - int i; VdbeCursor *pCx; - i = pOp->p1; - assert( i>=0 ); - pCx = allocateCursor(p, i, pOp->p3, -1, 0); + assert( pOp->p1>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0); if( pCx==0 ) goto no_mem; pCx->nullRow = 1; pCx->pseudoTable = 1; @@ -3116,11 +3106,9 @@ case OP_OpenPseudo: { ** currently open, this instruction is a no-op. */ case OP_Close: { - int i; - i = pOp->p1; - assert( i>=0 && inCursor ); - sqlite3VdbeFreeCursor(p, p->apCsr[i]); - p->apCsr[i] = 0; + assert( pOp->p1>=0 && pOp->p1nCursor ); + sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]); + p->apCsr[pOp->p1] = 0; break; } @@ -3180,7 +3168,6 @@ case OP_SeekLt: /* jump, in3 */ case OP_SeekLe: /* jump, in3 */ case OP_SeekGe: /* jump, in3 */ case OP_SeekGt: { /* jump, in3 */ - int i; int res; int oc; VdbeCursor *pC; @@ -3188,10 +3175,9 @@ case OP_SeekGt: { /* jump, in3 */ int nField; i64 iKey; /* The rowid we are to seek to */ - i = pOp->p1; - assert( i>=0 && inCursor ); + assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p2!=0 ); - pC = p->apCsr[i]; + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); if( pC->pCursor!=0 ){ oc = pOp->opcode; @@ -3322,12 +3308,10 @@ case OP_SeekGt: { /* jump, in3 */ ** occur, no unnecessary I/O happens. */ case OP_Seek: { /* in2 */ - int i; VdbeCursor *pC; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); if( ALWAYS(pC->pCursor!=0) ){ assert( pC->isTable ); @@ -3554,10 +3538,9 @@ case OP_NotExists: { /* jump, in3 */ ** instruction. */ case OP_Sequence: { /* out2-prerelease */ - int i = pOp->p1; - assert( i>=0 && inCursor ); - assert( p->apCsr[i]!=0 ); - pOut->u.i = p->apCsr[i]->seqCount++; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( p->apCsr[pOp->p1]!=0 ); + pOut->u.i = p->apCsr[pOp->p1]->seqCount++; MemSetTypeFlag(pOut, MEM_Int); break; } @@ -3717,7 +3700,6 @@ case OP_Insert: { Mem *pData; Mem *pKey; i64 iKey; /* The integer ROWID or key for the record to be inserted */ - int i; VdbeCursor *pC; int nZero; int seekResult; @@ -3727,9 +3709,8 @@ case OP_Insert: { pData = &p->aMem[pOp->p2]; pKey = &p->aMem[pOp->p3]; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); assert( pC->pCursor!=0 || pC->pseudoTable ); assert( pKey->flags & MEM_Int ); @@ -3818,14 +3799,12 @@ case OP_Insert: { ** using OP_NotFound prior to invoking this opcode. */ case OP_Delete: { - int i; i64 iKey; VdbeCursor *pC; - i = pOp->p1; iKey = 0; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); assert( pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */ @@ -3892,18 +3871,16 @@ case OP_ResetCount: { */ case OP_RowKey: case OP_RowData: { - int i; VdbeCursor *pC; BtCursor *pCrsr; u32 n; i64 n64; - i = pOp->p1; pOut = &p->aMem[pOp->p2]; /* Note that RowKey and RowData are really exactly the same instruction */ - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC->isTable || pOp->opcode==OP_RowKey ); assert( pC->isIndex || pOp->opcode==OP_RowData ); assert( pC!=0 ); @@ -3951,15 +3928,13 @@ case OP_RowData: { ** one opcode now works for both table types. */ case OP_Rowid: { /* out2-prerelease */ - int i; VdbeCursor *pC; i64 v; sqlite3_vtab *pVtab; const sqlite3_module *pModule; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); if( pC->nullRow ){ /* Do nothing so that reg[P2] remains NULL */ @@ -4002,12 +3977,10 @@ case OP_Rowid: { /* out2-prerelease */ ** write a NULL. */ case OP_NullRow: { - int i; VdbeCursor *pC; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); pC->nullRow = 1; pC->rowidIsValid = 0; @@ -4026,14 +3999,12 @@ case OP_NullRow: { ** to the following instruction. */ case OP_Last: { /* jump */ - int i; VdbeCursor *pC; BtCursor *pCrsr; int res; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); pCrsr = pC->pCursor; assert( pCrsr!=0 ); @@ -4078,14 +4049,12 @@ case OP_Sort: { /* jump */ ** to the following instruction. */ case OP_Rewind: { /* jump */ - int i; VdbeCursor *pC; BtCursor *pCrsr; int res; - i = pOp->p1; - assert( i>=0 && inCursor ); - pC = p->apCsr[i]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); if( (pCrsr = pC->pCursor)!=0 ){ rc = sqlite3BtreeFirst(pCrsr, &res); @@ -4168,17 +4137,17 @@ case OP_Next: { /* jump */ ** for tables is OP_Insert. */ case OP_IdxInsert: { /* in2 */ - int i; VdbeCursor *pC; BtCursor *pCrsr; int nKey; const char *zKey; - i = pOp->p1; - assert( i>=0 && inCursor ); - assert( p->apCsr[i]!=0 ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); assert( pIn2->flags & MEM_Blob ); - if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){ + pCrsr = pC->pCursor; + if( pCrsr!=0 ){ assert( pC->isTable==0 ); rc = ExpandBlob(pIn2); if( rc==SQLITE_OK ){ @@ -4201,16 +4170,16 @@ case OP_IdxInsert: { /* in2 */ ** index opened by cursor P1. */ case OP_IdxDelete: { - int i; VdbeCursor *pC; BtCursor *pCrsr; - i = pOp->p1; assert( pOp->p3>0 ); assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 ); - assert( i>=0 && inCursor ); - assert( p->apCsr[i]!=0 ); - if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){ + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->pCursor; + if( pCrsr!=0 ){ int res; UnpackedRecord r; r.pKeyInfo = pC->pKeyInfo; @@ -4236,15 +4205,15 @@ case OP_IdxDelete: { ** See also: Rowid, MakeRecord. */ case OP_IdxRowid: { /* out2-prerelease */ - int i; BtCursor *pCrsr; VdbeCursor *pC; i64 rowid; - i = pOp->p1; - assert( i>=0 && inCursor ); - assert( p->apCsr[i]!=0 ); - if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){ + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->pCursor; + if( pCrsr!=0 ){ rc = sqlite3VdbeCursorMoveto(pC); if( rc ) goto abort_due_to_error; assert( pC->deferredMoveto==0 ); @@ -4289,15 +4258,14 @@ case OP_IdxRowid: { /* out2-prerelease */ */ case OP_IdxLT: /* jump, in3 */ case OP_IdxGE: { /* jump, in3 */ - int i; VdbeCursor *pC; int res; UnpackedRecord r; - i = pOp->p1; - assert( i>=0 && inCursor ); - assert( p->apCsr[i]!=0 ); - if( (pC = p->apCsr[i])->pCursor!=0 ){ + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + if( pC->pCursor!=0 ){ assert( pC->deferredMoveto==0 ); assert( pOp->p5==0 || pOp->p5==1 ); assert( pOp->p4type==P4_INT32 );