Mercurial > audlegacy
comparison sqlite/where.c @ 1434:b6b61becdf4e trunk
[svn] - add sqlite/ directory
author | nenolod |
---|---|
date | Thu, 27 Jul 2006 22:41:31 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1433:3cbe3d14ea68 | 1434:b6b61becdf4e |
---|---|
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 reponsible 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.209 2006/06/06 11:45:55 drh Exp $ | |
20 */ | |
21 #include "sqliteInt.h" | |
22 | |
23 /* | |
24 ** The number of bits in a Bitmask. "BMS" means "BitMask Size". | |
25 */ | |
26 #define BMS (sizeof(Bitmask)*8) | |
27 | |
28 /* | |
29 ** Determine the number of elements in an array. | |
30 */ | |
31 #define ARRAYSIZE(X) (sizeof(X)/sizeof(X[0])) | |
32 | |
33 /* | |
34 ** Trace output macros | |
35 */ | |
36 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) | |
37 int sqlite3_where_trace = 0; | |
38 # define TRACE(X) if(sqlite3_where_trace) sqlite3DebugPrintf X | |
39 #else | |
40 # define TRACE(X) | |
41 #endif | |
42 | |
43 /* Forward reference | |
44 */ | |
45 typedef struct WhereClause WhereClause; | |
46 | |
47 /* | |
48 ** The query generator uses an array of instances of this structure to | |
49 ** help it analyze the subexpressions of the WHERE clause. Each WHERE | |
50 ** clause subexpression is separated from the others by an AND operator. | |
51 ** | |
52 ** All WhereTerms are collected into a single WhereClause structure. | |
53 ** The following identity holds: | |
54 ** | |
55 ** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm | |
56 ** | |
57 ** When a term is of the form: | |
58 ** | |
59 ** X <op> <expr> | |
60 ** | |
61 ** where X is a column name and <op> is one of certain operators, | |
62 ** then WhereTerm.leftCursor and WhereTerm.leftColumn record the | |
63 ** cursor number and column number for X. WhereTerm.operator records | |
64 ** the <op> using a bitmask encoding defined by WO_xxx below. The | |
65 ** use of a bitmask encoding for the operator allows us to search | |
66 ** quickly for terms that match any of several different operators. | |
67 ** | |
68 ** prereqRight and prereqAll record sets of cursor numbers, | |
69 ** but they do so indirectly. A single ExprMaskSet structure translates | |
70 ** cursor number into bits and the translated bit is stored in the prereq | |
71 ** fields. The translation is used in order to maximize the number of | |
72 ** bits that will fit in a Bitmask. The VDBE cursor numbers might be | |
73 ** spread out over the non-negative integers. For example, the cursor | |
74 ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45. The ExprMaskSet | |
75 ** translates these sparse cursor numbers into consecutive integers | |
76 ** beginning with 0 in order to make the best possible use of the available | |
77 ** bits in the Bitmask. So, in the example above, the cursor numbers | |
78 ** would be mapped into integers 0 through 7. | |
79 */ | |
80 typedef struct WhereTerm WhereTerm; | |
81 struct WhereTerm { | |
82 Expr *pExpr; /* Pointer to the subexpression */ | |
83 i16 iParent; /* Disable pWC->a[iParent] when this term disabled */ | |
84 i16 leftCursor; /* Cursor number of X in "X <op> <expr>" */ | |
85 i16 leftColumn; /* Column number of X in "X <op> <expr>" */ | |
86 u16 eOperator; /* A WO_xx value describing <op> */ | |
87 u8 flags; /* Bit flags. See below */ | |
88 u8 nChild; /* Number of children that must disable us */ | |
89 WhereClause *pWC; /* The clause this term is part of */ | |
90 Bitmask prereqRight; /* Bitmask of tables used by pRight */ | |
91 Bitmask prereqAll; /* Bitmask of tables referenced by p */ | |
92 }; | |
93 | |
94 /* | |
95 ** Allowed values of WhereTerm.flags | |
96 */ | |
97 #define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(pExpr) */ | |
98 #define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */ | |
99 #define TERM_CODED 0x04 /* This term is already coded */ | |
100 #define TERM_COPIED 0x08 /* Has a child */ | |
101 #define TERM_OR_OK 0x10 /* Used during OR-clause processing */ | |
102 | |
103 /* | |
104 ** An instance of the following structure holds all information about a | |
105 ** WHERE clause. Mostly this is a container for one or more WhereTerms. | |
106 */ | |
107 struct WhereClause { | |
108 Parse *pParse; /* The parser context */ | |
109 int nTerm; /* Number of terms */ | |
110 int nSlot; /* Number of entries in a[] */ | |
111 WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ | |
112 WhereTerm aStatic[10]; /* Initial static space for a[] */ | |
113 }; | |
114 | |
115 /* | |
116 ** An instance of the following structure keeps track of a mapping | |
117 ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm. | |
118 ** | |
119 ** The VDBE cursor numbers are small integers contained in | |
120 ** SrcList_item.iCursor and Expr.iTable fields. For any given WHERE | |
121 ** clause, the cursor numbers might not begin with 0 and they might | |
122 ** contain gaps in the numbering sequence. But we want to make maximum | |
123 ** use of the bits in our bitmasks. This structure provides a mapping | |
124 ** from the sparse cursor numbers into consecutive integers beginning | |
125 ** with 0. | |
126 ** | |
127 ** If ExprMaskSet.ix[A]==B it means that The A-th bit of a Bitmask | |
128 ** corresponds VDBE cursor number B. The A-th bit of a bitmask is 1<<A. | |
129 ** | |
130 ** For example, if the WHERE clause expression used these VDBE | |
131 ** cursors: 4, 5, 8, 29, 57, 73. Then the ExprMaskSet structure | |
132 ** would map those cursor numbers into bits 0 through 5. | |
133 ** | |
134 ** Note that the mapping is not necessarily ordered. In the example | |
135 ** above, the mapping might go like this: 4->3, 5->1, 8->2, 29->0, | |
136 ** 57->5, 73->4. Or one of 719 other combinations might be used. It | |
137 ** does not really matter. What is important is that sparse cursor | |
138 ** numbers all get mapped into bit numbers that begin with 0 and contain | |
139 ** no gaps. | |
140 */ | |
141 typedef struct ExprMaskSet ExprMaskSet; | |
142 struct ExprMaskSet { | |
143 int n; /* Number of assigned cursor values */ | |
144 int ix[sizeof(Bitmask)*8]; /* Cursor assigned to each bit */ | |
145 }; | |
146 | |
147 | |
148 /* | |
149 ** Bitmasks for the operators that indices are able to exploit. An | |
150 ** OR-ed combination of these values can be used when searching for | |
151 ** terms in the where clause. | |
152 */ | |
153 #define WO_IN 1 | |
154 #define WO_EQ 2 | |
155 #define WO_LT (WO_EQ<<(TK_LT-TK_EQ)) | |
156 #define WO_LE (WO_EQ<<(TK_LE-TK_EQ)) | |
157 #define WO_GT (WO_EQ<<(TK_GT-TK_EQ)) | |
158 #define WO_GE (WO_EQ<<(TK_GE-TK_EQ)) | |
159 | |
160 /* | |
161 ** Value for flags returned by bestIndex() | |
162 */ | |
163 #define WHERE_ROWID_EQ 0x0001 /* rowid=EXPR or rowid IN (...) */ | |
164 #define WHERE_ROWID_RANGE 0x0002 /* rowid<EXPR and/or rowid>EXPR */ | |
165 #define WHERE_COLUMN_EQ 0x0010 /* x=EXPR or x IN (...) */ | |
166 #define WHERE_COLUMN_RANGE 0x0020 /* x<EXPR and/or x>EXPR */ | |
167 #define WHERE_COLUMN_IN 0x0040 /* x IN (...) */ | |
168 #define WHERE_TOP_LIMIT 0x0100 /* x<EXPR or x<=EXPR constraint */ | |
169 #define WHERE_BTM_LIMIT 0x0200 /* x>EXPR or x>=EXPR constraint */ | |
170 #define WHERE_IDX_ONLY 0x0800 /* Use index only - omit table */ | |
171 #define WHERE_ORDERBY 0x1000 /* Output will appear in correct order */ | |
172 #define WHERE_REVERSE 0x2000 /* Scan in reverse order */ | |
173 #define WHERE_UNIQUE 0x4000 /* Selects no more than one row */ | |
174 | |
175 /* | |
176 ** Initialize a preallocated WhereClause structure. | |
177 */ | |
178 static void whereClauseInit(WhereClause *pWC, Parse *pParse){ | |
179 pWC->pParse = pParse; | |
180 pWC->nTerm = 0; | |
181 pWC->nSlot = ARRAYSIZE(pWC->aStatic); | |
182 pWC->a = pWC->aStatic; | |
183 } | |
184 | |
185 /* | |
186 ** Deallocate a WhereClause structure. The WhereClause structure | |
187 ** itself is not freed. This routine is the inverse of whereClauseInit(). | |
188 */ | |
189 static void whereClauseClear(WhereClause *pWC){ | |
190 int i; | |
191 WhereTerm *a; | |
192 for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){ | |
193 if( a->flags & TERM_DYNAMIC ){ | |
194 sqlite3ExprDelete(a->pExpr); | |
195 } | |
196 } | |
197 if( pWC->a!=pWC->aStatic ){ | |
198 sqliteFree(pWC->a); | |
199 } | |
200 } | |
201 | |
202 /* | |
203 ** Add a new entries to the WhereClause structure. Increase the allocated | |
204 ** space as necessary. | |
205 ** | |
206 ** WARNING: This routine might reallocate the space used to store | |
207 ** WhereTerms. All pointers to WhereTerms should be invalided after | |
208 ** calling this routine. Such pointers may be reinitialized by referencing | |
209 ** the pWC->a[] array. | |
210 */ | |
211 static int whereClauseInsert(WhereClause *pWC, Expr *p, int flags){ | |
212 WhereTerm *pTerm; | |
213 int idx; | |
214 if( pWC->nTerm>=pWC->nSlot ){ | |
215 WhereTerm *pOld = pWC->a; | |
216 pWC->a = sqliteMalloc( sizeof(pWC->a[0])*pWC->nSlot*2 ); | |
217 if( pWC->a==0 ) return 0; | |
218 memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); | |
219 if( pOld!=pWC->aStatic ){ | |
220 sqliteFree(pOld); | |
221 } | |
222 pWC->nSlot *= 2; | |
223 } | |
224 pTerm = &pWC->a[idx = pWC->nTerm]; | |
225 pWC->nTerm++; | |
226 pTerm->pExpr = p; | |
227 pTerm->flags = flags; | |
228 pTerm->pWC = pWC; | |
229 pTerm->iParent = -1; | |
230 return idx; | |
231 } | |
232 | |
233 /* | |
234 ** This routine identifies subexpressions in the WHERE clause where | |
235 ** each subexpression is separated by the AND operator or some other | |
236 ** operator specified in the op parameter. The WhereClause structure | |
237 ** is filled with pointers to subexpressions. For example: | |
238 ** | |
239 ** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22) | |
240 ** \________/ \_______________/ \________________/ | |
241 ** slot[0] slot[1] slot[2] | |
242 ** | |
243 ** The original WHERE clause in pExpr is unaltered. All this routine | |
244 ** does is make slot[] entries point to substructure within pExpr. | |
245 ** | |
246 ** In the previous sentence and in the diagram, "slot[]" refers to | |
247 ** the WhereClause.a[] array. This array grows as needed to contain | |
248 ** all terms of the WHERE clause. | |
249 */ | |
250 static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){ | |
251 if( pExpr==0 ) return; | |
252 if( pExpr->op!=op ){ | |
253 whereClauseInsert(pWC, pExpr, 0); | |
254 }else{ | |
255 whereSplit(pWC, pExpr->pLeft, op); | |
256 whereSplit(pWC, pExpr->pRight, op); | |
257 } | |
258 } | |
259 | |
260 /* | |
261 ** Initialize an expression mask set | |
262 */ | |
263 #define initMaskSet(P) memset(P, 0, sizeof(*P)) | |
264 | |
265 /* | |
266 ** Return the bitmask for the given cursor number. Return 0 if | |
267 ** iCursor is not in the set. | |
268 */ | |
269 static Bitmask getMask(ExprMaskSet *pMaskSet, int iCursor){ | |
270 int i; | |
271 for(i=0; i<pMaskSet->n; i++){ | |
272 if( pMaskSet->ix[i]==iCursor ){ | |
273 return ((Bitmask)1)<<i; | |
274 } | |
275 } | |
276 return 0; | |
277 } | |
278 | |
279 /* | |
280 ** Create a new mask for cursor iCursor. | |
281 ** | |
282 ** There is one cursor per table in the FROM clause. The number of | |
283 ** tables in the FROM clause is limited by a test early in the | |
284 ** sqlite3WhereBegin() routine. So we know that the pMaskSet->ix[] | |
285 ** array will never overflow. | |
286 */ | |
287 static void createMask(ExprMaskSet *pMaskSet, int iCursor){ | |
288 assert( pMaskSet->n < ARRAYSIZE(pMaskSet->ix) ); | |
289 pMaskSet->ix[pMaskSet->n++] = iCursor; | |
290 } | |
291 | |
292 /* | |
293 ** This routine walks (recursively) an expression tree and generates | |
294 ** a bitmask indicating which tables are used in that expression | |
295 ** tree. | |
296 ** | |
297 ** In order for this routine to work, the calling function must have | |
298 ** previously invoked sqlite3ExprResolveNames() on the expression. See | |
299 ** the header comment on that routine for additional information. | |
300 ** The sqlite3ExprResolveNames() routines looks for column names and | |
301 ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to | |
302 ** the VDBE cursor number of the table. This routine just has to | |
303 ** translate the cursor numbers into bitmask values and OR all | |
304 ** the bitmasks together. | |
305 */ | |
306 static Bitmask exprListTableUsage(ExprMaskSet*, ExprList*); | |
307 static Bitmask exprSelectTableUsage(ExprMaskSet*, Select*); | |
308 static Bitmask exprTableUsage(ExprMaskSet *pMaskSet, Expr *p){ | |
309 Bitmask mask = 0; | |
310 if( p==0 ) return 0; | |
311 if( p->op==TK_COLUMN ){ | |
312 mask = getMask(pMaskSet, p->iTable); | |
313 return mask; | |
314 } | |
315 mask = exprTableUsage(pMaskSet, p->pRight); | |
316 mask |= exprTableUsage(pMaskSet, p->pLeft); | |
317 mask |= exprListTableUsage(pMaskSet, p->pList); | |
318 mask |= exprSelectTableUsage(pMaskSet, p->pSelect); | |
319 return mask; | |
320 } | |
321 static Bitmask exprListTableUsage(ExprMaskSet *pMaskSet, ExprList *pList){ | |
322 int i; | |
323 Bitmask mask = 0; | |
324 if( pList ){ | |
325 for(i=0; i<pList->nExpr; i++){ | |
326 mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr); | |
327 } | |
328 } | |
329 return mask; | |
330 } | |
331 static Bitmask exprSelectTableUsage(ExprMaskSet *pMaskSet, Select *pS){ | |
332 Bitmask mask; | |
333 if( pS==0 ){ | |
334 mask = 0; | |
335 }else{ | |
336 mask = exprListTableUsage(pMaskSet, pS->pEList); | |
337 mask |= exprListTableUsage(pMaskSet, pS->pGroupBy); | |
338 mask |= exprListTableUsage(pMaskSet, pS->pOrderBy); | |
339 mask |= exprTableUsage(pMaskSet, pS->pWhere); | |
340 mask |= exprTableUsage(pMaskSet, pS->pHaving); | |
341 } | |
342 return mask; | |
343 } | |
344 | |
345 /* | |
346 ** Return TRUE if the given operator is one of the operators that is | |
347 ** allowed for an indexable WHERE clause term. The allowed operators are | |
348 ** "=", "<", ">", "<=", ">=", and "IN". | |
349 */ | |
350 static int allowedOp(int op){ | |
351 assert( TK_GT>TK_EQ && TK_GT<TK_GE ); | |
352 assert( TK_LT>TK_EQ && TK_LT<TK_GE ); | |
353 assert( TK_LE>TK_EQ && TK_LE<TK_GE ); | |
354 assert( TK_GE==TK_EQ+4 ); | |
355 return op==TK_IN || (op>=TK_EQ && op<=TK_GE); | |
356 } | |
357 | |
358 /* | |
359 ** Swap two objects of type T. | |
360 */ | |
361 #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} | |
362 | |
363 /* | |
364 ** Commute a comparision operator. Expressions of the form "X op Y" | |
365 ** are converted into "Y op X". | |
366 */ | |
367 static void exprCommute(Expr *pExpr){ | |
368 assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN ); | |
369 SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl); | |
370 SWAP(Expr*,pExpr->pRight,pExpr->pLeft); | |
371 if( pExpr->op>=TK_GT ){ | |
372 assert( TK_LT==TK_GT+2 ); | |
373 assert( TK_GE==TK_LE+2 ); | |
374 assert( TK_GT>TK_EQ ); | |
375 assert( TK_GT<TK_LE ); | |
376 assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE ); | |
377 pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT; | |
378 } | |
379 } | |
380 | |
381 /* | |
382 ** Translate from TK_xx operator to WO_xx bitmask. | |
383 */ | |
384 static int operatorMask(int op){ | |
385 int c; | |
386 assert( allowedOp(op) ); | |
387 if( op==TK_IN ){ | |
388 c = WO_IN; | |
389 }else{ | |
390 c = WO_EQ<<(op-TK_EQ); | |
391 } | |
392 assert( op!=TK_IN || c==WO_IN ); | |
393 assert( op!=TK_EQ || c==WO_EQ ); | |
394 assert( op!=TK_LT || c==WO_LT ); | |
395 assert( op!=TK_LE || c==WO_LE ); | |
396 assert( op!=TK_GT || c==WO_GT ); | |
397 assert( op!=TK_GE || c==WO_GE ); | |
398 return c; | |
399 } | |
400 | |
401 /* | |
402 ** Search for a term in the WHERE clause that is of the form "X <op> <expr>" | |
403 ** where X is a reference to the iColumn of table iCur and <op> is one of | |
404 ** the WO_xx operator codes specified by the op parameter. | |
405 ** Return a pointer to the term. Return 0 if not found. | |
406 */ | |
407 static WhereTerm *findTerm( | |
408 WhereClause *pWC, /* The WHERE clause to be searched */ | |
409 int iCur, /* Cursor number of LHS */ | |
410 int iColumn, /* Column number of LHS */ | |
411 Bitmask notReady, /* RHS must not overlap with this mask */ | |
412 u16 op, /* Mask of WO_xx values describing operator */ | |
413 Index *pIdx /* Must be compatible with this index, if not NULL */ | |
414 ){ | |
415 WhereTerm *pTerm; | |
416 int k; | |
417 for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){ | |
418 if( pTerm->leftCursor==iCur | |
419 && (pTerm->prereqRight & notReady)==0 | |
420 && pTerm->leftColumn==iColumn | |
421 && (pTerm->eOperator & op)!=0 | |
422 ){ | |
423 if( iCur>=0 && pIdx ){ | |
424 Expr *pX = pTerm->pExpr; | |
425 CollSeq *pColl; | |
426 char idxaff; | |
427 int j; | |
428 Parse *pParse = pWC->pParse; | |
429 | |
430 idxaff = pIdx->pTable->aCol[iColumn].affinity; | |
431 if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue; | |
432 pColl = sqlite3ExprCollSeq(pParse, pX->pLeft); | |
433 if( !pColl ){ | |
434 if( pX->pRight ){ | |
435 pColl = sqlite3ExprCollSeq(pParse, pX->pRight); | |
436 } | |
437 if( !pColl ){ | |
438 pColl = pParse->db->pDfltColl; | |
439 } | |
440 } | |
441 for(j=0; j<pIdx->nColumn && pIdx->aiColumn[j]!=iColumn; j++){} | |
442 assert( j<pIdx->nColumn ); | |
443 if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue; | |
444 } | |
445 return pTerm; | |
446 } | |
447 } | |
448 return 0; | |
449 } | |
450 | |
451 /* Forward reference */ | |
452 static void exprAnalyze(SrcList*, ExprMaskSet*, WhereClause*, int); | |
453 | |
454 /* | |
455 ** Call exprAnalyze on all terms in a WHERE clause. | |
456 ** | |
457 ** | |
458 */ | |
459 static void exprAnalyzeAll( | |
460 SrcList *pTabList, /* the FROM clause */ | |
461 ExprMaskSet *pMaskSet, /* table masks */ | |
462 WhereClause *pWC /* the WHERE clause to be analyzed */ | |
463 ){ | |
464 int i; | |
465 for(i=pWC->nTerm-1; i>=0; i--){ | |
466 exprAnalyze(pTabList, pMaskSet, pWC, i); | |
467 } | |
468 } | |
469 | |
470 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION | |
471 /* | |
472 ** Check to see if the given expression is a LIKE or GLOB operator that | |
473 ** can be optimized using inequality constraints. Return TRUE if it is | |
474 ** so and false if not. | |
475 ** | |
476 ** In order for the operator to be optimizible, the RHS must be a string | |
477 ** literal that does not begin with a wildcard. | |
478 */ | |
479 static int isLikeOrGlob( | |
480 sqlite3 *db, /* The database */ | |
481 Expr *pExpr, /* Test this expression */ | |
482 int *pnPattern, /* Number of non-wildcard prefix characters */ | |
483 int *pisComplete /* True if the only wildcard is % in the last character */ | |
484 ){ | |
485 const char *z; | |
486 Expr *pRight, *pLeft; | |
487 ExprList *pList; | |
488 int c, cnt; | |
489 int noCase; | |
490 char wc[3]; | |
491 CollSeq *pColl; | |
492 | |
493 if( !sqlite3IsLikeFunction(db, pExpr, &noCase, wc) ){ | |
494 return 0; | |
495 } | |
496 pList = pExpr->pList; | |
497 pRight = pList->a[0].pExpr; | |
498 if( pRight->op!=TK_STRING ){ | |
499 return 0; | |
500 } | |
501 pLeft = pList->a[1].pExpr; | |
502 if( pLeft->op!=TK_COLUMN ){ | |
503 return 0; | |
504 } | |
505 pColl = pLeft->pColl; | |
506 if( pColl==0 ){ | |
507 pColl = db->pDfltColl; | |
508 } | |
509 if( (pColl->type!=SQLITE_COLL_BINARY || noCase) && | |
510 (pColl->type!=SQLITE_COLL_NOCASE || !noCase) ){ | |
511 return 0; | |
512 } | |
513 sqlite3DequoteExpr(pRight); | |
514 z = (char *)pRight->token.z; | |
515 for(cnt=0; (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2]; cnt++){} | |
516 if( cnt==0 || 255==(u8)z[cnt] ){ | |
517 return 0; | |
518 } | |
519 *pisComplete = z[cnt]==wc[0] && z[cnt+1]==0; | |
520 *pnPattern = cnt; | |
521 return 1; | |
522 } | |
523 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ | |
524 | |
525 /* | |
526 ** If the pBase expression originated in the ON or USING clause of | |
527 ** a join, then transfer the appropriate markings over to derived. | |
528 */ | |
529 static void transferJoinMarkings(Expr *pDerived, Expr *pBase){ | |
530 pDerived->flags |= pBase->flags & EP_FromJoin; | |
531 pDerived->iRightJoinTable = pBase->iRightJoinTable; | |
532 } | |
533 | |
534 | |
535 /* | |
536 ** The input to this routine is an WhereTerm structure with only the | |
537 ** "pExpr" field filled in. The job of this routine is to analyze the | |
538 ** subexpression and populate all the other fields of the WhereTerm | |
539 ** structure. | |
540 ** | |
541 ** If the expression is of the form "<expr> <op> X" it gets commuted | |
542 ** to the standard form of "X <op> <expr>". If the expression is of | |
543 ** the form "X <op> Y" where both X and Y are columns, then the original | |
544 ** expression is unchanged and a new virtual expression of the form | |
545 ** "Y <op> X" is added to the WHERE clause and analyzed separately. | |
546 */ | |
547 static void exprAnalyze( | |
548 SrcList *pSrc, /* the FROM clause */ | |
549 ExprMaskSet *pMaskSet, /* table masks */ | |
550 WhereClause *pWC, /* the WHERE clause */ | |
551 int idxTerm /* Index of the term to be analyzed */ | |
552 ){ | |
553 WhereTerm *pTerm = &pWC->a[idxTerm]; | |
554 Expr *pExpr = pTerm->pExpr; | |
555 Bitmask prereqLeft; | |
556 Bitmask prereqAll; | |
557 int nPattern; | |
558 int isComplete; | |
559 | |
560 if( sqlite3MallocFailed() ) return; | |
561 prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft); | |
562 if( pExpr->op==TK_IN ){ | |
563 assert( pExpr->pRight==0 ); | |
564 pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->pList) | |
565 | exprSelectTableUsage(pMaskSet, pExpr->pSelect); | |
566 }else{ | |
567 pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight); | |
568 } | |
569 prereqAll = exprTableUsage(pMaskSet, pExpr); | |
570 if( ExprHasProperty(pExpr, EP_FromJoin) ){ | |
571 prereqAll |= getMask(pMaskSet, pExpr->iRightJoinTable); | |
572 } | |
573 pTerm->prereqAll = prereqAll; | |
574 pTerm->leftCursor = -1; | |
575 pTerm->iParent = -1; | |
576 pTerm->eOperator = 0; | |
577 if( allowedOp(pExpr->op) && (pTerm->prereqRight & prereqLeft)==0 ){ | |
578 Expr *pLeft = pExpr->pLeft; | |
579 Expr *pRight = pExpr->pRight; | |
580 if( pLeft->op==TK_COLUMN ){ | |
581 pTerm->leftCursor = pLeft->iTable; | |
582 pTerm->leftColumn = pLeft->iColumn; | |
583 pTerm->eOperator = operatorMask(pExpr->op); | |
584 } | |
585 if( pRight && pRight->op==TK_COLUMN ){ | |
586 WhereTerm *pNew; | |
587 Expr *pDup; | |
588 if( pTerm->leftCursor>=0 ){ | |
589 int idxNew; | |
590 pDup = sqlite3ExprDup(pExpr); | |
591 idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC); | |
592 if( idxNew==0 ) return; | |
593 pNew = &pWC->a[idxNew]; | |
594 pNew->iParent = idxTerm; | |
595 pTerm = &pWC->a[idxTerm]; | |
596 pTerm->nChild = 1; | |
597 pTerm->flags |= TERM_COPIED; | |
598 }else{ | |
599 pDup = pExpr; | |
600 pNew = pTerm; | |
601 } | |
602 exprCommute(pDup); | |
603 pLeft = pDup->pLeft; | |
604 pNew->leftCursor = pLeft->iTable; | |
605 pNew->leftColumn = pLeft->iColumn; | |
606 pNew->prereqRight = prereqLeft; | |
607 pNew->prereqAll = prereqAll; | |
608 pNew->eOperator = operatorMask(pDup->op); | |
609 } | |
610 } | |
611 | |
612 #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION | |
613 /* If a term is the BETWEEN operator, create two new virtual terms | |
614 ** that define the range that the BETWEEN implements. | |
615 */ | |
616 else if( pExpr->op==TK_BETWEEN ){ | |
617 ExprList *pList = pExpr->pList; | |
618 int i; | |
619 static const u8 ops[] = {TK_GE, TK_LE}; | |
620 assert( pList!=0 ); | |
621 assert( pList->nExpr==2 ); | |
622 for(i=0; i<2; i++){ | |
623 Expr *pNewExpr; | |
624 int idxNew; | |
625 pNewExpr = sqlite3Expr(ops[i], sqlite3ExprDup(pExpr->pLeft), | |
626 sqlite3ExprDup(pList->a[i].pExpr), 0); | |
627 idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); | |
628 exprAnalyze(pSrc, pMaskSet, pWC, idxNew); | |
629 pTerm = &pWC->a[idxTerm]; | |
630 pWC->a[idxNew].iParent = idxTerm; | |
631 } | |
632 pTerm->nChild = 2; | |
633 } | |
634 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */ | |
635 | |
636 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) | |
637 /* Attempt to convert OR-connected terms into an IN operator so that | |
638 ** they can make use of indices. Example: | |
639 ** | |
640 ** x = expr1 OR expr2 = x OR x = expr3 | |
641 ** | |
642 ** is converted into | |
643 ** | |
644 ** x IN (expr1,expr2,expr3) | |
645 ** | |
646 ** This optimization must be omitted if OMIT_SUBQUERY is defined because | |
647 ** the compiler for the the IN operator is part of sub-queries. | |
648 */ | |
649 else if( pExpr->op==TK_OR ){ | |
650 int ok; | |
651 int i, j; | |
652 int iColumn, iCursor; | |
653 WhereClause sOr; | |
654 WhereTerm *pOrTerm; | |
655 | |
656 assert( (pTerm->flags & TERM_DYNAMIC)==0 ); | |
657 whereClauseInit(&sOr, pWC->pParse); | |
658 whereSplit(&sOr, pExpr, TK_OR); | |
659 exprAnalyzeAll(pSrc, pMaskSet, &sOr); | |
660 assert( sOr.nTerm>0 ); | |
661 j = 0; | |
662 do{ | |
663 iColumn = sOr.a[j].leftColumn; | |
664 iCursor = sOr.a[j].leftCursor; | |
665 ok = iCursor>=0; | |
666 for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){ | |
667 if( pOrTerm->eOperator!=WO_EQ ){ | |
668 goto or_not_possible; | |
669 } | |
670 if( pOrTerm->leftCursor==iCursor && pOrTerm->leftColumn==iColumn ){ | |
671 pOrTerm->flags |= TERM_OR_OK; | |
672 }else if( (pOrTerm->flags & TERM_COPIED)!=0 || | |
673 ((pOrTerm->flags & TERM_VIRTUAL)!=0 && | |
674 (sOr.a[pOrTerm->iParent].flags & TERM_OR_OK)!=0) ){ | |
675 pOrTerm->flags &= ~TERM_OR_OK; | |
676 }else{ | |
677 ok = 0; | |
678 } | |
679 } | |
680 }while( !ok && (sOr.a[j++].flags & TERM_COPIED)!=0 && j<sOr.nTerm ); | |
681 if( ok ){ | |
682 ExprList *pList = 0; | |
683 Expr *pNew, *pDup; | |
684 for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){ | |
685 if( (pOrTerm->flags & TERM_OR_OK)==0 ) continue; | |
686 pDup = sqlite3ExprDup(pOrTerm->pExpr->pRight); | |
687 pList = sqlite3ExprListAppend(pList, pDup, 0); | |
688 } | |
689 pDup = sqlite3Expr(TK_COLUMN, 0, 0, 0); | |
690 if( pDup ){ | |
691 pDup->iTable = iCursor; | |
692 pDup->iColumn = iColumn; | |
693 } | |
694 pNew = sqlite3Expr(TK_IN, pDup, 0, 0); | |
695 if( pNew ){ | |
696 int idxNew; | |
697 transferJoinMarkings(pNew, pExpr); | |
698 pNew->pList = pList; | |
699 idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); | |
700 exprAnalyze(pSrc, pMaskSet, pWC, idxNew); | |
701 pTerm = &pWC->a[idxTerm]; | |
702 pWC->a[idxNew].iParent = idxTerm; | |
703 pTerm->nChild = 1; | |
704 }else{ | |
705 sqlite3ExprListDelete(pList); | |
706 } | |
707 } | |
708 or_not_possible: | |
709 whereClauseClear(&sOr); | |
710 } | |
711 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */ | |
712 | |
713 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION | |
714 /* Add constraints to reduce the search space on a LIKE or GLOB | |
715 ** operator. | |
716 */ | |
717 if( isLikeOrGlob(pWC->pParse->db, pExpr, &nPattern, &isComplete) ){ | |
718 Expr *pLeft, *pRight; | |
719 Expr *pStr1, *pStr2; | |
720 Expr *pNewExpr1, *pNewExpr2; | |
721 int idxNew1, idxNew2; | |
722 | |
723 pLeft = pExpr->pList->a[1].pExpr; | |
724 pRight = pExpr->pList->a[0].pExpr; | |
725 pStr1 = sqlite3Expr(TK_STRING, 0, 0, 0); | |
726 if( pStr1 ){ | |
727 sqlite3TokenCopy(&pStr1->token, &pRight->token); | |
728 pStr1->token.n = nPattern; | |
729 } | |
730 pStr2 = sqlite3ExprDup(pStr1); | |
731 if( pStr2 ){ | |
732 assert( pStr2->token.dyn ); | |
733 ++*(u8*)&pStr2->token.z[nPattern-1]; | |
734 } | |
735 pNewExpr1 = sqlite3Expr(TK_GE, sqlite3ExprDup(pLeft), pStr1, 0); | |
736 idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC); | |
737 exprAnalyze(pSrc, pMaskSet, pWC, idxNew1); | |
738 pNewExpr2 = sqlite3Expr(TK_LT, sqlite3ExprDup(pLeft), pStr2, 0); | |
739 idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC); | |
740 exprAnalyze(pSrc, pMaskSet, pWC, idxNew2); | |
741 pTerm = &pWC->a[idxTerm]; | |
742 if( isComplete ){ | |
743 pWC->a[idxNew1].iParent = idxTerm; | |
744 pWC->a[idxNew2].iParent = idxTerm; | |
745 pTerm->nChild = 2; | |
746 } | |
747 } | |
748 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ | |
749 } | |
750 | |
751 | |
752 /* | |
753 ** This routine decides if pIdx can be used to satisfy the ORDER BY | |
754 ** clause. If it can, it returns 1. If pIdx cannot satisfy the | |
755 ** ORDER BY clause, this routine returns 0. | |
756 ** | |
757 ** pOrderBy is an ORDER BY clause from a SELECT statement. pTab is the | |
758 ** left-most table in the FROM clause of that same SELECT statement and | |
759 ** the table has a cursor number of "base". pIdx is an index on pTab. | |
760 ** | |
761 ** nEqCol is the number of columns of pIdx that are used as equality | |
762 ** constraints. Any of these columns may be missing from the ORDER BY | |
763 ** clause and the match can still be a success. | |
764 ** | |
765 ** All terms of the ORDER BY that match against the index must be either | |
766 ** ASC or DESC. (Terms of the ORDER BY clause past the end of a UNIQUE | |
767 ** index do not need to satisfy this constraint.) The *pbRev value is | |
768 ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if | |
769 ** the ORDER BY clause is all ASC. | |
770 */ | |
771 static int isSortingIndex( | |
772 Parse *pParse, /* Parsing context */ | |
773 Index *pIdx, /* The index we are testing */ | |
774 int base, /* Cursor number for the table to be sorted */ | |
775 ExprList *pOrderBy, /* The ORDER BY clause */ | |
776 int nEqCol, /* Number of index columns with == constraints */ | |
777 int *pbRev /* Set to 1 if ORDER BY is DESC */ | |
778 ){ | |
779 int i, j; /* Loop counters */ | |
780 int sortOrder = 0; /* XOR of index and ORDER BY sort direction */ | |
781 int nTerm; /* Number of ORDER BY terms */ | |
782 struct ExprList_item *pTerm; /* A term of the ORDER BY clause */ | |
783 sqlite3 *db = pParse->db; | |
784 | |
785 assert( pOrderBy!=0 ); | |
786 nTerm = pOrderBy->nExpr; | |
787 assert( nTerm>0 ); | |
788 | |
789 /* Match terms of the ORDER BY clause against columns of | |
790 ** the index. | |
791 */ | |
792 for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<pIdx->nColumn; i++){ | |
793 Expr *pExpr; /* The expression of the ORDER BY pTerm */ | |
794 CollSeq *pColl; /* The collating sequence of pExpr */ | |
795 int termSortOrder; /* Sort order for this term */ | |
796 | |
797 pExpr = pTerm->pExpr; | |
798 if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){ | |
799 /* Can not use an index sort on anything that is not a column in the | |
800 ** left-most table of the FROM clause */ | |
801 return 0; | |
802 } | |
803 pColl = sqlite3ExprCollSeq(pParse, pExpr); | |
804 if( !pColl ) pColl = db->pDfltColl; | |
805 if( pExpr->iColumn!=pIdx->aiColumn[i] || | |
806 sqlite3StrICmp(pColl->zName, pIdx->azColl[i]) ){ | |
807 /* Term j of the ORDER BY clause does not match column i of the index */ | |
808 if( i<nEqCol ){ | |
809 /* If an index column that is constrained by == fails to match an | |
810 ** ORDER BY term, that is OK. Just ignore that column of the index | |
811 */ | |
812 continue; | |
813 }else{ | |
814 /* If an index column fails to match and is not constrained by == | |
815 ** then the index cannot satisfy the ORDER BY constraint. | |
816 */ | |
817 return 0; | |
818 } | |
819 } | |
820 assert( pIdx->aSortOrder!=0 ); | |
821 assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 ); | |
822 assert( pIdx->aSortOrder[i]==0 || pIdx->aSortOrder[i]==1 ); | |
823 termSortOrder = pIdx->aSortOrder[i] ^ pTerm->sortOrder; | |
824 if( i>nEqCol ){ | |
825 if( termSortOrder!=sortOrder ){ | |
826 /* Indices can only be used if all ORDER BY terms past the | |
827 ** equality constraints are all either DESC or ASC. */ | |
828 return 0; | |
829 } | |
830 }else{ | |
831 sortOrder = termSortOrder; | |
832 } | |
833 j++; | |
834 pTerm++; | |
835 } | |
836 | |
837 /* The index can be used for sorting if all terms of the ORDER BY clause | |
838 ** are covered. | |
839 */ | |
840 if( j>=nTerm ){ | |
841 *pbRev = sortOrder!=0; | |
842 return 1; | |
843 } | |
844 return 0; | |
845 } | |
846 | |
847 /* | |
848 ** Check table to see if the ORDER BY clause in pOrderBy can be satisfied | |
849 ** by sorting in order of ROWID. Return true if so and set *pbRev to be | |
850 ** true for reverse ROWID and false for forward ROWID order. | |
851 */ | |
852 static int sortableByRowid( | |
853 int base, /* Cursor number for table to be sorted */ | |
854 ExprList *pOrderBy, /* The ORDER BY clause */ | |
855 int *pbRev /* Set to 1 if ORDER BY is DESC */ | |
856 ){ | |
857 Expr *p; | |
858 | |
859 assert( pOrderBy!=0 ); | |
860 assert( pOrderBy->nExpr>0 ); | |
861 p = pOrderBy->a[0].pExpr; | |
862 if( pOrderBy->nExpr==1 && p->op==TK_COLUMN && p->iTable==base | |
863 && p->iColumn==-1 ){ | |
864 *pbRev = pOrderBy->a[0].sortOrder; | |
865 return 1; | |
866 } | |
867 return 0; | |
868 } | |
869 | |
870 /* | |
871 ** Prepare a crude estimate of the logarithm of the input value. | |
872 ** The results need not be exact. This is only used for estimating | |
873 ** the total cost of performing operatings with O(logN) or O(NlogN) | |
874 ** complexity. Because N is just a guess, it is no great tragedy if | |
875 ** logN is a little off. | |
876 */ | |
877 static double estLog(double N){ | |
878 double logN = 1; | |
879 double x = 10; | |
880 while( N>x ){ | |
881 logN += 1; | |
882 x *= 10; | |
883 } | |
884 return logN; | |
885 } | |
886 | |
887 /* | |
888 ** Find the best index for accessing a particular table. Return a pointer | |
889 ** to the index, flags that describe how the index should be used, the | |
890 ** number of equality constraints, and the "cost" for this index. | |
891 ** | |
892 ** The lowest cost index wins. The cost is an estimate of the amount of | |
893 ** CPU and disk I/O need to process the request using the selected index. | |
894 ** Factors that influence cost include: | |
895 ** | |
896 ** * The estimated number of rows that will be retrieved. (The | |
897 ** fewer the better.) | |
898 ** | |
899 ** * Whether or not sorting must occur. | |
900 ** | |
901 ** * Whether or not there must be separate lookups in the | |
902 ** index and in the main table. | |
903 ** | |
904 */ | |
905 static double bestIndex( | |
906 Parse *pParse, /* The parsing context */ | |
907 WhereClause *pWC, /* The WHERE clause */ | |
908 struct SrcList_item *pSrc, /* The FROM clause term to search */ | |
909 Bitmask notReady, /* Mask of cursors that are not available */ | |
910 ExprList *pOrderBy, /* The order by clause */ | |
911 Index **ppIndex, /* Make *ppIndex point to the best index */ | |
912 int *pFlags, /* Put flags describing this choice in *pFlags */ | |
913 int *pnEq /* Put the number of == or IN constraints here */ | |
914 ){ | |
915 WhereTerm *pTerm; | |
916 Index *bestIdx = 0; /* Index that gives the lowest cost */ | |
917 double lowestCost; /* The cost of using bestIdx */ | |
918 int bestFlags = 0; /* Flags associated with bestIdx */ | |
919 int bestNEq = 0; /* Best value for nEq */ | |
920 int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */ | |
921 Index *pProbe; /* An index we are evaluating */ | |
922 int rev; /* True to scan in reverse order */ | |
923 int flags; /* Flags associated with pProbe */ | |
924 int nEq; /* Number of == or IN constraints */ | |
925 double cost; /* Cost of using pProbe */ | |
926 | |
927 TRACE(("bestIndex: tbl=%s notReady=%x\n", pSrc->pTab->zName, notReady)); | |
928 lowestCost = SQLITE_BIG_DBL; | |
929 pProbe = pSrc->pTab->pIndex; | |
930 | |
931 /* If the table has no indices and there are no terms in the where | |
932 ** clause that refer to the ROWID, then we will never be able to do | |
933 ** anything other than a full table scan on this table. We might as | |
934 ** well put it first in the join order. That way, perhaps it can be | |
935 ** referenced by other tables in the join. | |
936 */ | |
937 if( pProbe==0 && | |
938 findTerm(pWC, iCur, -1, 0, WO_EQ|WO_IN|WO_LT|WO_LE|WO_GT|WO_GE,0)==0 && | |
939 (pOrderBy==0 || !sortableByRowid(iCur, pOrderBy, &rev)) ){ | |
940 *pFlags = 0; | |
941 *ppIndex = 0; | |
942 *pnEq = 0; | |
943 return 0.0; | |
944 } | |
945 | |
946 /* Check for a rowid=EXPR or rowid IN (...) constraints | |
947 */ | |
948 pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0); | |
949 if( pTerm ){ | |
950 Expr *pExpr; | |
951 *ppIndex = 0; | |
952 bestFlags = WHERE_ROWID_EQ; | |
953 if( pTerm->eOperator & WO_EQ ){ | |
954 /* Rowid== is always the best pick. Look no further. Because only | |
955 ** a single row is generated, output is always in sorted order */ | |
956 *pFlags = WHERE_ROWID_EQ | WHERE_UNIQUE; | |
957 *pnEq = 1; | |
958 TRACE(("... best is rowid\n")); | |
959 return 0.0; | |
960 }else if( (pExpr = pTerm->pExpr)->pList!=0 ){ | |
961 /* Rowid IN (LIST): cost is NlogN where N is the number of list | |
962 ** elements. */ | |
963 lowestCost = pExpr->pList->nExpr; | |
964 lowestCost *= estLog(lowestCost); | |
965 }else{ | |
966 /* Rowid IN (SELECT): cost is NlogN where N is the number of rows | |
967 ** in the result of the inner select. We have no way to estimate | |
968 ** that value so make a wild guess. */ | |
969 lowestCost = 200; | |
970 } | |
971 TRACE(("... rowid IN cost: %.9g\n", lowestCost)); | |
972 } | |
973 | |
974 /* Estimate the cost of a table scan. If we do not know how many | |
975 ** entries are in the table, use 1 million as a guess. | |
976 */ | |
977 cost = pProbe ? pProbe->aiRowEst[0] : 1000000; | |
978 TRACE(("... table scan base cost: %.9g\n", cost)); | |
979 flags = WHERE_ROWID_RANGE; | |
980 | |
981 /* Check for constraints on a range of rowids in a table scan. | |
982 */ | |
983 pTerm = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE|WO_GT|WO_GE, 0); | |
984 if( pTerm ){ | |
985 if( findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0) ){ | |
986 flags |= WHERE_TOP_LIMIT; | |
987 cost /= 3; /* Guess that rowid<EXPR eliminates two-thirds or rows */ | |
988 } | |
989 if( findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0) ){ | |
990 flags |= WHERE_BTM_LIMIT; | |
991 cost /= 3; /* Guess that rowid>EXPR eliminates two-thirds of rows */ | |
992 } | |
993 TRACE(("... rowid range reduces cost to %.9g\n", cost)); | |
994 }else{ | |
995 flags = 0; | |
996 } | |
997 | |
998 /* If the table scan does not satisfy the ORDER BY clause, increase | |
999 ** the cost by NlogN to cover the expense of sorting. */ | |
1000 if( pOrderBy ){ | |
1001 if( sortableByRowid(iCur, pOrderBy, &rev) ){ | |
1002 flags |= WHERE_ORDERBY|WHERE_ROWID_RANGE; | |
1003 if( rev ){ | |
1004 flags |= WHERE_REVERSE; | |
1005 } | |
1006 }else{ | |
1007 cost += cost*estLog(cost); | |
1008 TRACE(("... sorting increases cost to %.9g\n", cost)); | |
1009 } | |
1010 } | |
1011 if( cost<lowestCost ){ | |
1012 lowestCost = cost; | |
1013 bestFlags = flags; | |
1014 } | |
1015 | |
1016 /* Look at each index. | |
1017 */ | |
1018 for(; pProbe; pProbe=pProbe->pNext){ | |
1019 int i; /* Loop counter */ | |
1020 double inMultiplier = 1; | |
1021 | |
1022 TRACE(("... index %s:\n", pProbe->zName)); | |
1023 | |
1024 /* Count the number of columns in the index that are satisfied | |
1025 ** by x=EXPR constraints or x IN (...) constraints. | |
1026 */ | |
1027 flags = 0; | |
1028 for(i=0; i<pProbe->nColumn; i++){ | |
1029 int j = pProbe->aiColumn[i]; | |
1030 pTerm = findTerm(pWC, iCur, j, notReady, WO_EQ|WO_IN, pProbe); | |
1031 if( pTerm==0 ) break; | |
1032 flags |= WHERE_COLUMN_EQ; | |
1033 if( pTerm->eOperator & WO_IN ){ | |
1034 Expr *pExpr = pTerm->pExpr; | |
1035 flags |= WHERE_COLUMN_IN; | |
1036 if( pExpr->pSelect!=0 ){ | |
1037 inMultiplier *= 25; | |
1038 }else if( pExpr->pList!=0 ){ | |
1039 inMultiplier *= pExpr->pList->nExpr + 1; | |
1040 } | |
1041 } | |
1042 } | |
1043 cost = pProbe->aiRowEst[i] * inMultiplier * estLog(inMultiplier); | |
1044 nEq = i; | |
1045 if( pProbe->onError!=OE_None && (flags & WHERE_COLUMN_IN)==0 | |
1046 && nEq==pProbe->nColumn ){ | |
1047 flags |= WHERE_UNIQUE; | |
1048 } | |
1049 TRACE(("...... nEq=%d inMult=%.9g cost=%.9g\n", nEq, inMultiplier, cost)); | |
1050 | |
1051 /* Look for range constraints | |
1052 */ | |
1053 if( nEq<pProbe->nColumn ){ | |
1054 int j = pProbe->aiColumn[nEq]; | |
1055 pTerm = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pProbe); | |
1056 if( pTerm ){ | |
1057 flags |= WHERE_COLUMN_RANGE; | |
1058 if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pProbe) ){ | |
1059 flags |= WHERE_TOP_LIMIT; | |
1060 cost /= 3; | |
1061 } | |
1062 if( findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pProbe) ){ | |
1063 flags |= WHERE_BTM_LIMIT; | |
1064 cost /= 3; | |
1065 } | |
1066 TRACE(("...... range reduces cost to %.9g\n", cost)); | |
1067 } | |
1068 } | |
1069 | |
1070 /* Add the additional cost of sorting if that is a factor. | |
1071 */ | |
1072 if( pOrderBy ){ | |
1073 if( (flags & WHERE_COLUMN_IN)==0 && | |
1074 isSortingIndex(pParse,pProbe,iCur,pOrderBy,nEq,&rev) ){ | |
1075 if( flags==0 ){ | |
1076 flags = WHERE_COLUMN_RANGE; | |
1077 } | |
1078 flags |= WHERE_ORDERBY; | |
1079 if( rev ){ | |
1080 flags |= WHERE_REVERSE; | |
1081 } | |
1082 }else{ | |
1083 cost += cost*estLog(cost); | |
1084 TRACE(("...... orderby increases cost to %.9g\n", cost)); | |
1085 } | |
1086 } | |
1087 | |
1088 /* Check to see if we can get away with using just the index without | |
1089 ** ever reading the table. If that is the case, then halve the | |
1090 ** cost of this index. | |
1091 */ | |
1092 if( flags && pSrc->colUsed < (((Bitmask)1)<<(BMS-1)) ){ | |
1093 Bitmask m = pSrc->colUsed; | |
1094 int j; | |
1095 for(j=0; j<pProbe->nColumn; j++){ | |
1096 int x = pProbe->aiColumn[j]; | |
1097 if( x<BMS-1 ){ | |
1098 m &= ~(((Bitmask)1)<<x); | |
1099 } | |
1100 } | |
1101 if( m==0 ){ | |
1102 flags |= WHERE_IDX_ONLY; | |
1103 cost /= 2; | |
1104 TRACE(("...... idx-only reduces cost to %.9g\n", cost)); | |
1105 } | |
1106 } | |
1107 | |
1108 /* If this index has achieved the lowest cost so far, then use it. | |
1109 */ | |
1110 if( cost < lowestCost ){ | |
1111 bestIdx = pProbe; | |
1112 lowestCost = cost; | |
1113 assert( flags!=0 ); | |
1114 bestFlags = flags; | |
1115 bestNEq = nEq; | |
1116 } | |
1117 } | |
1118 | |
1119 /* Report the best result | |
1120 */ | |
1121 *ppIndex = bestIdx; | |
1122 TRACE(("best index is %s, cost=%.9g, flags=%x, nEq=%d\n", | |
1123 bestIdx ? bestIdx->zName : "(none)", lowestCost, bestFlags, bestNEq)); | |
1124 *pFlags = bestFlags; | |
1125 *pnEq = bestNEq; | |
1126 return lowestCost; | |
1127 } | |
1128 | |
1129 | |
1130 /* | |
1131 ** Disable a term in the WHERE clause. Except, do not disable the term | |
1132 ** if it controls a LEFT OUTER JOIN and it did not originate in the ON | |
1133 ** or USING clause of that join. | |
1134 ** | |
1135 ** Consider the term t2.z='ok' in the following queries: | |
1136 ** | |
1137 ** (1) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok' | |
1138 ** (2) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok' | |
1139 ** (3) SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok' | |
1140 ** | |
1141 ** The t2.z='ok' is disabled in the in (2) because it originates | |
1142 ** in the ON clause. The term is disabled in (3) because it is not part | |
1143 ** of a LEFT OUTER JOIN. In (1), the term is not disabled. | |
1144 ** | |
1145 ** Disabling a term causes that term to not be tested in the inner loop | |
1146 ** of the join. Disabling is an optimization. When terms are satisfied | |
1147 ** by indices, we disable them to prevent redundant tests in the inner | |
1148 ** loop. We would get the correct results if nothing were ever disabled, | |
1149 ** but joins might run a little slower. The trick is to disable as much | |
1150 ** as we can without disabling too much. If we disabled in (1), we'd get | |
1151 ** the wrong answer. See ticket #813. | |
1152 */ | |
1153 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ | |
1154 if( pTerm | |
1155 && (pTerm->flags & TERM_CODED)==0 | |
1156 && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin)) | |
1157 ){ | |
1158 pTerm->flags |= TERM_CODED; | |
1159 if( pTerm->iParent>=0 ){ | |
1160 WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent]; | |
1161 if( (--pOther->nChild)==0 ){ | |
1162 disableTerm(pLevel, pOther); | |
1163 } | |
1164 } | |
1165 } | |
1166 } | |
1167 | |
1168 /* | |
1169 ** Generate code that builds a probe for an index. Details: | |
1170 ** | |
1171 ** * Check the top nColumn entries on the stack. If any | |
1172 ** of those entries are NULL, jump immediately to brk, | |
1173 ** which is the loop exit, since no index entry will match | |
1174 ** if any part of the key is NULL. Pop (nColumn+nExtra) | |
1175 ** elements from the stack. | |
1176 ** | |
1177 ** * Construct a probe entry from the top nColumn entries in | |
1178 ** the stack with affinities appropriate for index pIdx. | |
1179 ** Only nColumn elements are popped from the stack in this case | |
1180 ** (by OP_MakeRecord). | |
1181 ** | |
1182 */ | |
1183 static void buildIndexProbe( | |
1184 Vdbe *v, | |
1185 int nColumn, | |
1186 int nExtra, | |
1187 int brk, | |
1188 Index *pIdx | |
1189 ){ | |
1190 sqlite3VdbeAddOp(v, OP_NotNull, -nColumn, sqlite3VdbeCurrentAddr(v)+3); | |
1191 sqlite3VdbeAddOp(v, OP_Pop, nColumn+nExtra, 0); | |
1192 sqlite3VdbeAddOp(v, OP_Goto, 0, brk); | |
1193 sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0); | |
1194 sqlite3IndexAffinityStr(v, pIdx); | |
1195 } | |
1196 | |
1197 | |
1198 /* | |
1199 ** Generate code for a single equality term of the WHERE clause. An equality | |
1200 ** term can be either X=expr or X IN (...). pTerm is the term to be | |
1201 ** coded. | |
1202 ** | |
1203 ** The current value for the constraint is left on the top of the stack. | |
1204 ** | |
1205 ** For a constraint of the form X=expr, the expression is evaluated and its | |
1206 ** result is left on the stack. For constraints of the form X IN (...) | |
1207 ** this routine sets up a loop that will iterate over all values of X. | |
1208 */ | |
1209 static void codeEqualityTerm( | |
1210 Parse *pParse, /* The parsing context */ | |
1211 WhereTerm *pTerm, /* The term of the WHERE clause to be coded */ | |
1212 int brk, /* Jump here to abandon the loop */ | |
1213 WhereLevel *pLevel /* When level of the FROM clause we are working on */ | |
1214 ){ | |
1215 Expr *pX = pTerm->pExpr; | |
1216 if( pX->op!=TK_IN ){ | |
1217 assert( pX->op==TK_EQ ); | |
1218 sqlite3ExprCode(pParse, pX->pRight); | |
1219 #ifndef SQLITE_OMIT_SUBQUERY | |
1220 }else{ | |
1221 int iTab; | |
1222 int *aIn; | |
1223 Vdbe *v = pParse->pVdbe; | |
1224 | |
1225 sqlite3CodeSubselect(pParse, pX); | |
1226 iTab = pX->iTable; | |
1227 sqlite3VdbeAddOp(v, OP_Rewind, iTab, 0); | |
1228 VdbeComment((v, "# %.*s", pX->span.n, pX->span.z)); | |
1229 pLevel->nIn++; | |
1230 sqliteReallocOrFree((void**)&pLevel->aInLoop, | |
1231 sizeof(pLevel->aInLoop[0])*2*pLevel->nIn); | |
1232 aIn = pLevel->aInLoop; | |
1233 if( aIn ){ | |
1234 aIn += pLevel->nIn*2 - 2; | |
1235 aIn[0] = iTab; | |
1236 aIn[1] = sqlite3VdbeAddOp(v, OP_Column, iTab, 0); | |
1237 }else{ | |
1238 pLevel->nIn = 0; | |
1239 } | |
1240 #endif | |
1241 } | |
1242 disableTerm(pLevel, pTerm); | |
1243 } | |
1244 | |
1245 /* | |
1246 ** Generate code that will evaluate all == and IN constraints for an | |
1247 ** index. The values for all constraints are left on the stack. | |
1248 ** | |
1249 ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c). | |
1250 ** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10 | |
1251 ** The index has as many as three equality constraints, but in this | |
1252 ** example, the third "c" value is an inequality. So only two | |
1253 ** constraints are coded. This routine will generate code to evaluate | |
1254 ** a==5 and b IN (1,2,3). The current values for a and b will be left | |
1255 ** on the stack - a is the deepest and b the shallowest. | |
1256 ** | |
1257 ** In the example above nEq==2. But this subroutine works for any value | |
1258 ** of nEq including 0. If nEq==0, this routine is nearly a no-op. | |
1259 ** The only thing it does is allocate the pLevel->iMem memory cell. | |
1260 ** | |
1261 ** This routine always allocates at least one memory cell and puts | |
1262 ** the address of that memory cell in pLevel->iMem. The code that | |
1263 ** calls this routine will use pLevel->iMem to store the termination | |
1264 ** key value of the loop. If one or more IN operators appear, then | |
1265 ** this routine allocates an additional nEq memory cells for internal | |
1266 ** use. | |
1267 */ | |
1268 static void codeAllEqualityTerms( | |
1269 Parse *pParse, /* Parsing context */ | |
1270 WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */ | |
1271 WhereClause *pWC, /* The WHERE clause */ | |
1272 Bitmask notReady, /* Which parts of FROM have not yet been coded */ | |
1273 int brk /* Jump here to end the loop */ | |
1274 ){ | |
1275 int nEq = pLevel->nEq; /* The number of == or IN constraints to code */ | |
1276 int termsInMem = 0; /* If true, store value in mem[] cells */ | |
1277 Vdbe *v = pParse->pVdbe; /* The virtual machine under construction */ | |
1278 Index *pIdx = pLevel->pIdx; /* The index being used for this loop */ | |
1279 int iCur = pLevel->iTabCur; /* The cursor of the table */ | |
1280 WhereTerm *pTerm; /* A single constraint term */ | |
1281 int j; /* Loop counter */ | |
1282 | |
1283 /* Figure out how many memory cells we will need then allocate them. | |
1284 ** We always need at least one used to store the loop terminator | |
1285 ** value. If there are IN operators we'll need one for each == or | |
1286 ** IN constraint. | |
1287 */ | |
1288 pLevel->iMem = pParse->nMem++; | |
1289 if( pLevel->flags & WHERE_COLUMN_IN ){ | |
1290 pParse->nMem += pLevel->nEq; | |
1291 termsInMem = 1; | |
1292 } | |
1293 | |
1294 /* Evaluate the equality constraints | |
1295 */ | |
1296 for(j=0; j<pIdx->nColumn; j++){ | |
1297 int k = pIdx->aiColumn[j]; | |
1298 pTerm = findTerm(pWC, iCur, k, notReady, WO_EQ|WO_IN, pIdx); | |
1299 if( pTerm==0 ) break; | |
1300 assert( (pTerm->flags & TERM_CODED)==0 ); | |
1301 codeEqualityTerm(pParse, pTerm, brk, pLevel); | |
1302 if( termsInMem ){ | |
1303 sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem+j+1, 1); | |
1304 } | |
1305 } | |
1306 assert( j==nEq ); | |
1307 | |
1308 /* Make sure all the constraint values are on the top of the stack | |
1309 */ | |
1310 if( termsInMem ){ | |
1311 for(j=0; j<nEq; j++){ | |
1312 sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem+j+1, 0); | |
1313 } | |
1314 } | |
1315 } | |
1316 | |
1317 #if defined(SQLITE_TEST) | |
1318 /* | |
1319 ** The following variable holds a text description of query plan generated | |
1320 ** by the most recent call to sqlite3WhereBegin(). Each call to WhereBegin | |
1321 ** overwrites the previous. This information is used for testing and | |
1322 ** analysis only. | |
1323 */ | |
1324 char sqlite3_query_plan[BMS*2*40]; /* Text of the join */ | |
1325 static int nQPlan = 0; /* Next free slow in _query_plan[] */ | |
1326 | |
1327 #endif /* SQLITE_TEST */ | |
1328 | |
1329 | |
1330 | |
1331 /* | |
1332 ** Generate the beginning of the loop used for WHERE clause processing. | |
1333 ** The return value is a pointer to an opaque structure that contains | |
1334 ** information needed to terminate the loop. Later, the calling routine | |
1335 ** should invoke sqlite3WhereEnd() with the return value of this function | |
1336 ** in order to complete the WHERE clause processing. | |
1337 ** | |
1338 ** If an error occurs, this routine returns NULL. | |
1339 ** | |
1340 ** The basic idea is to do a nested loop, one loop for each table in | |
1341 ** the FROM clause of a select. (INSERT and UPDATE statements are the | |
1342 ** same as a SELECT with only a single table in the FROM clause.) For | |
1343 ** example, if the SQL is this: | |
1344 ** | |
1345 ** SELECT * FROM t1, t2, t3 WHERE ...; | |
1346 ** | |
1347 ** Then the code generated is conceptually like the following: | |
1348 ** | |
1349 ** foreach row1 in t1 do \ Code generated | |
1350 ** foreach row2 in t2 do |-- by sqlite3WhereBegin() | |
1351 ** foreach row3 in t3 do / | |
1352 ** ... | |
1353 ** end \ Code generated | |
1354 ** end |-- by sqlite3WhereEnd() | |
1355 ** end / | |
1356 ** | |
1357 ** Note that the loops might not be nested in the order in which they | |
1358 ** appear in the FROM clause if a different order is better able to make | |
1359 ** use of indices. Note also that when the IN operator appears in | |
1360 ** the WHERE clause, it might result in additional nested loops for | |
1361 ** scanning through all values on the right-hand side of the IN. | |
1362 ** | |
1363 ** There are Btree cursors associated with each table. t1 uses cursor | |
1364 ** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor. | |
1365 ** And so forth. This routine generates code to open those VDBE cursors | |
1366 ** and sqlite3WhereEnd() generates the code to close them. | |
1367 ** | |
1368 ** The code that sqlite3WhereBegin() generates leaves the cursors named | |
1369 ** in pTabList pointing at their appropriate entries. The [...] code | |
1370 ** can use OP_Column and OP_Rowid opcodes on these cursors to extract | |
1371 ** data from the various tables of the loop. | |
1372 ** | |
1373 ** If the WHERE clause is empty, the foreach loops must each scan their | |
1374 ** entire tables. Thus a three-way join is an O(N^3) operation. But if | |
1375 ** the tables have indices and there are terms in the WHERE clause that | |
1376 ** refer to those indices, a complete table scan can be avoided and the | |
1377 ** code will run much faster. Most of the work of this routine is checking | |
1378 ** to see if there are indices that can be used to speed up the loop. | |
1379 ** | |
1380 ** Terms of the WHERE clause are also used to limit which rows actually | |
1381 ** make it to the "..." in the middle of the loop. After each "foreach", | |
1382 ** terms of the WHERE clause that use only terms in that loop and outer | |
1383 ** loops are evaluated and if false a jump is made around all subsequent | |
1384 ** inner loops (or around the "..." if the test occurs within the inner- | |
1385 ** most loop) | |
1386 ** | |
1387 ** OUTER JOINS | |
1388 ** | |
1389 ** An outer join of tables t1 and t2 is conceptally coded as follows: | |
1390 ** | |
1391 ** foreach row1 in t1 do | |
1392 ** flag = 0 | |
1393 ** foreach row2 in t2 do | |
1394 ** start: | |
1395 ** ... | |
1396 ** flag = 1 | |
1397 ** end | |
1398 ** if flag==0 then | |
1399 ** move the row2 cursor to a null row | |
1400 ** goto start | |
1401 ** fi | |
1402 ** end | |
1403 ** | |
1404 ** ORDER BY CLAUSE PROCESSING | |
1405 ** | |
1406 ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement, | |
1407 ** if there is one. If there is no ORDER BY clause or if this routine | |
1408 ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL. | |
1409 ** | |
1410 ** If an index can be used so that the natural output order of the table | |
1411 ** scan is correct for the ORDER BY clause, then that index is used and | |
1412 ** *ppOrderBy is set to NULL. This is an optimization that prevents an | |
1413 ** unnecessary sort of the result set if an index appropriate for the | |
1414 ** ORDER BY clause already exists. | |
1415 ** | |
1416 ** If the where clause loops cannot be arranged to provide the correct | |
1417 ** output order, then the *ppOrderBy is unchanged. | |
1418 */ | |
1419 WhereInfo *sqlite3WhereBegin( | |
1420 Parse *pParse, /* The parser context */ | |
1421 SrcList *pTabList, /* A list of all tables to be scanned */ | |
1422 Expr *pWhere, /* The WHERE clause */ | |
1423 ExprList **ppOrderBy /* An ORDER BY clause, or NULL */ | |
1424 ){ | |
1425 int i; /* Loop counter */ | |
1426 WhereInfo *pWInfo; /* Will become the return value of this function */ | |
1427 Vdbe *v = pParse->pVdbe; /* The virtual database engine */ | |
1428 int brk, cont = 0; /* Addresses used during code generation */ | |
1429 Bitmask notReady; /* Cursors that are not yet positioned */ | |
1430 WhereTerm *pTerm; /* A single term in the WHERE clause */ | |
1431 ExprMaskSet maskSet; /* The expression mask set */ | |
1432 WhereClause wc; /* The WHERE clause is divided into these terms */ | |
1433 struct SrcList_item *pTabItem; /* A single entry from pTabList */ | |
1434 WhereLevel *pLevel; /* A single level in the pWInfo list */ | |
1435 int iFrom; /* First unused FROM clause element */ | |
1436 int andFlags; /* AND-ed combination of all wc.a[].flags */ | |
1437 | |
1438 /* The number of tables in the FROM clause is limited by the number of | |
1439 ** bits in a Bitmask | |
1440 */ | |
1441 if( pTabList->nSrc>BMS ){ | |
1442 sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS); | |
1443 return 0; | |
1444 } | |
1445 | |
1446 /* Split the WHERE clause into separate subexpressions where each | |
1447 ** subexpression is separated by an AND operator. | |
1448 */ | |
1449 initMaskSet(&maskSet); | |
1450 whereClauseInit(&wc, pParse); | |
1451 whereSplit(&wc, pWhere, TK_AND); | |
1452 | |
1453 /* Allocate and initialize the WhereInfo structure that will become the | |
1454 ** return value. | |
1455 */ | |
1456 pWInfo = sqliteMalloc( sizeof(WhereInfo) + pTabList->nSrc*sizeof(WhereLevel)); | |
1457 if( sqlite3MallocFailed() ){ | |
1458 goto whereBeginNoMem; | |
1459 } | |
1460 pWInfo->pParse = pParse; | |
1461 pWInfo->pTabList = pTabList; | |
1462 pWInfo->iBreak = sqlite3VdbeMakeLabel(v); | |
1463 | |
1464 /* Special case: a WHERE clause that is constant. Evaluate the | |
1465 ** expression and either jump over all of the code or fall thru. | |
1466 */ | |
1467 if( pWhere && (pTabList->nSrc==0 || sqlite3ExprIsConstant(pWhere)) ){ | |
1468 sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, 1); | |
1469 pWhere = 0; | |
1470 } | |
1471 | |
1472 /* Analyze all of the subexpressions. Note that exprAnalyze() might | |
1473 ** add new virtual terms onto the end of the WHERE clause. We do not | |
1474 ** want to analyze these virtual terms, so start analyzing at the end | |
1475 ** and work forward so that the added virtual terms are never processed. | |
1476 */ | |
1477 for(i=0; i<pTabList->nSrc; i++){ | |
1478 createMask(&maskSet, pTabList->a[i].iCursor); | |
1479 } | |
1480 exprAnalyzeAll(pTabList, &maskSet, &wc); | |
1481 if( sqlite3MallocFailed() ){ | |
1482 goto whereBeginNoMem; | |
1483 } | |
1484 | |
1485 /* Chose the best index to use for each table in the FROM clause. | |
1486 ** | |
1487 ** This loop fills in the following fields: | |
1488 ** | |
1489 ** pWInfo->a[].pIdx The index to use for this level of the loop. | |
1490 ** pWInfo->a[].flags WHERE_xxx flags associated with pIdx | |
1491 ** pWInfo->a[].nEq The number of == and IN constraints | |
1492 ** pWInfo->a[].iFrom When term of the FROM clause is being coded | |
1493 ** pWInfo->a[].iTabCur The VDBE cursor for the database table | |
1494 ** pWInfo->a[].iIdxCur The VDBE cursor for the index | |
1495 ** | |
1496 ** This loop also figures out the nesting order of tables in the FROM | |
1497 ** clause. | |
1498 */ | |
1499 notReady = ~(Bitmask)0; | |
1500 pTabItem = pTabList->a; | |
1501 pLevel = pWInfo->a; | |
1502 andFlags = ~0; | |
1503 TRACE(("*** Optimizer Start ***\n")); | |
1504 for(i=iFrom=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){ | |
1505 Index *pIdx; /* Index for FROM table at pTabItem */ | |
1506 int flags; /* Flags asssociated with pIdx */ | |
1507 int nEq; /* Number of == or IN constraints */ | |
1508 double cost; /* The cost for pIdx */ | |
1509 int j; /* For looping over FROM tables */ | |
1510 Index *pBest = 0; /* The best index seen so far */ | |
1511 int bestFlags = 0; /* Flags associated with pBest */ | |
1512 int bestNEq = 0; /* nEq associated with pBest */ | |
1513 double lowestCost; /* Cost of the pBest */ | |
1514 int bestJ = 0; /* The value of j */ | |
1515 Bitmask m; /* Bitmask value for j or bestJ */ | |
1516 int once = 0; /* True when first table is seen */ | |
1517 | |
1518 lowestCost = SQLITE_BIG_DBL; | |
1519 for(j=iFrom, pTabItem=&pTabList->a[j]; j<pTabList->nSrc; j++, pTabItem++){ | |
1520 int doNotReorder; /* True if this table should not be reordered */ | |
1521 | |
1522 doNotReorder = (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0 | |
1523 || (j>0 && (pTabItem[-1].jointype & (JT_LEFT|JT_CROSS))!=0); | |
1524 if( once && doNotReorder ) break; | |
1525 m = getMask(&maskSet, pTabItem->iCursor); | |
1526 if( (m & notReady)==0 ){ | |
1527 if( j==iFrom ) iFrom++; | |
1528 continue; | |
1529 } | |
1530 cost = bestIndex(pParse, &wc, pTabItem, notReady, | |
1531 (i==0 && ppOrderBy) ? *ppOrderBy : 0, | |
1532 &pIdx, &flags, &nEq); | |
1533 if( cost<lowestCost ){ | |
1534 once = 1; | |
1535 lowestCost = cost; | |
1536 pBest = pIdx; | |
1537 bestFlags = flags; | |
1538 bestNEq = nEq; | |
1539 bestJ = j; | |
1540 } | |
1541 if( doNotReorder ) break; | |
1542 } | |
1543 TRACE(("*** Optimizer choose table %d for loop %d\n", bestJ, | |
1544 pLevel-pWInfo->a)); | |
1545 if( (bestFlags & WHERE_ORDERBY)!=0 ){ | |
1546 *ppOrderBy = 0; | |
1547 } | |
1548 andFlags &= bestFlags; | |
1549 pLevel->flags = bestFlags; | |
1550 pLevel->pIdx = pBest; | |
1551 pLevel->nEq = bestNEq; | |
1552 pLevel->aInLoop = 0; | |
1553 pLevel->nIn = 0; | |
1554 if( pBest ){ | |
1555 pLevel->iIdxCur = pParse->nTab++; | |
1556 }else{ | |
1557 pLevel->iIdxCur = -1; | |
1558 } | |
1559 notReady &= ~getMask(&maskSet, pTabList->a[bestJ].iCursor); | |
1560 pLevel->iFrom = bestJ; | |
1561 } | |
1562 TRACE(("*** Optimizer Finished ***\n")); | |
1563 | |
1564 /* If the total query only selects a single row, then the ORDER BY | |
1565 ** clause is irrelevant. | |
1566 */ | |
1567 if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){ | |
1568 *ppOrderBy = 0; | |
1569 } | |
1570 | |
1571 /* Open all tables in the pTabList and any indices selected for | |
1572 ** searching those tables. | |
1573 */ | |
1574 sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */ | |
1575 pLevel = pWInfo->a; | |
1576 for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){ | |
1577 Table *pTab; /* Table to open */ | |
1578 Index *pIx; /* Index used to access pTab (if any) */ | |
1579 int iDb; /* Index of database containing table/index */ | |
1580 int iIdxCur = pLevel->iIdxCur; | |
1581 | |
1582 #ifndef SQLITE_OMIT_EXPLAIN | |
1583 if( pParse->explain==2 ){ | |
1584 char *zMsg; | |
1585 struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom]; | |
1586 zMsg = sqlite3MPrintf("TABLE %s", pItem->zName); | |
1587 if( pItem->zAlias ){ | |
1588 zMsg = sqlite3MPrintf("%z AS %s", zMsg, pItem->zAlias); | |
1589 } | |
1590 if( (pIx = pLevel->pIdx)!=0 ){ | |
1591 zMsg = sqlite3MPrintf("%z WITH INDEX %s", zMsg, pIx->zName); | |
1592 }else if( pLevel->flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ | |
1593 zMsg = sqlite3MPrintf("%z USING PRIMARY KEY", zMsg); | |
1594 } | |
1595 if( pLevel->flags & WHERE_ORDERBY ){ | |
1596 zMsg = sqlite3MPrintf("%z ORDER BY", zMsg); | |
1597 } | |
1598 sqlite3VdbeOp3(v, OP_Explain, i, pLevel->iFrom, zMsg, P3_DYNAMIC); | |
1599 } | |
1600 #endif /* SQLITE_OMIT_EXPLAIN */ | |
1601 pTabItem = &pTabList->a[pLevel->iFrom]; | |
1602 pTab = pTabItem->pTab; | |
1603 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); | |
1604 if( pTab->isTransient || pTab->pSelect ) continue; | |
1605 if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){ | |
1606 sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, OP_OpenRead); | |
1607 if( pTab->nCol<(sizeof(Bitmask)*8) ){ | |
1608 Bitmask b = pTabItem->colUsed; | |
1609 int n = 0; | |
1610 for(; b; b=b>>1, n++){} | |
1611 sqlite3VdbeChangeP2(v, sqlite3VdbeCurrentAddr(v)-1, n); | |
1612 assert( n<=pTab->nCol ); | |
1613 } | |
1614 }else{ | |
1615 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); | |
1616 } | |
1617 pLevel->iTabCur = pTabItem->iCursor; | |
1618 if( (pIx = pLevel->pIdx)!=0 ){ | |
1619 KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx); | |
1620 assert( pIx->pSchema==pTab->pSchema ); | |
1621 sqlite3VdbeAddOp(v, OP_Integer, iDb, 0); | |
1622 VdbeComment((v, "# %s", pIx->zName)); | |
1623 sqlite3VdbeOp3(v, OP_OpenRead, iIdxCur, pIx->tnum, | |
1624 (char*)pKey, P3_KEYINFO_HANDOFF); | |
1625 } | |
1626 if( (pLevel->flags & WHERE_IDX_ONLY)!=0 ){ | |
1627 sqlite3VdbeAddOp(v, OP_SetNumColumns, iIdxCur, pIx->nColumn+1); | |
1628 } | |
1629 sqlite3CodeVerifySchema(pParse, iDb); | |
1630 } | |
1631 pWInfo->iTop = sqlite3VdbeCurrentAddr(v); | |
1632 | |
1633 /* Generate the code to do the search. Each iteration of the for | |
1634 ** loop below generates code for a single nested loop of the VM | |
1635 ** program. | |
1636 */ | |
1637 notReady = ~(Bitmask)0; | |
1638 for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){ | |
1639 int j; | |
1640 int iCur = pTabItem->iCursor; /* The VDBE cursor for the table */ | |
1641 Index *pIdx; /* The index we will be using */ | |
1642 int iIdxCur; /* The VDBE cursor for the index */ | |
1643 int omitTable; /* True if we use the index only */ | |
1644 int bRev; /* True if we need to scan in reverse order */ | |
1645 | |
1646 pTabItem = &pTabList->a[pLevel->iFrom]; | |
1647 iCur = pTabItem->iCursor; | |
1648 pIdx = pLevel->pIdx; | |
1649 iIdxCur = pLevel->iIdxCur; | |
1650 bRev = (pLevel->flags & WHERE_REVERSE)!=0; | |
1651 omitTable = (pLevel->flags & WHERE_IDX_ONLY)!=0; | |
1652 | |
1653 /* Create labels for the "break" and "continue" instructions | |
1654 ** for the current loop. Jump to brk to break out of a loop. | |
1655 ** Jump to cont to go immediately to the next iteration of the | |
1656 ** loop. | |
1657 */ | |
1658 brk = pLevel->brk = sqlite3VdbeMakeLabel(v); | |
1659 cont = pLevel->cont = sqlite3VdbeMakeLabel(v); | |
1660 | |
1661 /* If this is the right table of a LEFT OUTER JOIN, allocate and | |
1662 ** initialize a memory cell that records if this table matches any | |
1663 ** row of the left table of the join. | |
1664 */ | |
1665 if( pLevel->iFrom>0 && (pTabItem[-1].jointype & JT_LEFT)!=0 ){ | |
1666 if( !pParse->nMem ) pParse->nMem++; | |
1667 pLevel->iLeftJoin = pParse->nMem++; | |
1668 sqlite3VdbeAddOp(v, OP_MemInt, 0, pLevel->iLeftJoin); | |
1669 VdbeComment((v, "# init LEFT JOIN no-match flag")); | |
1670 } | |
1671 | |
1672 if( pLevel->flags & WHERE_ROWID_EQ ){ | |
1673 /* Case 1: We can directly reference a single row using an | |
1674 ** equality comparison against the ROWID field. Or | |
1675 ** we reference multiple rows using a "rowid IN (...)" | |
1676 ** construct. | |
1677 */ | |
1678 pTerm = findTerm(&wc, iCur, -1, notReady, WO_EQ|WO_IN, 0); | |
1679 assert( pTerm!=0 ); | |
1680 assert( pTerm->pExpr!=0 ); | |
1681 assert( pTerm->leftCursor==iCur ); | |
1682 assert( omitTable==0 ); | |
1683 codeEqualityTerm(pParse, pTerm, brk, pLevel); | |
1684 sqlite3VdbeAddOp(v, OP_MustBeInt, 1, brk); | |
1685 sqlite3VdbeAddOp(v, OP_NotExists, iCur, brk); | |
1686 VdbeComment((v, "pk")); | |
1687 pLevel->op = OP_Noop; | |
1688 }else if( pLevel->flags & WHERE_ROWID_RANGE ){ | |
1689 /* Case 2: We have an inequality comparison against the ROWID field. | |
1690 */ | |
1691 int testOp = OP_Noop; | |
1692 int start; | |
1693 WhereTerm *pStart, *pEnd; | |
1694 | |
1695 assert( omitTable==0 ); | |
1696 pStart = findTerm(&wc, iCur, -1, notReady, WO_GT|WO_GE, 0); | |
1697 pEnd = findTerm(&wc, iCur, -1, notReady, WO_LT|WO_LE, 0); | |
1698 if( bRev ){ | |
1699 pTerm = pStart; | |
1700 pStart = pEnd; | |
1701 pEnd = pTerm; | |
1702 } | |
1703 if( pStart ){ | |
1704 Expr *pX; | |
1705 pX = pStart->pExpr; | |
1706 assert( pX!=0 ); | |
1707 assert( pStart->leftCursor==iCur ); | |
1708 sqlite3ExprCode(pParse, pX->pRight); | |
1709 sqlite3VdbeAddOp(v, OP_ForceInt, pX->op==TK_LE || pX->op==TK_GT, brk); | |
1710 sqlite3VdbeAddOp(v, bRev ? OP_MoveLt : OP_MoveGe, iCur, brk); | |
1711 VdbeComment((v, "pk")); | |
1712 disableTerm(pLevel, pStart); | |
1713 }else{ | |
1714 sqlite3VdbeAddOp(v, bRev ? OP_Last : OP_Rewind, iCur, brk); | |
1715 } | |
1716 if( pEnd ){ | |
1717 Expr *pX; | |
1718 pX = pEnd->pExpr; | |
1719 assert( pX!=0 ); | |
1720 assert( pEnd->leftCursor==iCur ); | |
1721 sqlite3ExprCode(pParse, pX->pRight); | |
1722 pLevel->iMem = pParse->nMem++; | |
1723 sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); | |
1724 if( pX->op==TK_LT || pX->op==TK_GT ){ | |
1725 testOp = bRev ? OP_Le : OP_Ge; | |
1726 }else{ | |
1727 testOp = bRev ? OP_Lt : OP_Gt; | |
1728 } | |
1729 disableTerm(pLevel, pEnd); | |
1730 } | |
1731 start = sqlite3VdbeCurrentAddr(v); | |
1732 pLevel->op = bRev ? OP_Prev : OP_Next; | |
1733 pLevel->p1 = iCur; | |
1734 pLevel->p2 = start; | |
1735 if( testOp!=OP_Noop ){ | |
1736 sqlite3VdbeAddOp(v, OP_Rowid, iCur, 0); | |
1737 sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); | |
1738 sqlite3VdbeAddOp(v, testOp, SQLITE_AFF_NUMERIC, brk); | |
1739 } | |
1740 }else if( pLevel->flags & WHERE_COLUMN_RANGE ){ | |
1741 /* Case 3: The WHERE clause term that refers to the right-most | |
1742 ** column of the index is an inequality. For example, if | |
1743 ** the index is on (x,y,z) and the WHERE clause is of the | |
1744 ** form "x=5 AND y<10" then this case is used. Only the | |
1745 ** right-most column can be an inequality - the rest must | |
1746 ** use the "==" and "IN" operators. | |
1747 ** | |
1748 ** This case is also used when there are no WHERE clause | |
1749 ** constraints but an index is selected anyway, in order | |
1750 ** to force the output order to conform to an ORDER BY. | |
1751 */ | |
1752 int start; | |
1753 int nEq = pLevel->nEq; | |
1754 int topEq=0; /* True if top limit uses ==. False is strictly < */ | |
1755 int btmEq=0; /* True if btm limit uses ==. False if strictly > */ | |
1756 int topOp, btmOp; /* Operators for the top and bottom search bounds */ | |
1757 int testOp; | |
1758 int nNotNull; /* Number of rows of index that must be non-NULL */ | |
1759 int topLimit = (pLevel->flags & WHERE_TOP_LIMIT)!=0; | |
1760 int btmLimit = (pLevel->flags & WHERE_BTM_LIMIT)!=0; | |
1761 | |
1762 /* Generate code to evaluate all constraint terms using == or IN | |
1763 ** and level the values of those terms on the stack. | |
1764 */ | |
1765 codeAllEqualityTerms(pParse, pLevel, &wc, notReady, brk); | |
1766 | |
1767 /* Duplicate the equality term values because they will all be | |
1768 ** used twice: once to make the termination key and once to make the | |
1769 ** start key. | |
1770 */ | |
1771 for(j=0; j<nEq; j++){ | |
1772 sqlite3VdbeAddOp(v, OP_Dup, nEq-1, 0); | |
1773 } | |
1774 | |
1775 /* Figure out what comparison operators to use for top and bottom | |
1776 ** search bounds. For an ascending index, the bottom bound is a > or >= | |
1777 ** operator and the top bound is a < or <= operator. For a descending | |
1778 ** index the operators are reversed. | |
1779 */ | |
1780 nNotNull = nEq + topLimit; | |
1781 if( pIdx->aSortOrder[nEq]==SQLITE_SO_ASC ){ | |
1782 topOp = WO_LT|WO_LE; | |
1783 btmOp = WO_GT|WO_GE; | |
1784 }else{ | |
1785 topOp = WO_GT|WO_GE; | |
1786 btmOp = WO_LT|WO_LE; | |
1787 SWAP(int, topLimit, btmLimit); | |
1788 } | |
1789 | |
1790 /* Generate the termination key. This is the key value that | |
1791 ** will end the search. There is no termination key if there | |
1792 ** are no equality terms and no "X<..." term. | |
1793 ** | |
1794 ** 2002-Dec-04: On a reverse-order scan, the so-called "termination" | |
1795 ** key computed here really ends up being the start key. | |
1796 */ | |
1797 if( topLimit ){ | |
1798 Expr *pX; | |
1799 int k = pIdx->aiColumn[j]; | |
1800 pTerm = findTerm(&wc, iCur, k, notReady, topOp, pIdx); | |
1801 assert( pTerm!=0 ); | |
1802 pX = pTerm->pExpr; | |
1803 assert( (pTerm->flags & TERM_CODED)==0 ); | |
1804 sqlite3ExprCode(pParse, pX->pRight); | |
1805 topEq = pTerm->eOperator & (WO_LE|WO_GE); | |
1806 disableTerm(pLevel, pTerm); | |
1807 testOp = OP_IdxGE; | |
1808 }else{ | |
1809 testOp = nEq>0 ? OP_IdxGE : OP_Noop; | |
1810 topEq = 1; | |
1811 } | |
1812 if( testOp!=OP_Noop ){ | |
1813 int nCol = nEq + topLimit; | |
1814 pLevel->iMem = pParse->nMem++; | |
1815 buildIndexProbe(v, nCol, nEq, brk, pIdx); | |
1816 if( bRev ){ | |
1817 int op = topEq ? OP_MoveLe : OP_MoveLt; | |
1818 sqlite3VdbeAddOp(v, op, iIdxCur, brk); | |
1819 }else{ | |
1820 sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); | |
1821 } | |
1822 }else if( bRev ){ | |
1823 sqlite3VdbeAddOp(v, OP_Last, iIdxCur, brk); | |
1824 } | |
1825 | |
1826 /* Generate the start key. This is the key that defines the lower | |
1827 ** bound on the search. There is no start key if there are no | |
1828 ** equality terms and if there is no "X>..." term. In | |
1829 ** that case, generate a "Rewind" instruction in place of the | |
1830 ** start key search. | |
1831 ** | |
1832 ** 2002-Dec-04: In the case of a reverse-order search, the so-called | |
1833 ** "start" key really ends up being used as the termination key. | |
1834 */ | |
1835 if( btmLimit ){ | |
1836 Expr *pX; | |
1837 int k = pIdx->aiColumn[j]; | |
1838 pTerm = findTerm(&wc, iCur, k, notReady, btmOp, pIdx); | |
1839 assert( pTerm!=0 ); | |
1840 pX = pTerm->pExpr; | |
1841 assert( (pTerm->flags & TERM_CODED)==0 ); | |
1842 sqlite3ExprCode(pParse, pX->pRight); | |
1843 btmEq = pTerm->eOperator & (WO_LE|WO_GE); | |
1844 disableTerm(pLevel, pTerm); | |
1845 }else{ | |
1846 btmEq = 1; | |
1847 } | |
1848 if( nEq>0 || btmLimit ){ | |
1849 int nCol = nEq + btmLimit; | |
1850 buildIndexProbe(v, nCol, 0, brk, pIdx); | |
1851 if( bRev ){ | |
1852 pLevel->iMem = pParse->nMem++; | |
1853 sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 1); | |
1854 testOp = OP_IdxLT; | |
1855 }else{ | |
1856 int op = btmEq ? OP_MoveGe : OP_MoveGt; | |
1857 sqlite3VdbeAddOp(v, op, iIdxCur, brk); | |
1858 } | |
1859 }else if( bRev ){ | |
1860 testOp = OP_Noop; | |
1861 }else{ | |
1862 sqlite3VdbeAddOp(v, OP_Rewind, iIdxCur, brk); | |
1863 } | |
1864 | |
1865 /* Generate the the top of the loop. If there is a termination | |
1866 ** key we have to test for that key and abort at the top of the | |
1867 ** loop. | |
1868 */ | |
1869 start = sqlite3VdbeCurrentAddr(v); | |
1870 if( testOp!=OP_Noop ){ | |
1871 sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); | |
1872 sqlite3VdbeAddOp(v, testOp, iIdxCur, brk); | |
1873 if( (topEq && !bRev) || (!btmEq && bRev) ){ | |
1874 sqlite3VdbeChangeP3(v, -1, "+", P3_STATIC); | |
1875 } | |
1876 } | |
1877 sqlite3VdbeAddOp(v, OP_RowKey, iIdxCur, 0); | |
1878 sqlite3VdbeAddOp(v, OP_IdxIsNull, nNotNull, cont); | |
1879 if( !omitTable ){ | |
1880 sqlite3VdbeAddOp(v, OP_IdxRowid, iIdxCur, 0); | |
1881 sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0); | |
1882 } | |
1883 | |
1884 /* Record the instruction used to terminate the loop. | |
1885 */ | |
1886 pLevel->op = bRev ? OP_Prev : OP_Next; | |
1887 pLevel->p1 = iIdxCur; | |
1888 pLevel->p2 = start; | |
1889 }else if( pLevel->flags & WHERE_COLUMN_EQ ){ | |
1890 /* Case 4: There is an index and all terms of the WHERE clause that | |
1891 ** refer to the index using the "==" or "IN" operators. | |
1892 */ | |
1893 int start; | |
1894 int nEq = pLevel->nEq; | |
1895 | |
1896 /* Generate code to evaluate all constraint terms using == or IN | |
1897 ** and leave the values of those terms on the stack. | |
1898 */ | |
1899 codeAllEqualityTerms(pParse, pLevel, &wc, notReady, brk); | |
1900 | |
1901 /* Generate a single key that will be used to both start and terminate | |
1902 ** the search | |
1903 */ | |
1904 buildIndexProbe(v, nEq, 0, brk, pIdx); | |
1905 sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iMem, 0); | |
1906 | |
1907 /* Generate code (1) to move to the first matching element of the table. | |
1908 ** Then generate code (2) that jumps to "brk" after the cursor is past | |
1909 ** the last matching element of the table. The code (1) is executed | |
1910 ** once to initialize the search, the code (2) is executed before each | |
1911 ** iteration of the scan to see if the scan has finished. */ | |
1912 if( bRev ){ | |
1913 /* Scan in reverse order */ | |
1914 sqlite3VdbeAddOp(v, OP_MoveLe, iIdxCur, brk); | |
1915 start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); | |
1916 sqlite3VdbeAddOp(v, OP_IdxLT, iIdxCur, brk); | |
1917 pLevel->op = OP_Prev; | |
1918 }else{ | |
1919 /* Scan in the forward order */ | |
1920 sqlite3VdbeAddOp(v, OP_MoveGe, iIdxCur, brk); | |
1921 start = sqlite3VdbeAddOp(v, OP_MemLoad, pLevel->iMem, 0); | |
1922 sqlite3VdbeOp3(v, OP_IdxGE, iIdxCur, brk, "+", P3_STATIC); | |
1923 pLevel->op = OP_Next; | |
1924 } | |
1925 sqlite3VdbeAddOp(v, OP_RowKey, iIdxCur, 0); | |
1926 sqlite3VdbeAddOp(v, OP_IdxIsNull, nEq, cont); | |
1927 if( !omitTable ){ | |
1928 sqlite3VdbeAddOp(v, OP_IdxRowid, iIdxCur, 0); | |
1929 sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0); | |
1930 } | |
1931 pLevel->p1 = iIdxCur; | |
1932 pLevel->p2 = start; | |
1933 }else{ | |
1934 /* Case 5: There is no usable index. We must do a complete | |
1935 ** scan of the entire table. | |
1936 */ | |
1937 assert( omitTable==0 ); | |
1938 assert( bRev==0 ); | |
1939 pLevel->op = OP_Next; | |
1940 pLevel->p1 = iCur; | |
1941 pLevel->p2 = 1 + sqlite3VdbeAddOp(v, OP_Rewind, iCur, brk); | |
1942 } | |
1943 notReady &= ~getMask(&maskSet, iCur); | |
1944 | |
1945 /* Insert code to test every subexpression that can be completely | |
1946 ** computed using the current set of tables. | |
1947 */ | |
1948 for(pTerm=wc.a, j=wc.nTerm; j>0; j--, pTerm++){ | |
1949 Expr *pE; | |
1950 if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue; | |
1951 if( (pTerm->prereqAll & notReady)!=0 ) continue; | |
1952 pE = pTerm->pExpr; | |
1953 assert( pE!=0 ); | |
1954 if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ | |
1955 continue; | |
1956 } | |
1957 sqlite3ExprIfFalse(pParse, pE, cont, 1); | |
1958 pTerm->flags |= TERM_CODED; | |
1959 } | |
1960 | |
1961 /* For a LEFT OUTER JOIN, generate code that will record the fact that | |
1962 ** at least one row of the right table has matched the left table. | |
1963 */ | |
1964 if( pLevel->iLeftJoin ){ | |
1965 pLevel->top = sqlite3VdbeCurrentAddr(v); | |
1966 sqlite3VdbeAddOp(v, OP_MemInt, 1, pLevel->iLeftJoin); | |
1967 VdbeComment((v, "# record LEFT JOIN hit")); | |
1968 for(pTerm=wc.a, j=0; j<wc.nTerm; j++, pTerm++){ | |
1969 if( pTerm->flags & (TERM_VIRTUAL|TERM_CODED) ) continue; | |
1970 if( (pTerm->prereqAll & notReady)!=0 ) continue; | |
1971 assert( pTerm->pExpr ); | |
1972 sqlite3ExprIfFalse(pParse, pTerm->pExpr, cont, 1); | |
1973 pTerm->flags |= TERM_CODED; | |
1974 } | |
1975 } | |
1976 } | |
1977 | |
1978 #ifdef SQLITE_TEST /* For testing and debugging use only */ | |
1979 /* Record in the query plan information about the current table | |
1980 ** and the index used to access it (if any). If the table itself | |
1981 ** is not used, its name is just '{}'. If no index is used | |
1982 ** the index is listed as "{}". If the primary key is used the | |
1983 ** index name is '*'. | |
1984 */ | |
1985 for(i=0; i<pTabList->nSrc; i++){ | |
1986 char *z; | |
1987 int n; | |
1988 pLevel = &pWInfo->a[i]; | |
1989 pTabItem = &pTabList->a[pLevel->iFrom]; | |
1990 z = pTabItem->zAlias; | |
1991 if( z==0 ) z = pTabItem->pTab->zName; | |
1992 n = strlen(z); | |
1993 if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){ | |
1994 if( pLevel->flags & WHERE_IDX_ONLY ){ | |
1995 strcpy(&sqlite3_query_plan[nQPlan], "{}"); | |
1996 nQPlan += 2; | |
1997 }else{ | |
1998 strcpy(&sqlite3_query_plan[nQPlan], z); | |
1999 nQPlan += n; | |
2000 } | |
2001 sqlite3_query_plan[nQPlan++] = ' '; | |
2002 } | |
2003 if( pLevel->flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){ | |
2004 strcpy(&sqlite3_query_plan[nQPlan], "* "); | |
2005 nQPlan += 2; | |
2006 }else if( pLevel->pIdx==0 ){ | |
2007 strcpy(&sqlite3_query_plan[nQPlan], "{} "); | |
2008 nQPlan += 3; | |
2009 }else{ | |
2010 n = strlen(pLevel->pIdx->zName); | |
2011 if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){ | |
2012 strcpy(&sqlite3_query_plan[nQPlan], pLevel->pIdx->zName); | |
2013 nQPlan += n; | |
2014 sqlite3_query_plan[nQPlan++] = ' '; | |
2015 } | |
2016 } | |
2017 } | |
2018 while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){ | |
2019 sqlite3_query_plan[--nQPlan] = 0; | |
2020 } | |
2021 sqlite3_query_plan[nQPlan] = 0; | |
2022 nQPlan = 0; | |
2023 #endif /* SQLITE_TEST // Testing and debugging use only */ | |
2024 | |
2025 /* Record the continuation address in the WhereInfo structure. Then | |
2026 ** clean up and return. | |
2027 */ | |
2028 pWInfo->iContinue = cont; | |
2029 whereClauseClear(&wc); | |
2030 return pWInfo; | |
2031 | |
2032 /* Jump here if malloc fails */ | |
2033 whereBeginNoMem: | |
2034 whereClauseClear(&wc); | |
2035 sqliteFree(pWInfo); | |
2036 return 0; | |
2037 } | |
2038 | |
2039 /* | |
2040 ** Generate the end of the WHERE loop. See comments on | |
2041 ** sqlite3WhereBegin() for additional information. | |
2042 */ | |
2043 void sqlite3WhereEnd(WhereInfo *pWInfo){ | |
2044 Vdbe *v = pWInfo->pParse->pVdbe; | |
2045 int i; | |
2046 WhereLevel *pLevel; | |
2047 SrcList *pTabList = pWInfo->pTabList; | |
2048 | |
2049 /* Generate loop termination code. | |
2050 */ | |
2051 for(i=pTabList->nSrc-1; i>=0; i--){ | |
2052 pLevel = &pWInfo->a[i]; | |
2053 sqlite3VdbeResolveLabel(v, pLevel->cont); | |
2054 if( pLevel->op!=OP_Noop ){ | |
2055 sqlite3VdbeAddOp(v, pLevel->op, pLevel->p1, pLevel->p2); | |
2056 } | |
2057 sqlite3VdbeResolveLabel(v, pLevel->brk); | |
2058 if( pLevel->nIn ){ | |
2059 int *a; | |
2060 int j; | |
2061 for(j=pLevel->nIn, a=&pLevel->aInLoop[j*2-2]; j>0; j--, a-=2){ | |
2062 sqlite3VdbeAddOp(v, OP_Next, a[0], a[1]); | |
2063 sqlite3VdbeJumpHere(v, a[1]-1); | |
2064 } | |
2065 sqliteFree(pLevel->aInLoop); | |
2066 } | |
2067 if( pLevel->iLeftJoin ){ | |
2068 int addr; | |
2069 addr = sqlite3VdbeAddOp(v, OP_IfMemPos, pLevel->iLeftJoin, 0); | |
2070 sqlite3VdbeAddOp(v, OP_NullRow, pTabList->a[i].iCursor, 0); | |
2071 if( pLevel->iIdxCur>=0 ){ | |
2072 sqlite3VdbeAddOp(v, OP_NullRow, pLevel->iIdxCur, 0); | |
2073 } | |
2074 sqlite3VdbeAddOp(v, OP_Goto, 0, pLevel->top); | |
2075 sqlite3VdbeJumpHere(v, addr); | |
2076 } | |
2077 } | |
2078 | |
2079 /* The "break" point is here, just past the end of the outer loop. | |
2080 ** Set it. | |
2081 */ | |
2082 sqlite3VdbeResolveLabel(v, pWInfo->iBreak); | |
2083 | |
2084 /* Close all of the cursors that were opened by sqlite3WhereBegin. | |
2085 */ | |
2086 for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){ | |
2087 struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom]; | |
2088 Table *pTab = pTabItem->pTab; | |
2089 assert( pTab!=0 ); | |
2090 if( pTab->isTransient || pTab->pSelect ) continue; | |
2091 if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){ | |
2092 sqlite3VdbeAddOp(v, OP_Close, pTabItem->iCursor, 0); | |
2093 } | |
2094 if( pLevel->pIdx!=0 ){ | |
2095 sqlite3VdbeAddOp(v, OP_Close, pLevel->iIdxCur, 0); | |
2096 } | |
2097 | |
2098 /* Make cursor substitutions for cases where we want to use | |
2099 ** just the index and never reference the table. | |
2100 ** | |
2101 ** Calls to the code generator in between sqlite3WhereBegin and | |
2102 ** sqlite3WhereEnd will have created code that references the table | |
2103 ** directly. This loop scans all that code looking for opcodes | |
2104 ** that reference the table and converts them into opcodes that | |
2105 ** reference the index. | |
2106 */ | |
2107 if( pLevel->flags & WHERE_IDX_ONLY ){ | |
2108 int k, j, last; | |
2109 VdbeOp *pOp; | |
2110 Index *pIdx = pLevel->pIdx; | |
2111 | |
2112 assert( pIdx!=0 ); | |
2113 pOp = sqlite3VdbeGetOp(v, pWInfo->iTop); | |
2114 last = sqlite3VdbeCurrentAddr(v); | |
2115 for(k=pWInfo->iTop; k<last; k++, pOp++){ | |
2116 if( pOp->p1!=pLevel->iTabCur ) continue; | |
2117 if( pOp->opcode==OP_Column ){ | |
2118 pOp->p1 = pLevel->iIdxCur; | |
2119 for(j=0; j<pIdx->nColumn; j++){ | |
2120 if( pOp->p2==pIdx->aiColumn[j] ){ | |
2121 pOp->p2 = j; | |
2122 break; | |
2123 } | |
2124 } | |
2125 }else if( pOp->opcode==OP_Rowid ){ | |
2126 pOp->p1 = pLevel->iIdxCur; | |
2127 pOp->opcode = OP_IdxRowid; | |
2128 }else if( pOp->opcode==OP_NullRow ){ | |
2129 pOp->opcode = OP_Noop; | |
2130 } | |
2131 } | |
2132 } | |
2133 } | |
2134 | |
2135 /* Final cleanup | |
2136 */ | |
2137 sqliteFree(pWInfo); | |
2138 return; | |
2139 } |