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