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