xref: /sqlite-3.40.0/src/where.c (revision 4249b3f5)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This module contains C code that generates VDBE code used to process
13 ** the WHERE clause of SQL statements.  This module is responsible for
14 ** generating the code that loops through a table looking for applicable
15 ** rows.  Indices are selected and used to speed the search when doing
16 ** so is applicable.  Because this module is responsible for selecting
17 ** indices, you might also think of this module as the "query optimizer".
18 **
19 ** $Id: where.c,v 1.317 2008/07/12 14:52:20 drh Exp $
20 */
21 #include "sqliteInt.h"
22 
23 /*
24 ** The number of bits in a Bitmask.  "BMS" means "BitMask Size".
25 */
26 #define BMS  (sizeof(Bitmask)*8)
27 
28 /*
29 ** Trace output macros
30 */
31 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
32 int sqlite3WhereTrace = 0;
33 #endif
34 #if 0
35 # define WHERETRACE(X)  if(sqlite3WhereTrace) sqlite3DebugPrintf X
36 #else
37 # define WHERETRACE(X)
38 #endif
39 
40 /* Forward reference
41 */
42 typedef struct WhereClause WhereClause;
43 typedef struct ExprMaskSet ExprMaskSet;
44 
45 /*
46 ** The query generator uses an array of instances of this structure to
47 ** help it analyze the subexpressions of the WHERE clause.  Each WHERE
48 ** clause subexpression is separated from the others by an AND operator.
49 **
50 ** All WhereTerms are collected into a single WhereClause structure.
51 ** The following identity holds:
52 **
53 **        WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
54 **
55 ** When a term is of the form:
56 **
57 **              X <op> <expr>
58 **
59 ** where X is a column name and <op> is one of certain operators,
60 ** then WhereTerm.leftCursor and WhereTerm.leftColumn record the
61 ** cursor number and column number for X.  WhereTerm.operator records
62 ** the <op> using a bitmask encoding defined by WO_xxx below.  The
63 ** use of a bitmask encoding for the operator allows us to search
64 ** quickly for terms that match any of several different operators.
65 **
66 ** prereqRight and prereqAll record sets of cursor numbers,
67 ** but they do so indirectly.  A single ExprMaskSet structure translates
68 ** cursor number into bits and the translated bit is stored in the prereq
69 ** fields.  The translation is used in order to maximize the number of
70 ** bits that will fit in a Bitmask.  The VDBE cursor numbers might be
71 ** spread out over the non-negative integers.  For example, the cursor
72 ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45.  The ExprMaskSet
73 ** translates these sparse cursor numbers into consecutive integers
74 ** beginning with 0 in order to make the best possible use of the available
75 ** bits in the Bitmask.  So, in the example above, the cursor numbers
76 ** would be mapped into integers 0 through 7.
77 */
78 typedef struct WhereTerm WhereTerm;
79 struct WhereTerm {
80   Expr *pExpr;            /* Pointer to the subexpression */
81   i16 iParent;            /* Disable pWC->a[iParent] when this term disabled */
82   i16 leftCursor;         /* Cursor number of X in "X <op> <expr>" */
83   i16 leftColumn;         /* Column number of X in "X <op> <expr>" */
84   u16 eOperator;          /* A WO_xx value describing <op> */
85   u8 flags;               /* Bit flags.  See below */
86   u8 nChild;              /* Number of children that must disable us */
87   WhereClause *pWC;       /* The clause this term is part of */
88   Bitmask prereqRight;    /* Bitmask of tables used by pRight */
89   Bitmask prereqAll;      /* Bitmask of tables referenced by p */
90 };
91 
92 /*
93 ** Allowed values of WhereTerm.flags
94 */
95 #define TERM_DYNAMIC    0x01   /* Need to call sqlite3ExprDelete(pExpr) */
96 #define TERM_VIRTUAL    0x02   /* Added by the optimizer.  Do not code */
97 #define TERM_CODED      0x04   /* This term is already coded */
98 #define TERM_COPIED     0x08   /* Has a child */
99 #define TERM_OR_OK      0x10   /* Used during OR-clause processing */
100 
101 /*
102 ** An instance of the following structure holds all information about a
103 ** WHERE clause.  Mostly this is a container for one or more WhereTerms.
104 */
105 struct WhereClause {
106   Parse *pParse;           /* The parser context */
107   ExprMaskSet *pMaskSet;   /* Mapping of table indices to bitmasks */
108   int nTerm;               /* Number of terms */
109   int nSlot;               /* Number of entries in a[] */
110   WhereTerm *a;            /* Each a[] describes a term of the WHERE cluase */
111   WhereTerm aStatic[10];   /* Initial static space for a[] */
112 };
113 
114 /*
115 ** An instance of the following structure keeps track of a mapping
116 ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
117 **
118 ** The VDBE cursor numbers are small integers contained in
119 ** SrcList_item.iCursor and Expr.iTable fields.  For any given WHERE
120 ** clause, the cursor numbers might not begin with 0 and they might
121 ** contain gaps in the numbering sequence.  But we want to make maximum
122 ** use of the bits in our bitmasks.  This structure provides a mapping
123 ** from the sparse cursor numbers into consecutive integers beginning
124 ** with 0.
125 **
126 ** If ExprMaskSet.ix[A]==B it means that The A-th bit of a Bitmask
127 ** corresponds VDBE cursor number B.  The A-th bit of a bitmask is 1<<A.
128 **
129 ** For example, if the WHERE clause expression used these VDBE
130 ** cursors:  4, 5, 8, 29, 57, 73.  Then the  ExprMaskSet structure
131 ** would map those cursor numbers into bits 0 through 5.
132 **
133 ** Note that the mapping is not necessarily ordered.  In the example
134 ** above, the mapping might go like this:  4->3, 5->1, 8->2, 29->0,
135 ** 57->5, 73->4.  Or one of 719 other combinations might be used. It
136 ** does not really matter.  What is important is that sparse cursor
137 ** numbers all get mapped into bit numbers that begin with 0 and contain
138 ** no gaps.
139 */
140 struct ExprMaskSet {
141   int n;                        /* Number of assigned cursor values */
142   int ix[sizeof(Bitmask)*8];    /* Cursor assigned to each bit */
143 };
144 
145 
146 /*
147 ** Bitmasks for the operators that indices are able to exploit.  An
148 ** OR-ed combination of these values can be used when searching for
149 ** terms in the where clause.
150 */
151 #define WO_IN     1
152 #define WO_EQ     2
153 #define WO_LT     (WO_EQ<<(TK_LT-TK_EQ))
154 #define WO_LE     (WO_EQ<<(TK_LE-TK_EQ))
155 #define WO_GT     (WO_EQ<<(TK_GT-TK_EQ))
156 #define WO_GE     (WO_EQ<<(TK_GE-TK_EQ))
157 #define WO_MATCH  64
158 #define WO_ISNULL 128
159 
160 /*
161 ** Value for flags returned by bestIndex().
162 **
163 ** The least significant byte is reserved as a mask for WO_ values above.
164 ** The WhereLevel.flags field is usually set to WO_IN|WO_EQ|WO_ISNULL.
165 ** But if the table is the right table of a left join, WhereLevel.flags
166 ** is set to WO_IN|WO_EQ.  The WhereLevel.flags field can then be used as
167 ** the "op" parameter to findTerm when we are resolving equality constraints.
168 ** ISNULL constraints will then not be used on the right table of a left
169 ** join.  Tickets #2177 and #2189.
170 */
171 #define WHERE_ROWID_EQ     0x000100   /* rowid=EXPR or rowid IN (...) */
172 #define WHERE_ROWID_RANGE  0x000200   /* rowid<EXPR and/or rowid>EXPR */
173 #define WHERE_COLUMN_EQ    0x001000   /* x=EXPR or x IN (...) */
174 #define WHERE_COLUMN_RANGE 0x002000   /* x<EXPR and/or x>EXPR */
175 #define WHERE_COLUMN_IN    0x004000   /* x IN (...) */
176 #define WHERE_TOP_LIMIT    0x010000   /* x<EXPR or x<=EXPR constraint */
177 #define WHERE_BTM_LIMIT    0x020000   /* x>EXPR or x>=EXPR constraint */
178 #define WHERE_IDX_ONLY     0x080000   /* Use index only - omit table */
179 #define WHERE_ORDERBY      0x100000   /* Output will appear in correct order */
180 #define WHERE_REVERSE      0x200000   /* Scan in reverse order */
181 #define WHERE_UNIQUE       0x400000   /* Selects no more than one row */
182 #define WHERE_VIRTUALTABLE 0x800000   /* Use virtual-table processing */
183 
184 /*
185 ** Initialize a preallocated WhereClause structure.
186 */
187 static void whereClauseInit(
188   WhereClause *pWC,        /* The WhereClause to be initialized */
189   Parse *pParse,           /* The parsing context */
190   ExprMaskSet *pMaskSet    /* Mapping from table indices to bitmasks */
191 ){
192   pWC->pParse = pParse;
193   pWC->pMaskSet = pMaskSet;
194   pWC->nTerm = 0;
195   pWC->nSlot = ArraySize(pWC->aStatic);
196   pWC->a = pWC->aStatic;
197 }
198 
199 /*
200 ** Deallocate a WhereClause structure.  The WhereClause structure
201 ** itself is not freed.  This routine is the inverse of whereClauseInit().
202 */
203 static void whereClauseClear(WhereClause *pWC){
204   int i;
205   WhereTerm *a;
206   for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
207     if( a->flags & TERM_DYNAMIC ){
208       sqlite3ExprDelete(a->pExpr);
209     }
210   }
211   if( pWC->a!=pWC->aStatic ){
212     sqlite3_free(pWC->a);
213   }
214 }
215 
216 /*
217 ** Add a new entries to the WhereClause structure.  Increase the allocated
218 ** space as necessary.
219 **
220 ** If the flags argument includes TERM_DYNAMIC, then responsibility
221 ** for freeing the expression p is assumed by the WhereClause object.
222 **
223 ** WARNING:  This routine might reallocate the space used to store
224 ** WhereTerms.  All pointers to WhereTerms should be invalidated after
225 ** calling this routine.  Such pointers may be reinitialized by referencing
226 ** the pWC->a[] array.
227 */
228 static int whereClauseInsert(WhereClause *pWC, Expr *p, int flags){
229   WhereTerm *pTerm;
230   int idx;
231   if( pWC->nTerm>=pWC->nSlot ){
232     WhereTerm *pOld = pWC->a;
233     pWC->a = sqlite3Malloc( sizeof(pWC->a[0])*pWC->nSlot*2 );
234     if( pWC->a==0 ){
235       pWC->pParse->db->mallocFailed = 1;
236       if( flags & TERM_DYNAMIC ){
237         sqlite3ExprDelete(p);
238       }
239       pWC->a = pOld;
240       return 0;
241     }
242     memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
243     if( pOld!=pWC->aStatic ){
244       sqlite3_free(pOld);
245     }
246     pWC->nSlot *= 2;
247   }
248   pTerm = &pWC->a[idx = pWC->nTerm];
249   pWC->nTerm++;
250   pTerm->pExpr = p;
251   pTerm->flags = flags;
252   pTerm->pWC = pWC;
253   pTerm->iParent = -1;
254   return idx;
255 }
256 
257 /*
258 ** This routine identifies subexpressions in the WHERE clause where
259 ** each subexpression is separated by the AND operator or some other
260 ** operator specified in the op parameter.  The WhereClause structure
261 ** is filled with pointers to subexpressions.  For example:
262 **
263 **    WHERE  a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
264 **           \________/     \_______________/     \________________/
265 **            slot[0]            slot[1]               slot[2]
266 **
267 ** The original WHERE clause in pExpr is unaltered.  All this routine
268 ** does is make slot[] entries point to substructure within pExpr.
269 **
270 ** In the previous sentence and in the diagram, "slot[]" refers to
271 ** the WhereClause.a[] array.  This array grows as needed to contain
272 ** all terms of the WHERE clause.
273 */
274 static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
275   if( pExpr==0 ) return;
276   if( pExpr->op!=op ){
277     whereClauseInsert(pWC, pExpr, 0);
278   }else{
279     whereSplit(pWC, pExpr->pLeft, op);
280     whereSplit(pWC, pExpr->pRight, op);
281   }
282 }
283 
284 /*
285 ** Initialize an expression mask set
286 */
287 #define initMaskSet(P)  memset(P, 0, sizeof(*P))
288 
289 /*
290 ** Return the bitmask for the given cursor number.  Return 0 if
291 ** iCursor is not in the set.
292 */
293 static Bitmask getMask(ExprMaskSet *pMaskSet, int iCursor){
294   int i;
295   for(i=0; i<pMaskSet->n; i++){
296     if( pMaskSet->ix[i]==iCursor ){
297       return ((Bitmask)1)<<i;
298     }
299   }
300   return 0;
301 }
302 
303 /*
304 ** Create a new mask for cursor iCursor.
305 **
306 ** There is one cursor per table in the FROM clause.  The number of
307 ** tables in the FROM clause is limited by a test early in the
308 ** sqlite3WhereBegin() routine.  So we know that the pMaskSet->ix[]
309 ** array will never overflow.
310 */
311 static void createMask(ExprMaskSet *pMaskSet, int iCursor){
312   assert( pMaskSet->n < ArraySize(pMaskSet->ix) );
313   pMaskSet->ix[pMaskSet->n++] = iCursor;
314 }
315 
316 /*
317 ** This routine walks (recursively) an expression tree and generates
318 ** a bitmask indicating which tables are used in that expression
319 ** tree.
320 **
321 ** In order for this routine to work, the calling function must have
322 ** previously invoked sqlite3ExprResolveNames() on the expression.  See
323 ** the header comment on that routine for additional information.
324 ** The sqlite3ExprResolveNames() routines looks for column names and
325 ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
326 ** the VDBE cursor number of the table.  This routine just has to
327 ** translate the cursor numbers into bitmask values and OR all
328 ** the bitmasks together.
329 */
330 static Bitmask exprListTableUsage(ExprMaskSet*, ExprList*);
331 static Bitmask exprSelectTableUsage(ExprMaskSet*, Select*);
332 static Bitmask exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){
333   Bitmask mask = 0;
334   if( p==0 ) return 0;
335   if( p->op==TK_COLUMN ){
336     mask = getMask(pMaskSet, p->iTable);
337     return mask;
338   }
339   mask = exprTableUsage(pMaskSet, p->pRight);
340   mask |= exprTableUsage(pMaskSet, p->pLeft);
341   mask |= exprListTableUsage(pMaskSet, p->pList);
342   mask |= exprSelectTableUsage(pMaskSet, p->pSelect);
343   return mask;
344 }
345 static Bitmask exprListTableUsage(ExprMaskSet *pMaskSet, ExprList *pList){
346   int i;
347   Bitmask mask = 0;
348   if( pList ){
349     for(i=0; i<pList->nExpr; i++){
350       mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr);
351     }
352   }
353   return mask;
354 }
355 static Bitmask exprSelectTableUsage(ExprMaskSet *pMaskSet, Select *pS){
356   Bitmask mask = 0;
357   while( pS ){
358     mask |= exprListTableUsage(pMaskSet, pS->pEList);
359     mask |= exprListTableUsage(pMaskSet, pS->pGroupBy);
360     mask |= exprListTableUsage(pMaskSet, pS->pOrderBy);
361     mask |= exprTableUsage(pMaskSet, pS->pWhere);
362     mask |= exprTableUsage(pMaskSet, pS->pHaving);
363     pS = pS->pPrior;
364   }
365   return mask;
366 }
367 
368 /*
369 ** Return TRUE if the given operator is one of the operators that is
370 ** allowed for an indexable WHERE clause term.  The allowed operators are
371 ** "=", "<", ">", "<=", ">=", and "IN".
372 */
373 static int allowedOp(int op){
374   assert( TK_GT>TK_EQ && TK_GT<TK_GE );
375   assert( TK_LT>TK_EQ && TK_LT<TK_GE );
376   assert( TK_LE>TK_EQ && TK_LE<TK_GE );
377   assert( TK_GE==TK_EQ+4 );
378   return op==TK_IN || (op>=TK_EQ && op<=TK_GE) || op==TK_ISNULL;
379 }
380 
381 /*
382 ** Swap two objects of type T.
383 */
384 #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
385 
386 /*
387 ** Commute a comparison operator.  Expressions of the form "X op Y"
388 ** are converted into "Y op X".
389 **
390 ** If a collation sequence is associated with either the left or right
391 ** side of the comparison, it remains associated with the same side after
392 ** the commutation. So "Y collate NOCASE op X" becomes
393 ** "X collate NOCASE op Y". This is because any collation sequence on
394 ** the left hand side of a comparison overrides any collation sequence
395 ** attached to the right. For the same reason the EP_ExpCollate flag
396 ** is not commuted.
397 */
398 static void exprCommute(Expr *pExpr){
399   u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
400   u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
401   assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
402   SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
403   pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
404   pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
405   SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
406   if( pExpr->op>=TK_GT ){
407     assert( TK_LT==TK_GT+2 );
408     assert( TK_GE==TK_LE+2 );
409     assert( TK_GT>TK_EQ );
410     assert( TK_GT<TK_LE );
411     assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
412     pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
413   }
414 }
415 
416 /*
417 ** Translate from TK_xx operator to WO_xx bitmask.
418 */
419 static int operatorMask(int op){
420   int c;
421   assert( allowedOp(op) );
422   if( op==TK_IN ){
423     c = WO_IN;
424   }else if( op==TK_ISNULL ){
425     c = WO_ISNULL;
426   }else{
427     c = WO_EQ<<(op-TK_EQ);
428   }
429   assert( op!=TK_ISNULL || c==WO_ISNULL );
430   assert( op!=TK_IN || c==WO_IN );
431   assert( op!=TK_EQ || c==WO_EQ );
432   assert( op!=TK_LT || c==WO_LT );
433   assert( op!=TK_LE || c==WO_LE );
434   assert( op!=TK_GT || c==WO_GT );
435   assert( op!=TK_GE || c==WO_GE );
436   return c;
437 }
438 
439 /*
440 ** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
441 ** where X is a reference to the iColumn of table iCur and <op> is one of
442 ** the WO_xx operator codes specified by the op parameter.
443 ** Return a pointer to the term.  Return 0 if not found.
444 */
445 static WhereTerm *findTerm(
446   WhereClause *pWC,     /* The WHERE clause to be searched */
447   int iCur,             /* Cursor number of LHS */
448   int iColumn,          /* Column number of LHS */
449   Bitmask notReady,     /* RHS must not overlap with this mask */
450   u16 op,               /* Mask of WO_xx values describing operator */
451   Index *pIdx           /* Must be compatible with this index, if not NULL */
452 ){
453   WhereTerm *pTerm;
454   int k;
455   assert( iCur>=0 );
456   for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
457     if( pTerm->leftCursor==iCur
458        && (pTerm->prereqRight & notReady)==0
459        && pTerm->leftColumn==iColumn
460        && (pTerm->eOperator & op)!=0
461     ){
462       if( pIdx && pTerm->eOperator!=WO_ISNULL ){
463         Expr *pX = pTerm->pExpr;
464         CollSeq *pColl;
465         char idxaff;
466         int j;
467         Parse *pParse = pWC->pParse;
468 
469         idxaff = pIdx->pTable->aCol[iColumn].affinity;
470         if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
471 
472         /* Figure out the collation sequence required from an index for
473         ** it to be useful for optimising expression pX. Store this
474         ** value in variable pColl.
475         */
476         assert(pX->pLeft);
477         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
478         if( !pColl ){
479           pColl = pParse->db->pDfltColl;
480         }
481 
482         for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
483           if( NEVER(j>=pIdx->nColumn) ) return 0;
484         }
485         if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
486       }
487       return pTerm;
488     }
489   }
490   return 0;
491 }
492 
493 /* Forward reference */
494 static void exprAnalyze(SrcList*, WhereClause*, int);
495 
496 /*
497 ** Call exprAnalyze on all terms in a WHERE clause.
498 **
499 **
500 */
501 static void exprAnalyzeAll(
502   SrcList *pTabList,       /* the FROM clause */
503   WhereClause *pWC         /* the WHERE clause to be analyzed */
504 ){
505   int i;
506   for(i=pWC->nTerm-1; i>=0; i--){
507     exprAnalyze(pTabList, pWC, i);
508   }
509 }
510 
511 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
512 /*
513 ** Check to see if the given expression is a LIKE or GLOB operator that
514 ** can be optimized using inequality constraints.  Return TRUE if it is
515 ** so and false if not.
516 **
517 ** In order for the operator to be optimizible, the RHS must be a string
518 ** literal that does not begin with a wildcard.
519 */
520 static int isLikeOrGlob(
521   sqlite3 *db,      /* The database */
522   Expr *pExpr,      /* Test this expression */
523   int *pnPattern,   /* Number of non-wildcard prefix characters */
524   int *pisComplete, /* True if the only wildcard is % in the last character */
525   int *pnoCase      /* True if uppercase is equivalent to lowercase */
526 ){
527   const char *z;
528   Expr *pRight, *pLeft;
529   ExprList *pList;
530   int c, cnt;
531   char wc[3];
532   CollSeq *pColl;
533 
534   if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){
535     return 0;
536   }
537 #ifdef SQLITE_EBCDIC
538   if( *pnoCase ) return 0;
539 #endif
540   pList = pExpr->pList;
541   pRight = pList->a[0].pExpr;
542   if( pRight->op!=TK_STRING
543    && (pRight->op!=TK_REGISTER || pRight->iColumn!=TK_STRING) ){
544     return 0;
545   }
546   pLeft = pList->a[1].pExpr;
547   if( pLeft->op!=TK_COLUMN ){
548     return 0;
549   }
550   pColl = pLeft->pColl;
551   assert( pColl!=0 || pLeft->iColumn==-1 );
552   if( pColl==0 ){
553     /* No collation is defined for the ROWID.  Use the default. */
554     pColl = db->pDfltColl;
555   }
556   if( (pColl->type!=SQLITE_COLL_BINARY || *pnoCase) &&
557       (pColl->type!=SQLITE_COLL_NOCASE || !*pnoCase) ){
558     return 0;
559   }
560   sqlite3DequoteExpr(db, pRight);
561   z = (char *)pRight->token.z;
562   cnt = 0;
563   if( z ){
564     while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ cnt++; }
565   }
566   if( cnt==0 || 255==(u8)z[cnt] ){
567     return 0;
568   }
569   *pisComplete = z[cnt]==wc[0] && z[cnt+1]==0;
570   *pnPattern = cnt;
571   return 1;
572 }
573 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
574 
575 
576 #ifndef SQLITE_OMIT_VIRTUALTABLE
577 /*
578 ** Check to see if the given expression is of the form
579 **
580 **         column MATCH expr
581 **
582 ** If it is then return TRUE.  If not, return FALSE.
583 */
584 static int isMatchOfColumn(
585   Expr *pExpr      /* Test this expression */
586 ){
587   ExprList *pList;
588 
589   if( pExpr->op!=TK_FUNCTION ){
590     return 0;
591   }
592   if( pExpr->token.n!=5 ||
593        sqlite3StrNICmp((const char*)pExpr->token.z,"match",5)!=0 ){
594     return 0;
595   }
596   pList = pExpr->pList;
597   if( pList->nExpr!=2 ){
598     return 0;
599   }
600   if( pList->a[1].pExpr->op != TK_COLUMN ){
601     return 0;
602   }
603   return 1;
604 }
605 #endif /* SQLITE_OMIT_VIRTUALTABLE */
606 
607 /*
608 ** If the pBase expression originated in the ON or USING clause of
609 ** a join, then transfer the appropriate markings over to derived.
610 */
611 static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
612   pDerived->flags |= pBase->flags & EP_FromJoin;
613   pDerived->iRightJoinTable = pBase->iRightJoinTable;
614 }
615 
616 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
617 /*
618 ** Return TRUE if the given term of an OR clause can be converted
619 ** into an IN clause.  The iCursor and iColumn define the left-hand
620 ** side of the IN clause.
621 **
622 ** The context is that we have multiple OR-connected equality terms
623 ** like this:
624 **
625 **           a=<expr1> OR  a=<expr2> OR b=<expr3>  OR ...
626 **
627 ** The pOrTerm input to this routine corresponds to a single term of
628 ** this OR clause.  In order for the term to be a candidate for
629 ** conversion to an IN operator, the following must be true:
630 **
631 **     *  The left-hand side of the term must be the column which
632 **        is identified by iCursor and iColumn.
633 **
634 **     *  If the right-hand side is also a column, then the affinities
635 **        of both right and left sides must be such that no type
636 **        conversions are required on the right.  (Ticket #2249)
637 **
638 ** If both of these conditions are true, then return true.  Otherwise
639 ** return false.
640 */
641 static int orTermIsOptCandidate(WhereTerm *pOrTerm, int iCursor, int iColumn){
642   int affLeft, affRight;
643   assert( pOrTerm->eOperator==WO_EQ );
644   if( pOrTerm->leftCursor!=iCursor ){
645     return 0;
646   }
647   if( pOrTerm->leftColumn!=iColumn ){
648     return 0;
649   }
650   affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);
651   if( affRight==0 ){
652     return 1;
653   }
654   affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft);
655   if( affRight!=affLeft ){
656     return 0;
657   }
658   return 1;
659 }
660 
661 /*
662 ** Return true if the given term of an OR clause can be ignored during
663 ** a check to make sure all OR terms are candidates for optimization.
664 ** In other words, return true if a call to the orTermIsOptCandidate()
665 ** above returned false but it is not necessary to disqualify the
666 ** optimization.
667 **
668 ** Suppose the original OR phrase was this:
669 **
670 **           a=4  OR  a=11  OR  a=b
671 **
672 ** During analysis, the third term gets flipped around and duplicate
673 ** so that we are left with this:
674 **
675 **           a=4  OR  a=11  OR  a=b  OR  b=a
676 **
677 ** Since the last two terms are duplicates, only one of them
678 ** has to qualify in order for the whole phrase to qualify.  When
679 ** this routine is called, we know that pOrTerm did not qualify.
680 ** This routine merely checks to see if pOrTerm has a duplicate that
681 ** might qualify.  If there is a duplicate that has not yet been
682 ** disqualified, then return true.  If there are no duplicates, or
683 ** the duplicate has also been disqualified, return false.
684 */
685 static int orTermHasOkDuplicate(WhereClause *pOr, WhereTerm *pOrTerm){
686   if( pOrTerm->flags & TERM_COPIED ){
687     /* This is the original term.  The duplicate is to the left had
688     ** has not yet been analyzed and thus has not yet been disqualified. */
689     return 1;
690   }
691   if( (pOrTerm->flags & TERM_VIRTUAL)!=0
692      && (pOr->a[pOrTerm->iParent].flags & TERM_OR_OK)!=0 ){
693     /* This is a duplicate term.  The original qualified so this one
694     ** does not have to. */
695     return 1;
696   }
697   /* This is either a singleton term or else it is a duplicate for
698   ** which the original did not qualify.  Either way we are done for. */
699   return 0;
700 }
701 #endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
702 
703 /*
704 ** The input to this routine is an WhereTerm structure with only the
705 ** "pExpr" field filled in.  The job of this routine is to analyze the
706 ** subexpression and populate all the other fields of the WhereTerm
707 ** structure.
708 **
709 ** If the expression is of the form "<expr> <op> X" it gets commuted
710 ** to the standard form of "X <op> <expr>".  If the expression is of
711 ** the form "X <op> Y" where both X and Y are columns, then the original
712 ** expression is unchanged and a new virtual expression of the form
713 ** "Y <op> X" is added to the WHERE clause and analyzed separately.
714 */
715 static void exprAnalyze(
716   SrcList *pSrc,            /* the FROM clause */
717   WhereClause *pWC,         /* the WHERE clause */
718   int idxTerm               /* Index of the term to be analyzed */
719 ){
720   WhereTerm *pTerm;
721   ExprMaskSet *pMaskSet;
722   Expr *pExpr;
723   Bitmask prereqLeft;
724   Bitmask prereqAll;
725   Bitmask extraRight = 0;
726   int nPattern;
727   int isComplete;
728   int noCase;
729   int op;
730   Parse *pParse = pWC->pParse;
731   sqlite3 *db = pParse->db;
732 
733   if( db->mallocFailed ){
734     return;
735   }
736   pTerm = &pWC->a[idxTerm];
737   pMaskSet = pWC->pMaskSet;
738   pExpr = pTerm->pExpr;
739   prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
740   op = pExpr->op;
741   if( op==TK_IN ){
742     assert( pExpr->pRight==0 );
743     pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->pList)
744                           | exprSelectTableUsage(pMaskSet, pExpr->pSelect);
745   }else if( op==TK_ISNULL ){
746     pTerm->prereqRight = 0;
747   }else{
748     pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
749   }
750   prereqAll = exprTableUsage(pMaskSet, pExpr);
751   if( ExprHasProperty(pExpr, EP_FromJoin) ){
752     Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable);
753     prereqAll |= x;
754     extraRight = x-1;  /* ON clause terms may not be used with an index
755                        ** on left table of a LEFT JOIN.  Ticket #3015 */
756   }
757   pTerm->prereqAll = prereqAll;
758   pTerm->leftCursor = -1;
759   pTerm->iParent = -1;
760   pTerm->eOperator = 0;
761   if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){
762     Expr *pLeft = pExpr->pLeft;
763     Expr *pRight = pExpr->pRight;
764     if( pLeft->op==TK_COLUMN ){
765       pTerm->leftCursor = pLeft->iTable;
766       pTerm->leftColumn = pLeft->iColumn;
767       pTerm->eOperator = operatorMask(op);
768     }
769     if( pRight && pRight->op==TK_COLUMN ){
770       WhereTerm *pNew;
771       Expr *pDup;
772       if( pTerm->leftCursor>=0 ){
773         int idxNew;
774         pDup = sqlite3ExprDup(db, pExpr);
775         if( db->mallocFailed ){
776           sqlite3ExprDelete(pDup);
777           return;
778         }
779         idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
780         if( idxNew==0 ) return;
781         pNew = &pWC->a[idxNew];
782         pNew->iParent = idxTerm;
783         pTerm = &pWC->a[idxTerm];
784         pTerm->nChild = 1;
785         pTerm->flags |= TERM_COPIED;
786       }else{
787         pDup = pExpr;
788         pNew = pTerm;
789       }
790       exprCommute(pDup);
791       pLeft = pDup->pLeft;
792       pNew->leftCursor = pLeft->iTable;
793       pNew->leftColumn = pLeft->iColumn;
794       pNew->prereqRight = prereqLeft;
795       pNew->prereqAll = prereqAll;
796       pNew->eOperator = operatorMask(pDup->op);
797     }
798   }
799 
800 #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
801   /* If a term is the BETWEEN operator, create two new virtual terms
802   ** that define the range that the BETWEEN implements.
803   */
804   else if( pExpr->op==TK_BETWEEN ){
805     ExprList *pList = pExpr->pList;
806     int i;
807     static const u8 ops[] = {TK_GE, TK_LE};
808     assert( pList!=0 );
809     assert( pList->nExpr==2 );
810     for(i=0; i<2; i++){
811       Expr *pNewExpr;
812       int idxNew;
813       pNewExpr = sqlite3Expr(db, ops[i], sqlite3ExprDup(db, pExpr->pLeft),
814                              sqlite3ExprDup(db, pList->a[i].pExpr), 0);
815       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
816       exprAnalyze(pSrc, pWC, idxNew);
817       pTerm = &pWC->a[idxTerm];
818       pWC->a[idxNew].iParent = idxTerm;
819     }
820     pTerm->nChild = 2;
821   }
822 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
823 
824 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
825   /* Attempt to convert OR-connected terms into an IN operator so that
826   ** they can make use of indices.  Example:
827   **
828   **      x = expr1  OR  expr2 = x  OR  x = expr3
829   **
830   ** is converted into
831   **
832   **      x IN (expr1,expr2,expr3)
833   **
834   ** This optimization must be omitted if OMIT_SUBQUERY is defined because
835   ** the compiler for the the IN operator is part of sub-queries.
836   */
837   else if( pExpr->op==TK_OR ){
838     int ok;
839     int i, j;
840     int iColumn, iCursor;
841     WhereClause sOr;
842     WhereTerm *pOrTerm;
843 
844     assert( (pTerm->flags & TERM_DYNAMIC)==0 );
845     whereClauseInit(&sOr, pWC->pParse, pMaskSet);
846     whereSplit(&sOr, pExpr, TK_OR);
847     exprAnalyzeAll(pSrc, &sOr);
848     assert( sOr.nTerm>=2 );
849     j = 0;
850     if( db->mallocFailed ) goto or_not_possible;
851     do{
852       assert( j<sOr.nTerm );
853       iColumn = sOr.a[j].leftColumn;
854       iCursor = sOr.a[j].leftCursor;
855       ok = iCursor>=0;
856       for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){
857         if( pOrTerm->eOperator!=WO_EQ ){
858           goto or_not_possible;
859         }
860         if( orTermIsOptCandidate(pOrTerm, iCursor, iColumn) ){
861           pOrTerm->flags |= TERM_OR_OK;
862         }else if( orTermHasOkDuplicate(&sOr, pOrTerm) ){
863           pOrTerm->flags &= ~TERM_OR_OK;
864         }else{
865           ok = 0;
866         }
867       }
868     }while( !ok && (sOr.a[j++].flags & TERM_COPIED)!=0 && j<2 );
869     if( ok ){
870       ExprList *pList = 0;
871       Expr *pNew, *pDup;
872       Expr *pLeft = 0;
873       for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0; i--, pOrTerm++){
874         if( (pOrTerm->flags & TERM_OR_OK)==0 ) continue;
875         pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight);
876         pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup, 0);
877         pLeft = pOrTerm->pExpr->pLeft;
878       }
879       assert( pLeft!=0 );
880       pDup = sqlite3ExprDup(db, pLeft);
881       pNew = sqlite3Expr(db, TK_IN, pDup, 0, 0);
882       if( pNew ){
883         int idxNew;
884         transferJoinMarkings(pNew, pExpr);
885         pNew->pList = pList;
886         idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
887         exprAnalyze(pSrc, pWC, idxNew);
888         pTerm = &pWC->a[idxTerm];
889         pWC->a[idxNew].iParent = idxTerm;
890         pTerm->nChild = 1;
891       }else{
892         sqlite3ExprListDelete(pList);
893       }
894     }
895 or_not_possible:
896     whereClauseClear(&sOr);
897   }
898 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
899 
900 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
901   /* Add constraints to reduce the search space on a LIKE or GLOB
902   ** operator.
903   **
904   ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
905   **
906   **          x>='abc' AND x<'abd' AND x LIKE 'abc%'
907   **
908   ** The last character of the prefix "abc" is incremented to form the
909   ** termination condition "abd".
910   */
911   if( isLikeOrGlob(db, pExpr, &nPattern, &isComplete, &noCase) ){
912     Expr *pLeft, *pRight;
913     Expr *pStr1, *pStr2;
914     Expr *pNewExpr1, *pNewExpr2;
915     int idxNew1, idxNew2;
916 
917     pLeft = pExpr->pList->a[1].pExpr;
918     pRight = pExpr->pList->a[0].pExpr;
919     pStr1 = sqlite3PExpr(pParse, TK_STRING, 0, 0, 0);
920     if( pStr1 ){
921       sqlite3TokenCopy(db, &pStr1->token, &pRight->token);
922       pStr1->token.n = nPattern;
923       pStr1->flags = EP_Dequoted;
924     }
925     pStr2 = sqlite3ExprDup(db, pStr1);
926     if( !db->mallocFailed ){
927       u8 c, *pC;
928       assert( pStr2->token.dyn );
929       pC = (u8*)&pStr2->token.z[nPattern-1];
930       c = *pC;
931       if( noCase ){
932         if( c=='@' ) isComplete = 0;
933         c = sqlite3UpperToLower[c];
934       }
935       *pC = c + 1;
936     }
937     pNewExpr1 = sqlite3PExpr(pParse, TK_GE, sqlite3ExprDup(db,pLeft), pStr1, 0);
938     idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
939     exprAnalyze(pSrc, pWC, idxNew1);
940     pNewExpr2 = sqlite3PExpr(pParse, TK_LT, sqlite3ExprDup(db,pLeft), pStr2, 0);
941     idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
942     exprAnalyze(pSrc, pWC, idxNew2);
943     pTerm = &pWC->a[idxTerm];
944     if( isComplete ){
945       pWC->a[idxNew1].iParent = idxTerm;
946       pWC->a[idxNew2].iParent = idxTerm;
947       pTerm->nChild = 2;
948     }
949   }
950 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
951 
952 #ifndef SQLITE_OMIT_VIRTUALTABLE
953   /* Add a WO_MATCH auxiliary term to the constraint set if the
954   ** current expression is of the form:  column MATCH expr.
955   ** This information is used by the xBestIndex methods of
956   ** virtual tables.  The native query optimizer does not attempt
957   ** to do anything with MATCH functions.
958   */
959   if( isMatchOfColumn(pExpr) ){
960     int idxNew;
961     Expr *pRight, *pLeft;
962     WhereTerm *pNewTerm;
963     Bitmask prereqColumn, prereqExpr;
964 
965     pRight = pExpr->pList->a[0].pExpr;
966     pLeft = pExpr->pList->a[1].pExpr;
967     prereqExpr = exprTableUsage(pMaskSet, pRight);
968     prereqColumn = exprTableUsage(pMaskSet, pLeft);
969     if( (prereqExpr & prereqColumn)==0 ){
970       Expr *pNewExpr;
971       pNewExpr = sqlite3Expr(db, TK_MATCH, 0, sqlite3ExprDup(db, pRight), 0);
972       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
973       pNewTerm = &pWC->a[idxNew];
974       pNewTerm->prereqRight = prereqExpr;
975       pNewTerm->leftCursor = pLeft->iTable;
976       pNewTerm->leftColumn = pLeft->iColumn;
977       pNewTerm->eOperator = WO_MATCH;
978       pNewTerm->iParent = idxTerm;
979       pTerm = &pWC->a[idxTerm];
980       pTerm->nChild = 1;
981       pTerm->flags |= TERM_COPIED;
982       pNewTerm->prereqAll = pTerm->prereqAll;
983     }
984   }
985 #endif /* SQLITE_OMIT_VIRTUALTABLE */
986 
987   /* Prevent ON clause terms of a LEFT JOIN from being used to drive
988   ** an index for tables to the left of the join.
989   */
990   pTerm->prereqRight |= extraRight;
991 }
992 
993 /*
994 ** Return TRUE if any of the expressions in pList->a[iFirst...] contain
995 ** a reference to any table other than the iBase table.
996 */
997 static int referencesOtherTables(
998   ExprList *pList,          /* Search expressions in ths list */
999   ExprMaskSet *pMaskSet,    /* Mapping from tables to bitmaps */
1000   int iFirst,               /* Be searching with the iFirst-th expression */
1001   int iBase                 /* Ignore references to this table */
1002 ){
1003   Bitmask allowed = ~getMask(pMaskSet, iBase);
1004   while( iFirst<pList->nExpr ){
1005     if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
1006       return 1;
1007     }
1008   }
1009   return 0;
1010 }
1011 
1012 
1013 /*
1014 ** This routine decides if pIdx can be used to satisfy the ORDER BY
1015 ** clause.  If it can, it returns 1.  If pIdx cannot satisfy the
1016 ** ORDER BY clause, this routine returns 0.
1017 **
1018 ** pOrderBy is an ORDER BY clause from a SELECT statement.  pTab is the
1019 ** left-most table in the FROM clause of that same SELECT statement and
1020 ** the table has a cursor number of "base".  pIdx is an index on pTab.
1021 **
1022 ** nEqCol is the number of columns of pIdx that are used as equality
1023 ** constraints.  Any of these columns may be missing from the ORDER BY
1024 ** clause and the match can still be a success.
1025 **
1026 ** All terms of the ORDER BY that match against the index must be either
1027 ** ASC or DESC.  (Terms of the ORDER BY clause past the end of a UNIQUE
1028 ** index do not need to satisfy this constraint.)  The *pbRev value is
1029 ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if
1030 ** the ORDER BY clause is all ASC.
1031 */
1032 static int isSortingIndex(
1033   Parse *pParse,          /* Parsing context */
1034   ExprMaskSet *pMaskSet,  /* Mapping from table indices to bitmaps */
1035   Index *pIdx,            /* The index we are testing */
1036   int base,               /* Cursor number for the table to be sorted */
1037   ExprList *pOrderBy,     /* The ORDER BY clause */
1038   int nEqCol,             /* Number of index columns with == constraints */
1039   int *pbRev              /* Set to 1 if ORDER BY is DESC */
1040 ){
1041   int i, j;                       /* Loop counters */
1042   int sortOrder = 0;              /* XOR of index and ORDER BY sort direction */
1043   int nTerm;                      /* Number of ORDER BY terms */
1044   struct ExprList_item *pTerm;    /* A term of the ORDER BY clause */
1045   sqlite3 *db = pParse->db;
1046 
1047   assert( pOrderBy!=0 );
1048   nTerm = pOrderBy->nExpr;
1049   assert( nTerm>0 );
1050 
1051   /* Match terms of the ORDER BY clause against columns of
1052   ** the index.
1053   **
1054   ** Note that indices have pIdx->nColumn regular columns plus
1055   ** one additional column containing the rowid.  The rowid column
1056   ** of the index is also allowed to match against the ORDER BY
1057   ** clause.
1058   */
1059   for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<=pIdx->nColumn; i++){
1060     Expr *pExpr;       /* The expression of the ORDER BY pTerm */
1061     CollSeq *pColl;    /* The collating sequence of pExpr */
1062     int termSortOrder; /* Sort order for this term */
1063     int iColumn;       /* The i-th column of the index.  -1 for rowid */
1064     int iSortOrder;    /* 1 for DESC, 0 for ASC on the i-th index term */
1065     const char *zColl; /* Name of the collating sequence for i-th index term */
1066 
1067     pExpr = pTerm->pExpr;
1068     if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
1069       /* Can not use an index sort on anything that is not a column in the
1070       ** left-most table of the FROM clause */
1071       break;
1072     }
1073     pColl = sqlite3ExprCollSeq(pParse, pExpr);
1074     if( !pColl ){
1075       pColl = db->pDfltColl;
1076     }
1077     if( i<pIdx->nColumn ){
1078       iColumn = pIdx->aiColumn[i];
1079       if( iColumn==pIdx->pTable->iPKey ){
1080         iColumn = -1;
1081       }
1082       iSortOrder = pIdx->aSortOrder[i];
1083       zColl = pIdx->azColl[i];
1084     }else{
1085       iColumn = -1;
1086       iSortOrder = 0;
1087       zColl = pColl->zName;
1088     }
1089     if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){
1090       /* Term j of the ORDER BY clause does not match column i of the index */
1091       if( i<nEqCol ){
1092         /* If an index column that is constrained by == fails to match an
1093         ** ORDER BY term, that is OK.  Just ignore that column of the index
1094         */
1095         continue;
1096       }else if( i==pIdx->nColumn ){
1097         /* Index column i is the rowid.  All other terms match. */
1098         break;
1099       }else{
1100         /* If an index column fails to match and is not constrained by ==
1101         ** then the index cannot satisfy the ORDER BY constraint.
1102         */
1103         return 0;
1104       }
1105     }
1106     assert( pIdx->aSortOrder!=0 );
1107     assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 );
1108     assert( iSortOrder==0 || iSortOrder==1 );
1109     termSortOrder = iSortOrder ^ pTerm->sortOrder;
1110     if( i>nEqCol ){
1111       if( termSortOrder!=sortOrder ){
1112         /* Indices can only be used if all ORDER BY terms past the
1113         ** equality constraints are all either DESC or ASC. */
1114         return 0;
1115       }
1116     }else{
1117       sortOrder = termSortOrder;
1118     }
1119     j++;
1120     pTerm++;
1121     if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
1122       /* If the indexed column is the primary key and everything matches
1123       ** so far and none of the ORDER BY terms to the right reference other
1124       ** tables in the join, then we are assured that the index can be used
1125       ** to sort because the primary key is unique and so none of the other
1126       ** columns will make any difference
1127       */
1128       j = nTerm;
1129     }
1130   }
1131 
1132   *pbRev = sortOrder!=0;
1133   if( j>=nTerm ){
1134     /* All terms of the ORDER BY clause are covered by this index so
1135     ** this index can be used for sorting. */
1136     return 1;
1137   }
1138   if( pIdx->onError!=OE_None && i==pIdx->nColumn
1139       && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
1140     /* All terms of this index match some prefix of the ORDER BY clause
1141     ** and the index is UNIQUE and no terms on the tail of the ORDER BY
1142     ** clause reference other tables in a join.  If this is all true then
1143     ** the order by clause is superfluous. */
1144     return 1;
1145   }
1146   return 0;
1147 }
1148 
1149 /*
1150 ** Check table to see if the ORDER BY clause in pOrderBy can be satisfied
1151 ** by sorting in order of ROWID.  Return true if so and set *pbRev to be
1152 ** true for reverse ROWID and false for forward ROWID order.
1153 */
1154 static int sortableByRowid(
1155   int base,               /* Cursor number for table to be sorted */
1156   ExprList *pOrderBy,     /* The ORDER BY clause */
1157   ExprMaskSet *pMaskSet,  /* Mapping from tables to bitmaps */
1158   int *pbRev              /* Set to 1 if ORDER BY is DESC */
1159 ){
1160   Expr *p;
1161 
1162   assert( pOrderBy!=0 );
1163   assert( pOrderBy->nExpr>0 );
1164   p = pOrderBy->a[0].pExpr;
1165   if( p->op==TK_COLUMN && p->iTable==base && p->iColumn==-1
1166     && !referencesOtherTables(pOrderBy, pMaskSet, 1, base) ){
1167     *pbRev = pOrderBy->a[0].sortOrder;
1168     return 1;
1169   }
1170   return 0;
1171 }
1172 
1173 /*
1174 ** Prepare a crude estimate of the logarithm of the input value.
1175 ** The results need not be exact.  This is only used for estimating
1176 ** the total cost of performing operations with O(logN) or O(NlogN)
1177 ** complexity.  Because N is just a guess, it is no great tragedy if
1178 ** logN is a little off.
1179 */
1180 static double estLog(double N){
1181   double logN = 1;
1182   double x = 10;
1183   while( N>x ){
1184     logN += 1;
1185     x *= 10;
1186   }
1187   return logN;
1188 }
1189 
1190 /*
1191 ** Two routines for printing the content of an sqlite3_index_info
1192 ** structure.  Used for testing and debugging only.  If neither
1193 ** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines
1194 ** are no-ops.
1195 */
1196 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG)
1197 static void TRACE_IDX_INPUTS(sqlite3_index_info *p){
1198   int i;
1199   if( !sqlite3WhereTrace ) return;
1200   for(i=0; i<p->nConstraint; i++){
1201     sqlite3DebugPrintf("  constraint[%d]: col=%d termid=%d op=%d usabled=%d\n",
1202        i,
1203        p->aConstraint[i].iColumn,
1204        p->aConstraint[i].iTermOffset,
1205        p->aConstraint[i].op,
1206        p->aConstraint[i].usable);
1207   }
1208   for(i=0; i<p->nOrderBy; i++){
1209     sqlite3DebugPrintf("  orderby[%d]: col=%d desc=%d\n",
1210        i,
1211        p->aOrderBy[i].iColumn,
1212        p->aOrderBy[i].desc);
1213   }
1214 }
1215 static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){
1216   int i;
1217   if( !sqlite3WhereTrace ) return;
1218   for(i=0; i<p->nConstraint; i++){
1219     sqlite3DebugPrintf("  usage[%d]: argvIdx=%d omit=%d\n",
1220        i,
1221        p->aConstraintUsage[i].argvIndex,
1222        p->aConstraintUsage[i].omit);
1223   }
1224   sqlite3DebugPrintf("  idxNum=%d\n", p->idxNum);
1225   sqlite3DebugPrintf("  idxStr=%s\n", p->idxStr);
1226   sqlite3DebugPrintf("  orderByConsumed=%d\n", p->orderByConsumed);
1227   sqlite3DebugPrintf("  estimatedCost=%g\n", p->estimatedCost);
1228 }
1229 #else
1230 #define TRACE_IDX_INPUTS(A)
1231 #define TRACE_IDX_OUTPUTS(A)
1232 #endif
1233 
1234 #ifndef SQLITE_OMIT_VIRTUALTABLE
1235 /*
1236 ** Compute the best index for a virtual table.
1237 **
1238 ** The best index is computed by the xBestIndex method of the virtual
1239 ** table module.  This routine is really just a wrapper that sets up
1240 ** the sqlite3_index_info structure that is used to communicate with
1241 ** xBestIndex.
1242 **
1243 ** In a join, this routine might be called multiple times for the
1244 ** same virtual table.  The sqlite3_index_info structure is created
1245 ** and initialized on the first invocation and reused on all subsequent
1246 ** invocations.  The sqlite3_index_info structure is also used when
1247 ** code is generated to access the virtual table.  The whereInfoDelete()
1248 ** routine takes care of freeing the sqlite3_index_info structure after
1249 ** everybody has finished with it.
1250 */
1251 static double bestVirtualIndex(
1252   Parse *pParse,                 /* The parsing context */
1253   WhereClause *pWC,              /* The WHERE clause */
1254   struct SrcList_item *pSrc,     /* The FROM clause term to search */
1255   Bitmask notReady,              /* Mask of cursors that are not available */
1256   ExprList *pOrderBy,            /* The order by clause */
1257   int orderByUsable,             /* True if we can potential sort */
1258   sqlite3_index_info **ppIdxInfo /* Index information passed to xBestIndex */
1259 ){
1260   Table *pTab = pSrc->pTab;
1261   sqlite3_index_info *pIdxInfo;
1262   struct sqlite3_index_constraint *pIdxCons;
1263   struct sqlite3_index_orderby *pIdxOrderBy;
1264   struct sqlite3_index_constraint_usage *pUsage;
1265   WhereTerm *pTerm;
1266   int i, j;
1267   int nOrderBy;
1268   int rc;
1269 
1270   /* If the sqlite3_index_info structure has not been previously
1271   ** allocated and initialized for this virtual table, then allocate
1272   ** and initialize it now
1273   */
1274   pIdxInfo = *ppIdxInfo;
1275   if( pIdxInfo==0 ){
1276     WhereTerm *pTerm;
1277     int nTerm;
1278     WHERETRACE(("Recomputing index info for %s...\n", pTab->zName));
1279 
1280     /* Count the number of possible WHERE clause constraints referring
1281     ** to this virtual table */
1282     for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
1283       if( pTerm->leftCursor != pSrc->iCursor ) continue;
1284       if( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
1285       testcase( pTerm->eOperator==WO_IN );
1286       testcase( pTerm->eOperator==WO_ISNULL );
1287       if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
1288       nTerm++;
1289     }
1290 
1291     /* If the ORDER BY clause contains only columns in the current
1292     ** virtual table then allocate space for the aOrderBy part of
1293     ** the sqlite3_index_info structure.
1294     */
1295     nOrderBy = 0;
1296     if( pOrderBy ){
1297       for(i=0; i<pOrderBy->nExpr; i++){
1298         Expr *pExpr = pOrderBy->a[i].pExpr;
1299         if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
1300       }
1301       if( i==pOrderBy->nExpr ){
1302         nOrderBy = pOrderBy->nExpr;
1303       }
1304     }
1305 
1306     /* Allocate the sqlite3_index_info structure
1307     */
1308     pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
1309                              + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
1310                              + sizeof(*pIdxOrderBy)*nOrderBy );
1311     if( pIdxInfo==0 ){
1312       sqlite3ErrorMsg(pParse, "out of memory");
1313       return 0.0;
1314     }
1315     *ppIdxInfo = pIdxInfo;
1316 
1317     /* Initialize the structure.  The sqlite3_index_info structure contains
1318     ** many fields that are declared "const" to prevent xBestIndex from
1319     ** changing them.  We have to do some funky casting in order to
1320     ** initialize those fields.
1321     */
1322     pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
1323     pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
1324     pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
1325     *(int*)&pIdxInfo->nConstraint = nTerm;
1326     *(int*)&pIdxInfo->nOrderBy = nOrderBy;
1327     *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons;
1328     *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy;
1329     *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
1330                                                                      pUsage;
1331 
1332     for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
1333       if( pTerm->leftCursor != pSrc->iCursor ) continue;
1334       if( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
1335       testcase( pTerm->eOperator==WO_IN );
1336       testcase( pTerm->eOperator==WO_ISNULL );
1337       if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
1338       pIdxCons[j].iColumn = pTerm->leftColumn;
1339       pIdxCons[j].iTermOffset = i;
1340       pIdxCons[j].op = pTerm->eOperator;
1341       /* The direct assignment in the previous line is possible only because
1342       ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
1343       ** following asserts verify this fact. */
1344       assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
1345       assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
1346       assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
1347       assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
1348       assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
1349       assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
1350       assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
1351       j++;
1352     }
1353     for(i=0; i<nOrderBy; i++){
1354       Expr *pExpr = pOrderBy->a[i].pExpr;
1355       pIdxOrderBy[i].iColumn = pExpr->iColumn;
1356       pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder;
1357     }
1358   }
1359 
1360   /* At this point, the sqlite3_index_info structure that pIdxInfo points
1361   ** to will have been initialized, either during the current invocation or
1362   ** during some prior invocation.  Now we just have to customize the
1363   ** details of pIdxInfo for the current invocation and pass it to
1364   ** xBestIndex.
1365   */
1366 
1367   /* The module name must be defined. Also, by this point there must
1368   ** be a pointer to an sqlite3_vtab structure. Otherwise
1369   ** sqlite3ViewGetColumnNames() would have picked up the error.
1370   */
1371   assert( pTab->azModuleArg && pTab->azModuleArg[0] );
1372   assert( pTab->pVtab );
1373 #if 0
1374   if( pTab->pVtab==0 ){
1375     sqlite3ErrorMsg(pParse, "undefined module %s for table %s",
1376         pTab->azModuleArg[0], pTab->zName);
1377     return 0.0;
1378   }
1379 #endif
1380 
1381   /* Set the aConstraint[].usable fields and initialize all
1382   ** output variables to zero.
1383   **
1384   ** aConstraint[].usable is true for constraints where the right-hand
1385   ** side contains only references to tables to the left of the current
1386   ** table.  In other words, if the constraint is of the form:
1387   **
1388   **           column = expr
1389   **
1390   ** and we are evaluating a join, then the constraint on column is
1391   ** only valid if all tables referenced in expr occur to the left
1392   ** of the table containing column.
1393   **
1394   ** The aConstraints[] array contains entries for all constraints
1395   ** on the current table.  That way we only have to compute it once
1396   ** even though we might try to pick the best index multiple times.
1397   ** For each attempt at picking an index, the order of tables in the
1398   ** join might be different so we have to recompute the usable flag
1399   ** each time.
1400   */
1401   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
1402   pUsage = pIdxInfo->aConstraintUsage;
1403   for(i=0; i<pIdxInfo->nConstraint; i++, pIdxCons++){
1404     j = pIdxCons->iTermOffset;
1405     pTerm = &pWC->a[j];
1406     pIdxCons->usable =  (pTerm->prereqRight & notReady)==0;
1407   }
1408   memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint);
1409   if( pIdxInfo->needToFreeIdxStr ){
1410     sqlite3_free(pIdxInfo->idxStr);
1411   }
1412   pIdxInfo->idxStr = 0;
1413   pIdxInfo->idxNum = 0;
1414   pIdxInfo->needToFreeIdxStr = 0;
1415   pIdxInfo->orderByConsumed = 0;
1416   pIdxInfo->estimatedCost = SQLITE_BIG_DBL / 2.0;
1417   nOrderBy = pIdxInfo->nOrderBy;
1418   if( pIdxInfo->nOrderBy && !orderByUsable ){
1419     *(int*)&pIdxInfo->nOrderBy = 0;
1420   }
1421 
1422   (void)sqlite3SafetyOff(pParse->db);
1423   WHERETRACE(("xBestIndex for %s\n", pTab->zName));
1424   TRACE_IDX_INPUTS(pIdxInfo);
1425   rc = pTab->pVtab->pModule->xBestIndex(pTab->pVtab, pIdxInfo);
1426   TRACE_IDX_OUTPUTS(pIdxInfo);
1427   (void)sqlite3SafetyOn(pParse->db);
1428 
1429   for(i=0; i<pIdxInfo->nConstraint; i++){
1430     if( !pIdxInfo->aConstraint[i].usable && pUsage[i].argvIndex>0 ){
1431       sqlite3ErrorMsg(pParse,
1432           "table %s: xBestIndex returned an invalid plan", pTab->zName);
1433       return 0.0;
1434     }
1435   }
1436 
1437   if( rc!=SQLITE_OK ){
1438     if( rc==SQLITE_NOMEM ){
1439       pParse->db->mallocFailed = 1;
1440     }else {
1441       sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc));
1442     }
1443   }
1444   *(int*)&pIdxInfo->nOrderBy = nOrderBy;
1445 
1446   return pIdxInfo->estimatedCost;
1447 }
1448 #endif /* SQLITE_OMIT_VIRTUALTABLE */
1449 
1450 /*
1451 ** Find the best index for accessing a particular table.  Return a pointer
1452 ** to the index, flags that describe how the index should be used, the
1453 ** number of equality constraints, and the "cost" for this index.
1454 **
1455 ** The lowest cost index wins.  The cost is an estimate of the amount of
1456 ** CPU and disk I/O need to process the request using the selected index.
1457 ** Factors that influence cost include:
1458 **
1459 **    *  The estimated number of rows that will be retrieved.  (The
1460 **       fewer the better.)
1461 **
1462 **    *  Whether or not sorting must occur.
1463 **
1464 **    *  Whether or not there must be separate lookups in the
1465 **       index and in the main table.
1466 **
1467 */
1468 static double bestIndex(
1469   Parse *pParse,              /* The parsing context */
1470   WhereClause *pWC,           /* The WHERE clause */
1471   struct SrcList_item *pSrc,  /* The FROM clause term to search */
1472   Bitmask notReady,           /* Mask of cursors that are not available */
1473   ExprList *pOrderBy,         /* The order by clause */
1474   Index **ppIndex,            /* Make *ppIndex point to the best index */
1475   int *pFlags,                /* Put flags describing this choice in *pFlags */
1476   int *pnEq                   /* Put the number of == or IN constraints here */
1477 ){
1478   WhereTerm *pTerm;
1479   Index *bestIdx = 0;         /* Index that gives the lowest cost */
1480   double lowestCost;          /* The cost of using bestIdx */
1481   int bestFlags = 0;          /* Flags associated with bestIdx */
1482   int bestNEq = 0;            /* Best value for nEq */
1483   int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
1484   Index *pProbe;              /* An index we are evaluating */
1485   int rev;                    /* True to scan in reverse order */
1486   int flags;                  /* Flags associated with pProbe */
1487   int nEq;                    /* Number of == or IN constraints */
1488   int eqTermMask;             /* Mask of valid equality operators */
1489   double cost;                /* Cost of using pProbe */
1490 
1491   WHERETRACE(("bestIndex: tbl=%s notReady=%llx\n", pSrc->pTab->zName, notReady));
1492   lowestCost = SQLITE_BIG_DBL;
1493   pProbe = pSrc->pTab->pIndex;
1494 
1495   /* If the table has no indices and there are no terms in the where
1496   ** clause that refer to the ROWID, then we will never be able to do
1497   ** anything other than a full table scan on this table.  We might as
1498   ** well put it first in the join order.  That way, perhaps it can be
1499   ** referenced by other tables in the join.
1500   */
1501   if( pProbe==0 &&
1502      findTerm(pWC, iCur, -1, 0, WO_EQ|WO_IN|WO_LT|WO_LE|WO_GT|WO_GE,0)==0 &&
1503      (pOrderBy==0 || !sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev)) ){
1504     *pFlags = 0;
1505     *ppIndex = 0;
1506     *pnEq = 0;
1507     return 0.0;
1508   }
1509 
1510   /* Check for a rowid=EXPR or rowid IN (...) constraints
1511   */
1512   pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
1513   if( pTerm ){
1514     Expr *pExpr;
1515     *ppIndex = 0;
1516     bestFlags = WHERE_ROWID_EQ;
1517     if( pTerm->eOperator & WO_EQ ){
1518       /* Rowid== is always the best pick.  Look no further.  Because only
1519       ** a single row is generated, output is always in sorted order */
1520       *pFlags = WHERE_ROWID_EQ | WHERE_UNIQUE;
1521       *pnEq = 1;
1522       WHERETRACE(("... best is rowid\n"));
1523       return 0.0;
1524     }else if( (pExpr = pTerm->pExpr)->pList!=0 ){
1525       /* Rowid IN (LIST): cost is NlogN where N is the number of list
1526       ** elements.  */
1527       lowestCost = pExpr->pList->nExpr;
1528       lowestCost *= estLog(lowestCost);
1529     }else{
1530       /* Rowid IN (SELECT): cost is NlogN where N is the number of rows
1531       ** in the result of the inner select.  We have no way to estimate
1532       ** that value so make a wild guess. */
1533       lowestCost = 200;
1534     }
1535     WHERETRACE(("... rowid IN cost: %.9g\n", lowestCost));
1536   }
1537 
1538   /* Estimate the cost of a table scan.  If we do not know how many
1539   ** entries are in the table, use 1 million as a guess.
1540   */
1541   cost = pProbe ? pProbe->aiRowEst[0] : 1000000;
1542   WHERETRACE(("... table scan base cost: %.9g\n", cost));
1543   flags = WHERE_ROWID_RANGE;
1544 
1545   /* Check for constraints on a range of rowids in a table scan.
1546   */
1547   pTerm = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE|WO_GT|WO_GE, 0);
1548   if( pTerm ){
1549     if( findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0) ){
1550       flags |= WHERE_TOP_LIMIT;
1551       cost /= 3;  /* Guess that rowid<EXPR eliminates two-thirds or rows */
1552     }
1553     if( findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0) ){
1554       flags |= WHERE_BTM_LIMIT;
1555       cost /= 3;  /* Guess that rowid>EXPR eliminates two-thirds of rows */
1556     }
1557     WHERETRACE(("... rowid range reduces cost to %.9g\n", cost));
1558   }else{
1559     flags = 0;
1560   }
1561 
1562   /* If the table scan does not satisfy the ORDER BY clause, increase
1563   ** the cost by NlogN to cover the expense of sorting. */
1564   if( pOrderBy ){
1565     if( sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev) ){
1566       flags |= WHERE_ORDERBY|WHERE_ROWID_RANGE;
1567       if( rev ){
1568         flags |= WHERE_REVERSE;
1569       }
1570     }else{
1571       cost += cost*estLog(cost);
1572       WHERETRACE(("... sorting increases cost to %.9g\n", cost));
1573     }
1574   }
1575   if( cost<lowestCost ){
1576     lowestCost = cost;
1577     bestFlags = flags;
1578   }
1579 
1580   /* If the pSrc table is the right table of a LEFT JOIN then we may not
1581   ** use an index to satisfy IS NULL constraints on that table.  This is
1582   ** because columns might end up being NULL if the table does not match -
1583   ** a circumstance which the index cannot help us discover.  Ticket #2177.
1584   */
1585   if( (pSrc->jointype & JT_LEFT)!=0 ){
1586     eqTermMask = WO_EQ|WO_IN;
1587   }else{
1588     eqTermMask = WO_EQ|WO_IN|WO_ISNULL;
1589   }
1590 
1591   /* Look at each index.
1592   */
1593   for(; pProbe; pProbe=pProbe->pNext){
1594     int i;                       /* Loop counter */
1595     double inMultiplier = 1;
1596 
1597     WHERETRACE(("... index %s:\n", pProbe->zName));
1598 
1599     /* Count the number of columns in the index that are satisfied
1600     ** by x=EXPR constraints or x IN (...) constraints.
1601     */
1602     flags = 0;
1603     for(i=0; i<pProbe->nColumn; i++){
1604       int j = pProbe->aiColumn[i];
1605       pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pProbe);
1606       if( pTerm==0 ) break;
1607       flags |= WHERE_COLUMN_EQ;
1608       if( pTerm->eOperator & WO_IN ){
1609         Expr *pExpr = pTerm->pExpr;
1610         flags |= WHERE_COLUMN_IN;
1611         if( pExpr->pSelect!=0 ){
1612           inMultiplier *= 25;
1613         }else if( ALWAYS(pExpr->pList) ){
1614           inMultiplier *= pExpr->pList->nExpr + 1;
1615         }
1616       }
1617     }
1618     cost = pProbe->aiRowEst[i] * inMultiplier * estLog(inMultiplier);
1619     nEq = i;
1620     if( pProbe->onError!=OE_None && (flags & WHERE_COLUMN_IN)==0
1621          && nEq==pProbe->nColumn ){
1622       flags |= WHERE_UNIQUE;
1623     }
1624     WHERETRACE(("...... nEq=%d inMult=%.9g cost=%.9g\n",nEq,inMultiplier,cost));
1625 
1626     /* Look for range constraints
1627     */
1628     if( nEq<pProbe->nColumn ){
1629       int j = pProbe->aiColumn[nEq];
1630       pTerm = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pProbe);
1631       if( pTerm ){
1632         flags |= WHERE_COLUMN_RANGE;
1633         if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pProbe) ){
1634           flags |= WHERE_TOP_LIMIT;
1635           cost /= 3;
1636         }
1637         if( findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pProbe) ){
1638           flags |= WHERE_BTM_LIMIT;
1639           cost /= 3;
1640         }
1641         WHERETRACE(("...... range reduces cost to %.9g\n", cost));
1642       }
1643     }
1644 
1645     /* Add the additional cost of sorting if that is a factor.
1646     */
1647     if( pOrderBy ){
1648       if( (flags & WHERE_COLUMN_IN)==0 &&
1649            isSortingIndex(pParse,pWC->pMaskSet,pProbe,iCur,pOrderBy,nEq,&rev) ){
1650         if( flags==0 ){
1651           flags = WHERE_COLUMN_RANGE;
1652         }
1653         flags |= WHERE_ORDERBY;
1654         if( rev ){
1655           flags |= WHERE_REVERSE;
1656         }
1657       }else{
1658         cost += cost*estLog(cost);
1659         WHERETRACE(("...... orderby increases cost to %.9g\n", cost));
1660       }
1661     }
1662 
1663     /* Check to see if we can get away with using just the index without
1664     ** ever reading the table.  If that is the case, then halve the
1665     ** cost of this index.
1666     */
1667     if( flags && pSrc->colUsed < (((Bitmask)1)<<(BMS-1)) ){
1668       Bitmask m = pSrc->colUsed;
1669       int j;
1670       for(j=0; j<pProbe->nColumn; j++){
1671         int x = pProbe->aiColumn[j];
1672         if( x<BMS-1 ){
1673           m &= ~(((Bitmask)1)<<x);
1674         }
1675       }
1676       if( m==0 ){
1677         flags |= WHERE_IDX_ONLY;
1678         cost /= 2;
1679         WHERETRACE(("...... idx-only reduces cost to %.9g\n", cost));
1680       }
1681     }
1682 
1683     /* If this index has achieved the lowest cost so far, then use it.
1684     */
1685     if( flags && cost < lowestCost ){
1686       bestIdx = pProbe;
1687       lowestCost = cost;
1688       bestFlags = flags;
1689       bestNEq = nEq;
1690     }
1691   }
1692 
1693   /* Report the best result
1694   */
1695   *ppIndex = bestIdx;
1696   WHERETRACE(("best index is %s, cost=%.9g, flags=%x, nEq=%d\n",
1697         bestIdx ? bestIdx->zName : "(none)", lowestCost, bestFlags, bestNEq));
1698   *pFlags = bestFlags | eqTermMask;
1699   *pnEq = bestNEq;
1700   return lowestCost;
1701 }
1702 
1703 
1704 /*
1705 ** Disable a term in the WHERE clause.  Except, do not disable the term
1706 ** if it controls a LEFT OUTER JOIN and it did not originate in the ON
1707 ** or USING clause of that join.
1708 **
1709 ** Consider the term t2.z='ok' in the following queries:
1710 **
1711 **   (1)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok'
1712 **   (2)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok'
1713 **   (3)  SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok'
1714 **
1715 ** The t2.z='ok' is disabled in the in (2) because it originates
1716 ** in the ON clause.  The term is disabled in (3) because it is not part
1717 ** of a LEFT OUTER JOIN.  In (1), the term is not disabled.
1718 **
1719 ** Disabling a term causes that term to not be tested in the inner loop
1720 ** of the join.  Disabling is an optimization.  When terms are satisfied
1721 ** by indices, we disable them to prevent redundant tests in the inner
1722 ** loop.  We would get the correct results if nothing were ever disabled,
1723 ** but joins might run a little slower.  The trick is to disable as much
1724 ** as we can without disabling too much.  If we disabled in (1), we'd get
1725 ** the wrong answer.  See ticket #813.
1726 */
1727 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
1728   if( pTerm
1729       && ALWAYS((pTerm->flags & TERM_CODED)==0)
1730       && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
1731   ){
1732     pTerm->flags |= TERM_CODED;
1733     if( pTerm->iParent>=0 ){
1734       WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
1735       if( (--pOther->nChild)==0 ){
1736         disableTerm(pLevel, pOther);
1737       }
1738     }
1739   }
1740 }
1741 
1742 /*
1743 ** Apply the affinities associated with the first n columns of index
1744 ** pIdx to the values in the n registers starting at base.
1745 */
1746 static void codeApplyAffinity(Parse *pParse, int base, int n, Index *pIdx){
1747   if( n>0 ){
1748     Vdbe *v = pParse->pVdbe;
1749     assert( v!=0 );
1750     sqlite3VdbeAddOp2(v, OP_Affinity, base, n);
1751     sqlite3IndexAffinityStr(v, pIdx);
1752     sqlite3ExprCacheAffinityChange(pParse, base, n);
1753   }
1754 }
1755 
1756 
1757 /*
1758 ** Generate code for a single equality term of the WHERE clause.  An equality
1759 ** term can be either X=expr or X IN (...).   pTerm is the term to be
1760 ** coded.
1761 **
1762 ** The current value for the constraint is left in register iReg.
1763 **
1764 ** For a constraint of the form X=expr, the expression is evaluated and its
1765 ** result is left on the stack.  For constraints of the form X IN (...)
1766 ** this routine sets up a loop that will iterate over all values of X.
1767 */
1768 static int codeEqualityTerm(
1769   Parse *pParse,      /* The parsing context */
1770   WhereTerm *pTerm,   /* The term of the WHERE clause to be coded */
1771   WhereLevel *pLevel, /* When level of the FROM clause we are working on */
1772   int iTarget         /* Attempt to leave results in this register */
1773 ){
1774   Expr *pX = pTerm->pExpr;
1775   Vdbe *v = pParse->pVdbe;
1776   int iReg;                  /* Register holding results */
1777 
1778   if( iTarget<=0 ){
1779     iReg = iTarget = sqlite3GetTempReg(pParse);
1780   }
1781   if( pX->op==TK_EQ ){
1782     iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget);
1783   }else if( pX->op==TK_ISNULL ){
1784     iReg = iTarget;
1785     sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
1786 #ifndef SQLITE_OMIT_SUBQUERY
1787   }else{
1788     int eType;
1789     int iTab;
1790     struct InLoop *pIn;
1791 
1792     assert( pX->op==TK_IN );
1793     iReg = iTarget;
1794     eType = sqlite3FindInIndex(pParse, pX, 0);
1795     iTab = pX->iTable;
1796     sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
1797     VdbeComment((v, "%.*s", pX->span.n, pX->span.z));
1798     if( pLevel->nIn==0 ){
1799       pLevel->nxt = sqlite3VdbeMakeLabel(v);
1800     }
1801     pLevel->nIn++;
1802     pLevel->aInLoop = sqlite3DbReallocOrFree(pParse->db, pLevel->aInLoop,
1803                                     sizeof(pLevel->aInLoop[0])*pLevel->nIn);
1804     pIn = pLevel->aInLoop;
1805     if( pIn ){
1806       pIn += pLevel->nIn - 1;
1807       pIn->iCur = iTab;
1808       if( eType==IN_INDEX_ROWID ){
1809         pIn->topAddr = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg);
1810       }else{
1811         pIn->topAddr = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg);
1812       }
1813       sqlite3VdbeAddOp1(v, OP_IsNull, iReg);
1814     }else{
1815       pLevel->nIn = 0;
1816     }
1817 #endif
1818   }
1819   disableTerm(pLevel, pTerm);
1820   return iReg;
1821 }
1822 
1823 /*
1824 ** Generate code that will evaluate all == and IN constraints for an
1825 ** index.  The values for all constraints are left on the stack.
1826 **
1827 ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
1828 ** Suppose the WHERE clause is this:  a==5 AND b IN (1,2,3) AND c>5 AND c<10
1829 ** The index has as many as three equality constraints, but in this
1830 ** example, the third "c" value is an inequality.  So only two
1831 ** constraints are coded.  This routine will generate code to evaluate
1832 ** a==5 and b IN (1,2,3).  The current values for a and b will be left
1833 ** on the stack - a is the deepest and b the shallowest.
1834 **
1835 ** In the example above nEq==2.  But this subroutine works for any value
1836 ** of nEq including 0.  If nEq==0, this routine is nearly a no-op.
1837 ** The only thing it does is allocate the pLevel->iMem memory cell.
1838 **
1839 ** This routine always allocates at least one memory cell and puts
1840 ** the address of that memory cell in pLevel->iMem.  The code that
1841 ** calls this routine will use pLevel->iMem to store the termination
1842 ** key value of the loop.  If one or more IN operators appear, then
1843 ** this routine allocates an additional nEq memory cells for internal
1844 ** use.
1845 */
1846 static int codeAllEqualityTerms(
1847   Parse *pParse,        /* Parsing context */
1848   WhereLevel *pLevel,   /* Which nested loop of the FROM we are coding */
1849   WhereClause *pWC,     /* The WHERE clause */
1850   Bitmask notReady,     /* Which parts of FROM have not yet been coded */
1851   int nExtraReg         /* Number of extra registers to allocate */
1852 ){
1853   int nEq = pLevel->nEq;        /* The number of == or IN constraints to code */
1854   Vdbe *v = pParse->pVdbe;      /* The virtual machine under construction */
1855   Index *pIdx = pLevel->pIdx;   /* The index being used for this loop */
1856   int iCur = pLevel->iTabCur;   /* The cursor of the table */
1857   WhereTerm *pTerm;             /* A single constraint term */
1858   int j;                        /* Loop counter */
1859   int regBase;                  /* Base register */
1860 
1861   /* Figure out how many memory cells we will need then allocate them.
1862   ** We always need at least one used to store the loop terminator
1863   ** value.  If there are IN operators we'll need one for each == or
1864   ** IN constraint.
1865   */
1866   pLevel->iMem = pParse->nMem + 1;
1867   regBase = pParse->nMem + 2;
1868   pParse->nMem += pLevel->nEq + 2 + nExtraReg;
1869 
1870   /* Evaluate the equality constraints
1871   */
1872   assert( pIdx->nColumn>=nEq );
1873   for(j=0; j<nEq; j++){
1874     int r1;
1875     int k = pIdx->aiColumn[j];
1876     pTerm = findTerm(pWC, iCur, k, notReady, pLevel->flags, pIdx);
1877     if( NEVER(pTerm==0) ) break;
1878     assert( (pTerm->flags & TERM_CODED)==0 );
1879     r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
1880     if( r1!=regBase+j ){
1881       sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j);
1882     }
1883     testcase( pTerm->eOperator & WO_ISNULL );
1884     testcase( pTerm->eOperator & WO_IN );
1885     if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){
1886       sqlite3VdbeAddOp2(v, OP_IsNull, regBase+j, pLevel->brk);
1887     }
1888   }
1889   return regBase;
1890 }
1891 
1892 #if defined(SQLITE_TEST)
1893 /*
1894 ** The following variable holds a text description of query plan generated
1895 ** by the most recent call to sqlite3WhereBegin().  Each call to WhereBegin
1896 ** overwrites the previous.  This information is used for testing and
1897 ** analysis only.
1898 */
1899 char sqlite3_query_plan[BMS*2*40];  /* Text of the join */
1900 static int nQPlan = 0;              /* Next free slow in _query_plan[] */
1901 
1902 #endif /* SQLITE_TEST */
1903 
1904 
1905 /*
1906 ** Free a WhereInfo structure
1907 */
1908 static void whereInfoFree(WhereInfo *pWInfo){
1909   if( pWInfo ){
1910     int i;
1911     for(i=0; i<pWInfo->nLevel; i++){
1912       sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
1913       if( pInfo ){
1914         assert( pInfo->needToFreeIdxStr==0 );
1915         sqlite3_free(pInfo);
1916       }
1917     }
1918     sqlite3_free(pWInfo);
1919   }
1920 }
1921 
1922 
1923 /*
1924 ** Generate the beginning of the loop used for WHERE clause processing.
1925 ** The return value is a pointer to an opaque structure that contains
1926 ** information needed to terminate the loop.  Later, the calling routine
1927 ** should invoke sqlite3WhereEnd() with the return value of this function
1928 ** in order to complete the WHERE clause processing.
1929 **
1930 ** If an error occurs, this routine returns NULL.
1931 **
1932 ** The basic idea is to do a nested loop, one loop for each table in
1933 ** the FROM clause of a select.  (INSERT and UPDATE statements are the
1934 ** same as a SELECT with only a single table in the FROM clause.)  For
1935 ** example, if the SQL is this:
1936 **
1937 **       SELECT * FROM t1, t2, t3 WHERE ...;
1938 **
1939 ** Then the code generated is conceptually like the following:
1940 **
1941 **      foreach row1 in t1 do       \    Code generated
1942 **        foreach row2 in t2 do      |-- by sqlite3WhereBegin()
1943 **          foreach row3 in t3 do   /
1944 **            ...
1945 **          end                     \    Code generated
1946 **        end                        |-- by sqlite3WhereEnd()
1947 **      end                         /
1948 **
1949 ** Note that the loops might not be nested in the order in which they
1950 ** appear in the FROM clause if a different order is better able to make
1951 ** use of indices.  Note also that when the IN operator appears in
1952 ** the WHERE clause, it might result in additional nested loops for
1953 ** scanning through all values on the right-hand side of the IN.
1954 **
1955 ** There are Btree cursors associated with each table.  t1 uses cursor
1956 ** number pTabList->a[0].iCursor.  t2 uses the cursor pTabList->a[1].iCursor.
1957 ** And so forth.  This routine generates code to open those VDBE cursors
1958 ** and sqlite3WhereEnd() generates the code to close them.
1959 **
1960 ** The code that sqlite3WhereBegin() generates leaves the cursors named
1961 ** in pTabList pointing at their appropriate entries.  The [...] code
1962 ** can use OP_Column and OP_Rowid opcodes on these cursors to extract
1963 ** data from the various tables of the loop.
1964 **
1965 ** If the WHERE clause is empty, the foreach loops must each scan their
1966 ** entire tables.  Thus a three-way join is an O(N^3) operation.  But if
1967 ** the tables have indices and there are terms in the WHERE clause that
1968 ** refer to those indices, a complete table scan can be avoided and the
1969 ** code will run much faster.  Most of the work of this routine is checking
1970 ** to see if there are indices that can be used to speed up the loop.
1971 **
1972 ** Terms of the WHERE clause are also used to limit which rows actually
1973 ** make it to the "..." in the middle of the loop.  After each "foreach",
1974 ** terms of the WHERE clause that use only terms in that loop and outer
1975 ** loops are evaluated and if false a jump is made around all subsequent
1976 ** inner loops (or around the "..." if the test occurs within the inner-
1977 ** most loop)
1978 **
1979 ** OUTER JOINS
1980 **
1981 ** An outer join of tables t1 and t2 is conceptally coded as follows:
1982 **
1983 **    foreach row1 in t1 do
1984 **      flag = 0
1985 **      foreach row2 in t2 do
1986 **        start:
1987 **          ...
1988 **          flag = 1
1989 **      end
1990 **      if flag==0 then
1991 **        move the row2 cursor to a null row
1992 **        goto start
1993 **      fi
1994 **    end
1995 **
1996 ** ORDER BY CLAUSE PROCESSING
1997 **
1998 ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
1999 ** if there is one.  If there is no ORDER BY clause or if this routine
2000 ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
2001 **
2002 ** If an index can be used so that the natural output order of the table
2003 ** scan is correct for the ORDER BY clause, then that index is used and
2004 ** *ppOrderBy is set to NULL.  This is an optimization that prevents an
2005 ** unnecessary sort of the result set if an index appropriate for the
2006 ** ORDER BY clause already exists.
2007 **
2008 ** If the where clause loops cannot be arranged to provide the correct
2009 ** output order, then the *ppOrderBy is unchanged.
2010 */
2011 WhereInfo *sqlite3WhereBegin(
2012   Parse *pParse,        /* The parser context */
2013   SrcList *pTabList,    /* A list of all tables to be scanned */
2014   Expr *pWhere,         /* The WHERE clause */
2015   ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
2016   u8 wflags             /* One of the WHERE_* flags defined in sqliteInt.h */
2017 ){
2018   int i;                     /* Loop counter */
2019   WhereInfo *pWInfo;         /* Will become the return value of this function */
2020   Vdbe *v = pParse->pVdbe;   /* The virtual database engine */
2021   int brk, cont = 0;         /* Addresses used during code generation */
2022   Bitmask notReady;          /* Cursors that are not yet positioned */
2023   WhereTerm *pTerm;          /* A single term in the WHERE clause */
2024   ExprMaskSet maskSet;       /* The expression mask set */
2025   WhereClause wc;            /* The WHERE clause is divided into these terms */
2026   struct SrcList_item *pTabItem;  /* A single entry from pTabList */
2027   WhereLevel *pLevel;             /* A single level in the pWInfo list */
2028   int iFrom;                      /* First unused FROM clause element */
2029   int andFlags;              /* AND-ed combination of all wc.a[].flags */
2030   sqlite3 *db;               /* Database connection */
2031   ExprList *pOrderBy = 0;
2032 
2033   /* The number of tables in the FROM clause is limited by the number of
2034   ** bits in a Bitmask
2035   */
2036   if( pTabList->nSrc>BMS ){
2037     sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
2038     return 0;
2039   }
2040 
2041   if( ppOrderBy ){
2042     pOrderBy = *ppOrderBy;
2043   }
2044 
2045   /* Split the WHERE clause into separate subexpressions where each
2046   ** subexpression is separated by an AND operator.
2047   */
2048   initMaskSet(&maskSet);
2049   whereClauseInit(&wc, pParse, &maskSet);
2050   sqlite3ExprCodeConstants(pParse, pWhere);
2051   whereSplit(&wc, pWhere, TK_AND);
2052 
2053   /* Allocate and initialize the WhereInfo structure that will become the
2054   ** return value.
2055   */
2056   db = pParse->db;
2057   pWInfo = sqlite3DbMallocZero(db,
2058                       sizeof(WhereInfo) + pTabList->nSrc*sizeof(WhereLevel));
2059   if( db->mallocFailed ){
2060     goto whereBeginNoMem;
2061   }
2062   pWInfo->nLevel = pTabList->nSrc;
2063   pWInfo->pParse = pParse;
2064   pWInfo->pTabList = pTabList;
2065   pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
2066 
2067   /* Special case: a WHERE clause that is constant.  Evaluate the
2068   ** expression and either jump over all of the code or fall thru.
2069   */
2070   if( pWhere && (pTabList->nSrc==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){
2071     sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL);
2072     pWhere = 0;
2073   }
2074 
2075   /* Assign a bit from the bitmask to every term in the FROM clause.
2076   **
2077   ** When assigning bitmask values to FROM clause cursors, it must be
2078   ** the case that if X is the bitmask for the N-th FROM clause term then
2079   ** the bitmask for all FROM clause terms to the left of the N-th term
2080   ** is (X-1).   An expression from the ON clause of a LEFT JOIN can use
2081   ** its Expr.iRightJoinTable value to find the bitmask of the right table
2082   ** of the join.  Subtracting one from the right table bitmask gives a
2083   ** bitmask for all tables to the left of the join.  Knowing the bitmask
2084   ** for all tables to the left of a left join is important.  Ticket #3015.
2085   */
2086   for(i=0; i<pTabList->nSrc; i++){
2087     createMask(&maskSet, pTabList->a[i].iCursor);
2088   }
2089 #ifndef NDEBUG
2090   {
2091     Bitmask toTheLeft = 0;
2092     for(i=0; i<pTabList->nSrc; i++){
2093       Bitmask m = getMask(&maskSet, pTabList->a[i].iCursor);
2094       assert( (m-1)==toTheLeft );
2095       toTheLeft |= m;
2096     }
2097   }
2098 #endif
2099 
2100   /* Analyze all of the subexpressions.  Note that exprAnalyze() might
2101   ** add new virtual terms onto the end of the WHERE clause.  We do not
2102   ** want to analyze these virtual terms, so start analyzing at the end
2103   ** and work forward so that the added virtual terms are never processed.
2104   */
2105   exprAnalyzeAll(pTabList, &wc);
2106   if( db->mallocFailed ){
2107     goto whereBeginNoMem;
2108   }
2109 
2110   /* Chose the best index to use for each table in the FROM clause.
2111   **
2112   ** This loop fills in the following fields:
2113   **
2114   **   pWInfo->a[].pIdx      The index to use for this level of the loop.
2115   **   pWInfo->a[].flags     WHERE_xxx flags associated with pIdx
2116   **   pWInfo->a[].nEq       The number of == and IN constraints
2117   **   pWInfo->a[].iFrom     When term of the FROM clause is being coded
2118   **   pWInfo->a[].iTabCur   The VDBE cursor for the database table
2119   **   pWInfo->a[].iIdxCur   The VDBE cursor for the index
2120   **
2121   ** This loop also figures out the nesting order of tables in the FROM
2122   ** clause.
2123   */
2124   notReady = ~(Bitmask)0;
2125   pTabItem = pTabList->a;
2126   pLevel = pWInfo->a;
2127   andFlags = ~0;
2128   WHERETRACE(("*** Optimizer Start ***\n"));
2129   for(i=iFrom=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
2130     Index *pIdx;                /* Index for FROM table at pTabItem */
2131     int flags;                  /* Flags asssociated with pIdx */
2132     int nEq;                    /* Number of == or IN constraints */
2133     double cost;                /* The cost for pIdx */
2134     int j;                      /* For looping over FROM tables */
2135     Index *pBest = 0;           /* The best index seen so far */
2136     int bestFlags = 0;          /* Flags associated with pBest */
2137     int bestNEq = 0;            /* nEq associated with pBest */
2138     double lowestCost;          /* Cost of the pBest */
2139     int bestJ = 0;              /* The value of j */
2140     Bitmask m;                  /* Bitmask value for j or bestJ */
2141     int once = 0;               /* True when first table is seen */
2142     sqlite3_index_info *pIndex; /* Current virtual index */
2143 
2144     lowestCost = SQLITE_BIG_DBL;
2145     for(j=iFrom, pTabItem=&pTabList->a[j]; j<pTabList->nSrc; j++, pTabItem++){
2146       int doNotReorder;  /* True if this table should not be reordered */
2147 
2148       doNotReorder =  (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
2149       if( once && doNotReorder ) break;
2150       m = getMask(&maskSet, pTabItem->iCursor);
2151       if( (m & notReady)==0 ){
2152         if( j==iFrom ) iFrom++;
2153         continue;
2154       }
2155       assert( pTabItem->pTab );
2156 #ifndef SQLITE_OMIT_VIRTUALTABLE
2157       if( IsVirtual(pTabItem->pTab) ){
2158         sqlite3_index_info **ppIdxInfo = &pWInfo->a[j].pIdxInfo;
2159         cost = bestVirtualIndex(pParse, &wc, pTabItem, notReady,
2160                                 ppOrderBy ? *ppOrderBy : 0, i==0,
2161                                 ppIdxInfo);
2162         flags = WHERE_VIRTUALTABLE;
2163         pIndex = *ppIdxInfo;
2164         if( pIndex && pIndex->orderByConsumed ){
2165           flags = WHERE_VIRTUALTABLE | WHERE_ORDERBY;
2166         }
2167         pIdx = 0;
2168         nEq = 0;
2169         if( (SQLITE_BIG_DBL/2.0)<cost ){
2170           /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the
2171           ** inital value of lowestCost in this loop. If it is, then
2172           ** the (cost<lowestCost) test below will never be true and
2173           ** pLevel->pBestIdx never set.
2174           */
2175           cost = (SQLITE_BIG_DBL/2.0);
2176         }
2177       }else
2178 #endif
2179       {
2180         cost = bestIndex(pParse, &wc, pTabItem, notReady,
2181                          (i==0 && ppOrderBy) ? *ppOrderBy : 0,
2182                          &pIdx, &flags, &nEq);
2183         pIndex = 0;
2184       }
2185       if( cost<lowestCost ){
2186         once = 1;
2187         lowestCost = cost;
2188         pBest = pIdx;
2189         bestFlags = flags;
2190         bestNEq = nEq;
2191         bestJ = j;
2192         pLevel->pBestIdx = pIndex;
2193       }
2194       if( doNotReorder ) break;
2195     }
2196     WHERETRACE(("*** Optimizer selects table %d for loop %d\n", bestJ,
2197            pLevel-pWInfo->a));
2198     if( (bestFlags & WHERE_ORDERBY)!=0 ){
2199       *ppOrderBy = 0;
2200     }
2201     andFlags &= bestFlags;
2202     pLevel->flags = bestFlags;
2203     pLevel->pIdx = pBest;
2204     pLevel->nEq = bestNEq;
2205     pLevel->aInLoop = 0;
2206     pLevel->nIn = 0;
2207     if( pBest ){
2208       pLevel->iIdxCur = pParse->nTab++;
2209     }else{
2210       pLevel->iIdxCur = -1;
2211     }
2212     notReady &= ~getMask(&maskSet, pTabList->a[bestJ].iCursor);
2213     pLevel->iFrom = bestJ;
2214   }
2215   WHERETRACE(("*** Optimizer Finished ***\n"));
2216 
2217   /* If the total query only selects a single row, then the ORDER BY
2218   ** clause is irrelevant.
2219   */
2220   if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
2221     *ppOrderBy = 0;
2222   }
2223 
2224   /* If the caller is an UPDATE or DELETE statement that is requesting
2225   ** to use a one-pass algorithm, determine if this is appropriate.
2226   ** The one-pass algorithm only works if the WHERE clause constraints
2227   ** the statement to update a single row.
2228   */
2229   assert( (wflags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
2230   if( (wflags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){
2231     pWInfo->okOnePass = 1;
2232     pWInfo->a[0].flags &= ~WHERE_IDX_ONLY;
2233   }
2234 
2235   /* Open all tables in the pTabList and any indices selected for
2236   ** searching those tables.
2237   */
2238   sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
2239   for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
2240     Table *pTab;     /* Table to open */
2241     Index *pIx;      /* Index used to access pTab (if any) */
2242     int iDb;         /* Index of database containing table/index */
2243     int iIdxCur = pLevel->iIdxCur;
2244 
2245 #ifndef SQLITE_OMIT_EXPLAIN
2246     if( pParse->explain==2 ){
2247       char *zMsg;
2248       struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
2249       zMsg = sqlite3MPrintf(db, "TABLE %s", pItem->zName);
2250       if( pItem->zAlias ){
2251         zMsg = sqlite3MPrintf(db, "%z AS %s", zMsg, pItem->zAlias);
2252       }
2253       if( (pIx = pLevel->pIdx)!=0 ){
2254         zMsg = sqlite3MPrintf(db, "%z WITH INDEX %s", zMsg, pIx->zName);
2255       }else if( pLevel->flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
2256         zMsg = sqlite3MPrintf(db, "%z USING PRIMARY KEY", zMsg);
2257       }
2258 #ifndef SQLITE_OMIT_VIRTUALTABLE
2259       else if( pLevel->pBestIdx ){
2260         sqlite3_index_info *pBestIdx = pLevel->pBestIdx;
2261         zMsg = sqlite3MPrintf(db, "%z VIRTUAL TABLE INDEX %d:%s", zMsg,
2262                     pBestIdx->idxNum, pBestIdx->idxStr);
2263       }
2264 #endif
2265       if( pLevel->flags & WHERE_ORDERBY ){
2266         zMsg = sqlite3MPrintf(db, "%z ORDER BY", zMsg);
2267       }
2268       sqlite3VdbeAddOp4(v, OP_Explain, i, pLevel->iFrom, 0, zMsg, P4_DYNAMIC);
2269     }
2270 #endif /* SQLITE_OMIT_EXPLAIN */
2271     pTabItem = &pTabList->a[pLevel->iFrom];
2272     pTab = pTabItem->pTab;
2273     iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
2274     if( pTab->isEphem || pTab->pSelect ) continue;
2275 #ifndef SQLITE_OMIT_VIRTUALTABLE
2276     if( pLevel->pBestIdx ){
2277       int iCur = pTabItem->iCursor;
2278       sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0,
2279                         (const char*)pTab->pVtab, P4_VTAB);
2280     }else
2281 #endif
2282     if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){
2283       int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead;
2284       sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op);
2285       if( !pWInfo->okOnePass && pTab->nCol<(sizeof(Bitmask)*8) ){
2286         Bitmask b = pTabItem->colUsed;
2287         int n = 0;
2288         for(; b; b=b>>1, n++){}
2289         sqlite3VdbeChangeP2(v, sqlite3VdbeCurrentAddr(v)-2, n);
2290         assert( n<=pTab->nCol );
2291       }
2292     }else{
2293       sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
2294     }
2295     pLevel->iTabCur = pTabItem->iCursor;
2296     if( (pIx = pLevel->pIdx)!=0 ){
2297       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx);
2298       assert( pIx->pSchema==pTab->pSchema );
2299       sqlite3VdbeAddOp2(v, OP_SetNumColumns, 0, pIx->nColumn+1);
2300       sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb,
2301                         (char*)pKey, P4_KEYINFO_HANDOFF);
2302       VdbeComment((v, "%s", pIx->zName));
2303     }
2304     sqlite3CodeVerifySchema(pParse, iDb);
2305   }
2306   pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
2307 
2308   /* Generate the code to do the search.  Each iteration of the for
2309   ** loop below generates code for a single nested loop of the VM
2310   ** program.
2311   */
2312   notReady = ~(Bitmask)0;
2313   for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
2314     int j;
2315     int iCur = pTabItem->iCursor;  /* The VDBE cursor for the table */
2316     Index *pIdx;       /* The index we will be using */
2317     int nxt;           /* Where to jump to continue with the next IN case */
2318     int iIdxCur;       /* The VDBE cursor for the index */
2319     int omitTable;     /* True if we use the index only */
2320     int bRev;          /* True if we need to scan in reverse order */
2321 
2322     pTabItem = &pTabList->a[pLevel->iFrom];
2323     iCur = pTabItem->iCursor;
2324     pIdx = pLevel->pIdx;
2325     iIdxCur = pLevel->iIdxCur;
2326     bRev = (pLevel->flags & WHERE_REVERSE)!=0;
2327     omitTable = (pLevel->flags & WHERE_IDX_ONLY)!=0;
2328 
2329     /* Create labels for the "break" and "continue" instructions
2330     ** for the current loop.  Jump to brk to break out of a loop.
2331     ** Jump to cont to go immediately to the next iteration of the
2332     ** loop.
2333     **
2334     ** When there is an IN operator, we also have a "nxt" label that
2335     ** means to continue with the next IN value combination.  When
2336     ** there are no IN operators in the constraints, the "nxt" label
2337     ** is the same as "brk".
2338     */
2339     brk = pLevel->brk = pLevel->nxt = sqlite3VdbeMakeLabel(v);
2340     cont = pLevel->cont = sqlite3VdbeMakeLabel(v);
2341 
2342     /* If this is the right table of a LEFT OUTER JOIN, allocate and
2343     ** initialize a memory cell that records if this table matches any
2344     ** row of the left table of the join.
2345     */
2346     if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){
2347       pLevel->iLeftJoin = ++pParse->nMem;
2348       sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
2349       VdbeComment((v, "init LEFT JOIN no-match flag"));
2350     }
2351 
2352 #ifndef SQLITE_OMIT_VIRTUALTABLE
2353     if( pLevel->pBestIdx ){
2354       /* Case 0:  The table is a virtual-table.  Use the VFilter and VNext
2355       **          to access the data.
2356       */
2357       int j;
2358       int iReg;   /* P3 Value for OP_VFilter */
2359       sqlite3_index_info *pBestIdx = pLevel->pBestIdx;
2360       int nConstraint = pBestIdx->nConstraint;
2361       struct sqlite3_index_constraint_usage *aUsage =
2362                                                   pBestIdx->aConstraintUsage;
2363       const struct sqlite3_index_constraint *aConstraint =
2364                                                   pBestIdx->aConstraint;
2365 
2366       iReg = sqlite3GetTempRange(pParse, nConstraint+2);
2367       pParse->disableColCache++;
2368       for(j=1; j<=nConstraint; j++){
2369         int k;
2370         for(k=0; k<nConstraint; k++){
2371           if( aUsage[k].argvIndex==j ){
2372             int iTerm = aConstraint[k].iTermOffset;
2373             assert( pParse->disableColCache );
2374             sqlite3ExprCode(pParse, wc.a[iTerm].pExpr->pRight, iReg+j+1);
2375             break;
2376           }
2377         }
2378         if( k==nConstraint ) break;
2379       }
2380       assert( pParse->disableColCache );
2381       pParse->disableColCache--;
2382       sqlite3VdbeAddOp2(v, OP_Integer, pBestIdx->idxNum, iReg);
2383       sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1);
2384       sqlite3VdbeAddOp4(v, OP_VFilter, iCur, brk, iReg, pBestIdx->idxStr,
2385                         pBestIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC);
2386       sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2);
2387       pBestIdx->needToFreeIdxStr = 0;
2388       for(j=0; j<nConstraint; j++){
2389         if( aUsage[j].omit ){
2390           int iTerm = aConstraint[j].iTermOffset;
2391           disableTerm(pLevel, &wc.a[iTerm]);
2392         }
2393       }
2394       pLevel->op = OP_VNext;
2395       pLevel->p1 = iCur;
2396       pLevel->p2 = sqlite3VdbeCurrentAddr(v);
2397     }else
2398 #endif /* SQLITE_OMIT_VIRTUALTABLE */
2399 
2400     if( pLevel->flags & WHERE_ROWID_EQ ){
2401       /* Case 1:  We can directly reference a single row using an
2402       **          equality comparison against the ROWID field.  Or
2403       **          we reference multiple rows using a "rowid IN (...)"
2404       **          construct.
2405       */
2406       int r1;
2407       pTerm = findTerm(&wc, iCur, -1, notReady, WO_EQ|WO_IN, 0);
2408       assert( pTerm!=0 );
2409       assert( pTerm->pExpr!=0 );
2410       assert( pTerm->leftCursor==iCur );
2411       assert( omitTable==0 );
2412       r1 = codeEqualityTerm(pParse, pTerm, pLevel, 0);
2413       nxt = pLevel->nxt;
2414       sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, nxt);
2415       sqlite3VdbeAddOp3(v, OP_NotExists, iCur, nxt, r1);
2416       VdbeComment((v, "pk"));
2417       pLevel->op = OP_Noop;
2418     }else if( pLevel->flags & WHERE_ROWID_RANGE ){
2419       /* Case 2:  We have an inequality comparison against the ROWID field.
2420       */
2421       int testOp = OP_Noop;
2422       int start;
2423       WhereTerm *pStart, *pEnd;
2424 
2425       assert( omitTable==0 );
2426       pStart = findTerm(&wc, iCur, -1, notReady, WO_GT|WO_GE, 0);
2427       pEnd = findTerm(&wc, iCur, -1, notReady, WO_LT|WO_LE, 0);
2428       if( bRev ){
2429         pTerm = pStart;
2430         pStart = pEnd;
2431         pEnd = pTerm;
2432       }
2433       if( pStart ){
2434         Expr *pX;
2435         int r1, regFree1;
2436         pX = pStart->pExpr;
2437         assert( pX!=0 );
2438         assert( pStart->leftCursor==iCur );
2439         r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &regFree1);
2440         sqlite3VdbeAddOp3(v, OP_ForceInt, r1, brk,
2441                              pX->op==TK_LE || pX->op==TK_GT);
2442         sqlite3VdbeAddOp3(v, bRev ? OP_MoveLt : OP_MoveGe, iCur, brk, r1);
2443         VdbeComment((v, "pk"));
2444         sqlite3ReleaseTempReg(pParse, regFree1);
2445         disableTerm(pLevel, pStart);
2446       }else{
2447         sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, brk);
2448       }
2449       if( pEnd ){
2450         Expr *pX;
2451         pX = pEnd->pExpr;
2452         assert( pX!=0 );
2453         assert( pEnd->leftCursor==iCur );
2454         pLevel->iMem = ++pParse->nMem;
2455         sqlite3ExprCode(pParse, pX->pRight, pLevel->iMem);
2456         if( pX->op==TK_LT || pX->op==TK_GT ){
2457           testOp = bRev ? OP_Le : OP_Ge;
2458         }else{
2459           testOp = bRev ? OP_Lt : OP_Gt;
2460         }
2461         disableTerm(pLevel, pEnd);
2462       }
2463       start = sqlite3VdbeCurrentAddr(v);
2464       pLevel->op = bRev ? OP_Prev : OP_Next;
2465       pLevel->p1 = iCur;
2466       pLevel->p2 = start;
2467       if( testOp!=OP_Noop ){
2468         int r1 = sqlite3GetTempReg(pParse);
2469         sqlite3VdbeAddOp2(v, OP_Rowid, iCur, r1);
2470         /* sqlite3VdbeAddOp2(v, OP_SCopy, pLevel->iMem, 0); */
2471         sqlite3VdbeAddOp3(v, testOp, pLevel->iMem, brk, r1);
2472         sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL);
2473         sqlite3ReleaseTempReg(pParse, r1);
2474       }
2475     }else if( pLevel->flags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){
2476       /* Case 3: A scan using an index.
2477       **
2478       **         The WHERE clause may contain zero or more equality
2479       **         terms ("==" or "IN" operators) that refer to the N
2480       **         left-most columns of the index. It may also contain
2481       **         inequality constraints (>, <, >= or <=) on the indexed
2482       **         column that immediately follows the N equalities. Only
2483       **         the right-most column can be an inequality - the rest must
2484       **         use the "==" and "IN" operators. For example, if the
2485       **         index is on (x,y,z), then the following clauses are all
2486       **         optimized:
2487       **
2488       **            x=5
2489       **            x=5 AND y=10
2490       **            x=5 AND y<10
2491       **            x=5 AND y>5 AND y<10
2492       **            x=5 AND y=5 AND z<=10
2493       **
2494       **         The z<10 term of the following cannot be used, only
2495       **         the x=5 term:
2496       **
2497       **            x=5 AND z<10
2498       **
2499       **         N may be zero if there are inequality constraints.
2500       **         If there are no inequality constraints, then N is at
2501       **         least one.
2502       **
2503       **         This case is also used when there are no WHERE clause
2504       **         constraints but an index is selected anyway, in order
2505       **         to force the output order to conform to an ORDER BY.
2506       */
2507       int aStartOp[] = {
2508         0,
2509         0,
2510         OP_Rewind,           /* 2: (!start_constraints && startEq &&  !bRev) */
2511         OP_Last,             /* 3: (!start_constraints && startEq &&   bRev) */
2512         OP_MoveGt,           /* 4: (start_constraints  && !startEq && !bRev) */
2513         OP_MoveLt,           /* 5: (start_constraints  && !startEq &&  bRev) */
2514         OP_MoveGe,           /* 6: (start_constraints  &&  startEq && !bRev) */
2515         OP_MoveLe            /* 7: (start_constraints  &&  startEq &&  bRev) */
2516       };
2517       int aEndOp[] = {
2518         OP_Noop,             /* 0: (!end_constraints) */
2519         OP_IdxGE,            /* 1: (end_constraints && !bRev) */
2520         OP_IdxLT             /* 2: (end_constraints && bRev) */
2521       };
2522       int nEq = pLevel->nEq;
2523       int isMinQuery = 0;          /* If this is an optimized SELECT min(x).. */
2524       int regBase;                 /* Base register holding constraint values */
2525       int r1;                      /* Temp register */
2526       WhereTerm *pRangeStart = 0;  /* Inequality constraint at range start */
2527       WhereTerm *pRangeEnd = 0;    /* Inequality constraint at range end */
2528       int startEq;                 /* True if range start uses ==, >= or <= */
2529       int endEq;                   /* True if range end uses ==, >= or <= */
2530       int start_constraints;       /* Start of range is constrained */
2531       int k = pIdx->aiColumn[nEq]; /* Column for inequality constraints */
2532       int nConstraint;             /* Number of constraint terms */
2533       int op;
2534 
2535       /* Generate code to evaluate all constraint terms using == or IN
2536       ** and store the values of those terms in an array of registers
2537       ** starting at regBase.
2538       */
2539       regBase = codeAllEqualityTerms(pParse, pLevel, &wc, notReady, 2);
2540       nxt = pLevel->nxt;
2541 
2542       /* If this loop satisfies a sort order (pOrderBy) request that
2543       ** was passed to this function to implement a "SELECT min(x) ..."
2544       ** query, then the caller will only allow the loop to run for
2545       ** a single iteration. This means that the first row returned
2546       ** should not have a NULL value stored in 'x'. If column 'x' is
2547       ** the first one after the nEq equality constraints in the index,
2548       ** this requires some special handling.
2549       */
2550       if( (wflags&WHERE_ORDERBY_MIN)!=0
2551        && (pLevel->flags&WHERE_ORDERBY)
2552        && (pIdx->nColumn>nEq)
2553       ){
2554         assert( pOrderBy->nExpr==1 );
2555         assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] );
2556         isMinQuery = 1;
2557       }
2558 
2559       /* Find any inequality constraint terms for the start and end
2560       ** of the range.
2561       */
2562       if( pLevel->flags & WHERE_TOP_LIMIT ){
2563         pRangeEnd = findTerm(&wc, iCur, k, notReady, (WO_LT|WO_LE), pIdx);
2564       }
2565       if( pLevel->flags & WHERE_BTM_LIMIT ){
2566         pRangeStart = findTerm(&wc, iCur, k, notReady, (WO_GT|WO_GE), pIdx);
2567       }
2568 
2569       /* If we are doing a reverse order scan on an ascending index, or
2570       ** a forward order scan on a descending index, interchange the
2571       ** start and end terms (pRangeStart and pRangeEnd).
2572       */
2573       if( bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC) ){
2574         SWAP(WhereTerm *, pRangeEnd, pRangeStart);
2575       }
2576 
2577       testcase( pRangeStart && pRangeStart->eOperator & WO_LE );
2578       testcase( pRangeStart && pRangeStart->eOperator & WO_GE );
2579       testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE );
2580       testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE );
2581       startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE);
2582       endEq =   !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE);
2583       start_constraints = pRangeStart || nEq>0;
2584 
2585       /* Seek the index cursor to the start of the range. */
2586       nConstraint = nEq;
2587       if( pRangeStart ){
2588         int dcc = pParse->disableColCache;
2589         if( pRangeEnd ){
2590           pParse->disableColCache++;
2591         }
2592         sqlite3ExprCode(pParse, pRangeStart->pExpr->pRight, regBase+nEq);
2593         pParse->disableColCache = dcc;
2594         sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, nxt);
2595         nConstraint++;
2596       }else if( isMinQuery ){
2597         sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
2598         nConstraint++;
2599         startEq = 0;
2600         start_constraints = 1;
2601       }
2602       codeApplyAffinity(pParse, regBase, nConstraint, pIdx);
2603       op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
2604       assert( op!=0 );
2605       testcase( op==OP_Rewind );
2606       testcase( op==OP_Last );
2607       testcase( op==OP_MoveGt );
2608       testcase( op==OP_MoveGe );
2609       testcase( op==OP_MoveLe );
2610       testcase( op==OP_MoveLt );
2611       sqlite3VdbeAddOp4(v, op, iIdxCur, nxt, regBase,
2612                         SQLITE_INT_TO_PTR(nConstraint), P4_INT32);
2613 
2614       /* Load the value for the inequality constraint at the end of the
2615       ** range (if any).
2616       */
2617       nConstraint = nEq;
2618       if( pRangeEnd ){
2619         sqlite3ExprCode(pParse, pRangeEnd->pExpr->pRight, regBase+nEq);
2620         sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, nxt);
2621         codeApplyAffinity(pParse, regBase, nEq+1, pIdx);
2622         nConstraint++;
2623       }
2624 
2625       /* Top of the loop body */
2626       pLevel->p2 = sqlite3VdbeCurrentAddr(v);
2627 
2628       /* Check if the index cursor is past the end of the range. */
2629       op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)];
2630       testcase( op==OP_Noop );
2631       testcase( op==OP_IdxGE );
2632       testcase( op==OP_IdxLT );
2633       sqlite3VdbeAddOp4(v, op, iIdxCur, nxt, regBase,
2634                         SQLITE_INT_TO_PTR(nConstraint), P4_INT32);
2635       sqlite3VdbeChangeP5(v, endEq!=bRev);
2636 
2637       /* If there are inequality constraints, check that the value
2638       ** of the table column that the inequality contrains is not NULL.
2639       ** If it is, jump to the next iteration of the loop.
2640       */
2641       r1 = sqlite3GetTempReg(pParse);
2642       testcase( pLevel->flags & WHERE_BTM_LIMIT );
2643       testcase( pLevel->flags & WHERE_TOP_LIMIT );
2644       if( pLevel->flags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT) ){
2645         sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
2646         sqlite3VdbeAddOp2(v, OP_IsNull, r1, cont);
2647       }
2648 
2649       /* Seek the table cursor, if required */
2650       if( !omitTable ){
2651         sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, r1);
2652         sqlite3VdbeAddOp3(v, OP_MoveGe, iCur, 0, r1);  /* Deferred seek */
2653       }
2654       sqlite3ReleaseTempReg(pParse, r1);
2655 
2656       /* Record the instruction used to terminate the loop. Disable
2657       ** WHERE clause terms made redundant by the index range scan.
2658       */
2659       pLevel->op = bRev ? OP_Prev : OP_Next;
2660       pLevel->p1 = iIdxCur;
2661       disableTerm(pLevel, pRangeStart);
2662       disableTerm(pLevel, pRangeEnd);
2663     }else{
2664       /* Case 4:  There is no usable index.  We must do a complete
2665       **          scan of the entire table.
2666       */
2667       assert( omitTable==0 );
2668       assert( bRev==0 );
2669       pLevel->op = OP_Next;
2670       pLevel->p1 = iCur;
2671       pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, OP_Rewind, iCur, brk);
2672     }
2673     notReady &= ~getMask(&maskSet, iCur);
2674 
2675     /* Insert code to test every subexpression that can be completely
2676     ** computed using the current set of tables.
2677     */
2678     for(pTerm=wc.a, j=wc.nTerm; j>0; j--, pTerm++){
2679       Expr *pE;
2680       testcase( pTerm->flags & TERM_VIRTUAL );
2681       testcase( pTerm->flags & TERM_CODED );
2682       if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue;
2683       if( (pTerm->prereqAll & notReady)!=0 ) continue;
2684       pE = pTerm->pExpr;
2685       assert( pE!=0 );
2686       if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
2687         continue;
2688       }
2689       sqlite3ExprIfFalse(pParse, pE, cont, SQLITE_JUMPIFNULL);
2690       pTerm->flags |= TERM_CODED;
2691     }
2692 
2693     /* For a LEFT OUTER JOIN, generate code that will record the fact that
2694     ** at least one row of the right table has matched the left table.
2695     */
2696     if( pLevel->iLeftJoin ){
2697       pLevel->top = sqlite3VdbeCurrentAddr(v);
2698       sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
2699       VdbeComment((v, "record LEFT JOIN hit"));
2700       sqlite3ExprClearColumnCache(pParse, pLevel->iTabCur);
2701       sqlite3ExprClearColumnCache(pParse, pLevel->iIdxCur);
2702       for(pTerm=wc.a, j=0; j<wc.nTerm; j++, pTerm++){
2703         testcase( pTerm->flags & TERM_VIRTUAL );
2704         testcase( pTerm->flags & TERM_CODED );
2705         if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue;
2706         if( (pTerm->prereqAll & notReady)!=0 ) continue;
2707         assert( pTerm->pExpr );
2708         sqlite3ExprIfFalse(pParse, pTerm->pExpr, cont, SQLITE_JUMPIFNULL);
2709         pTerm->flags |= TERM_CODED;
2710       }
2711     }
2712   }
2713 
2714 #ifdef SQLITE_TEST  /* For testing and debugging use only */
2715   /* Record in the query plan information about the current table
2716   ** and the index used to access it (if any).  If the table itself
2717   ** is not used, its name is just '{}'.  If no index is used
2718   ** the index is listed as "{}".  If the primary key is used the
2719   ** index name is '*'.
2720   */
2721   for(i=0; i<pTabList->nSrc; i++){
2722     char *z;
2723     int n;
2724     pLevel = &pWInfo->a[i];
2725     pTabItem = &pTabList->a[pLevel->iFrom];
2726     z = pTabItem->zAlias;
2727     if( z==0 ) z = pTabItem->pTab->zName;
2728     n = strlen(z);
2729     if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
2730       if( pLevel->flags & WHERE_IDX_ONLY ){
2731         memcpy(&sqlite3_query_plan[nQPlan], "{}", 2);
2732         nQPlan += 2;
2733       }else{
2734         memcpy(&sqlite3_query_plan[nQPlan], z, n);
2735         nQPlan += n;
2736       }
2737       sqlite3_query_plan[nQPlan++] = ' ';
2738     }
2739     testcase( pLevel->flags & WHERE_ROWID_EQ );
2740     testcase( pLevel->flags & WHERE_ROWID_RANGE );
2741     if( pLevel->flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
2742       memcpy(&sqlite3_query_plan[nQPlan], "* ", 2);
2743       nQPlan += 2;
2744     }else if( pLevel->pIdx==0 ){
2745       memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3);
2746       nQPlan += 3;
2747     }else{
2748       n = strlen(pLevel->pIdx->zName);
2749       if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
2750         memcpy(&sqlite3_query_plan[nQPlan], pLevel->pIdx->zName, n);
2751         nQPlan += n;
2752         sqlite3_query_plan[nQPlan++] = ' ';
2753       }
2754     }
2755   }
2756   while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
2757     sqlite3_query_plan[--nQPlan] = 0;
2758   }
2759   sqlite3_query_plan[nQPlan] = 0;
2760   nQPlan = 0;
2761 #endif /* SQLITE_TEST // Testing and debugging use only */
2762 
2763   /* Record the continuation address in the WhereInfo structure.  Then
2764   ** clean up and return.
2765   */
2766   pWInfo->iContinue = cont;
2767   whereClauseClear(&wc);
2768   return pWInfo;
2769 
2770   /* Jump here if malloc fails */
2771 whereBeginNoMem:
2772   whereClauseClear(&wc);
2773   whereInfoFree(pWInfo);
2774   return 0;
2775 }
2776 
2777 /*
2778 ** Generate the end of the WHERE loop.  See comments on
2779 ** sqlite3WhereBegin() for additional information.
2780 */
2781 void sqlite3WhereEnd(WhereInfo *pWInfo){
2782   Vdbe *v = pWInfo->pParse->pVdbe;
2783   int i;
2784   WhereLevel *pLevel;
2785   SrcList *pTabList = pWInfo->pTabList;
2786 
2787   /* Generate loop termination code.
2788   */
2789   sqlite3ExprClearColumnCache(pWInfo->pParse, -1);
2790   for(i=pTabList->nSrc-1; i>=0; i--){
2791     pLevel = &pWInfo->a[i];
2792     sqlite3VdbeResolveLabel(v, pLevel->cont);
2793     if( pLevel->op!=OP_Noop ){
2794       sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
2795     }
2796     if( pLevel->nIn ){
2797       struct InLoop *pIn;
2798       int j;
2799       sqlite3VdbeResolveLabel(v, pLevel->nxt);
2800       for(j=pLevel->nIn, pIn=&pLevel->aInLoop[j-1]; j>0; j--, pIn--){
2801         sqlite3VdbeJumpHere(v, pIn->topAddr+1);
2802         sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->topAddr);
2803         sqlite3VdbeJumpHere(v, pIn->topAddr-1);
2804       }
2805       sqlite3_free(pLevel->aInLoop);
2806     }
2807     sqlite3VdbeResolveLabel(v, pLevel->brk);
2808     if( pLevel->iLeftJoin ){
2809       int addr;
2810       addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin);
2811       sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
2812       if( pLevel->iIdxCur>=0 ){
2813         sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
2814       }
2815       sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->top);
2816       sqlite3VdbeJumpHere(v, addr);
2817     }
2818   }
2819 
2820   /* The "break" point is here, just past the end of the outer loop.
2821   ** Set it.
2822   */
2823   sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
2824 
2825   /* Close all of the cursors that were opened by sqlite3WhereBegin.
2826   */
2827   for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
2828     struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
2829     Table *pTab = pTabItem->pTab;
2830     assert( pTab!=0 );
2831     if( pTab->isEphem || pTab->pSelect ) continue;
2832     if( !pWInfo->okOnePass && (pLevel->flags & WHERE_IDX_ONLY)==0 ){
2833       sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
2834     }
2835     if( pLevel->pIdx!=0 ){
2836       sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur);
2837     }
2838 
2839     /* If this scan uses an index, make code substitutions to read data
2840     ** from the index in preference to the table. Sometimes, this means
2841     ** the table need never be read from. This is a performance boost,
2842     ** as the vdbe level waits until the table is read before actually
2843     ** seeking the table cursor to the record corresponding to the current
2844     ** position in the index.
2845     **
2846     ** Calls to the code generator in between sqlite3WhereBegin and
2847     ** sqlite3WhereEnd will have created code that references the table
2848     ** directly.  This loop scans all that code looking for opcodes
2849     ** that reference the table and converts them into opcodes that
2850     ** reference the index.
2851     */
2852     if( pLevel->pIdx ){
2853       int k, j, last;
2854       VdbeOp *pOp;
2855       Index *pIdx = pLevel->pIdx;
2856       int useIndexOnly = pLevel->flags & WHERE_IDX_ONLY;
2857 
2858       assert( pIdx!=0 );
2859       pOp = sqlite3VdbeGetOp(v, pWInfo->iTop);
2860       last = sqlite3VdbeCurrentAddr(v);
2861       for(k=pWInfo->iTop; k<last; k++, pOp++){
2862         if( pOp->p1!=pLevel->iTabCur ) continue;
2863         if( pOp->opcode==OP_Column ){
2864           for(j=0; j<pIdx->nColumn; j++){
2865             if( pOp->p2==pIdx->aiColumn[j] ){
2866               pOp->p2 = j;
2867               pOp->p1 = pLevel->iIdxCur;
2868               break;
2869             }
2870           }
2871           assert(!useIndexOnly || j<pIdx->nColumn);
2872         }else if( pOp->opcode==OP_Rowid ){
2873           pOp->p1 = pLevel->iIdxCur;
2874           pOp->opcode = OP_IdxRowid;
2875         }else if( pOp->opcode==OP_NullRow && useIndexOnly ){
2876           pOp->opcode = OP_Noop;
2877         }
2878       }
2879     }
2880   }
2881 
2882   /* Final cleanup
2883   */
2884   whereInfoFree(pWInfo);
2885   return;
2886 }
2887