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 file contains C code routines that are called by the parser 13 ** to handle SELECT statements in SQLite. 14 */ 15 #include "sqliteInt.h" 16 17 /* 18 ** An instance of the following object is used to record information about 19 ** how to process the DISTINCT keyword, to simplify passing that information 20 ** into the selectInnerLoop() routine. 21 */ 22 typedef struct DistinctCtx DistinctCtx; 23 struct DistinctCtx { 24 u8 isTnct; /* 0: Not distinct. 1: DISTICT 2: DISTINCT and ORDER BY */ 25 u8 eTnctType; /* One of the WHERE_DISTINCT_* operators */ 26 int tabTnct; /* Ephemeral table used for DISTINCT processing */ 27 int addrTnct; /* Address of OP_OpenEphemeral opcode for tabTnct */ 28 }; 29 30 /* 31 ** An instance of the following object is used to record information about 32 ** the ORDER BY (or GROUP BY) clause of query is being coded. 33 ** 34 ** The aDefer[] array is used by the sorter-references optimization. For 35 ** example, assuming there is no index that can be used for the ORDER BY, 36 ** for the query: 37 ** 38 ** SELECT a, bigblob FROM t1 ORDER BY a LIMIT 10; 39 ** 40 ** it may be more efficient to add just the "a" values to the sorter, and 41 ** retrieve the associated "bigblob" values directly from table t1 as the 42 ** 10 smallest "a" values are extracted from the sorter. 43 ** 44 ** When the sorter-reference optimization is used, there is one entry in the 45 ** aDefer[] array for each database table that may be read as values are 46 ** extracted from the sorter. 47 */ 48 typedef struct SortCtx SortCtx; 49 struct SortCtx { 50 ExprList *pOrderBy; /* The ORDER BY (or GROUP BY clause) */ 51 int nOBSat; /* Number of ORDER BY terms satisfied by indices */ 52 int iECursor; /* Cursor number for the sorter */ 53 int regReturn; /* Register holding block-output return address */ 54 int labelBkOut; /* Start label for the block-output subroutine */ 55 int addrSortIndex; /* Address of the OP_SorterOpen or OP_OpenEphemeral */ 56 int labelDone; /* Jump here when done, ex: LIMIT reached */ 57 int labelOBLopt; /* Jump here when sorter is full */ 58 u8 sortFlags; /* Zero or more SORTFLAG_* bits */ 59 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 60 u8 nDefer; /* Number of valid entries in aDefer[] */ 61 struct DeferredCsr { 62 Table *pTab; /* Table definition */ 63 int iCsr; /* Cursor number for table */ 64 int nKey; /* Number of PK columns for table pTab (>=1) */ 65 } aDefer[4]; 66 #endif 67 struct RowLoadInfo *pDeferredRowLoad; /* Deferred row loading info or NULL */ 68 }; 69 #define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */ 70 71 /* 72 ** Delete all the content of a Select structure. Deallocate the structure 73 ** itself depending on the value of bFree 74 ** 75 ** If bFree==1, call sqlite3DbFree() on the p object. 76 ** If bFree==0, Leave the first Select object unfreed 77 */ 78 static void clearSelect(sqlite3 *db, Select *p, int bFree){ 79 assert( db!=0 ); 80 while( p ){ 81 Select *pPrior = p->pPrior; 82 sqlite3ExprListDelete(db, p->pEList); 83 sqlite3SrcListDelete(db, p->pSrc); 84 sqlite3ExprDelete(db, p->pWhere); 85 sqlite3ExprListDelete(db, p->pGroupBy); 86 sqlite3ExprDelete(db, p->pHaving); 87 sqlite3ExprListDelete(db, p->pOrderBy); 88 sqlite3ExprDelete(db, p->pLimit); 89 if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith); 90 #ifndef SQLITE_OMIT_WINDOWFUNC 91 if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){ 92 sqlite3WindowListDelete(db, p->pWinDefn); 93 } 94 while( p->pWin ){ 95 assert( p->pWin->ppThis==&p->pWin ); 96 sqlite3WindowUnlinkFromSelect(p->pWin); 97 } 98 #endif 99 if( bFree ) sqlite3DbNNFreeNN(db, p); 100 p = pPrior; 101 bFree = 1; 102 } 103 } 104 105 /* 106 ** Initialize a SelectDest structure. 107 */ 108 void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){ 109 pDest->eDest = (u8)eDest; 110 pDest->iSDParm = iParm; 111 pDest->iSDParm2 = 0; 112 pDest->zAffSdst = 0; 113 pDest->iSdst = 0; 114 pDest->nSdst = 0; 115 } 116 117 118 /* 119 ** Allocate a new Select structure and return a pointer to that 120 ** structure. 121 */ 122 Select *sqlite3SelectNew( 123 Parse *pParse, /* Parsing context */ 124 ExprList *pEList, /* which columns to include in the result */ 125 SrcList *pSrc, /* the FROM clause -- which tables to scan */ 126 Expr *pWhere, /* the WHERE clause */ 127 ExprList *pGroupBy, /* the GROUP BY clause */ 128 Expr *pHaving, /* the HAVING clause */ 129 ExprList *pOrderBy, /* the ORDER BY clause */ 130 u32 selFlags, /* Flag parameters, such as SF_Distinct */ 131 Expr *pLimit /* LIMIT value. NULL means not used */ 132 ){ 133 Select *pNew, *pAllocated; 134 Select standin; 135 pAllocated = pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) ); 136 if( pNew==0 ){ 137 assert( pParse->db->mallocFailed ); 138 pNew = &standin; 139 } 140 if( pEList==0 ){ 141 pEList = sqlite3ExprListAppend(pParse, 0, 142 sqlite3Expr(pParse->db,TK_ASTERISK,0)); 143 } 144 pNew->pEList = pEList; 145 pNew->op = TK_SELECT; 146 pNew->selFlags = selFlags; 147 pNew->iLimit = 0; 148 pNew->iOffset = 0; 149 pNew->selId = ++pParse->nSelect; 150 pNew->addrOpenEphm[0] = -1; 151 pNew->addrOpenEphm[1] = -1; 152 pNew->nSelectRow = 0; 153 if( pSrc==0 ) pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*pSrc)); 154 pNew->pSrc = pSrc; 155 pNew->pWhere = pWhere; 156 pNew->pGroupBy = pGroupBy; 157 pNew->pHaving = pHaving; 158 pNew->pOrderBy = pOrderBy; 159 pNew->pPrior = 0; 160 pNew->pNext = 0; 161 pNew->pLimit = pLimit; 162 pNew->pWith = 0; 163 #ifndef SQLITE_OMIT_WINDOWFUNC 164 pNew->pWin = 0; 165 pNew->pWinDefn = 0; 166 #endif 167 if( pParse->db->mallocFailed ) { 168 clearSelect(pParse->db, pNew, pNew!=&standin); 169 pAllocated = 0; 170 }else{ 171 assert( pNew->pSrc!=0 || pParse->nErr>0 ); 172 } 173 return pAllocated; 174 } 175 176 177 /* 178 ** Delete the given Select structure and all of its substructures. 179 */ 180 void sqlite3SelectDelete(sqlite3 *db, Select *p){ 181 if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1); 182 } 183 184 /* 185 ** Return a pointer to the right-most SELECT statement in a compound. 186 */ 187 static Select *findRightmost(Select *p){ 188 while( p->pNext ) p = p->pNext; 189 return p; 190 } 191 192 /* 193 ** Given 1 to 3 identifiers preceding the JOIN keyword, determine the 194 ** type of join. Return an integer constant that expresses that type 195 ** in terms of the following bit values: 196 ** 197 ** JT_INNER 198 ** JT_CROSS 199 ** JT_OUTER 200 ** JT_NATURAL 201 ** JT_LEFT 202 ** JT_RIGHT 203 ** 204 ** A full outer join is the combination of JT_LEFT and JT_RIGHT. 205 ** 206 ** If an illegal or unsupported join type is seen, then still return 207 ** a join type, but put an error in the pParse structure. 208 ** 209 ** These are the valid join types: 210 ** 211 ** 212 ** pA pB pC Return Value 213 ** ------- ----- ----- ------------ 214 ** CROSS - - JT_CROSS 215 ** INNER - - JT_INNER 216 ** LEFT - - JT_LEFT|JT_OUTER 217 ** LEFT OUTER - JT_LEFT|JT_OUTER 218 ** RIGHT - - JT_RIGHT|JT_OUTER 219 ** RIGHT OUTER - JT_RIGHT|JT_OUTER 220 ** FULL - - JT_LEFT|JT_RIGHT|JT_OUTER 221 ** FULL OUTER - JT_LEFT|JT_RIGHT|JT_OUTER 222 ** NATURAL INNER - JT_NATURAL|JT_INNER 223 ** NATURAL LEFT - JT_NATURAL|JT_LEFT|JT_OUTER 224 ** NATURAL LEFT OUTER JT_NATURAL|JT_LEFT|JT_OUTER 225 ** NATURAL RIGHT - JT_NATURAL|JT_RIGHT|JT_OUTER 226 ** NATURAL RIGHT OUTER JT_NATURAL|JT_RIGHT|JT_OUTER 227 ** NATURAL FULL - JT_NATURAL|JT_LEFT|JT_RIGHT 228 ** NATURAL FULL OUTER JT_NATRUAL|JT_LEFT|JT_RIGHT 229 ** 230 ** To preserve historical compatibly, SQLite also accepts a variety 231 ** of other non-standard and in many cases non-sensical join types. 232 ** This routine makes as much sense at it can from the nonsense join 233 ** type and returns a result. Examples of accepted nonsense join types 234 ** include but are not limited to: 235 ** 236 ** INNER CROSS JOIN -> same as JOIN 237 ** NATURAL CROSS JOIN -> same as NATURAL JOIN 238 ** OUTER LEFT JOIN -> same as LEFT JOIN 239 ** LEFT NATURAL JOIN -> same as NATURAL LEFT JOIN 240 ** LEFT RIGHT JOIN -> same as FULL JOIN 241 ** RIGHT OUTER FULL JOIN -> same as FULL JOIN 242 ** CROSS CROSS CROSS JOIN -> same as JOIN 243 ** 244 ** The only restrictions on the join type name are: 245 ** 246 ** * "INNER" cannot appear together with "OUTER", "LEFT", "RIGHT", 247 ** or "FULL". 248 ** 249 ** * "CROSS" cannot appear together with "OUTER", "LEFT", "RIGHT, 250 ** or "FULL". 251 ** 252 ** * If "OUTER" is present then there must also be one of 253 ** "LEFT", "RIGHT", or "FULL" 254 */ 255 int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){ 256 int jointype = 0; 257 Token *apAll[3]; 258 Token *p; 259 /* 0123456789 123456789 123456789 123 */ 260 static const char zKeyText[] = "naturaleftouterightfullinnercross"; 261 static const struct { 262 u8 i; /* Beginning of keyword text in zKeyText[] */ 263 u8 nChar; /* Length of the keyword in characters */ 264 u8 code; /* Join type mask */ 265 } aKeyword[] = { 266 /* (0) natural */ { 0, 7, JT_NATURAL }, 267 /* (1) left */ { 6, 4, JT_LEFT|JT_OUTER }, 268 /* (2) outer */ { 10, 5, JT_OUTER }, 269 /* (3) right */ { 14, 5, JT_RIGHT|JT_OUTER }, 270 /* (4) full */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER }, 271 /* (5) inner */ { 23, 5, JT_INNER }, 272 /* (6) cross */ { 28, 5, JT_INNER|JT_CROSS }, 273 }; 274 int i, j; 275 apAll[0] = pA; 276 apAll[1] = pB; 277 apAll[2] = pC; 278 for(i=0; i<3 && apAll[i]; i++){ 279 p = apAll[i]; 280 for(j=0; j<ArraySize(aKeyword); j++){ 281 if( p->n==aKeyword[j].nChar 282 && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){ 283 jointype |= aKeyword[j].code; 284 break; 285 } 286 } 287 testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 ); 288 if( j>=ArraySize(aKeyword) ){ 289 jointype |= JT_ERROR; 290 break; 291 } 292 } 293 if( 294 (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) || 295 (jointype & JT_ERROR)!=0 || 296 (jointype & (JT_OUTER|JT_LEFT|JT_RIGHT))==JT_OUTER 297 ){ 298 const char *zSp1 = " "; 299 const char *zSp2 = " "; 300 if( pB==0 ){ zSp1++; } 301 if( pC==0 ){ zSp2++; } 302 sqlite3ErrorMsg(pParse, "unknown join type: " 303 "%T%s%T%s%T", pA, zSp1, pB, zSp2, pC); 304 jointype = JT_INNER; 305 } 306 return jointype; 307 } 308 309 /* 310 ** Return the index of a column in a table. Return -1 if the column 311 ** is not contained in the table. 312 */ 313 int sqlite3ColumnIndex(Table *pTab, const char *zCol){ 314 int i; 315 u8 h = sqlite3StrIHash(zCol); 316 Column *pCol; 317 for(pCol=pTab->aCol, i=0; i<pTab->nCol; pCol++, i++){ 318 if( pCol->hName==h && sqlite3StrICmp(pCol->zCnName, zCol)==0 ) return i; 319 } 320 return -1; 321 } 322 323 /* 324 ** Mark a subquery result column as having been used. 325 */ 326 void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){ 327 assert( pItem!=0 ); 328 assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); 329 if( pItem->fg.isNestedFrom ){ 330 ExprList *pResults; 331 assert( pItem->pSelect!=0 ); 332 pResults = pItem->pSelect->pEList; 333 assert( pResults!=0 ); 334 assert( iCol>=0 && iCol<pResults->nExpr ); 335 pResults->a[iCol].fg.bUsed = 1; 336 } 337 } 338 339 /* 340 ** Search the tables iStart..iEnd (inclusive) in pSrc, looking for a 341 ** table that has a column named zCol. The search is left-to-right. 342 ** The first match found is returned. 343 ** 344 ** When found, set *piTab and *piCol to the table index and column index 345 ** of the matching column and return TRUE. 346 ** 347 ** If not found, return FALSE. 348 */ 349 static int tableAndColumnIndex( 350 SrcList *pSrc, /* Array of tables to search */ 351 int iStart, /* First member of pSrc->a[] to check */ 352 int iEnd, /* Last member of pSrc->a[] to check */ 353 const char *zCol, /* Name of the column we are looking for */ 354 int *piTab, /* Write index of pSrc->a[] here */ 355 int *piCol, /* Write index of pSrc->a[*piTab].pTab->aCol[] here */ 356 int bIgnoreHidden /* Ignore hidden columns */ 357 ){ 358 int i; /* For looping over tables in pSrc */ 359 int iCol; /* Index of column matching zCol */ 360 361 assert( iEnd<pSrc->nSrc ); 362 assert( iStart>=0 ); 363 assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */ 364 365 for(i=iStart; i<=iEnd; i++){ 366 iCol = sqlite3ColumnIndex(pSrc->a[i].pTab, zCol); 367 if( iCol>=0 368 && (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pTab->aCol[iCol])==0) 369 ){ 370 if( piTab ){ 371 sqlite3SrcItemColumnUsed(&pSrc->a[i], iCol); 372 *piTab = i; 373 *piCol = iCol; 374 } 375 return 1; 376 } 377 } 378 return 0; 379 } 380 381 /* 382 ** Set the EP_OuterON property on all terms of the given expression. 383 ** And set the Expr.w.iJoin to iTable for every term in the 384 ** expression. 385 ** 386 ** The EP_OuterON property is used on terms of an expression to tell 387 ** the OUTER JOIN processing logic that this term is part of the 388 ** join restriction specified in the ON or USING clause and not a part 389 ** of the more general WHERE clause. These terms are moved over to the 390 ** WHERE clause during join processing but we need to remember that they 391 ** originated in the ON or USING clause. 392 ** 393 ** The Expr.w.iJoin tells the WHERE clause processing that the 394 ** expression depends on table w.iJoin even if that table is not 395 ** explicitly mentioned in the expression. That information is needed 396 ** for cases like this: 397 ** 398 ** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5 399 ** 400 ** The where clause needs to defer the handling of the t1.x=5 401 ** term until after the t2 loop of the join. In that way, a 402 ** NULL t2 row will be inserted whenever t1.x!=5. If we do not 403 ** defer the handling of t1.x=5, it will be processed immediately 404 ** after the t1 loop and rows with t1.x!=5 will never appear in 405 ** the output, which is incorrect. 406 */ 407 void sqlite3SetJoinExpr(Expr *p, int iTable, u32 joinFlag){ 408 assert( joinFlag==EP_OuterON || joinFlag==EP_InnerON ); 409 while( p ){ 410 ExprSetProperty(p, joinFlag); 411 assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); 412 ExprSetVVAProperty(p, EP_NoReduce); 413 p->w.iJoin = iTable; 414 if( p->op==TK_FUNCTION ){ 415 assert( ExprUseXList(p) ); 416 if( p->x.pList ){ 417 int i; 418 for(i=0; i<p->x.pList->nExpr; i++){ 419 sqlite3SetJoinExpr(p->x.pList->a[i].pExpr, iTable, joinFlag); 420 } 421 } 422 } 423 sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag); 424 p = p->pRight; 425 } 426 } 427 428 /* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN 429 ** is simplified into an ordinary JOIN, and when an ON expression is 430 ** "pushed down" into the WHERE clause of a subquery. 431 ** 432 ** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into 433 ** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then 434 ** just clear every EP_OuterON and EP_InnerON mark from the expression tree. 435 ** 436 ** If nullable is true, that means that Expr p might evaluate to NULL even 437 ** if it is a reference to a NOT NULL column. This can happen, for example, 438 ** if the table that p references is on the left side of a RIGHT JOIN. 439 ** If nullable is true, then take care to not remove the EP_CanBeNull bit. 440 ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c 441 */ 442 static void unsetJoinExpr(Expr *p, int iTable, int nullable){ 443 while( p ){ 444 if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){ 445 ExprClearProperty(p, EP_OuterON|EP_InnerON); 446 if( iTable>=0 ) ExprSetProperty(p, EP_InnerON); 447 } 448 if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){ 449 ExprClearProperty(p, EP_CanBeNull); 450 } 451 if( p->op==TK_FUNCTION ){ 452 assert( ExprUseXList(p) ); 453 if( p->x.pList ){ 454 int i; 455 for(i=0; i<p->x.pList->nExpr; i++){ 456 unsetJoinExpr(p->x.pList->a[i].pExpr, iTable, nullable); 457 } 458 } 459 } 460 unsetJoinExpr(p->pLeft, iTable, nullable); 461 p = p->pRight; 462 } 463 } 464 465 /* 466 ** This routine processes the join information for a SELECT statement. 467 ** 468 ** * A NATURAL join is converted into a USING join. After that, we 469 ** do not need to be concerned with NATURAL joins and we only have 470 ** think about USING joins. 471 ** 472 ** * ON and USING clauses result in extra terms being added to the 473 ** WHERE clause to enforce the specified constraints. The extra 474 ** WHERE clause terms will be tagged with EP_OuterON or 475 ** EP_InnerON so that we know that they originated in ON/USING. 476 ** 477 ** The terms of a FROM clause are contained in the Select.pSrc structure. 478 ** The left most table is the first entry in Select.pSrc. The right-most 479 ** table is the last entry. The join operator is held in the entry to 480 ** the right. Thus entry 1 contains the join operator for the join between 481 ** entries 0 and 1. Any ON or USING clauses associated with the join are 482 ** also attached to the right entry. 483 ** 484 ** This routine returns the number of errors encountered. 485 */ 486 static int sqlite3ProcessJoin(Parse *pParse, Select *p){ 487 SrcList *pSrc; /* All tables in the FROM clause */ 488 int i, j; /* Loop counters */ 489 SrcItem *pLeft; /* Left table being joined */ 490 SrcItem *pRight; /* Right table being joined */ 491 492 pSrc = p->pSrc; 493 pLeft = &pSrc->a[0]; 494 pRight = &pLeft[1]; 495 for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){ 496 Table *pRightTab = pRight->pTab; 497 u32 joinType; 498 499 if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue; 500 joinType = (pRight->fg.jointype & JT_OUTER)!=0 ? EP_OuterON : EP_InnerON; 501 502 /* If this is a NATURAL join, synthesize an approprate USING clause 503 ** to specify which columns should be joined. 504 */ 505 if( pRight->fg.jointype & JT_NATURAL ){ 506 IdList *pUsing = 0; 507 if( pRight->fg.isUsing || pRight->u3.pOn ){ 508 sqlite3ErrorMsg(pParse, "a NATURAL join may not have " 509 "an ON or USING clause", 0); 510 return 1; 511 } 512 for(j=0; j<pRightTab->nCol; j++){ 513 char *zName; /* Name of column in the right table */ 514 515 if( IsHiddenColumn(&pRightTab->aCol[j]) ) continue; 516 zName = pRightTab->aCol[j].zCnName; 517 if( tableAndColumnIndex(pSrc, 0, i, zName, 0, 0, 1) ){ 518 pUsing = sqlite3IdListAppend(pParse, pUsing, 0); 519 if( pUsing ){ 520 assert( pUsing->nId>0 ); 521 assert( pUsing->a[pUsing->nId-1].zName==0 ); 522 pUsing->a[pUsing->nId-1].zName = sqlite3DbStrDup(pParse->db, zName); 523 } 524 } 525 } 526 if( pUsing ){ 527 pRight->fg.isUsing = 1; 528 pRight->fg.isSynthUsing = 1; 529 pRight->u3.pUsing = pUsing; 530 } 531 if( pParse->nErr ) return 1; 532 } 533 534 /* Create extra terms on the WHERE clause for each column named 535 ** in the USING clause. Example: If the two tables to be joined are 536 ** A and B and the USING clause names X, Y, and Z, then add this 537 ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z 538 ** Report an error if any column mentioned in the USING clause is 539 ** not contained in both tables to be joined. 540 */ 541 if( pRight->fg.isUsing ){ 542 IdList *pList = pRight->u3.pUsing; 543 sqlite3 *db = pParse->db; 544 assert( pList!=0 ); 545 for(j=0; j<pList->nId; j++){ 546 char *zName; /* Name of the term in the USING clause */ 547 int iLeft; /* Table on the left with matching column name */ 548 int iLeftCol; /* Column number of matching column on the left */ 549 int iRightCol; /* Column number of matching column on the right */ 550 Expr *pE1; /* Reference to the column on the LEFT of the join */ 551 Expr *pE2; /* Reference to the column on the RIGHT of the join */ 552 Expr *pEq; /* Equality constraint. pE1 == pE2 */ 553 554 zName = pList->a[j].zName; 555 iRightCol = sqlite3ColumnIndex(pRightTab, zName); 556 if( iRightCol<0 557 || tableAndColumnIndex(pSrc, 0, i, zName, &iLeft, &iLeftCol, 558 pRight->fg.isSynthUsing)==0 559 ){ 560 sqlite3ErrorMsg(pParse, "cannot join using column %s - column " 561 "not present in both tables", zName); 562 return 1; 563 } 564 pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iLeftCol); 565 sqlite3SrcItemColumnUsed(&pSrc->a[iLeft], iLeftCol); 566 if( (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ 567 /* This branch runs if the query contains one or more RIGHT or FULL 568 ** JOINs. If only a single table on the left side of this join 569 ** contains the zName column, then this branch is a no-op. 570 ** But if there are two or more tables on the left side 571 ** of the join, construct a coalesce() function that gathers all 572 ** such tables. Raise an error if more than one of those references 573 ** to zName is not also within a prior USING clause. 574 ** 575 ** We really ought to raise an error if there are two or more 576 ** non-USING references to zName on the left of an INNER or LEFT 577 ** JOIN. But older versions of SQLite do not do that, so we avoid 578 ** adding a new error so as to not break legacy applications. 579 */ 580 ExprList *pFuncArgs = 0; /* Arguments to the coalesce() */ 581 static const Token tkCoalesce = { "coalesce", 8 }; 582 while( tableAndColumnIndex(pSrc, iLeft+1, i, zName, &iLeft, &iLeftCol, 583 pRight->fg.isSynthUsing)!=0 ){ 584 if( pSrc->a[iLeft].fg.isUsing==0 585 || sqlite3IdListIndex(pSrc->a[iLeft].u3.pUsing, zName)<0 586 ){ 587 sqlite3ErrorMsg(pParse, "ambiguous reference to %s in USING()", 588 zName); 589 break; 590 } 591 pFuncArgs = sqlite3ExprListAppend(pParse, pFuncArgs, pE1); 592 pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iLeftCol); 593 sqlite3SrcItemColumnUsed(&pSrc->a[iLeft], iLeftCol); 594 } 595 if( pFuncArgs ){ 596 pFuncArgs = sqlite3ExprListAppend(pParse, pFuncArgs, pE1); 597 pE1 = sqlite3ExprFunction(pParse, pFuncArgs, &tkCoalesce, 0); 598 } 599 } 600 pE2 = sqlite3CreateColumnExpr(db, pSrc, i+1, iRightCol); 601 sqlite3SrcItemColumnUsed(pRight, iRightCol); 602 pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2); 603 assert( pE2!=0 || pEq==0 ); 604 if( pEq ){ 605 ExprSetProperty(pEq, joinType); 606 assert( !ExprHasProperty(pEq, EP_TokenOnly|EP_Reduced) ); 607 ExprSetVVAProperty(pEq, EP_NoReduce); 608 pEq->w.iJoin = pE2->iTable; 609 } 610 p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pEq); 611 } 612 } 613 614 /* Add the ON clause to the end of the WHERE clause, connected by 615 ** an AND operator. 616 */ 617 else if( pRight->u3.pOn ){ 618 sqlite3SetJoinExpr(pRight->u3.pOn, pRight->iCursor, joinType); 619 p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pRight->u3.pOn); 620 pRight->u3.pOn = 0; 621 pRight->fg.isOn = 1; 622 } 623 } 624 return 0; 625 } 626 627 /* 628 ** An instance of this object holds information (beyond pParse and pSelect) 629 ** needed to load the next result row that is to be added to the sorter. 630 */ 631 typedef struct RowLoadInfo RowLoadInfo; 632 struct RowLoadInfo { 633 int regResult; /* Store results in array of registers here */ 634 u8 ecelFlags; /* Flag argument to ExprCodeExprList() */ 635 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 636 ExprList *pExtra; /* Extra columns needed by sorter refs */ 637 int regExtraResult; /* Where to load the extra columns */ 638 #endif 639 }; 640 641 /* 642 ** This routine does the work of loading query data into an array of 643 ** registers so that it can be added to the sorter. 644 */ 645 static void innerLoopLoadRow( 646 Parse *pParse, /* Statement under construction */ 647 Select *pSelect, /* The query being coded */ 648 RowLoadInfo *pInfo /* Info needed to complete the row load */ 649 ){ 650 sqlite3ExprCodeExprList(pParse, pSelect->pEList, pInfo->regResult, 651 0, pInfo->ecelFlags); 652 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 653 if( pInfo->pExtra ){ 654 sqlite3ExprCodeExprList(pParse, pInfo->pExtra, pInfo->regExtraResult, 0, 0); 655 sqlite3ExprListDelete(pParse->db, pInfo->pExtra); 656 } 657 #endif 658 } 659 660 /* 661 ** Code the OP_MakeRecord instruction that generates the entry to be 662 ** added into the sorter. 663 ** 664 ** Return the register in which the result is stored. 665 */ 666 static int makeSorterRecord( 667 Parse *pParse, 668 SortCtx *pSort, 669 Select *pSelect, 670 int regBase, 671 int nBase 672 ){ 673 int nOBSat = pSort->nOBSat; 674 Vdbe *v = pParse->pVdbe; 675 int regOut = ++pParse->nMem; 676 if( pSort->pDeferredRowLoad ){ 677 innerLoopLoadRow(pParse, pSelect, pSort->pDeferredRowLoad); 678 } 679 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nBase-nOBSat, regOut); 680 return regOut; 681 } 682 683 /* 684 ** Generate code that will push the record in registers regData 685 ** through regData+nData-1 onto the sorter. 686 */ 687 static void pushOntoSorter( 688 Parse *pParse, /* Parser context */ 689 SortCtx *pSort, /* Information about the ORDER BY clause */ 690 Select *pSelect, /* The whole SELECT statement */ 691 int regData, /* First register holding data to be sorted */ 692 int regOrigData, /* First register holding data before packing */ 693 int nData, /* Number of elements in the regData data array */ 694 int nPrefixReg /* No. of reg prior to regData available for use */ 695 ){ 696 Vdbe *v = pParse->pVdbe; /* Stmt under construction */ 697 int bSeq = ((pSort->sortFlags & SORTFLAG_UseSorter)==0); 698 int nExpr = pSort->pOrderBy->nExpr; /* No. of ORDER BY terms */ 699 int nBase = nExpr + bSeq + nData; /* Fields in sorter record */ 700 int regBase; /* Regs for sorter record */ 701 int regRecord = 0; /* Assembled sorter record */ 702 int nOBSat = pSort->nOBSat; /* ORDER BY terms to skip */ 703 int op; /* Opcode to add sorter record to sorter */ 704 int iLimit; /* LIMIT counter */ 705 int iSkip = 0; /* End of the sorter insert loop */ 706 707 assert( bSeq==0 || bSeq==1 ); 708 709 /* Three cases: 710 ** (1) The data to be sorted has already been packed into a Record 711 ** by a prior OP_MakeRecord. In this case nData==1 and regData 712 ** will be completely unrelated to regOrigData. 713 ** (2) All output columns are included in the sort record. In that 714 ** case regData==regOrigData. 715 ** (3) Some output columns are omitted from the sort record due to 716 ** the SQLITE_ENABLE_SORTER_REFERENCE optimization, or due to the 717 ** SQLITE_ECEL_OMITREF optimization, or due to the 718 ** SortCtx.pDeferredRowLoad optimiation. In any of these cases 719 ** regOrigData is 0 to prevent this routine from trying to copy 720 ** values that might not yet exist. 721 */ 722 assert( nData==1 || regData==regOrigData || regOrigData==0 ); 723 724 if( nPrefixReg ){ 725 assert( nPrefixReg==nExpr+bSeq ); 726 regBase = regData - nPrefixReg; 727 }else{ 728 regBase = pParse->nMem + 1; 729 pParse->nMem += nBase; 730 } 731 assert( pSelect->iOffset==0 || pSelect->iLimit!=0 ); 732 iLimit = pSelect->iOffset ? pSelect->iOffset+1 : pSelect->iLimit; 733 pSort->labelDone = sqlite3VdbeMakeLabel(pParse); 734 sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, regOrigData, 735 SQLITE_ECEL_DUP | (regOrigData? SQLITE_ECEL_REF : 0)); 736 if( bSeq ){ 737 sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr); 738 } 739 if( nPrefixReg==0 && nData>0 ){ 740 sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+bSeq, nData); 741 } 742 if( nOBSat>0 ){ 743 int regPrevKey; /* The first nOBSat columns of the previous row */ 744 int addrFirst; /* Address of the OP_IfNot opcode */ 745 int addrJmp; /* Address of the OP_Jump opcode */ 746 VdbeOp *pOp; /* Opcode that opens the sorter */ 747 int nKey; /* Number of sorting key columns, including OP_Sequence */ 748 KeyInfo *pKI; /* Original KeyInfo on the sorter table */ 749 750 regRecord = makeSorterRecord(pParse, pSort, pSelect, regBase, nBase); 751 regPrevKey = pParse->nMem+1; 752 pParse->nMem += pSort->nOBSat; 753 nKey = nExpr - pSort->nOBSat + bSeq; 754 if( bSeq ){ 755 addrFirst = sqlite3VdbeAddOp1(v, OP_IfNot, regBase+nExpr); 756 }else{ 757 addrFirst = sqlite3VdbeAddOp1(v, OP_SequenceTest, pSort->iECursor); 758 } 759 VdbeCoverage(v); 760 sqlite3VdbeAddOp3(v, OP_Compare, regPrevKey, regBase, pSort->nOBSat); 761 pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex); 762 if( pParse->db->mallocFailed ) return; 763 pOp->p2 = nKey + nData; 764 pKI = pOp->p4.pKeyInfo; 765 memset(pKI->aSortFlags, 0, pKI->nKeyField); /* Makes OP_Jump testable */ 766 sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO); 767 testcase( pKI->nAllField > pKI->nKeyField+2 ); 768 pOp->p4.pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pSort->pOrderBy,nOBSat, 769 pKI->nAllField-pKI->nKeyField-1); 770 pOp = 0; /* Ensure pOp not used after sqltie3VdbeAddOp3() */ 771 addrJmp = sqlite3VdbeCurrentAddr(v); 772 sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); 773 pSort->labelBkOut = sqlite3VdbeMakeLabel(pParse); 774 pSort->regReturn = ++pParse->nMem; 775 sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut); 776 sqlite3VdbeAddOp1(v, OP_ResetSorter, pSort->iECursor); 777 if( iLimit ){ 778 sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, pSort->labelDone); 779 VdbeCoverage(v); 780 } 781 sqlite3VdbeJumpHere(v, addrFirst); 782 sqlite3ExprCodeMove(pParse, regBase, regPrevKey, pSort->nOBSat); 783 sqlite3VdbeJumpHere(v, addrJmp); 784 } 785 if( iLimit ){ 786 /* At this point the values for the new sorter entry are stored 787 ** in an array of registers. They need to be composed into a record 788 ** and inserted into the sorter if either (a) there are currently 789 ** less than LIMIT+OFFSET items or (b) the new record is smaller than 790 ** the largest record currently in the sorter. If (b) is true and there 791 ** are already LIMIT+OFFSET items in the sorter, delete the largest 792 ** entry before inserting the new one. This way there are never more 793 ** than LIMIT+OFFSET items in the sorter. 794 ** 795 ** If the new record does not need to be inserted into the sorter, 796 ** jump to the next iteration of the loop. If the pSort->labelOBLopt 797 ** value is not zero, then it is a label of where to jump. Otherwise, 798 ** just bypass the row insert logic. See the header comment on the 799 ** sqlite3WhereOrderByLimitOptLabel() function for additional info. 800 */ 801 int iCsr = pSort->iECursor; 802 sqlite3VdbeAddOp2(v, OP_IfNotZero, iLimit, sqlite3VdbeCurrentAddr(v)+4); 803 VdbeCoverage(v); 804 sqlite3VdbeAddOp2(v, OP_Last, iCsr, 0); 805 iSkip = sqlite3VdbeAddOp4Int(v, OP_IdxLE, 806 iCsr, 0, regBase+nOBSat, nExpr-nOBSat); 807 VdbeCoverage(v); 808 sqlite3VdbeAddOp1(v, OP_Delete, iCsr); 809 } 810 if( regRecord==0 ){ 811 regRecord = makeSorterRecord(pParse, pSort, pSelect, regBase, nBase); 812 } 813 if( pSort->sortFlags & SORTFLAG_UseSorter ){ 814 op = OP_SorterInsert; 815 }else{ 816 op = OP_IdxInsert; 817 } 818 sqlite3VdbeAddOp4Int(v, op, pSort->iECursor, regRecord, 819 regBase+nOBSat, nBase-nOBSat); 820 if( iSkip ){ 821 sqlite3VdbeChangeP2(v, iSkip, 822 pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v)); 823 } 824 } 825 826 /* 827 ** Add code to implement the OFFSET 828 */ 829 static void codeOffset( 830 Vdbe *v, /* Generate code into this VM */ 831 int iOffset, /* Register holding the offset counter */ 832 int iContinue /* Jump here to skip the current record */ 833 ){ 834 if( iOffset>0 ){ 835 sqlite3VdbeAddOp3(v, OP_IfPos, iOffset, iContinue, 1); VdbeCoverage(v); 836 VdbeComment((v, "OFFSET")); 837 } 838 } 839 840 /* 841 ** Add code that will check to make sure the array of registers starting at 842 ** iMem form a distinct entry. This is used by both "SELECT DISTINCT ..." and 843 ** distinct aggregates ("SELECT count(DISTINCT <expr>) ..."). Three strategies 844 ** are available. Which is used depends on the value of parameter eTnctType, 845 ** as follows: 846 ** 847 ** WHERE_DISTINCT_UNORDERED/WHERE_DISTINCT_NOOP: 848 ** Build an ephemeral table that contains all entries seen before and 849 ** skip entries which have been seen before. 850 ** 851 ** Parameter iTab is the cursor number of an ephemeral table that must 852 ** be opened before the VM code generated by this routine is executed. 853 ** The ephemeral cursor table is queried for a record identical to the 854 ** record formed by the current array of registers. If one is found, 855 ** jump to VM address addrRepeat. Otherwise, insert a new record into 856 ** the ephemeral cursor and proceed. 857 ** 858 ** The returned value in this case is a copy of parameter iTab. 859 ** 860 ** WHERE_DISTINCT_ORDERED: 861 ** In this case rows are being delivered sorted order. The ephermal 862 ** table is not required. Instead, the current set of values 863 ** is compared against previous row. If they match, the new row 864 ** is not distinct and control jumps to VM address addrRepeat. Otherwise, 865 ** the VM program proceeds with processing the new row. 866 ** 867 ** The returned value in this case is the register number of the first 868 ** in an array of registers used to store the previous result row so that 869 ** it can be compared to the next. The caller must ensure that this 870 ** register is initialized to NULL. (The fixDistinctOpenEph() routine 871 ** will take care of this initialization.) 872 ** 873 ** WHERE_DISTINCT_UNIQUE: 874 ** In this case it has already been determined that the rows are distinct. 875 ** No special action is required. The return value is zero. 876 ** 877 ** Parameter pEList is the list of expressions used to generated the 878 ** contents of each row. It is used by this routine to determine (a) 879 ** how many elements there are in the array of registers and (b) the 880 ** collation sequences that should be used for the comparisons if 881 ** eTnctType is WHERE_DISTINCT_ORDERED. 882 */ 883 static int codeDistinct( 884 Parse *pParse, /* Parsing and code generating context */ 885 int eTnctType, /* WHERE_DISTINCT_* value */ 886 int iTab, /* A sorting index used to test for distinctness */ 887 int addrRepeat, /* Jump to here if not distinct */ 888 ExprList *pEList, /* Expression for each element */ 889 int regElem /* First element */ 890 ){ 891 int iRet = 0; 892 int nResultCol = pEList->nExpr; 893 Vdbe *v = pParse->pVdbe; 894 895 switch( eTnctType ){ 896 case WHERE_DISTINCT_ORDERED: { 897 int i; 898 int iJump; /* Jump destination */ 899 int regPrev; /* Previous row content */ 900 901 /* Allocate space for the previous row */ 902 iRet = regPrev = pParse->nMem+1; 903 pParse->nMem += nResultCol; 904 905 iJump = sqlite3VdbeCurrentAddr(v) + nResultCol; 906 for(i=0; i<nResultCol; i++){ 907 CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[i].pExpr); 908 if( i<nResultCol-1 ){ 909 sqlite3VdbeAddOp3(v, OP_Ne, regElem+i, iJump, regPrev+i); 910 VdbeCoverage(v); 911 }else{ 912 sqlite3VdbeAddOp3(v, OP_Eq, regElem+i, addrRepeat, regPrev+i); 913 VdbeCoverage(v); 914 } 915 sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ); 916 sqlite3VdbeChangeP5(v, SQLITE_NULLEQ); 917 } 918 assert( sqlite3VdbeCurrentAddr(v)==iJump || pParse->db->mallocFailed ); 919 sqlite3VdbeAddOp3(v, OP_Copy, regElem, regPrev, nResultCol-1); 920 break; 921 } 922 923 case WHERE_DISTINCT_UNIQUE: { 924 /* nothing to do */ 925 break; 926 } 927 928 default: { 929 int r1 = sqlite3GetTempReg(pParse); 930 sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, regElem, nResultCol); 931 VdbeCoverage(v); 932 sqlite3VdbeAddOp3(v, OP_MakeRecord, regElem, nResultCol, r1); 933 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, regElem, nResultCol); 934 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); 935 sqlite3ReleaseTempReg(pParse, r1); 936 iRet = iTab; 937 break; 938 } 939 } 940 941 return iRet; 942 } 943 944 /* 945 ** This routine runs after codeDistinct(). It makes necessary 946 ** adjustments to the OP_OpenEphemeral opcode that the codeDistinct() 947 ** routine made use of. This processing must be done separately since 948 ** sometimes codeDistinct is called before the OP_OpenEphemeral is actually 949 ** laid down. 950 ** 951 ** WHERE_DISTINCT_NOOP: 952 ** WHERE_DISTINCT_UNORDERED: 953 ** 954 ** No adjustments necessary. This function is a no-op. 955 ** 956 ** WHERE_DISTINCT_UNIQUE: 957 ** 958 ** The ephemeral table is not needed. So change the 959 ** OP_OpenEphemeral opcode into an OP_Noop. 960 ** 961 ** WHERE_DISTINCT_ORDERED: 962 ** 963 ** The ephemeral table is not needed. But we do need register 964 ** iVal to be initialized to NULL. So change the OP_OpenEphemeral 965 ** into an OP_Null on the iVal register. 966 */ 967 static void fixDistinctOpenEph( 968 Parse *pParse, /* Parsing and code generating context */ 969 int eTnctType, /* WHERE_DISTINCT_* value */ 970 int iVal, /* Value returned by codeDistinct() */ 971 int iOpenEphAddr /* Address of OP_OpenEphemeral instruction for iTab */ 972 ){ 973 if( pParse->nErr==0 974 && (eTnctType==WHERE_DISTINCT_UNIQUE || eTnctType==WHERE_DISTINCT_ORDERED) 975 ){ 976 Vdbe *v = pParse->pVdbe; 977 sqlite3VdbeChangeToNoop(v, iOpenEphAddr); 978 if( sqlite3VdbeGetOp(v, iOpenEphAddr+1)->opcode==OP_Explain ){ 979 sqlite3VdbeChangeToNoop(v, iOpenEphAddr+1); 980 } 981 if( eTnctType==WHERE_DISTINCT_ORDERED ){ 982 /* Change the OP_OpenEphemeral to an OP_Null that sets the MEM_Cleared 983 ** bit on the first register of the previous value. This will cause the 984 ** OP_Ne added in codeDistinct() to always fail on the first iteration of 985 ** the loop even if the first row is all NULLs. */ 986 VdbeOp *pOp = sqlite3VdbeGetOp(v, iOpenEphAddr); 987 pOp->opcode = OP_Null; 988 pOp->p1 = 1; 989 pOp->p2 = iVal; 990 } 991 } 992 } 993 994 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 995 /* 996 ** This function is called as part of inner-loop generation for a SELECT 997 ** statement with an ORDER BY that is not optimized by an index. It 998 ** determines the expressions, if any, that the sorter-reference 999 ** optimization should be used for. The sorter-reference optimization 1000 ** is used for SELECT queries like: 1001 ** 1002 ** SELECT a, bigblob FROM t1 ORDER BY a LIMIT 10 1003 ** 1004 ** If the optimization is used for expression "bigblob", then instead of 1005 ** storing values read from that column in the sorter records, the PK of 1006 ** the row from table t1 is stored instead. Then, as records are extracted from 1007 ** the sorter to return to the user, the required value of bigblob is 1008 ** retrieved directly from table t1. If the values are very large, this 1009 ** can be more efficient than storing them directly in the sorter records. 1010 ** 1011 ** The ExprList_item.fg.bSorterRef flag is set for each expression in pEList 1012 ** for which the sorter-reference optimization should be enabled. 1013 ** Additionally, the pSort->aDefer[] array is populated with entries 1014 ** for all cursors required to evaluate all selected expressions. Finally. 1015 ** output variable (*ppExtra) is set to an expression list containing 1016 ** expressions for all extra PK values that should be stored in the 1017 ** sorter records. 1018 */ 1019 static void selectExprDefer( 1020 Parse *pParse, /* Leave any error here */ 1021 SortCtx *pSort, /* Sorter context */ 1022 ExprList *pEList, /* Expressions destined for sorter */ 1023 ExprList **ppExtra /* Expressions to append to sorter record */ 1024 ){ 1025 int i; 1026 int nDefer = 0; 1027 ExprList *pExtra = 0; 1028 for(i=0; i<pEList->nExpr; i++){ 1029 struct ExprList_item *pItem = &pEList->a[i]; 1030 if( pItem->u.x.iOrderByCol==0 ){ 1031 Expr *pExpr = pItem->pExpr; 1032 Table *pTab; 1033 if( pExpr->op==TK_COLUMN 1034 && pExpr->iColumn>=0 1035 && ALWAYS( ExprUseYTab(pExpr) ) 1036 && (pTab = pExpr->y.pTab)!=0 1037 && IsOrdinaryTable(pTab) 1038 && (pTab->aCol[pExpr->iColumn].colFlags & COLFLAG_SORTERREF)!=0 1039 ){ 1040 int j; 1041 for(j=0; j<nDefer; j++){ 1042 if( pSort->aDefer[j].iCsr==pExpr->iTable ) break; 1043 } 1044 if( j==nDefer ){ 1045 if( nDefer==ArraySize(pSort->aDefer) ){ 1046 continue; 1047 }else{ 1048 int nKey = 1; 1049 int k; 1050 Index *pPk = 0; 1051 if( !HasRowid(pTab) ){ 1052 pPk = sqlite3PrimaryKeyIndex(pTab); 1053 nKey = pPk->nKeyCol; 1054 } 1055 for(k=0; k<nKey; k++){ 1056 Expr *pNew = sqlite3PExpr(pParse, TK_COLUMN, 0, 0); 1057 if( pNew ){ 1058 pNew->iTable = pExpr->iTable; 1059 assert( ExprUseYTab(pNew) ); 1060 pNew->y.pTab = pExpr->y.pTab; 1061 pNew->iColumn = pPk ? pPk->aiColumn[k] : -1; 1062 pExtra = sqlite3ExprListAppend(pParse, pExtra, pNew); 1063 } 1064 } 1065 pSort->aDefer[nDefer].pTab = pExpr->y.pTab; 1066 pSort->aDefer[nDefer].iCsr = pExpr->iTable; 1067 pSort->aDefer[nDefer].nKey = nKey; 1068 nDefer++; 1069 } 1070 } 1071 pItem->fg.bSorterRef = 1; 1072 } 1073 } 1074 } 1075 pSort->nDefer = (u8)nDefer; 1076 *ppExtra = pExtra; 1077 } 1078 #endif 1079 1080 /* 1081 ** This routine generates the code for the inside of the inner loop 1082 ** of a SELECT. 1083 ** 1084 ** If srcTab is negative, then the p->pEList expressions 1085 ** are evaluated in order to get the data for this row. If srcTab is 1086 ** zero or more, then data is pulled from srcTab and p->pEList is used only 1087 ** to get the number of columns and the collation sequence for each column. 1088 */ 1089 static void selectInnerLoop( 1090 Parse *pParse, /* The parser context */ 1091 Select *p, /* The complete select statement being coded */ 1092 int srcTab, /* Pull data from this table if non-negative */ 1093 SortCtx *pSort, /* If not NULL, info on how to process ORDER BY */ 1094 DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */ 1095 SelectDest *pDest, /* How to dispose of the results */ 1096 int iContinue, /* Jump here to continue with next row */ 1097 int iBreak /* Jump here to break out of the inner loop */ 1098 ){ 1099 Vdbe *v = pParse->pVdbe; 1100 int i; 1101 int hasDistinct; /* True if the DISTINCT keyword is present */ 1102 int eDest = pDest->eDest; /* How to dispose of results */ 1103 int iParm = pDest->iSDParm; /* First argument to disposal method */ 1104 int nResultCol; /* Number of result columns */ 1105 int nPrefixReg = 0; /* Number of extra registers before regResult */ 1106 RowLoadInfo sRowLoadInfo; /* Info for deferred row loading */ 1107 1108 /* Usually, regResult is the first cell in an array of memory cells 1109 ** containing the current result row. In this case regOrig is set to the 1110 ** same value. However, if the results are being sent to the sorter, the 1111 ** values for any expressions that are also part of the sort-key are omitted 1112 ** from this array. In this case regOrig is set to zero. */ 1113 int regResult; /* Start of memory holding current results */ 1114 int regOrig; /* Start of memory holding full result (or 0) */ 1115 1116 assert( v ); 1117 assert( p->pEList!=0 ); 1118 hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP; 1119 if( pSort && pSort->pOrderBy==0 ) pSort = 0; 1120 if( pSort==0 && !hasDistinct ){ 1121 assert( iContinue!=0 ); 1122 codeOffset(v, p->iOffset, iContinue); 1123 } 1124 1125 /* Pull the requested columns. 1126 */ 1127 nResultCol = p->pEList->nExpr; 1128 1129 if( pDest->iSdst==0 ){ 1130 if( pSort ){ 1131 nPrefixReg = pSort->pOrderBy->nExpr; 1132 if( !(pSort->sortFlags & SORTFLAG_UseSorter) ) nPrefixReg++; 1133 pParse->nMem += nPrefixReg; 1134 } 1135 pDest->iSdst = pParse->nMem+1; 1136 pParse->nMem += nResultCol; 1137 }else if( pDest->iSdst+nResultCol > pParse->nMem ){ 1138 /* This is an error condition that can result, for example, when a SELECT 1139 ** on the right-hand side of an INSERT contains more result columns than 1140 ** there are columns in the table on the left. The error will be caught 1141 ** and reported later. But we need to make sure enough memory is allocated 1142 ** to avoid other spurious errors in the meantime. */ 1143 pParse->nMem += nResultCol; 1144 } 1145 pDest->nSdst = nResultCol; 1146 regOrig = regResult = pDest->iSdst; 1147 if( srcTab>=0 ){ 1148 for(i=0; i<nResultCol; i++){ 1149 sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i); 1150 VdbeComment((v, "%s", p->pEList->a[i].zEName)); 1151 } 1152 }else if( eDest!=SRT_Exists ){ 1153 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1154 ExprList *pExtra = 0; 1155 #endif 1156 /* If the destination is an EXISTS(...) expression, the actual 1157 ** values returned by the SELECT are not required. 1158 */ 1159 u8 ecelFlags; /* "ecel" is an abbreviation of "ExprCodeExprList" */ 1160 ExprList *pEList; 1161 if( eDest==SRT_Mem || eDest==SRT_Output || eDest==SRT_Coroutine ){ 1162 ecelFlags = SQLITE_ECEL_DUP; 1163 }else{ 1164 ecelFlags = 0; 1165 } 1166 if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){ 1167 /* For each expression in p->pEList that is a copy of an expression in 1168 ** the ORDER BY clause (pSort->pOrderBy), set the associated 1169 ** iOrderByCol value to one more than the index of the ORDER BY 1170 ** expression within the sort-key that pushOntoSorter() will generate. 1171 ** This allows the p->pEList field to be omitted from the sorted record, 1172 ** saving space and CPU cycles. */ 1173 ecelFlags |= (SQLITE_ECEL_OMITREF|SQLITE_ECEL_REF); 1174 1175 for(i=pSort->nOBSat; i<pSort->pOrderBy->nExpr; i++){ 1176 int j; 1177 if( (j = pSort->pOrderBy->a[i].u.x.iOrderByCol)>0 ){ 1178 p->pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat; 1179 } 1180 } 1181 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1182 selectExprDefer(pParse, pSort, p->pEList, &pExtra); 1183 if( pExtra && pParse->db->mallocFailed==0 ){ 1184 /* If there are any extra PK columns to add to the sorter records, 1185 ** allocate extra memory cells and adjust the OpenEphemeral 1186 ** instruction to account for the larger records. This is only 1187 ** required if there are one or more WITHOUT ROWID tables with 1188 ** composite primary keys in the SortCtx.aDefer[] array. */ 1189 VdbeOp *pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex); 1190 pOp->p2 += (pExtra->nExpr - pSort->nDefer); 1191 pOp->p4.pKeyInfo->nAllField += (pExtra->nExpr - pSort->nDefer); 1192 pParse->nMem += pExtra->nExpr; 1193 } 1194 #endif 1195 1196 /* Adjust nResultCol to account for columns that are omitted 1197 ** from the sorter by the optimizations in this branch */ 1198 pEList = p->pEList; 1199 for(i=0; i<pEList->nExpr; i++){ 1200 if( pEList->a[i].u.x.iOrderByCol>0 1201 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1202 || pEList->a[i].fg.bSorterRef 1203 #endif 1204 ){ 1205 nResultCol--; 1206 regOrig = 0; 1207 } 1208 } 1209 1210 testcase( regOrig ); 1211 testcase( eDest==SRT_Set ); 1212 testcase( eDest==SRT_Mem ); 1213 testcase( eDest==SRT_Coroutine ); 1214 testcase( eDest==SRT_Output ); 1215 assert( eDest==SRT_Set || eDest==SRT_Mem 1216 || eDest==SRT_Coroutine || eDest==SRT_Output 1217 || eDest==SRT_Upfrom ); 1218 } 1219 sRowLoadInfo.regResult = regResult; 1220 sRowLoadInfo.ecelFlags = ecelFlags; 1221 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1222 sRowLoadInfo.pExtra = pExtra; 1223 sRowLoadInfo.regExtraResult = regResult + nResultCol; 1224 if( pExtra ) nResultCol += pExtra->nExpr; 1225 #endif 1226 if( p->iLimit 1227 && (ecelFlags & SQLITE_ECEL_OMITREF)!=0 1228 && nPrefixReg>0 1229 ){ 1230 assert( pSort!=0 ); 1231 assert( hasDistinct==0 ); 1232 pSort->pDeferredRowLoad = &sRowLoadInfo; 1233 regOrig = 0; 1234 }else{ 1235 innerLoopLoadRow(pParse, p, &sRowLoadInfo); 1236 } 1237 } 1238 1239 /* If the DISTINCT keyword was present on the SELECT statement 1240 ** and this row has been seen before, then do not make this row 1241 ** part of the result. 1242 */ 1243 if( hasDistinct ){ 1244 int eType = pDistinct->eTnctType; 1245 int iTab = pDistinct->tabTnct; 1246 assert( nResultCol==p->pEList->nExpr ); 1247 iTab = codeDistinct(pParse, eType, iTab, iContinue, p->pEList, regResult); 1248 fixDistinctOpenEph(pParse, eType, iTab, pDistinct->addrTnct); 1249 if( pSort==0 ){ 1250 codeOffset(v, p->iOffset, iContinue); 1251 } 1252 } 1253 1254 switch( eDest ){ 1255 /* In this mode, write each query result to the key of the temporary 1256 ** table iParm. 1257 */ 1258 #ifndef SQLITE_OMIT_COMPOUND_SELECT 1259 case SRT_Union: { 1260 int r1; 1261 r1 = sqlite3GetTempReg(pParse); 1262 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1); 1263 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); 1264 sqlite3ReleaseTempReg(pParse, r1); 1265 break; 1266 } 1267 1268 /* Construct a record from the query result, but instead of 1269 ** saving that record, use it as a key to delete elements from 1270 ** the temporary table iParm. 1271 */ 1272 case SRT_Except: { 1273 sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nResultCol); 1274 break; 1275 } 1276 #endif /* SQLITE_OMIT_COMPOUND_SELECT */ 1277 1278 /* Store the result as data using a unique key. 1279 */ 1280 case SRT_Fifo: 1281 case SRT_DistFifo: 1282 case SRT_Table: 1283 case SRT_EphemTab: { 1284 int r1 = sqlite3GetTempRange(pParse, nPrefixReg+1); 1285 testcase( eDest==SRT_Table ); 1286 testcase( eDest==SRT_EphemTab ); 1287 testcase( eDest==SRT_Fifo ); 1288 testcase( eDest==SRT_DistFifo ); 1289 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg); 1290 if( pDest->zAffSdst ){ 1291 sqlite3VdbeChangeP4(v, -1, pDest->zAffSdst, nResultCol); 1292 } 1293 #ifndef SQLITE_OMIT_CTE 1294 if( eDest==SRT_DistFifo ){ 1295 /* If the destination is DistFifo, then cursor (iParm+1) is open 1296 ** on an ephemeral index. If the current row is already present 1297 ** in the index, do not write it to the output. If not, add the 1298 ** current row to the index and proceed with writing it to the 1299 ** output table as well. */ 1300 int addr = sqlite3VdbeCurrentAddr(v) + 4; 1301 sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, addr, r1, 0); 1302 VdbeCoverage(v); 1303 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm+1, r1,regResult,nResultCol); 1304 assert( pSort==0 ); 1305 } 1306 #endif 1307 if( pSort ){ 1308 assert( regResult==regOrig ); 1309 pushOntoSorter(pParse, pSort, p, r1+nPrefixReg, regOrig, 1, nPrefixReg); 1310 }else{ 1311 int r2 = sqlite3GetTempReg(pParse); 1312 sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2); 1313 sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2); 1314 sqlite3VdbeChangeP5(v, OPFLAG_APPEND); 1315 sqlite3ReleaseTempReg(pParse, r2); 1316 } 1317 sqlite3ReleaseTempRange(pParse, r1, nPrefixReg+1); 1318 break; 1319 } 1320 1321 case SRT_Upfrom: { 1322 if( pSort ){ 1323 pushOntoSorter( 1324 pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); 1325 }else{ 1326 int i2 = pDest->iSDParm2; 1327 int r1 = sqlite3GetTempReg(pParse); 1328 1329 /* If the UPDATE FROM join is an aggregate that matches no rows, it 1330 ** might still be trying to return one row, because that is what 1331 ** aggregates do. Don't record that empty row in the output table. */ 1332 sqlite3VdbeAddOp2(v, OP_IsNull, regResult, iBreak); VdbeCoverage(v); 1333 1334 sqlite3VdbeAddOp3(v, OP_MakeRecord, 1335 regResult+(i2<0), nResultCol-(i2<0), r1); 1336 if( i2<0 ){ 1337 sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, regResult); 1338 }else{ 1339 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, i2); 1340 } 1341 } 1342 break; 1343 } 1344 1345 #ifndef SQLITE_OMIT_SUBQUERY 1346 /* If we are creating a set for an "expr IN (SELECT ...)" construct, 1347 ** then there should be a single item on the stack. Write this 1348 ** item into the set table with bogus data. 1349 */ 1350 case SRT_Set: { 1351 if( pSort ){ 1352 /* At first glance you would think we could optimize out the 1353 ** ORDER BY in this case since the order of entries in the set 1354 ** does not matter. But there might be a LIMIT clause, in which 1355 ** case the order does matter */ 1356 pushOntoSorter( 1357 pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); 1358 }else{ 1359 int r1 = sqlite3GetTempReg(pParse); 1360 assert( sqlite3Strlen30(pDest->zAffSdst)==nResultCol ); 1361 sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, nResultCol, 1362 r1, pDest->zAffSdst, nResultCol); 1363 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); 1364 sqlite3ReleaseTempReg(pParse, r1); 1365 } 1366 break; 1367 } 1368 1369 1370 /* If any row exist in the result set, record that fact and abort. 1371 */ 1372 case SRT_Exists: { 1373 sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm); 1374 /* The LIMIT clause will terminate the loop for us */ 1375 break; 1376 } 1377 1378 /* If this is a scalar select that is part of an expression, then 1379 ** store the results in the appropriate memory cell or array of 1380 ** memory cells and break out of the scan loop. 1381 */ 1382 case SRT_Mem: { 1383 if( pSort ){ 1384 assert( nResultCol<=pDest->nSdst ); 1385 pushOntoSorter( 1386 pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); 1387 }else{ 1388 assert( nResultCol==pDest->nSdst ); 1389 assert( regResult==iParm ); 1390 /* The LIMIT clause will jump out of the loop for us */ 1391 } 1392 break; 1393 } 1394 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */ 1395 1396 case SRT_Coroutine: /* Send data to a co-routine */ 1397 case SRT_Output: { /* Return the results */ 1398 testcase( eDest==SRT_Coroutine ); 1399 testcase( eDest==SRT_Output ); 1400 if( pSort ){ 1401 pushOntoSorter(pParse, pSort, p, regResult, regOrig, nResultCol, 1402 nPrefixReg); 1403 }else if( eDest==SRT_Coroutine ){ 1404 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); 1405 }else{ 1406 sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol); 1407 } 1408 break; 1409 } 1410 1411 #ifndef SQLITE_OMIT_CTE 1412 /* Write the results into a priority queue that is order according to 1413 ** pDest->pOrderBy (in pSO). pDest->iSDParm (in iParm) is the cursor for an 1414 ** index with pSO->nExpr+2 columns. Build a key using pSO for the first 1415 ** pSO->nExpr columns, then make sure all keys are unique by adding a 1416 ** final OP_Sequence column. The last column is the record as a blob. 1417 */ 1418 case SRT_DistQueue: 1419 case SRT_Queue: { 1420 int nKey; 1421 int r1, r2, r3; 1422 int addrTest = 0; 1423 ExprList *pSO; 1424 pSO = pDest->pOrderBy; 1425 assert( pSO ); 1426 nKey = pSO->nExpr; 1427 r1 = sqlite3GetTempReg(pParse); 1428 r2 = sqlite3GetTempRange(pParse, nKey+2); 1429 r3 = r2+nKey+1; 1430 if( eDest==SRT_DistQueue ){ 1431 /* If the destination is DistQueue, then cursor (iParm+1) is open 1432 ** on a second ephemeral index that holds all values every previously 1433 ** added to the queue. */ 1434 addrTest = sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, 0, 1435 regResult, nResultCol); 1436 VdbeCoverage(v); 1437 } 1438 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r3); 1439 if( eDest==SRT_DistQueue ){ 1440 sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r3); 1441 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); 1442 } 1443 for(i=0; i<nKey; i++){ 1444 sqlite3VdbeAddOp2(v, OP_SCopy, 1445 regResult + pSO->a[i].u.x.iOrderByCol - 1, 1446 r2+i); 1447 } 1448 sqlite3VdbeAddOp2(v, OP_Sequence, iParm, r2+nKey); 1449 sqlite3VdbeAddOp3(v, OP_MakeRecord, r2, nKey+2, r1); 1450 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, r2, nKey+2); 1451 if( addrTest ) sqlite3VdbeJumpHere(v, addrTest); 1452 sqlite3ReleaseTempReg(pParse, r1); 1453 sqlite3ReleaseTempRange(pParse, r2, nKey+2); 1454 break; 1455 } 1456 #endif /* SQLITE_OMIT_CTE */ 1457 1458 1459 1460 #if !defined(SQLITE_OMIT_TRIGGER) 1461 /* Discard the results. This is used for SELECT statements inside 1462 ** the body of a TRIGGER. The purpose of such selects is to call 1463 ** user-defined functions that have side effects. We do not care 1464 ** about the actual results of the select. 1465 */ 1466 default: { 1467 assert( eDest==SRT_Discard ); 1468 break; 1469 } 1470 #endif 1471 } 1472 1473 /* Jump to the end of the loop if the LIMIT is reached. Except, if 1474 ** there is a sorter, in which case the sorter has already limited 1475 ** the output for us. 1476 */ 1477 if( pSort==0 && p->iLimit ){ 1478 sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v); 1479 } 1480 } 1481 1482 /* 1483 ** Allocate a KeyInfo object sufficient for an index of N key columns and 1484 ** X extra columns. 1485 */ 1486 KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){ 1487 int nExtra = (N+X)*(sizeof(CollSeq*)+1) - sizeof(CollSeq*); 1488 KeyInfo *p = sqlite3DbMallocRawNN(db, sizeof(KeyInfo) + nExtra); 1489 if( p ){ 1490 p->aSortFlags = (u8*)&p->aColl[N+X]; 1491 p->nKeyField = (u16)N; 1492 p->nAllField = (u16)(N+X); 1493 p->enc = ENC(db); 1494 p->db = db; 1495 p->nRef = 1; 1496 memset(&p[1], 0, nExtra); 1497 }else{ 1498 return (KeyInfo*)sqlite3OomFault(db); 1499 } 1500 return p; 1501 } 1502 1503 /* 1504 ** Deallocate a KeyInfo object 1505 */ 1506 void sqlite3KeyInfoUnref(KeyInfo *p){ 1507 if( p ){ 1508 assert( p->db!=0 ); 1509 assert( p->nRef>0 ); 1510 p->nRef--; 1511 if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p); 1512 } 1513 } 1514 1515 /* 1516 ** Make a new pointer to a KeyInfo object 1517 */ 1518 KeyInfo *sqlite3KeyInfoRef(KeyInfo *p){ 1519 if( p ){ 1520 assert( p->nRef>0 ); 1521 p->nRef++; 1522 } 1523 return p; 1524 } 1525 1526 #ifdef SQLITE_DEBUG 1527 /* 1528 ** Return TRUE if a KeyInfo object can be change. The KeyInfo object 1529 ** can only be changed if this is just a single reference to the object. 1530 ** 1531 ** This routine is used only inside of assert() statements. 1532 */ 1533 int sqlite3KeyInfoIsWriteable(KeyInfo *p){ return p->nRef==1; } 1534 #endif /* SQLITE_DEBUG */ 1535 1536 /* 1537 ** Given an expression list, generate a KeyInfo structure that records 1538 ** the collating sequence for each expression in that expression list. 1539 ** 1540 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting 1541 ** KeyInfo structure is appropriate for initializing a virtual index to 1542 ** implement that clause. If the ExprList is the result set of a SELECT 1543 ** then the KeyInfo structure is appropriate for initializing a virtual 1544 ** index to implement a DISTINCT test. 1545 ** 1546 ** Space to hold the KeyInfo structure is obtained from malloc. The calling 1547 ** function is responsible for seeing that this structure is eventually 1548 ** freed. 1549 */ 1550 KeyInfo *sqlite3KeyInfoFromExprList( 1551 Parse *pParse, /* Parsing context */ 1552 ExprList *pList, /* Form the KeyInfo object from this ExprList */ 1553 int iStart, /* Begin with this column of pList */ 1554 int nExtra /* Add this many extra columns to the end */ 1555 ){ 1556 int nExpr; 1557 KeyInfo *pInfo; 1558 struct ExprList_item *pItem; 1559 sqlite3 *db = pParse->db; 1560 int i; 1561 1562 nExpr = pList->nExpr; 1563 pInfo = sqlite3KeyInfoAlloc(db, nExpr-iStart, nExtra+1); 1564 if( pInfo ){ 1565 assert( sqlite3KeyInfoIsWriteable(pInfo) ); 1566 for(i=iStart, pItem=pList->a+iStart; i<nExpr; i++, pItem++){ 1567 pInfo->aColl[i-iStart] = sqlite3ExprNNCollSeq(pParse, pItem->pExpr); 1568 pInfo->aSortFlags[i-iStart] = pItem->fg.sortFlags; 1569 } 1570 } 1571 return pInfo; 1572 } 1573 1574 /* 1575 ** Name of the connection operator, used for error messages. 1576 */ 1577 const char *sqlite3SelectOpName(int id){ 1578 char *z; 1579 switch( id ){ 1580 case TK_ALL: z = "UNION ALL"; break; 1581 case TK_INTERSECT: z = "INTERSECT"; break; 1582 case TK_EXCEPT: z = "EXCEPT"; break; 1583 default: z = "UNION"; break; 1584 } 1585 return z; 1586 } 1587 1588 #ifndef SQLITE_OMIT_EXPLAIN 1589 /* 1590 ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function 1591 ** is a no-op. Otherwise, it adds a single row of output to the EQP result, 1592 ** where the caption is of the form: 1593 ** 1594 ** "USE TEMP B-TREE FOR xxx" 1595 ** 1596 ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which 1597 ** is determined by the zUsage argument. 1598 */ 1599 static void explainTempTable(Parse *pParse, const char *zUsage){ 1600 ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s", zUsage)); 1601 } 1602 1603 /* 1604 ** Assign expression b to lvalue a. A second, no-op, version of this macro 1605 ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code 1606 ** in sqlite3Select() to assign values to structure member variables that 1607 ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the 1608 ** code with #ifndef directives. 1609 */ 1610 # define explainSetInteger(a, b) a = b 1611 1612 #else 1613 /* No-op versions of the explainXXX() functions and macros. */ 1614 # define explainTempTable(y,z) 1615 # define explainSetInteger(y,z) 1616 #endif 1617 1618 1619 /* 1620 ** If the inner loop was generated using a non-null pOrderBy argument, 1621 ** then the results were placed in a sorter. After the loop is terminated 1622 ** we need to run the sorter and output the results. The following 1623 ** routine generates the code needed to do that. 1624 */ 1625 static void generateSortTail( 1626 Parse *pParse, /* Parsing context */ 1627 Select *p, /* The SELECT statement */ 1628 SortCtx *pSort, /* Information on the ORDER BY clause */ 1629 int nColumn, /* Number of columns of data */ 1630 SelectDest *pDest /* Write the sorted results here */ 1631 ){ 1632 Vdbe *v = pParse->pVdbe; /* The prepared statement */ 1633 int addrBreak = pSort->labelDone; /* Jump here to exit loop */ 1634 int addrContinue = sqlite3VdbeMakeLabel(pParse);/* Jump here for next cycle */ 1635 int addr; /* Top of output loop. Jump for Next. */ 1636 int addrOnce = 0; 1637 int iTab; 1638 ExprList *pOrderBy = pSort->pOrderBy; 1639 int eDest = pDest->eDest; 1640 int iParm = pDest->iSDParm; 1641 int regRow; 1642 int regRowid; 1643 int iCol; 1644 int nKey; /* Number of key columns in sorter record */ 1645 int iSortTab; /* Sorter cursor to read from */ 1646 int i; 1647 int bSeq; /* True if sorter record includes seq. no. */ 1648 int nRefKey = 0; 1649 struct ExprList_item *aOutEx = p->pEList->a; 1650 1651 assert( addrBreak<0 ); 1652 if( pSort->labelBkOut ){ 1653 sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut); 1654 sqlite3VdbeGoto(v, addrBreak); 1655 sqlite3VdbeResolveLabel(v, pSort->labelBkOut); 1656 } 1657 1658 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1659 /* Open any cursors needed for sorter-reference expressions */ 1660 for(i=0; i<pSort->nDefer; i++){ 1661 Table *pTab = pSort->aDefer[i].pTab; 1662 int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); 1663 sqlite3OpenTable(pParse, pSort->aDefer[i].iCsr, iDb, pTab, OP_OpenRead); 1664 nRefKey = MAX(nRefKey, pSort->aDefer[i].nKey); 1665 } 1666 #endif 1667 1668 iTab = pSort->iECursor; 1669 if( eDest==SRT_Output || eDest==SRT_Coroutine || eDest==SRT_Mem ){ 1670 if( eDest==SRT_Mem && p->iOffset ){ 1671 sqlite3VdbeAddOp2(v, OP_Null, 0, pDest->iSdst); 1672 } 1673 regRowid = 0; 1674 regRow = pDest->iSdst; 1675 }else{ 1676 regRowid = sqlite3GetTempReg(pParse); 1677 if( eDest==SRT_EphemTab || eDest==SRT_Table ){ 1678 regRow = sqlite3GetTempReg(pParse); 1679 nColumn = 0; 1680 }else{ 1681 regRow = sqlite3GetTempRange(pParse, nColumn); 1682 } 1683 } 1684 nKey = pOrderBy->nExpr - pSort->nOBSat; 1685 if( pSort->sortFlags & SORTFLAG_UseSorter ){ 1686 int regSortOut = ++pParse->nMem; 1687 iSortTab = pParse->nTab++; 1688 if( pSort->labelBkOut ){ 1689 addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); 1690 } 1691 sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, 1692 nKey+1+nColumn+nRefKey); 1693 if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); 1694 addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); 1695 VdbeCoverage(v); 1696 assert( p->iLimit==0 && p->iOffset==0 ); 1697 sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab); 1698 bSeq = 0; 1699 }else{ 1700 addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v); 1701 codeOffset(v, p->iOffset, addrContinue); 1702 iSortTab = iTab; 1703 bSeq = 1; 1704 if( p->iOffset>0 ){ 1705 sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); 1706 } 1707 } 1708 for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){ 1709 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1710 if( aOutEx[i].fg.bSorterRef ) continue; 1711 #endif 1712 if( aOutEx[i].u.x.iOrderByCol==0 ) iCol++; 1713 } 1714 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1715 if( pSort->nDefer ){ 1716 int iKey = iCol+1; 1717 int regKey = sqlite3GetTempRange(pParse, nRefKey); 1718 1719 for(i=0; i<pSort->nDefer; i++){ 1720 int iCsr = pSort->aDefer[i].iCsr; 1721 Table *pTab = pSort->aDefer[i].pTab; 1722 int nKey = pSort->aDefer[i].nKey; 1723 1724 sqlite3VdbeAddOp1(v, OP_NullRow, iCsr); 1725 if( HasRowid(pTab) ){ 1726 sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iKey++, regKey); 1727 sqlite3VdbeAddOp3(v, OP_SeekRowid, iCsr, 1728 sqlite3VdbeCurrentAddr(v)+1, regKey); 1729 }else{ 1730 int k; 1731 int iJmp; 1732 assert( sqlite3PrimaryKeyIndex(pTab)->nKeyCol==nKey ); 1733 for(k=0; k<nKey; k++){ 1734 sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iKey++, regKey+k); 1735 } 1736 iJmp = sqlite3VdbeCurrentAddr(v); 1737 sqlite3VdbeAddOp4Int(v, OP_SeekGE, iCsr, iJmp+2, regKey, nKey); 1738 sqlite3VdbeAddOp4Int(v, OP_IdxLE, iCsr, iJmp+3, regKey, nKey); 1739 sqlite3VdbeAddOp1(v, OP_NullRow, iCsr); 1740 } 1741 } 1742 sqlite3ReleaseTempRange(pParse, regKey, nRefKey); 1743 } 1744 #endif 1745 for(i=nColumn-1; i>=0; i--){ 1746 #ifdef SQLITE_ENABLE_SORTER_REFERENCES 1747 if( aOutEx[i].fg.bSorterRef ){ 1748 sqlite3ExprCode(pParse, aOutEx[i].pExpr, regRow+i); 1749 }else 1750 #endif 1751 { 1752 int iRead; 1753 if( aOutEx[i].u.x.iOrderByCol ){ 1754 iRead = aOutEx[i].u.x.iOrderByCol-1; 1755 }else{ 1756 iRead = iCol--; 1757 } 1758 sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iRead, regRow+i); 1759 VdbeComment((v, "%s", aOutEx[i].zEName)); 1760 } 1761 } 1762 switch( eDest ){ 1763 case SRT_Table: 1764 case SRT_EphemTab: { 1765 sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq, regRow); 1766 sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); 1767 sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); 1768 sqlite3VdbeChangeP5(v, OPFLAG_APPEND); 1769 break; 1770 } 1771 #ifndef SQLITE_OMIT_SUBQUERY 1772 case SRT_Set: { 1773 assert( nColumn==sqlite3Strlen30(pDest->zAffSdst) ); 1774 sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, regRowid, 1775 pDest->zAffSdst, nColumn); 1776 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, regRowid, regRow, nColumn); 1777 break; 1778 } 1779 case SRT_Mem: { 1780 /* The LIMIT clause will terminate the loop for us */ 1781 break; 1782 } 1783 #endif 1784 case SRT_Upfrom: { 1785 int i2 = pDest->iSDParm2; 1786 int r1 = sqlite3GetTempReg(pParse); 1787 sqlite3VdbeAddOp3(v, OP_MakeRecord,regRow+(i2<0),nColumn-(i2<0),r1); 1788 if( i2<0 ){ 1789 sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, regRow); 1790 }else{ 1791 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regRow, i2); 1792 } 1793 break; 1794 } 1795 default: { 1796 assert( eDest==SRT_Output || eDest==SRT_Coroutine ); 1797 testcase( eDest==SRT_Output ); 1798 testcase( eDest==SRT_Coroutine ); 1799 if( eDest==SRT_Output ){ 1800 sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn); 1801 }else{ 1802 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); 1803 } 1804 break; 1805 } 1806 } 1807 if( regRowid ){ 1808 if( eDest==SRT_Set ){ 1809 sqlite3ReleaseTempRange(pParse, regRow, nColumn); 1810 }else{ 1811 sqlite3ReleaseTempReg(pParse, regRow); 1812 } 1813 sqlite3ReleaseTempReg(pParse, regRowid); 1814 } 1815 /* The bottom of the loop 1816 */ 1817 sqlite3VdbeResolveLabel(v, addrContinue); 1818 if( pSort->sortFlags & SORTFLAG_UseSorter ){ 1819 sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr); VdbeCoverage(v); 1820 }else{ 1821 sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v); 1822 } 1823 if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn); 1824 sqlite3VdbeResolveLabel(v, addrBreak); 1825 } 1826 1827 /* 1828 ** Return a pointer to a string containing the 'declaration type' of the 1829 ** expression pExpr. The string may be treated as static by the caller. 1830 ** 1831 ** The declaration type is the exact datatype definition extracted from the 1832 ** original CREATE TABLE statement if the expression is a column. The 1833 ** declaration type for a ROWID field is INTEGER. Exactly when an expression 1834 ** is considered a column can be complex in the presence of subqueries. The 1835 ** result-set expression in all of the following SELECT statements is 1836 ** considered a column by this function. 1837 ** 1838 ** SELECT col FROM tbl; 1839 ** SELECT (SELECT col FROM tbl; 1840 ** SELECT (SELECT col FROM tbl); 1841 ** SELECT abc FROM (SELECT col AS abc FROM tbl); 1842 ** 1843 ** The declaration type for any expression other than a column is NULL. 1844 ** 1845 ** This routine has either 3 or 6 parameters depending on whether or not 1846 ** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used. 1847 */ 1848 #ifdef SQLITE_ENABLE_COLUMN_METADATA 1849 # define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E) 1850 #else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */ 1851 # define columnType(A,B,C,D,E) columnTypeImpl(A,B) 1852 #endif 1853 static const char *columnTypeImpl( 1854 NameContext *pNC, 1855 #ifndef SQLITE_ENABLE_COLUMN_METADATA 1856 Expr *pExpr 1857 #else 1858 Expr *pExpr, 1859 const char **pzOrigDb, 1860 const char **pzOrigTab, 1861 const char **pzOrigCol 1862 #endif 1863 ){ 1864 char const *zType = 0; 1865 int j; 1866 #ifdef SQLITE_ENABLE_COLUMN_METADATA 1867 char const *zOrigDb = 0; 1868 char const *zOrigTab = 0; 1869 char const *zOrigCol = 0; 1870 #endif 1871 1872 assert( pExpr!=0 ); 1873 assert( pNC->pSrcList!=0 ); 1874 switch( pExpr->op ){ 1875 case TK_COLUMN: { 1876 /* The expression is a column. Locate the table the column is being 1877 ** extracted from in NameContext.pSrcList. This table may be real 1878 ** database table or a subquery. 1879 */ 1880 Table *pTab = 0; /* Table structure column is extracted from */ 1881 Select *pS = 0; /* Select the column is extracted from */ 1882 int iCol = pExpr->iColumn; /* Index of column in pTab */ 1883 while( pNC && !pTab ){ 1884 SrcList *pTabList = pNC->pSrcList; 1885 for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); 1886 if( j<pTabList->nSrc ){ 1887 pTab = pTabList->a[j].pTab; 1888 pS = pTabList->a[j].pSelect; 1889 }else{ 1890 pNC = pNC->pNext; 1891 } 1892 } 1893 1894 if( pTab==0 ){ 1895 /* At one time, code such as "SELECT new.x" within a trigger would 1896 ** cause this condition to run. Since then, we have restructured how 1897 ** trigger code is generated and so this condition is no longer 1898 ** possible. However, it can still be true for statements like 1899 ** the following: 1900 ** 1901 ** CREATE TABLE t1(col INTEGER); 1902 ** SELECT (SELECT t1.col) FROM FROM t1; 1903 ** 1904 ** when columnType() is called on the expression "t1.col" in the 1905 ** sub-select. In this case, set the column type to NULL, even 1906 ** though it should really be "INTEGER". 1907 ** 1908 ** This is not a problem, as the column type of "t1.col" is never 1909 ** used. When columnType() is called on the expression 1910 ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT 1911 ** branch below. */ 1912 break; 1913 } 1914 1915 assert( pTab && ExprUseYTab(pExpr) && pExpr->y.pTab==pTab ); 1916 if( pS ){ 1917 /* The "table" is actually a sub-select or a view in the FROM clause 1918 ** of the SELECT statement. Return the declaration type and origin 1919 ** data for the result-set column of the sub-select. 1920 */ 1921 if( iCol<pS->pEList->nExpr 1922 #ifdef SQLITE_ALLOW_ROWID_IN_VIEW 1923 && iCol>=0 1924 #else 1925 && ALWAYS(iCol>=0) 1926 #endif 1927 ){ 1928 /* If iCol is less than zero, then the expression requests the 1929 ** rowid of the sub-select or view. This expression is legal (see 1930 ** test case misc2.2.2) - it always evaluates to NULL. 1931 */ 1932 NameContext sNC; 1933 Expr *p = pS->pEList->a[iCol].pExpr; 1934 sNC.pSrcList = pS->pSrc; 1935 sNC.pNext = pNC; 1936 sNC.pParse = pNC->pParse; 1937 zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol); 1938 } 1939 }else{ 1940 /* A real table or a CTE table */ 1941 assert( !pS ); 1942 #ifdef SQLITE_ENABLE_COLUMN_METADATA 1943 if( iCol<0 ) iCol = pTab->iPKey; 1944 assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) ); 1945 if( iCol<0 ){ 1946 zType = "INTEGER"; 1947 zOrigCol = "rowid"; 1948 }else{ 1949 zOrigCol = pTab->aCol[iCol].zCnName; 1950 zType = sqlite3ColumnType(&pTab->aCol[iCol],0); 1951 } 1952 zOrigTab = pTab->zName; 1953 if( pNC->pParse && pTab->pSchema ){ 1954 int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema); 1955 zOrigDb = pNC->pParse->db->aDb[iDb].zDbSName; 1956 } 1957 #else 1958 assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) ); 1959 if( iCol<0 ){ 1960 zType = "INTEGER"; 1961 }else{ 1962 zType = sqlite3ColumnType(&pTab->aCol[iCol],0); 1963 } 1964 #endif 1965 } 1966 break; 1967 } 1968 #ifndef SQLITE_OMIT_SUBQUERY 1969 case TK_SELECT: { 1970 /* The expression is a sub-select. Return the declaration type and 1971 ** origin info for the single column in the result set of the SELECT 1972 ** statement. 1973 */ 1974 NameContext sNC; 1975 Select *pS; 1976 Expr *p; 1977 assert( ExprUseXSelect(pExpr) ); 1978 pS = pExpr->x.pSelect; 1979 p = pS->pEList->a[0].pExpr; 1980 sNC.pSrcList = pS->pSrc; 1981 sNC.pNext = pNC; 1982 sNC.pParse = pNC->pParse; 1983 zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); 1984 break; 1985 } 1986 #endif 1987 } 1988 1989 #ifdef SQLITE_ENABLE_COLUMN_METADATA 1990 if( pzOrigDb ){ 1991 assert( pzOrigTab && pzOrigCol ); 1992 *pzOrigDb = zOrigDb; 1993 *pzOrigTab = zOrigTab; 1994 *pzOrigCol = zOrigCol; 1995 } 1996 #endif 1997 return zType; 1998 } 1999 2000 /* 2001 ** Generate code that will tell the VDBE the declaration types of columns 2002 ** in the result set. 2003 */ 2004 static void generateColumnTypes( 2005 Parse *pParse, /* Parser context */ 2006 SrcList *pTabList, /* List of tables */ 2007 ExprList *pEList /* Expressions defining the result set */ 2008 ){ 2009 #ifndef SQLITE_OMIT_DECLTYPE 2010 Vdbe *v = pParse->pVdbe; 2011 int i; 2012 NameContext sNC; 2013 sNC.pSrcList = pTabList; 2014 sNC.pParse = pParse; 2015 sNC.pNext = 0; 2016 for(i=0; i<pEList->nExpr; i++){ 2017 Expr *p = pEList->a[i].pExpr; 2018 const char *zType; 2019 #ifdef SQLITE_ENABLE_COLUMN_METADATA 2020 const char *zOrigDb = 0; 2021 const char *zOrigTab = 0; 2022 const char *zOrigCol = 0; 2023 zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); 2024 2025 /* The vdbe must make its own copy of the column-type and other 2026 ** column specific strings, in case the schema is reset before this 2027 ** virtual machine is deleted. 2028 */ 2029 sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT); 2030 sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT); 2031 sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT); 2032 #else 2033 zType = columnType(&sNC, p, 0, 0, 0); 2034 #endif 2035 sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT); 2036 } 2037 #endif /* !defined(SQLITE_OMIT_DECLTYPE) */ 2038 } 2039 2040 2041 /* 2042 ** Compute the column names for a SELECT statement. 2043 ** 2044 ** The only guarantee that SQLite makes about column names is that if the 2045 ** column has an AS clause assigning it a name, that will be the name used. 2046 ** That is the only documented guarantee. However, countless applications 2047 ** developed over the years have made baseless assumptions about column names 2048 ** and will break if those assumptions changes. Hence, use extreme caution 2049 ** when modifying this routine to avoid breaking legacy. 2050 ** 2051 ** See Also: sqlite3ColumnsFromExprList() 2052 ** 2053 ** The PRAGMA short_column_names and PRAGMA full_column_names settings are 2054 ** deprecated. The default setting is short=ON, full=OFF. 99.9% of all 2055 ** applications should operate this way. Nevertheless, we need to support the 2056 ** other modes for legacy: 2057 ** 2058 ** short=OFF, full=OFF: Column name is the text of the expression has it 2059 ** originally appears in the SELECT statement. In 2060 ** other words, the zSpan of the result expression. 2061 ** 2062 ** short=ON, full=OFF: (This is the default setting). If the result 2063 ** refers directly to a table column, then the 2064 ** result column name is just the table column 2065 ** name: COLUMN. Otherwise use zSpan. 2066 ** 2067 ** full=ON, short=ANY: If the result refers directly to a table column, 2068 ** then the result column name with the table name 2069 ** prefix, ex: TABLE.COLUMN. Otherwise use zSpan. 2070 */ 2071 void sqlite3GenerateColumnNames( 2072 Parse *pParse, /* Parser context */ 2073 Select *pSelect /* Generate column names for this SELECT statement */ 2074 ){ 2075 Vdbe *v = pParse->pVdbe; 2076 int i; 2077 Table *pTab; 2078 SrcList *pTabList; 2079 ExprList *pEList; 2080 sqlite3 *db = pParse->db; 2081 int fullName; /* TABLE.COLUMN if no AS clause and is a direct table ref */ 2082 int srcName; /* COLUMN or TABLE.COLUMN if no AS clause and is direct */ 2083 2084 #ifndef SQLITE_OMIT_EXPLAIN 2085 /* If this is an EXPLAIN, skip this step */ 2086 if( pParse->explain ){ 2087 return; 2088 } 2089 #endif 2090 2091 if( pParse->colNamesSet ) return; 2092 /* Column names are determined by the left-most term of a compound select */ 2093 while( pSelect->pPrior ) pSelect = pSelect->pPrior; 2094 SELECTTRACE(1,pParse,pSelect,("generating column names\n")); 2095 pTabList = pSelect->pSrc; 2096 pEList = pSelect->pEList; 2097 assert( v!=0 ); 2098 assert( pTabList!=0 ); 2099 pParse->colNamesSet = 1; 2100 fullName = (db->flags & SQLITE_FullColNames)!=0; 2101 srcName = (db->flags & SQLITE_ShortColNames)!=0 || fullName; 2102 sqlite3VdbeSetNumCols(v, pEList->nExpr); 2103 for(i=0; i<pEList->nExpr; i++){ 2104 Expr *p = pEList->a[i].pExpr; 2105 2106 assert( p!=0 ); 2107 assert( p->op!=TK_AGG_COLUMN ); /* Agg processing has not run yet */ 2108 assert( p->op!=TK_COLUMN 2109 || (ExprUseYTab(p) && p->y.pTab!=0) ); /* Covering idx not yet coded */ 2110 if( pEList->a[i].zEName && pEList->a[i].fg.eEName==ENAME_NAME ){ 2111 /* An AS clause always takes first priority */ 2112 char *zName = pEList->a[i].zEName; 2113 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT); 2114 }else if( srcName && p->op==TK_COLUMN ){ 2115 char *zCol; 2116 int iCol = p->iColumn; 2117 pTab = p->y.pTab; 2118 assert( pTab!=0 ); 2119 if( iCol<0 ) iCol = pTab->iPKey; 2120 assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) ); 2121 if( iCol<0 ){ 2122 zCol = "rowid"; 2123 }else{ 2124 zCol = pTab->aCol[iCol].zCnName; 2125 } 2126 if( fullName ){ 2127 char *zName = 0; 2128 zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol); 2129 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC); 2130 }else{ 2131 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT); 2132 } 2133 }else{ 2134 const char *z = pEList->a[i].zEName; 2135 z = z==0 ? sqlite3MPrintf(db, "column%d", i+1) : sqlite3DbStrDup(db, z); 2136 sqlite3VdbeSetColName(v, i, COLNAME_NAME, z, SQLITE_DYNAMIC); 2137 } 2138 } 2139 generateColumnTypes(pParse, pTabList, pEList); 2140 } 2141 2142 /* 2143 ** Given an expression list (which is really the list of expressions 2144 ** that form the result set of a SELECT statement) compute appropriate 2145 ** column names for a table that would hold the expression list. 2146 ** 2147 ** All column names will be unique. 2148 ** 2149 ** Only the column names are computed. Column.zType, Column.zColl, 2150 ** and other fields of Column are zeroed. 2151 ** 2152 ** Return SQLITE_OK on success. If a memory allocation error occurs, 2153 ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM. 2154 ** 2155 ** The only guarantee that SQLite makes about column names is that if the 2156 ** column has an AS clause assigning it a name, that will be the name used. 2157 ** That is the only documented guarantee. However, countless applications 2158 ** developed over the years have made baseless assumptions about column names 2159 ** and will break if those assumptions changes. Hence, use extreme caution 2160 ** when modifying this routine to avoid breaking legacy. 2161 ** 2162 ** See Also: sqlite3GenerateColumnNames() 2163 */ 2164 int sqlite3ColumnsFromExprList( 2165 Parse *pParse, /* Parsing context */ 2166 ExprList *pEList, /* Expr list from which to derive column names */ 2167 i16 *pnCol, /* Write the number of columns here */ 2168 Column **paCol /* Write the new column list here */ 2169 ){ 2170 sqlite3 *db = pParse->db; /* Database connection */ 2171 int i, j; /* Loop counters */ 2172 u32 cnt; /* Index added to make the name unique */ 2173 Column *aCol, *pCol; /* For looping over result columns */ 2174 int nCol; /* Number of columns in the result set */ 2175 char *zName; /* Column name */ 2176 int nName; /* Size of name in zName[] */ 2177 Hash ht; /* Hash table of column names */ 2178 Table *pTab; 2179 2180 sqlite3HashInit(&ht); 2181 if( pEList ){ 2182 nCol = pEList->nExpr; 2183 aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); 2184 testcase( aCol==0 ); 2185 if( NEVER(nCol>32767) ) nCol = 32767; 2186 }else{ 2187 nCol = 0; 2188 aCol = 0; 2189 } 2190 assert( nCol==(i16)nCol ); 2191 *pnCol = nCol; 2192 *paCol = aCol; 2193 2194 for(i=0, pCol=aCol; i<nCol && !db->mallocFailed; i++, pCol++){ 2195 struct ExprList_item *pX = &pEList->a[i]; 2196 struct ExprList_item *pCollide; 2197 /* Get an appropriate name for the column 2198 */ 2199 if( (zName = pX->zEName)!=0 && pX->fg.eEName==ENAME_NAME ){ 2200 /* If the column contains an "AS <name>" phrase, use <name> as the name */ 2201 }else{ 2202 Expr *pColExpr = sqlite3ExprSkipCollateAndLikely(pX->pExpr); 2203 while( ALWAYS(pColExpr!=0) && pColExpr->op==TK_DOT ){ 2204 pColExpr = pColExpr->pRight; 2205 assert( pColExpr!=0 ); 2206 } 2207 if( pColExpr->op==TK_COLUMN 2208 && ALWAYS( ExprUseYTab(pColExpr) ) 2209 && ALWAYS( pColExpr->y.pTab!=0 ) 2210 ){ 2211 /* For columns use the column name name */ 2212 int iCol = pColExpr->iColumn; 2213 pTab = pColExpr->y.pTab; 2214 if( iCol<0 ) iCol = pTab->iPKey; 2215 zName = iCol>=0 ? pTab->aCol[iCol].zCnName : "rowid"; 2216 }else if( pColExpr->op==TK_ID ){ 2217 assert( !ExprHasProperty(pColExpr, EP_IntValue) ); 2218 zName = pColExpr->u.zToken; 2219 }else{ 2220 /* Use the original text of the column expression as its name */ 2221 assert( zName==pX->zEName ); /* pointer comparison intended */ 2222 } 2223 } 2224 if( zName && !sqlite3IsTrueOrFalse(zName) ){ 2225 zName = sqlite3DbStrDup(db, zName); 2226 }else{ 2227 zName = sqlite3MPrintf(db,"column%d",i+1); 2228 } 2229 2230 /* Make sure the column name is unique. If the name is not unique, 2231 ** append an integer to the name so that it becomes unique. 2232 */ 2233 cnt = 0; 2234 while( zName && (pCollide = sqlite3HashFind(&ht, zName))!=0 ){ 2235 if( pCollide->fg.bUsingTerm ){ 2236 pCol->colFlags |= COLFLAG_NOEXPAND; 2237 } 2238 nName = sqlite3Strlen30(zName); 2239 if( nName>0 ){ 2240 for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} 2241 if( zName[j]==':' ) nName = j; 2242 } 2243 zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt); 2244 if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); 2245 } 2246 pCol->zCnName = zName; 2247 pCol->hName = sqlite3StrIHash(zName); 2248 if( pX->fg.bNoExpand ){ 2249 pCol->colFlags |= COLFLAG_NOEXPAND; 2250 } 2251 sqlite3ColumnPropertiesFromName(0, pCol); 2252 if( zName && sqlite3HashInsert(&ht, zName, pX)==pX ){ 2253 sqlite3OomFault(db); 2254 } 2255 } 2256 sqlite3HashClear(&ht); 2257 if( db->mallocFailed ){ 2258 for(j=0; j<i; j++){ 2259 sqlite3DbFree(db, aCol[j].zCnName); 2260 } 2261 sqlite3DbFree(db, aCol); 2262 *paCol = 0; 2263 *pnCol = 0; 2264 return SQLITE_NOMEM_BKPT; 2265 } 2266 return SQLITE_OK; 2267 } 2268 2269 /* 2270 ** Add type and collation information to a column list based on 2271 ** a SELECT statement. 2272 ** 2273 ** The column list presumably came from selectColumnNamesFromExprList(). 2274 ** The column list has only names, not types or collations. This 2275 ** routine goes through and adds the types and collations. 2276 ** 2277 ** This routine requires that all identifiers in the SELECT 2278 ** statement be resolved. 2279 */ 2280 void sqlite3SelectAddColumnTypeAndCollation( 2281 Parse *pParse, /* Parsing contexts */ 2282 Table *pTab, /* Add column type information to this table */ 2283 Select *pSelect, /* SELECT used to determine types and collations */ 2284 char aff /* Default affinity for columns */ 2285 ){ 2286 sqlite3 *db = pParse->db; 2287 NameContext sNC; 2288 Column *pCol; 2289 CollSeq *pColl; 2290 int i; 2291 Expr *p; 2292 struct ExprList_item *a; 2293 2294 assert( pSelect!=0 ); 2295 assert( (pSelect->selFlags & SF_Resolved)!=0 ); 2296 assert( pTab->nCol==pSelect->pEList->nExpr || db->mallocFailed ); 2297 if( db->mallocFailed ) return; 2298 memset(&sNC, 0, sizeof(sNC)); 2299 sNC.pSrcList = pSelect->pSrc; 2300 a = pSelect->pEList->a; 2301 for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){ 2302 const char *zType; 2303 i64 n, m; 2304 pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT); 2305 p = a[i].pExpr; 2306 zType = columnType(&sNC, p, 0, 0, 0); 2307 /* pCol->szEst = ... // Column size est for SELECT tables never used */ 2308 pCol->affinity = sqlite3ExprAffinity(p); 2309 if( zType ){ 2310 m = sqlite3Strlen30(zType); 2311 n = sqlite3Strlen30(pCol->zCnName); 2312 pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2); 2313 if( pCol->zCnName ){ 2314 memcpy(&pCol->zCnName[n+1], zType, m+1); 2315 pCol->colFlags |= COLFLAG_HASTYPE; 2316 }else{ 2317 testcase( pCol->colFlags & COLFLAG_HASTYPE ); 2318 pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL); 2319 } 2320 } 2321 if( pCol->affinity<=SQLITE_AFF_NONE ) pCol->affinity = aff; 2322 pColl = sqlite3ExprCollSeq(pParse, p); 2323 if( pColl ){ 2324 assert( pTab->pIndex==0 ); 2325 sqlite3ColumnSetColl(db, pCol, pColl->zName); 2326 } 2327 } 2328 pTab->szTabRow = 1; /* Any non-zero value works */ 2329 } 2330 2331 /* 2332 ** Given a SELECT statement, generate a Table structure that describes 2333 ** the result set of that SELECT. 2334 */ 2335 Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect, char aff){ 2336 Table *pTab; 2337 sqlite3 *db = pParse->db; 2338 u64 savedFlags; 2339 2340 savedFlags = db->flags; 2341 db->flags &= ~(u64)SQLITE_FullColNames; 2342 db->flags |= SQLITE_ShortColNames; 2343 sqlite3SelectPrep(pParse, pSelect, 0); 2344 db->flags = savedFlags; 2345 if( pParse->nErr ) return 0; 2346 while( pSelect->pPrior ) pSelect = pSelect->pPrior; 2347 pTab = sqlite3DbMallocZero(db, sizeof(Table) ); 2348 if( pTab==0 ){ 2349 return 0; 2350 } 2351 pTab->nTabRef = 1; 2352 pTab->zName = 0; 2353 pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); 2354 sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol); 2355 sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect, aff); 2356 pTab->iPKey = -1; 2357 if( db->mallocFailed ){ 2358 sqlite3DeleteTable(db, pTab); 2359 return 0; 2360 } 2361 return pTab; 2362 } 2363 2364 /* 2365 ** Get a VDBE for the given parser context. Create a new one if necessary. 2366 ** If an error occurs, return NULL and leave a message in pParse. 2367 */ 2368 Vdbe *sqlite3GetVdbe(Parse *pParse){ 2369 if( pParse->pVdbe ){ 2370 return pParse->pVdbe; 2371 } 2372 if( pParse->pToplevel==0 2373 && OptimizationEnabled(pParse->db,SQLITE_FactorOutConst) 2374 ){ 2375 pParse->okConstFactor = 1; 2376 } 2377 return sqlite3VdbeCreate(pParse); 2378 } 2379 2380 2381 /* 2382 ** Compute the iLimit and iOffset fields of the SELECT based on the 2383 ** pLimit expressions. pLimit->pLeft and pLimit->pRight hold the expressions 2384 ** that appear in the original SQL statement after the LIMIT and OFFSET 2385 ** keywords. Or NULL if those keywords are omitted. iLimit and iOffset 2386 ** are the integer memory register numbers for counters used to compute 2387 ** the limit and offset. If there is no limit and/or offset, then 2388 ** iLimit and iOffset are negative. 2389 ** 2390 ** This routine changes the values of iLimit and iOffset only if 2391 ** a limit or offset is defined by pLimit->pLeft and pLimit->pRight. iLimit 2392 ** and iOffset should have been preset to appropriate default values (zero) 2393 ** prior to calling this routine. 2394 ** 2395 ** The iOffset register (if it exists) is initialized to the value 2396 ** of the OFFSET. The iLimit register is initialized to LIMIT. Register 2397 ** iOffset+1 is initialized to LIMIT+OFFSET. 2398 ** 2399 ** Only if pLimit->pLeft!=0 do the limit registers get 2400 ** redefined. The UNION ALL operator uses this property to force 2401 ** the reuse of the same limit and offset registers across multiple 2402 ** SELECT statements. 2403 */ 2404 static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ 2405 Vdbe *v = 0; 2406 int iLimit = 0; 2407 int iOffset; 2408 int n; 2409 Expr *pLimit = p->pLimit; 2410 2411 if( p->iLimit ) return; 2412 2413 /* 2414 ** "LIMIT -1" always shows all rows. There is some 2415 ** controversy about what the correct behavior should be. 2416 ** The current implementation interprets "LIMIT 0" to mean 2417 ** no rows. 2418 */ 2419 if( pLimit ){ 2420 assert( pLimit->op==TK_LIMIT ); 2421 assert( pLimit->pLeft!=0 ); 2422 p->iLimit = iLimit = ++pParse->nMem; 2423 v = sqlite3GetVdbe(pParse); 2424 assert( v!=0 ); 2425 if( sqlite3ExprIsInteger(pLimit->pLeft, &n) ){ 2426 sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit); 2427 VdbeComment((v, "LIMIT counter")); 2428 if( n==0 ){ 2429 sqlite3VdbeGoto(v, iBreak); 2430 }else if( n>=0 && p->nSelectRow>sqlite3LogEst((u64)n) ){ 2431 p->nSelectRow = sqlite3LogEst((u64)n); 2432 p->selFlags |= SF_FixedLimit; 2433 } 2434 }else{ 2435 sqlite3ExprCode(pParse, pLimit->pLeft, iLimit); 2436 sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v); 2437 VdbeComment((v, "LIMIT counter")); 2438 sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v); 2439 } 2440 if( pLimit->pRight ){ 2441 p->iOffset = iOffset = ++pParse->nMem; 2442 pParse->nMem++; /* Allocate an extra register for limit+offset */ 2443 sqlite3ExprCode(pParse, pLimit->pRight, iOffset); 2444 sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); VdbeCoverage(v); 2445 VdbeComment((v, "OFFSET counter")); 2446 sqlite3VdbeAddOp3(v, OP_OffsetLimit, iLimit, iOffset+1, iOffset); 2447 VdbeComment((v, "LIMIT+OFFSET")); 2448 } 2449 } 2450 } 2451 2452 #ifndef SQLITE_OMIT_COMPOUND_SELECT 2453 /* 2454 ** Return the appropriate collating sequence for the iCol-th column of 2455 ** the result set for the compound-select statement "p". Return NULL if 2456 ** the column has no default collating sequence. 2457 ** 2458 ** The collating sequence for the compound select is taken from the 2459 ** left-most term of the select that has a collating sequence. 2460 */ 2461 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ 2462 CollSeq *pRet; 2463 if( p->pPrior ){ 2464 pRet = multiSelectCollSeq(pParse, p->pPrior, iCol); 2465 }else{ 2466 pRet = 0; 2467 } 2468 assert( iCol>=0 ); 2469 /* iCol must be less than p->pEList->nExpr. Otherwise an error would 2470 ** have been thrown during name resolution and we would not have gotten 2471 ** this far */ 2472 if( pRet==0 && ALWAYS(iCol<p->pEList->nExpr) ){ 2473 pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr); 2474 } 2475 return pRet; 2476 } 2477 2478 /* 2479 ** The select statement passed as the second parameter is a compound SELECT 2480 ** with an ORDER BY clause. This function allocates and returns a KeyInfo 2481 ** structure suitable for implementing the ORDER BY. 2482 ** 2483 ** Space to hold the KeyInfo structure is obtained from malloc. The calling 2484 ** function is responsible for ensuring that this structure is eventually 2485 ** freed. 2486 */ 2487 static KeyInfo *multiSelectOrderByKeyInfo(Parse *pParse, Select *p, int nExtra){ 2488 ExprList *pOrderBy = p->pOrderBy; 2489 int nOrderBy = ALWAYS(pOrderBy!=0) ? pOrderBy->nExpr : 0; 2490 sqlite3 *db = pParse->db; 2491 KeyInfo *pRet = sqlite3KeyInfoAlloc(db, nOrderBy+nExtra, 1); 2492 if( pRet ){ 2493 int i; 2494 for(i=0; i<nOrderBy; i++){ 2495 struct ExprList_item *pItem = &pOrderBy->a[i]; 2496 Expr *pTerm = pItem->pExpr; 2497 CollSeq *pColl; 2498 2499 if( pTerm->flags & EP_Collate ){ 2500 pColl = sqlite3ExprCollSeq(pParse, pTerm); 2501 }else{ 2502 pColl = multiSelectCollSeq(pParse, p, pItem->u.x.iOrderByCol-1); 2503 if( pColl==0 ) pColl = db->pDfltColl; 2504 pOrderBy->a[i].pExpr = 2505 sqlite3ExprAddCollateString(pParse, pTerm, pColl->zName); 2506 } 2507 assert( sqlite3KeyInfoIsWriteable(pRet) ); 2508 pRet->aColl[i] = pColl; 2509 pRet->aSortFlags[i] = pOrderBy->a[i].fg.sortFlags; 2510 } 2511 } 2512 2513 return pRet; 2514 } 2515 2516 #ifndef SQLITE_OMIT_CTE 2517 /* 2518 ** This routine generates VDBE code to compute the content of a WITH RECURSIVE 2519 ** query of the form: 2520 ** 2521 ** <recursive-table> AS (<setup-query> UNION [ALL] <recursive-query>) 2522 ** \___________/ \_______________/ 2523 ** p->pPrior p 2524 ** 2525 ** 2526 ** There is exactly one reference to the recursive-table in the FROM clause 2527 ** of recursive-query, marked with the SrcList->a[].fg.isRecursive flag. 2528 ** 2529 ** The setup-query runs once to generate an initial set of rows that go 2530 ** into a Queue table. Rows are extracted from the Queue table one by 2531 ** one. Each row extracted from Queue is output to pDest. Then the single 2532 ** extracted row (now in the iCurrent table) becomes the content of the 2533 ** recursive-table for a recursive-query run. The output of the recursive-query 2534 ** is added back into the Queue table. Then another row is extracted from Queue 2535 ** and the iteration continues until the Queue table is empty. 2536 ** 2537 ** If the compound query operator is UNION then no duplicate rows are ever 2538 ** inserted into the Queue table. The iDistinct table keeps a copy of all rows 2539 ** that have ever been inserted into Queue and causes duplicates to be 2540 ** discarded. If the operator is UNION ALL, then duplicates are allowed. 2541 ** 2542 ** If the query has an ORDER BY, then entries in the Queue table are kept in 2543 ** ORDER BY order and the first entry is extracted for each cycle. Without 2544 ** an ORDER BY, the Queue table is just a FIFO. 2545 ** 2546 ** If a LIMIT clause is provided, then the iteration stops after LIMIT rows 2547 ** have been output to pDest. A LIMIT of zero means to output no rows and a 2548 ** negative LIMIT means to output all rows. If there is also an OFFSET clause 2549 ** with a positive value, then the first OFFSET outputs are discarded rather 2550 ** than being sent to pDest. The LIMIT count does not begin until after OFFSET 2551 ** rows have been skipped. 2552 */ 2553 static void generateWithRecursiveQuery( 2554 Parse *pParse, /* Parsing context */ 2555 Select *p, /* The recursive SELECT to be coded */ 2556 SelectDest *pDest /* What to do with query results */ 2557 ){ 2558 SrcList *pSrc = p->pSrc; /* The FROM clause of the recursive query */ 2559 int nCol = p->pEList->nExpr; /* Number of columns in the recursive table */ 2560 Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */ 2561 Select *pSetup; /* The setup query */ 2562 Select *pFirstRec; /* Left-most recursive term */ 2563 int addrTop; /* Top of the loop */ 2564 int addrCont, addrBreak; /* CONTINUE and BREAK addresses */ 2565 int iCurrent = 0; /* The Current table */ 2566 int regCurrent; /* Register holding Current table */ 2567 int iQueue; /* The Queue table */ 2568 int iDistinct = 0; /* To ensure unique results if UNION */ 2569 int eDest = SRT_Fifo; /* How to write to Queue */ 2570 SelectDest destQueue; /* SelectDest targetting the Queue table */ 2571 int i; /* Loop counter */ 2572 int rc; /* Result code */ 2573 ExprList *pOrderBy; /* The ORDER BY clause */ 2574 Expr *pLimit; /* Saved LIMIT and OFFSET */ 2575 int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */ 2576 2577 #ifndef SQLITE_OMIT_WINDOWFUNC 2578 if( p->pWin ){ 2579 sqlite3ErrorMsg(pParse, "cannot use window functions in recursive queries"); 2580 return; 2581 } 2582 #endif 2583 2584 /* Obtain authorization to do a recursive query */ 2585 if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return; 2586 2587 /* Process the LIMIT and OFFSET clauses, if they exist */ 2588 addrBreak = sqlite3VdbeMakeLabel(pParse); 2589 p->nSelectRow = 320; /* 4 billion rows */ 2590 computeLimitRegisters(pParse, p, addrBreak); 2591 pLimit = p->pLimit; 2592 regLimit = p->iLimit; 2593 regOffset = p->iOffset; 2594 p->pLimit = 0; 2595 p->iLimit = p->iOffset = 0; 2596 pOrderBy = p->pOrderBy; 2597 2598 /* Locate the cursor number of the Current table */ 2599 for(i=0; ALWAYS(i<pSrc->nSrc); i++){ 2600 if( pSrc->a[i].fg.isRecursive ){ 2601 iCurrent = pSrc->a[i].iCursor; 2602 break; 2603 } 2604 } 2605 2606 /* Allocate cursors numbers for Queue and Distinct. The cursor number for 2607 ** the Distinct table must be exactly one greater than Queue in order 2608 ** for the SRT_DistFifo and SRT_DistQueue destinations to work. */ 2609 iQueue = pParse->nTab++; 2610 if( p->op==TK_UNION ){ 2611 eDest = pOrderBy ? SRT_DistQueue : SRT_DistFifo; 2612 iDistinct = pParse->nTab++; 2613 }else{ 2614 eDest = pOrderBy ? SRT_Queue : SRT_Fifo; 2615 } 2616 sqlite3SelectDestInit(&destQueue, eDest, iQueue); 2617 2618 /* Allocate cursors for Current, Queue, and Distinct. */ 2619 regCurrent = ++pParse->nMem; 2620 sqlite3VdbeAddOp3(v, OP_OpenPseudo, iCurrent, regCurrent, nCol); 2621 if( pOrderBy ){ 2622 KeyInfo *pKeyInfo = multiSelectOrderByKeyInfo(pParse, p, 1); 2623 sqlite3VdbeAddOp4(v, OP_OpenEphemeral, iQueue, pOrderBy->nExpr+2, 0, 2624 (char*)pKeyInfo, P4_KEYINFO); 2625 destQueue.pOrderBy = pOrderBy; 2626 }else{ 2627 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iQueue, nCol); 2628 } 2629 VdbeComment((v, "Queue table")); 2630 if( iDistinct ){ 2631 p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iDistinct, 0); 2632 p->selFlags |= SF_UsesEphemeral; 2633 } 2634 2635 /* Detach the ORDER BY clause from the compound SELECT */ 2636 p->pOrderBy = 0; 2637 2638 /* Figure out how many elements of the compound SELECT are part of the 2639 ** recursive query. Make sure no recursive elements use aggregate 2640 ** functions. Mark the recursive elements as UNION ALL even if they 2641 ** are really UNION because the distinctness will be enforced by the 2642 ** iDistinct table. pFirstRec is left pointing to the left-most 2643 ** recursive term of the CTE. 2644 */ 2645 for(pFirstRec=p; ALWAYS(pFirstRec!=0); pFirstRec=pFirstRec->pPrior){ 2646 if( pFirstRec->selFlags & SF_Aggregate ){ 2647 sqlite3ErrorMsg(pParse, "recursive aggregate queries not supported"); 2648 goto end_of_recursive_query; 2649 } 2650 pFirstRec->op = TK_ALL; 2651 if( (pFirstRec->pPrior->selFlags & SF_Recursive)==0 ) break; 2652 } 2653 2654 /* Store the results of the setup-query in Queue. */ 2655 pSetup = pFirstRec->pPrior; 2656 pSetup->pNext = 0; 2657 ExplainQueryPlan((pParse, 1, "SETUP")); 2658 rc = sqlite3Select(pParse, pSetup, &destQueue); 2659 pSetup->pNext = p; 2660 if( rc ) goto end_of_recursive_query; 2661 2662 /* Find the next row in the Queue and output that row */ 2663 addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iQueue, addrBreak); VdbeCoverage(v); 2664 2665 /* Transfer the next row in Queue over to Current */ 2666 sqlite3VdbeAddOp1(v, OP_NullRow, iCurrent); /* To reset column cache */ 2667 if( pOrderBy ){ 2668 sqlite3VdbeAddOp3(v, OP_Column, iQueue, pOrderBy->nExpr+1, regCurrent); 2669 }else{ 2670 sqlite3VdbeAddOp2(v, OP_RowData, iQueue, regCurrent); 2671 } 2672 sqlite3VdbeAddOp1(v, OP_Delete, iQueue); 2673 2674 /* Output the single row in Current */ 2675 addrCont = sqlite3VdbeMakeLabel(pParse); 2676 codeOffset(v, regOffset, addrCont); 2677 selectInnerLoop(pParse, p, iCurrent, 2678 0, 0, pDest, addrCont, addrBreak); 2679 if( regLimit ){ 2680 sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak); 2681 VdbeCoverage(v); 2682 } 2683 sqlite3VdbeResolveLabel(v, addrCont); 2684 2685 /* Execute the recursive SELECT taking the single row in Current as 2686 ** the value for the recursive-table. Store the results in the Queue. 2687 */ 2688 pFirstRec->pPrior = 0; 2689 ExplainQueryPlan((pParse, 1, "RECURSIVE STEP")); 2690 sqlite3Select(pParse, p, &destQueue); 2691 assert( pFirstRec->pPrior==0 ); 2692 pFirstRec->pPrior = pSetup; 2693 2694 /* Keep running the loop until the Queue is empty */ 2695 sqlite3VdbeGoto(v, addrTop); 2696 sqlite3VdbeResolveLabel(v, addrBreak); 2697 2698 end_of_recursive_query: 2699 sqlite3ExprListDelete(pParse->db, p->pOrderBy); 2700 p->pOrderBy = pOrderBy; 2701 p->pLimit = pLimit; 2702 return; 2703 } 2704 #endif /* SQLITE_OMIT_CTE */ 2705 2706 /* Forward references */ 2707 static int multiSelectOrderBy( 2708 Parse *pParse, /* Parsing context */ 2709 Select *p, /* The right-most of SELECTs to be coded */ 2710 SelectDest *pDest /* What to do with query results */ 2711 ); 2712 2713 /* 2714 ** Handle the special case of a compound-select that originates from a 2715 ** VALUES clause. By handling this as a special case, we avoid deep 2716 ** recursion, and thus do not need to enforce the SQLITE_LIMIT_COMPOUND_SELECT 2717 ** on a VALUES clause. 2718 ** 2719 ** Because the Select object originates from a VALUES clause: 2720 ** (1) There is no LIMIT or OFFSET or else there is a LIMIT of exactly 1 2721 ** (2) All terms are UNION ALL 2722 ** (3) There is no ORDER BY clause 2723 ** 2724 ** The "LIMIT of exactly 1" case of condition (1) comes about when a VALUES 2725 ** clause occurs within scalar expression (ex: "SELECT (VALUES(1),(2),(3))"). 2726 ** The sqlite3CodeSubselect will have added the LIMIT 1 clause in tht case. 2727 ** Since the limit is exactly 1, we only need to evaluate the left-most VALUES. 2728 */ 2729 static int multiSelectValues( 2730 Parse *pParse, /* Parsing context */ 2731 Select *p, /* The right-most of SELECTs to be coded */ 2732 SelectDest *pDest /* What to do with query results */ 2733 ){ 2734 int nRow = 1; 2735 int rc = 0; 2736 int bShowAll = p->pLimit==0; 2737 assert( p->selFlags & SF_MultiValue ); 2738 do{ 2739 assert( p->selFlags & SF_Values ); 2740 assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); 2741 assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr ); 2742 #ifndef SQLITE_OMIT_WINDOWFUNC 2743 if( p->pWin ) return -1; 2744 #endif 2745 if( p->pPrior==0 ) break; 2746 assert( p->pPrior->pNext==p ); 2747 p = p->pPrior; 2748 nRow += bShowAll; 2749 }while(1); 2750 ExplainQueryPlan((pParse, 0, "SCAN %d CONSTANT ROW%s", nRow, 2751 nRow==1 ? "" : "S")); 2752 while( p ){ 2753 selectInnerLoop(pParse, p, -1, 0, 0, pDest, 1, 1); 2754 if( !bShowAll ) break; 2755 p->nSelectRow = nRow; 2756 p = p->pNext; 2757 } 2758 return rc; 2759 } 2760 2761 /* 2762 ** Return true if the SELECT statement which is known to be the recursive 2763 ** part of a recursive CTE still has its anchor terms attached. If the 2764 ** anchor terms have already been removed, then return false. 2765 */ 2766 static int hasAnchor(Select *p){ 2767 while( p && (p->selFlags & SF_Recursive)!=0 ){ p = p->pPrior; } 2768 return p!=0; 2769 } 2770 2771 /* 2772 ** This routine is called to process a compound query form from 2773 ** two or more separate queries using UNION, UNION ALL, EXCEPT, or 2774 ** INTERSECT 2775 ** 2776 ** "p" points to the right-most of the two queries. the query on the 2777 ** left is p->pPrior. The left query could also be a compound query 2778 ** in which case this routine will be called recursively. 2779 ** 2780 ** The results of the total query are to be written into a destination 2781 ** of type eDest with parameter iParm. 2782 ** 2783 ** Example 1: Consider a three-way compound SQL statement. 2784 ** 2785 ** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3 2786 ** 2787 ** This statement is parsed up as follows: 2788 ** 2789 ** SELECT c FROM t3 2790 ** | 2791 ** `-----> SELECT b FROM t2 2792 ** | 2793 ** `------> SELECT a FROM t1 2794 ** 2795 ** The arrows in the diagram above represent the Select.pPrior pointer. 2796 ** So if this routine is called with p equal to the t3 query, then 2797 ** pPrior will be the t2 query. p->op will be TK_UNION in this case. 2798 ** 2799 ** Notice that because of the way SQLite parses compound SELECTs, the 2800 ** individual selects always group from left to right. 2801 */ 2802 static int multiSelect( 2803 Parse *pParse, /* Parsing context */ 2804 Select *p, /* The right-most of SELECTs to be coded */ 2805 SelectDest *pDest /* What to do with query results */ 2806 ){ 2807 int rc = SQLITE_OK; /* Success code from a subroutine */ 2808 Select *pPrior; /* Another SELECT immediately to our left */ 2809 Vdbe *v; /* Generate code to this VDBE */ 2810 SelectDest dest; /* Alternative data destination */ 2811 Select *pDelete = 0; /* Chain of simple selects to delete */ 2812 sqlite3 *db; /* Database connection */ 2813 2814 /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only 2815 ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. 2816 */ 2817 assert( p && p->pPrior ); /* Calling function guarantees this much */ 2818 assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION ); 2819 assert( p->selFlags & SF_Compound ); 2820 db = pParse->db; 2821 pPrior = p->pPrior; 2822 dest = *pDest; 2823 assert( pPrior->pOrderBy==0 ); 2824 assert( pPrior->pLimit==0 ); 2825 2826 v = sqlite3GetVdbe(pParse); 2827 assert( v!=0 ); /* The VDBE already created by calling function */ 2828 2829 /* Create the destination temporary table if necessary 2830 */ 2831 if( dest.eDest==SRT_EphemTab ){ 2832 assert( p->pEList ); 2833 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr); 2834 dest.eDest = SRT_Table; 2835 } 2836 2837 /* Special handling for a compound-select that originates as a VALUES clause. 2838 */ 2839 if( p->selFlags & SF_MultiValue ){ 2840 rc = multiSelectValues(pParse, p, &dest); 2841 if( rc>=0 ) goto multi_select_end; 2842 rc = SQLITE_OK; 2843 } 2844 2845 /* Make sure all SELECTs in the statement have the same number of elements 2846 ** in their result sets. 2847 */ 2848 assert( p->pEList && pPrior->pEList ); 2849 assert( p->pEList->nExpr==pPrior->pEList->nExpr ); 2850 2851 #ifndef SQLITE_OMIT_CTE 2852 if( (p->selFlags & SF_Recursive)!=0 && hasAnchor(p) ){ 2853 generateWithRecursiveQuery(pParse, p, &dest); 2854 }else 2855 #endif 2856 2857 /* Compound SELECTs that have an ORDER BY clause are handled separately. 2858 */ 2859 if( p->pOrderBy ){ 2860 return multiSelectOrderBy(pParse, p, pDest); 2861 }else{ 2862 2863 #ifndef SQLITE_OMIT_EXPLAIN 2864 if( pPrior->pPrior==0 ){ 2865 ExplainQueryPlan((pParse, 1, "COMPOUND QUERY")); 2866 ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY")); 2867 } 2868 #endif 2869 2870 /* Generate code for the left and right SELECT statements. 2871 */ 2872 switch( p->op ){ 2873 case TK_ALL: { 2874 int addr = 0; 2875 int nLimit = 0; /* Initialize to suppress harmless compiler warning */ 2876 assert( !pPrior->pLimit ); 2877 pPrior->iLimit = p->iLimit; 2878 pPrior->iOffset = p->iOffset; 2879 pPrior->pLimit = p->pLimit; 2880 SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL left...\n")); 2881 rc = sqlite3Select(pParse, pPrior, &dest); 2882 pPrior->pLimit = 0; 2883 if( rc ){ 2884 goto multi_select_end; 2885 } 2886 p->pPrior = 0; 2887 p->iLimit = pPrior->iLimit; 2888 p->iOffset = pPrior->iOffset; 2889 if( p->iLimit ){ 2890 addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v); 2891 VdbeComment((v, "Jump ahead if LIMIT reached")); 2892 if( p->iOffset ){ 2893 sqlite3VdbeAddOp3(v, OP_OffsetLimit, 2894 p->iLimit, p->iOffset+1, p->iOffset); 2895 } 2896 } 2897 ExplainQueryPlan((pParse, 1, "UNION ALL")); 2898 SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL right...\n")); 2899 rc = sqlite3Select(pParse, p, &dest); 2900 testcase( rc!=SQLITE_OK ); 2901 pDelete = p->pPrior; 2902 p->pPrior = pPrior; 2903 p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); 2904 if( p->pLimit 2905 && sqlite3ExprIsInteger(p->pLimit->pLeft, &nLimit) 2906 && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit) 2907 ){ 2908 p->nSelectRow = sqlite3LogEst((u64)nLimit); 2909 } 2910 if( addr ){ 2911 sqlite3VdbeJumpHere(v, addr); 2912 } 2913 break; 2914 } 2915 case TK_EXCEPT: 2916 case TK_UNION: { 2917 int unionTab; /* Cursor number of the temp table holding result */ 2918 u8 op = 0; /* One of the SRT_ operations to apply to self */ 2919 int priorOp; /* The SRT_ operation to apply to prior selects */ 2920 Expr *pLimit; /* Saved values of p->nLimit */ 2921 int addr; 2922 SelectDest uniondest; 2923 2924 testcase( p->op==TK_EXCEPT ); 2925 testcase( p->op==TK_UNION ); 2926 priorOp = SRT_Union; 2927 if( dest.eDest==priorOp ){ 2928 /* We can reuse a temporary table generated by a SELECT to our 2929 ** right. 2930 */ 2931 assert( p->pLimit==0 ); /* Not allowed on leftward elements */ 2932 unionTab = dest.iSDParm; 2933 }else{ 2934 /* We will need to create our own temporary table to hold the 2935 ** intermediate results. 2936 */ 2937 unionTab = pParse->nTab++; 2938 assert( p->pOrderBy==0 ); 2939 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0); 2940 assert( p->addrOpenEphm[0] == -1 ); 2941 p->addrOpenEphm[0] = addr; 2942 findRightmost(p)->selFlags |= SF_UsesEphemeral; 2943 assert( p->pEList ); 2944 } 2945 2946 2947 /* Code the SELECT statements to our left 2948 */ 2949 assert( !pPrior->pOrderBy ); 2950 sqlite3SelectDestInit(&uniondest, priorOp, unionTab); 2951 SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION left...\n")); 2952 rc = sqlite3Select(pParse, pPrior, &uniondest); 2953 if( rc ){ 2954 goto multi_select_end; 2955 } 2956 2957 /* Code the current SELECT statement 2958 */ 2959 if( p->op==TK_EXCEPT ){ 2960 op = SRT_Except; 2961 }else{ 2962 assert( p->op==TK_UNION ); 2963 op = SRT_Union; 2964 } 2965 p->pPrior = 0; 2966 pLimit = p->pLimit; 2967 p->pLimit = 0; 2968 uniondest.eDest = op; 2969 ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", 2970 sqlite3SelectOpName(p->op))); 2971 SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION right...\n")); 2972 rc = sqlite3Select(pParse, p, &uniondest); 2973 testcase( rc!=SQLITE_OK ); 2974 assert( p->pOrderBy==0 ); 2975 pDelete = p->pPrior; 2976 p->pPrior = pPrior; 2977 p->pOrderBy = 0; 2978 if( p->op==TK_UNION ){ 2979 p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); 2980 } 2981 sqlite3ExprDelete(db, p->pLimit); 2982 p->pLimit = pLimit; 2983 p->iLimit = 0; 2984 p->iOffset = 0; 2985 2986 /* Convert the data in the temporary table into whatever form 2987 ** it is that we currently need. 2988 */ 2989 assert( unionTab==dest.iSDParm || dest.eDest!=priorOp ); 2990 assert( p->pEList || db->mallocFailed ); 2991 if( dest.eDest!=priorOp && db->mallocFailed==0 ){ 2992 int iCont, iBreak, iStart; 2993 iBreak = sqlite3VdbeMakeLabel(pParse); 2994 iCont = sqlite3VdbeMakeLabel(pParse); 2995 computeLimitRegisters(pParse, p, iBreak); 2996 sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v); 2997 iStart = sqlite3VdbeCurrentAddr(v); 2998 selectInnerLoop(pParse, p, unionTab, 2999 0, 0, &dest, iCont, iBreak); 3000 sqlite3VdbeResolveLabel(v, iCont); 3001 sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v); 3002 sqlite3VdbeResolveLabel(v, iBreak); 3003 sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0); 3004 } 3005 break; 3006 } 3007 default: assert( p->op==TK_INTERSECT ); { 3008 int tab1, tab2; 3009 int iCont, iBreak, iStart; 3010 Expr *pLimit; 3011 int addr; 3012 SelectDest intersectdest; 3013 int r1; 3014 3015 /* INTERSECT is different from the others since it requires 3016 ** two temporary tables. Hence it has its own case. Begin 3017 ** by allocating the tables we will need. 3018 */ 3019 tab1 = pParse->nTab++; 3020 tab2 = pParse->nTab++; 3021 assert( p->pOrderBy==0 ); 3022 3023 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0); 3024 assert( p->addrOpenEphm[0] == -1 ); 3025 p->addrOpenEphm[0] = addr; 3026 findRightmost(p)->selFlags |= SF_UsesEphemeral; 3027 assert( p->pEList ); 3028 3029 /* Code the SELECTs to our left into temporary table "tab1". 3030 */ 3031 sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1); 3032 SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT left...\n")); 3033 rc = sqlite3Select(pParse, pPrior, &intersectdest); 3034 if( rc ){ 3035 goto multi_select_end; 3036 } 3037 3038 /* Code the current SELECT into temporary table "tab2" 3039 */ 3040 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0); 3041 assert( p->addrOpenEphm[1] == -1 ); 3042 p->addrOpenEphm[1] = addr; 3043 p->pPrior = 0; 3044 pLimit = p->pLimit; 3045 p->pLimit = 0; 3046 intersectdest.iSDParm = tab2; 3047 ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", 3048 sqlite3SelectOpName(p->op))); 3049 SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT right...\n")); 3050 rc = sqlite3Select(pParse, p, &intersectdest); 3051 testcase( rc!=SQLITE_OK ); 3052 pDelete = p->pPrior; 3053 p->pPrior = pPrior; 3054 if( p->nSelectRow>pPrior->nSelectRow ){ 3055 p->nSelectRow = pPrior->nSelectRow; 3056 } 3057 sqlite3ExprDelete(db, p->pLimit); 3058 p->pLimit = pLimit; 3059 3060 /* Generate code to take the intersection of the two temporary 3061 ** tables. 3062 */ 3063 if( rc ) break; 3064 assert( p->pEList ); 3065 iBreak = sqlite3VdbeMakeLabel(pParse); 3066 iCont = sqlite3VdbeMakeLabel(pParse); 3067 computeLimitRegisters(pParse, p, iBreak); 3068 sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); VdbeCoverage(v); 3069 r1 = sqlite3GetTempReg(pParse); 3070 iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1); 3071 sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); 3072 VdbeCoverage(v); 3073 sqlite3ReleaseTempReg(pParse, r1); 3074 selectInnerLoop(pParse, p, tab1, 3075 0, 0, &dest, iCont, iBreak); 3076 sqlite3VdbeResolveLabel(v, iCont); 3077 sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v); 3078 sqlite3VdbeResolveLabel(v, iBreak); 3079 sqlite3VdbeAddOp2(v, OP_Close, tab2, 0); 3080 sqlite3VdbeAddOp2(v, OP_Close, tab1, 0); 3081 break; 3082 } 3083 } 3084 3085 #ifndef SQLITE_OMIT_EXPLAIN 3086 if( p->pNext==0 ){ 3087 ExplainQueryPlanPop(pParse); 3088 } 3089 #endif 3090 } 3091 if( pParse->nErr ) goto multi_select_end; 3092 3093 /* Compute collating sequences used by 3094 ** temporary tables needed to implement the compound select. 3095 ** Attach the KeyInfo structure to all temporary tables. 3096 ** 3097 ** This section is run by the right-most SELECT statement only. 3098 ** SELECT statements to the left always skip this part. The right-most 3099 ** SELECT might also skip this part if it has no ORDER BY clause and 3100 ** no temp tables are required. 3101 */ 3102 if( p->selFlags & SF_UsesEphemeral ){ 3103 int i; /* Loop counter */ 3104 KeyInfo *pKeyInfo; /* Collating sequence for the result set */ 3105 Select *pLoop; /* For looping through SELECT statements */ 3106 CollSeq **apColl; /* For looping through pKeyInfo->aColl[] */ 3107 int nCol; /* Number of columns in result set */ 3108 3109 assert( p->pNext==0 ); 3110 assert( p->pEList!=0 ); 3111 nCol = p->pEList->nExpr; 3112 pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1); 3113 if( !pKeyInfo ){ 3114 rc = SQLITE_NOMEM_BKPT; 3115 goto multi_select_end; 3116 } 3117 for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){ 3118 *apColl = multiSelectCollSeq(pParse, p, i); 3119 if( 0==*apColl ){ 3120 *apColl = db->pDfltColl; 3121 } 3122 } 3123 3124 for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ 3125 for(i=0; i<2; i++){ 3126 int addr = pLoop->addrOpenEphm[i]; 3127 if( addr<0 ){ 3128 /* If [0] is unused then [1] is also unused. So we can 3129 ** always safely abort as soon as the first unused slot is found */ 3130 assert( pLoop->addrOpenEphm[1]<0 ); 3131 break; 3132 } 3133 sqlite3VdbeChangeP2(v, addr, nCol); 3134 sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo), 3135 P4_KEYINFO); 3136 pLoop->addrOpenEphm[i] = -1; 3137 } 3138 } 3139 sqlite3KeyInfoUnref(pKeyInfo); 3140 } 3141 3142 multi_select_end: 3143 pDest->iSdst = dest.iSdst; 3144 pDest->nSdst = dest.nSdst; 3145 if( pDelete ){ 3146 sqlite3ParserAddCleanup(pParse, 3147 (void(*)(sqlite3*,void*))sqlite3SelectDelete, 3148 pDelete); 3149 } 3150 return rc; 3151 } 3152 #endif /* SQLITE_OMIT_COMPOUND_SELECT */ 3153 3154 /* 3155 ** Error message for when two or more terms of a compound select have different 3156 ** size result sets. 3157 */ 3158 void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p){ 3159 if( p->selFlags & SF_Values ){ 3160 sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); 3161 }else{ 3162 sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" 3163 " do not have the same number of result columns", 3164 sqlite3SelectOpName(p->op)); 3165 } 3166 } 3167 3168 /* 3169 ** Code an output subroutine for a coroutine implementation of a 3170 ** SELECT statment. 3171 ** 3172 ** The data to be output is contained in pIn->iSdst. There are 3173 ** pIn->nSdst columns to be output. pDest is where the output should 3174 ** be sent. 3175 ** 3176 ** regReturn is the number of the register holding the subroutine 3177 ** return address. 3178 ** 3179 ** If regPrev>0 then it is the first register in a vector that 3180 ** records the previous output. mem[regPrev] is a flag that is false 3181 ** if there has been no previous output. If regPrev>0 then code is 3182 ** generated to suppress duplicates. pKeyInfo is used for comparing 3183 ** keys. 3184 ** 3185 ** If the LIMIT found in p->iLimit is reached, jump immediately to 3186 ** iBreak. 3187 */ 3188 static int generateOutputSubroutine( 3189 Parse *pParse, /* Parsing context */ 3190 Select *p, /* The SELECT statement */ 3191 SelectDest *pIn, /* Coroutine supplying data */ 3192 SelectDest *pDest, /* Where to send the data */ 3193 int regReturn, /* The return address register */ 3194 int regPrev, /* Previous result register. No uniqueness if 0 */ 3195 KeyInfo *pKeyInfo, /* For comparing with previous entry */ 3196 int iBreak /* Jump here if we hit the LIMIT */ 3197 ){ 3198 Vdbe *v = pParse->pVdbe; 3199 int iContinue; 3200 int addr; 3201 3202 addr = sqlite3VdbeCurrentAddr(v); 3203 iContinue = sqlite3VdbeMakeLabel(pParse); 3204 3205 /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 3206 */ 3207 if( regPrev ){ 3208 int addr1, addr2; 3209 addr1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); VdbeCoverage(v); 3210 addr2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iSdst, regPrev+1, pIn->nSdst, 3211 (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); 3212 sqlite3VdbeAddOp3(v, OP_Jump, addr2+2, iContinue, addr2+2); VdbeCoverage(v); 3213 sqlite3VdbeJumpHere(v, addr1); 3214 sqlite3VdbeAddOp3(v, OP_Copy, pIn->iSdst, regPrev+1, pIn->nSdst-1); 3215 sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev); 3216 } 3217 if( pParse->db->mallocFailed ) return 0; 3218 3219 /* Suppress the first OFFSET entries if there is an OFFSET clause 3220 */ 3221 codeOffset(v, p->iOffset, iContinue); 3222 3223 assert( pDest->eDest!=SRT_Exists ); 3224 assert( pDest->eDest!=SRT_Table ); 3225 switch( pDest->eDest ){ 3226 /* Store the result as data using a unique key. 3227 */ 3228 case SRT_EphemTab: { 3229 int r1 = sqlite3GetTempReg(pParse); 3230 int r2 = sqlite3GetTempReg(pParse); 3231 sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1); 3232 sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iSDParm, r2); 3233 sqlite3VdbeAddOp3(v, OP_Insert, pDest->iSDParm, r1, r2); 3234 sqlite3VdbeChangeP5(v, OPFLAG_APPEND); 3235 sqlite3ReleaseTempReg(pParse, r2); 3236 sqlite3ReleaseTempReg(pParse, r1); 3237 break; 3238 } 3239 3240 #ifndef SQLITE_OMIT_SUBQUERY 3241 /* If we are creating a set for an "expr IN (SELECT ...)". 3242 */ 3243 case SRT_Set: { 3244 int r1; 3245 testcase( pIn->nSdst>1 ); 3246 r1 = sqlite3GetTempReg(pParse); 3247 sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, 3248 r1, pDest->zAffSdst, pIn->nSdst); 3249 sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pDest->iSDParm, r1, 3250 pIn->iSdst, pIn->nSdst); 3251 sqlite3ReleaseTempReg(pParse, r1); 3252 break; 3253 } 3254 3255 /* If this is a scalar select that is part of an expression, then 3256 ** store the results in the appropriate memory cell and break out 3257 ** of the scan loop. Note that the select might return multiple columns 3258 ** if it is the RHS of a row-value IN operator. 3259 */ 3260 case SRT_Mem: { 3261 testcase( pIn->nSdst>1 ); 3262 sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSDParm, pIn->nSdst); 3263 /* The LIMIT clause will jump out of the loop for us */ 3264 break; 3265 } 3266 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */ 3267 3268 /* The results are stored in a sequence of registers 3269 ** starting at pDest->iSdst. Then the co-routine yields. 3270 */ 3271 case SRT_Coroutine: { 3272 if( pDest->iSdst==0 ){ 3273 pDest->iSdst = sqlite3GetTempRange(pParse, pIn->nSdst); 3274 pDest->nSdst = pIn->nSdst; 3275 } 3276 sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSdst, pIn->nSdst); 3277 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); 3278 break; 3279 } 3280 3281 /* If none of the above, then the result destination must be 3282 ** SRT_Output. This routine is never called with any other 3283 ** destination other than the ones handled above or SRT_Output. 3284 ** 3285 ** For SRT_Output, results are stored in a sequence of registers. 3286 ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to 3287 ** return the next row of result. 3288 */ 3289 default: { 3290 assert( pDest->eDest==SRT_Output ); 3291 sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iSdst, pIn->nSdst); 3292 break; 3293 } 3294 } 3295 3296 /* Jump to the end of the loop if the LIMIT is reached. 3297 */ 3298 if( p->iLimit ){ 3299 sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v); 3300 } 3301 3302 /* Generate the subroutine return 3303 */ 3304 sqlite3VdbeResolveLabel(v, iContinue); 3305 sqlite3VdbeAddOp1(v, OP_Return, regReturn); 3306 3307 return addr; 3308 } 3309 3310 /* 3311 ** Alternative compound select code generator for cases when there 3312 ** is an ORDER BY clause. 3313 ** 3314 ** We assume a query of the following form: 3315 ** 3316 ** <selectA> <operator> <selectB> ORDER BY <orderbylist> 3317 ** 3318 ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT. The idea 3319 ** is to code both <selectA> and <selectB> with the ORDER BY clause as 3320 ** co-routines. Then run the co-routines in parallel and merge the results 3321 ** into the output. In addition to the two coroutines (called selectA and 3322 ** selectB) there are 7 subroutines: 3323 ** 3324 ** outA: Move the output of the selectA coroutine into the output 3325 ** of the compound query. 3326 ** 3327 ** outB: Move the output of the selectB coroutine into the output 3328 ** of the compound query. (Only generated for UNION and 3329 ** UNION ALL. EXCEPT and INSERTSECT never output a row that 3330 ** appears only in B.) 3331 ** 3332 ** AltB: Called when there is data from both coroutines and A<B. 3333 ** 3334 ** AeqB: Called when there is data from both coroutines and A==B. 3335 ** 3336 ** AgtB: Called when there is data from both coroutines and A>B. 3337 ** 3338 ** EofA: Called when data is exhausted from selectA. 3339 ** 3340 ** EofB: Called when data is exhausted from selectB. 3341 ** 3342 ** The implementation of the latter five subroutines depend on which 3343 ** <operator> is used: 3344 ** 3345 ** 3346 ** UNION ALL UNION EXCEPT INTERSECT 3347 ** ------------- ----------------- -------------- ----------------- 3348 ** AltB: outA, nextA outA, nextA outA, nextA nextA 3349 ** 3350 ** AeqB: outA, nextA nextA nextA outA, nextA 3351 ** 3352 ** AgtB: outB, nextB outB, nextB nextB nextB 3353 ** 3354 ** EofA: outB, nextB outB, nextB halt halt 3355 ** 3356 ** EofB: outA, nextA outA, nextA outA, nextA halt 3357 ** 3358 ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA 3359 ** causes an immediate jump to EofA and an EOF on B following nextB causes 3360 ** an immediate jump to EofB. Within EofA and EofB, and EOF on entry or 3361 ** following nextX causes a jump to the end of the select processing. 3362 ** 3363 ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled 3364 ** within the output subroutine. The regPrev register set holds the previously 3365 ** output value. A comparison is made against this value and the output 3366 ** is skipped if the next results would be the same as the previous. 3367 ** 3368 ** The implementation plan is to implement the two coroutines and seven 3369 ** subroutines first, then put the control logic at the bottom. Like this: 3370 ** 3371 ** goto Init 3372 ** coA: coroutine for left query (A) 3373 ** coB: coroutine for right query (B) 3374 ** outA: output one row of A 3375 ** outB: output one row of B (UNION and UNION ALL only) 3376 ** EofA: ... 3377 ** EofB: ... 3378 ** AltB: ... 3379 ** AeqB: ... 3380 ** AgtB: ... 3381 ** Init: initialize coroutine registers 3382 ** yield coA 3383 ** if eof(A) goto EofA 3384 ** yield coB 3385 ** if eof(B) goto EofB 3386 ** Cmpr: Compare A, B 3387 ** Jump AltB, AeqB, AgtB 3388 ** End: ... 3389 ** 3390 ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not 3391 ** actually called using Gosub and they do not Return. EofA and EofB loop 3392 ** until all data is exhausted then jump to the "end" labe. AltB, AeqB, 3393 ** and AgtB jump to either L2 or to one of EofA or EofB. 3394 */ 3395 #ifndef SQLITE_OMIT_COMPOUND_SELECT 3396 static int multiSelectOrderBy( 3397 Parse *pParse, /* Parsing context */ 3398 Select *p, /* The right-most of SELECTs to be coded */ 3399 SelectDest *pDest /* What to do with query results */ 3400 ){ 3401 int i, j; /* Loop counters */ 3402 Select *pPrior; /* Another SELECT immediately to our left */ 3403 Select *pSplit; /* Left-most SELECT in the right-hand group */ 3404 int nSelect; /* Number of SELECT statements in the compound */ 3405 Vdbe *v; /* Generate code to this VDBE */ 3406 SelectDest destA; /* Destination for coroutine A */ 3407 SelectDest destB; /* Destination for coroutine B */ 3408 int regAddrA; /* Address register for select-A coroutine */ 3409 int regAddrB; /* Address register for select-B coroutine */ 3410 int addrSelectA; /* Address of the select-A coroutine */ 3411 int addrSelectB; /* Address of the select-B coroutine */ 3412 int regOutA; /* Address register for the output-A subroutine */ 3413 int regOutB; /* Address register for the output-B subroutine */ 3414 int addrOutA; /* Address of the output-A subroutine */ 3415 int addrOutB = 0; /* Address of the output-B subroutine */ 3416 int addrEofA; /* Address of the select-A-exhausted subroutine */ 3417 int addrEofA_noB; /* Alternate addrEofA if B is uninitialized */ 3418 int addrEofB; /* Address of the select-B-exhausted subroutine */ 3419 int addrAltB; /* Address of the A<B subroutine */ 3420 int addrAeqB; /* Address of the A==B subroutine */ 3421 int addrAgtB; /* Address of the A>B subroutine */ 3422 int regLimitA; /* Limit register for select-A */ 3423 int regLimitB; /* Limit register for select-A */ 3424 int regPrev; /* A range of registers to hold previous output */ 3425 int savedLimit; /* Saved value of p->iLimit */ 3426 int savedOffset; /* Saved value of p->iOffset */ 3427 int labelCmpr; /* Label for the start of the merge algorithm */ 3428 int labelEnd; /* Label for the end of the overall SELECT stmt */ 3429 int addr1; /* Jump instructions that get retargetted */ 3430 int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */ 3431 KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */ 3432 KeyInfo *pKeyMerge; /* Comparison information for merging rows */ 3433 sqlite3 *db; /* Database connection */ 3434 ExprList *pOrderBy; /* The ORDER BY clause */ 3435 int nOrderBy; /* Number of terms in the ORDER BY clause */ 3436 u32 *aPermute; /* Mapping from ORDER BY terms to result set columns */ 3437 3438 assert( p->pOrderBy!=0 ); 3439 assert( pKeyDup==0 ); /* "Managed" code needs this. Ticket #3382. */ 3440 db = pParse->db; 3441 v = pParse->pVdbe; 3442 assert( v!=0 ); /* Already thrown the error if VDBE alloc failed */ 3443 labelEnd = sqlite3VdbeMakeLabel(pParse); 3444 labelCmpr = sqlite3VdbeMakeLabel(pParse); 3445 3446 3447 /* Patch up the ORDER BY clause 3448 */ 3449 op = p->op; 3450 assert( p->pPrior->pOrderBy==0 ); 3451 pOrderBy = p->pOrderBy; 3452 assert( pOrderBy ); 3453 nOrderBy = pOrderBy->nExpr; 3454 3455 /* For operators other than UNION ALL we have to make sure that 3456 ** the ORDER BY clause covers every term of the result set. Add 3457 ** terms to the ORDER BY clause as necessary. 3458 */ 3459 if( op!=TK_ALL ){ 3460 for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){ 3461 struct ExprList_item *pItem; 3462 for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){ 3463 assert( pItem!=0 ); 3464 assert( pItem->u.x.iOrderByCol>0 ); 3465 if( pItem->u.x.iOrderByCol==i ) break; 3466 } 3467 if( j==nOrderBy ){ 3468 Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); 3469 if( pNew==0 ) return SQLITE_NOMEM_BKPT; 3470 pNew->flags |= EP_IntValue; 3471 pNew->u.iValue = i; 3472 p->pOrderBy = pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); 3473 if( pOrderBy ) pOrderBy->a[nOrderBy++].u.x.iOrderByCol = (u16)i; 3474 } 3475 } 3476 } 3477 3478 /* Compute the comparison permutation and keyinfo that is used with 3479 ** the permutation used to determine if the next 3480 ** row of results comes from selectA or selectB. Also add explicit 3481 ** collations to the ORDER BY clause terms so that when the subqueries 3482 ** to the right and the left are evaluated, they use the correct 3483 ** collation. 3484 */ 3485 aPermute = sqlite3DbMallocRawNN(db, sizeof(u32)*(nOrderBy + 1)); 3486 if( aPermute ){ 3487 struct ExprList_item *pItem; 3488 aPermute[0] = nOrderBy; 3489 for(i=1, pItem=pOrderBy->a; i<=nOrderBy; i++, pItem++){ 3490 assert( pItem!=0 ); 3491 assert( pItem->u.x.iOrderByCol>0 ); 3492 assert( pItem->u.x.iOrderByCol<=p->pEList->nExpr ); 3493 aPermute[i] = pItem->u.x.iOrderByCol - 1; 3494 } 3495 pKeyMerge = multiSelectOrderByKeyInfo(pParse, p, 1); 3496 }else{ 3497 pKeyMerge = 0; 3498 } 3499 3500 /* Allocate a range of temporary registers and the KeyInfo needed 3501 ** for the logic that removes duplicate result rows when the 3502 ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL). 3503 */ 3504 if( op==TK_ALL ){ 3505 regPrev = 0; 3506 }else{ 3507 int nExpr = p->pEList->nExpr; 3508 assert( nOrderBy>=nExpr || db->mallocFailed ); 3509 regPrev = pParse->nMem+1; 3510 pParse->nMem += nExpr+1; 3511 sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev); 3512 pKeyDup = sqlite3KeyInfoAlloc(db, nExpr, 1); 3513 if( pKeyDup ){ 3514 assert( sqlite3KeyInfoIsWriteable(pKeyDup) ); 3515 for(i=0; i<nExpr; i++){ 3516 pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i); 3517 pKeyDup->aSortFlags[i] = 0; 3518 } 3519 } 3520 } 3521 3522 /* Separate the left and the right query from one another 3523 */ 3524 nSelect = 1; 3525 if( (op==TK_ALL || op==TK_UNION) 3526 && OptimizationEnabled(db, SQLITE_BalancedMerge) 3527 ){ 3528 for(pSplit=p; pSplit->pPrior!=0 && pSplit->op==op; pSplit=pSplit->pPrior){ 3529 nSelect++; 3530 assert( pSplit->pPrior->pNext==pSplit ); 3531 } 3532 } 3533 if( nSelect<=3 ){ 3534 pSplit = p; 3535 }else{ 3536 pSplit = p; 3537 for(i=2; i<nSelect; i+=2){ pSplit = pSplit->pPrior; } 3538 } 3539 pPrior = pSplit->pPrior; 3540 assert( pPrior!=0 ); 3541 pSplit->pPrior = 0; 3542 pPrior->pNext = 0; 3543 assert( p->pOrderBy == pOrderBy ); 3544 assert( pOrderBy!=0 || db->mallocFailed ); 3545 pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0); 3546 sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER"); 3547 sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER"); 3548 3549 /* Compute the limit registers */ 3550 computeLimitRegisters(pParse, p, labelEnd); 3551 if( p->iLimit && op==TK_ALL ){ 3552 regLimitA = ++pParse->nMem; 3553 regLimitB = ++pParse->nMem; 3554 sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit, 3555 regLimitA); 3556 sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB); 3557 }else{ 3558 regLimitA = regLimitB = 0; 3559 } 3560 sqlite3ExprDelete(db, p->pLimit); 3561 p->pLimit = 0; 3562 3563 regAddrA = ++pParse->nMem; 3564 regAddrB = ++pParse->nMem; 3565 regOutA = ++pParse->nMem; 3566 regOutB = ++pParse->nMem; 3567 sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA); 3568 sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB); 3569 3570 ExplainQueryPlan((pParse, 1, "MERGE (%s)", sqlite3SelectOpName(p->op))); 3571 3572 /* Generate a coroutine to evaluate the SELECT statement to the 3573 ** left of the compound operator - the "A" select. 3574 */ 3575 addrSelectA = sqlite3VdbeCurrentAddr(v) + 1; 3576 addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrA, 0, addrSelectA); 3577 VdbeComment((v, "left SELECT")); 3578 pPrior->iLimit = regLimitA; 3579 ExplainQueryPlan((pParse, 1, "LEFT")); 3580 sqlite3Select(pParse, pPrior, &destA); 3581 sqlite3VdbeEndCoroutine(v, regAddrA); 3582 sqlite3VdbeJumpHere(v, addr1); 3583 3584 /* Generate a coroutine to evaluate the SELECT statement on 3585 ** the right - the "B" select 3586 */ 3587 addrSelectB = sqlite3VdbeCurrentAddr(v) + 1; 3588 addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrB, 0, addrSelectB); 3589 VdbeComment((v, "right SELECT")); 3590 savedLimit = p->iLimit; 3591 savedOffset = p->iOffset; 3592 p->iLimit = regLimitB; 3593 p->iOffset = 0; 3594 ExplainQueryPlan((pParse, 1, "RIGHT")); 3595 sqlite3Select(pParse, p, &destB); 3596 p->iLimit = savedLimit; 3597 p->iOffset = savedOffset; 3598 sqlite3VdbeEndCoroutine(v, regAddrB); 3599 3600 /* Generate a subroutine that outputs the current row of the A 3601 ** select as the next output row of the compound select. 3602 */ 3603 VdbeNoopComment((v, "Output routine for A")); 3604 addrOutA = generateOutputSubroutine(pParse, 3605 p, &destA, pDest, regOutA, 3606 regPrev, pKeyDup, labelEnd); 3607 3608 /* Generate a subroutine that outputs the current row of the B 3609 ** select as the next output row of the compound select. 3610 */ 3611 if( op==TK_ALL || op==TK_UNION ){ 3612 VdbeNoopComment((v, "Output routine for B")); 3613 addrOutB = generateOutputSubroutine(pParse, 3614 p, &destB, pDest, regOutB, 3615 regPrev, pKeyDup, labelEnd); 3616 } 3617 sqlite3KeyInfoUnref(pKeyDup); 3618 3619 /* Generate a subroutine to run when the results from select A 3620 ** are exhausted and only data in select B remains. 3621 */ 3622 if( op==TK_EXCEPT || op==TK_INTERSECT ){ 3623 addrEofA_noB = addrEofA = labelEnd; 3624 }else{ 3625 VdbeNoopComment((v, "eof-A subroutine")); 3626 addrEofA = sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); 3627 addrEofA_noB = sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, labelEnd); 3628 VdbeCoverage(v); 3629 sqlite3VdbeGoto(v, addrEofA); 3630 p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); 3631 } 3632 3633 /* Generate a subroutine to run when the results from select B 3634 ** are exhausted and only data in select A remains. 3635 */ 3636 if( op==TK_INTERSECT ){ 3637 addrEofB = addrEofA; 3638 if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow; 3639 }else{ 3640 VdbeNoopComment((v, "eof-B subroutine")); 3641 addrEofB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA); 3642 sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, labelEnd); VdbeCoverage(v); 3643 sqlite3VdbeGoto(v, addrEofB); 3644 } 3645 3646 /* Generate code to handle the case of A<B 3647 */ 3648 VdbeNoopComment((v, "A-lt-B subroutine")); 3649 addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA); 3650 sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA); VdbeCoverage(v); 3651 sqlite3VdbeGoto(v, labelCmpr); 3652 3653 /* Generate code to handle the case of A==B 3654 */ 3655 if( op==TK_ALL ){ 3656 addrAeqB = addrAltB; 3657 }else if( op==TK_INTERSECT ){ 3658 addrAeqB = addrAltB; 3659 addrAltB++; 3660 }else{ 3661 VdbeNoopComment((v, "A-eq-B subroutine")); 3662 addrAeqB = 3663 sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA); VdbeCoverage(v); 3664 sqlite3VdbeGoto(v, labelCmpr); 3665 } 3666 3667 /* Generate code to handle the case of A>B 3668 */ 3669 VdbeNoopComment((v, "A-gt-B subroutine")); 3670 addrAgtB = sqlite3VdbeCurrentAddr(v); 3671 if( op==TK_ALL || op==TK_UNION ){ 3672 sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); 3673 } 3674 sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v); 3675 sqlite3VdbeGoto(v, labelCmpr); 3676 3677 /* This code runs once to initialize everything. 3678 */ 3679 sqlite3VdbeJumpHere(v, addr1); 3680 sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA_noB); VdbeCoverage(v); 3681 sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v); 3682 3683 /* Implement the main merge loop 3684 */ 3685 sqlite3VdbeResolveLabel(v, labelCmpr); 3686 sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY); 3687 sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy, 3688 (char*)pKeyMerge, P4_KEYINFO); 3689 sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE); 3690 sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); VdbeCoverage(v); 3691 3692 /* Jump to the this point in order to terminate the query. 3693 */ 3694 sqlite3VdbeResolveLabel(v, labelEnd); 3695 3696 /* Reassemble the compound query so that it will be freed correctly 3697 ** by the calling function */ 3698 if( pSplit->pPrior ){ 3699 sqlite3ParserAddCleanup(pParse, 3700 (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior); 3701 } 3702 pSplit->pPrior = pPrior; 3703 pPrior->pNext = pSplit; 3704 sqlite3ExprListDelete(db, pPrior->pOrderBy); 3705 pPrior->pOrderBy = 0; 3706 3707 /*** TBD: Insert subroutine calls to close cursors on incomplete 3708 **** subqueries ****/ 3709 ExplainQueryPlanPop(pParse); 3710 return pParse->nErr!=0; 3711 } 3712 #endif 3713 3714 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 3715 3716 /* An instance of the SubstContext object describes an substitution edit 3717 ** to be performed on a parse tree. 3718 ** 3719 ** All references to columns in table iTable are to be replaced by corresponding 3720 ** expressions in pEList. 3721 ** 3722 ** ## About "isOuterJoin": 3723 ** 3724 ** The isOuterJoin column indicates that the replacement will occur into a 3725 ** position in the parent that NULL-able due to an OUTER JOIN. Either the 3726 ** target slot in the parent is the right operand of a LEFT JOIN, or one of 3727 ** the left operands of a RIGHT JOIN. In either case, we need to potentially 3728 ** bypass the substituted expression with OP_IfNullRow. 3729 ** 3730 ** Suppose the original expression is an integer constant. Even though the table 3731 ** has the nullRow flag set, because the expression is an integer constant, 3732 ** it will not be NULLed out. So instead, we insert an OP_IfNullRow opcode 3733 ** that checks to see if the nullRow flag is set on the table. If the nullRow 3734 ** flag is set, then the value in the register is set to NULL and the original 3735 ** expression is bypassed. If the nullRow flag is not set, then the original 3736 ** expression runs to populate the register. 3737 ** 3738 ** Example where this is needed: 3739 ** 3740 ** CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); 3741 ** CREATE TABLE t2(x INT UNIQUE); 3742 ** 3743 ** SELECT a,b,m,x FROM t1 LEFT JOIN (SELECT 59 AS m,x FROM t2) ON b=x; 3744 ** 3745 ** When the subquery on the right side of the LEFT JOIN is flattened, we 3746 ** have to add OP_IfNullRow in front of the OP_Integer that implements the 3747 ** "m" value of the subquery so that a NULL will be loaded instead of 59 3748 ** when processing a non-matched row of the left. 3749 */ 3750 typedef struct SubstContext { 3751 Parse *pParse; /* The parsing context */ 3752 int iTable; /* Replace references to this table */ 3753 int iNewTable; /* New table number */ 3754 int isOuterJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */ 3755 ExprList *pEList; /* Replacement expressions */ 3756 ExprList *pCList; /* Collation sequences for replacement expr */ 3757 } SubstContext; 3758 3759 /* Forward Declarations */ 3760 static void substExprList(SubstContext*, ExprList*); 3761 static void substSelect(SubstContext*, Select*, int); 3762 3763 /* 3764 ** Scan through the expression pExpr. Replace every reference to 3765 ** a column in table number iTable with a copy of the iColumn-th 3766 ** entry in pEList. (But leave references to the ROWID column 3767 ** unchanged.) 3768 ** 3769 ** This routine is part of the flattening procedure. A subquery 3770 ** whose result set is defined by pEList appears as entry in the 3771 ** FROM clause of a SELECT such that the VDBE cursor assigned to that 3772 ** FORM clause entry is iTable. This routine makes the necessary 3773 ** changes to pExpr so that it refers directly to the source table 3774 ** of the subquery rather the result set of the subquery. 3775 */ 3776 static Expr *substExpr( 3777 SubstContext *pSubst, /* Description of the substitution */ 3778 Expr *pExpr /* Expr in which substitution occurs */ 3779 ){ 3780 if( pExpr==0 ) return 0; 3781 if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) 3782 && pExpr->w.iJoin==pSubst->iTable 3783 ){ 3784 testcase( ExprHasProperty(pExpr, EP_InnerON) ); 3785 pExpr->w.iJoin = pSubst->iNewTable; 3786 } 3787 if( pExpr->op==TK_COLUMN 3788 && pExpr->iTable==pSubst->iTable 3789 && !ExprHasProperty(pExpr, EP_FixedCol) 3790 ){ 3791 #ifdef SQLITE_ALLOW_ROWID_IN_VIEW 3792 if( pExpr->iColumn<0 ){ 3793 pExpr->op = TK_NULL; 3794 }else 3795 #endif 3796 { 3797 Expr *pNew; 3798 int iColumn = pExpr->iColumn; 3799 Expr *pCopy = pSubst->pEList->a[iColumn].pExpr; 3800 Expr ifNullRow; 3801 assert( pSubst->pEList!=0 && iColumn<pSubst->pEList->nExpr ); 3802 assert( pExpr->pRight==0 ); 3803 if( sqlite3ExprIsVector(pCopy) ){ 3804 sqlite3VectorErrorMsg(pSubst->pParse, pCopy); 3805 }else{ 3806 sqlite3 *db = pSubst->pParse->db; 3807 if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){ 3808 memset(&ifNullRow, 0, sizeof(ifNullRow)); 3809 ifNullRow.op = TK_IF_NULL_ROW; 3810 ifNullRow.pLeft = pCopy; 3811 ifNullRow.iTable = pSubst->iNewTable; 3812 ifNullRow.iColumn = -99; 3813 ifNullRow.flags = EP_IfNullRow; 3814 pCopy = &ifNullRow; 3815 } 3816 testcase( ExprHasProperty(pCopy, EP_Subquery) ); 3817 pNew = sqlite3ExprDup(db, pCopy, 0); 3818 if( db->mallocFailed ){ 3819 sqlite3ExprDelete(db, pNew); 3820 return pExpr; 3821 } 3822 if( pSubst->isOuterJoin ){ 3823 ExprSetProperty(pNew, EP_CanBeNull); 3824 } 3825 if( ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) ){ 3826 sqlite3SetJoinExpr(pNew, pExpr->w.iJoin, 3827 pExpr->flags & (EP_OuterON|EP_InnerON)); 3828 } 3829 sqlite3ExprDelete(db, pExpr); 3830 pExpr = pNew; 3831 if( pExpr->op==TK_TRUEFALSE ){ 3832 pExpr->u.iValue = sqlite3ExprTruthValue(pExpr); 3833 pExpr->op = TK_INTEGER; 3834 ExprSetProperty(pExpr, EP_IntValue); 3835 } 3836 3837 /* Ensure that the expression now has an implicit collation sequence, 3838 ** just as it did when it was a column of a view or sub-query. */ 3839 { 3840 CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pExpr); 3841 CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse, 3842 pSubst->pCList->a[iColumn].pExpr 3843 ); 3844 if( pNat!=pColl || (pExpr->op!=TK_COLUMN && pExpr->op!=TK_COLLATE) ){ 3845 pExpr = sqlite3ExprAddCollateString(pSubst->pParse, pExpr, 3846 (pColl ? pColl->zName : "BINARY") 3847 ); 3848 } 3849 } 3850 ExprClearProperty(pExpr, EP_Collate); 3851 } 3852 } 3853 }else{ 3854 if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){ 3855 pExpr->iTable = pSubst->iNewTable; 3856 } 3857 pExpr->pLeft = substExpr(pSubst, pExpr->pLeft); 3858 pExpr->pRight = substExpr(pSubst, pExpr->pRight); 3859 if( ExprUseXSelect(pExpr) ){ 3860 substSelect(pSubst, pExpr->x.pSelect, 1); 3861 }else{ 3862 substExprList(pSubst, pExpr->x.pList); 3863 } 3864 #ifndef SQLITE_OMIT_WINDOWFUNC 3865 if( ExprHasProperty(pExpr, EP_WinFunc) ){ 3866 Window *pWin = pExpr->y.pWin; 3867 pWin->pFilter = substExpr(pSubst, pWin->pFilter); 3868 substExprList(pSubst, pWin->pPartition); 3869 substExprList(pSubst, pWin->pOrderBy); 3870 } 3871 #endif 3872 } 3873 return pExpr; 3874 } 3875 static void substExprList( 3876 SubstContext *pSubst, /* Description of the substitution */ 3877 ExprList *pList /* List to scan and in which to make substitutes */ 3878 ){ 3879 int i; 3880 if( pList==0 ) return; 3881 for(i=0; i<pList->nExpr; i++){ 3882 pList->a[i].pExpr = substExpr(pSubst, pList->a[i].pExpr); 3883 } 3884 } 3885 static void substSelect( 3886 SubstContext *pSubst, /* Description of the substitution */ 3887 Select *p, /* SELECT statement in which to make substitutions */ 3888 int doPrior /* Do substitutes on p->pPrior too */ 3889 ){ 3890 SrcList *pSrc; 3891 SrcItem *pItem; 3892 int i; 3893 if( !p ) return; 3894 do{ 3895 substExprList(pSubst, p->pEList); 3896 substExprList(pSubst, p->pGroupBy); 3897 substExprList(pSubst, p->pOrderBy); 3898 p->pHaving = substExpr(pSubst, p->pHaving); 3899 p->pWhere = substExpr(pSubst, p->pWhere); 3900 pSrc = p->pSrc; 3901 assert( pSrc!=0 ); 3902 for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ 3903 substSelect(pSubst, pItem->pSelect, 1); 3904 if( pItem->fg.isTabFunc ){ 3905 substExprList(pSubst, pItem->u1.pFuncArg); 3906 } 3907 } 3908 }while( doPrior && (p = p->pPrior)!=0 ); 3909 } 3910 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 3911 3912 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 3913 /* 3914 ** pSelect is a SELECT statement and pSrcItem is one item in the FROM 3915 ** clause of that SELECT. 3916 ** 3917 ** This routine scans the entire SELECT statement and recomputes the 3918 ** pSrcItem->colUsed mask. 3919 */ 3920 static int recomputeColumnsUsedExpr(Walker *pWalker, Expr *pExpr){ 3921 SrcItem *pItem; 3922 if( pExpr->op!=TK_COLUMN ) return WRC_Continue; 3923 pItem = pWalker->u.pSrcItem; 3924 if( pItem->iCursor!=pExpr->iTable ) return WRC_Continue; 3925 if( pExpr->iColumn<0 ) return WRC_Continue; 3926 pItem->colUsed |= sqlite3ExprColUsed(pExpr); 3927 return WRC_Continue; 3928 } 3929 static void recomputeColumnsUsed( 3930 Select *pSelect, /* The complete SELECT statement */ 3931 SrcItem *pSrcItem /* Which FROM clause item to recompute */ 3932 ){ 3933 Walker w; 3934 if( NEVER(pSrcItem->pTab==0) ) return; 3935 memset(&w, 0, sizeof(w)); 3936 w.xExprCallback = recomputeColumnsUsedExpr; 3937 w.xSelectCallback = sqlite3SelectWalkNoop; 3938 w.u.pSrcItem = pSrcItem; 3939 pSrcItem->colUsed = 0; 3940 sqlite3WalkSelect(&w, pSelect); 3941 } 3942 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 3943 3944 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 3945 /* 3946 ** Assign new cursor numbers to each of the items in pSrc. For each 3947 ** new cursor number assigned, set an entry in the aCsrMap[] array 3948 ** to map the old cursor number to the new: 3949 ** 3950 ** aCsrMap[iOld+1] = iNew; 3951 ** 3952 ** The array is guaranteed by the caller to be large enough for all 3953 ** existing cursor numbers in pSrc. aCsrMap[0] is the array size. 3954 ** 3955 ** If pSrc contains any sub-selects, call this routine recursively 3956 ** on the FROM clause of each such sub-select, with iExcept set to -1. 3957 */ 3958 static void srclistRenumberCursors( 3959 Parse *pParse, /* Parse context */ 3960 int *aCsrMap, /* Array to store cursor mappings in */ 3961 SrcList *pSrc, /* FROM clause to renumber */ 3962 int iExcept /* FROM clause item to skip */ 3963 ){ 3964 int i; 3965 SrcItem *pItem; 3966 for(i=0, pItem=pSrc->a; i<pSrc->nSrc; i++, pItem++){ 3967 if( i!=iExcept ){ 3968 Select *p; 3969 assert( pItem->iCursor < aCsrMap[0] ); 3970 if( !pItem->fg.isRecursive || aCsrMap[pItem->iCursor+1]==0 ){ 3971 aCsrMap[pItem->iCursor+1] = pParse->nTab++; 3972 } 3973 pItem->iCursor = aCsrMap[pItem->iCursor+1]; 3974 for(p=pItem->pSelect; p; p=p->pPrior){ 3975 srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1); 3976 } 3977 } 3978 } 3979 } 3980 3981 /* 3982 ** *piCursor is a cursor number. Change it if it needs to be mapped. 3983 */ 3984 static void renumberCursorDoMapping(Walker *pWalker, int *piCursor){ 3985 int *aCsrMap = pWalker->u.aiCol; 3986 int iCsr = *piCursor; 3987 if( iCsr < aCsrMap[0] && aCsrMap[iCsr+1]>0 ){ 3988 *piCursor = aCsrMap[iCsr+1]; 3989 } 3990 } 3991 3992 /* 3993 ** Expression walker callback used by renumberCursors() to update 3994 ** Expr objects to match newly assigned cursor numbers. 3995 */ 3996 static int renumberCursorsCb(Walker *pWalker, Expr *pExpr){ 3997 int op = pExpr->op; 3998 if( op==TK_COLUMN || op==TK_IF_NULL_ROW ){ 3999 renumberCursorDoMapping(pWalker, &pExpr->iTable); 4000 } 4001 if( ExprHasProperty(pExpr, EP_OuterON) ){ 4002 renumberCursorDoMapping(pWalker, &pExpr->w.iJoin); 4003 } 4004 return WRC_Continue; 4005 } 4006 4007 /* 4008 ** Assign a new cursor number to each cursor in the FROM clause (Select.pSrc) 4009 ** of the SELECT statement passed as the second argument, and to each 4010 ** cursor in the FROM clause of any FROM clause sub-selects, recursively. 4011 ** Except, do not assign a new cursor number to the iExcept'th element in 4012 ** the FROM clause of (*p). Update all expressions and other references 4013 ** to refer to the new cursor numbers. 4014 ** 4015 ** Argument aCsrMap is an array that may be used for temporary working 4016 ** space. Two guarantees are made by the caller: 4017 ** 4018 ** * the array is larger than the largest cursor number used within the 4019 ** select statement passed as an argument, and 4020 ** 4021 ** * the array entries for all cursor numbers that do *not* appear in 4022 ** FROM clauses of the select statement as described above are 4023 ** initialized to zero. 4024 */ 4025 static void renumberCursors( 4026 Parse *pParse, /* Parse context */ 4027 Select *p, /* Select to renumber cursors within */ 4028 int iExcept, /* FROM clause item to skip */ 4029 int *aCsrMap /* Working space */ 4030 ){ 4031 Walker w; 4032 srclistRenumberCursors(pParse, aCsrMap, p->pSrc, iExcept); 4033 memset(&w, 0, sizeof(w)); 4034 w.u.aiCol = aCsrMap; 4035 w.xExprCallback = renumberCursorsCb; 4036 w.xSelectCallback = sqlite3SelectWalkNoop; 4037 sqlite3WalkSelect(&w, p); 4038 } 4039 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 4040 4041 /* 4042 ** If pSel is not part of a compound SELECT, return a pointer to its 4043 ** expression list. Otherwise, return a pointer to the expression list 4044 ** of the leftmost SELECT in the compound. 4045 */ 4046 static ExprList *findLeftmostExprlist(Select *pSel){ 4047 while( pSel->pPrior ){ 4048 pSel = pSel->pPrior; 4049 } 4050 return pSel->pEList; 4051 } 4052 4053 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 4054 /* 4055 ** This routine attempts to flatten subqueries as a performance optimization. 4056 ** This routine returns 1 if it makes changes and 0 if no flattening occurs. 4057 ** 4058 ** To understand the concept of flattening, consider the following 4059 ** query: 4060 ** 4061 ** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 4062 ** 4063 ** The default way of implementing this query is to execute the 4064 ** subquery first and store the results in a temporary table, then 4065 ** run the outer query on that temporary table. This requires two 4066 ** passes over the data. Furthermore, because the temporary table 4067 ** has no indices, the WHERE clause on the outer query cannot be 4068 ** optimized. 4069 ** 4070 ** This routine attempts to rewrite queries such as the above into 4071 ** a single flat select, like this: 4072 ** 4073 ** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5 4074 ** 4075 ** The code generated for this simplification gives the same result 4076 ** but only has to scan the data once. And because indices might 4077 ** exist on the table t1, a complete scan of the data might be 4078 ** avoided. 4079 ** 4080 ** Flattening is subject to the following constraints: 4081 ** 4082 ** (**) We no longer attempt to flatten aggregate subqueries. Was: 4083 ** The subquery and the outer query cannot both be aggregates. 4084 ** 4085 ** (**) We no longer attempt to flatten aggregate subqueries. Was: 4086 ** (2) If the subquery is an aggregate then 4087 ** (2a) the outer query must not be a join and 4088 ** (2b) the outer query must not use subqueries 4089 ** other than the one FROM-clause subquery that is a candidate 4090 ** for flattening. (This is due to ticket [2f7170d73bf9abf80] 4091 ** from 2015-02-09.) 4092 ** 4093 ** (3) If the subquery is the right operand of a LEFT JOIN then 4094 ** (3a) the subquery may not be a join and 4095 ** (3b) the FROM clause of the subquery may not contain a virtual 4096 ** table and 4097 ** (**) Was: "The outer query may not have a GROUP BY." This case 4098 ** is now managed correctly 4099 ** (3d) the outer query may not be DISTINCT. 4100 ** See also (26) for restrictions on RIGHT JOIN. 4101 ** 4102 ** (4) The subquery can not be DISTINCT. 4103 ** 4104 ** (**) At one point restrictions (4) and (5) defined a subset of DISTINCT 4105 ** sub-queries that were excluded from this optimization. Restriction 4106 ** (4) has since been expanded to exclude all DISTINCT subqueries. 4107 ** 4108 ** (**) We no longer attempt to flatten aggregate subqueries. Was: 4109 ** If the subquery is aggregate, the outer query may not be DISTINCT. 4110 ** 4111 ** (7) The subquery must have a FROM clause. TODO: For subqueries without 4112 ** A FROM clause, consider adding a FROM clause with the special 4113 ** table sqlite_once that consists of a single row containing a 4114 ** single NULL. 4115 ** 4116 ** (8) If the subquery uses LIMIT then the outer query may not be a join. 4117 ** 4118 ** (9) If the subquery uses LIMIT then the outer query may not be aggregate. 4119 ** 4120 ** (**) Restriction (10) was removed from the code on 2005-02-05 but we 4121 ** accidently carried the comment forward until 2014-09-15. Original 4122 ** constraint: "If the subquery is aggregate then the outer query 4123 ** may not use LIMIT." 4124 ** 4125 ** (11) The subquery and the outer query may not both have ORDER BY clauses. 4126 ** 4127 ** (**) Not implemented. Subsumed into restriction (3). Was previously 4128 ** a separate restriction deriving from ticket #350. 4129 ** 4130 ** (13) The subquery and outer query may not both use LIMIT. 4131 ** 4132 ** (14) The subquery may not use OFFSET. 4133 ** 4134 ** (15) If the outer query is part of a compound select, then the 4135 ** subquery may not use LIMIT. 4136 ** (See ticket #2339 and ticket [02a8e81d44]). 4137 ** 4138 ** (16) If the outer query is aggregate, then the subquery may not 4139 ** use ORDER BY. (Ticket #2942) This used to not matter 4140 ** until we introduced the group_concat() function. 4141 ** 4142 ** (17) If the subquery is a compound select, then 4143 ** (17a) all compound operators must be a UNION ALL, and 4144 ** (17b) no terms within the subquery compound may be aggregate 4145 ** or DISTINCT, and 4146 ** (17c) every term within the subquery compound must have a FROM clause 4147 ** (17d) the outer query may not be 4148 ** (17d1) aggregate, or 4149 ** (17d2) DISTINCT 4150 ** (17e) the subquery may not contain window functions, and 4151 ** (17f) the subquery must not be the RHS of a LEFT JOIN. 4152 ** (17g) either the subquery is the first element of the outer 4153 ** query or there are no RIGHT or FULL JOINs in any arm 4154 ** of the subquery. (This is a duplicate of condition (27b).) 4155 ** 4156 ** The parent and sub-query may contain WHERE clauses. Subject to 4157 ** rules (11), (13) and (14), they may also contain ORDER BY, 4158 ** LIMIT and OFFSET clauses. The subquery cannot use any compound 4159 ** operator other than UNION ALL because all the other compound 4160 ** operators have an implied DISTINCT which is disallowed by 4161 ** restriction (4). 4162 ** 4163 ** Also, each component of the sub-query must return the same number 4164 ** of result columns. This is actually a requirement for any compound 4165 ** SELECT statement, but all the code here does is make sure that no 4166 ** such (illegal) sub-query is flattened. The caller will detect the 4167 ** syntax error and return a detailed message. 4168 ** 4169 ** (18) If the sub-query is a compound select, then all terms of the 4170 ** ORDER BY clause of the parent must be copies of a term returned 4171 ** by the parent query. 4172 ** 4173 ** (19) If the subquery uses LIMIT then the outer query may not 4174 ** have a WHERE clause. 4175 ** 4176 ** (20) If the sub-query is a compound select, then it must not use 4177 ** an ORDER BY clause. Ticket #3773. We could relax this constraint 4178 ** somewhat by saying that the terms of the ORDER BY clause must 4179 ** appear as unmodified result columns in the outer query. But we 4180 ** have other optimizations in mind to deal with that case. 4181 ** 4182 ** (21) If the subquery uses LIMIT then the outer query may not be 4183 ** DISTINCT. (See ticket [752e1646fc]). 4184 ** 4185 ** (22) The subquery may not be a recursive CTE. 4186 ** 4187 ** (23) If the outer query is a recursive CTE, then the sub-query may not be 4188 ** a compound query. This restriction is because transforming the 4189 ** parent to a compound query confuses the code that handles 4190 ** recursive queries in multiSelect(). 4191 ** 4192 ** (**) We no longer attempt to flatten aggregate subqueries. Was: 4193 ** The subquery may not be an aggregate that uses the built-in min() or 4194 ** or max() functions. (Without this restriction, a query like: 4195 ** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily 4196 ** return the value X for which Y was maximal.) 4197 ** 4198 ** (25) If either the subquery or the parent query contains a window 4199 ** function in the select list or ORDER BY clause, flattening 4200 ** is not attempted. 4201 ** 4202 ** (26) The subquery may not be the right operand of a RIGHT JOIN. 4203 ** See also (3) for restrictions on LEFT JOIN. 4204 ** 4205 ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it 4206 ** is the first element of the parent query. Two subcases: 4207 ** (27a) the subquery is not a compound query. 4208 ** (27b) the subquery is a compound query and the RIGHT JOIN occurs 4209 ** in any arm of the compound query. (See also (17g).) 4210 ** 4211 ** (28) The subquery is not a MATERIALIZED CTE. 4212 ** 4213 ** 4214 ** In this routine, the "p" parameter is a pointer to the outer query. 4215 ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query 4216 ** uses aggregates. 4217 ** 4218 ** If flattening is not attempted, this routine is a no-op and returns 0. 4219 ** If flattening is attempted this routine returns 1. 4220 ** 4221 ** All of the expression analysis must occur on both the outer query and 4222 ** the subquery before this routine runs. 4223 */ 4224 static int flattenSubquery( 4225 Parse *pParse, /* Parsing context */ 4226 Select *p, /* The parent or outer SELECT statement */ 4227 int iFrom, /* Index in p->pSrc->a[] of the inner subquery */ 4228 int isAgg /* True if outer SELECT uses aggregate functions */ 4229 ){ 4230 const char *zSavedAuthContext = pParse->zAuthContext; 4231 Select *pParent; /* Current UNION ALL term of the other query */ 4232 Select *pSub; /* The inner query or "subquery" */ 4233 Select *pSub1; /* Pointer to the rightmost select in sub-query */ 4234 SrcList *pSrc; /* The FROM clause of the outer query */ 4235 SrcList *pSubSrc; /* The FROM clause of the subquery */ 4236 int iParent; /* VDBE cursor number of the pSub result set temp table */ 4237 int iNewParent = -1;/* Replacement table for iParent */ 4238 int isOuterJoin = 0; /* True if pSub is the right side of a LEFT JOIN */ 4239 int i; /* Loop counter */ 4240 Expr *pWhere; /* The WHERE clause */ 4241 SrcItem *pSubitem; /* The subquery */ 4242 sqlite3 *db = pParse->db; 4243 Walker w; /* Walker to persist agginfo data */ 4244 int *aCsrMap = 0; 4245 4246 /* Check to see if flattening is permitted. Return 0 if not. 4247 */ 4248 assert( p!=0 ); 4249 assert( p->pPrior==0 ); 4250 if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0; 4251 pSrc = p->pSrc; 4252 assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc ); 4253 pSubitem = &pSrc->a[iFrom]; 4254 iParent = pSubitem->iCursor; 4255 pSub = pSubitem->pSelect; 4256 assert( pSub!=0 ); 4257 4258 #ifndef SQLITE_OMIT_WINDOWFUNC 4259 if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */ 4260 #endif 4261 4262 pSubSrc = pSub->pSrc; 4263 assert( pSubSrc ); 4264 /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, 4265 ** not arbitrary expressions, we allowed some combining of LIMIT and OFFSET 4266 ** because they could be computed at compile-time. But when LIMIT and OFFSET 4267 ** became arbitrary expressions, we were forced to add restrictions (13) 4268 ** and (14). */ 4269 if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */ 4270 if( pSub->pLimit && pSub->pLimit->pRight ) return 0; /* Restriction (14) */ 4271 if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){ 4272 return 0; /* Restriction (15) */ 4273 } 4274 if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */ 4275 if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (4) */ 4276 if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){ 4277 return 0; /* Restrictions (8)(9) */ 4278 } 4279 if( p->pOrderBy && pSub->pOrderBy ){ 4280 return 0; /* Restriction (11) */ 4281 } 4282 if( isAgg && pSub->pOrderBy ) return 0; /* Restriction (16) */ 4283 if( pSub->pLimit && p->pWhere ) return 0; /* Restriction (19) */ 4284 if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){ 4285 return 0; /* Restriction (21) */ 4286 } 4287 if( pSub->selFlags & (SF_Recursive) ){ 4288 return 0; /* Restrictions (22) */ 4289 } 4290 4291 /* 4292 ** If the subquery is the right operand of a LEFT JOIN, then the 4293 ** subquery may not be a join itself (3a). Example of why this is not 4294 ** allowed: 4295 ** 4296 ** t1 LEFT OUTER JOIN (t2 JOIN t3) 4297 ** 4298 ** If we flatten the above, we would get 4299 ** 4300 ** (t1 LEFT OUTER JOIN t2) JOIN t3 4301 ** 4302 ** which is not at all the same thing. 4303 ** 4304 ** See also tickets #306, #350, and #3300. 4305 */ 4306 if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){ 4307 if( pSubSrc->nSrc>1 /* (3a) */ 4308 || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */ 4309 || (p->selFlags & SF_Distinct)!=0 /* (3d) */ 4310 || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */ 4311 ){ 4312 return 0; 4313 } 4314 isOuterJoin = 1; 4315 } 4316 4317 assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */ 4318 if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ 4319 return 0; /* Restriction (27a) */ 4320 } 4321 if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){ 4322 return 0; /* (28) */ 4323 } 4324 4325 /* Restriction (17): If the sub-query is a compound SELECT, then it must 4326 ** use only the UNION ALL operator. And none of the simple select queries 4327 ** that make up the compound SELECT are allowed to be aggregate or distinct 4328 ** queries. 4329 */ 4330 if( pSub->pPrior ){ 4331 if( pSub->pOrderBy ){ 4332 return 0; /* Restriction (20) */ 4333 } 4334 if( isAgg || (p->selFlags & SF_Distinct)!=0 || isOuterJoin>0 ){ 4335 return 0; /* (17d1), (17d2), or (17f) */ 4336 } 4337 for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){ 4338 testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); 4339 testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); 4340 assert( pSub->pSrc!=0 ); 4341 assert( (pSub->selFlags & SF_Recursive)==0 ); 4342 assert( pSub->pEList->nExpr==pSub1->pEList->nExpr ); 4343 if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */ 4344 || (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */ 4345 || pSub1->pSrc->nSrc<1 /* (17c) */ 4346 #ifndef SQLITE_OMIT_WINDOWFUNC 4347 || pSub1->pWin /* (17e) */ 4348 #endif 4349 ){ 4350 return 0; 4351 } 4352 if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ 4353 /* Without this restriction, the JT_LTORJ flag would end up being 4354 ** omitted on left-hand tables of the right join that is being 4355 ** flattened. */ 4356 return 0; /* Restrictions (17g), (27b) */ 4357 } 4358 testcase( pSub1->pSrc->nSrc>1 ); 4359 } 4360 4361 /* Restriction (18). */ 4362 if( p->pOrderBy ){ 4363 int ii; 4364 for(ii=0; ii<p->pOrderBy->nExpr; ii++){ 4365 if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0; 4366 } 4367 } 4368 4369 /* Restriction (23) */ 4370 if( (p->selFlags & SF_Recursive) ) return 0; 4371 4372 if( pSrc->nSrc>1 ){ 4373 if( pParse->nSelect>500 ) return 0; 4374 if( OptimizationDisabled(db, SQLITE_FlttnUnionAll) ) return 0; 4375 aCsrMap = sqlite3DbMallocZero(db, ((i64)pParse->nTab+1)*sizeof(int)); 4376 if( aCsrMap ) aCsrMap[0] = pParse->nTab; 4377 } 4378 } 4379 4380 /***** If we reach this point, flattening is permitted. *****/ 4381 SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n", 4382 pSub->selId, pSub, iFrom)); 4383 4384 /* Authorize the subquery */ 4385 pParse->zAuthContext = pSubitem->zName; 4386 TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0); 4387 testcase( i==SQLITE_DENY ); 4388 pParse->zAuthContext = zSavedAuthContext; 4389 4390 /* Delete the transient structures associated with thesubquery */ 4391 pSub1 = pSubitem->pSelect; 4392 sqlite3DbFree(db, pSubitem->zDatabase); 4393 sqlite3DbFree(db, pSubitem->zName); 4394 sqlite3DbFree(db, pSubitem->zAlias); 4395 pSubitem->zDatabase = 0; 4396 pSubitem->zName = 0; 4397 pSubitem->zAlias = 0; 4398 pSubitem->pSelect = 0; 4399 assert( pSubitem->fg.isUsing!=0 || pSubitem->u3.pOn==0 ); 4400 4401 /* If the sub-query is a compound SELECT statement, then (by restrictions 4402 ** 17 and 18 above) it must be a UNION ALL and the parent query must 4403 ** be of the form: 4404 ** 4405 ** SELECT <expr-list> FROM (<sub-query>) <where-clause> 4406 ** 4407 ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block 4408 ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or 4409 ** OFFSET clauses and joins them to the left-hand-side of the original 4410 ** using UNION ALL operators. In this case N is the number of simple 4411 ** select statements in the compound sub-query. 4412 ** 4413 ** Example: 4414 ** 4415 ** SELECT a+1 FROM ( 4416 ** SELECT x FROM tab 4417 ** UNION ALL 4418 ** SELECT y FROM tab 4419 ** UNION ALL 4420 ** SELECT abs(z*2) FROM tab2 4421 ** ) WHERE a!=5 ORDER BY 1 4422 ** 4423 ** Transformed into: 4424 ** 4425 ** SELECT x+1 FROM tab WHERE x+1!=5 4426 ** UNION ALL 4427 ** SELECT y+1 FROM tab WHERE y+1!=5 4428 ** UNION ALL 4429 ** SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5 4430 ** ORDER BY 1 4431 ** 4432 ** We call this the "compound-subquery flattening". 4433 */ 4434 for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){ 4435 Select *pNew; 4436 ExprList *pOrderBy = p->pOrderBy; 4437 Expr *pLimit = p->pLimit; 4438 Select *pPrior = p->pPrior; 4439 Table *pItemTab = pSubitem->pTab; 4440 pSubitem->pTab = 0; 4441 p->pOrderBy = 0; 4442 p->pPrior = 0; 4443 p->pLimit = 0; 4444 pNew = sqlite3SelectDup(db, p, 0); 4445 p->pLimit = pLimit; 4446 p->pOrderBy = pOrderBy; 4447 p->op = TK_ALL; 4448 pSubitem->pTab = pItemTab; 4449 if( pNew==0 ){ 4450 p->pPrior = pPrior; 4451 }else{ 4452 pNew->selId = ++pParse->nSelect; 4453 if( aCsrMap && ALWAYS(db->mallocFailed==0) ){ 4454 renumberCursors(pParse, pNew, iFrom, aCsrMap); 4455 } 4456 pNew->pPrior = pPrior; 4457 if( pPrior ) pPrior->pNext = pNew; 4458 pNew->pNext = p; 4459 p->pPrior = pNew; 4460 SELECTTRACE(2,pParse,p,("compound-subquery flattener" 4461 " creates %u as peer\n",pNew->selId)); 4462 } 4463 assert( pSubitem->pSelect==0 ); 4464 } 4465 sqlite3DbFree(db, aCsrMap); 4466 if( db->mallocFailed ){ 4467 pSubitem->pSelect = pSub1; 4468 return 1; 4469 } 4470 4471 /* Defer deleting the Table object associated with the 4472 ** subquery until code generation is 4473 ** complete, since there may still exist Expr.pTab entries that 4474 ** refer to the subquery even after flattening. Ticket #3346. 4475 ** 4476 ** pSubitem->pTab is always non-NULL by test restrictions and tests above. 4477 */ 4478 if( ALWAYS(pSubitem->pTab!=0) ){ 4479 Table *pTabToDel = pSubitem->pTab; 4480 if( pTabToDel->nTabRef==1 ){ 4481 Parse *pToplevel = sqlite3ParseToplevel(pParse); 4482 sqlite3ParserAddCleanup(pToplevel, 4483 (void(*)(sqlite3*,void*))sqlite3DeleteTable, 4484 pTabToDel); 4485 testcase( pToplevel->earlyCleanup ); 4486 }else{ 4487 pTabToDel->nTabRef--; 4488 } 4489 pSubitem->pTab = 0; 4490 } 4491 4492 /* The following loop runs once for each term in a compound-subquery 4493 ** flattening (as described above). If we are doing a different kind 4494 ** of flattening - a flattening other than a compound-subquery flattening - 4495 ** then this loop only runs once. 4496 ** 4497 ** This loop moves all of the FROM elements of the subquery into the 4498 ** the FROM clause of the outer query. Before doing this, remember 4499 ** the cursor number for the original outer query FROM element in 4500 ** iParent. The iParent cursor will never be used. Subsequent code 4501 ** will scan expressions looking for iParent references and replace 4502 ** those references with expressions that resolve to the subquery FROM 4503 ** elements we are now copying in. 4504 */ 4505 pSub = pSub1; 4506 for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){ 4507 int nSubSrc; 4508 u8 jointype = 0; 4509 u8 ltorj = pSrc->a[iFrom].fg.jointype & JT_LTORJ; 4510 assert( pSub!=0 ); 4511 pSubSrc = pSub->pSrc; /* FROM clause of subquery */ 4512 nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */ 4513 pSrc = pParent->pSrc; /* FROM clause of the outer query */ 4514 4515 if( pParent==p ){ 4516 jointype = pSubitem->fg.jointype; /* First time through the loop */ 4517 } 4518 4519 /* The subquery uses a single slot of the FROM clause of the outer 4520 ** query. If the subquery has more than one element in its FROM clause, 4521 ** then expand the outer query to make space for it to hold all elements 4522 ** of the subquery. 4523 ** 4524 ** Example: 4525 ** 4526 ** SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB; 4527 ** 4528 ** The outer query has 3 slots in its FROM clause. One slot of the 4529 ** outer query (the middle slot) is used by the subquery. The next 4530 ** block of code will expand the outer query FROM clause to 4 slots. 4531 ** The middle slot is expanded to two slots in order to make space 4532 ** for the two elements in the FROM clause of the subquery. 4533 */ 4534 if( nSubSrc>1 ){ 4535 pSrc = sqlite3SrcListEnlarge(pParse, pSrc, nSubSrc-1,iFrom+1); 4536 if( pSrc==0 ) break; 4537 pParent->pSrc = pSrc; 4538 } 4539 4540 /* Transfer the FROM clause terms from the subquery into the 4541 ** outer query. 4542 */ 4543 for(i=0; i<nSubSrc; i++){ 4544 SrcItem *pItem = &pSrc->a[i+iFrom]; 4545 if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing); 4546 assert( pItem->fg.isTabFunc==0 ); 4547 *pItem = pSubSrc->a[i]; 4548 pItem->fg.jointype |= ltorj; 4549 iNewParent = pSubSrc->a[i].iCursor; 4550 memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); 4551 } 4552 pSrc->a[iFrom].fg.jointype &= JT_LTORJ; 4553 pSrc->a[iFrom].fg.jointype |= jointype | ltorj; 4554 4555 /* Now begin substituting subquery result set expressions for 4556 ** references to the iParent in the outer query. 4557 ** 4558 ** Example: 4559 ** 4560 ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b; 4561 ** \ \_____________ subquery __________/ / 4562 ** \_____________________ outer query ______________________________/ 4563 ** 4564 ** We look at every expression in the outer query and every place we see 4565 ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". 4566 */ 4567 if( pSub->pOrderBy && (pParent->selFlags & SF_NoopOrderBy)==0 ){ 4568 /* At this point, any non-zero iOrderByCol values indicate that the 4569 ** ORDER BY column expression is identical to the iOrderByCol'th 4570 ** expression returned by SELECT statement pSub. Since these values 4571 ** do not necessarily correspond to columns in SELECT statement pParent, 4572 ** zero them before transfering the ORDER BY clause. 4573 ** 4574 ** Not doing this may cause an error if a subsequent call to this 4575 ** function attempts to flatten a compound sub-query into pParent 4576 ** (the only way this can happen is if the compound sub-query is 4577 ** currently part of pSub->pSrc). See ticket [d11a6e908f]. */ 4578 ExprList *pOrderBy = pSub->pOrderBy; 4579 for(i=0; i<pOrderBy->nExpr; i++){ 4580 pOrderBy->a[i].u.x.iOrderByCol = 0; 4581 } 4582 assert( pParent->pOrderBy==0 ); 4583 pParent->pOrderBy = pOrderBy; 4584 pSub->pOrderBy = 0; 4585 } 4586 pWhere = pSub->pWhere; 4587 pSub->pWhere = 0; 4588 if( isOuterJoin>0 ){ 4589 sqlite3SetJoinExpr(pWhere, iNewParent, EP_OuterON); 4590 } 4591 if( pWhere ){ 4592 if( pParent->pWhere ){ 4593 pParent->pWhere = sqlite3PExpr(pParse, TK_AND, pWhere, pParent->pWhere); 4594 }else{ 4595 pParent->pWhere = pWhere; 4596 } 4597 } 4598 if( db->mallocFailed==0 ){ 4599 SubstContext x; 4600 x.pParse = pParse; 4601 x.iTable = iParent; 4602 x.iNewTable = iNewParent; 4603 x.isOuterJoin = isOuterJoin; 4604 x.pEList = pSub->pEList; 4605 x.pCList = findLeftmostExprlist(pSub); 4606 substSelect(&x, pParent, 0); 4607 } 4608 4609 /* The flattened query is a compound if either the inner or the 4610 ** outer query is a compound. */ 4611 pParent->selFlags |= pSub->selFlags & SF_Compound; 4612 assert( (pSub->selFlags & SF_Distinct)==0 ); /* restriction (17b) */ 4613 4614 /* 4615 ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y; 4616 ** 4617 ** One is tempted to try to add a and b to combine the limits. But this 4618 ** does not work if either limit is negative. 4619 */ 4620 if( pSub->pLimit ){ 4621 pParent->pLimit = pSub->pLimit; 4622 pSub->pLimit = 0; 4623 } 4624 4625 /* Recompute the SrcItem.colUsed masks for the flattened 4626 ** tables. */ 4627 for(i=0; i<nSubSrc; i++){ 4628 recomputeColumnsUsed(pParent, &pSrc->a[i+iFrom]); 4629 } 4630 } 4631 4632 /* Finially, delete what is left of the subquery and return 4633 ** success. 4634 */ 4635 sqlite3AggInfoPersistWalkerInit(&w, pParse); 4636 sqlite3WalkSelect(&w,pSub1); 4637 sqlite3SelectDelete(db, pSub1); 4638 4639 #if TREETRACE_ENABLED 4640 if( sqlite3TreeTrace & 0x100 ){ 4641 SELECTTRACE(0x100,pParse,p,("After flattening:\n")); 4642 sqlite3TreeViewSelect(0, p, 0); 4643 } 4644 #endif 4645 4646 return 1; 4647 } 4648 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 4649 4650 /* 4651 ** A structure to keep track of all of the column values that are fixed to 4652 ** a known value due to WHERE clause constraints of the form COLUMN=VALUE. 4653 */ 4654 typedef struct WhereConst WhereConst; 4655 struct WhereConst { 4656 Parse *pParse; /* Parsing context */ 4657 u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ 4658 int nConst; /* Number for COLUMN=CONSTANT terms */ 4659 int nChng; /* Number of times a constant is propagated */ 4660 int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ 4661 u32 mExcludeOn; /* Which ON expressions to exclude from considertion. 4662 ** Either EP_OuterON or EP_InnerON|EP_OuterON */ 4663 Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ 4664 }; 4665 4666 /* 4667 ** Add a new entry to the pConst object. Except, do not add duplicate 4668 ** pColumn entires. Also, do not add if doing so would not be appropriate. 4669 ** 4670 ** The caller guarantees the pColumn is a column and pValue is a constant. 4671 ** This routine has to do some additional checks before completing the 4672 ** insert. 4673 */ 4674 static void constInsert( 4675 WhereConst *pConst, /* The WhereConst into which we are inserting */ 4676 Expr *pColumn, /* The COLUMN part of the constraint */ 4677 Expr *pValue, /* The VALUE part of the constraint */ 4678 Expr *pExpr /* Overall expression: COLUMN=VALUE or VALUE=COLUMN */ 4679 ){ 4680 int i; 4681 assert( pColumn->op==TK_COLUMN ); 4682 assert( sqlite3ExprIsConstant(pValue) ); 4683 4684 if( ExprHasProperty(pColumn, EP_FixedCol) ) return; 4685 if( sqlite3ExprAffinity(pValue)!=0 ) return; 4686 if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pConst->pParse,pExpr)) ){ 4687 return; 4688 } 4689 4690 /* 2018-10-25 ticket [cf5ed20f] 4691 ** Make sure the same pColumn is not inserted more than once */ 4692 for(i=0; i<pConst->nConst; i++){ 4693 const Expr *pE2 = pConst->apExpr[i*2]; 4694 assert( pE2->op==TK_COLUMN ); 4695 if( pE2->iTable==pColumn->iTable 4696 && pE2->iColumn==pColumn->iColumn 4697 ){ 4698 return; /* Already present. Return without doing anything. */ 4699 } 4700 } 4701 if( sqlite3ExprAffinity(pColumn)==SQLITE_AFF_BLOB ){ 4702 pConst->bHasAffBlob = 1; 4703 } 4704 4705 pConst->nConst++; 4706 pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, 4707 pConst->nConst*2*sizeof(Expr*)); 4708 if( pConst->apExpr==0 ){ 4709 pConst->nConst = 0; 4710 }else{ 4711 pConst->apExpr[pConst->nConst*2-2] = pColumn; 4712 pConst->apExpr[pConst->nConst*2-1] = pValue; 4713 } 4714 } 4715 4716 /* 4717 ** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE 4718 ** is a constant expression and where the term must be true because it 4719 ** is part of the AND-connected terms of the expression. For each term 4720 ** found, add it to the pConst structure. 4721 */ 4722 static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ 4723 Expr *pRight, *pLeft; 4724 if( NEVER(pExpr==0) ) return; 4725 if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){ 4726 testcase( ExprHasProperty(pExpr, EP_OuterON) ); 4727 testcase( ExprHasProperty(pExpr, EP_InnerON) ); 4728 return; 4729 } 4730 if( pExpr->op==TK_AND ){ 4731 findConstInWhere(pConst, pExpr->pRight); 4732 findConstInWhere(pConst, pExpr->pLeft); 4733 return; 4734 } 4735 if( pExpr->op!=TK_EQ ) return; 4736 pRight = pExpr->pRight; 4737 pLeft = pExpr->pLeft; 4738 assert( pRight!=0 ); 4739 assert( pLeft!=0 ); 4740 if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pLeft) ){ 4741 constInsert(pConst,pRight,pLeft,pExpr); 4742 } 4743 if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pRight) ){ 4744 constInsert(pConst,pLeft,pRight,pExpr); 4745 } 4746 } 4747 4748 /* 4749 ** This is a helper function for Walker callback propagateConstantExprRewrite(). 4750 ** 4751 ** Argument pExpr is a candidate expression to be replaced by a value. If 4752 ** pExpr is equivalent to one of the columns named in pWalker->u.pConst, 4753 ** then overwrite it with the corresponding value. Except, do not do so 4754 ** if argument bIgnoreAffBlob is non-zero and the affinity of pExpr 4755 ** is SQLITE_AFF_BLOB. 4756 */ 4757 static int propagateConstantExprRewriteOne( 4758 WhereConst *pConst, 4759 Expr *pExpr, 4760 int bIgnoreAffBlob 4761 ){ 4762 int i; 4763 if( pConst->pOomFault[0] ) return WRC_Prune; 4764 if( pExpr->op!=TK_COLUMN ) return WRC_Continue; 4765 if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){ 4766 testcase( ExprHasProperty(pExpr, EP_FixedCol) ); 4767 testcase( ExprHasProperty(pExpr, EP_OuterON) ); 4768 testcase( ExprHasProperty(pExpr, EP_InnerON) ); 4769 return WRC_Continue; 4770 } 4771 for(i=0; i<pConst->nConst; i++){ 4772 Expr *pColumn = pConst->apExpr[i*2]; 4773 if( pColumn==pExpr ) continue; 4774 if( pColumn->iTable!=pExpr->iTable ) continue; 4775 if( pColumn->iColumn!=pExpr->iColumn ) continue; 4776 if( bIgnoreAffBlob && sqlite3ExprAffinity(pColumn)==SQLITE_AFF_BLOB ){ 4777 break; 4778 } 4779 /* A match is found. Add the EP_FixedCol property */ 4780 pConst->nChng++; 4781 ExprClearProperty(pExpr, EP_Leaf); 4782 ExprSetProperty(pExpr, EP_FixedCol); 4783 assert( pExpr->pLeft==0 ); 4784 pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0); 4785 if( pConst->pParse->db->mallocFailed ) return WRC_Prune; 4786 break; 4787 } 4788 return WRC_Prune; 4789 } 4790 4791 /* 4792 ** This is a Walker expression callback. pExpr is a node from the WHERE 4793 ** clause of a SELECT statement. This function examines pExpr to see if 4794 ** any substitutions based on the contents of pWalker->u.pConst should 4795 ** be made to pExpr or its immediate children. 4796 ** 4797 ** A substitution is made if: 4798 ** 4799 ** + pExpr is a column with an affinity other than BLOB that matches 4800 ** one of the columns in pWalker->u.pConst, or 4801 ** 4802 ** + pExpr is a binary comparison operator (=, <=, >=, <, >) that 4803 ** uses an affinity other than TEXT and one of its immediate 4804 ** children is a column that matches one of the columns in 4805 ** pWalker->u.pConst. 4806 */ 4807 static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ 4808 WhereConst *pConst = pWalker->u.pConst; 4809 assert( TK_GT==TK_EQ+1 ); 4810 assert( TK_LE==TK_EQ+2 ); 4811 assert( TK_LT==TK_EQ+3 ); 4812 assert( TK_GE==TK_EQ+4 ); 4813 if( pConst->bHasAffBlob ){ 4814 if( (pExpr->op>=TK_EQ && pExpr->op<=TK_GE) 4815 || pExpr->op==TK_IS 4816 ){ 4817 propagateConstantExprRewriteOne(pConst, pExpr->pLeft, 0); 4818 if( pConst->pOomFault[0] ) return WRC_Prune; 4819 if( sqlite3ExprAffinity(pExpr->pLeft)!=SQLITE_AFF_TEXT ){ 4820 propagateConstantExprRewriteOne(pConst, pExpr->pRight, 0); 4821 } 4822 } 4823 } 4824 return propagateConstantExprRewriteOne(pConst, pExpr, pConst->bHasAffBlob); 4825 } 4826 4827 /* 4828 ** The WHERE-clause constant propagation optimization. 4829 ** 4830 ** If the WHERE clause contains terms of the form COLUMN=CONSTANT or 4831 ** CONSTANT=COLUMN that are top-level AND-connected terms that are not 4832 ** part of a ON clause from a LEFT JOIN, then throughout the query 4833 ** replace all other occurrences of COLUMN with CONSTANT. 4834 ** 4835 ** For example, the query: 4836 ** 4837 ** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=t1.a AND t3.c=t2.b 4838 ** 4839 ** Is transformed into 4840 ** 4841 ** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=39 AND t3.c=39 4842 ** 4843 ** Return true if any transformations where made and false if not. 4844 ** 4845 ** Implementation note: Constant propagation is tricky due to affinity 4846 ** and collating sequence interactions. Consider this example: 4847 ** 4848 ** CREATE TABLE t1(a INT,b TEXT); 4849 ** INSERT INTO t1 VALUES(123,'0123'); 4850 ** SELECT * FROM t1 WHERE a=123 AND b=a; 4851 ** SELECT * FROM t1 WHERE a=123 AND b=123; 4852 ** 4853 ** The two SELECT statements above should return different answers. b=a 4854 ** is alway true because the comparison uses numeric affinity, but b=123 4855 ** is false because it uses text affinity and '0123' is not the same as '123'. 4856 ** To work around this, the expression tree is not actually changed from 4857 ** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol 4858 ** and the "123" value is hung off of the pLeft pointer. Code generator 4859 ** routines know to generate the constant "123" instead of looking up the 4860 ** column value. Also, to avoid collation problems, this optimization is 4861 ** only attempted if the "a=123" term uses the default BINARY collation. 4862 ** 4863 ** 2021-05-25 forum post 6a06202608: Another troublesome case is... 4864 ** 4865 ** CREATE TABLE t1(x); 4866 ** INSERT INTO t1 VALUES(10.0); 4867 ** SELECT 1 FROM t1 WHERE x=10 AND x LIKE 10; 4868 ** 4869 ** The query should return no rows, because the t1.x value is '10.0' not '10' 4870 ** and '10.0' is not LIKE '10'. But if we are not careful, the first WHERE 4871 ** term "x=10" will cause the second WHERE term to become "10 LIKE 10", 4872 ** resulting in a false positive. To avoid this, constant propagation for 4873 ** columns with BLOB affinity is only allowed if the constant is used with 4874 ** operators ==, <=, <, >=, >, or IS in a way that will cause the correct 4875 ** type conversions to occur. See logic associated with the bHasAffBlob flag 4876 ** for details. 4877 */ 4878 static int propagateConstants( 4879 Parse *pParse, /* The parsing context */ 4880 Select *p /* The query in which to propagate constants */ 4881 ){ 4882 WhereConst x; 4883 Walker w; 4884 int nChng = 0; 4885 x.pParse = pParse; 4886 x.pOomFault = &pParse->db->mallocFailed; 4887 do{ 4888 x.nConst = 0; 4889 x.nChng = 0; 4890 x.apExpr = 0; 4891 x.bHasAffBlob = 0; 4892 if( ALWAYS(p->pSrc!=0) 4893 && p->pSrc->nSrc>0 4894 && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 4895 ){ 4896 /* Do not propagate constants on any ON clause if there is a 4897 ** RIGHT JOIN anywhere in the query */ 4898 x.mExcludeOn = EP_InnerON | EP_OuterON; 4899 }else{ 4900 /* Do not propagate constants through the ON clause of a LEFT JOIN */ 4901 x.mExcludeOn = EP_OuterON; 4902 } 4903 findConstInWhere(&x, p->pWhere); 4904 if( x.nConst ){ 4905 memset(&w, 0, sizeof(w)); 4906 w.pParse = pParse; 4907 w.xExprCallback = propagateConstantExprRewrite; 4908 w.xSelectCallback = sqlite3SelectWalkNoop; 4909 w.xSelectCallback2 = 0; 4910 w.walkerDepth = 0; 4911 w.u.pConst = &x; 4912 sqlite3WalkExpr(&w, p->pWhere); 4913 sqlite3DbFree(x.pParse->db, x.apExpr); 4914 nChng += x.nChng; 4915 } 4916 }while( x.nChng ); 4917 return nChng; 4918 } 4919 4920 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 4921 # if !defined(SQLITE_OMIT_WINDOWFUNC) 4922 /* 4923 ** This function is called to determine whether or not it is safe to 4924 ** push WHERE clause expression pExpr down to FROM clause sub-query 4925 ** pSubq, which contains at least one window function. Return 1 4926 ** if it is safe and the expression should be pushed down, or 0 4927 ** otherwise. 4928 ** 4929 ** It is only safe to push the expression down if it consists only 4930 ** of constants and copies of expressions that appear in the PARTITION 4931 ** BY clause of all window function used by the sub-query. It is safe 4932 ** to filter out entire partitions, but not rows within partitions, as 4933 ** this may change the results of the window functions. 4934 ** 4935 ** At the time this function is called it is guaranteed that 4936 ** 4937 ** * the sub-query uses only one distinct window frame, and 4938 ** * that the window frame has a PARTITION BY clase. 4939 */ 4940 static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ 4941 assert( pSubq->pWin->pPartition ); 4942 assert( (pSubq->selFlags & SF_MultiPart)==0 ); 4943 assert( pSubq->pPrior==0 ); 4944 return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition); 4945 } 4946 # endif /* SQLITE_OMIT_WINDOWFUNC */ 4947 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 4948 4949 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 4950 /* 4951 ** Make copies of relevant WHERE clause terms of the outer query into 4952 ** the WHERE clause of subquery. Example: 4953 ** 4954 ** SELECT * FROM (SELECT a AS x, c-d AS y FROM t1) WHERE x=5 AND y=10; 4955 ** 4956 ** Transformed into: 4957 ** 4958 ** SELECT * FROM (SELECT a AS x, c-d AS y FROM t1 WHERE a=5 AND c-d=10) 4959 ** WHERE x=5 AND y=10; 4960 ** 4961 ** The hope is that the terms added to the inner query will make it more 4962 ** efficient. 4963 ** 4964 ** Do not attempt this optimization if: 4965 ** 4966 ** (1) (** This restriction was removed on 2017-09-29. We used to 4967 ** disallow this optimization for aggregate subqueries, but now 4968 ** it is allowed by putting the extra terms on the HAVING clause. 4969 ** The added HAVING clause is pointless if the subquery lacks 4970 ** a GROUP BY clause. But such a HAVING clause is also harmless 4971 ** so there does not appear to be any reason to add extra logic 4972 ** to suppress it. **) 4973 ** 4974 ** (2) The inner query is the recursive part of a common table expression. 4975 ** 4976 ** (3) The inner query has a LIMIT clause (since the changes to the WHERE 4977 ** clause would change the meaning of the LIMIT). 4978 ** 4979 ** (4) The inner query is the right operand of a LEFT JOIN and the 4980 ** expression to be pushed down does not come from the ON clause 4981 ** on that LEFT JOIN. 4982 ** 4983 ** (5) The WHERE clause expression originates in the ON or USING clause 4984 ** of a LEFT JOIN where iCursor is not the right-hand table of that 4985 ** left join. An example: 4986 ** 4987 ** SELECT * 4988 ** FROM (SELECT 1 AS a1 UNION ALL SELECT 2) AS aa 4989 ** JOIN (SELECT 1 AS b2 UNION ALL SELECT 2) AS bb ON (a1=b2) 4990 ** LEFT JOIN (SELECT 8 AS c3 UNION ALL SELECT 9) AS cc ON (b2=2); 4991 ** 4992 ** The correct answer is three rows: (1,1,NULL),(2,2,8),(2,2,9). 4993 ** But if the (b2=2) term were to be pushed down into the bb subquery, 4994 ** then the (1,1,NULL) row would be suppressed. 4995 ** 4996 ** (6) Window functions make things tricky as changes to the WHERE clause 4997 ** of the inner query could change the window over which window 4998 ** functions are calculated. Therefore, do not attempt the optimization 4999 ** if: 5000 ** 5001 ** (6a) The inner query uses multiple incompatible window partitions. 5002 ** 5003 ** (6b) The inner query is a compound and uses window-functions. 5004 ** 5005 ** (6c) The WHERE clause does not consist entirely of constants and 5006 ** copies of expressions found in the PARTITION BY clause of 5007 ** all window-functions used by the sub-query. It is safe to 5008 ** filter out entire partitions, as this does not change the 5009 ** window over which any window-function is calculated. 5010 ** 5011 ** (7) The inner query is a Common Table Expression (CTE) that should 5012 ** be materialized. (This restriction is implemented in the calling 5013 ** routine.) 5014 ** 5015 ** (8) The subquery may not be a compound that uses UNION, INTERSECT, 5016 ** or EXCEPT. (We could, perhaps, relax this restriction to allow 5017 ** this case if none of the comparisons operators between left and 5018 ** right arms of the compound use a collation other than BINARY. 5019 ** But it is a lot of work to check that case for an obscure and 5020 ** minor optimization, so we omit it for now.) 5021 ** 5022 ** Return 0 if no changes are made and non-zero if one or more WHERE clause 5023 ** terms are duplicated into the subquery. 5024 */ 5025 static int pushDownWhereTerms( 5026 Parse *pParse, /* Parse context (for malloc() and error reporting) */ 5027 Select *pSubq, /* The subquery whose WHERE clause is to be augmented */ 5028 Expr *pWhere, /* The WHERE clause of the outer query */ 5029 SrcItem *pSrc /* The subquery term of the outer FROM clause */ 5030 ){ 5031 Expr *pNew; 5032 int nChng = 0; 5033 if( pWhere==0 ) return 0; 5034 if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0; 5035 if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0; 5036 5037 #ifndef SQLITE_OMIT_WINDOWFUNC 5038 if( pSubq->pPrior ){ 5039 Select *pSel; 5040 for(pSel=pSubq; pSel; pSel=pSel->pPrior){ 5041 u8 op = pSel->op; 5042 assert( op==TK_ALL || op==TK_SELECT 5043 || op==TK_UNION || op==TK_INTERSECT || op==TK_EXCEPT ); 5044 if( op!=TK_ALL && op!=TK_SELECT ) return 0; /* restriction (8) */ 5045 if( pSel->pWin ) return 0; /* restriction (6b) */ 5046 } 5047 }else{ 5048 if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0; 5049 } 5050 #endif 5051 5052 #ifdef SQLITE_DEBUG 5053 /* Only the first term of a compound can have a WITH clause. But make 5054 ** sure no other terms are marked SF_Recursive in case something changes 5055 ** in the future. 5056 */ 5057 { 5058 Select *pX; 5059 for(pX=pSubq; pX; pX=pX->pPrior){ 5060 assert( (pX->selFlags & (SF_Recursive))==0 ); 5061 } 5062 } 5063 #endif 5064 5065 if( pSubq->pLimit!=0 ){ 5066 return 0; /* restriction (3) */ 5067 } 5068 while( pWhere->op==TK_AND ){ 5069 nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrc); 5070 pWhere = pWhere->pLeft; 5071 } 5072 5073 #if 0 /* Legacy code. Checks now done by sqlite3ExprIsTableConstraint() */ 5074 if( isLeftJoin 5075 && (ExprHasProperty(pWhere,EP_OuterON)==0 5076 || pWhere->w.iJoin!=iCursor) 5077 ){ 5078 return 0; /* restriction (4) */ 5079 } 5080 if( ExprHasProperty(pWhere,EP_OuterON) 5081 && pWhere->w.iJoin!=iCursor 5082 ){ 5083 return 0; /* restriction (5) */ 5084 } 5085 #endif 5086 5087 if( sqlite3ExprIsTableConstraint(pWhere, pSrc) ){ 5088 nChng++; 5089 pSubq->selFlags |= SF_PushDown; 5090 while( pSubq ){ 5091 SubstContext x; 5092 pNew = sqlite3ExprDup(pParse->db, pWhere, 0); 5093 unsetJoinExpr(pNew, -1, 1); 5094 x.pParse = pParse; 5095 x.iTable = pSrc->iCursor; 5096 x.iNewTable = pSrc->iCursor; 5097 x.isOuterJoin = 0; 5098 x.pEList = pSubq->pEList; 5099 x.pCList = findLeftmostExprlist(pSubq); 5100 pNew = substExpr(&x, pNew); 5101 #ifndef SQLITE_OMIT_WINDOWFUNC 5102 if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){ 5103 /* Restriction 6c has prevented push-down in this case */ 5104 sqlite3ExprDelete(pParse->db, pNew); 5105 nChng--; 5106 break; 5107 } 5108 #endif 5109 if( pSubq->selFlags & SF_Aggregate ){ 5110 pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew); 5111 }else{ 5112 pSubq->pWhere = sqlite3ExprAnd(pParse, pSubq->pWhere, pNew); 5113 } 5114 pSubq = pSubq->pPrior; 5115 } 5116 } 5117 return nChng; 5118 } 5119 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ 5120 5121 /* 5122 ** The pFunc is the only aggregate function in the query. Check to see 5123 ** if the query is a candidate for the min/max optimization. 5124 ** 5125 ** If the query is a candidate for the min/max optimization, then set 5126 ** *ppMinMax to be an ORDER BY clause to be used for the optimization 5127 ** and return either WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX depending on 5128 ** whether pFunc is a min() or max() function. 5129 ** 5130 ** If the query is not a candidate for the min/max optimization, return 5131 ** WHERE_ORDERBY_NORMAL (which must be zero). 5132 ** 5133 ** This routine must be called after aggregate functions have been 5134 ** located but before their arguments have been subjected to aggregate 5135 ** analysis. 5136 */ 5137 static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){ 5138 int eRet = WHERE_ORDERBY_NORMAL; /* Return value */ 5139 ExprList *pEList; /* Arguments to agg function */ 5140 const char *zFunc; /* Name of aggregate function pFunc */ 5141 ExprList *pOrderBy; 5142 u8 sortFlags = 0; 5143 5144 assert( *ppMinMax==0 ); 5145 assert( pFunc->op==TK_AGG_FUNCTION ); 5146 assert( !IsWindowFunc(pFunc) ); 5147 assert( ExprUseXList(pFunc) ); 5148 pEList = pFunc->x.pList; 5149 if( pEList==0 5150 || pEList->nExpr!=1 5151 || ExprHasProperty(pFunc, EP_WinFunc) 5152 || OptimizationDisabled(db, SQLITE_MinMaxOpt) 5153 ){ 5154 return eRet; 5155 } 5156 assert( !ExprHasProperty(pFunc, EP_IntValue) ); 5157 zFunc = pFunc->u.zToken; 5158 if( sqlite3StrICmp(zFunc, "min")==0 ){ 5159 eRet = WHERE_ORDERBY_MIN; 5160 if( sqlite3ExprCanBeNull(pEList->a[0].pExpr) ){ 5161 sortFlags = KEYINFO_ORDER_BIGNULL; 5162 } 5163 }else if( sqlite3StrICmp(zFunc, "max")==0 ){ 5164 eRet = WHERE_ORDERBY_MAX; 5165 sortFlags = KEYINFO_ORDER_DESC; 5166 }else{ 5167 return eRet; 5168 } 5169 *ppMinMax = pOrderBy = sqlite3ExprListDup(db, pEList, 0); 5170 assert( pOrderBy!=0 || db->mallocFailed ); 5171 if( pOrderBy ) pOrderBy->a[0].fg.sortFlags = sortFlags; 5172 return eRet; 5173 } 5174 5175 /* 5176 ** The select statement passed as the first argument is an aggregate query. 5177 ** The second argument is the associated aggregate-info object. This 5178 ** function tests if the SELECT is of the form: 5179 ** 5180 ** SELECT count(*) FROM <tbl> 5181 ** 5182 ** where table is a database table, not a sub-select or view. If the query 5183 ** does match this pattern, then a pointer to the Table object representing 5184 ** <tbl> is returned. Otherwise, NULL is returned. 5185 ** 5186 ** This routine checks to see if it is safe to use the count optimization. 5187 ** A correct answer is still obtained (though perhaps more slowly) if 5188 ** this routine returns NULL when it could have returned a table pointer. 5189 ** But returning the pointer when NULL should have been returned can 5190 ** result in incorrect answers and/or crashes. So, when in doubt, return NULL. 5191 */ 5192 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ 5193 Table *pTab; 5194 Expr *pExpr; 5195 5196 assert( !p->pGroupBy ); 5197 5198 if( p->pWhere 5199 || p->pEList->nExpr!=1 5200 || p->pSrc->nSrc!=1 5201 || p->pSrc->a[0].pSelect 5202 || pAggInfo->nFunc!=1 5203 || p->pHaving 5204 ){ 5205 return 0; 5206 } 5207 pTab = p->pSrc->a[0].pTab; 5208 assert( pTab!=0 ); 5209 assert( !IsView(pTab) ); 5210 if( !IsOrdinaryTable(pTab) ) return 0; 5211 pExpr = p->pEList->a[0].pExpr; 5212 assert( pExpr!=0 ); 5213 if( pExpr->op!=TK_AGG_FUNCTION ) return 0; 5214 if( pExpr->pAggInfo!=pAggInfo ) return 0; 5215 if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0; 5216 assert( pAggInfo->aFunc[0].pFExpr==pExpr ); 5217 testcase( ExprHasProperty(pExpr, EP_Distinct) ); 5218 testcase( ExprHasProperty(pExpr, EP_WinFunc) ); 5219 if( ExprHasProperty(pExpr, EP_Distinct|EP_WinFunc) ) return 0; 5220 5221 return pTab; 5222 } 5223 5224 /* 5225 ** If the source-list item passed as an argument was augmented with an 5226 ** INDEXED BY clause, then try to locate the specified index. If there 5227 ** was such a clause and the named index cannot be found, return 5228 ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate 5229 ** pFrom->pIndex and return SQLITE_OK. 5230 */ 5231 int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){ 5232 Table *pTab = pFrom->pTab; 5233 char *zIndexedBy = pFrom->u1.zIndexedBy; 5234 Index *pIdx; 5235 assert( pTab!=0 ); 5236 assert( pFrom->fg.isIndexedBy!=0 ); 5237 5238 for(pIdx=pTab->pIndex; 5239 pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy); 5240 pIdx=pIdx->pNext 5241 ); 5242 if( !pIdx ){ 5243 sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0); 5244 pParse->checkSchema = 1; 5245 return SQLITE_ERROR; 5246 } 5247 assert( pFrom->fg.isCte==0 ); 5248 pFrom->u2.pIBIndex = pIdx; 5249 return SQLITE_OK; 5250 } 5251 5252 /* 5253 ** Detect compound SELECT statements that use an ORDER BY clause with 5254 ** an alternative collating sequence. 5255 ** 5256 ** SELECT ... FROM t1 EXCEPT SELECT ... FROM t2 ORDER BY .. COLLATE ... 5257 ** 5258 ** These are rewritten as a subquery: 5259 ** 5260 ** SELECT * FROM (SELECT ... FROM t1 EXCEPT SELECT ... FROM t2) 5261 ** ORDER BY ... COLLATE ... 5262 ** 5263 ** This transformation is necessary because the multiSelectOrderBy() routine 5264 ** above that generates the code for a compound SELECT with an ORDER BY clause 5265 ** uses a merge algorithm that requires the same collating sequence on the 5266 ** result columns as on the ORDER BY clause. See ticket 5267 ** http://www.sqlite.org/src/info/6709574d2a 5268 ** 5269 ** This transformation is only needed for EXCEPT, INTERSECT, and UNION. 5270 ** The UNION ALL operator works fine with multiSelectOrderBy() even when 5271 ** there are COLLATE terms in the ORDER BY. 5272 */ 5273 static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){ 5274 int i; 5275 Select *pNew; 5276 Select *pX; 5277 sqlite3 *db; 5278 struct ExprList_item *a; 5279 SrcList *pNewSrc; 5280 Parse *pParse; 5281 Token dummy; 5282 5283 if( p->pPrior==0 ) return WRC_Continue; 5284 if( p->pOrderBy==0 ) return WRC_Continue; 5285 for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){} 5286 if( pX==0 ) return WRC_Continue; 5287 a = p->pOrderBy->a; 5288 #ifndef SQLITE_OMIT_WINDOWFUNC 5289 /* If iOrderByCol is already non-zero, then it has already been matched 5290 ** to a result column of the SELECT statement. This occurs when the 5291 ** SELECT is rewritten for window-functions processing and then passed 5292 ** to sqlite3SelectPrep() and similar a second time. The rewriting done 5293 ** by this function is not required in this case. */ 5294 if( a[0].u.x.iOrderByCol ) return WRC_Continue; 5295 #endif 5296 for(i=p->pOrderBy->nExpr-1; i>=0; i--){ 5297 if( a[i].pExpr->flags & EP_Collate ) break; 5298 } 5299 if( i<0 ) return WRC_Continue; 5300 5301 /* If we reach this point, that means the transformation is required. */ 5302 5303 pParse = pWalker->pParse; 5304 db = pParse->db; 5305 pNew = sqlite3DbMallocZero(db, sizeof(*pNew) ); 5306 if( pNew==0 ) return WRC_Abort; 5307 memset(&dummy, 0, sizeof(dummy)); 5308 pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0); 5309 if( pNewSrc==0 ) return WRC_Abort; 5310 *pNew = *p; 5311 p->pSrc = pNewSrc; 5312 p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0)); 5313 p->op = TK_SELECT; 5314 p->pWhere = 0; 5315 pNew->pGroupBy = 0; 5316 pNew->pHaving = 0; 5317 pNew->pOrderBy = 0; 5318 p->pPrior = 0; 5319 p->pNext = 0; 5320 p->pWith = 0; 5321 #ifndef SQLITE_OMIT_WINDOWFUNC 5322 p->pWinDefn = 0; 5323 #endif 5324 p->selFlags &= ~SF_Compound; 5325 assert( (p->selFlags & SF_Converted)==0 ); 5326 p->selFlags |= SF_Converted; 5327 assert( pNew->pPrior!=0 ); 5328 pNew->pPrior->pNext = pNew; 5329 pNew->pLimit = 0; 5330 return WRC_Continue; 5331 } 5332 5333 /* 5334 ** Check to see if the FROM clause term pFrom has table-valued function 5335 ** arguments. If it does, leave an error message in pParse and return 5336 ** non-zero, since pFrom is not allowed to be a table-valued function. 5337 */ 5338 static int cannotBeFunction(Parse *pParse, SrcItem *pFrom){ 5339 if( pFrom->fg.isTabFunc ){ 5340 sqlite3ErrorMsg(pParse, "'%s' is not a function", pFrom->zName); 5341 return 1; 5342 } 5343 return 0; 5344 } 5345 5346 #ifndef SQLITE_OMIT_CTE 5347 /* 5348 ** Argument pWith (which may be NULL) points to a linked list of nested 5349 ** WITH contexts, from inner to outermost. If the table identified by 5350 ** FROM clause element pItem is really a common-table-expression (CTE) 5351 ** then return a pointer to the CTE definition for that table. Otherwise 5352 ** return NULL. 5353 ** 5354 ** If a non-NULL value is returned, set *ppContext to point to the With 5355 ** object that the returned CTE belongs to. 5356 */ 5357 static struct Cte *searchWith( 5358 With *pWith, /* Current innermost WITH clause */ 5359 SrcItem *pItem, /* FROM clause element to resolve */ 5360 With **ppContext /* OUT: WITH clause return value belongs to */ 5361 ){ 5362 const char *zName = pItem->zName; 5363 With *p; 5364 assert( pItem->zDatabase==0 ); 5365 assert( zName!=0 ); 5366 for(p=pWith; p; p=p->pOuter){ 5367 int i; 5368 for(i=0; i<p->nCte; i++){ 5369 if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){ 5370 *ppContext = p; 5371 return &p->a[i]; 5372 } 5373 } 5374 if( p->bView ) break; 5375 } 5376 return 0; 5377 } 5378 5379 /* The code generator maintains a stack of active WITH clauses 5380 ** with the inner-most WITH clause being at the top of the stack. 5381 ** 5382 ** This routine pushes the WITH clause passed as the second argument 5383 ** onto the top of the stack. If argument bFree is true, then this 5384 ** WITH clause will never be popped from the stack but should instead 5385 ** be freed along with the Parse object. In other cases, when 5386 ** bFree==0, the With object will be freed along with the SELECT 5387 ** statement with which it is associated. 5388 ** 5389 ** This routine returns a copy of pWith. Or, if bFree is true and 5390 ** the pWith object is destroyed immediately due to an OOM condition, 5391 ** then this routine return NULL. 5392 ** 5393 ** If bFree is true, do not continue to use the pWith pointer after 5394 ** calling this routine, Instead, use only the return value. 5395 */ 5396 With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ 5397 if( pWith ){ 5398 if( bFree ){ 5399 pWith = (With*)sqlite3ParserAddCleanup(pParse, 5400 (void(*)(sqlite3*,void*))sqlite3WithDelete, 5401 pWith); 5402 if( pWith==0 ) return 0; 5403 } 5404 if( pParse->nErr==0 ){ 5405 assert( pParse->pWith!=pWith ); 5406 pWith->pOuter = pParse->pWith; 5407 pParse->pWith = pWith; 5408 } 5409 } 5410 return pWith; 5411 } 5412 5413 /* 5414 ** This function checks if argument pFrom refers to a CTE declared by 5415 ** a WITH clause on the stack currently maintained by the parser (on the 5416 ** pParse->pWith linked list). And if currently processing a CTE 5417 ** CTE expression, through routine checks to see if the reference is 5418 ** a recursive reference to the CTE. 5419 ** 5420 ** If pFrom matches a CTE according to either of these two above, pFrom->pTab 5421 ** and other fields are populated accordingly. 5422 ** 5423 ** Return 0 if no match is found. 5424 ** Return 1 if a match is found. 5425 ** Return 2 if an error condition is detected. 5426 */ 5427 static int resolveFromTermToCte( 5428 Parse *pParse, /* The parsing context */ 5429 Walker *pWalker, /* Current tree walker */ 5430 SrcItem *pFrom /* The FROM clause term to check */ 5431 ){ 5432 Cte *pCte; /* Matched CTE (or NULL if no match) */ 5433 With *pWith; /* The matching WITH */ 5434 5435 assert( pFrom->pTab==0 ); 5436 if( pParse->pWith==0 ){ 5437 /* There are no WITH clauses in the stack. No match is possible */ 5438 return 0; 5439 } 5440 if( pParse->nErr ){ 5441 /* Prior errors might have left pParse->pWith in a goofy state, so 5442 ** go no further. */ 5443 return 0; 5444 } 5445 if( pFrom->zDatabase!=0 ){ 5446 /* The FROM term contains a schema qualifier (ex: main.t1) and so 5447 ** it cannot possibly be a CTE reference. */ 5448 return 0; 5449 } 5450 if( pFrom->fg.notCte ){ 5451 /* The FROM term is specifically excluded from matching a CTE. 5452 ** (1) It is part of a trigger that used to have zDatabase but had 5453 ** zDatabase removed by sqlite3FixTriggerStep(). 5454 ** (2) This is the first term in the FROM clause of an UPDATE. 5455 */ 5456 return 0; 5457 } 5458 pCte = searchWith(pParse->pWith, pFrom, &pWith); 5459 if( pCte ){ 5460 sqlite3 *db = pParse->db; 5461 Table *pTab; 5462 ExprList *pEList; 5463 Select *pSel; 5464 Select *pLeft; /* Left-most SELECT statement */ 5465 Select *pRecTerm; /* Left-most recursive term */ 5466 int bMayRecursive; /* True if compound joined by UNION [ALL] */ 5467 With *pSavedWith; /* Initial value of pParse->pWith */ 5468 int iRecTab = -1; /* Cursor for recursive table */ 5469 CteUse *pCteUse; 5470 5471 /* If pCte->zCteErr is non-NULL at this point, then this is an illegal 5472 ** recursive reference to CTE pCte. Leave an error in pParse and return 5473 ** early. If pCte->zCteErr is NULL, then this is not a recursive reference. 5474 ** In this case, proceed. */ 5475 if( pCte->zCteErr ){ 5476 sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName); 5477 return 2; 5478 } 5479 if( cannotBeFunction(pParse, pFrom) ) return 2; 5480 5481 assert( pFrom->pTab==0 ); 5482 pTab = sqlite3DbMallocZero(db, sizeof(Table)); 5483 if( pTab==0 ) return 2; 5484 pCteUse = pCte->pUse; 5485 if( pCteUse==0 ){ 5486 pCte->pUse = pCteUse = sqlite3DbMallocZero(db, sizeof(pCteUse[0])); 5487 if( pCteUse==0 5488 || sqlite3ParserAddCleanup(pParse,sqlite3DbFree,pCteUse)==0 5489 ){ 5490 sqlite3DbFree(db, pTab); 5491 return 2; 5492 } 5493 pCteUse->eM10d = pCte->eM10d; 5494 } 5495 pFrom->pTab = pTab; 5496 pTab->nTabRef = 1; 5497 pTab->zName = sqlite3DbStrDup(db, pCte->zName); 5498 pTab->iPKey = -1; 5499 pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); 5500 pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; 5501 pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0); 5502 if( db->mallocFailed ) return 2; 5503 pFrom->pSelect->selFlags |= SF_CopyCte; 5504 assert( pFrom->pSelect ); 5505 if( pFrom->fg.isIndexedBy ){ 5506 sqlite3ErrorMsg(pParse, "no such index: \"%s\"", pFrom->u1.zIndexedBy); 5507 return 2; 5508 } 5509 pFrom->fg.isCte = 1; 5510 pFrom->u2.pCteUse = pCteUse; 5511 pCteUse->nUse++; 5512 if( pCteUse->nUse>=2 && pCteUse->eM10d==M10d_Any ){ 5513 pCteUse->eM10d = M10d_Yes; 5514 } 5515 5516 /* Check if this is a recursive CTE. */ 5517 pRecTerm = pSel = pFrom->pSelect; 5518 bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION ); 5519 while( bMayRecursive && pRecTerm->op==pSel->op ){ 5520 int i; 5521 SrcList *pSrc = pRecTerm->pSrc; 5522 assert( pRecTerm->pPrior!=0 ); 5523 for(i=0; i<pSrc->nSrc; i++){ 5524 SrcItem *pItem = &pSrc->a[i]; 5525 if( pItem->zDatabase==0 5526 && pItem->zName!=0 5527 && 0==sqlite3StrICmp(pItem->zName, pCte->zName) 5528 ){ 5529 pItem->pTab = pTab; 5530 pTab->nTabRef++; 5531 pItem->fg.isRecursive = 1; 5532 if( pRecTerm->selFlags & SF_Recursive ){ 5533 sqlite3ErrorMsg(pParse, 5534 "multiple references to recursive table: %s", pCte->zName 5535 ); 5536 return 2; 5537 } 5538 pRecTerm->selFlags |= SF_Recursive; 5539 if( iRecTab<0 ) iRecTab = pParse->nTab++; 5540 pItem->iCursor = iRecTab; 5541 } 5542 } 5543 if( (pRecTerm->selFlags & SF_Recursive)==0 ) break; 5544 pRecTerm = pRecTerm->pPrior; 5545 } 5546 5547 pCte->zCteErr = "circular reference: %s"; 5548 pSavedWith = pParse->pWith; 5549 pParse->pWith = pWith; 5550 if( pSel->selFlags & SF_Recursive ){ 5551 int rc; 5552 assert( pRecTerm!=0 ); 5553 assert( (pRecTerm->selFlags & SF_Recursive)==0 ); 5554 assert( pRecTerm->pNext!=0 ); 5555 assert( (pRecTerm->pNext->selFlags & SF_Recursive)!=0 ); 5556 assert( pRecTerm->pWith==0 ); 5557 pRecTerm->pWith = pSel->pWith; 5558 rc = sqlite3WalkSelect(pWalker, pRecTerm); 5559 pRecTerm->pWith = 0; 5560 if( rc ){ 5561 pParse->pWith = pSavedWith; 5562 return 2; 5563 } 5564 }else{ 5565 if( sqlite3WalkSelect(pWalker, pSel) ){ 5566 pParse->pWith = pSavedWith; 5567 return 2; 5568 } 5569 } 5570 pParse->pWith = pWith; 5571 5572 for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior); 5573 pEList = pLeft->pEList; 5574 if( pCte->pCols ){ 5575 if( pEList && pEList->nExpr!=pCte->pCols->nExpr ){ 5576 sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns", 5577 pCte->zName, pEList->nExpr, pCte->pCols->nExpr 5578 ); 5579 pParse->pWith = pSavedWith; 5580 return 2; 5581 } 5582 pEList = pCte->pCols; 5583 } 5584 5585 sqlite3ColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol); 5586 if( bMayRecursive ){ 5587 if( pSel->selFlags & SF_Recursive ){ 5588 pCte->zCteErr = "multiple recursive references: %s"; 5589 }else{ 5590 pCte->zCteErr = "recursive reference in a subquery: %s"; 5591 } 5592 sqlite3WalkSelect(pWalker, pSel); 5593 } 5594 pCte->zCteErr = 0; 5595 pParse->pWith = pSavedWith; 5596 return 1; /* Success */ 5597 } 5598 return 0; /* No match */ 5599 } 5600 #endif 5601 5602 #ifndef SQLITE_OMIT_CTE 5603 /* 5604 ** If the SELECT passed as the second argument has an associated WITH 5605 ** clause, pop it from the stack stored as part of the Parse object. 5606 ** 5607 ** This function is used as the xSelectCallback2() callback by 5608 ** sqlite3SelectExpand() when walking a SELECT tree to resolve table 5609 ** names and other FROM clause elements. 5610 */ 5611 void sqlite3SelectPopWith(Walker *pWalker, Select *p){ 5612 Parse *pParse = pWalker->pParse; 5613 if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){ 5614 With *pWith = findRightmost(p)->pWith; 5615 if( pWith!=0 ){ 5616 assert( pParse->pWith==pWith || pParse->nErr ); 5617 pParse->pWith = pWith->pOuter; 5618 } 5619 } 5620 } 5621 #endif 5622 5623 /* 5624 ** The SrcItem structure passed as the second argument represents a 5625 ** sub-query in the FROM clause of a SELECT statement. This function 5626 ** allocates and populates the SrcItem.pTab object. If successful, 5627 ** SQLITE_OK is returned. Otherwise, if an OOM error is encountered, 5628 ** SQLITE_NOMEM. 5629 */ 5630 int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){ 5631 Select *pSel = pFrom->pSelect; 5632 Table *pTab; 5633 5634 assert( pSel ); 5635 pFrom->pTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table)); 5636 if( pTab==0 ) return SQLITE_NOMEM; 5637 pTab->nTabRef = 1; 5638 if( pFrom->zAlias ){ 5639 pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias); 5640 }else{ 5641 pTab->zName = sqlite3MPrintf(pParse->db, "%!S", pFrom); 5642 } 5643 while( pSel->pPrior ){ pSel = pSel->pPrior; } 5644 sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); 5645 pTab->iPKey = -1; 5646 pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); 5647 #ifndef SQLITE_ALLOW_ROWID_IN_VIEW 5648 /* The usual case - do not allow ROWID on a subquery */ 5649 pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; 5650 #else 5651 pTab->tabFlags |= TF_Ephemeral; /* Legacy compatibility mode */ 5652 #endif 5653 return pParse->nErr ? SQLITE_ERROR : SQLITE_OK; 5654 } 5655 5656 5657 /* 5658 ** Check the N SrcItem objects to the right of pBase. (N might be zero!) 5659 ** If any of those SrcItem objects have a USING clause containing zName 5660 ** then return true. 5661 ** 5662 ** If N is zero, or none of the N SrcItem objects to the right of pBase 5663 ** contains a USING clause, or if none of the USING clauses contain zName, 5664 ** then return false. 5665 */ 5666 static int inAnyUsingClause( 5667 const char *zName, /* Name we are looking for */ 5668 SrcItem *pBase, /* The base SrcItem. Looking at pBase[1] and following */ 5669 int N /* How many SrcItems to check */ 5670 ){ 5671 while( N>0 ){ 5672 N--; 5673 pBase++; 5674 if( pBase->fg.isUsing==0 ) continue; 5675 if( NEVER(pBase->u3.pUsing==0) ) continue; 5676 if( sqlite3IdListIndex(pBase->u3.pUsing, zName)>=0 ) return 1; 5677 } 5678 return 0; 5679 } 5680 5681 5682 /* 5683 ** This routine is a Walker callback for "expanding" a SELECT statement. 5684 ** "Expanding" means to do the following: 5685 ** 5686 ** (1) Make sure VDBE cursor numbers have been assigned to every 5687 ** element of the FROM clause. 5688 ** 5689 ** (2) Fill in the pTabList->a[].pTab fields in the SrcList that 5690 ** defines FROM clause. When views appear in the FROM clause, 5691 ** fill pTabList->a[].pSelect with a copy of the SELECT statement 5692 ** that implements the view. A copy is made of the view's SELECT 5693 ** statement so that we can freely modify or delete that statement 5694 ** without worrying about messing up the persistent representation 5695 ** of the view. 5696 ** 5697 ** (3) Add terms to the WHERE clause to accommodate the NATURAL keyword 5698 ** on joins and the ON and USING clause of joins. 5699 ** 5700 ** (4) Scan the list of columns in the result set (pEList) looking 5701 ** for instances of the "*" operator or the TABLE.* operator. 5702 ** If found, expand each "*" to be every column in every table 5703 ** and TABLE.* to be every column in TABLE. 5704 ** 5705 */ 5706 static int selectExpander(Walker *pWalker, Select *p){ 5707 Parse *pParse = pWalker->pParse; 5708 int i, j, k, rc; 5709 SrcList *pTabList; 5710 ExprList *pEList; 5711 SrcItem *pFrom; 5712 sqlite3 *db = pParse->db; 5713 Expr *pE, *pRight, *pExpr; 5714 u16 selFlags = p->selFlags; 5715 u32 elistFlags = 0; 5716 5717 p->selFlags |= SF_Expanded; 5718 if( db->mallocFailed ){ 5719 return WRC_Abort; 5720 } 5721 assert( p->pSrc!=0 ); 5722 if( (selFlags & SF_Expanded)!=0 ){ 5723 return WRC_Prune; 5724 } 5725 if( pWalker->eCode ){ 5726 /* Renumber selId because it has been copied from a view */ 5727 p->selId = ++pParse->nSelect; 5728 } 5729 pTabList = p->pSrc; 5730 pEList = p->pEList; 5731 if( pParse->pWith && (p->selFlags & SF_View) ){ 5732 if( p->pWith==0 ){ 5733 p->pWith = (With*)sqlite3DbMallocZero(db, sizeof(With)); 5734 if( p->pWith==0 ){ 5735 return WRC_Abort; 5736 } 5737 } 5738 p->pWith->bView = 1; 5739 } 5740 sqlite3WithPush(pParse, p->pWith, 0); 5741 5742 /* Make sure cursor numbers have been assigned to all entries in 5743 ** the FROM clause of the SELECT statement. 5744 */ 5745 sqlite3SrcListAssignCursors(pParse, pTabList); 5746 5747 /* Look up every table named in the FROM clause of the select. If 5748 ** an entry of the FROM clause is a subquery instead of a table or view, 5749 ** then create a transient table structure to describe the subquery. 5750 */ 5751 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ 5752 Table *pTab; 5753 assert( pFrom->fg.isRecursive==0 || pFrom->pTab!=0 ); 5754 if( pFrom->pTab ) continue; 5755 assert( pFrom->fg.isRecursive==0 ); 5756 if( pFrom->zName==0 ){ 5757 #ifndef SQLITE_OMIT_SUBQUERY 5758 Select *pSel = pFrom->pSelect; 5759 /* A sub-query in the FROM clause of a SELECT */ 5760 assert( pSel!=0 ); 5761 assert( pFrom->pTab==0 ); 5762 if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort; 5763 if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort; 5764 #endif 5765 #ifndef SQLITE_OMIT_CTE 5766 }else if( (rc = resolveFromTermToCte(pParse, pWalker, pFrom))!=0 ){ 5767 if( rc>1 ) return WRC_Abort; 5768 pTab = pFrom->pTab; 5769 assert( pTab!=0 ); 5770 #endif 5771 }else{ 5772 /* An ordinary table or view name in the FROM clause */ 5773 assert( pFrom->pTab==0 ); 5774 pFrom->pTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom); 5775 if( pTab==0 ) return WRC_Abort; 5776 if( pTab->nTabRef>=0xffff ){ 5777 sqlite3ErrorMsg(pParse, "too many references to \"%s\": max 65535", 5778 pTab->zName); 5779 pFrom->pTab = 0; 5780 return WRC_Abort; 5781 } 5782 pTab->nTabRef++; 5783 if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){ 5784 return WRC_Abort; 5785 } 5786 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) 5787 if( !IsOrdinaryTable(pTab) ){ 5788 i16 nCol; 5789 u8 eCodeOrig = pWalker->eCode; 5790 if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; 5791 assert( pFrom->pSelect==0 ); 5792 if( IsView(pTab) ){ 5793 if( (db->flags & SQLITE_EnableView)==0 5794 && pTab->pSchema!=db->aDb[1].pSchema 5795 ){ 5796 sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited", 5797 pTab->zName); 5798 } 5799 pFrom->pSelect = sqlite3SelectDup(db, pTab->u.view.pSelect, 0); 5800 } 5801 #ifndef SQLITE_OMIT_VIRTUALTABLE 5802 else if( ALWAYS(IsVirtual(pTab)) 5803 && pFrom->fg.fromDDL 5804 && ALWAYS(pTab->u.vtab.p!=0) 5805 && pTab->u.vtab.p->eVtabRisk > ((db->flags & SQLITE_TrustedSchema)!=0) 5806 ){ 5807 sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", 5808 pTab->zName); 5809 } 5810 assert( SQLITE_VTABRISK_Normal==1 && SQLITE_VTABRISK_High==2 ); 5811 #endif 5812 nCol = pTab->nCol; 5813 pTab->nCol = -1; 5814 pWalker->eCode = 1; /* Turn on Select.selId renumbering */ 5815 sqlite3WalkSelect(pWalker, pFrom->pSelect); 5816 pWalker->eCode = eCodeOrig; 5817 pTab->nCol = nCol; 5818 } 5819 #endif 5820 } 5821 5822 /* Locate the index named by the INDEXED BY clause, if any. */ 5823 if( pFrom->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pFrom) ){ 5824 return WRC_Abort; 5825 } 5826 } 5827 5828 /* Process NATURAL keywords, and ON and USING clauses of joins. 5829 */ 5830 assert( db->mallocFailed==0 || pParse->nErr!=0 ); 5831 if( pParse->nErr || sqlite3ProcessJoin(pParse, p) ){ 5832 return WRC_Abort; 5833 } 5834 5835 /* For every "*" that occurs in the column list, insert the names of 5836 ** all columns in all tables. And for every TABLE.* insert the names 5837 ** of all columns in TABLE. The parser inserted a special expression 5838 ** with the TK_ASTERISK operator for each "*" that it found in the column 5839 ** list. The following code just has to locate the TK_ASTERISK 5840 ** expressions and expand each one to the list of all columns in 5841 ** all tables. 5842 ** 5843 ** The first loop just checks to see if there are any "*" operators 5844 ** that need expanding. 5845 */ 5846 for(k=0; k<pEList->nExpr; k++){ 5847 pE = pEList->a[k].pExpr; 5848 if( pE->op==TK_ASTERISK ) break; 5849 assert( pE->op!=TK_DOT || pE->pRight!=0 ); 5850 assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); 5851 if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break; 5852 elistFlags |= pE->flags; 5853 } 5854 if( k<pEList->nExpr ){ 5855 /* 5856 ** If we get here it means the result set contains one or more "*" 5857 ** operators that need to be expanded. Loop through each expression 5858 ** in the result set and expand them one by one. 5859 */ 5860 struct ExprList_item *a = pEList->a; 5861 ExprList *pNew = 0; 5862 int flags = pParse->db->flags; 5863 int longNames = (flags & SQLITE_FullColNames)!=0 5864 && (flags & SQLITE_ShortColNames)==0; 5865 5866 for(k=0; k<pEList->nExpr; k++){ 5867 pE = a[k].pExpr; 5868 elistFlags |= pE->flags; 5869 pRight = pE->pRight; 5870 assert( pE->op!=TK_DOT || pRight!=0 ); 5871 if( pE->op!=TK_ASTERISK 5872 && (pE->op!=TK_DOT || pRight->op!=TK_ASTERISK) 5873 ){ 5874 /* This particular expression does not need to be expanded. 5875 */ 5876 pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr); 5877 if( pNew ){ 5878 pNew->a[pNew->nExpr-1].zEName = a[k].zEName; 5879 pNew->a[pNew->nExpr-1].fg.eEName = a[k].fg.eEName; 5880 a[k].zEName = 0; 5881 } 5882 a[k].pExpr = 0; 5883 }else{ 5884 /* This expression is a "*" or a "TABLE.*" and needs to be 5885 ** expanded. */ 5886 int tableSeen = 0; /* Set to 1 when TABLE matches */ 5887 char *zTName = 0; /* text of name of TABLE */ 5888 if( pE->op==TK_DOT ){ 5889 assert( pE->pLeft!=0 ); 5890 assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); 5891 zTName = pE->pLeft->u.zToken; 5892 } 5893 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ 5894 Table *pTab = pFrom->pTab; /* Table for this data source */ 5895 ExprList *pNestedFrom; /* Result-set of a nested FROM clause */ 5896 char *zTabName; /* AS name for this data source */ 5897 const char *zSchemaName = 0; /* Schema name for this data source */ 5898 int iDb; /* Schema index for this data src */ 5899 IdList *pUsing; /* USING clause for pFrom[1] */ 5900 5901 if( (zTabName = pFrom->zAlias)==0 ){ 5902 zTabName = pTab->zName; 5903 } 5904 if( db->mallocFailed ) break; 5905 assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); 5906 if( pFrom->fg.isNestedFrom ){ 5907 assert( pFrom->pSelect!=0 ); 5908 pNestedFrom = pFrom->pSelect->pEList; 5909 assert( pNestedFrom!=0 ); 5910 assert( pNestedFrom->nExpr==pTab->nCol ); 5911 }else{ 5912 if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ 5913 continue; 5914 } 5915 pNestedFrom = 0; 5916 iDb = sqlite3SchemaToIndex(db, pTab->pSchema); 5917 zSchemaName = iDb>=0 ? db->aDb[iDb].zDbSName : "*"; 5918 } 5919 if( i+1<pTabList->nSrc 5920 && pFrom[1].fg.isUsing 5921 && (selFlags & SF_NestedFrom)!=0 5922 ){ 5923 int ii; 5924 pUsing = pFrom[1].u3.pUsing; 5925 for(ii=0; ii<pUsing->nId; ii++){ 5926 const char *zUName = pUsing->a[ii].zName; 5927 pRight = sqlite3Expr(db, TK_ID, zUName); 5928 pNew = sqlite3ExprListAppend(pParse, pNew, pRight); 5929 if( pNew ){ 5930 struct ExprList_item *pX = &pNew->a[pNew->nExpr-1]; 5931 assert( pX->zEName==0 ); 5932 pX->zEName = sqlite3MPrintf(db,"..%s", zUName); 5933 pX->fg.eEName = ENAME_TAB; 5934 pX->fg.bUsingTerm = 1; 5935 } 5936 } 5937 }else{ 5938 pUsing = 0; 5939 } 5940 for(j=0; j<pTab->nCol; j++){ 5941 char *zName = pTab->aCol[j].zCnName; 5942 struct ExprList_item *pX; /* Newly added ExprList term */ 5943 5944 assert( zName ); 5945 if( zTName 5946 && pNestedFrom 5947 && sqlite3MatchEName(&pNestedFrom->a[j], 0, zTName, 0)==0 5948 ){ 5949 continue; 5950 } 5951 5952 /* If a column is marked as 'hidden', omit it from the expanded 5953 ** result-set list unless the SELECT has the SF_IncludeHidden 5954 ** bit set. 5955 */ 5956 if( (p->selFlags & SF_IncludeHidden)==0 5957 && IsHiddenColumn(&pTab->aCol[j]) 5958 ){ 5959 continue; 5960 } 5961 if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 5962 && zTName==0 5963 && (selFlags & (SF_NestedFrom))==0 5964 ){ 5965 continue; 5966 } 5967 tableSeen = 1; 5968 5969 if( i>0 && zTName==0 && (selFlags & SF_NestedFrom)==0 ){ 5970 if( pFrom->fg.isUsing 5971 && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0 5972 ){ 5973 /* In a join with a USING clause, omit columns in the 5974 ** using clause from the table on the right. */ 5975 continue; 5976 } 5977 } 5978 pRight = sqlite3Expr(db, TK_ID, zName); 5979 if( (pTabList->nSrc>1 5980 && ( (pFrom->fg.jointype & JT_LTORJ)==0 5981 || (selFlags & SF_NestedFrom)!=0 5982 || !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1) 5983 ) 5984 ) 5985 || IN_RENAME_OBJECT 5986 ){ 5987 Expr *pLeft; 5988 pLeft = sqlite3Expr(db, TK_ID, zTabName); 5989 pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); 5990 if( IN_RENAME_OBJECT && pE->pLeft ){ 5991 sqlite3RenameTokenRemap(pParse, pLeft, pE->pLeft); 5992 } 5993 if( zSchemaName ){ 5994 pLeft = sqlite3Expr(db, TK_ID, zSchemaName); 5995 pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr); 5996 } 5997 }else{ 5998 pExpr = pRight; 5999 } 6000 pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); 6001 if( pNew==0 ){ 6002 break; /* OOM */ 6003 } 6004 pX = &pNew->a[pNew->nExpr-1]; 6005 assert( pX->zEName==0 ); 6006 if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ 6007 if( pNestedFrom ){ 6008 pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName); 6009 testcase( pX->zEName==0 ); 6010 }else{ 6011 pX->zEName = sqlite3MPrintf(db, "%s.%s.%s", 6012 zSchemaName, zTabName, zName); 6013 testcase( pX->zEName==0 ); 6014 } 6015 pX->fg.eEName = ENAME_TAB; 6016 if( (pFrom->fg.isUsing 6017 && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0) 6018 || (pUsing && sqlite3IdListIndex(pUsing, zName)>=0) 6019 || (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 6020 ){ 6021 pX->fg.bNoExpand = 1; 6022 } 6023 }else if( longNames ){ 6024 pX->zEName = sqlite3MPrintf(db, "%s.%s", zTabName, zName); 6025 pX->fg.eEName = ENAME_NAME; 6026 }else{ 6027 pX->zEName = sqlite3DbStrDup(db, zName); 6028 pX->fg.eEName = ENAME_NAME; 6029 } 6030 } 6031 } 6032 if( !tableSeen ){ 6033 if( zTName ){ 6034 sqlite3ErrorMsg(pParse, "no such table: %s", zTName); 6035 }else{ 6036 sqlite3ErrorMsg(pParse, "no tables specified"); 6037 } 6038 } 6039 } 6040 } 6041 sqlite3ExprListDelete(db, pEList); 6042 p->pEList = pNew; 6043 } 6044 if( p->pEList ){ 6045 if( p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ 6046 sqlite3ErrorMsg(pParse, "too many columns in result set"); 6047 return WRC_Abort; 6048 } 6049 if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){ 6050 p->selFlags |= SF_ComplexResult; 6051 } 6052 } 6053 #if TREETRACE_ENABLED 6054 if( sqlite3TreeTrace & 0x100 ){ 6055 SELECTTRACE(0x100,pParse,p,("After result-set wildcard expansion:\n")); 6056 sqlite3TreeViewSelect(0, p, 0); 6057 } 6058 #endif 6059 return WRC_Continue; 6060 } 6061 6062 #if SQLITE_DEBUG 6063 /* 6064 ** Always assert. This xSelectCallback2 implementation proves that the 6065 ** xSelectCallback2 is never invoked. 6066 */ 6067 void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){ 6068 UNUSED_PARAMETER2(NotUsed, NotUsed2); 6069 assert( 0 ); 6070 } 6071 #endif 6072 /* 6073 ** This routine "expands" a SELECT statement and all of its subqueries. 6074 ** For additional information on what it means to "expand" a SELECT 6075 ** statement, see the comment on the selectExpand worker callback above. 6076 ** 6077 ** Expanding a SELECT statement is the first step in processing a 6078 ** SELECT statement. The SELECT statement must be expanded before 6079 ** name resolution is performed. 6080 ** 6081 ** If anything goes wrong, an error message is written into pParse. 6082 ** The calling function can detect the problem by looking at pParse->nErr 6083 ** and/or pParse->db->mallocFailed. 6084 */ 6085 static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ 6086 Walker w; 6087 w.xExprCallback = sqlite3ExprWalkNoop; 6088 w.pParse = pParse; 6089 if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){ 6090 w.xSelectCallback = convertCompoundSelectToSubquery; 6091 w.xSelectCallback2 = 0; 6092 sqlite3WalkSelect(&w, pSelect); 6093 } 6094 w.xSelectCallback = selectExpander; 6095 w.xSelectCallback2 = sqlite3SelectPopWith; 6096 w.eCode = 0; 6097 sqlite3WalkSelect(&w, pSelect); 6098 } 6099 6100 6101 #ifndef SQLITE_OMIT_SUBQUERY 6102 /* 6103 ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo() 6104 ** interface. 6105 ** 6106 ** For each FROM-clause subquery, add Column.zType and Column.zColl 6107 ** information to the Table structure that represents the result set 6108 ** of that subquery. 6109 ** 6110 ** The Table structure that represents the result set was constructed 6111 ** by selectExpander() but the type and collation information was omitted 6112 ** at that point because identifiers had not yet been resolved. This 6113 ** routine is called after identifier resolution. 6114 */ 6115 static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ 6116 Parse *pParse; 6117 int i; 6118 SrcList *pTabList; 6119 SrcItem *pFrom; 6120 6121 assert( p->selFlags & SF_Resolved ); 6122 if( p->selFlags & SF_HasTypeInfo ) return; 6123 p->selFlags |= SF_HasTypeInfo; 6124 pParse = pWalker->pParse; 6125 pTabList = p->pSrc; 6126 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ 6127 Table *pTab = pFrom->pTab; 6128 assert( pTab!=0 ); 6129 if( (pTab->tabFlags & TF_Ephemeral)!=0 ){ 6130 /* A sub-query in the FROM clause of a SELECT */ 6131 Select *pSel = pFrom->pSelect; 6132 if( pSel ){ 6133 while( pSel->pPrior ) pSel = pSel->pPrior; 6134 sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel, 6135 SQLITE_AFF_NONE); 6136 } 6137 } 6138 } 6139 } 6140 #endif 6141 6142 6143 /* 6144 ** This routine adds datatype and collating sequence information to 6145 ** the Table structures of all FROM-clause subqueries in a 6146 ** SELECT statement. 6147 ** 6148 ** Use this routine after name resolution. 6149 */ 6150 static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){ 6151 #ifndef SQLITE_OMIT_SUBQUERY 6152 Walker w; 6153 w.xSelectCallback = sqlite3SelectWalkNoop; 6154 w.xSelectCallback2 = selectAddSubqueryTypeInfo; 6155 w.xExprCallback = sqlite3ExprWalkNoop; 6156 w.pParse = pParse; 6157 sqlite3WalkSelect(&w, pSelect); 6158 #endif 6159 } 6160 6161 6162 /* 6163 ** This routine sets up a SELECT statement for processing. The 6164 ** following is accomplished: 6165 ** 6166 ** * VDBE Cursor numbers are assigned to all FROM-clause terms. 6167 ** * Ephemeral Table objects are created for all FROM-clause subqueries. 6168 ** * ON and USING clauses are shifted into WHERE statements 6169 ** * Wildcards "*" and "TABLE.*" in result sets are expanded. 6170 ** * Identifiers in expression are matched to tables. 6171 ** 6172 ** This routine acts recursively on all subqueries within the SELECT. 6173 */ 6174 void sqlite3SelectPrep( 6175 Parse *pParse, /* The parser context */ 6176 Select *p, /* The SELECT statement being coded. */ 6177 NameContext *pOuterNC /* Name context for container */ 6178 ){ 6179 assert( p!=0 || pParse->db->mallocFailed ); 6180 assert( pParse->db->pParse==pParse ); 6181 if( pParse->db->mallocFailed ) return; 6182 if( p->selFlags & SF_HasTypeInfo ) return; 6183 sqlite3SelectExpand(pParse, p); 6184 if( pParse->nErr ) return; 6185 sqlite3ResolveSelectNames(pParse, p, pOuterNC); 6186 if( pParse->nErr ) return; 6187 sqlite3SelectAddTypeInfo(pParse, p); 6188 } 6189 6190 /* 6191 ** Reset the aggregate accumulator. 6192 ** 6193 ** The aggregate accumulator is a set of memory cells that hold 6194 ** intermediate results while calculating an aggregate. This 6195 ** routine generates code that stores NULLs in all of those memory 6196 ** cells. 6197 */ 6198 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ 6199 Vdbe *v = pParse->pVdbe; 6200 int i; 6201 struct AggInfo_func *pFunc; 6202 int nReg = pAggInfo->nFunc + pAggInfo->nColumn; 6203 assert( pParse->db->pParse==pParse ); 6204 assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); 6205 if( nReg==0 ) return; 6206 if( pParse->nErr ) return; 6207 #ifdef SQLITE_DEBUG 6208 /* Verify that all AggInfo registers are within the range specified by 6209 ** AggInfo.mnReg..AggInfo.mxReg */ 6210 assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 ); 6211 for(i=0; i<pAggInfo->nColumn; i++){ 6212 assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg 6213 && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg ); 6214 } 6215 for(i=0; i<pAggInfo->nFunc; i++){ 6216 assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg 6217 && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg ); 6218 } 6219 #endif 6220 sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg); 6221 for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){ 6222 if( pFunc->iDistinct>=0 ){ 6223 Expr *pE = pFunc->pFExpr; 6224 assert( ExprUseXList(pE) ); 6225 if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){ 6226 sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one " 6227 "argument"); 6228 pFunc->iDistinct = -1; 6229 }else{ 6230 KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0); 6231 pFunc->iDistAddr = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 6232 pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO); 6233 ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(DISTINCT)", 6234 pFunc->pFunc->zName)); 6235 } 6236 } 6237 } 6238 } 6239 6240 /* 6241 ** Invoke the OP_AggFinalize opcode for every aggregate function 6242 ** in the AggInfo structure. 6243 */ 6244 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ 6245 Vdbe *v = pParse->pVdbe; 6246 int i; 6247 struct AggInfo_func *pF; 6248 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ 6249 ExprList *pList; 6250 assert( ExprUseXList(pF->pFExpr) ); 6251 pList = pF->pFExpr->x.pList; 6252 sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0); 6253 sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); 6254 } 6255 } 6256 6257 6258 /* 6259 ** Update the accumulator memory cells for an aggregate based on 6260 ** the current cursor position. 6261 ** 6262 ** If regAcc is non-zero and there are no min() or max() aggregates 6263 ** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator 6264 ** registers if register regAcc contains 0. The caller will take care 6265 ** of setting and clearing regAcc. 6266 */ 6267 static void updateAccumulator( 6268 Parse *pParse, 6269 int regAcc, 6270 AggInfo *pAggInfo, 6271 int eDistinctType 6272 ){ 6273 Vdbe *v = pParse->pVdbe; 6274 int i; 6275 int regHit = 0; 6276 int addrHitTest = 0; 6277 struct AggInfo_func *pF; 6278 struct AggInfo_col *pC; 6279 6280 pAggInfo->directMode = 1; 6281 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ 6282 int nArg; 6283 int addrNext = 0; 6284 int regAgg; 6285 ExprList *pList; 6286 assert( ExprUseXList(pF->pFExpr) ); 6287 assert( !IsWindowFunc(pF->pFExpr) ); 6288 pList = pF->pFExpr->x.pList; 6289 if( ExprHasProperty(pF->pFExpr, EP_WinFunc) ){ 6290 Expr *pFilter = pF->pFExpr->y.pWin->pFilter; 6291 if( pAggInfo->nAccumulator 6292 && (pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL) 6293 && regAcc 6294 ){ 6295 /* If regAcc==0, there there exists some min() or max() function 6296 ** without a FILTER clause that will ensure the magnet registers 6297 ** are populated. */ 6298 if( regHit==0 ) regHit = ++pParse->nMem; 6299 /* If this is the first row of the group (regAcc contains 0), clear the 6300 ** "magnet" register regHit so that the accumulator registers 6301 ** are populated if the FILTER clause jumps over the the 6302 ** invocation of min() or max() altogether. Or, if this is not 6303 ** the first row (regAcc contains 1), set the magnet register so that 6304 ** the accumulators are not populated unless the min()/max() is invoked 6305 ** and indicates that they should be. */ 6306 sqlite3VdbeAddOp2(v, OP_Copy, regAcc, regHit); 6307 } 6308 addrNext = sqlite3VdbeMakeLabel(pParse); 6309 sqlite3ExprIfFalse(pParse, pFilter, addrNext, SQLITE_JUMPIFNULL); 6310 } 6311 if( pList ){ 6312 nArg = pList->nExpr; 6313 regAgg = sqlite3GetTempRange(pParse, nArg); 6314 sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP); 6315 }else{ 6316 nArg = 0; 6317 regAgg = 0; 6318 } 6319 if( pF->iDistinct>=0 && pList ){ 6320 if( addrNext==0 ){ 6321 addrNext = sqlite3VdbeMakeLabel(pParse); 6322 } 6323 pF->iDistinct = codeDistinct(pParse, eDistinctType, 6324 pF->iDistinct, addrNext, pList, regAgg); 6325 } 6326 if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ 6327 CollSeq *pColl = 0; 6328 struct ExprList_item *pItem; 6329 int j; 6330 assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ 6331 for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){ 6332 pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr); 6333 } 6334 if( !pColl ){ 6335 pColl = pParse->db->pDfltColl; 6336 } 6337 if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; 6338 sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); 6339 } 6340 sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem); 6341 sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); 6342 sqlite3VdbeChangeP5(v, (u8)nArg); 6343 sqlite3ReleaseTempRange(pParse, regAgg, nArg); 6344 if( addrNext ){ 6345 sqlite3VdbeResolveLabel(v, addrNext); 6346 } 6347 } 6348 if( regHit==0 && pAggInfo->nAccumulator ){ 6349 regHit = regAcc; 6350 } 6351 if( regHit ){ 6352 addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v); 6353 } 6354 for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){ 6355 sqlite3ExprCode(pParse, pC->pCExpr, pC->iMem); 6356 } 6357 6358 pAggInfo->directMode = 0; 6359 if( addrHitTest ){ 6360 sqlite3VdbeJumpHereOrPopInst(v, addrHitTest); 6361 } 6362 } 6363 6364 /* 6365 ** Add a single OP_Explain instruction to the VDBE to explain a simple 6366 ** count(*) query ("SELECT count(*) FROM pTab"). 6367 */ 6368 #ifndef SQLITE_OMIT_EXPLAIN 6369 static void explainSimpleCount( 6370 Parse *pParse, /* Parse context */ 6371 Table *pTab, /* Table being queried */ 6372 Index *pIdx /* Index used to optimize scan, or NULL */ 6373 ){ 6374 if( pParse->explain==2 ){ 6375 int bCover = (pIdx!=0 && (HasRowid(pTab) || !IsPrimaryKeyIndex(pIdx))); 6376 sqlite3VdbeExplain(pParse, 0, "SCAN %s%s%s", 6377 pTab->zName, 6378 bCover ? " USING COVERING INDEX " : "", 6379 bCover ? pIdx->zName : "" 6380 ); 6381 } 6382 } 6383 #else 6384 # define explainSimpleCount(a,b,c) 6385 #endif 6386 6387 /* 6388 ** sqlite3WalkExpr() callback used by havingToWhere(). 6389 ** 6390 ** If the node passed to the callback is a TK_AND node, return 6391 ** WRC_Continue to tell sqlite3WalkExpr() to iterate through child nodes. 6392 ** 6393 ** Otherwise, return WRC_Prune. In this case, also check if the 6394 ** sub-expression matches the criteria for being moved to the WHERE 6395 ** clause. If so, add it to the WHERE clause and replace the sub-expression 6396 ** within the HAVING expression with a constant "1". 6397 */ 6398 static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){ 6399 if( pExpr->op!=TK_AND ){ 6400 Select *pS = pWalker->u.pSelect; 6401 /* This routine is called before the HAVING clause of the current 6402 ** SELECT is analyzed for aggregates. So if pExpr->pAggInfo is set 6403 ** here, it indicates that the expression is a correlated reference to a 6404 ** column from an outer aggregate query, or an aggregate function that 6405 ** belongs to an outer query. Do not move the expression to the WHERE 6406 ** clause in this obscure case, as doing so may corrupt the outer Select 6407 ** statements AggInfo structure. */ 6408 if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy) 6409 && ExprAlwaysFalse(pExpr)==0 6410 && pExpr->pAggInfo==0 6411 ){ 6412 sqlite3 *db = pWalker->pParse->db; 6413 Expr *pNew = sqlite3Expr(db, TK_INTEGER, "1"); 6414 if( pNew ){ 6415 Expr *pWhere = pS->pWhere; 6416 SWAP(Expr, *pNew, *pExpr); 6417 pNew = sqlite3ExprAnd(pWalker->pParse, pWhere, pNew); 6418 pS->pWhere = pNew; 6419 pWalker->eCode = 1; 6420 } 6421 } 6422 return WRC_Prune; 6423 } 6424 return WRC_Continue; 6425 } 6426 6427 /* 6428 ** Transfer eligible terms from the HAVING clause of a query, which is 6429 ** processed after grouping, to the WHERE clause, which is processed before 6430 ** grouping. For example, the query: 6431 ** 6432 ** SELECT * FROM <tables> WHERE a=? GROUP BY b HAVING b=? AND c=? 6433 ** 6434 ** can be rewritten as: 6435 ** 6436 ** SELECT * FROM <tables> WHERE a=? AND b=? GROUP BY b HAVING c=? 6437 ** 6438 ** A term of the HAVING expression is eligible for transfer if it consists 6439 ** entirely of constants and expressions that are also GROUP BY terms that 6440 ** use the "BINARY" collation sequence. 6441 */ 6442 static void havingToWhere(Parse *pParse, Select *p){ 6443 Walker sWalker; 6444 memset(&sWalker, 0, sizeof(sWalker)); 6445 sWalker.pParse = pParse; 6446 sWalker.xExprCallback = havingToWhereExprCb; 6447 sWalker.u.pSelect = p; 6448 sqlite3WalkExpr(&sWalker, p->pHaving); 6449 #if TREETRACE_ENABLED 6450 if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){ 6451 SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n")); 6452 sqlite3TreeViewSelect(0, p, 0); 6453 } 6454 #endif 6455 } 6456 6457 /* 6458 ** Check to see if the pThis entry of pTabList is a self-join of a prior view. 6459 ** If it is, then return the SrcItem for the prior view. If it is not, 6460 ** then return 0. 6461 */ 6462 static SrcItem *isSelfJoinView( 6463 SrcList *pTabList, /* Search for self-joins in this FROM clause */ 6464 SrcItem *pThis /* Search for prior reference to this subquery */ 6465 ){ 6466 SrcItem *pItem; 6467 assert( pThis->pSelect!=0 ); 6468 if( pThis->pSelect->selFlags & SF_PushDown ) return 0; 6469 for(pItem = pTabList->a; pItem<pThis; pItem++){ 6470 Select *pS1; 6471 if( pItem->pSelect==0 ) continue; 6472 if( pItem->fg.viaCoroutine ) continue; 6473 if( pItem->zName==0 ) continue; 6474 assert( pItem->pTab!=0 ); 6475 assert( pThis->pTab!=0 ); 6476 if( pItem->pTab->pSchema!=pThis->pTab->pSchema ) continue; 6477 if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue; 6478 pS1 = pItem->pSelect; 6479 if( pItem->pTab->pSchema==0 && pThis->pSelect->selId!=pS1->selId ){ 6480 /* The query flattener left two different CTE tables with identical 6481 ** names in the same FROM clause. */ 6482 continue; 6483 } 6484 if( pItem->pSelect->selFlags & SF_PushDown ){ 6485 /* The view was modified by some other optimization such as 6486 ** pushDownWhereTerms() */ 6487 continue; 6488 } 6489 return pItem; 6490 } 6491 return 0; 6492 } 6493 6494 /* 6495 ** Deallocate a single AggInfo object 6496 */ 6497 static void agginfoFree(sqlite3 *db, AggInfo *p){ 6498 sqlite3DbFree(db, p->aCol); 6499 sqlite3DbFree(db, p->aFunc); 6500 sqlite3DbFreeNN(db, p); 6501 } 6502 6503 #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION 6504 /* 6505 ** Attempt to transform a query of the form 6506 ** 6507 ** SELECT count(*) FROM (SELECT x FROM t1 UNION ALL SELECT y FROM t2) 6508 ** 6509 ** Into this: 6510 ** 6511 ** SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2) 6512 ** 6513 ** The transformation only works if all of the following are true: 6514 ** 6515 ** * The subquery is a UNION ALL of two or more terms 6516 ** * The subquery does not have a LIMIT clause 6517 ** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries 6518 ** * The outer query is a simple count(*) with no WHERE clause or other 6519 ** extraneous syntax. 6520 ** 6521 ** Return TRUE if the optimization is undertaken. 6522 */ 6523 static int countOfViewOptimization(Parse *pParse, Select *p){ 6524 Select *pSub, *pPrior; 6525 Expr *pExpr; 6526 Expr *pCount; 6527 sqlite3 *db; 6528 if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */ 6529 if( p->pEList->nExpr!=1 ) return 0; /* Single result column */ 6530 if( p->pWhere ) return 0; 6531 if( p->pGroupBy ) return 0; 6532 pExpr = p->pEList->a[0].pExpr; 6533 if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */ 6534 assert( ExprUseUToken(pExpr) ); 6535 if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Is count() */ 6536 assert( ExprUseXList(pExpr) ); 6537 if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */ 6538 if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */ 6539 pSub = p->pSrc->a[0].pSelect; 6540 if( pSub==0 ) return 0; /* The FROM is a subquery */ 6541 if( pSub->pPrior==0 ) return 0; /* Must be a compound ry */ 6542 do{ 6543 if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ 6544 if( pSub->pWhere ) return 0; /* No WHERE clause */ 6545 if( pSub->pLimit ) return 0; /* No LIMIT clause */ 6546 if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */ 6547 pSub = pSub->pPrior; /* Repeat over compound */ 6548 }while( pSub ); 6549 6550 /* If we reach this point then it is OK to perform the transformation */ 6551 6552 db = pParse->db; 6553 pCount = pExpr; 6554 pExpr = 0; 6555 pSub = p->pSrc->a[0].pSelect; 6556 p->pSrc->a[0].pSelect = 0; 6557 sqlite3SrcListDelete(db, p->pSrc); 6558 p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*p->pSrc)); 6559 while( pSub ){ 6560 Expr *pTerm; 6561 pPrior = pSub->pPrior; 6562 pSub->pPrior = 0; 6563 pSub->pNext = 0; 6564 pSub->selFlags |= SF_Aggregate; 6565 pSub->selFlags &= ~SF_Compound; 6566 pSub->nSelectRow = 0; 6567 sqlite3ExprListDelete(db, pSub->pEList); 6568 pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount; 6569 pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm); 6570 pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0); 6571 sqlite3PExprAddSelect(pParse, pTerm, pSub); 6572 if( pExpr==0 ){ 6573 pExpr = pTerm; 6574 }else{ 6575 pExpr = sqlite3PExpr(pParse, TK_PLUS, pTerm, pExpr); 6576 } 6577 pSub = pPrior; 6578 } 6579 p->pEList->a[0].pExpr = pExpr; 6580 p->selFlags &= ~SF_Aggregate; 6581 6582 #if TREETRACE_ENABLED 6583 if( sqlite3TreeTrace & 0x400 ){ 6584 SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n")); 6585 sqlite3TreeViewSelect(0, p, 0); 6586 } 6587 #endif 6588 return 1; 6589 } 6590 #endif /* SQLITE_COUNTOFVIEW_OPTIMIZATION */ 6591 6592 /* 6593 ** If any term of pSrc, or any SF_NestedFrom sub-query, is not the same 6594 ** as pSrcItem but has the same alias as p0, then return true. 6595 ** Otherwise return false. 6596 */ 6597 static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){ 6598 int i; 6599 for(i=0; i<pSrc->nSrc; i++){ 6600 SrcItem *p1 = &pSrc->a[i]; 6601 if( p1==p0 ) continue; 6602 if( p0->pTab==p1->pTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){ 6603 return 1; 6604 } 6605 if( p1->pSelect 6606 && (p1->pSelect->selFlags & SF_NestedFrom)!=0 6607 && sameSrcAlias(p0, p1->pSelect->pSrc) 6608 ){ 6609 return 1; 6610 } 6611 } 6612 return 0; 6613 } 6614 6615 /* 6616 ** Generate code for the SELECT statement given in the p argument. 6617 ** 6618 ** The results are returned according to the SelectDest structure. 6619 ** See comments in sqliteInt.h for further information. 6620 ** 6621 ** This routine returns the number of errors. If any errors are 6622 ** encountered, then an appropriate error message is left in 6623 ** pParse->zErrMsg. 6624 ** 6625 ** This routine does NOT free the Select structure passed in. The 6626 ** calling function needs to do that. 6627 */ 6628 int sqlite3Select( 6629 Parse *pParse, /* The parser context */ 6630 Select *p, /* The SELECT statement being coded. */ 6631 SelectDest *pDest /* What to do with the query results */ 6632 ){ 6633 int i, j; /* Loop counters */ 6634 WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */ 6635 Vdbe *v; /* The virtual machine under construction */ 6636 int isAgg; /* True for select lists like "count(*)" */ 6637 ExprList *pEList = 0; /* List of columns to extract. */ 6638 SrcList *pTabList; /* List of tables to select from */ 6639 Expr *pWhere; /* The WHERE clause. May be NULL */ 6640 ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ 6641 Expr *pHaving; /* The HAVING clause. May be NULL */ 6642 AggInfo *pAggInfo = 0; /* Aggregate information */ 6643 int rc = 1; /* Value to return from this function */ 6644 DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */ 6645 SortCtx sSort; /* Info on how to code the ORDER BY clause */ 6646 int iEnd; /* Address of the end of the query */ 6647 sqlite3 *db; /* The database connection */ 6648 ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */ 6649 u8 minMaxFlag; /* Flag for min/max queries */ 6650 6651 db = pParse->db; 6652 assert( pParse==db->pParse ); 6653 v = sqlite3GetVdbe(pParse); 6654 if( p==0 || pParse->nErr ){ 6655 return 1; 6656 } 6657 assert( db->mallocFailed==0 ); 6658 if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; 6659 #if TREETRACE_ENABLED 6660 SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain)); 6661 if( sqlite3TreeTrace & 0x10100 ){ 6662 if( (sqlite3TreeTrace & 0x10001)==0x10000 ){ 6663 sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d", 6664 __FILE__, __LINE__); 6665 } 6666 sqlite3ShowSelect(p); 6667 } 6668 #endif 6669 6670 assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo ); 6671 assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo ); 6672 assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistQueue ); 6673 assert( p->pOrderBy==0 || pDest->eDest!=SRT_Queue ); 6674 if( IgnorableDistinct(pDest) ){ 6675 assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 6676 pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard || 6677 pDest->eDest==SRT_DistQueue || pDest->eDest==SRT_DistFifo ); 6678 /* All of these destinations are also able to ignore the ORDER BY clause */ 6679 if( p->pOrderBy ){ 6680 #if TREETRACE_ENABLED 6681 SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n")); 6682 if( sqlite3TreeTrace & 0x100 ){ 6683 sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY"); 6684 } 6685 #endif 6686 sqlite3ParserAddCleanup(pParse, 6687 (void(*)(sqlite3*,void*))sqlite3ExprListDelete, 6688 p->pOrderBy); 6689 testcase( pParse->earlyCleanup ); 6690 p->pOrderBy = 0; 6691 } 6692 p->selFlags &= ~SF_Distinct; 6693 p->selFlags |= SF_NoopOrderBy; 6694 } 6695 sqlite3SelectPrep(pParse, p, 0); 6696 if( pParse->nErr ){ 6697 goto select_end; 6698 } 6699 assert( db->mallocFailed==0 ); 6700 assert( p->pEList!=0 ); 6701 #if TREETRACE_ENABLED 6702 if( sqlite3TreeTrace & 0x104 ){ 6703 SELECTTRACE(0x104,pParse,p, ("after name resolution:\n")); 6704 sqlite3TreeViewSelect(0, p, 0); 6705 } 6706 #endif 6707 6708 /* If the SF_UFSrcCheck flag is set, then this function is being called 6709 ** as part of populating the temp table for an UPDATE...FROM statement. 6710 ** In this case, it is an error if the target object (pSrc->a[0]) name 6711 ** or alias is duplicated within FROM clause (pSrc->a[1..n]). 6712 ** 6713 ** Postgres disallows this case too. The reason is that some other 6714 ** systems handle this case differently, and not all the same way, 6715 ** which is just confusing. To avoid this, we follow PG's lead and 6716 ** disallow it altogether. */ 6717 if( p->selFlags & SF_UFSrcCheck ){ 6718 SrcItem *p0 = &p->pSrc->a[0]; 6719 if( sameSrcAlias(p0, p->pSrc) ){ 6720 sqlite3ErrorMsg(pParse, 6721 "target object/alias may not appear in FROM clause: %s", 6722 p0->zAlias ? p0->zAlias : p0->pTab->zName 6723 ); 6724 goto select_end; 6725 } 6726 6727 /* Clear the SF_UFSrcCheck flag. The check has already been performed, 6728 ** and leaving this flag set can cause errors if a compound sub-query 6729 ** in p->pSrc is flattened into this query and this function called 6730 ** again as part of compound SELECT processing. */ 6731 p->selFlags &= ~SF_UFSrcCheck; 6732 } 6733 6734 if( pDest->eDest==SRT_Output ){ 6735 sqlite3GenerateColumnNames(pParse, p); 6736 } 6737 6738 #ifndef SQLITE_OMIT_WINDOWFUNC 6739 if( sqlite3WindowRewrite(pParse, p) ){ 6740 assert( pParse->nErr ); 6741 goto select_end; 6742 } 6743 #if TREETRACE_ENABLED 6744 if( p->pWin && (sqlite3TreeTrace & 0x108)!=0 ){ 6745 SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n")); 6746 sqlite3TreeViewSelect(0, p, 0); 6747 } 6748 #endif 6749 #endif /* SQLITE_OMIT_WINDOWFUNC */ 6750 pTabList = p->pSrc; 6751 isAgg = (p->selFlags & SF_Aggregate)!=0; 6752 memset(&sSort, 0, sizeof(sSort)); 6753 sSort.pOrderBy = p->pOrderBy; 6754 6755 /* Try to do various optimizations (flattening subqueries, and strength 6756 ** reduction of join operators) in the FROM clause up into the main query 6757 */ 6758 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 6759 for(i=0; !p->pPrior && i<pTabList->nSrc; i++){ 6760 SrcItem *pItem = &pTabList->a[i]; 6761 Select *pSub = pItem->pSelect; 6762 Table *pTab = pItem->pTab; 6763 6764 /* The expander should have already created transient Table objects 6765 ** even for FROM clause elements such as subqueries that do not correspond 6766 ** to a real table */ 6767 assert( pTab!=0 ); 6768 6769 /* Convert LEFT JOIN into JOIN if there are terms of the right table 6770 ** of the LEFT JOIN used in the WHERE clause. 6771 */ 6772 if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==JT_LEFT 6773 && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor) 6774 && OptimizationEnabled(db, SQLITE_SimplifyJoin) 6775 ){ 6776 SELECTTRACE(0x100,pParse,p, 6777 ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); 6778 pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); 6779 assert( pItem->iCursor>=0 ); 6780 unsetJoinExpr(p->pWhere, pItem->iCursor, 6781 pTabList->a[0].fg.jointype & JT_LTORJ); 6782 } 6783 6784 /* No futher action if this term of the FROM clause is no a subquery */ 6785 if( pSub==0 ) continue; 6786 6787 /* Catch mismatch in the declared columns of a view and the number of 6788 ** columns in the SELECT on the RHS */ 6789 if( pTab->nCol!=pSub->pEList->nExpr ){ 6790 sqlite3ErrorMsg(pParse, "expected %d columns for '%s' but got %d", 6791 pTab->nCol, pTab->zName, pSub->pEList->nExpr); 6792 goto select_end; 6793 } 6794 6795 /* Do not try to flatten an aggregate subquery. 6796 ** 6797 ** Flattening an aggregate subquery is only possible if the outer query 6798 ** is not a join. But if the outer query is not a join, then the subquery 6799 ** will be implemented as a co-routine and there is no advantage to 6800 ** flattening in that case. 6801 */ 6802 if( (pSub->selFlags & SF_Aggregate)!=0 ) continue; 6803 assert( pSub->pGroupBy==0 ); 6804 6805 /* If a FROM-clause subquery has an ORDER BY clause that is not 6806 ** really doing anything, then delete it now so that it does not 6807 ** interfere with query flattening. See the discussion at 6808 ** https://sqlite.org/forum/forumpost/2d76f2bcf65d256a 6809 ** 6810 ** Beware of these cases where the ORDER BY clause may not be safely 6811 ** omitted: 6812 ** 6813 ** (1) There is also a LIMIT clause 6814 ** (2) The subquery was added to help with window-function 6815 ** processing 6816 ** (3) The subquery is in the FROM clause of an UPDATE 6817 ** (4) The outer query uses an aggregate function other than 6818 ** the built-in count(), min(), or max(). 6819 ** (5) The ORDER BY isn't going to accomplish anything because 6820 ** one of: 6821 ** (a) The outer query has a different ORDER BY clause 6822 ** (b) The subquery is part of a join 6823 ** See forum post 062d576715d277c8 6824 */ 6825 if( pSub->pOrderBy!=0 6826 && (p->pOrderBy!=0 || pTabList->nSrc>1) /* Condition (5) */ 6827 && pSub->pLimit==0 /* Condition (1) */ 6828 && (pSub->selFlags & SF_OrderByReqd)==0 /* Condition (2) */ 6829 && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ 6830 && OptimizationEnabled(db, SQLITE_OmitOrderBy) 6831 ){ 6832 SELECTTRACE(0x100,pParse,p, 6833 ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); 6834 sqlite3ParserAddCleanup(pParse, 6835 (void(*)(sqlite3*,void*))sqlite3ExprListDelete, 6836 pSub->pOrderBy); 6837 pSub->pOrderBy = 0; 6838 } 6839 6840 /* If the outer query contains a "complex" result set (that is, 6841 ** if the result set of the outer query uses functions or subqueries) 6842 ** and if the subquery contains an ORDER BY clause and if 6843 ** it will be implemented as a co-routine, then do not flatten. This 6844 ** restriction allows SQL constructs like this: 6845 ** 6846 ** SELECT expensive_function(x) 6847 ** FROM (SELECT x FROM tab ORDER BY y LIMIT 10); 6848 ** 6849 ** The expensive_function() is only computed on the 10 rows that 6850 ** are output, rather than every row of the table. 6851 ** 6852 ** The requirement that the outer query have a complex result set 6853 ** means that flattening does occur on simpler SQL constraints without 6854 ** the expensive_function() like: 6855 ** 6856 ** SELECT x FROM (SELECT x FROM tab ORDER BY y LIMIT 10); 6857 */ 6858 if( pSub->pOrderBy!=0 6859 && i==0 6860 && (p->selFlags & SF_ComplexResult)!=0 6861 && (pTabList->nSrc==1 6862 || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) 6863 ){ 6864 continue; 6865 } 6866 6867 if( flattenSubquery(pParse, p, i, isAgg) ){ 6868 if( pParse->nErr ) goto select_end; 6869 /* This subquery can be absorbed into its parent. */ 6870 i = -1; 6871 } 6872 pTabList = p->pSrc; 6873 if( db->mallocFailed ) goto select_end; 6874 if( !IgnorableOrderby(pDest) ){ 6875 sSort.pOrderBy = p->pOrderBy; 6876 } 6877 } 6878 #endif 6879 6880 #ifndef SQLITE_OMIT_COMPOUND_SELECT 6881 /* Handle compound SELECT statements using the separate multiSelect() 6882 ** procedure. 6883 */ 6884 if( p->pPrior ){ 6885 rc = multiSelect(pParse, p, pDest); 6886 #if TREETRACE_ENABLED 6887 SELECTTRACE(0x1,pParse,p,("end compound-select processing\n")); 6888 if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ 6889 sqlite3TreeViewSelect(0, p, 0); 6890 } 6891 #endif 6892 if( p->pNext==0 ) ExplainQueryPlanPop(pParse); 6893 return rc; 6894 } 6895 #endif 6896 6897 /* Do the WHERE-clause constant propagation optimization if this is 6898 ** a join. No need to speed time on this operation for non-join queries 6899 ** as the equivalent optimization will be handled by query planner in 6900 ** sqlite3WhereBegin(). 6901 */ 6902 if( p->pWhere!=0 6903 && p->pWhere->op==TK_AND 6904 && OptimizationEnabled(db, SQLITE_PropagateConst) 6905 && propagateConstants(pParse, p) 6906 ){ 6907 #if TREETRACE_ENABLED 6908 if( sqlite3TreeTrace & 0x100 ){ 6909 SELECTTRACE(0x100,pParse,p,("After constant propagation:\n")); 6910 sqlite3TreeViewSelect(0, p, 0); 6911 } 6912 #endif 6913 }else{ 6914 SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n")); 6915 } 6916 6917 #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION 6918 if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) 6919 && countOfViewOptimization(pParse, p) 6920 ){ 6921 if( db->mallocFailed ) goto select_end; 6922 pEList = p->pEList; 6923 pTabList = p->pSrc; 6924 } 6925 #endif 6926 6927 /* For each term in the FROM clause, do two things: 6928 ** (1) Authorized unreferenced tables 6929 ** (2) Generate code for all sub-queries 6930 */ 6931 for(i=0; i<pTabList->nSrc; i++){ 6932 SrcItem *pItem = &pTabList->a[i]; 6933 SrcItem *pPrior; 6934 SelectDest dest; 6935 Select *pSub; 6936 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 6937 const char *zSavedAuthContext; 6938 #endif 6939 6940 /* Issue SQLITE_READ authorizations with a fake column name for any 6941 ** tables that are referenced but from which no values are extracted. 6942 ** Examples of where these kinds of null SQLITE_READ authorizations 6943 ** would occur: 6944 ** 6945 ** SELECT count(*) FROM t1; -- SQLITE_READ t1."" 6946 ** SELECT t1.* FROM t1, t2; -- SQLITE_READ t2."" 6947 ** 6948 ** The fake column name is an empty string. It is possible for a table to 6949 ** have a column named by the empty string, in which case there is no way to 6950 ** distinguish between an unreferenced table and an actual reference to the 6951 ** "" column. The original design was for the fake column name to be a NULL, 6952 ** which would be unambiguous. But legacy authorization callbacks might 6953 ** assume the column name is non-NULL and segfault. The use of an empty 6954 ** string for the fake column name seems safer. 6955 */ 6956 if( pItem->colUsed==0 && pItem->zName!=0 ){ 6957 sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase); 6958 } 6959 6960 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 6961 /* Generate code for all sub-queries in the FROM clause 6962 */ 6963 pSub = pItem->pSelect; 6964 if( pSub==0 ) continue; 6965 6966 /* The code for a subquery should only be generated once. */ 6967 assert( pItem->addrFillSub==0 ); 6968 6969 /* Increment Parse.nHeight by the height of the largest expression 6970 ** tree referred to by this, the parent select. The child select 6971 ** may contain expression trees of at most 6972 ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit 6973 ** more conservative than necessary, but much easier than enforcing 6974 ** an exact limit. 6975 */ 6976 pParse->nHeight += sqlite3SelectExprHeight(p); 6977 6978 /* Make copies of constant WHERE-clause terms in the outer query down 6979 ** inside the subquery. This can help the subquery to run more efficiently. 6980 */ 6981 if( OptimizationEnabled(db, SQLITE_PushDown) 6982 && (pItem->fg.isCte==0 6983 || (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2)) 6984 && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem) 6985 ){ 6986 #if TREETRACE_ENABLED 6987 if( sqlite3TreeTrace & 0x100 ){ 6988 SELECTTRACE(0x100,pParse,p, 6989 ("After WHERE-clause push-down into subquery %d:\n", pSub->selId)); 6990 sqlite3TreeViewSelect(0, p, 0); 6991 } 6992 #endif 6993 assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 ); 6994 }else{ 6995 SELECTTRACE(0x100,pParse,p,("Push-down not possible\n")); 6996 } 6997 6998 zSavedAuthContext = pParse->zAuthContext; 6999 pParse->zAuthContext = pItem->zName; 7000 7001 /* Generate code to implement the subquery 7002 ** 7003 ** The subquery is implemented as a co-routine if all of the following are 7004 ** true: 7005 ** 7006 ** (1) the subquery is guaranteed to be the outer loop (so that 7007 ** it does not need to be computed more than once), and 7008 ** (2) the subquery is not a CTE that should be materialized 7009 ** (3) the subquery is not part of a left operand for a RIGHT JOIN 7010 */ 7011 if( i==0 7012 && (pTabList->nSrc==1 7013 || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) /* (1) */ 7014 && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes) /* (2) */ 7015 && (pTabList->a[0].fg.jointype & JT_LTORJ)==0 /* (3) */ 7016 ){ 7017 /* Implement a co-routine that will return a single row of the result 7018 ** set on each invocation. 7019 */ 7020 int addrTop = sqlite3VdbeCurrentAddr(v)+1; 7021 7022 pItem->regReturn = ++pParse->nMem; 7023 sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop); 7024 VdbeComment((v, "%!S", pItem)); 7025 pItem->addrFillSub = addrTop; 7026 sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn); 7027 ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem)); 7028 sqlite3Select(pParse, pSub, &dest); 7029 pItem->pTab->nRowLogEst = pSub->nSelectRow; 7030 pItem->fg.viaCoroutine = 1; 7031 pItem->regResult = dest.iSdst; 7032 sqlite3VdbeEndCoroutine(v, pItem->regReturn); 7033 sqlite3VdbeJumpHere(v, addrTop-1); 7034 sqlite3ClearTempRegCache(pParse); 7035 }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){ 7036 /* This is a CTE for which materialization code has already been 7037 ** generated. Invoke the subroutine to compute the materialization, 7038 ** the make the pItem->iCursor be a copy of the ephemerial table that 7039 ** holds the result of the materialization. */ 7040 CteUse *pCteUse = pItem->u2.pCteUse; 7041 sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e); 7042 if( pItem->iCursor!=pCteUse->iCur ){ 7043 sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur); 7044 VdbeComment((v, "%!S", pItem)); 7045 } 7046 pSub->nSelectRow = pCteUse->nRowEst; 7047 }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){ 7048 /* This view has already been materialized by a prior entry in 7049 ** this same FROM clause. Reuse it. */ 7050 if( pPrior->addrFillSub ){ 7051 sqlite3VdbeAddOp2(v, OP_Gosub, pPrior->regReturn, pPrior->addrFillSub); 7052 } 7053 sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor); 7054 pSub->nSelectRow = pPrior->pSelect->nSelectRow; 7055 }else{ 7056 /* Materialize the view. If the view is not correlated, generate a 7057 ** subroutine to do the materialization so that subsequent uses of 7058 ** the same view can reuse the materialization. */ 7059 int topAddr; 7060 int onceAddr = 0; 7061 7062 pItem->regReturn = ++pParse->nMem; 7063 topAddr = sqlite3VdbeAddOp0(v, OP_Goto); 7064 pItem->addrFillSub = topAddr+1; 7065 pItem->fg.isMaterialized = 1; 7066 if( pItem->fg.isCorrelated==0 ){ 7067 /* If the subquery is not correlated and if we are not inside of 7068 ** a trigger, then we only need to compute the value of the subquery 7069 ** once. */ 7070 onceAddr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); 7071 VdbeComment((v, "materialize %!S", pItem)); 7072 }else{ 7073 VdbeNoopComment((v, "materialize %!S", pItem)); 7074 } 7075 sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); 7076 ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem)); 7077 dest.zAffSdst = sqlite3TableAffinityStr(db, pItem->pTab); 7078 sqlite3Select(pParse, pSub, &dest); 7079 sqlite3DbFree(db, dest.zAffSdst); 7080 dest.zAffSdst = 0; 7081 pItem->pTab->nRowLogEst = pSub->nSelectRow; 7082 if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); 7083 sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1); 7084 VdbeComment((v, "end %!S", pItem)); 7085 sqlite3VdbeJumpHere(v, topAddr); 7086 sqlite3ClearTempRegCache(pParse); 7087 if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){ 7088 CteUse *pCteUse = pItem->u2.pCteUse; 7089 pCteUse->addrM9e = pItem->addrFillSub; 7090 pCteUse->regRtn = pItem->regReturn; 7091 pCteUse->iCur = pItem->iCursor; 7092 pCteUse->nRowEst = pSub->nSelectRow; 7093 } 7094 } 7095 if( db->mallocFailed ) goto select_end; 7096 pParse->nHeight -= sqlite3SelectExprHeight(p); 7097 pParse->zAuthContext = zSavedAuthContext; 7098 #endif 7099 } 7100 7101 /* Various elements of the SELECT copied into local variables for 7102 ** convenience */ 7103 pEList = p->pEList; 7104 pWhere = p->pWhere; 7105 pGroupBy = p->pGroupBy; 7106 pHaving = p->pHaving; 7107 sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0; 7108 7109 #if TREETRACE_ENABLED 7110 if( sqlite3TreeTrace & 0x400 ){ 7111 SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n")); 7112 sqlite3TreeViewSelect(0, p, 0); 7113 } 7114 #endif 7115 7116 /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and 7117 ** if the select-list is the same as the ORDER BY list, then this query 7118 ** can be rewritten as a GROUP BY. In other words, this: 7119 ** 7120 ** SELECT DISTINCT xyz FROM ... ORDER BY xyz 7121 ** 7122 ** is transformed to: 7123 ** 7124 ** SELECT xyz FROM ... GROUP BY xyz ORDER BY xyz 7125 ** 7126 ** The second form is preferred as a single index (or temp-table) may be 7127 ** used for both the ORDER BY and DISTINCT processing. As originally 7128 ** written the query must use a temp-table for at least one of the ORDER 7129 ** BY and DISTINCT, and an index or separate temp-table for the other. 7130 */ 7131 if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct 7132 && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0 7133 #ifndef SQLITE_OMIT_WINDOWFUNC 7134 && p->pWin==0 7135 #endif 7136 ){ 7137 p->selFlags &= ~SF_Distinct; 7138 pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0); 7139 p->selFlags |= SF_Aggregate; 7140 /* Notice that even thought SF_Distinct has been cleared from p->selFlags, 7141 ** the sDistinct.isTnct is still set. Hence, isTnct represents the 7142 ** original setting of the SF_Distinct flag, not the current setting */ 7143 assert( sDistinct.isTnct ); 7144 sDistinct.isTnct = 2; 7145 7146 #if TREETRACE_ENABLED 7147 if( sqlite3TreeTrace & 0x400 ){ 7148 SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n")); 7149 sqlite3TreeViewSelect(0, p, 0); 7150 } 7151 #endif 7152 } 7153 7154 /* If there is an ORDER BY clause, then create an ephemeral index to 7155 ** do the sorting. But this sorting ephemeral index might end up 7156 ** being unused if the data can be extracted in pre-sorted order. 7157 ** If that is the case, then the OP_OpenEphemeral instruction will be 7158 ** changed to an OP_Noop once we figure out that the sorting index is 7159 ** not needed. The sSort.addrSortIndex variable is used to facilitate 7160 ** that change. 7161 */ 7162 if( sSort.pOrderBy ){ 7163 KeyInfo *pKeyInfo; 7164 pKeyInfo = sqlite3KeyInfoFromExprList( 7165 pParse, sSort.pOrderBy, 0, pEList->nExpr); 7166 sSort.iECursor = pParse->nTab++; 7167 sSort.addrSortIndex = 7168 sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 7169 sSort.iECursor, sSort.pOrderBy->nExpr+1+pEList->nExpr, 0, 7170 (char*)pKeyInfo, P4_KEYINFO 7171 ); 7172 }else{ 7173 sSort.addrSortIndex = -1; 7174 } 7175 7176 /* If the output is destined for a temporary table, open that table. 7177 */ 7178 if( pDest->eDest==SRT_EphemTab ){ 7179 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iSDParm, pEList->nExpr); 7180 if( p->selFlags & SF_NestedFrom ){ 7181 /* Delete or NULL-out result columns that will never be used */ 7182 int ii; 7183 for(ii=pEList->nExpr-1; ii>0 && pEList->a[ii].fg.bUsed==0; ii--){ 7184 sqlite3ExprDelete(db, pEList->a[ii].pExpr); 7185 sqlite3DbFree(db, pEList->a[ii].zEName); 7186 pEList->nExpr--; 7187 } 7188 for(ii=0; ii<pEList->nExpr; ii++){ 7189 if( pEList->a[ii].fg.bUsed==0 ) pEList->a[ii].pExpr->op = TK_NULL; 7190 } 7191 } 7192 } 7193 7194 /* Set the limiter. 7195 */ 7196 iEnd = sqlite3VdbeMakeLabel(pParse); 7197 if( (p->selFlags & SF_FixedLimit)==0 ){ 7198 p->nSelectRow = 320; /* 4 billion rows */ 7199 } 7200 if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd); 7201 if( p->iLimit==0 && sSort.addrSortIndex>=0 ){ 7202 sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen); 7203 sSort.sortFlags |= SORTFLAG_UseSorter; 7204 } 7205 7206 /* Open an ephemeral index to use for the distinct set. 7207 */ 7208 if( p->selFlags & SF_Distinct ){ 7209 sDistinct.tabTnct = pParse->nTab++; 7210 sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 7211 sDistinct.tabTnct, 0, 0, 7212 (char*)sqlite3KeyInfoFromExprList(pParse, p->pEList,0,0), 7213 P4_KEYINFO); 7214 sqlite3VdbeChangeP5(v, BTREE_UNORDERED); 7215 sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED; 7216 }else{ 7217 sDistinct.eTnctType = WHERE_DISTINCT_NOOP; 7218 } 7219 7220 if( !isAgg && pGroupBy==0 ){ 7221 /* No aggregate functions and no GROUP BY clause */ 7222 u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0) 7223 | (p->selFlags & SF_FixedLimit); 7224 #ifndef SQLITE_OMIT_WINDOWFUNC 7225 Window *pWin = p->pWin; /* Main window object (or NULL) */ 7226 if( pWin ){ 7227 sqlite3WindowCodeInit(pParse, p); 7228 } 7229 #endif 7230 assert( WHERE_USE_LIMIT==SF_FixedLimit ); 7231 7232 7233 /* Begin the database scan. */ 7234 SELECTTRACE(1,pParse,p,("WhereBegin\n")); 7235 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy, 7236 p->pEList, p, wctrlFlags, p->nSelectRow); 7237 if( pWInfo==0 ) goto select_end; 7238 if( sqlite3WhereOutputRowCount(pWInfo) < p->nSelectRow ){ 7239 p->nSelectRow = sqlite3WhereOutputRowCount(pWInfo); 7240 } 7241 if( sDistinct.isTnct && sqlite3WhereIsDistinct(pWInfo) ){ 7242 sDistinct.eTnctType = sqlite3WhereIsDistinct(pWInfo); 7243 } 7244 if( sSort.pOrderBy ){ 7245 sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo); 7246 sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo); 7247 if( sSort.nOBSat==sSort.pOrderBy->nExpr ){ 7248 sSort.pOrderBy = 0; 7249 } 7250 } 7251 SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); 7252 7253 /* If sorting index that was created by a prior OP_OpenEphemeral 7254 ** instruction ended up not being needed, then change the OP_OpenEphemeral 7255 ** into an OP_Noop. 7256 */ 7257 if( sSort.addrSortIndex>=0 && sSort.pOrderBy==0 ){ 7258 sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); 7259 } 7260 7261 assert( p->pEList==pEList ); 7262 #ifndef SQLITE_OMIT_WINDOWFUNC 7263 if( pWin ){ 7264 int addrGosub = sqlite3VdbeMakeLabel(pParse); 7265 int iCont = sqlite3VdbeMakeLabel(pParse); 7266 int iBreak = sqlite3VdbeMakeLabel(pParse); 7267 int regGosub = ++pParse->nMem; 7268 7269 sqlite3WindowCodeStep(pParse, p, pWInfo, regGosub, addrGosub); 7270 7271 sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak); 7272 sqlite3VdbeResolveLabel(v, addrGosub); 7273 VdbeNoopComment((v, "inner-loop subroutine")); 7274 sSort.labelOBLopt = 0; 7275 selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, iCont, iBreak); 7276 sqlite3VdbeResolveLabel(v, iCont); 7277 sqlite3VdbeAddOp1(v, OP_Return, regGosub); 7278 VdbeComment((v, "end inner-loop subroutine")); 7279 sqlite3VdbeResolveLabel(v, iBreak); 7280 }else 7281 #endif /* SQLITE_OMIT_WINDOWFUNC */ 7282 { 7283 /* Use the standard inner loop. */ 7284 selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, 7285 sqlite3WhereContinueLabel(pWInfo), 7286 sqlite3WhereBreakLabel(pWInfo)); 7287 7288 /* End the database scan loop. 7289 */ 7290 SELECTTRACE(1,pParse,p,("WhereEnd\n")); 7291 sqlite3WhereEnd(pWInfo); 7292 } 7293 }else{ 7294 /* This case when there exist aggregate functions or a GROUP BY clause 7295 ** or both */ 7296 NameContext sNC; /* Name context for processing aggregate information */ 7297 int iAMem; /* First Mem address for storing current GROUP BY */ 7298 int iBMem; /* First Mem address for previous GROUP BY */ 7299 int iUseFlag; /* Mem address holding flag indicating that at least 7300 ** one row of the input to the aggregator has been 7301 ** processed */ 7302 int iAbortFlag; /* Mem address which causes query abort if positive */ 7303 int groupBySort; /* Rows come from source in GROUP BY order */ 7304 int addrEnd; /* End of processing for this SELECT */ 7305 int sortPTab = 0; /* Pseudotable used to decode sorting results */ 7306 int sortOut = 0; /* Output register from the sorter */ 7307 int orderByGrp = 0; /* True if the GROUP BY and ORDER BY are the same */ 7308 7309 /* Remove any and all aliases between the result set and the 7310 ** GROUP BY clause. 7311 */ 7312 if( pGroupBy ){ 7313 int k; /* Loop counter */ 7314 struct ExprList_item *pItem; /* For looping over expression in a list */ 7315 7316 for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){ 7317 pItem->u.x.iAlias = 0; 7318 } 7319 for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){ 7320 pItem->u.x.iAlias = 0; 7321 } 7322 assert( 66==sqlite3LogEst(100) ); 7323 if( p->nSelectRow>66 ) p->nSelectRow = 66; 7324 7325 /* If there is both a GROUP BY and an ORDER BY clause and they are 7326 ** identical, then it may be possible to disable the ORDER BY clause 7327 ** on the grounds that the GROUP BY will cause elements to come out 7328 ** in the correct order. It also may not - the GROUP BY might use a 7329 ** database index that causes rows to be grouped together as required 7330 ** but not actually sorted. Either way, record the fact that the 7331 ** ORDER BY and GROUP BY clauses are the same by setting the orderByGrp 7332 ** variable. */ 7333 if( sSort.pOrderBy && pGroupBy->nExpr==sSort.pOrderBy->nExpr ){ 7334 int ii; 7335 /* The GROUP BY processing doesn't care whether rows are delivered in 7336 ** ASC or DESC order - only that each group is returned contiguously. 7337 ** So set the ASC/DESC flags in the GROUP BY to match those in the 7338 ** ORDER BY to maximize the chances of rows being delivered in an 7339 ** order that makes the ORDER BY redundant. */ 7340 for(ii=0; ii<pGroupBy->nExpr; ii++){ 7341 u8 sortFlags; 7342 sortFlags = sSort.pOrderBy->a[ii].fg.sortFlags & KEYINFO_ORDER_DESC; 7343 pGroupBy->a[ii].fg.sortFlags = sortFlags; 7344 } 7345 if( sqlite3ExprListCompare(pGroupBy, sSort.pOrderBy, -1)==0 ){ 7346 orderByGrp = 1; 7347 } 7348 } 7349 }else{ 7350 assert( 0==sqlite3LogEst(1) ); 7351 p->nSelectRow = 0; 7352 } 7353 7354 /* Create a label to jump to when we want to abort the query */ 7355 addrEnd = sqlite3VdbeMakeLabel(pParse); 7356 7357 /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in 7358 ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the 7359 ** SELECT statement. 7360 */ 7361 pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); 7362 if( pAggInfo ){ 7363 sqlite3ParserAddCleanup(pParse, 7364 (void(*)(sqlite3*,void*))agginfoFree, pAggInfo); 7365 testcase( pParse->earlyCleanup ); 7366 } 7367 if( db->mallocFailed ){ 7368 goto select_end; 7369 } 7370 pAggInfo->selId = p->selId; 7371 memset(&sNC, 0, sizeof(sNC)); 7372 sNC.pParse = pParse; 7373 sNC.pSrcList = pTabList; 7374 sNC.uNC.pAggInfo = pAggInfo; 7375 VVA_ONLY( sNC.ncFlags = NC_UAggInfo; ) 7376 pAggInfo->mnReg = pParse->nMem+1; 7377 pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; 7378 pAggInfo->pGroupBy = pGroupBy; 7379 sqlite3ExprAnalyzeAggList(&sNC, pEList); 7380 sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy); 7381 if( pHaving ){ 7382 if( pGroupBy ){ 7383 assert( pWhere==p->pWhere ); 7384 assert( pHaving==p->pHaving ); 7385 assert( pGroupBy==p->pGroupBy ); 7386 havingToWhere(pParse, p); 7387 pWhere = p->pWhere; 7388 } 7389 sqlite3ExprAnalyzeAggregates(&sNC, pHaving); 7390 } 7391 pAggInfo->nAccumulator = pAggInfo->nColumn; 7392 if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){ 7393 minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy); 7394 }else{ 7395 minMaxFlag = WHERE_ORDERBY_NORMAL; 7396 } 7397 for(i=0; i<pAggInfo->nFunc; i++){ 7398 Expr *pExpr = pAggInfo->aFunc[i].pFExpr; 7399 assert( ExprUseXList(pExpr) ); 7400 sNC.ncFlags |= NC_InAggFunc; 7401 sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList); 7402 #ifndef SQLITE_OMIT_WINDOWFUNC 7403 assert( !IsWindowFunc(pExpr) ); 7404 if( ExprHasProperty(pExpr, EP_WinFunc) ){ 7405 sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter); 7406 } 7407 #endif 7408 sNC.ncFlags &= ~NC_InAggFunc; 7409 } 7410 pAggInfo->mxReg = pParse->nMem; 7411 if( db->mallocFailed ) goto select_end; 7412 #if TREETRACE_ENABLED 7413 if( sqlite3TreeTrace & 0x400 ){ 7414 int ii; 7415 SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); 7416 sqlite3TreeViewSelect(0, p, 0); 7417 if( minMaxFlag ){ 7418 sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); 7419 sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); 7420 } 7421 for(ii=0; ii<pAggInfo->nColumn; ii++){ 7422 struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; 7423 sqlite3DebugPrintf( 7424 "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" 7425 " iSorterColumn=%d\n", 7426 ii, pCol->pTab ? pCol->pTab->zName : "NULL", 7427 pCol->iTable, pCol->iColumn, pCol->iMem, 7428 pCol->iSorterColumn); 7429 sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); 7430 } 7431 for(ii=0; ii<pAggInfo->nFunc; ii++){ 7432 sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", 7433 ii, pAggInfo->aFunc[ii].iMem); 7434 sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0); 7435 } 7436 } 7437 #endif 7438 7439 7440 /* Processing for aggregates with GROUP BY is very different and 7441 ** much more complex than aggregates without a GROUP BY. 7442 */ 7443 if( pGroupBy ){ 7444 KeyInfo *pKeyInfo; /* Keying information for the group by clause */ 7445 int addr1; /* A-vs-B comparision jump */ 7446 int addrOutputRow; /* Start of subroutine that outputs a result row */ 7447 int regOutputRow; /* Return address register for output subroutine */ 7448 int addrSetAbort; /* Set the abort flag and return */ 7449 int addrTopOfLoop; /* Top of the input loop */ 7450 int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */ 7451 int addrReset; /* Subroutine for resetting the accumulator */ 7452 int regReset; /* Return address register for reset subroutine */ 7453 ExprList *pDistinct = 0; 7454 u16 distFlag = 0; 7455 int eDist = WHERE_DISTINCT_NOOP; 7456 7457 if( pAggInfo->nFunc==1 7458 && pAggInfo->aFunc[0].iDistinct>=0 7459 && ALWAYS(pAggInfo->aFunc[0].pFExpr!=0) 7460 && ALWAYS(ExprUseXList(pAggInfo->aFunc[0].pFExpr)) 7461 && pAggInfo->aFunc[0].pFExpr->x.pList!=0 7462 ){ 7463 Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr; 7464 pExpr = sqlite3ExprDup(db, pExpr, 0); 7465 pDistinct = sqlite3ExprListDup(db, pGroupBy, 0); 7466 pDistinct = sqlite3ExprListAppend(pParse, pDistinct, pExpr); 7467 distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0; 7468 } 7469 7470 /* If there is a GROUP BY clause we might need a sorting index to 7471 ** implement it. Allocate that sorting index now. If it turns out 7472 ** that we do not need it after all, the OP_SorterOpen instruction 7473 ** will be converted into a Noop. 7474 */ 7475 pAggInfo->sortingIdx = pParse->nTab++; 7476 pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pGroupBy, 7477 0, pAggInfo->nColumn); 7478 addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, 7479 pAggInfo->sortingIdx, pAggInfo->nSortingColumn, 7480 0, (char*)pKeyInfo, P4_KEYINFO); 7481 7482 /* Initialize memory locations used by GROUP BY aggregate processing 7483 */ 7484 iUseFlag = ++pParse->nMem; 7485 iAbortFlag = ++pParse->nMem; 7486 regOutputRow = ++pParse->nMem; 7487 addrOutputRow = sqlite3VdbeMakeLabel(pParse); 7488 regReset = ++pParse->nMem; 7489 addrReset = sqlite3VdbeMakeLabel(pParse); 7490 iAMem = pParse->nMem + 1; 7491 pParse->nMem += pGroupBy->nExpr; 7492 iBMem = pParse->nMem + 1; 7493 pParse->nMem += pGroupBy->nExpr; 7494 sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); 7495 VdbeComment((v, "clear abort flag")); 7496 sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1); 7497 7498 /* Begin a loop that will extract all source rows in GROUP BY order. 7499 ** This might involve two separate loops with an OP_Sort in between, or 7500 ** it might be a single loop that uses an index to extract information 7501 ** in the right order to begin with. 7502 */ 7503 sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); 7504 SELECTTRACE(1,pParse,p,("WhereBegin\n")); 7505 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct, 7506 p, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY) 7507 | (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0 7508 ); 7509 if( pWInfo==0 ){ 7510 sqlite3ExprListDelete(db, pDistinct); 7511 goto select_end; 7512 } 7513 eDist = sqlite3WhereIsDistinct(pWInfo); 7514 SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); 7515 if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){ 7516 /* The optimizer is able to deliver rows in group by order so 7517 ** we do not have to sort. The OP_OpenEphemeral table will be 7518 ** cancelled later because we still need to use the pKeyInfo 7519 */ 7520 groupBySort = 0; 7521 }else{ 7522 /* Rows are coming out in undetermined order. We have to push 7523 ** each row into a sorting index, terminate the first loop, 7524 ** then loop over the sorting index in order to get the output 7525 ** in sorted order 7526 */ 7527 int regBase; 7528 int regRecord; 7529 int nCol; 7530 int nGroupBy; 7531 7532 explainTempTable(pParse, 7533 (sDistinct.isTnct && (p->selFlags&SF_Distinct)==0) ? 7534 "DISTINCT" : "GROUP BY"); 7535 7536 groupBySort = 1; 7537 nGroupBy = pGroupBy->nExpr; 7538 nCol = nGroupBy; 7539 j = nGroupBy; 7540 for(i=0; i<pAggInfo->nColumn; i++){ 7541 if( pAggInfo->aCol[i].iSorterColumn>=j ){ 7542 nCol++; 7543 j++; 7544 } 7545 } 7546 regBase = sqlite3GetTempRange(pParse, nCol); 7547 sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); 7548 j = nGroupBy; 7549 pAggInfo->directMode = 1; 7550 for(i=0; i<pAggInfo->nColumn; i++){ 7551 struct AggInfo_col *pCol = &pAggInfo->aCol[i]; 7552 if( pCol->iSorterColumn>=j ){ 7553 sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase); 7554 j++; 7555 } 7556 } 7557 pAggInfo->directMode = 0; 7558 regRecord = sqlite3GetTempReg(pParse); 7559 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); 7560 sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); 7561 sqlite3ReleaseTempReg(pParse, regRecord); 7562 sqlite3ReleaseTempRange(pParse, regBase, nCol); 7563 SELECTTRACE(1,pParse,p,("WhereEnd\n")); 7564 sqlite3WhereEnd(pWInfo); 7565 pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; 7566 sortOut = sqlite3GetTempReg(pParse); 7567 sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); 7568 sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); 7569 VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); 7570 pAggInfo->useSortingIdx = 1; 7571 } 7572 7573 /* If the index or temporary table used by the GROUP BY sort 7574 ** will naturally deliver rows in the order required by the ORDER BY 7575 ** clause, cancel the ephemeral table open coded earlier. 7576 ** 7577 ** This is an optimization - the correct answer should result regardless. 7578 ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER to 7579 ** disable this optimization for testing purposes. */ 7580 if( orderByGrp && OptimizationEnabled(db, SQLITE_GroupByOrder) 7581 && (groupBySort || sqlite3WhereIsSorted(pWInfo)) 7582 ){ 7583 sSort.pOrderBy = 0; 7584 sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); 7585 } 7586 7587 /* Evaluate the current GROUP BY terms and store in b0, b1, b2... 7588 ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth) 7589 ** Then compare the current GROUP BY terms against the GROUP BY terms 7590 ** from the previous row currently stored in a0, a1, a2... 7591 */ 7592 addrTopOfLoop = sqlite3VdbeCurrentAddr(v); 7593 if( groupBySort ){ 7594 sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx, 7595 sortOut, sortPTab); 7596 } 7597 for(j=0; j<pGroupBy->nExpr; j++){ 7598 if( groupBySort ){ 7599 sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j); 7600 }else{ 7601 pAggInfo->directMode = 1; 7602 sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); 7603 } 7604 } 7605 sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr, 7606 (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); 7607 addr1 = sqlite3VdbeCurrentAddr(v); 7608 sqlite3VdbeAddOp3(v, OP_Jump, addr1+1, 0, addr1+1); VdbeCoverage(v); 7609 7610 /* Generate code that runs whenever the GROUP BY changes. 7611 ** Changes in the GROUP BY are detected by the previous code 7612 ** block. If there were no changes, this block is skipped. 7613 ** 7614 ** This code copies current group by terms in b0,b1,b2,... 7615 ** over to a0,a1,a2. It then calls the output subroutine 7616 ** and resets the aggregate accumulator registers in preparation 7617 ** for the next GROUP BY batch. 7618 */ 7619 sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr); 7620 sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); 7621 VdbeComment((v, "output one row")); 7622 sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); VdbeCoverage(v); 7623 VdbeComment((v, "check abort flag")); 7624 sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); 7625 VdbeComment((v, "reset accumulator")); 7626 7627 /* Update the aggregate accumulators based on the content of 7628 ** the current row 7629 */ 7630 sqlite3VdbeJumpHere(v, addr1); 7631 updateAccumulator(pParse, iUseFlag, pAggInfo, eDist); 7632 sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); 7633 VdbeComment((v, "indicate data in accumulator")); 7634 7635 /* End of the loop 7636 */ 7637 if( groupBySort ){ 7638 sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop); 7639 VdbeCoverage(v); 7640 }else{ 7641 SELECTTRACE(1,pParse,p,("WhereEnd\n")); 7642 sqlite3WhereEnd(pWInfo); 7643 sqlite3VdbeChangeToNoop(v, addrSortingIdx); 7644 } 7645 sqlite3ExprListDelete(db, pDistinct); 7646 7647 /* Output the final row of result 7648 */ 7649 sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); 7650 VdbeComment((v, "output final row")); 7651 7652 /* Jump over the subroutines 7653 */ 7654 sqlite3VdbeGoto(v, addrEnd); 7655 7656 /* Generate a subroutine that outputs a single row of the result 7657 ** set. This subroutine first looks at the iUseFlag. If iUseFlag 7658 ** is less than or equal to zero, the subroutine is a no-op. If 7659 ** the processing calls for the query to abort, this subroutine 7660 ** increments the iAbortFlag memory location before returning in 7661 ** order to signal the caller to abort. 7662 */ 7663 addrSetAbort = sqlite3VdbeCurrentAddr(v); 7664 sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag); 7665 VdbeComment((v, "set abort flag")); 7666 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); 7667 sqlite3VdbeResolveLabel(v, addrOutputRow); 7668 addrOutputRow = sqlite3VdbeCurrentAddr(v); 7669 sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2); 7670 VdbeCoverage(v); 7671 VdbeComment((v, "Groupby result generator entry point")); 7672 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); 7673 finalizeAggFunctions(pParse, pAggInfo); 7674 sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); 7675 selectInnerLoop(pParse, p, -1, &sSort, 7676 &sDistinct, pDest, 7677 addrOutputRow+1, addrSetAbort); 7678 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); 7679 VdbeComment((v, "end groupby result generator")); 7680 7681 /* Generate a subroutine that will reset the group-by accumulator 7682 */ 7683 sqlite3VdbeResolveLabel(v, addrReset); 7684 resetAccumulator(pParse, pAggInfo); 7685 sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); 7686 VdbeComment((v, "indicate accumulator empty")); 7687 sqlite3VdbeAddOp1(v, OP_Return, regReset); 7688 7689 if( distFlag!=0 && eDist!=WHERE_DISTINCT_NOOP ){ 7690 struct AggInfo_func *pF = &pAggInfo->aFunc[0]; 7691 fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); 7692 } 7693 } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ 7694 else { 7695 Table *pTab; 7696 if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){ 7697 /* If isSimpleCount() returns a pointer to a Table structure, then 7698 ** the SQL statement is of the form: 7699 ** 7700 ** SELECT count(*) FROM <tbl> 7701 ** 7702 ** where the Table structure returned represents table <tbl>. 7703 ** 7704 ** This statement is so common that it is optimized specially. The 7705 ** OP_Count instruction is executed either on the intkey table that 7706 ** contains the data for table <tbl> or on one of its indexes. It 7707 ** is better to execute the op on an index, as indexes are almost 7708 ** always spread across less pages than their corresponding tables. 7709 */ 7710 const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); 7711 const int iCsr = pParse->nTab++; /* Cursor to scan b-tree */ 7712 Index *pIdx; /* Iterator variable */ 7713 KeyInfo *pKeyInfo = 0; /* Keyinfo for scanned index */ 7714 Index *pBest = 0; /* Best index found so far */ 7715 Pgno iRoot = pTab->tnum; /* Root page of scanned b-tree */ 7716 7717 sqlite3CodeVerifySchema(pParse, iDb); 7718 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); 7719 7720 /* Search for the index that has the lowest scan cost. 7721 ** 7722 ** (2011-04-15) Do not do a full scan of an unordered index. 7723 ** 7724 ** (2013-10-03) Do not count the entries in a partial index. 7725 ** 7726 ** In practice the KeyInfo structure will not be used. It is only 7727 ** passed to keep OP_OpenRead happy. 7728 */ 7729 if( !HasRowid(pTab) ) pBest = sqlite3PrimaryKeyIndex(pTab); 7730 if( !p->pSrc->a[0].fg.notIndexed ){ 7731 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ 7732 if( pIdx->bUnordered==0 7733 && pIdx->szIdxRow<pTab->szTabRow 7734 && pIdx->pPartIdxWhere==0 7735 && (!pBest || pIdx->szIdxRow<pBest->szIdxRow) 7736 ){ 7737 pBest = pIdx; 7738 } 7739 } 7740 } 7741 if( pBest ){ 7742 iRoot = pBest->tnum; 7743 pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pBest); 7744 } 7745 7746 /* Open a read-only cursor, execute the OP_Count, close the cursor. */ 7747 sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, (int)iRoot, iDb, 1); 7748 if( pKeyInfo ){ 7749 sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); 7750 } 7751 sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem); 7752 sqlite3VdbeAddOp1(v, OP_Close, iCsr); 7753 explainSimpleCount(pParse, pTab, pBest); 7754 }else{ 7755 int regAcc = 0; /* "populate accumulators" flag */ 7756 ExprList *pDistinct = 0; 7757 u16 distFlag = 0; 7758 int eDist; 7759 7760 /* If there are accumulator registers but no min() or max() functions 7761 ** without FILTER clauses, allocate register regAcc. Register regAcc 7762 ** will contain 0 the first time the inner loop runs, and 1 thereafter. 7763 ** The code generated by updateAccumulator() uses this to ensure 7764 ** that the accumulator registers are (a) updated only once if 7765 ** there are no min() or max functions or (b) always updated for the 7766 ** first row visited by the aggregate, so that they are updated at 7767 ** least once even if the FILTER clause means the min() or max() 7768 ** function visits zero rows. */ 7769 if( pAggInfo->nAccumulator ){ 7770 for(i=0; i<pAggInfo->nFunc; i++){ 7771 if( ExprHasProperty(pAggInfo->aFunc[i].pFExpr, EP_WinFunc) ){ 7772 continue; 7773 } 7774 if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){ 7775 break; 7776 } 7777 } 7778 if( i==pAggInfo->nFunc ){ 7779 regAcc = ++pParse->nMem; 7780 sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); 7781 } 7782 }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){ 7783 assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) ); 7784 pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList; 7785 distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0; 7786 } 7787 7788 /* This case runs if the aggregate has no GROUP BY clause. The 7789 ** processing is much simpler since there is only a single row 7790 ** of output. 7791 */ 7792 assert( p->pGroupBy==0 ); 7793 resetAccumulator(pParse, pAggInfo); 7794 7795 /* If this query is a candidate for the min/max optimization, then 7796 ** minMaxFlag will have been previously set to either 7797 ** WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX and pMinMaxOrderBy will 7798 ** be an appropriate ORDER BY expression for the optimization. 7799 */ 7800 assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 ); 7801 assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 ); 7802 7803 SELECTTRACE(1,pParse,p,("WhereBegin\n")); 7804 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy, 7805 pDistinct, p, minMaxFlag|distFlag, 0); 7806 if( pWInfo==0 ){ 7807 goto select_end; 7808 } 7809 SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); 7810 eDist = sqlite3WhereIsDistinct(pWInfo); 7811 updateAccumulator(pParse, regAcc, pAggInfo, eDist); 7812 if( eDist!=WHERE_DISTINCT_NOOP ){ 7813 struct AggInfo_func *pF = pAggInfo->aFunc; 7814 if( pF ){ 7815 fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); 7816 } 7817 } 7818 7819 if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); 7820 if( minMaxFlag ){ 7821 sqlite3WhereMinMaxOptEarlyOut(v, pWInfo); 7822 } 7823 SELECTTRACE(1,pParse,p,("WhereEnd\n")); 7824 sqlite3WhereEnd(pWInfo); 7825 finalizeAggFunctions(pParse, pAggInfo); 7826 } 7827 7828 sSort.pOrderBy = 0; 7829 sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); 7830 selectInnerLoop(pParse, p, -1, 0, 0, 7831 pDest, addrEnd, addrEnd); 7832 } 7833 sqlite3VdbeResolveLabel(v, addrEnd); 7834 7835 } /* endif aggregate query */ 7836 7837 if( sDistinct.eTnctType==WHERE_DISTINCT_UNORDERED ){ 7838 explainTempTable(pParse, "DISTINCT"); 7839 } 7840 7841 /* If there is an ORDER BY clause, then we need to sort the results 7842 ** and send them to the callback one by one. 7843 */ 7844 if( sSort.pOrderBy ){ 7845 explainTempTable(pParse, 7846 sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY"); 7847 assert( p->pEList==pEList ); 7848 generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest); 7849 } 7850 7851 /* Jump here to skip this query 7852 */ 7853 sqlite3VdbeResolveLabel(v, iEnd); 7854 7855 /* The SELECT has been coded. If there is an error in the Parse structure, 7856 ** set the return code to 1. Otherwise 0. */ 7857 rc = (pParse->nErr>0); 7858 7859 /* Control jumps to here if an error is encountered above, or upon 7860 ** successful coding of the SELECT. 7861 */ 7862 select_end: 7863 assert( db->mallocFailed==0 || db->mallocFailed==1 ); 7864 assert( db->mallocFailed==0 || pParse->nErr!=0 ); 7865 sqlite3ExprListDelete(db, pMinMaxOrderBy); 7866 #ifdef SQLITE_DEBUG 7867 if( pAggInfo && !db->mallocFailed ){ 7868 for(i=0; i<pAggInfo->nColumn; i++){ 7869 Expr *pExpr = pAggInfo->aCol[i].pCExpr; 7870 assert( pExpr!=0 ); 7871 assert( pExpr->pAggInfo==pAggInfo ); 7872 assert( pExpr->iAgg==i ); 7873 } 7874 for(i=0; i<pAggInfo->nFunc; i++){ 7875 Expr *pExpr = pAggInfo->aFunc[i].pFExpr; 7876 assert( pExpr!=0 ); 7877 assert( pExpr->pAggInfo==pAggInfo ); 7878 assert( pExpr->iAgg==i ); 7879 } 7880 } 7881 #endif 7882 7883 #if TREETRACE_ENABLED 7884 SELECTTRACE(0x1,pParse,p,("end processing\n")); 7885 if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ 7886 sqlite3TreeViewSelect(0, p, 0); 7887 } 7888 #endif 7889 ExplainQueryPlanPop(pParse); 7890 return rc; 7891 } 7892