diff options
Diffstat (limited to 'src/where.c')
-rw-r--r-- | src/where.c | 271 |
1 files changed, 137 insertions, 134 deletions
diff --git a/src/where.c b/src/where.c index 34195c651..f585eceec 100644 --- a/src/where.c +++ b/src/where.c @@ -12,7 +12,7 @@ ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. ** -** $Id: where.c,v 1.89 2004/02/22 20:05:02 drh Exp $ +** $Id: where.c,v 1.90 2004/05/08 08:23:47 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -113,9 +113,9 @@ static int getMask(ExprMaskSet *pMaskSet, int iCursor){ ** tree. ** ** In order for this routine to work, the calling function must have -** previously invoked sqliteExprResolveIds() on the expression. See +** previously invoked sqlite3ExprResolveIds() on the expression. See ** the header comment on that routine for additional information. -** The sqliteExprResolveIds() routines looks for column names and +** The sqlite3ExprResolveIds() routines looks for column names and ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to ** the VDBE cursor number of the table. */ @@ -273,7 +273,7 @@ static Index *findSortingIndex( ** Generate the beginning of the loop used for WHERE clause processing. ** The return value is a pointer to an (opaque) structure that contains ** information needed to terminate the loop. Later, the calling routine -** should invoke sqliteWhereEnd() with the return value of this function +** should invoke sqlite3WhereEnd() with the return value of this function ** in order to complete the WHERE clause processing. ** ** If an error occurs, this routine returns NULL. @@ -288,17 +288,17 @@ static Index *findSortingIndex( ** Then the code generated is conceptually like the following: ** ** foreach row1 in t1 do \ Code generated -** foreach row2 in t2 do |-- by sqliteWhereBegin() +** foreach row2 in t2 do |-- by sqlite3WhereBegin() ** foreach row3 in t3 do / ** ... ** end \ Code generated -** end |-- by sqliteWhereEnd() +** end |-- by sqlite3WhereEnd() ** end / ** ** There are Btree cursors associated with each table. t1 uses cursor ** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor. ** And so forth. This routine generates code to open those VDBE cursors -** and sqliteWhereEnd() generates the code to close them. +** and sqlite3WhereEnd() generates the code to close them. ** ** If the WHERE clause is empty, the foreach loops must each scan their ** entire tables. Thus a three-way join is an O(N^3) operation. But if @@ -346,7 +346,7 @@ static Index *findSortingIndex( ** If the where clause loops cannot be arranged to provide the correct ** output order, then the *ppOrderBy is unchanged. */ -WhereInfo *sqliteWhereBegin( +WhereInfo *sqlite3WhereBegin( Parse *pParse, /* The parser context */ SrcList *pTabList, /* A list of all tables to be scanned */ Expr *pWhere, /* The WHERE clause */ @@ -380,7 +380,7 @@ WhereInfo *sqliteWhereBegin( memset(aExpr, 0, sizeof(aExpr)); nExpr = exprSplit(ARRAYSIZE(aExpr), aExpr, pWhere); if( nExpr==ARRAYSIZE(aExpr) ){ - sqliteErrorMsg(pParse, "WHERE clause too complex - no more " + sqlite3ErrorMsg(pParse, "WHERE clause too complex - no more " "than %d terms allowed", (int)ARRAYSIZE(aExpr)-1); return 0; } @@ -396,13 +396,13 @@ WhereInfo *sqliteWhereBegin( pWInfo->pParse = pParse; pWInfo->pTabList = pTabList; pWInfo->peakNTab = pWInfo->savedNTab = pParse->nTab; - pWInfo->iBreak = sqliteVdbeMakeLabel(v); + pWInfo->iBreak = sqlite3VdbeMakeLabel(v); /* Special case: a WHERE clause that is constant. Evaluate the ** expression and either jump over all of the code or fall thru. */ - if( pWhere && (pTabList->nSrc==0 || sqliteExprIsConstant(pWhere)) ){ - sqliteExprIfFalse(pParse, pWhere, pWInfo->iBreak, 1); + if( pWhere && (pTabList->nSrc==0 || sqlite3ExprIsConstant(pWhere)) ){ + sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, 1); pWhere = 0; } @@ -673,13 +673,13 @@ WhereInfo *sqliteWhereBegin( pTab = pTabList->a[i].pTab; if( pTab->isTransient || pTab->pSelect ) continue; - sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0); - sqliteVdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum, + sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); + sqlite3VdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum, pTab->zName, P3_STATIC); - sqliteCodeVerifySchema(pParse, pTab->iDb); + sqlite3CodeVerifySchema(pParse, pTab->iDb); if( (pIx = pWInfo->a[i].pIdx)!=0 ){ - sqliteVdbeAddOp(v, OP_Integer, pIx->iDb, 0); - sqliteVdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0); + sqlite3VdbeAddOp(v, OP_Integer, pIx->iDb, 0); + sqlite3VdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0); } } @@ -699,8 +699,8 @@ WhereInfo *sqliteWhereBegin( if( i>0 && (pTabList->a[i-1].jointype & JT_LEFT)!=0 ){ if( !pParse->nMem ) pParse->nMem++; pLevel->iLeftJoin = pParse->nMem++; - sqliteVdbeAddOp(v, OP_String, 0, 0); - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); + sqlite3VdbeAddOp(v, OP_String, 0, 0); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); } pIdx = pLevel->pIdx; @@ -715,32 +715,32 @@ WhereInfo *sqliteWhereBegin( assert( k<nExpr ); assert( aExpr[k].p!=0 ); assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur ); - brk = pLevel->brk = sqliteVdbeMakeLabel(v); + brk = pLevel->brk = sqlite3VdbeMakeLabel(v); if( aExpr[k].idxLeft==iCur ){ Expr *pX = aExpr[k].p; if( pX->op!=TK_IN ){ - sqliteExprCode(pParse, aExpr[k].p->pRight); + sqlite3ExprCode(pParse, aExpr[k].p->pRight); }else if( pX->pList ){ - sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk); + sqlite3VdbeAddOp(v, OP_SetFirst, pX->iTable, brk); pLevel->inOp = OP_SetNext; pLevel->inP1 = pX->iTable; - pLevel->inP2 = sqliteVdbeCurrentAddr(v); + pLevel->inP2 = sqlite3VdbeCurrentAddr(v); }else{ assert( pX->pSelect ); - sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk); - sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1); - pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0); + sqlite3VdbeAddOp(v, OP_Rewind, pX->iTable, brk); + sqlite3VdbeAddOp(v, OP_KeyAsData, pX->iTable, 1); + pLevel->inP2 = sqlite3VdbeAddOp(v, OP_FullKey, pX->iTable, 0); pLevel->inOp = OP_Next; pLevel->inP1 = pX->iTable; } }else{ - sqliteExprCode(pParse, aExpr[k].p->pLeft); + sqlite3ExprCode(pParse, aExpr[k].p->pLeft); } aExpr[k].p = 0; - cont = pLevel->cont = sqliteVdbeMakeLabel(v); - sqliteVdbeAddOp(v, OP_MustBeInt, 1, brk); + cont = pLevel->cont = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp(v, OP_MustBeInt, 1, brk); haveKey = 0; - sqliteVdbeAddOp(v, OP_NotExists, iCur, brk); + sqlite3VdbeAddOp(v, OP_NotExists, iCur, brk); pLevel->op = OP_Noop; }else if( pIdx!=0 && pLevel->score>0 && pLevel->score%4==0 ){ /* Case 2: There is an index and all terms of the WHERE clause that @@ -749,7 +749,7 @@ WhereInfo *sqliteWhereBegin( int start; int testOp; int nColumn = (pLevel->score+4)/8; - brk = pLevel->brk = sqliteVdbeMakeLabel(v); + brk = pLevel->brk = sqlite3VdbeMakeLabel(v); for(j=0; j<nColumn; j++){ for(k=0; k<nExpr; k++){ Expr *pX = aExpr[k].p; @@ -759,21 +759,21 @@ WhereInfo *sqliteWhereBegin( && pX->pLeft->iColumn==pIdx->aiColumn[j] ){ if( pX->op==TK_EQ ){ - sqliteExprCode(pParse, pX->pRight); + sqlite3ExprCode(pParse, pX->pRight); aExpr[k].p = 0; break; } if( pX->op==TK_IN && nColumn==1 ){ if( pX->pList ){ - sqliteVdbeAddOp(v, OP_SetFirst, pX->iTable, brk); + sqlite3VdbeAddOp(v, OP_SetFirst, pX->iTable, brk); pLevel->inOp = OP_SetNext; pLevel->inP1 = pX->iTable; - pLevel->inP2 = sqliteVdbeCurrentAddr(v); + pLevel->inP2 = sqlite3VdbeCurrentAddr(v); }else{ assert( pX->pSelect ); - sqliteVdbeAddOp(v, OP_Rewind, pX->iTable, brk); - sqliteVdbeAddOp(v, OP_KeyAsData, pX->iTable, 1); - pLevel->inP2 = sqliteVdbeAddOp(v, OP_FullKey, pX->iTable, 0); + sqlite3VdbeAddOp(v, OP_Rewind, pX->iTable, brk); + sqlite3VdbeAddOp(v, OP_KeyAsData, pX->iTable, 1); + pLevel->inP2 = sqlite3VdbeAddOp(v, OP_FullKey, pX->iTable, 0); pLevel->inOp = OP_Next; pLevel->inP1 = pX->iTable; } @@ -786,49 +786,49 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft && aExpr[k].p->pRight->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, aExpr[k].p->pLeft); + sqlite3ExprCode(pParse, aExpr[k].p->pLeft); aExpr[k].p = 0; break; } } } pLevel->iMem = pParse->nMem++; - cont = pLevel->cont = sqliteVdbeMakeLabel(v); - sqliteVdbeAddOp(v, OP_NotNull, -nColumn, sqliteVdbeCurrentAddr(v)+3); - sqliteVdbeAddOp(v, OP_Pop, nColumn, 0); - sqliteVdbeAddOp(v, OP_Goto, 0, brk); - sqliteVdbeAddOp(v, OP_MakeKey, nColumn, 0); - sqliteAddIdxKeyType(v, pIdx); + cont = pLevel->cont = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp(v, OP_NotNull, -nColumn, sqlite3VdbeCurrentAddr(v)+3); + sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0); + sqlite3VdbeAddOp(v, OP_Goto, 0, brk); + sqlite3VdbeAddOp(v, OP_MakeKey, nColumn, 0); + sqlite3AddIdxKeyType(v, pIdx); if( nColumn==pIdx->nColumn || pLevel->bRev ){ - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 0); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 0); testOp = OP_IdxGT; }else{ - sqliteVdbeAddOp(v, OP_Dup, 0, 0); - sqliteVdbeAddOp(v, OP_IncrKey, 0, 0); - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); + sqlite3VdbeAddOp(v, OP_Dup, 0, 0); + sqlite3VdbeAddOp(v, OP_IncrKey, 0, 0); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); testOp = OP_IdxGE; } if( pLevel->bRev ){ /* Scan in reverse order */ - sqliteVdbeAddOp(v, OP_IncrKey, 0, 0); - sqliteVdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk); - start = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); - sqliteVdbeAddOp(v, OP_IdxLT, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_IncrKey, 0, 0); + sqlite3VdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk); + start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); + sqlite3VdbeAddOp(v, OP_IdxLT, pLevel->iCur, brk); pLevel->op = OP_Prev; }else{ /* Scan in the forward order */ - sqliteVdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk); - start = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); - sqliteVdbeAddOp(v, testOp, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk); + start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); + sqlite3VdbeAddOp(v, testOp, pLevel->iCur, brk); pLevel->op = OP_Next; } - sqliteVdbeAddOp(v, OP_RowKey, pLevel->iCur, 0); - sqliteVdbeAddOp(v, OP_IdxIsNull, nColumn, cont); - sqliteVdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_RowKey, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_IdxIsNull, nColumn, cont); + sqlite3VdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0); if( i==pTabList->nSrc-1 && pushKey ){ haveKey = 1; }else{ - sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0); + sqlite3VdbeAddOp(v, OP_MoveTo, iCur, 0); haveKey = 0; } pLevel->p1 = pLevel->iCur; @@ -839,24 +839,24 @@ WhereInfo *sqliteWhereBegin( int testOp = OP_Noop; int start; - brk = pLevel->brk = sqliteVdbeMakeLabel(v); - cont = pLevel->cont = sqliteVdbeMakeLabel(v); + brk = pLevel->brk = sqlite3VdbeMakeLabel(v); + cont = pLevel->cont = sqlite3VdbeMakeLabel(v); if( iDirectGt[i]>=0 ){ k = iDirectGt[i]; assert( k<nExpr ); assert( aExpr[k].p!=0 ); assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur ); if( aExpr[k].idxLeft==iCur ){ - sqliteExprCode(pParse, aExpr[k].p->pRight); + sqlite3ExprCode(pParse, aExpr[k].p->pRight); }else{ - sqliteExprCode(pParse, aExpr[k].p->pLeft); + sqlite3ExprCode(pParse, aExpr[k].p->pLeft); } - sqliteVdbeAddOp(v, OP_ForceInt, + sqlite3VdbeAddOp(v, OP_ForceInt, aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT, brk); - sqliteVdbeAddOp(v, OP_MoveTo, iCur, brk); + sqlite3VdbeAddOp(v, OP_MoveTo, iCur, brk); aExpr[k].p = 0; }else{ - sqliteVdbeAddOp(v, OP_Rewind, iCur, brk); + sqlite3VdbeAddOp(v, OP_Rewind, iCur, brk); } if( iDirectLt[i]>=0 ){ k = iDirectLt[i]; @@ -864,13 +864,13 @@ WhereInfo *sqliteWhereBegin( assert( aExpr[k].p!=0 ); assert( aExpr[k].idxLeft==iCur || aExpr[k].idxRight==iCur ); if( aExpr[k].idxLeft==iCur ){ - sqliteExprCode(pParse, aExpr[k].p->pRight); + sqlite3ExprCode(pParse, aExpr[k].p->pRight); }else{ - sqliteExprCode(pParse, aExpr[k].p->pLeft); + sqlite3ExprCode(pParse, aExpr[k].p->pLeft); } - /* sqliteVdbeAddOp(v, OP_MustBeInt, 0, sqliteVdbeCurrentAddr(v)+1); */ + /* sqlite3VdbeAddOp(v, OP_MustBeInt, 0, sqlite3VdbeCurrentAddr(v)+1); */ pLevel->iMem = pParse->nMem++; - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); if( aExpr[k].p->op==TK_LT || aExpr[k].p->op==TK_GT ){ testOp = OP_Ge; }else{ @@ -878,14 +878,14 @@ WhereInfo *sqliteWhereBegin( } aExpr[k].p = 0; } - start = sqliteVdbeCurrentAddr(v); + start = sqlite3VdbeCurrentAddr(v); pLevel->op = OP_Next; pLevel->p1 = iCur; pLevel->p2 = start; if( testOp!=OP_Noop ){ - sqliteVdbeAddOp(v, OP_Recno, iCur, 0); - sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); - sqliteVdbeAddOp(v, testOp, 0, brk); + sqlite3VdbeAddOp(v, OP_Recno, iCur, 0); + sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); + sqlite3VdbeAddOp(v, testOp, 0, brk); } haveKey = 0; }else if( pIdx==0 ){ @@ -894,10 +894,10 @@ WhereInfo *sqliteWhereBegin( */ int start; - brk = pLevel->brk = sqliteVdbeMakeLabel(v); - cont = pLevel->cont = sqliteVdbeMakeLabel(v); - sqliteVdbeAddOp(v, OP_Rewind, iCur, brk); - start = sqliteVdbeCurrentAddr(v); + brk = pLevel->brk = sqlite3VdbeMakeLabel(v); + cont = pLevel->cont = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp(v, OP_Rewind, iCur, brk); + start = sqlite3VdbeCurrentAddr(v); pLevel->op = OP_Next; pLevel->p1 = iCur; pLevel->p2 = start; @@ -930,7 +930,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight && aExpr[k].p->pLeft->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, aExpr[k].p->pRight); + sqlite3ExprCode(pParse, aExpr[k].p->pRight); aExpr[k].p = 0; break; } @@ -939,7 +939,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft && aExpr[k].p->pRight->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, aExpr[k].p->pLeft); + sqlite3ExprCode(pParse, aExpr[k].p->pLeft); aExpr[k].p = 0; break; } @@ -951,13 +951,13 @@ WhereInfo *sqliteWhereBegin( ** start key. */ for(j=0; j<nEqColumn; j++){ - sqliteVdbeAddOp(v, OP_Dup, nEqColumn-1, 0); + sqlite3VdbeAddOp(v, OP_Dup, nEqColumn-1, 0); } /* Labels for the beginning and end of the loop */ - cont = pLevel->cont = sqliteVdbeMakeLabel(v); - brk = pLevel->brk = sqliteVdbeMakeLabel(v); + cont = pLevel->cont = sqlite3VdbeMakeLabel(v); + brk = pLevel->brk = sqlite3VdbeMakeLabel(v); /* Generate the termination key. This is the key value that ** will end the search. There is no termination key if there @@ -975,7 +975,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight && pExpr->pLeft->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, pExpr->pRight); + sqlite3ExprCode(pParse, pExpr->pRight); leFlag = pExpr->op==TK_LE; aExpr[k].p = 0; break; @@ -985,7 +985,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft && pExpr->pRight->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, pExpr->pLeft); + sqlite3ExprCode(pParse, pExpr->pLeft); leFlag = pExpr->op==TK_GE; aExpr[k].p = 0; break; @@ -999,21 +999,21 @@ WhereInfo *sqliteWhereBegin( if( testOp!=OP_Noop ){ int nCol = nEqColumn + (score & 1); pLevel->iMem = pParse->nMem++; - sqliteVdbeAddOp(v, OP_NotNull, -nCol, sqliteVdbeCurrentAddr(v)+3); - sqliteVdbeAddOp(v, OP_Pop, nCol, 0); - sqliteVdbeAddOp(v, OP_Goto, 0, brk); - sqliteVdbeAddOp(v, OP_MakeKey, nCol, 0); - sqliteAddIdxKeyType(v, pIdx); + sqlite3VdbeAddOp(v, OP_NotNull, -nCol, sqlite3VdbeCurrentAddr(v)+3); + sqlite3VdbeAddOp(v, OP_Pop, nCol, 0); + sqlite3VdbeAddOp(v, OP_Goto, 0, brk); + sqlite3VdbeAddOp(v, OP_MakeKey, nCol, 0); + sqlite3AddIdxKeyType(v, pIdx); if( leFlag ){ - sqliteVdbeAddOp(v, OP_IncrKey, 0, 0); + sqlite3VdbeAddOp(v, OP_IncrKey, 0, 0); } if( pLevel->bRev ){ - sqliteVdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_MoveLt, pLevel->iCur, brk); }else{ - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); } }else if( pLevel->bRev ){ - sqliteVdbeAddOp(v, OP_Last, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_Last, pLevel->iCur, brk); } /* Generate the start key. This is the key that defines the lower @@ -1034,7 +1034,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqRight & loopMask)==aExpr[k].prereqRight && pExpr->pLeft->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, pExpr->pRight); + sqlite3ExprCode(pParse, pExpr->pRight); geFlag = pExpr->op==TK_GE; aExpr[k].p = 0; break; @@ -1044,7 +1044,7 @@ WhereInfo *sqliteWhereBegin( && (aExpr[k].prereqLeft & loopMask)==aExpr[k].prereqLeft && pExpr->pRight->iColumn==pIdx->aiColumn[j] ){ - sqliteExprCode(pParse, pExpr->pLeft); + sqlite3ExprCode(pParse, pExpr->pLeft); geFlag = pExpr->op==TK_LE; aExpr[k].p = 0; break; @@ -1055,43 +1055,43 @@ WhereInfo *sqliteWhereBegin( } if( nEqColumn>0 || (score&2)!=0 ){ int nCol = nEqColumn + ((score&2)!=0); - sqliteVdbeAddOp(v, OP_NotNull, -nCol, sqliteVdbeCurrentAddr(v)+3); - sqliteVdbeAddOp(v, OP_Pop, nCol, 0); - sqliteVdbeAddOp(v, OP_Goto, 0, brk); - sqliteVdbeAddOp(v, OP_MakeKey, nCol, 0); - sqliteAddIdxKeyType(v, pIdx); + sqlite3VdbeAddOp(v, OP_NotNull, -nCol, sqlite3VdbeCurrentAddr(v)+3); + sqlite3VdbeAddOp(v, OP_Pop, nCol, 0); + sqlite3VdbeAddOp(v, OP_Goto, 0, brk); + sqlite3VdbeAddOp(v, OP_MakeKey, nCol, 0); + sqlite3AddIdxKeyType(v, pIdx); if( !geFlag ){ - sqliteVdbeAddOp(v, OP_IncrKey, 0, 0); + sqlite3VdbeAddOp(v, OP_IncrKey, 0, 0); } if( pLevel->bRev ){ pLevel->iMem = pParse->nMem++; - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); testOp = OP_IdxLT; }else{ - sqliteVdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_MoveTo, pLevel->iCur, brk); } }else if( pLevel->bRev ){ testOp = OP_Noop; }else{ - sqliteVdbeAddOp(v, OP_Rewind, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_Rewind, pLevel->iCur, brk); } /* Generate the the top of the loop. If there is a termination ** key we have to test for that key and abort at the top of the ** loop. */ - start = sqliteVdbeCurrentAddr(v); + start = sqlite3VdbeCurrentAddr(v); if( testOp!=OP_Noop ){ - sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); - sqliteVdbeAddOp(v, testOp, pLevel->iCur, brk); + sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); + sqlite3VdbeAddOp(v, testOp, pLevel->iCur, brk); } - sqliteVdbeAddOp(v, OP_RowKey, pLevel->iCur, 0); - sqliteVdbeAddOp(v, OP_IdxIsNull, nEqColumn + (score & 1), cont); - sqliteVdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_RowKey, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_IdxIsNull, nEqColumn + (score & 1), cont); + sqlite3VdbeAddOp(v, OP_IdxRecno, pLevel->iCur, 0); if( i==pTabList->nSrc-1 && pushKey ){ haveKey = 1; }else{ - sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0); + sqlite3VdbeAddOp(v, OP_MoveTo, iCur, 0); haveKey = 0; } @@ -1114,9 +1114,9 @@ WhereInfo *sqliteWhereBegin( } if( haveKey ){ haveKey = 0; - sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0); + sqlite3VdbeAddOp(v, OP_MoveTo, iCur, 0); } - sqliteExprIfFalse(pParse, aExpr[j].p, cont, 1); + sqlite3ExprIfFalse(pParse, aExpr[j].p, cont, 1); aExpr[j].p = 0; } brk = cont; @@ -1125,9 +1125,9 @@ WhereInfo *sqliteWhereBegin( ** at least one row of the right table has matched the left table. */ if( pLevel->iLeftJoin ){ - pLevel->top = sqliteVdbeCurrentAddr(v); - sqliteVdbeAddOp(v, OP_Integer, 1, 0); - sqliteVdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); + pLevel->top = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp(v, OP_Integer, 1, 0); + sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); for(j=0; j<nExpr; j++){ if( aExpr[j].p==0 ) continue; if( (aExpr[j].prereqAll & loopMask)!=aExpr[j].prereqAll ) continue; @@ -1137,16 +1137,16 @@ WhereInfo *sqliteWhereBegin( ** no outer joins with DELETE and UPDATE. */ haveKey = 0; - sqliteVdbeAddOp(v, OP_MoveTo, iCur, 0); + sqlite3VdbeAddOp(v, OP_MoveTo, iCur, 0); } - sqliteExprIfFalse(pParse, aExpr[j].p, cont, 1); + sqlite3ExprIfFalse(pParse, aExpr[j].p, cont, 1); aExpr[j].p = 0; } } } pWInfo->iContinue = cont; if( pushKey && !haveKey ){ - sqliteVdbeAddOp(v, OP_Recno, pTabList->a[0].iCursor, 0); + sqlite3VdbeAddOp(v, OP_Recno, pTabList->a[0].iCursor, 0); } freeMaskSet(&maskSet); return pWInfo; @@ -1154,9 +1154,9 @@ WhereInfo *sqliteWhereBegin( /* ** Generate the end of the WHERE loop. See comments on -** sqliteWhereBegin() for additional information. +** sqlite3WhereBegin() for additional information. */ -void sqliteWhereEnd(WhereInfo *pWInfo){ +void sqlite3WhereEnd(WhereInfo *pWInfo){ Vdbe *v = pWInfo->pParse->pVdbe; int i; WhereLevel *pLevel; @@ -1164,34 +1164,34 @@ void sqliteWhereEnd(WhereInfo *pWInfo){ for(i=pTabList->nSrc-1; i>=0; i--){ pLevel = &pWInfo->a[i]; - sqliteVdbeResolveLabel(v, pLevel->cont); + sqlite3VdbeResolveLabel(v, pLevel->cont); if( pLevel->op!=OP_Noop ){ - sqliteVdbeAddOp(v, pLevel->op, pLevel->p1, pLevel->p2); + sqlite3VdbeAddOp(v, pLevel->op, pLevel->p1, pLevel->p2); } - sqliteVdbeResolveLabel(v, pLevel->brk); + sqlite3VdbeResolveLabel(v, pLevel->brk); if( pLevel->inOp!=OP_Noop ){ - sqliteVdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2); + sqlite3VdbeAddOp(v, pLevel->inOp, pLevel->inP1, pLevel->inP2); } if( pLevel->iLeftJoin ){ int addr; - addr = sqliteVdbeAddOp(v, OP_MemLoad, pLevel->iLeftJoin, 0); - sqliteVdbeAddOp(v, OP_NotNull, 1, addr+4 + (pLevel->iCur>=0)); - sqliteVdbeAddOp(v, OP_NullRow, pTabList->a[i].iCursor, 0); + addr = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iLeftJoin, 0); + sqlite3VdbeAddOp(v, OP_NotNull, 1, addr+4 + (pLevel->iCur>=0)); + sqlite3VdbeAddOp(v, OP_NullRow, pTabList->a[i].iCursor, 0); if( pLevel->iCur>=0 ){ - sqliteVdbeAddOp(v, OP_NullRow, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_NullRow, pLevel->iCur, 0); } - sqliteVdbeAddOp(v, OP_Goto, 0, pLevel->top); + sqlite3VdbeAddOp(v, OP_Goto, 0, pLevel->top); } } - sqliteVdbeResolveLabel(v, pWInfo->iBreak); + sqlite3VdbeResolveLabel(v, pWInfo->iBreak); for(i=0; i<pTabList->nSrc; i++){ Table *pTab = pTabList->a[i].pTab; assert( pTab!=0 ); if( pTab->isTransient || pTab->pSelect ) continue; pLevel = &pWInfo->a[i]; - sqliteVdbeAddOp(v, OP_Close, pTabList->a[i].iCursor, 0); + sqlite3VdbeAddOp(v, OP_Close, pTabList->a[i].iCursor, 0); if( pLevel->pIdx!=0 ){ - sqliteVdbeAddOp(v, OP_Close, pLevel->iCur, 0); + sqlite3VdbeAddOp(v, OP_Close, pLevel->iCur, 0); } } #if 0 /* Never reuse a cursor */ @@ -1202,3 +1202,6 @@ void sqliteWhereEnd(WhereInfo *pWInfo){ sqliteFree(pWInfo); return; } + + + |