** 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"
** 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 && i<db->nDb );
- assert( db->aDb[i].pBt!=0 );
- pBt = db->aDb[i].pBt;
+ assert( pOp->p1>=0 && pOp->p1<db->nDb );
+ assert( db->aDb[pOp->p1].pBt!=0 );
+ pBt = db->aDb[pOp->p1].pBt;
assert( sqlite3BtreeIsInTrans(pBt) );
- assert( (p->btreeMask & (1<<i))!=0 );
+ assert( (p->btreeMask & (1<<pOp->p1))!=0 );
if( p->iStatement==0 ){
assert( db->nStatement>=0 && db->nSavepoint>=0 );
db->nStatement++;
** 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 && i<db->nDb );
- assert( (p->btreeMask & (1<<i))!=0 );
- pBt = db->aDb[i].pBt;
+ assert( pOp->p1>=0 && pOp->p1<db->nDb );
+ assert( (p->btreeMask & (1<<pOp->p1))!=0 );
+ pBt = db->aDb[pOp->p1].pBt;
if( pBt ){
rc = sqlite3BtreeBeginTrans(pBt, pOp->p2);
case OP_OpenWrite: {
int nField;
KeyInfo *pKeyInfo;
- int i;
int p2;
int iDb;
int wrFlag;
nField = 0;
pKeyInfo = 0;
- i = pOp->p1;
p2 = pOp->p2;
iDb = pOp->p3;
assert( iDb>=0 && iDb<db->nDb );
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);
}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);
** that created confusion with the whole virtual-table idea.
*/
case OP_OpenEphemeral: {
- int i;
VdbeCursor *pCx;
static const int openFlags =
SQLITE_OPEN_READWRITE |
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,
** 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;
** currently open, this instruction is a no-op.
*/
case OP_Close: {
- int i;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- sqlite3VdbeFreeCursor(p, p->apCsr[i]);
- p->apCsr[i] = 0;
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
+ p->apCsr[pOp->p1] = 0;
break;
}
case OP_SeekLe: /* jump, in3 */
case OP_SeekGe: /* jump, in3 */
case OP_SeekGt: { /* jump, in3 */
- int i;
int res;
int oc;
VdbeCursor *pC;
int nField;
i64 iKey; /* The rowid we are to seek to */
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
assert( pOp->p2!=0 );
- pC = p->apCsr[i];
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
if( pC->pCursor!=0 ){
oc = pOp->opcode;
** occur, no unnecessary I/O happens.
*/
case OP_Seek: { /* in2 */
- int i;
VdbeCursor *pC;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
if( ALWAYS(pC->pCursor!=0) ){
assert( pC->isTable );
** instruction.
*/
case OP_Sequence: { /* out2-prerelease */
- int i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- assert( p->apCsr[i]!=0 );
- pOut->u.i = p->apCsr[i]->seqCount++;
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ assert( p->apCsr[pOp->p1]!=0 );
+ pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
MemSetTypeFlag(pOut, MEM_Int);
break;
}
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;
pData = &p->aMem[pOp->p2];
pKey = &p->aMem[pOp->p3];
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( pC->pCursor!=0 || pC->pseudoTable );
assert( pKey->flags & MEM_Int );
** 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 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */
*/
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 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC->isTable || pOp->opcode==OP_RowKey );
assert( pC->isIndex || pOp->opcode==OP_RowData );
assert( pC!=0 );
** 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 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
if( pC->nullRow ){
/* Do nothing so that reg[P2] remains NULL */
** write a NULL.
*/
case OP_NullRow: {
- int i;
VdbeCursor *pC;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
pC->nullRow = 1;
pC->rowidIsValid = 0;
** to the following instruction.
*/
case OP_Last: { /* jump */
- int i;
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
pCrsr = pC->pCursor;
assert( pCrsr!=0 );
** to the following instruction.
*/
case OP_Rewind: { /* jump */
- int i;
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- pC = p->apCsr[i];
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
assert( pC!=0 );
if( (pCrsr = pC->pCursor)!=0 ){
rc = sqlite3BtreeFirst(pCrsr, &res);
** 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 && i<p->nCursor );
- assert( p->apCsr[i]!=0 );
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ 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 ){
** 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 && i<p->nCursor );
- assert( p->apCsr[i]!=0 );
- if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
+ assert( pC!=0 );
+ pCrsr = pC->pCursor;
+ if( pCrsr!=0 ){
int res;
UnpackedRecord r;
r.pKeyInfo = pC->pKeyInfo;
** See also: Rowid, MakeRecord.
*/
case OP_IdxRowid: { /* out2-prerelease */
- int i;
BtCursor *pCrsr;
VdbeCursor *pC;
i64 rowid;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- assert( p->apCsr[i]!=0 );
- if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ 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 );
*/
case OP_IdxLT: /* jump, in3 */
case OP_IdxGE: { /* jump, in3 */
- int i;
VdbeCursor *pC;
int res;
UnpackedRecord r;
- i = pOp->p1;
- assert( i>=0 && i<p->nCursor );
- assert( p->apCsr[i]!=0 );
- if( (pC = p->apCsr[i])->pCursor!=0 ){
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ 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 );