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