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 ** $Id: select.c,v 1.276 2005/09/20 18:13:24 drh Exp $ 16 */ 17 #include "sqliteInt.h" 18 19 20 /* 21 ** Allocate a new Select structure and return a pointer to that 22 ** structure. 23 */ 24 Select *sqlite3SelectNew( 25 ExprList *pEList, /* which columns to include in the result */ 26 SrcList *pSrc, /* the FROM clause -- which tables to scan */ 27 Expr *pWhere, /* the WHERE clause */ 28 ExprList *pGroupBy, /* the GROUP BY clause */ 29 Expr *pHaving, /* the HAVING clause */ 30 ExprList *pOrderBy, /* the ORDER BY clause */ 31 int isDistinct, /* true if the DISTINCT keyword is present */ 32 Expr *pLimit, /* LIMIT value. NULL means not used */ 33 Expr *pOffset /* OFFSET value. NULL means no offset */ 34 ){ 35 Select *pNew; 36 pNew = sqliteMalloc( sizeof(*pNew) ); 37 assert( !pOffset || pLimit ); /* Can't have OFFSET without LIMIT. */ 38 if( pNew==0 ){ 39 sqlite3ExprListDelete(pEList); 40 sqlite3SrcListDelete(pSrc); 41 sqlite3ExprDelete(pWhere); 42 sqlite3ExprListDelete(pGroupBy); 43 sqlite3ExprDelete(pHaving); 44 sqlite3ExprListDelete(pOrderBy); 45 sqlite3ExprDelete(pLimit); 46 sqlite3ExprDelete(pOffset); 47 }else{ 48 if( pEList==0 ){ 49 pEList = sqlite3ExprListAppend(0, sqlite3Expr(TK_ALL,0,0,0), 0); 50 } 51 pNew->pEList = pEList; 52 pNew->pSrc = pSrc; 53 pNew->pWhere = pWhere; 54 pNew->pGroupBy = pGroupBy; 55 pNew->pHaving = pHaving; 56 pNew->pOrderBy = pOrderBy; 57 pNew->isDistinct = isDistinct; 58 pNew->op = TK_SELECT; 59 pNew->pLimit = pLimit; 60 pNew->pOffset = pOffset; 61 pNew->iLimit = -1; 62 pNew->iOffset = -1; 63 pNew->addrOpenVirt[0] = -1; 64 pNew->addrOpenVirt[1] = -1; 65 pNew->addrOpenVirt[2] = -1; 66 } 67 return pNew; 68 } 69 70 /* 71 ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the 72 ** type of join. Return an integer constant that expresses that type 73 ** in terms of the following bit values: 74 ** 75 ** JT_INNER 76 ** JT_CROSS 77 ** JT_OUTER 78 ** JT_NATURAL 79 ** JT_LEFT 80 ** JT_RIGHT 81 ** 82 ** A full outer join is the combination of JT_LEFT and JT_RIGHT. 83 ** 84 ** If an illegal or unsupported join type is seen, then still return 85 ** a join type, but put an error in the pParse structure. 86 */ 87 int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){ 88 int jointype = 0; 89 Token *apAll[3]; 90 Token *p; 91 static const struct { 92 const char zKeyword[8]; 93 u8 nChar; 94 u8 code; 95 } keywords[] = { 96 { "natural", 7, JT_NATURAL }, 97 { "left", 4, JT_LEFT|JT_OUTER }, 98 { "right", 5, JT_RIGHT|JT_OUTER }, 99 { "full", 4, JT_LEFT|JT_RIGHT|JT_OUTER }, 100 { "outer", 5, JT_OUTER }, 101 { "inner", 5, JT_INNER }, 102 { "cross", 5, JT_INNER|JT_CROSS }, 103 }; 104 int i, j; 105 apAll[0] = pA; 106 apAll[1] = pB; 107 apAll[2] = pC; 108 for(i=0; i<3 && apAll[i]; i++){ 109 p = apAll[i]; 110 for(j=0; j<sizeof(keywords)/sizeof(keywords[0]); j++){ 111 if( p->n==keywords[j].nChar 112 && sqlite3StrNICmp(p->z, keywords[j].zKeyword, p->n)==0 ){ 113 jointype |= keywords[j].code; 114 break; 115 } 116 } 117 if( j>=sizeof(keywords)/sizeof(keywords[0]) ){ 118 jointype |= JT_ERROR; 119 break; 120 } 121 } 122 if( 123 (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) || 124 (jointype & JT_ERROR)!=0 125 ){ 126 const char *zSp1 = " "; 127 const char *zSp2 = " "; 128 if( pB==0 ){ zSp1++; } 129 if( pC==0 ){ zSp2++; } 130 sqlite3ErrorMsg(pParse, "unknown or unsupported join type: " 131 "%T%s%T%s%T", pA, zSp1, pB, zSp2, pC); 132 jointype = JT_INNER; 133 }else if( jointype & JT_RIGHT ){ 134 sqlite3ErrorMsg(pParse, 135 "RIGHT and FULL OUTER JOINs are not currently supported"); 136 jointype = JT_INNER; 137 } 138 return jointype; 139 } 140 141 /* 142 ** Return the index of a column in a table. Return -1 if the column 143 ** is not contained in the table. 144 */ 145 static int columnIndex(Table *pTab, const char *zCol){ 146 int i; 147 for(i=0; i<pTab->nCol; i++){ 148 if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i; 149 } 150 return -1; 151 } 152 153 /* 154 ** Set the value of a token to a '\000'-terminated string. 155 */ 156 static void setToken(Token *p, const char *z){ 157 p->z = z; 158 p->n = strlen(z); 159 p->dyn = 0; 160 } 161 162 /* 163 ** Create an expression node for an identifier with the name of zName 164 */ 165 static Expr *createIdExpr(const char *zName){ 166 Token dummy; 167 setToken(&dummy, zName); 168 return sqlite3Expr(TK_ID, 0, 0, &dummy); 169 } 170 171 172 /* 173 ** Add a term to the WHERE expression in *ppExpr that requires the 174 ** zCol column to be equal in the two tables pTab1 and pTab2. 175 */ 176 static void addWhereTerm( 177 const char *zCol, /* Name of the column */ 178 const Table *pTab1, /* First table */ 179 const char *zAlias1, /* Alias for first table. May be NULL */ 180 const Table *pTab2, /* Second table */ 181 const char *zAlias2, /* Alias for second table. May be NULL */ 182 int iRightJoinTable, /* VDBE cursor for the right table */ 183 Expr **ppExpr /* Add the equality term to this expression */ 184 ){ 185 Expr *pE1a, *pE1b, *pE1c; 186 Expr *pE2a, *pE2b, *pE2c; 187 Expr *pE; 188 189 pE1a = createIdExpr(zCol); 190 pE2a = createIdExpr(zCol); 191 if( zAlias1==0 ){ 192 zAlias1 = pTab1->zName; 193 } 194 pE1b = createIdExpr(zAlias1); 195 if( zAlias2==0 ){ 196 zAlias2 = pTab2->zName; 197 } 198 pE2b = createIdExpr(zAlias2); 199 pE1c = sqlite3Expr(TK_DOT, pE1b, pE1a, 0); 200 pE2c = sqlite3Expr(TK_DOT, pE2b, pE2a, 0); 201 pE = sqlite3Expr(TK_EQ, pE1c, pE2c, 0); 202 ExprSetProperty(pE, EP_FromJoin); 203 pE->iRightJoinTable = iRightJoinTable; 204 *ppExpr = sqlite3ExprAnd(*ppExpr, pE); 205 } 206 207 /* 208 ** Set the EP_FromJoin property on all terms of the given expression. 209 ** And set the Expr.iRightJoinTable to iTable for every term in the 210 ** expression. 211 ** 212 ** The EP_FromJoin property is used on terms of an expression to tell 213 ** the LEFT OUTER JOIN processing logic that this term is part of the 214 ** join restriction specified in the ON or USING clause and not a part 215 ** of the more general WHERE clause. These terms are moved over to the 216 ** WHERE clause during join processing but we need to remember that they 217 ** originated in the ON or USING clause. 218 ** 219 ** The Expr.iRightJoinTable tells the WHERE clause processing that the 220 ** expression depends on table iRightJoinTable even if that table is not 221 ** explicitly mentioned in the expression. That information is needed 222 ** for cases like this: 223 ** 224 ** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5 225 ** 226 ** The where clause needs to defer the handling of the t1.x=5 227 ** term until after the t2 loop of the join. In that way, a 228 ** NULL t2 row will be inserted whenever t1.x!=5. If we do not 229 ** defer the handling of t1.x=5, it will be processed immediately 230 ** after the t1 loop and rows with t1.x!=5 will never appear in 231 ** the output, which is incorrect. 232 */ 233 static void setJoinExpr(Expr *p, int iTable){ 234 while( p ){ 235 ExprSetProperty(p, EP_FromJoin); 236 p->iRightJoinTable = iTable; 237 setJoinExpr(p->pLeft, iTable); 238 p = p->pRight; 239 } 240 } 241 242 /* 243 ** This routine processes the join information for a SELECT statement. 244 ** ON and USING clauses are converted into extra terms of the WHERE clause. 245 ** NATURAL joins also create extra WHERE clause terms. 246 ** 247 ** The terms of a FROM clause are contained in the Select.pSrc structure. 248 ** The left most table is the first entry in Select.pSrc. The right-most 249 ** table is the last entry. The join operator is held in the entry to 250 ** the left. Thus entry 0 contains the join operator for the join between 251 ** entries 0 and 1. Any ON or USING clauses associated with the join are 252 ** also attached to the left entry. 253 ** 254 ** This routine returns the number of errors encountered. 255 */ 256 static int sqliteProcessJoin(Parse *pParse, Select *p){ 257 SrcList *pSrc; /* All tables in the FROM clause */ 258 int i, j; /* Loop counters */ 259 struct SrcList_item *pLeft; /* Left table being joined */ 260 struct SrcList_item *pRight; /* Right table being joined */ 261 262 pSrc = p->pSrc; 263 pLeft = &pSrc->a[0]; 264 pRight = &pLeft[1]; 265 for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){ 266 Table *pLeftTab = pLeft->pTab; 267 Table *pRightTab = pRight->pTab; 268 269 if( pLeftTab==0 || pRightTab==0 ) continue; 270 271 /* When the NATURAL keyword is present, add WHERE clause terms for 272 ** every column that the two tables have in common. 273 */ 274 if( pLeft->jointype & JT_NATURAL ){ 275 if( pLeft->pOn || pLeft->pUsing ){ 276 sqlite3ErrorMsg(pParse, "a NATURAL join may not have " 277 "an ON or USING clause", 0); 278 return 1; 279 } 280 for(j=0; j<pLeftTab->nCol; j++){ 281 char *zName = pLeftTab->aCol[j].zName; 282 if( columnIndex(pRightTab, zName)>=0 ){ 283 addWhereTerm(zName, pLeftTab, pLeft->zAlias, 284 pRightTab, pRight->zAlias, 285 pRight->iCursor, &p->pWhere); 286 287 } 288 } 289 } 290 291 /* Disallow both ON and USING clauses in the same join 292 */ 293 if( pLeft->pOn && pLeft->pUsing ){ 294 sqlite3ErrorMsg(pParse, "cannot have both ON and USING " 295 "clauses in the same join"); 296 return 1; 297 } 298 299 /* Add the ON clause to the end of the WHERE clause, connected by 300 ** an AND operator. 301 */ 302 if( pLeft->pOn ){ 303 setJoinExpr(pLeft->pOn, pRight->iCursor); 304 p->pWhere = sqlite3ExprAnd(p->pWhere, pLeft->pOn); 305 pLeft->pOn = 0; 306 } 307 308 /* Create extra terms on the WHERE clause for each column named 309 ** in the USING clause. Example: If the two tables to be joined are 310 ** A and B and the USING clause names X, Y, and Z, then add this 311 ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z 312 ** Report an error if any column mentioned in the USING clause is 313 ** not contained in both tables to be joined. 314 */ 315 if( pLeft->pUsing ){ 316 IdList *pList = pLeft->pUsing; 317 for(j=0; j<pList->nId; j++){ 318 char *zName = pList->a[j].zName; 319 if( columnIndex(pLeftTab, zName)<0 || columnIndex(pRightTab, zName)<0 ){ 320 sqlite3ErrorMsg(pParse, "cannot join using column %s - column " 321 "not present in both tables", zName); 322 return 1; 323 } 324 addWhereTerm(zName, pLeftTab, pLeft->zAlias, 325 pRightTab, pRight->zAlias, 326 pRight->iCursor, &p->pWhere); 327 } 328 } 329 } 330 return 0; 331 } 332 333 /* 334 ** Delete the given Select structure and all of its substructures. 335 */ 336 void sqlite3SelectDelete(Select *p){ 337 if( p==0 ) return; 338 sqlite3ExprListDelete(p->pEList); 339 sqlite3SrcListDelete(p->pSrc); 340 sqlite3ExprDelete(p->pWhere); 341 sqlite3ExprListDelete(p->pGroupBy); 342 sqlite3ExprDelete(p->pHaving); 343 sqlite3ExprListDelete(p->pOrderBy); 344 sqlite3SelectDelete(p->pPrior); 345 sqlite3ExprDelete(p->pLimit); 346 sqlite3ExprDelete(p->pOffset); 347 sqliteFree(p); 348 } 349 350 /* 351 ** Insert code into "v" that will push the record on the top of the 352 ** stack into the sorter. 353 */ 354 static void pushOntoSorter(Parse *pParse, Vdbe *v, ExprList *pOrderBy){ 355 sqlite3ExprCodeExprList(pParse, pOrderBy); 356 sqlite3VdbeAddOp(v, OP_Sequence, pOrderBy->iECursor, 0); 357 sqlite3VdbeAddOp(v, OP_Pull, pOrderBy->nExpr + 1, 0); 358 sqlite3VdbeAddOp(v, OP_MakeRecord, pOrderBy->nExpr + 2, 0); 359 sqlite3VdbeAddOp(v, OP_IdxInsert, pOrderBy->iECursor, 0); 360 } 361 362 /* 363 ** Add code to implement the OFFSET and LIMIT 364 */ 365 static void codeLimiter( 366 Vdbe *v, /* Generate code into this VM */ 367 Select *p, /* The SELECT statement being coded */ 368 int iContinue, /* Jump here to skip the current record */ 369 int iBreak, /* Jump here to end the loop */ 370 int nPop /* Number of times to pop stack when jumping */ 371 ){ 372 if( p->iOffset>=0 && iContinue!=0 ){ 373 int addr = sqlite3VdbeCurrentAddr(v) + 3; 374 if( nPop>0 ) addr++; 375 sqlite3VdbeAddOp(v, OP_MemIncr, p->iOffset, 0); 376 sqlite3VdbeAddOp(v, OP_IfMemPos, p->iOffset, addr); 377 if( nPop>0 ){ 378 sqlite3VdbeAddOp(v, OP_Pop, nPop, 0); 379 } 380 sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue); 381 VdbeComment((v, "# skip OFFSET records")); 382 } 383 if( p->iLimit>=0 && iBreak!=0 ){ 384 sqlite3VdbeAddOp(v, OP_MemIncr, p->iLimit, iBreak); 385 VdbeComment((v, "# exit when LIMIT reached")); 386 } 387 } 388 389 /* 390 ** Add code that will check to make sure the top N elements of the 391 ** stack are distinct. iTab is a sorting index that holds previously 392 ** seen combinations of the N values. A new entry is made in iTab 393 ** if the current N values are new. 394 ** 395 ** A jump to addrRepeat is made and the K values are popped from the 396 ** stack if the top N elements are not distinct. 397 */ 398 static void codeDistinct( 399 Vdbe *v, /* Generate code into this VM */ 400 int iTab, /* A sorting index used to test for distinctness */ 401 int addrRepeat, /* Jump to here if not distinct */ 402 int N, /* The top N elements of the stack must be distinct */ 403 int K /* Pop K elements from the stack if indistinct */ 404 ){ 405 #if NULL_ALWAYS_DISTINCT 406 sqlite3VdbeAddOp(v, OP_IsNull, -N, sqlite3VdbeCurrentAddr(v)+6); 407 #endif 408 sqlite3VdbeAddOp(v, OP_MakeRecord, -N, 0); 409 sqlite3VdbeAddOp(v, OP_Distinct, iTab, sqlite3VdbeCurrentAddr(v)+3); 410 sqlite3VdbeAddOp(v, OP_Pop, K, 0); 411 sqlite3VdbeAddOp(v, OP_Goto, 0, addrRepeat); 412 VdbeComment((v, "# skip indistinct records")); 413 sqlite3VdbeAddOp(v, OP_IdxInsert, iTab, 0); 414 } 415 416 417 /* 418 ** This routine generates the code for the inside of the inner loop 419 ** of a SELECT. 420 ** 421 ** If srcTab and nColumn are both zero, then the pEList expressions 422 ** are evaluated in order to get the data for this row. If nColumn>0 423 ** then data is pulled from srcTab and pEList is used only to get the 424 ** datatypes for each column. 425 */ 426 static int selectInnerLoop( 427 Parse *pParse, /* The parser context */ 428 Select *p, /* The complete select statement being coded */ 429 ExprList *pEList, /* List of values being extracted */ 430 int srcTab, /* Pull data from this table */ 431 int nColumn, /* Number of columns in the source table */ 432 ExprList *pOrderBy, /* If not NULL, sort results using this key */ 433 int distinct, /* If >=0, make sure results are distinct */ 434 int eDest, /* How to dispose of the results */ 435 int iParm, /* An argument to the disposal method */ 436 int iContinue, /* Jump here to continue with next row */ 437 int iBreak, /* Jump here to break out of the inner loop */ 438 char *aff /* affinity string if eDest is SRT_Union */ 439 ){ 440 Vdbe *v = pParse->pVdbe; 441 int i; 442 int hasDistinct; /* True if the DISTINCT keyword is present */ 443 444 if( v==0 ) return 0; 445 assert( pEList!=0 ); 446 447 /* If there was a LIMIT clause on the SELECT statement, then do the check 448 ** to see if this row should be output. 449 */ 450 hasDistinct = distinct>=0 && pEList && pEList->nExpr>0; 451 if( pOrderBy==0 && !hasDistinct ){ 452 codeLimiter(v, p, iContinue, iBreak, 0); 453 } 454 455 /* Pull the requested columns. 456 */ 457 if( nColumn>0 ){ 458 for(i=0; i<nColumn; i++){ 459 sqlite3VdbeAddOp(v, OP_Column, srcTab, i); 460 } 461 }else{ 462 nColumn = pEList->nExpr; 463 sqlite3ExprCodeExprList(pParse, pEList); 464 } 465 466 /* If the DISTINCT keyword was present on the SELECT statement 467 ** and this row has been seen before, then do not make this row 468 ** part of the result. 469 */ 470 if( hasDistinct ){ 471 int n = pEList->nExpr; 472 codeDistinct(v, distinct, iContinue, n, n+1); 473 if( pOrderBy==0 ){ 474 codeLimiter(v, p, iContinue, iBreak, nColumn); 475 } 476 } 477 478 switch( eDest ){ 479 /* In this mode, write each query result to the key of the temporary 480 ** table iParm. 481 */ 482 #ifndef SQLITE_OMIT_COMPOUND_SELECT 483 case SRT_Union: { 484 sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, NULL_ALWAYS_DISTINCT); 485 if( aff ){ 486 sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC); 487 } 488 sqlite3VdbeAddOp(v, OP_IdxInsert, iParm, 0); 489 break; 490 } 491 492 /* Construct a record from the query result, but instead of 493 ** saving that record, use it as a key to delete elements from 494 ** the temporary table iParm. 495 */ 496 case SRT_Except: { 497 int addr; 498 addr = sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, NULL_ALWAYS_DISTINCT); 499 sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC); 500 sqlite3VdbeAddOp(v, OP_NotFound, iParm, addr+3); 501 sqlite3VdbeAddOp(v, OP_Delete, iParm, 0); 502 break; 503 } 504 #endif 505 506 /* Store the result as data using a unique key. 507 */ 508 case SRT_Table: 509 case SRT_VirtualTab: { 510 sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0); 511 if( pOrderBy ){ 512 pushOntoSorter(pParse, v, pOrderBy); 513 }else{ 514 sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0); 515 sqlite3VdbeAddOp(v, OP_Pull, 1, 0); 516 sqlite3VdbeAddOp(v, OP_Insert, iParm, 0); 517 } 518 break; 519 } 520 521 #ifndef SQLITE_OMIT_SUBQUERY 522 /* If we are creating a set for an "expr IN (SELECT ...)" construct, 523 ** then there should be a single item on the stack. Write this 524 ** item into the set table with bogus data. 525 */ 526 case SRT_Set: { 527 int addr1 = sqlite3VdbeCurrentAddr(v); 528 int addr2; 529 530 assert( nColumn==1 ); 531 sqlite3VdbeAddOp(v, OP_NotNull, -1, addr1+3); 532 sqlite3VdbeAddOp(v, OP_Pop, 1, 0); 533 addr2 = sqlite3VdbeAddOp(v, OP_Goto, 0, 0); 534 if( pOrderBy ){ 535 /* At first glance you would think we could optimize out the 536 ** ORDER BY in this case since the order of entries in the set 537 ** does not matter. But there might be a LIMIT clause, in which 538 ** case the order does matter */ 539 pushOntoSorter(pParse, v, pOrderBy); 540 }else{ 541 char aff = (iParm>>16)&0xFF; 542 aff = sqlite3CompareAffinity(pEList->a[0].pExpr, aff); 543 sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &aff, 1); 544 sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0); 545 } 546 sqlite3VdbeJumpHere(v, addr2); 547 break; 548 } 549 550 /* If this is a scalar select that is part of an expression, then 551 ** store the results in the appropriate memory cell and break out 552 ** of the scan loop. 553 */ 554 case SRT_Exists: 555 case SRT_Mem: { 556 assert( nColumn==1 ); 557 if( pOrderBy ){ 558 pushOntoSorter(pParse, v, pOrderBy); 559 }else{ 560 sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1); 561 sqlite3VdbeAddOp(v, OP_Goto, 0, iBreak); 562 } 563 break; 564 } 565 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */ 566 567 /* Send the data to the callback function or to a subroutine. In the 568 ** case of a subroutine, the subroutine itself is responsible for 569 ** popping the data from the stack. 570 */ 571 case SRT_Subroutine: 572 case SRT_Callback: { 573 if( pOrderBy ){ 574 sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0); 575 pushOntoSorter(pParse, v, pOrderBy); 576 }else if( eDest==SRT_Subroutine ){ 577 sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm); 578 }else{ 579 sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0); 580 } 581 break; 582 } 583 584 #if !defined(SQLITE_OMIT_TRIGGER) 585 /* Discard the results. This is used for SELECT statements inside 586 ** the body of a TRIGGER. The purpose of such selects is to call 587 ** user-defined functions that have side effects. We do not care 588 ** about the actual results of the select. 589 */ 590 default: { 591 assert( eDest==SRT_Discard ); 592 sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0); 593 break; 594 } 595 #endif 596 } 597 return 0; 598 } 599 600 /* 601 ** Given an expression list, generate a KeyInfo structure that records 602 ** the collating sequence for each expression in that expression list. 603 ** 604 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting 605 ** KeyInfo structure is appropriate for initializing a virtual index to 606 ** implement that clause. If the ExprList is the result set of a SELECT 607 ** then the KeyInfo structure is appropriate for initializing a virtual 608 ** index to implement a DISTINCT test. 609 ** 610 ** Space to hold the KeyInfo structure is obtain from malloc. The calling 611 ** function is responsible for seeing that this structure is eventually 612 ** freed. Add the KeyInfo structure to the P3 field of an opcode using 613 ** P3_KEYINFO_HANDOFF is the usual way of dealing with this. 614 */ 615 static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){ 616 sqlite3 *db = pParse->db; 617 int nExpr; 618 KeyInfo *pInfo; 619 struct ExprList_item *pItem; 620 int i; 621 622 nExpr = pList->nExpr; 623 pInfo = sqliteMalloc( sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) ); 624 if( pInfo ){ 625 pInfo->aSortOrder = (char*)&pInfo->aColl[nExpr]; 626 pInfo->nField = nExpr; 627 pInfo->enc = db->enc; 628 for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){ 629 CollSeq *pColl; 630 pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr); 631 if( !pColl ){ 632 pColl = db->pDfltColl; 633 } 634 pInfo->aColl[i] = pColl; 635 pInfo->aSortOrder[i] = pItem->sortOrder; 636 } 637 } 638 return pInfo; 639 } 640 641 642 /* 643 ** If the inner loop was generated using a non-null pOrderBy argument, 644 ** then the results were placed in a sorter. After the loop is terminated 645 ** we need to run the sorter and output the results. The following 646 ** routine generates the code needed to do that. 647 */ 648 static void generateSortTail( 649 Parse *pParse, /* The parsing context */ 650 Select *p, /* The SELECT statement */ 651 Vdbe *v, /* Generate code into this VDBE */ 652 int nColumn, /* Number of columns of data */ 653 int eDest, /* Write the sorted results here */ 654 int iParm /* Optional parameter associated with eDest */ 655 ){ 656 int brk = sqlite3VdbeMakeLabel(v); 657 int cont = sqlite3VdbeMakeLabel(v); 658 int addr; 659 int iTab; 660 ExprList *pOrderBy = p->pOrderBy; 661 662 iTab = pOrderBy->iECursor; 663 addr = 1 + sqlite3VdbeAddOp(v, OP_Sort, iTab, brk); 664 codeLimiter(v, p, cont, brk, 0); 665 sqlite3VdbeAddOp(v, OP_Column, iTab, pOrderBy->nExpr + 1); 666 switch( eDest ){ 667 case SRT_Table: 668 case SRT_VirtualTab: { 669 sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0); 670 sqlite3VdbeAddOp(v, OP_Pull, 1, 0); 671 sqlite3VdbeAddOp(v, OP_Insert, iParm, 0); 672 break; 673 } 674 #ifndef SQLITE_OMIT_SUBQUERY 675 case SRT_Set: { 676 assert( nColumn==1 ); 677 sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3); 678 sqlite3VdbeAddOp(v, OP_Pop, 1, 0); 679 sqlite3VdbeAddOp(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+3); 680 sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, "n", P3_STATIC); 681 sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0); 682 break; 683 } 684 case SRT_Exists: 685 case SRT_Mem: { 686 assert( nColumn==1 ); 687 sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1); 688 sqlite3VdbeAddOp(v, OP_Goto, 0, brk); 689 break; 690 } 691 #endif 692 case SRT_Callback: 693 case SRT_Subroutine: { 694 int i; 695 sqlite3VdbeAddOp(v, OP_Integer, p->pEList->nExpr, 0); 696 sqlite3VdbeAddOp(v, OP_Pull, 1, 0); 697 for(i=0; i<nColumn; i++){ 698 sqlite3VdbeAddOp(v, OP_Column, -1-i, i); 699 } 700 if( eDest==SRT_Callback ){ 701 sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0); 702 }else{ 703 sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm); 704 } 705 sqlite3VdbeAddOp(v, OP_Pop, 2, 0); 706 break; 707 } 708 default: { 709 /* Do nothing */ 710 break; 711 } 712 } 713 sqlite3VdbeResolveLabel(v, cont); 714 sqlite3VdbeAddOp(v, OP_Next, iTab, addr); 715 sqlite3VdbeResolveLabel(v, brk); 716 } 717 718 /* 719 ** Return a pointer to a string containing the 'declaration type' of the 720 ** expression pExpr. The string may be treated as static by the caller. 721 ** 722 ** If the declaration type is the exact datatype definition extracted from 723 ** the original CREATE TABLE statement if the expression is a column. 724 ** 725 ** The declaration type for an expression is either TEXT, NUMERIC or ANY. 726 ** The declaration type for a ROWID field is INTEGER. 727 */ 728 static const char *columnType(NameContext *pNC, Expr *pExpr){ 729 char const *zType; 730 int j; 731 if( pExpr==0 || pNC->pSrcList==0 ) return 0; 732 733 /* The TK_AS operator can only occur in ORDER BY, GROUP BY, HAVING, 734 ** and LIMIT clauses. But pExpr originates in the result set of a 735 ** SELECT. So pExpr can never contain an AS operator. 736 */ 737 assert( pExpr->op!=TK_AS ); 738 739 switch( pExpr->op ){ 740 case TK_COLUMN: { 741 Table *pTab = 0; 742 int iCol = pExpr->iColumn; 743 while( pNC && !pTab ){ 744 SrcList *pTabList = pNC->pSrcList; 745 for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); 746 if( j<pTabList->nSrc ){ 747 pTab = pTabList->a[j].pTab; 748 }else{ 749 pNC = pNC->pNext; 750 } 751 } 752 if( pTab==0 ){ 753 /* FIX ME: 754 ** This can occurs if you have something like "SELECT new.x;" inside 755 ** a trigger. In other words, if you reference the special "new" 756 ** table in the result set of a select. We do not have a good way 757 ** to find the actual table type, so call it "TEXT". This is really 758 ** something of a bug, but I do not know how to fix it. 759 ** 760 ** This code does not produce the correct answer - it just prevents 761 ** a segfault. See ticket #1229. 762 */ 763 zType = "TEXT"; 764 break; 765 } 766 assert( pTab ); 767 if( iCol<0 ) iCol = pTab->iPKey; 768 assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) ); 769 if( iCol<0 ){ 770 zType = "INTEGER"; 771 }else{ 772 zType = pTab->aCol[iCol].zType; 773 } 774 break; 775 } 776 #ifndef SQLITE_OMIT_SUBQUERY 777 case TK_SELECT: { 778 NameContext sNC; 779 Select *pS = pExpr->pSelect; 780 sNC.pSrcList = pExpr->pSelect->pSrc; 781 sNC.pNext = pNC; 782 zType = columnType(&sNC, pS->pEList->a[0].pExpr); 783 break; 784 } 785 #endif 786 default: 787 zType = 0; 788 } 789 790 return zType; 791 } 792 793 /* 794 ** Generate code that will tell the VDBE the declaration types of columns 795 ** in the result set. 796 */ 797 static void generateColumnTypes( 798 Parse *pParse, /* Parser context */ 799 SrcList *pTabList, /* List of tables */ 800 ExprList *pEList /* Expressions defining the result set */ 801 ){ 802 Vdbe *v = pParse->pVdbe; 803 int i; 804 NameContext sNC; 805 sNC.pSrcList = pTabList; 806 for(i=0; i<pEList->nExpr; i++){ 807 Expr *p = pEList->a[i].pExpr; 808 const char *zType = columnType(&sNC, p); 809 if( zType==0 ) continue; 810 /* The vdbe must make it's own copy of the column-type, in case the 811 ** schema is reset before this virtual machine is deleted. 812 */ 813 sqlite3VdbeSetColName(v, i+pEList->nExpr, zType, strlen(zType)); 814 } 815 } 816 817 /* 818 ** Generate code that will tell the VDBE the names of columns 819 ** in the result set. This information is used to provide the 820 ** azCol[] values in the callback. 821 */ 822 static void generateColumnNames( 823 Parse *pParse, /* Parser context */ 824 SrcList *pTabList, /* List of tables */ 825 ExprList *pEList /* Expressions defining the result set */ 826 ){ 827 Vdbe *v = pParse->pVdbe; 828 int i, j; 829 sqlite3 *db = pParse->db; 830 int fullNames, shortNames; 831 832 #ifndef SQLITE_OMIT_EXPLAIN 833 /* If this is an EXPLAIN, skip this step */ 834 if( pParse->explain ){ 835 return; 836 } 837 #endif 838 839 assert( v!=0 ); 840 if( pParse->colNamesSet || v==0 || sqlite3_malloc_failed ) return; 841 pParse->colNamesSet = 1; 842 fullNames = (db->flags & SQLITE_FullColNames)!=0; 843 shortNames = (db->flags & SQLITE_ShortColNames)!=0; 844 sqlite3VdbeSetNumCols(v, pEList->nExpr); 845 for(i=0; i<pEList->nExpr; i++){ 846 Expr *p; 847 p = pEList->a[i].pExpr; 848 if( p==0 ) continue; 849 if( pEList->a[i].zName ){ 850 char *zName = pEList->a[i].zName; 851 sqlite3VdbeSetColName(v, i, zName, strlen(zName)); 852 continue; 853 } 854 if( p->op==TK_COLUMN && pTabList ){ 855 Table *pTab; 856 char *zCol; 857 int iCol = p->iColumn; 858 for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){} 859 assert( j<pTabList->nSrc ); 860 pTab = pTabList->a[j].pTab; 861 if( iCol<0 ) iCol = pTab->iPKey; 862 assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) ); 863 if( iCol<0 ){ 864 zCol = "rowid"; 865 }else{ 866 zCol = pTab->aCol[iCol].zName; 867 } 868 if( !shortNames && !fullNames && p->span.z && p->span.z[0] ){ 869 sqlite3VdbeSetColName(v, i, p->span.z, p->span.n); 870 }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){ 871 char *zName = 0; 872 char *zTab; 873 874 zTab = pTabList->a[j].zAlias; 875 if( fullNames || zTab==0 ) zTab = pTab->zName; 876 sqlite3SetString(&zName, zTab, ".", zCol, 0); 877 sqlite3VdbeSetColName(v, i, zName, P3_DYNAMIC); 878 }else{ 879 sqlite3VdbeSetColName(v, i, zCol, strlen(zCol)); 880 } 881 }else if( p->span.z && p->span.z[0] ){ 882 sqlite3VdbeSetColName(v, i, p->span.z, p->span.n); 883 /* sqlite3VdbeCompressSpace(v, addr); */ 884 }else{ 885 char zName[30]; 886 assert( p->op!=TK_COLUMN || pTabList==0 ); 887 sprintf(zName, "column%d", i+1); 888 sqlite3VdbeSetColName(v, i, zName, 0); 889 } 890 } 891 generateColumnTypes(pParse, pTabList, pEList); 892 } 893 894 #ifndef SQLITE_OMIT_COMPOUND_SELECT 895 /* 896 ** Name of the connection operator, used for error messages. 897 */ 898 static const char *selectOpName(int id){ 899 char *z; 900 switch( id ){ 901 case TK_ALL: z = "UNION ALL"; break; 902 case TK_INTERSECT: z = "INTERSECT"; break; 903 case TK_EXCEPT: z = "EXCEPT"; break; 904 default: z = "UNION"; break; 905 } 906 return z; 907 } 908 #endif /* SQLITE_OMIT_COMPOUND_SELECT */ 909 910 /* 911 ** Forward declaration 912 */ 913 static int prepSelectStmt(Parse*, Select*); 914 915 /* 916 ** Given a SELECT statement, generate a Table structure that describes 917 ** the result set of that SELECT. 918 */ 919 Table *sqlite3ResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){ 920 Table *pTab; 921 int i, j; 922 ExprList *pEList; 923 Column *aCol, *pCol; 924 925 if( prepSelectStmt(pParse, pSelect) ){ 926 return 0; 927 } 928 if( sqlite3SelectResolve(pParse, pSelect, 0) ){ 929 return 0; 930 } 931 pTab = sqliteMalloc( sizeof(Table) ); 932 if( pTab==0 ){ 933 return 0; 934 } 935 pTab->nRef = 1; 936 pTab->zName = zTabName ? sqliteStrDup(zTabName) : 0; 937 pEList = pSelect->pEList; 938 pTab->nCol = pEList->nExpr; 939 assert( pTab->nCol>0 ); 940 pTab->aCol = aCol = sqliteMalloc( sizeof(pTab->aCol[0])*pTab->nCol ); 941 for(i=0, pCol=aCol; i<pTab->nCol; i++, pCol++){ 942 Expr *p, *pR; 943 char *zType; 944 char *zName; 945 char *zBasename; 946 int cnt; 947 NameContext sNC; 948 949 /* Get an appropriate name for the column 950 */ 951 p = pEList->a[i].pExpr; 952 assert( p->pRight==0 || p->pRight->token.z==0 || p->pRight->token.z[0]!=0 ); 953 if( (zName = pEList->a[i].zName)!=0 ){ 954 /* If the column contains an "AS <name>" phrase, use <name> as the name */ 955 zName = sqliteStrDup(zName); 956 }else if( p->op==TK_DOT 957 && (pR=p->pRight)!=0 && pR->token.z && pR->token.z[0] ){ 958 /* For columns of the from A.B use B as the name */ 959 zName = sqlite3MPrintf("%T", &pR->token); 960 }else if( p->span.z && p->span.z[0] ){ 961 /* Use the original text of the column expression as its name */ 962 zName = sqlite3MPrintf("%T", &p->span); 963 }else{ 964 /* If all else fails, make up a name */ 965 zName = sqlite3MPrintf("column%d", i+1); 966 } 967 sqlite3Dequote(zName); 968 if( sqlite3_malloc_failed ){ 969 sqliteFree(zName); 970 sqlite3DeleteTable(0, pTab); 971 return 0; 972 } 973 974 /* Make sure the column name is unique. If the name is not unique, 975 ** append a integer to the name so that it becomes unique. 976 */ 977 zBasename = zName; 978 for(j=cnt=0; j<i; j++){ 979 if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){ 980 zName = sqlite3MPrintf("%s:%d", zBasename, ++cnt); 981 j = -1; 982 if( zName==0 ) break; 983 } 984 } 985 if( zBasename!=zName ){ 986 sqliteFree(zBasename); 987 } 988 pCol->zName = zName; 989 990 /* Get the typename, type affinity, and collating sequence for the 991 ** column. 992 */ 993 memset(&sNC, 0, sizeof(sNC)); 994 sNC.pSrcList = pSelect->pSrc; 995 zType = sqliteStrDup(columnType(&sNC, p)); 996 pCol->zType = zType; 997 pCol->affinity = sqlite3ExprAffinity(p); 998 pCol->pColl = sqlite3ExprCollSeq(pParse, p); 999 if( !pCol->pColl ){ 1000 pCol->pColl = pParse->db->pDfltColl; 1001 } 1002 } 1003 pTab->iPKey = -1; 1004 return pTab; 1005 } 1006 1007 /* 1008 ** Prepare a SELECT statement for processing by doing the following 1009 ** things: 1010 ** 1011 ** (1) Make sure VDBE cursor numbers have been assigned to every 1012 ** element of the FROM clause. 1013 ** 1014 ** (2) Fill in the pTabList->a[].pTab fields in the SrcList that 1015 ** defines FROM clause. When views appear in the FROM clause, 1016 ** fill pTabList->a[].pSelect with a copy of the SELECT statement 1017 ** that implements the view. A copy is made of the view's SELECT 1018 ** statement so that we can freely modify or delete that statement 1019 ** without worrying about messing up the presistent representation 1020 ** of the view. 1021 ** 1022 ** (3) Add terms to the WHERE clause to accomodate the NATURAL keyword 1023 ** on joins and the ON and USING clause of joins. 1024 ** 1025 ** (4) Scan the list of columns in the result set (pEList) looking 1026 ** for instances of the "*" operator or the TABLE.* operator. 1027 ** If found, expand each "*" to be every column in every table 1028 ** and TABLE.* to be every column in TABLE. 1029 ** 1030 ** Return 0 on success. If there are problems, leave an error message 1031 ** in pParse and return non-zero. 1032 */ 1033 static int prepSelectStmt(Parse *pParse, Select *p){ 1034 int i, j, k, rc; 1035 SrcList *pTabList; 1036 ExprList *pEList; 1037 Table *pTab; 1038 struct SrcList_item *pFrom; 1039 1040 if( p==0 || p->pSrc==0 || sqlite3_malloc_failed ) return 1; 1041 pTabList = p->pSrc; 1042 pEList = p->pEList; 1043 1044 /* Make sure cursor numbers have been assigned to all entries in 1045 ** the FROM clause of the SELECT statement. 1046 */ 1047 sqlite3SrcListAssignCursors(pParse, p->pSrc); 1048 1049 /* Look up every table named in the FROM clause of the select. If 1050 ** an entry of the FROM clause is a subquery instead of a table or view, 1051 ** then create a transient table structure to describe the subquery. 1052 */ 1053 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ 1054 if( pFrom->pTab!=0 ){ 1055 /* This statement has already been prepared. There is no need 1056 ** to go further. */ 1057 assert( i==0 ); 1058 return 0; 1059 } 1060 if( pFrom->zName==0 ){ 1061 #ifndef SQLITE_OMIT_SUBQUERY 1062 /* A sub-query in the FROM clause of a SELECT */ 1063 assert( pFrom->pSelect!=0 ); 1064 if( pFrom->zAlias==0 ){ 1065 pFrom->zAlias = 1066 sqlite3MPrintf("sqlite_subquery_%p_", (void*)pFrom->pSelect); 1067 } 1068 assert( pFrom->pTab==0 ); 1069 pFrom->pTab = pTab = 1070 sqlite3ResultSetOfSelect(pParse, pFrom->zAlias, pFrom->pSelect); 1071 if( pTab==0 ){ 1072 return 1; 1073 } 1074 /* The isTransient flag indicates that the Table structure has been 1075 ** dynamically allocated and may be freed at any time. In other words, 1076 ** pTab is not pointing to a persistent table structure that defines 1077 ** part of the schema. */ 1078 pTab->isTransient = 1; 1079 #endif 1080 }else{ 1081 /* An ordinary table or view name in the FROM clause */ 1082 assert( pFrom->pTab==0 ); 1083 pFrom->pTab = pTab = 1084 sqlite3LocateTable(pParse,pFrom->zName,pFrom->zDatabase); 1085 if( pTab==0 ){ 1086 return 1; 1087 } 1088 pTab->nRef++; 1089 #ifndef SQLITE_OMIT_VIEW 1090 if( pTab->pSelect ){ 1091 /* We reach here if the named table is a really a view */ 1092 if( sqlite3ViewGetColumnNames(pParse, pTab) ){ 1093 return 1; 1094 } 1095 /* If pFrom->pSelect!=0 it means we are dealing with a 1096 ** view within a view. The SELECT structure has already been 1097 ** copied by the outer view so we can skip the copy step here 1098 ** in the inner view. 1099 */ 1100 if( pFrom->pSelect==0 ){ 1101 pFrom->pSelect = sqlite3SelectDup(pTab->pSelect); 1102 } 1103 } 1104 #endif 1105 } 1106 } 1107 1108 /* Process NATURAL keywords, and ON and USING clauses of joins. 1109 */ 1110 if( sqliteProcessJoin(pParse, p) ) return 1; 1111 1112 /* For every "*" that occurs in the column list, insert the names of 1113 ** all columns in all tables. And for every TABLE.* insert the names 1114 ** of all columns in TABLE. The parser inserted a special expression 1115 ** with the TK_ALL operator for each "*" that it found in the column list. 1116 ** The following code just has to locate the TK_ALL expressions and expand 1117 ** each one to the list of all columns in all tables. 1118 ** 1119 ** The first loop just checks to see if there are any "*" operators 1120 ** that need expanding. 1121 */ 1122 for(k=0; k<pEList->nExpr; k++){ 1123 Expr *pE = pEList->a[k].pExpr; 1124 if( pE->op==TK_ALL ) break; 1125 if( pE->op==TK_DOT && pE->pRight && pE->pRight->op==TK_ALL 1126 && pE->pLeft && pE->pLeft->op==TK_ID ) break; 1127 } 1128 rc = 0; 1129 if( k<pEList->nExpr ){ 1130 /* 1131 ** If we get here it means the result set contains one or more "*" 1132 ** operators that need to be expanded. Loop through each expression 1133 ** in the result set and expand them one by one. 1134 */ 1135 struct ExprList_item *a = pEList->a; 1136 ExprList *pNew = 0; 1137 int flags = pParse->db->flags; 1138 int longNames = (flags & SQLITE_FullColNames)!=0 && 1139 (flags & SQLITE_ShortColNames)==0; 1140 1141 for(k=0; k<pEList->nExpr; k++){ 1142 Expr *pE = a[k].pExpr; 1143 if( pE->op!=TK_ALL && 1144 (pE->op!=TK_DOT || pE->pRight==0 || pE->pRight->op!=TK_ALL) ){ 1145 /* This particular expression does not need to be expanded. 1146 */ 1147 pNew = sqlite3ExprListAppend(pNew, a[k].pExpr, 0); 1148 pNew->a[pNew->nExpr-1].zName = a[k].zName; 1149 a[k].pExpr = 0; 1150 a[k].zName = 0; 1151 }else{ 1152 /* This expression is a "*" or a "TABLE.*" and needs to be 1153 ** expanded. */ 1154 int tableSeen = 0; /* Set to 1 when TABLE matches */ 1155 char *zTName; /* text of name of TABLE */ 1156 if( pE->op==TK_DOT && pE->pLeft ){ 1157 zTName = sqlite3NameFromToken(&pE->pLeft->token); 1158 }else{ 1159 zTName = 0; 1160 } 1161 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ 1162 Table *pTab = pFrom->pTab; 1163 char *zTabName = pFrom->zAlias; 1164 if( zTabName==0 || zTabName[0]==0 ){ 1165 zTabName = pTab->zName; 1166 } 1167 if( zTName && (zTabName==0 || zTabName[0]==0 || 1168 sqlite3StrICmp(zTName, zTabName)!=0) ){ 1169 continue; 1170 } 1171 tableSeen = 1; 1172 for(j=0; j<pTab->nCol; j++){ 1173 Expr *pExpr, *pLeft, *pRight; 1174 char *zName = pTab->aCol[j].zName; 1175 1176 if( i>0 ){ 1177 struct SrcList_item *pLeft = &pTabList->a[i-1]; 1178 if( (pLeft->jointype & JT_NATURAL)!=0 && 1179 columnIndex(pLeft->pTab, zName)>=0 ){ 1180 /* In a NATURAL join, omit the join columns from the 1181 ** table on the right */ 1182 continue; 1183 } 1184 if( sqlite3IdListIndex(pLeft->pUsing, zName)>=0 ){ 1185 /* In a join with a USING clause, omit columns in the 1186 ** using clause from the table on the right. */ 1187 continue; 1188 } 1189 } 1190 pRight = sqlite3Expr(TK_ID, 0, 0, 0); 1191 if( pRight==0 ) break; 1192 setToken(&pRight->token, zName); 1193 if( zTabName && (longNames || pTabList->nSrc>1) ){ 1194 pLeft = sqlite3Expr(TK_ID, 0, 0, 0); 1195 pExpr = sqlite3Expr(TK_DOT, pLeft, pRight, 0); 1196 if( pExpr==0 ) break; 1197 setToken(&pLeft->token, zTabName); 1198 setToken(&pExpr->span, sqlite3MPrintf("%s.%s", zTabName, zName)); 1199 pExpr->span.dyn = 1; 1200 pExpr->token.z = 0; 1201 pExpr->token.n = 0; 1202 pExpr->token.dyn = 0; 1203 }else{ 1204 pExpr = pRight; 1205 pExpr->span = pExpr->token; 1206 } 1207 if( longNames ){ 1208 pNew = sqlite3ExprListAppend(pNew, pExpr, &pExpr->span); 1209 }else{ 1210 pNew = sqlite3ExprListAppend(pNew, pExpr, &pRight->token); 1211 } 1212 } 1213 } 1214 if( !tableSeen ){ 1215 if( zTName ){ 1216 sqlite3ErrorMsg(pParse, "no such table: %s", zTName); 1217 }else{ 1218 sqlite3ErrorMsg(pParse, "no tables specified"); 1219 } 1220 rc = 1; 1221 } 1222 sqliteFree(zTName); 1223 } 1224 } 1225 sqlite3ExprListDelete(pEList); 1226 p->pEList = pNew; 1227 } 1228 return rc; 1229 } 1230 1231 #ifndef SQLITE_OMIT_COMPOUND_SELECT 1232 /* 1233 ** This routine associates entries in an ORDER BY expression list with 1234 ** columns in a result. For each ORDER BY expression, the opcode of 1235 ** the top-level node is changed to TK_COLUMN and the iColumn value of 1236 ** the top-level node is filled in with column number and the iTable 1237 ** value of the top-level node is filled with iTable parameter. 1238 ** 1239 ** If there are prior SELECT clauses, they are processed first. A match 1240 ** in an earlier SELECT takes precedence over a later SELECT. 1241 ** 1242 ** Any entry that does not match is flagged as an error. The number 1243 ** of errors is returned. 1244 */ 1245 static int matchOrderbyToColumn( 1246 Parse *pParse, /* A place to leave error messages */ 1247 Select *pSelect, /* Match to result columns of this SELECT */ 1248 ExprList *pOrderBy, /* The ORDER BY values to match against columns */ 1249 int iTable, /* Insert this value in iTable */ 1250 int mustComplete /* If TRUE all ORDER BYs must match */ 1251 ){ 1252 int nErr = 0; 1253 int i, j; 1254 ExprList *pEList; 1255 1256 if( pSelect==0 || pOrderBy==0 ) return 1; 1257 if( mustComplete ){ 1258 for(i=0; i<pOrderBy->nExpr; i++){ pOrderBy->a[i].done = 0; } 1259 } 1260 if( prepSelectStmt(pParse, pSelect) ){ 1261 return 1; 1262 } 1263 if( pSelect->pPrior ){ 1264 if( matchOrderbyToColumn(pParse, pSelect->pPrior, pOrderBy, iTable, 0) ){ 1265 return 1; 1266 } 1267 } 1268 pEList = pSelect->pEList; 1269 for(i=0; i<pOrderBy->nExpr; i++){ 1270 Expr *pE = pOrderBy->a[i].pExpr; 1271 int iCol = -1; 1272 if( pOrderBy->a[i].done ) continue; 1273 if( sqlite3ExprIsInteger(pE, &iCol) ){ 1274 if( iCol<=0 || iCol>pEList->nExpr ){ 1275 sqlite3ErrorMsg(pParse, 1276 "ORDER BY position %d should be between 1 and %d", 1277 iCol, pEList->nExpr); 1278 nErr++; 1279 break; 1280 } 1281 if( !mustComplete ) continue; 1282 iCol--; 1283 } 1284 for(j=0; iCol<0 && j<pEList->nExpr; j++){ 1285 if( pEList->a[j].zName && (pE->op==TK_ID || pE->op==TK_STRING) ){ 1286 char *zName, *zLabel; 1287 zName = pEList->a[j].zName; 1288 zLabel = sqlite3NameFromToken(&pE->token); 1289 assert( zLabel!=0 ); 1290 if( sqlite3StrICmp(zName, zLabel)==0 ){ 1291 iCol = j; 1292 } 1293 sqliteFree(zLabel); 1294 } 1295 if( iCol<0 && sqlite3ExprCompare(pE, pEList->a[j].pExpr) ){ 1296 iCol = j; 1297 } 1298 } 1299 if( iCol>=0 ){ 1300 pE->op = TK_COLUMN; 1301 pE->iColumn = iCol; 1302 pE->iTable = iTable; 1303 pE->iAgg = -1; 1304 pOrderBy->a[i].done = 1; 1305 } 1306 if( iCol<0 && mustComplete ){ 1307 sqlite3ErrorMsg(pParse, 1308 "ORDER BY term number %d does not match any result column", i+1); 1309 nErr++; 1310 break; 1311 } 1312 } 1313 return nErr; 1314 } 1315 #endif /* #ifndef SQLITE_OMIT_COMPOUND_SELECT */ 1316 1317 /* 1318 ** Get a VDBE for the given parser context. Create a new one if necessary. 1319 ** If an error occurs, return NULL and leave a message in pParse. 1320 */ 1321 Vdbe *sqlite3GetVdbe(Parse *pParse){ 1322 Vdbe *v = pParse->pVdbe; 1323 if( v==0 ){ 1324 v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db); 1325 } 1326 return v; 1327 } 1328 1329 /* 1330 ** Compute the iLimit and iOffset fields of the SELECT based on the 1331 ** pLimit and pOffset expressions. nLimit and nOffset hold the expressions 1332 ** that appear in the original SQL statement after the LIMIT and OFFSET 1333 ** keywords. Or NULL if those keywords are omitted. iLimit and iOffset 1334 ** are the integer memory register numbers for counters used to compute 1335 ** the limit and offset. If there is no limit and/or offset, then 1336 ** iLimit and iOffset are negative. 1337 ** 1338 ** This routine changes the values if iLimit and iOffset only if 1339 ** a limit or offset is defined by nLimit and nOffset. iLimit and 1340 ** iOffset should have been preset to appropriate default values 1341 ** (usually but not always -1) prior to calling this routine. 1342 ** Only if nLimit>=0 or nOffset>0 do the limit registers get 1343 ** redefined. The UNION ALL operator uses this property to force 1344 ** the reuse of the same limit and offset registers across multiple 1345 ** SELECT statements. 1346 */ 1347 static void computeLimitRegisters(Parse *pParse, Select *p){ 1348 /* 1349 ** "LIMIT -1" always shows all rows. There is some 1350 ** contraversy about what the correct behavior should be. 1351 ** The current implementation interprets "LIMIT 0" to mean 1352 ** no rows. 1353 */ 1354 if( p->pLimit ){ 1355 int iMem = pParse->nMem++; 1356 Vdbe *v = sqlite3GetVdbe(pParse); 1357 if( v==0 ) return; 1358 sqlite3ExprCode(pParse, p->pLimit); 1359 sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0); 1360 sqlite3VdbeAddOp(v, OP_Negative, 0, 0); 1361 sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1); 1362 VdbeComment((v, "# LIMIT counter")); 1363 p->iLimit = iMem; 1364 } 1365 if( p->pOffset ){ 1366 int iMem = pParse->nMem++; 1367 Vdbe *v = sqlite3GetVdbe(pParse); 1368 if( v==0 ) return; 1369 sqlite3ExprCode(pParse, p->pOffset); 1370 sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0); 1371 sqlite3VdbeAddOp(v, OP_Negative, 0, 0); 1372 sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1); 1373 VdbeComment((v, "# OFFSET counter")); 1374 p->iOffset = iMem; 1375 } 1376 } 1377 1378 /* 1379 ** Allocate a virtual index to use for sorting. 1380 */ 1381 static void createSortingIndex(Parse *pParse, Select *p, ExprList *pOrderBy){ 1382 if( pOrderBy ){ 1383 int addr; 1384 assert( pOrderBy->iECursor==0 ); 1385 pOrderBy->iECursor = pParse->nTab++; 1386 addr = sqlite3VdbeAddOp(pParse->pVdbe, OP_OpenVirtual, 1387 pOrderBy->iECursor, pOrderBy->nExpr+1); 1388 assert( p->addrOpenVirt[2] == -1 ); 1389 p->addrOpenVirt[2] = addr; 1390 } 1391 } 1392 1393 /* 1394 ** The opcode at addr is an OP_OpenVirtual that created a sorting 1395 ** index tha we ended up not needing. This routine changes that 1396 ** opcode to OP_Noop. 1397 */ 1398 static void uncreateSortingIndex(Parse *pParse, int addr){ 1399 Vdbe *v = pParse->pVdbe; 1400 VdbeOp *pOp = sqlite3VdbeGetOp(v, addr); 1401 sqlite3VdbeChangeP3(v, addr, 0, 0); 1402 pOp->opcode = OP_Noop; 1403 pOp->p1 = 0; 1404 pOp->p2 = 0; 1405 } 1406 1407 #ifndef SQLITE_OMIT_COMPOUND_SELECT 1408 /* 1409 ** Return the appropriate collating sequence for the iCol-th column of 1410 ** the result set for the compound-select statement "p". Return NULL if 1411 ** the column has no default collating sequence. 1412 ** 1413 ** The collating sequence for the compound select is taken from the 1414 ** left-most term of the select that has a collating sequence. 1415 */ 1416 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ 1417 CollSeq *pRet; 1418 if( p->pPrior ){ 1419 pRet = multiSelectCollSeq(pParse, p->pPrior, iCol); 1420 }else{ 1421 pRet = 0; 1422 } 1423 if( pRet==0 ){ 1424 pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr); 1425 } 1426 return pRet; 1427 } 1428 #endif /* SQLITE_OMIT_COMPOUND_SELECT */ 1429 1430 #ifndef SQLITE_OMIT_COMPOUND_SELECT 1431 /* 1432 ** This routine is called to process a query that is really the union 1433 ** or intersection of two or more separate queries. 1434 ** 1435 ** "p" points to the right-most of the two queries. the query on the 1436 ** left is p->pPrior. The left query could also be a compound query 1437 ** in which case this routine will be called recursively. 1438 ** 1439 ** The results of the total query are to be written into a destination 1440 ** of type eDest with parameter iParm. 1441 ** 1442 ** Example 1: Consider a three-way compound SQL statement. 1443 ** 1444 ** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3 1445 ** 1446 ** This statement is parsed up as follows: 1447 ** 1448 ** SELECT c FROM t3 1449 ** | 1450 ** `-----> SELECT b FROM t2 1451 ** | 1452 ** `------> SELECT a FROM t1 1453 ** 1454 ** The arrows in the diagram above represent the Select.pPrior pointer. 1455 ** So if this routine is called with p equal to the t3 query, then 1456 ** pPrior will be the t2 query. p->op will be TK_UNION in this case. 1457 ** 1458 ** Notice that because of the way SQLite parses compound SELECTs, the 1459 ** individual selects always group from left to right. 1460 */ 1461 static int multiSelect( 1462 Parse *pParse, /* Parsing context */ 1463 Select *p, /* The right-most of SELECTs to be coded */ 1464 int eDest, /* \___ Store query results as specified */ 1465 int iParm, /* / by these two parameters. */ 1466 char *aff /* If eDest is SRT_Union, the affinity string */ 1467 ){ 1468 int rc = SQLITE_OK; /* Success code from a subroutine */ 1469 Select *pPrior; /* Another SELECT immediately to our left */ 1470 Vdbe *v; /* Generate code to this VDBE */ 1471 int nCol; /* Number of columns in the result set */ 1472 ExprList *pOrderBy; /* The ORDER BY clause on p */ 1473 int aSetP2[2]; /* Set P2 value of these op to number of columns */ 1474 int nSetP2 = 0; /* Number of slots in aSetP2[] used */ 1475 1476 /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only 1477 ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. 1478 */ 1479 if( p==0 || p->pPrior==0 ){ 1480 rc = 1; 1481 goto multi_select_end; 1482 } 1483 pPrior = p->pPrior; 1484 assert( pPrior->pRightmost!=pPrior ); 1485 assert( pPrior->pRightmost==p->pRightmost ); 1486 if( pPrior->pOrderBy ){ 1487 sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before", 1488 selectOpName(p->op)); 1489 rc = 1; 1490 goto multi_select_end; 1491 } 1492 if( pPrior->pLimit ){ 1493 sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before", 1494 selectOpName(p->op)); 1495 rc = 1; 1496 goto multi_select_end; 1497 } 1498 1499 /* Make sure we have a valid query engine. If not, create a new one. 1500 */ 1501 v = sqlite3GetVdbe(pParse); 1502 if( v==0 ){ 1503 rc = 1; 1504 goto multi_select_end; 1505 } 1506 1507 /* Create the destination temporary table if necessary 1508 */ 1509 if( eDest==SRT_VirtualTab ){ 1510 assert( p->pEList ); 1511 assert( nSetP2<sizeof(aSetP2)/sizeof(aSetP2[0]) ); 1512 aSetP2[nSetP2++] = sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, 0); 1513 eDest = SRT_Table; 1514 } 1515 1516 /* Generate code for the left and right SELECT statements. 1517 */ 1518 pOrderBy = p->pOrderBy; 1519 switch( p->op ){ 1520 case TK_ALL: { 1521 if( pOrderBy==0 ){ 1522 assert( !pPrior->pLimit ); 1523 pPrior->pLimit = p->pLimit; 1524 pPrior->pOffset = p->pOffset; 1525 rc = sqlite3Select(pParse, pPrior, eDest, iParm, 0, 0, 0, aff); 1526 if( rc ){ 1527 goto multi_select_end; 1528 } 1529 p->pPrior = 0; 1530 p->iLimit = pPrior->iLimit; 1531 p->iOffset = pPrior->iOffset; 1532 p->pLimit = 0; 1533 p->pOffset = 0; 1534 rc = sqlite3Select(pParse, p, eDest, iParm, 0, 0, 0, aff); 1535 p->pPrior = pPrior; 1536 if( rc ){ 1537 goto multi_select_end; 1538 } 1539 break; 1540 } 1541 /* For UNION ALL ... ORDER BY fall through to the next case */ 1542 } 1543 case TK_EXCEPT: 1544 case TK_UNION: { 1545 int unionTab; /* Cursor number of the temporary table holding result */ 1546 int op = 0; /* One of the SRT_ operations to apply to self */ 1547 int priorOp; /* The SRT_ operation to apply to prior selects */ 1548 Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */ 1549 int addr; 1550 1551 priorOp = p->op==TK_ALL ? SRT_Table : SRT_Union; 1552 if( eDest==priorOp && pOrderBy==0 && !p->pLimit && !p->pOffset ){ 1553 /* We can reuse a temporary table generated by a SELECT to our 1554 ** right. 1555 */ 1556 unionTab = iParm; 1557 }else{ 1558 /* We will need to create our own temporary table to hold the 1559 ** intermediate results. 1560 */ 1561 unionTab = pParse->nTab++; 1562 if( pOrderBy && matchOrderbyToColumn(pParse, p, pOrderBy, unionTab,1) ){ 1563 rc = 1; 1564 goto multi_select_end; 1565 } 1566 addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, unionTab, 0); 1567 if( priorOp==SRT_Table ){ 1568 assert( nSetP2<sizeof(aSetP2)/sizeof(aSetP2[0]) ); 1569 aSetP2[nSetP2++] = addr; 1570 }else{ 1571 assert( p->addrOpenVirt[0] == -1 ); 1572 p->addrOpenVirt[0] = addr; 1573 p->pRightmost->usesVirt = 1; 1574 } 1575 createSortingIndex(pParse, p, pOrderBy); 1576 assert( p->pEList ); 1577 } 1578 1579 /* Code the SELECT statements to our left 1580 */ 1581 assert( !pPrior->pOrderBy ); 1582 rc = sqlite3Select(pParse, pPrior, priorOp, unionTab, 0, 0, 0, aff); 1583 if( rc ){ 1584 goto multi_select_end; 1585 } 1586 1587 /* Code the current SELECT statement 1588 */ 1589 switch( p->op ){ 1590 case TK_EXCEPT: op = SRT_Except; break; 1591 case TK_UNION: op = SRT_Union; break; 1592 case TK_ALL: op = SRT_Table; break; 1593 } 1594 p->pPrior = 0; 1595 p->pOrderBy = 0; 1596 p->disallowOrderBy = pOrderBy!=0; 1597 pLimit = p->pLimit; 1598 p->pLimit = 0; 1599 pOffset = p->pOffset; 1600 p->pOffset = 0; 1601 rc = sqlite3Select(pParse, p, op, unionTab, 0, 0, 0, aff); 1602 p->pPrior = pPrior; 1603 p->pOrderBy = pOrderBy; 1604 sqlite3ExprDelete(p->pLimit); 1605 p->pLimit = pLimit; 1606 p->pOffset = pOffset; 1607 p->iLimit = -1; 1608 p->iOffset = -1; 1609 if( rc ){ 1610 goto multi_select_end; 1611 } 1612 1613 1614 /* Convert the data in the temporary table into whatever form 1615 ** it is that we currently need. 1616 */ 1617 if( eDest!=priorOp || unionTab!=iParm ){ 1618 int iCont, iBreak, iStart; 1619 assert( p->pEList ); 1620 if( eDest==SRT_Callback ){ 1621 generateColumnNames(pParse, 0, p->pEList); 1622 } 1623 iBreak = sqlite3VdbeMakeLabel(v); 1624 iCont = sqlite3VdbeMakeLabel(v); 1625 sqlite3VdbeAddOp(v, OP_Rewind, unionTab, iBreak); 1626 computeLimitRegisters(pParse, p); 1627 iStart = sqlite3VdbeCurrentAddr(v); 1628 rc = selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr, 1629 pOrderBy, -1, eDest, iParm, 1630 iCont, iBreak, 0); 1631 if( rc ){ 1632 rc = 1; 1633 goto multi_select_end; 1634 } 1635 sqlite3VdbeResolveLabel(v, iCont); 1636 sqlite3VdbeAddOp(v, OP_Next, unionTab, iStart); 1637 sqlite3VdbeResolveLabel(v, iBreak); 1638 sqlite3VdbeAddOp(v, OP_Close, unionTab, 0); 1639 } 1640 break; 1641 } 1642 case TK_INTERSECT: { 1643 int tab1, tab2; 1644 int iCont, iBreak, iStart; 1645 Expr *pLimit, *pOffset; 1646 int addr; 1647 1648 /* INTERSECT is different from the others since it requires 1649 ** two temporary tables. Hence it has its own case. Begin 1650 ** by allocating the tables we will need. 1651 */ 1652 tab1 = pParse->nTab++; 1653 tab2 = pParse->nTab++; 1654 if( pOrderBy && matchOrderbyToColumn(pParse,p,pOrderBy,tab1,1) ){ 1655 rc = 1; 1656 goto multi_select_end; 1657 } 1658 createSortingIndex(pParse, p, pOrderBy); 1659 1660 addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, tab1, 0); 1661 assert( p->addrOpenVirt[0] == -1 ); 1662 p->addrOpenVirt[0] = addr; 1663 p->pRightmost->usesVirt = 1; 1664 assert( p->pEList ); 1665 1666 /* Code the SELECTs to our left into temporary table "tab1". 1667 */ 1668 rc = sqlite3Select(pParse, pPrior, SRT_Union, tab1, 0, 0, 0, aff); 1669 if( rc ){ 1670 goto multi_select_end; 1671 } 1672 1673 /* Code the current SELECT into temporary table "tab2" 1674 */ 1675 addr = sqlite3VdbeAddOp(v, OP_OpenVirtual, tab2, 0); 1676 assert( p->addrOpenVirt[1] == -1 ); 1677 p->addrOpenVirt[1] = addr; 1678 p->pPrior = 0; 1679 pLimit = p->pLimit; 1680 p->pLimit = 0; 1681 pOffset = p->pOffset; 1682 p->pOffset = 0; 1683 rc = sqlite3Select(pParse, p, SRT_Union, tab2, 0, 0, 0, aff); 1684 p->pPrior = pPrior; 1685 sqlite3ExprDelete(p->pLimit); 1686 p->pLimit = pLimit; 1687 p->pOffset = pOffset; 1688 if( rc ){ 1689 goto multi_select_end; 1690 } 1691 1692 /* Generate code to take the intersection of the two temporary 1693 ** tables. 1694 */ 1695 assert( p->pEList ); 1696 if( eDest==SRT_Callback ){ 1697 generateColumnNames(pParse, 0, p->pEList); 1698 } 1699 iBreak = sqlite3VdbeMakeLabel(v); 1700 iCont = sqlite3VdbeMakeLabel(v); 1701 sqlite3VdbeAddOp(v, OP_Rewind, tab1, iBreak); 1702 computeLimitRegisters(pParse, p); 1703 iStart = sqlite3VdbeAddOp(v, OP_RowKey, tab1, 0); 1704 sqlite3VdbeAddOp(v, OP_NotFound, tab2, iCont); 1705 rc = selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr, 1706 pOrderBy, -1, eDest, iParm, 1707 iCont, iBreak, 0); 1708 if( rc ){ 1709 rc = 1; 1710 goto multi_select_end; 1711 } 1712 sqlite3VdbeResolveLabel(v, iCont); 1713 sqlite3VdbeAddOp(v, OP_Next, tab1, iStart); 1714 sqlite3VdbeResolveLabel(v, iBreak); 1715 sqlite3VdbeAddOp(v, OP_Close, tab2, 0); 1716 sqlite3VdbeAddOp(v, OP_Close, tab1, 0); 1717 break; 1718 } 1719 } 1720 1721 /* Make sure all SELECTs in the statement have the same number of elements 1722 ** in their result sets. 1723 */ 1724 assert( p->pEList && pPrior->pEList ); 1725 if( p->pEList->nExpr!=pPrior->pEList->nExpr ){ 1726 sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" 1727 " do not have the same number of result columns", selectOpName(p->op)); 1728 rc = 1; 1729 goto multi_select_end; 1730 } 1731 1732 /* Set the number of columns in temporary tables 1733 */ 1734 nCol = p->pEList->nExpr; 1735 while( nSetP2 ){ 1736 sqlite3VdbeChangeP2(v, aSetP2[--nSetP2], nCol); 1737 } 1738 1739 /* Compute collating sequences used by either the ORDER BY clause or 1740 ** by any temporary tables needed to implement the compound select. 1741 ** Attach the KeyInfo structure to all temporary tables. Invoke the 1742 ** ORDER BY processing if there is an ORDER BY clause. 1743 ** 1744 ** This section is run by the right-most SELECT statement only. 1745 ** SELECT statements to the left always skip this part. The right-most 1746 ** SELECT might also skip this part if it has no ORDER BY clause and 1747 ** no temp tables are required. 1748 */ 1749 if( pOrderBy || p->usesVirt ){ 1750 int i; /* Loop counter */ 1751 KeyInfo *pKeyInfo; /* Collating sequence for the result set */ 1752 Select *pLoop; /* For looping through SELECT statements */ 1753 CollSeq **apColl; 1754 CollSeq **aCopy; 1755 1756 assert( p->pRightmost==p ); 1757 pKeyInfo = sqliteMalloc(sizeof(*pKeyInfo)+nCol*2*sizeof(CollSeq*) + nCol); 1758 if( !pKeyInfo ){ 1759 rc = SQLITE_NOMEM; 1760 goto multi_select_end; 1761 } 1762 1763 pKeyInfo->enc = pParse->db->enc; 1764 pKeyInfo->nField = nCol; 1765 1766 for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){ 1767 *apColl = multiSelectCollSeq(pParse, p, i); 1768 if( 0==*apColl ){ 1769 *apColl = pParse->db->pDfltColl; 1770 } 1771 } 1772 1773 for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ 1774 for(i=0; i<2; i++){ 1775 int addr = pLoop->addrOpenVirt[i]; 1776 if( addr<0 ){ 1777 /* If [0] is unused then [1] is also unused. So we can 1778 ** always safely abort as soon as the first unused slot is found */ 1779 assert( pLoop->addrOpenVirt[1]<0 ); 1780 break; 1781 } 1782 sqlite3VdbeChangeP2(v, addr, nCol); 1783 sqlite3VdbeChangeP3(v, addr, (char*)pKeyInfo, P3_KEYINFO); 1784 } 1785 } 1786 1787 if( pOrderBy ){ 1788 struct ExprList_item *pOTerm = pOrderBy->a; 1789 int nExpr = pOrderBy->nExpr; 1790 int addr; 1791 u8 *pSortOrder; 1792 1793 aCopy = (CollSeq**)&pKeyInfo[1]; 1794 pSortOrder = pKeyInfo->aSortOrder = (u8*)&aCopy[nExpr]; 1795 memcpy(aCopy, pKeyInfo->aColl, nCol*sizeof(CollSeq*)); 1796 apColl = pKeyInfo->aColl; 1797 for(i=0; i<pOrderBy->nExpr; i++, pOTerm++, apColl++, pSortOrder++){ 1798 Expr *pExpr = pOTerm->pExpr; 1799 char *zName = pOTerm->zName; 1800 assert( pExpr->op==TK_COLUMN && pExpr->iColumn<nCol ); 1801 if( zName ){ 1802 *apColl = sqlite3LocateCollSeq(pParse, zName, -1); 1803 }else{ 1804 *apColl = aCopy[pExpr->iColumn]; 1805 } 1806 *pSortOrder = pOTerm->sortOrder; 1807 } 1808 assert( p->pRightmost==p ); 1809 assert( p->addrOpenVirt[2]>=0 ); 1810 addr = p->addrOpenVirt[2]; 1811 sqlite3VdbeChangeP2(v, addr, p->pEList->nExpr+2); 1812 pKeyInfo->nField = pOrderBy->nExpr; 1813 sqlite3VdbeChangeP3(v, addr, (char*)pKeyInfo, P3_KEYINFO_HANDOFF); 1814 pKeyInfo = 0; 1815 generateSortTail(pParse, p, v, p->pEList->nExpr, eDest, iParm); 1816 } 1817 1818 sqliteFree(pKeyInfo); 1819 } 1820 1821 multi_select_end: 1822 return rc; 1823 } 1824 #endif /* SQLITE_OMIT_COMPOUND_SELECT */ 1825 1826 #ifndef SQLITE_OMIT_VIEW 1827 /* 1828 ** Scan through the expression pExpr. Replace every reference to 1829 ** a column in table number iTable with a copy of the iColumn-th 1830 ** entry in pEList. (But leave references to the ROWID column 1831 ** unchanged.) 1832 ** 1833 ** This routine is part of the flattening procedure. A subquery 1834 ** whose result set is defined by pEList appears as entry in the 1835 ** FROM clause of a SELECT such that the VDBE cursor assigned to that 1836 ** FORM clause entry is iTable. This routine make the necessary 1837 ** changes to pExpr so that it refers directly to the source table 1838 ** of the subquery rather the result set of the subquery. 1839 */ 1840 static void substExprList(ExprList*,int,ExprList*); /* Forward Decl */ 1841 static void substSelect(Select *, int, ExprList *); /* Forward Decl */ 1842 static void substExpr(Expr *pExpr, int iTable, ExprList *pEList){ 1843 if( pExpr==0 ) return; 1844 if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){ 1845 if( pExpr->iColumn<0 ){ 1846 pExpr->op = TK_NULL; 1847 }else{ 1848 Expr *pNew; 1849 assert( pEList!=0 && pExpr->iColumn<pEList->nExpr ); 1850 assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 ); 1851 pNew = pEList->a[pExpr->iColumn].pExpr; 1852 assert( pNew!=0 ); 1853 pExpr->op = pNew->op; 1854 assert( pExpr->pLeft==0 ); 1855 pExpr->pLeft = sqlite3ExprDup(pNew->pLeft); 1856 assert( pExpr->pRight==0 ); 1857 pExpr->pRight = sqlite3ExprDup(pNew->pRight); 1858 assert( pExpr->pList==0 ); 1859 pExpr->pList = sqlite3ExprListDup(pNew->pList); 1860 pExpr->iTable = pNew->iTable; 1861 pExpr->iColumn = pNew->iColumn; 1862 pExpr->iAgg = pNew->iAgg; 1863 sqlite3TokenCopy(&pExpr->token, &pNew->token); 1864 sqlite3TokenCopy(&pExpr->span, &pNew->span); 1865 pExpr->pSelect = sqlite3SelectDup(pNew->pSelect); 1866 pExpr->flags = pNew->flags; 1867 } 1868 }else{ 1869 substExpr(pExpr->pLeft, iTable, pEList); 1870 substExpr(pExpr->pRight, iTable, pEList); 1871 substSelect(pExpr->pSelect, iTable, pEList); 1872 substExprList(pExpr->pList, iTable, pEList); 1873 } 1874 } 1875 static void substExprList(ExprList *pList, int iTable, ExprList *pEList){ 1876 int i; 1877 if( pList==0 ) return; 1878 for(i=0; i<pList->nExpr; i++){ 1879 substExpr(pList->a[i].pExpr, iTable, pEList); 1880 } 1881 } 1882 static void substSelect(Select *p, int iTable, ExprList *pEList){ 1883 if( !p ) return; 1884 substExprList(p->pEList, iTable, pEList); 1885 substExprList(p->pGroupBy, iTable, pEList); 1886 substExprList(p->pOrderBy, iTable, pEList); 1887 substExpr(p->pHaving, iTable, pEList); 1888 substExpr(p->pWhere, iTable, pEList); 1889 } 1890 #endif /* !defined(SQLITE_OMIT_VIEW) */ 1891 1892 #ifndef SQLITE_OMIT_VIEW 1893 /* 1894 ** This routine attempts to flatten subqueries in order to speed 1895 ** execution. It returns 1 if it makes changes and 0 if no flattening 1896 ** occurs. 1897 ** 1898 ** To understand the concept of flattening, consider the following 1899 ** query: 1900 ** 1901 ** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 1902 ** 1903 ** The default way of implementing this query is to execute the 1904 ** subquery first and store the results in a temporary table, then 1905 ** run the outer query on that temporary table. This requires two 1906 ** passes over the data. Furthermore, because the temporary table 1907 ** has no indices, the WHERE clause on the outer query cannot be 1908 ** optimized. 1909 ** 1910 ** This routine attempts to rewrite queries such as the above into 1911 ** a single flat select, like this: 1912 ** 1913 ** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5 1914 ** 1915 ** The code generated for this simpification gives the same result 1916 ** but only has to scan the data once. And because indices might 1917 ** exist on the table t1, a complete scan of the data might be 1918 ** avoided. 1919 ** 1920 ** Flattening is only attempted if all of the following are true: 1921 ** 1922 ** (1) The subquery and the outer query do not both use aggregates. 1923 ** 1924 ** (2) The subquery is not an aggregate or the outer query is not a join. 1925 ** 1926 ** (3) The subquery is not the right operand of a left outer join, or 1927 ** the subquery is not itself a join. (Ticket #306) 1928 ** 1929 ** (4) The subquery is not DISTINCT or the outer query is not a join. 1930 ** 1931 ** (5) The subquery is not DISTINCT or the outer query does not use 1932 ** aggregates. 1933 ** 1934 ** (6) The subquery does not use aggregates or the outer query is not 1935 ** DISTINCT. 1936 ** 1937 ** (7) The subquery has a FROM clause. 1938 ** 1939 ** (8) The subquery does not use LIMIT or the outer query is not a join. 1940 ** 1941 ** (9) The subquery does not use LIMIT or the outer query does not use 1942 ** aggregates. 1943 ** 1944 ** (10) The subquery does not use aggregates or the outer query does not 1945 ** use LIMIT. 1946 ** 1947 ** (11) The subquery and the outer query do not both have ORDER BY clauses. 1948 ** 1949 ** (12) The subquery is not the right term of a LEFT OUTER JOIN or the 1950 ** subquery has no WHERE clause. (added by ticket #350) 1951 ** 1952 ** In this routine, the "p" parameter is a pointer to the outer query. 1953 ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query 1954 ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates. 1955 ** 1956 ** If flattening is not attempted, this routine is a no-op and returns 0. 1957 ** If flattening is attempted this routine returns 1. 1958 ** 1959 ** All of the expression analysis must occur on both the outer query and 1960 ** the subquery before this routine runs. 1961 */ 1962 static int flattenSubquery( 1963 Parse *pParse, /* The parsing context */ 1964 Select *p, /* The parent or outer SELECT statement */ 1965 int iFrom, /* Index in p->pSrc->a[] of the inner subquery */ 1966 int isAgg, /* True if outer SELECT uses aggregate functions */ 1967 int subqueryIsAgg /* True if the subquery uses aggregate functions */ 1968 ){ 1969 Select *pSub; /* The inner query or "subquery" */ 1970 SrcList *pSrc; /* The FROM clause of the outer query */ 1971 SrcList *pSubSrc; /* The FROM clause of the subquery */ 1972 ExprList *pList; /* The result set of the outer query */ 1973 int iParent; /* VDBE cursor number of the pSub result set temp table */ 1974 int i; /* Loop counter */ 1975 Expr *pWhere; /* The WHERE clause */ 1976 struct SrcList_item *pSubitem; /* The subquery */ 1977 1978 /* Check to see if flattening is permitted. Return 0 if not. 1979 */ 1980 if( p==0 ) return 0; 1981 pSrc = p->pSrc; 1982 assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc ); 1983 pSubitem = &pSrc->a[iFrom]; 1984 pSub = pSubitem->pSelect; 1985 assert( pSub!=0 ); 1986 if( isAgg && subqueryIsAgg ) return 0; 1987 if( subqueryIsAgg && pSrc->nSrc>1 ) return 0; 1988 pSubSrc = pSub->pSrc; 1989 assert( pSubSrc ); 1990 if( (pSub->pLimit && p->pLimit) || pSub->pOffset || 1991 (pSub->pLimit && isAgg) ) return 0; 1992 if( pSubSrc->nSrc==0 ) return 0; 1993 if( pSub->isDistinct && (pSrc->nSrc>1 || isAgg) ){ 1994 return 0; 1995 } 1996 if( p->isDistinct && subqueryIsAgg ) return 0; 1997 if( (p->disallowOrderBy || p->pOrderBy) && pSub->pOrderBy ) return 0; 1998 1999 /* Restriction 3: If the subquery is a join, make sure the subquery is 2000 ** not used as the right operand of an outer join. Examples of why this 2001 ** is not allowed: 2002 ** 2003 ** t1 LEFT OUTER JOIN (t2 JOIN t3) 2004 ** 2005 ** If we flatten the above, we would get 2006 ** 2007 ** (t1 LEFT OUTER JOIN t2) JOIN t3 2008 ** 2009 ** which is not at all the same thing. 2010 */ 2011 if( pSubSrc->nSrc>1 && iFrom>0 && (pSrc->a[iFrom-1].jointype & JT_OUTER)!=0 ){ 2012 return 0; 2013 } 2014 2015 /* Restriction 12: If the subquery is the right operand of a left outer 2016 ** join, make sure the subquery has no WHERE clause. 2017 ** An examples of why this is not allowed: 2018 ** 2019 ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0) 2020 ** 2021 ** If we flatten the above, we would get 2022 ** 2023 ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0 2024 ** 2025 ** But the t2.x>0 test will always fail on a NULL row of t2, which 2026 ** effectively converts the OUTER JOIN into an INNER JOIN. 2027 */ 2028 if( iFrom>0 && (pSrc->a[iFrom-1].jointype & JT_OUTER)!=0 2029 && pSub->pWhere!=0 ){ 2030 return 0; 2031 } 2032 2033 /* If we reach this point, it means flattening is permitted for the 2034 ** iFrom-th entry of the FROM clause in the outer query. 2035 */ 2036 2037 /* Move all of the FROM elements of the subquery into the 2038 ** the FROM clause of the outer query. Before doing this, remember 2039 ** the cursor number for the original outer query FROM element in 2040 ** iParent. The iParent cursor will never be used. Subsequent code 2041 ** will scan expressions looking for iParent references and replace 2042 ** those references with expressions that resolve to the subquery FROM 2043 ** elements we are now copying in. 2044 */ 2045 iParent = pSubitem->iCursor; 2046 { 2047 int nSubSrc = pSubSrc->nSrc; 2048 int jointype = pSubitem->jointype; 2049 2050 sqlite3DeleteTable(0, pSubitem->pTab); 2051 sqliteFree(pSubitem->zDatabase); 2052 sqliteFree(pSubitem->zName); 2053 sqliteFree(pSubitem->zAlias); 2054 if( nSubSrc>1 ){ 2055 int extra = nSubSrc - 1; 2056 for(i=1; i<nSubSrc; i++){ 2057 pSrc = sqlite3SrcListAppend(pSrc, 0, 0); 2058 } 2059 p->pSrc = pSrc; 2060 for(i=pSrc->nSrc-1; i-extra>=iFrom; i--){ 2061 pSrc->a[i] = pSrc->a[i-extra]; 2062 } 2063 } 2064 for(i=0; i<nSubSrc; i++){ 2065 pSrc->a[i+iFrom] = pSubSrc->a[i]; 2066 memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); 2067 } 2068 pSrc->a[iFrom+nSubSrc-1].jointype = jointype; 2069 } 2070 2071 /* Now begin substituting subquery result set expressions for 2072 ** references to the iParent in the outer query. 2073 ** 2074 ** Example: 2075 ** 2076 ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b; 2077 ** \ \_____________ subquery __________/ / 2078 ** \_____________________ outer query ______________________________/ 2079 ** 2080 ** We look at every expression in the outer query and every place we see 2081 ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". 2082 */ 2083 substExprList(p->pEList, iParent, pSub->pEList); 2084 pList = p->pEList; 2085 for(i=0; i<pList->nExpr; i++){ 2086 Expr *pExpr; 2087 if( pList->a[i].zName==0 && (pExpr = pList->a[i].pExpr)->span.z!=0 ){ 2088 pList->a[i].zName = sqliteStrNDup(pExpr->span.z, pExpr->span.n); 2089 } 2090 } 2091 if( isAgg ){ 2092 substExprList(p->pGroupBy, iParent, pSub->pEList); 2093 substExpr(p->pHaving, iParent, pSub->pEList); 2094 } 2095 if( pSub->pOrderBy ){ 2096 assert( p->pOrderBy==0 ); 2097 p->pOrderBy = pSub->pOrderBy; 2098 pSub->pOrderBy = 0; 2099 }else if( p->pOrderBy ){ 2100 substExprList(p->pOrderBy, iParent, pSub->pEList); 2101 } 2102 if( pSub->pWhere ){ 2103 pWhere = sqlite3ExprDup(pSub->pWhere); 2104 }else{ 2105 pWhere = 0; 2106 } 2107 if( subqueryIsAgg ){ 2108 assert( p->pHaving==0 ); 2109 p->pHaving = p->pWhere; 2110 p->pWhere = pWhere; 2111 substExpr(p->pHaving, iParent, pSub->pEList); 2112 p->pHaving = sqlite3ExprAnd(p->pHaving, sqlite3ExprDup(pSub->pHaving)); 2113 assert( p->pGroupBy==0 ); 2114 p->pGroupBy = sqlite3ExprListDup(pSub->pGroupBy); 2115 }else{ 2116 substExpr(p->pWhere, iParent, pSub->pEList); 2117 p->pWhere = sqlite3ExprAnd(p->pWhere, pWhere); 2118 } 2119 2120 /* The flattened query is distinct if either the inner or the 2121 ** outer query is distinct. 2122 */ 2123 p->isDistinct = p->isDistinct || pSub->isDistinct; 2124 2125 /* 2126 ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y; 2127 */ 2128 if( pSub->pLimit ){ 2129 p->pLimit = pSub->pLimit; 2130 pSub->pLimit = 0; 2131 } 2132 2133 /* Finially, delete what is left of the subquery and return 2134 ** success. 2135 */ 2136 sqlite3SelectDelete(pSub); 2137 return 1; 2138 } 2139 #endif /* SQLITE_OMIT_VIEW */ 2140 2141 /* 2142 ** Analyze the SELECT statement passed in as an argument to see if it 2143 ** is a simple min() or max() query. If it is and this query can be 2144 ** satisfied using a single seek to the beginning or end of an index, 2145 ** then generate the code for this SELECT and return 1. If this is not a 2146 ** simple min() or max() query, then return 0; 2147 ** 2148 ** A simply min() or max() query looks like this: 2149 ** 2150 ** SELECT min(a) FROM table; 2151 ** SELECT max(a) FROM table; 2152 ** 2153 ** The query may have only a single table in its FROM argument. There 2154 ** can be no GROUP BY or HAVING or WHERE clauses. The result set must 2155 ** be the min() or max() of a single column of the table. The column 2156 ** in the min() or max() function must be indexed. 2157 ** 2158 ** The parameters to this routine are the same as for sqlite3Select(). 2159 ** See the header comment on that routine for additional information. 2160 */ 2161 static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){ 2162 Expr *pExpr; 2163 int iCol; 2164 Table *pTab; 2165 Index *pIdx; 2166 int base; 2167 Vdbe *v; 2168 int seekOp; 2169 int cont; 2170 ExprList *pEList, *pList, eList; 2171 struct ExprList_item eListItem; 2172 SrcList *pSrc; 2173 2174 /* Check to see if this query is a simple min() or max() query. Return 2175 ** zero if it is not. 2176 */ 2177 if( p->pGroupBy || p->pHaving || p->pWhere ) return 0; 2178 pSrc = p->pSrc; 2179 if( pSrc->nSrc!=1 ) return 0; 2180 pEList = p->pEList; 2181 if( pEList->nExpr!=1 ) return 0; 2182 pExpr = pEList->a[0].pExpr; 2183 if( pExpr->op!=TK_AGG_FUNCTION ) return 0; 2184 pList = pExpr->pList; 2185 if( pList==0 || pList->nExpr!=1 ) return 0; 2186 if( pExpr->token.n!=3 ) return 0; 2187 if( sqlite3StrNICmp(pExpr->token.z,"min",3)==0 ){ 2188 seekOp = OP_Rewind; 2189 }else if( sqlite3StrNICmp(pExpr->token.z,"max",3)==0 ){ 2190 seekOp = OP_Last; 2191 }else{ 2192 return 0; 2193 } 2194 pExpr = pList->a[0].pExpr; 2195 if( pExpr->op!=TK_COLUMN ) return 0; 2196 iCol = pExpr->iColumn; 2197 pTab = pSrc->a[0].pTab; 2198 2199 /* If we get to here, it means the query is of the correct form. 2200 ** Check to make sure we have an index and make pIdx point to the 2201 ** appropriate index. If the min() or max() is on an INTEGER PRIMARY 2202 ** key column, no index is necessary so set pIdx to NULL. If no 2203 ** usable index is found, return 0. 2204 */ 2205 if( iCol<0 ){ 2206 pIdx = 0; 2207 }else{ 2208 CollSeq *pColl = sqlite3ExprCollSeq(pParse, pExpr); 2209 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ 2210 assert( pIdx->nColumn>=1 ); 2211 if( pIdx->aiColumn[0]==iCol && pIdx->keyInfo.aColl[0]==pColl ) break; 2212 } 2213 if( pIdx==0 ) return 0; 2214 } 2215 2216 /* Identify column types if we will be using the callback. This 2217 ** step is skipped if the output is going to a table or a memory cell. 2218 ** The column names have already been generated in the calling function. 2219 */ 2220 v = sqlite3GetVdbe(pParse); 2221 if( v==0 ) return 0; 2222 2223 /* If the output is destined for a temporary table, open that table. 2224 */ 2225 if( eDest==SRT_VirtualTab ){ 2226 sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, 1); 2227 } 2228 2229 /* Generating code to find the min or the max. Basically all we have 2230 ** to do is find the first or the last entry in the chosen index. If 2231 ** the min() or max() is on the INTEGER PRIMARY KEY, then find the first 2232 ** or last entry in the main table. 2233 */ 2234 sqlite3CodeVerifySchema(pParse, pTab->iDb); 2235 base = pSrc->a[0].iCursor; 2236 computeLimitRegisters(pParse, p); 2237 if( pSrc->a[0].pSelect==0 ){ 2238 sqlite3OpenTableForReading(v, base, pTab); 2239 } 2240 cont = sqlite3VdbeMakeLabel(v); 2241 if( pIdx==0 ){ 2242 sqlite3VdbeAddOp(v, seekOp, base, 0); 2243 }else{ 2244 /* Even though the cursor used to open the index here is closed 2245 ** as soon as a single value has been read from it, allocate it 2246 ** using (pParse->nTab++) to prevent the cursor id from being 2247 ** reused. This is important for statements of the form 2248 ** "INSERT INTO x SELECT max() FROM x". 2249 */ 2250 int iIdx; 2251 iIdx = pParse->nTab++; 2252 sqlite3VdbeAddOp(v, OP_Integer, pIdx->iDb, 0); 2253 sqlite3VdbeOp3(v, OP_OpenRead, iIdx, pIdx->tnum, 2254 (char*)&pIdx->keyInfo, P3_KEYINFO); 2255 if( seekOp==OP_Rewind ){ 2256 sqlite3VdbeAddOp(v, OP_Null, 0, 0); 2257 sqlite3VdbeAddOp(v, OP_MakeRecord, 1, 0); 2258 seekOp = OP_MoveGt; 2259 } 2260 sqlite3VdbeAddOp(v, seekOp, iIdx, 0); 2261 sqlite3VdbeAddOp(v, OP_IdxRowid, iIdx, 0); 2262 sqlite3VdbeAddOp(v, OP_Close, iIdx, 0); 2263 sqlite3VdbeAddOp(v, OP_MoveGe, base, 0); 2264 } 2265 eList.nExpr = 1; 2266 memset(&eListItem, 0, sizeof(eListItem)); 2267 eList.a = &eListItem; 2268 eList.a[0].pExpr = pExpr; 2269 selectInnerLoop(pParse, p, &eList, 0, 0, 0, -1, eDest, iParm, cont, cont, 0); 2270 sqlite3VdbeResolveLabel(v, cont); 2271 sqlite3VdbeAddOp(v, OP_Close, base, 0); 2272 2273 return 1; 2274 } 2275 2276 /* 2277 ** Analyze and ORDER BY or GROUP BY clause in a SELECT statement. Return 2278 ** the number of errors seen. 2279 ** 2280 ** An ORDER BY or GROUP BY is a list of expressions. If any expression 2281 ** is an integer constant, then that expression is replaced by the 2282 ** corresponding entry in the result set. 2283 */ 2284 static int processOrderGroupBy( 2285 NameContext *pNC, /* Name context of the SELECT statement. */ 2286 ExprList *pOrderBy, /* The ORDER BY or GROUP BY clause to be processed */ 2287 const char *zType /* Either "ORDER" or "GROUP", as appropriate */ 2288 ){ 2289 int i; 2290 ExprList *pEList = pNC->pEList; /* The result set of the SELECT */ 2291 Parse *pParse = pNC->pParse; /* The result set of the SELECT */ 2292 assert( pEList ); 2293 2294 if( pOrderBy==0 ) return 0; 2295 for(i=0; i<pOrderBy->nExpr; i++){ 2296 int iCol; 2297 Expr *pE = pOrderBy->a[i].pExpr; 2298 if( sqlite3ExprIsInteger(pE, &iCol) ){ 2299 if( iCol>0 && iCol<=pEList->nExpr ){ 2300 sqlite3ExprDelete(pE); 2301 pE = pOrderBy->a[i].pExpr = sqlite3ExprDup(pEList->a[iCol-1].pExpr); 2302 }else{ 2303 sqlite3ErrorMsg(pParse, 2304 "%s BY column number %d out of range - should be " 2305 "between 1 and %d", zType, iCol, pEList->nExpr); 2306 return 1; 2307 } 2308 } 2309 if( sqlite3ExprResolveNames(pNC, pE) ){ 2310 return 1; 2311 } 2312 if( sqlite3ExprIsConstant(pE) ){ 2313 sqlite3ErrorMsg(pParse, 2314 "%s BY terms must not be non-integer constants", zType); 2315 return 1; 2316 } 2317 } 2318 return 0; 2319 } 2320 2321 /* 2322 ** This routine resolves any names used in the result set of the 2323 ** supplied SELECT statement. If the SELECT statement being resolved 2324 ** is a sub-select, then pOuterNC is a pointer to the NameContext 2325 ** of the parent SELECT. 2326 */ 2327 int sqlite3SelectResolve( 2328 Parse *pParse, /* The parser context */ 2329 Select *p, /* The SELECT statement being coded. */ 2330 NameContext *pOuterNC /* The outer name context. May be NULL. */ 2331 ){ 2332 ExprList *pEList; /* Result set. */ 2333 int i; /* For-loop variable used in multiple places */ 2334 NameContext sNC; /* Local name-context */ 2335 ExprList *pGroupBy; /* The group by clause */ 2336 2337 /* If this routine has run before, return immediately. */ 2338 if( p->isResolved ){ 2339 assert( !pOuterNC ); 2340 return SQLITE_OK; 2341 } 2342 p->isResolved = 1; 2343 2344 /* If there have already been errors, do nothing. */ 2345 if( pParse->nErr>0 ){ 2346 return SQLITE_ERROR; 2347 } 2348 2349 /* Prepare the select statement. This call will allocate all cursors 2350 ** required to handle the tables and subqueries in the FROM clause. 2351 */ 2352 if( prepSelectStmt(pParse, p) ){ 2353 return SQLITE_ERROR; 2354 } 2355 2356 /* Resolve the expressions in the LIMIT and OFFSET clauses. These 2357 ** are not allowed to refer to any names, so pass an empty NameContext. 2358 */ 2359 sNC.pParse = pParse; 2360 sNC.hasAgg = 0; 2361 sNC.nErr = 0; 2362 sNC.nRef = 0; 2363 sNC.pEList = 0; 2364 sNC.allowAgg = 0; 2365 sNC.pSrcList = 0; 2366 sNC.pNext = 0; 2367 if( sqlite3ExprResolveNames(&sNC, p->pLimit) || 2368 sqlite3ExprResolveNames(&sNC, p->pOffset) ){ 2369 return SQLITE_ERROR; 2370 } 2371 2372 /* Set up the local name-context to pass to ExprResolveNames() to 2373 ** resolve the expression-list. 2374 */ 2375 sNC.allowAgg = 1; 2376 sNC.pSrcList = p->pSrc; 2377 sNC.pNext = pOuterNC; 2378 2379 /* Resolve names in the result set. */ 2380 pEList = p->pEList; 2381 if( !pEList ) return SQLITE_ERROR; 2382 for(i=0; i<pEList->nExpr; i++){ 2383 Expr *pX = pEList->a[i].pExpr; 2384 if( sqlite3ExprResolveNames(&sNC, pX) ){ 2385 return SQLITE_ERROR; 2386 } 2387 } 2388 2389 /* If there are no aggregate functions in the result-set, and no GROUP BY 2390 ** expression, do not allow aggregates in any of the other expressions. 2391 */ 2392 assert( !p->isAgg ); 2393 pGroupBy = p->pGroupBy; 2394 if( pGroupBy || sNC.hasAgg ){ 2395 p->isAgg = 1; 2396 }else{ 2397 sNC.allowAgg = 0; 2398 } 2399 2400 /* If a HAVING clause is present, then there must be a GROUP BY clause. 2401 */ 2402 if( p->pHaving && !pGroupBy ){ 2403 sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING"); 2404 return SQLITE_ERROR; 2405 } 2406 2407 /* Add the expression list to the name-context before parsing the 2408 ** other expressions in the SELECT statement. This is so that 2409 ** expressions in the WHERE clause (etc.) can refer to expressions by 2410 ** aliases in the result set. 2411 ** 2412 ** Minor point: If this is the case, then the expression will be 2413 ** re-evaluated for each reference to it. 2414 */ 2415 sNC.pEList = p->pEList; 2416 if( sqlite3ExprResolveNames(&sNC, p->pWhere) || 2417 sqlite3ExprResolveNames(&sNC, p->pHaving) || 2418 processOrderGroupBy(&sNC, p->pOrderBy, "ORDER") || 2419 processOrderGroupBy(&sNC, pGroupBy, "GROUP") 2420 ){ 2421 return SQLITE_ERROR; 2422 } 2423 2424 /* Make sure the GROUP BY clause does not contain aggregate functions. 2425 */ 2426 if( pGroupBy ){ 2427 struct ExprList_item *pItem; 2428 2429 for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){ 2430 if( ExprHasProperty(pItem->pExpr, EP_Agg) ){ 2431 sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in " 2432 "the GROUP BY clause"); 2433 return SQLITE_ERROR; 2434 } 2435 } 2436 } 2437 2438 return SQLITE_OK; 2439 } 2440 2441 /* 2442 ** Reset the aggregate accumulator. 2443 ** 2444 ** The aggregate accumulator is a set of memory cells that hold 2445 ** intermediate results while calculating an aggregate. This 2446 ** routine simply stores NULLs in all of those memory cells. 2447 */ 2448 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ 2449 Vdbe *v = pParse->pVdbe; 2450 int i; 2451 struct AggInfo_func *pFunc; 2452 if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){ 2453 return; 2454 } 2455 for(i=0; i<pAggInfo->nColumn; i++){ 2456 sqlite3VdbeAddOp(v, OP_MemNull, pAggInfo->aCol[i].iMem, 0); 2457 } 2458 for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){ 2459 sqlite3VdbeAddOp(v, OP_MemNull, pFunc->iMem, 0); 2460 if( pFunc->iDistinct>=0 ){ 2461 Expr *pE = pFunc->pExpr; 2462 if( pE->pList==0 || pE->pList->nExpr!=1 ){ 2463 sqlite3ErrorMsg(pParse, "DISTINCT in aggregate must be followed " 2464 "by an expression"); 2465 pFunc->iDistinct = -1; 2466 }else{ 2467 KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->pList); 2468 sqlite3VdbeOp3(v, OP_OpenVirtual, pFunc->iDistinct, 0, 2469 (char*)pKeyInfo, P3_KEYINFO_HANDOFF); 2470 } 2471 } 2472 } 2473 } 2474 2475 /* 2476 ** Invoke the OP_AggFinalize opcode for every aggregate function 2477 ** in the AggInfo structure. 2478 */ 2479 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ 2480 Vdbe *v = pParse->pVdbe; 2481 int i; 2482 struct AggInfo_func *pF; 2483 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ 2484 ExprList *pList = pF->pExpr->pList; 2485 sqlite3VdbeOp3(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 2486 (void*)pF->pFunc, P3_FUNCDEF); 2487 } 2488 } 2489 2490 /* 2491 ** Update the accumulator memory cells for an aggregate based on 2492 ** the current cursor position. 2493 */ 2494 static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ 2495 Vdbe *v = pParse->pVdbe; 2496 int i; 2497 struct AggInfo_func *pF; 2498 struct AggInfo_col *pC; 2499 2500 pAggInfo->directMode = 1; 2501 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ 2502 int nArg; 2503 int addrNext = 0; 2504 ExprList *pList = pF->pExpr->pList; 2505 if( pList ){ 2506 nArg = pList->nExpr; 2507 sqlite3ExprCodeExprList(pParse, pList); 2508 }else{ 2509 nArg = 0; 2510 } 2511 if( pF->iDistinct>=0 ){ 2512 addrNext = sqlite3VdbeMakeLabel(v); 2513 assert( nArg==1 ); 2514 codeDistinct(v, pF->iDistinct, addrNext, 1, 2); 2515 } 2516 if( pF->pFunc->needCollSeq ){ 2517 CollSeq *pColl = 0; 2518 struct ExprList_item *pItem; 2519 int j; 2520 for(j=0, pItem=pList->a; !pColl && j<pList->nExpr; j++, pItem++){ 2521 pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr); 2522 } 2523 if( !pColl ){ 2524 pColl = pParse->db->pDfltColl; 2525 } 2526 sqlite3VdbeOp3(v, OP_CollSeq, 0, 0, (char *)pColl, P3_COLLSEQ); 2527 } 2528 sqlite3VdbeOp3(v, OP_AggStep, pF->iMem, nArg, (void*)pF->pFunc, P3_FUNCDEF); 2529 if( addrNext ){ 2530 sqlite3VdbeResolveLabel(v, addrNext); 2531 } 2532 } 2533 for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){ 2534 sqlite3ExprCode(pParse, pC->pExpr); 2535 sqlite3VdbeAddOp(v, OP_MemStore, pC->iMem, 1); 2536 } 2537 pAggInfo->directMode = 0; 2538 } 2539 2540 2541 /* 2542 ** Generate code for the given SELECT statement. 2543 ** 2544 ** The results are distributed in various ways depending on the 2545 ** value of eDest and iParm. 2546 ** 2547 ** eDest Value Result 2548 ** ------------ ------------------------------------------- 2549 ** SRT_Callback Invoke the callback for each row of the result. 2550 ** 2551 ** SRT_Mem Store first result in memory cell iParm 2552 ** 2553 ** SRT_Set Store results as keys of table iParm. 2554 ** 2555 ** SRT_Union Store results as a key in a temporary table iParm 2556 ** 2557 ** SRT_Except Remove results from the temporary table iParm. 2558 ** 2559 ** SRT_Table Store results in temporary table iParm 2560 ** 2561 ** The table above is incomplete. Additional eDist value have be added 2562 ** since this comment was written. See the selectInnerLoop() function for 2563 ** a complete listing of the allowed values of eDest and their meanings. 2564 ** 2565 ** This routine returns the number of errors. If any errors are 2566 ** encountered, then an appropriate error message is left in 2567 ** pParse->zErrMsg. 2568 ** 2569 ** This routine does NOT free the Select structure passed in. The 2570 ** calling function needs to do that. 2571 ** 2572 ** The pParent, parentTab, and *pParentAgg fields are filled in if this 2573 ** SELECT is a subquery. This routine may try to combine this SELECT 2574 ** with its parent to form a single flat query. In so doing, it might 2575 ** change the parent query from a non-aggregate to an aggregate query. 2576 ** For that reason, the pParentAgg flag is passed as a pointer, so it 2577 ** can be changed. 2578 ** 2579 ** Example 1: The meaning of the pParent parameter. 2580 ** 2581 ** SELECT * FROM t1 JOIN (SELECT x, count(*) FROM t2) JOIN t3; 2582 ** \ \_______ subquery _______/ / 2583 ** \ / 2584 ** \____________________ outer query ___________________/ 2585 ** 2586 ** This routine is called for the outer query first. For that call, 2587 ** pParent will be NULL. During the processing of the outer query, this 2588 ** routine is called recursively to handle the subquery. For the recursive 2589 ** call, pParent will point to the outer query. Because the subquery is 2590 ** the second element in a three-way join, the parentTab parameter will 2591 ** be 1 (the 2nd value of a 0-indexed array.) 2592 */ 2593 int sqlite3Select( 2594 Parse *pParse, /* The parser context */ 2595 Select *p, /* The SELECT statement being coded. */ 2596 int eDest, /* How to dispose of the results */ 2597 int iParm, /* A parameter used by the eDest disposal method */ 2598 Select *pParent, /* Another SELECT for which this is a sub-query */ 2599 int parentTab, /* Index in pParent->pSrc of this query */ 2600 int *pParentAgg, /* True if pParent uses aggregate functions */ 2601 char *aff /* If eDest is SRT_Union, the affinity string */ 2602 ){ 2603 int i, j; /* Loop counters */ 2604 WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */ 2605 Vdbe *v; /* The virtual machine under construction */ 2606 int isAgg; /* True for select lists like "count(*)" */ 2607 ExprList *pEList; /* List of columns to extract. */ 2608 SrcList *pTabList; /* List of tables to select from */ 2609 Expr *pWhere; /* The WHERE clause. May be NULL */ 2610 ExprList *pOrderBy; /* The ORDER BY clause. May be NULL */ 2611 ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ 2612 Expr *pHaving; /* The HAVING clause. May be NULL */ 2613 int isDistinct; /* True if the DISTINCT keyword is present */ 2614 int distinct; /* Table to use for the distinct set */ 2615 int rc = 1; /* Value to return from this function */ 2616 int addrSortIndex; /* Address of an OP_OpenVirtual instruction */ 2617 AggInfo sAggInfo; /* Information used by aggregate queries */ 2618 2619 if( sqlite3_malloc_failed || pParse->nErr || p==0 ) return 1; 2620 if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; 2621 memset(&sAggInfo, 0, sizeof(sAggInfo)); 2622 2623 #ifndef SQLITE_OMIT_COMPOUND_SELECT 2624 /* If there is are a sequence of queries, do the earlier ones first. 2625 */ 2626 if( p->pPrior ){ 2627 if( p->pRightmost==0 ){ 2628 Select *pLoop; 2629 for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ 2630 pLoop->pRightmost = p; 2631 } 2632 } 2633 return multiSelect(pParse, p, eDest, iParm, aff); 2634 } 2635 #endif 2636 2637 pOrderBy = p->pOrderBy; 2638 if( IgnorableOrderby(eDest) ){ 2639 p->pOrderBy = 0; 2640 } 2641 if( sqlite3SelectResolve(pParse, p, 0) ){ 2642 goto select_end; 2643 } 2644 p->pOrderBy = pOrderBy; 2645 2646 /* Make local copies of the parameters for this query. 2647 */ 2648 pTabList = p->pSrc; 2649 pWhere = p->pWhere; 2650 pGroupBy = p->pGroupBy; 2651 pHaving = p->pHaving; 2652 isAgg = p->isAgg; 2653 isDistinct = p->isDistinct; 2654 pEList = p->pEList; 2655 if( pEList==0 ) goto select_end; 2656 2657 /* 2658 ** Do not even attempt to generate any code if we have already seen 2659 ** errors before this routine starts. 2660 */ 2661 if( pParse->nErr>0 ) goto select_end; 2662 2663 /* If writing to memory or generating a set 2664 ** only a single column may be output. 2665 */ 2666 assert( eDest!=SRT_Exists || pEList->nExpr==1 ); 2667 #ifndef SQLITE_OMIT_SUBQUERY 2668 if( (eDest==SRT_Mem || eDest==SRT_Set) && pEList->nExpr>1 ){ 2669 sqlite3ErrorMsg(pParse, "only a single result allowed for " 2670 "a SELECT that is part of an expression"); 2671 goto select_end; 2672 } 2673 #endif 2674 2675 /* ORDER BY is ignored for some destinations. 2676 */ 2677 if( IgnorableOrderby(eDest) ){ 2678 pOrderBy = 0; 2679 } 2680 2681 /* Begin generating code. 2682 */ 2683 v = sqlite3GetVdbe(pParse); 2684 if( v==0 ) goto select_end; 2685 2686 /* Identify column names if we will be using them in a callback. This 2687 ** step is skipped if the output is going to some other destination. 2688 */ 2689 if( eDest==SRT_Callback ){ 2690 generateColumnNames(pParse, pTabList, pEList); 2691 } 2692 2693 /* Generate code for all sub-queries in the FROM clause 2694 */ 2695 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) 2696 for(i=0; i<pTabList->nSrc; i++){ 2697 const char *zSavedAuthContext = 0; 2698 int needRestoreContext; 2699 struct SrcList_item *pItem = &pTabList->a[i]; 2700 2701 if( pItem->pSelect==0 ) continue; 2702 if( pItem->zName!=0 ){ 2703 zSavedAuthContext = pParse->zAuthContext; 2704 pParse->zAuthContext = pItem->zName; 2705 needRestoreContext = 1; 2706 }else{ 2707 needRestoreContext = 0; 2708 } 2709 sqlite3Select(pParse, pItem->pSelect, SRT_VirtualTab, 2710 pItem->iCursor, p, i, &isAgg, 0); 2711 if( needRestoreContext ){ 2712 pParse->zAuthContext = zSavedAuthContext; 2713 } 2714 pTabList = p->pSrc; 2715 pWhere = p->pWhere; 2716 if( !IgnorableOrderby(eDest) ){ 2717 pOrderBy = p->pOrderBy; 2718 } 2719 pGroupBy = p->pGroupBy; 2720 pHaving = p->pHaving; 2721 isDistinct = p->isDistinct; 2722 } 2723 #endif 2724 2725 /* Check for the special case of a min() or max() function by itself 2726 ** in the result set. 2727 */ 2728 if( simpleMinMaxQuery(pParse, p, eDest, iParm) ){ 2729 rc = 0; 2730 goto select_end; 2731 } 2732 2733 /* Check to see if this is a subquery that can be "flattened" into its parent. 2734 ** If flattening is a possiblity, do so and return immediately. 2735 */ 2736 #ifndef SQLITE_OMIT_VIEW 2737 if( pParent && pParentAgg && 2738 flattenSubquery(pParse, pParent, parentTab, *pParentAgg, isAgg) ){ 2739 if( isAgg ) *pParentAgg = 1; 2740 goto select_end; 2741 } 2742 #endif 2743 2744 /* If there is an ORDER BY clause, resolve any collation sequences 2745 ** names that have been explicitly specified and create a sorting index. 2746 ** 2747 ** This sorting index might end up being unused if the data can be 2748 ** extracted in pre-sorted order. If that is the case, then the 2749 ** OP_OpenVirtual instruction will be changed to an OP_Noop once 2750 ** we figure out that the sorting index is not needed. The addrSortIndex 2751 ** variable is used to facilitate that change. 2752 */ 2753 if( pOrderBy ){ 2754 struct ExprList_item *pTerm; 2755 KeyInfo *pKeyInfo; 2756 for(i=0, pTerm=pOrderBy->a; i<pOrderBy->nExpr; i++, pTerm++){ 2757 if( pTerm->zName ){ 2758 pTerm->pExpr->pColl = sqlite3LocateCollSeq(pParse, pTerm->zName, -1); 2759 } 2760 } 2761 if( pParse->nErr ){ 2762 goto select_end; 2763 } 2764 pKeyInfo = keyInfoFromExprList(pParse, pOrderBy); 2765 pOrderBy->iECursor = pParse->nTab++; 2766 p->addrOpenVirt[2] = addrSortIndex = 2767 sqlite3VdbeOp3(v, OP_OpenVirtual, pOrderBy->iECursor, pOrderBy->nExpr+2, 2768 (char*)pKeyInfo, P3_KEYINFO_HANDOFF); 2769 }else{ 2770 addrSortIndex = -1; 2771 } 2772 2773 /* Set the limiter. 2774 */ 2775 computeLimitRegisters(pParse, p); 2776 2777 /* If the output is destined for a temporary table, open that table. 2778 */ 2779 if( eDest==SRT_VirtualTab ){ 2780 sqlite3VdbeAddOp(v, OP_OpenVirtual, iParm, pEList->nExpr); 2781 } 2782 2783 2784 /* Initialize the memory cell to NULL for SRT_Mem or 0 for SRT_Exists 2785 */ 2786 if( eDest==SRT_Mem ){ 2787 sqlite3VdbeAddOp(v, OP_MemNull, iParm, 0); 2788 }else if( eDest==SRT_Exists ){ 2789 sqlite3VdbeAddOp(v, OP_MemInt, 0, iParm); 2790 } 2791 2792 /* Open a virtual index to use for the distinct set. 2793 */ 2794 if( isDistinct ){ 2795 KeyInfo *pKeyInfo; 2796 distinct = pParse->nTab++; 2797 pKeyInfo = keyInfoFromExprList(pParse, p->pEList); 2798 sqlite3VdbeOp3(v, OP_OpenVirtual, distinct, 0, 2799 (char*)pKeyInfo, P3_KEYINFO_HANDOFF); 2800 }else{ 2801 distinct = -1; 2802 } 2803 2804 /* Aggregate and non-aggregate queries are handled differently */ 2805 if( !isAgg && pGroupBy==0 ){ 2806 /* This case is for non-aggregate queries 2807 ** Begin the database scan 2808 */ 2809 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy); 2810 if( pWInfo==0 ) goto select_end; 2811 2812 /* If sorting index that was created by a prior OP_OpenVirtual 2813 ** instruction ended up not being needed, then change the OP_OpenVirtual 2814 ** into an OP_Noop. 2815 */ 2816 if( addrSortIndex>=0 && pOrderBy==0 ){ 2817 uncreateSortingIndex(pParse, addrSortIndex); 2818 p->addrOpenVirt[2] = -1; 2819 } 2820 2821 /* Use the standard inner loop 2822 */ 2823 if( selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, eDest, 2824 iParm, pWInfo->iContinue, pWInfo->iBreak, aff) ){ 2825 goto select_end; 2826 } 2827 2828 /* End the database scan loop. 2829 */ 2830 sqlite3WhereEnd(pWInfo); 2831 }else{ 2832 /* This is the processing for aggregate queries */ 2833 NameContext sNC; /* Name context for processing aggregate information */ 2834 int iAMem; /* First Mem address for storing current GROUP BY */ 2835 int iBMem; /* First Mem address for previous GROUP BY */ 2836 int iUseFlag; /* Mem address holding flag indicating that at least 2837 ** one row of the input to the aggregator has been 2838 ** processed */ 2839 int iAbortFlag; /* Mem address which causes query abort if positive */ 2840 int groupBySort; /* Rows come from source in GROUP BY order */ 2841 2842 2843 /* The following variables hold addresses or labels for parts of the 2844 ** virtual machine program we are putting together */ 2845 int addrOutputRow; /* Start of subroutine that outputs a result row */ 2846 int addrSetAbort; /* Set the abort flag and return */ 2847 int addrInitializeLoop; /* Start of code that initializes the input loop */ 2848 int addrTopOfLoop; /* Top of the input loop */ 2849 int addrGroupByChange; /* Code that runs when any GROUP BY term changes */ 2850 int addrProcessRow; /* Code to process a single input row */ 2851 int addrEnd; /* End of all processing */ 2852 int addrSortingIdx; /* The OP_OpenVirtual for the sorting index */ 2853 int addrReset; /* Subroutine for resetting the accumulator */ 2854 2855 addrEnd = sqlite3VdbeMakeLabel(v); 2856 2857 /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in 2858 ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the 2859 ** SELECT statement. 2860 */ 2861 memset(&sNC, 0, sizeof(sNC)); 2862 sNC.pParse = pParse; 2863 sNC.pSrcList = pTabList; 2864 sNC.pAggInfo = &sAggInfo; 2865 sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0; 2866 sAggInfo.pGroupBy = pGroupBy; 2867 if( sqlite3ExprAnalyzeAggList(&sNC, pEList) ){ 2868 goto select_end; 2869 } 2870 if( sqlite3ExprAnalyzeAggList(&sNC, pOrderBy) ){ 2871 goto select_end; 2872 } 2873 if( pHaving && sqlite3ExprAnalyzeAggregates(&sNC, pHaving) ){ 2874 goto select_end; 2875 } 2876 sAggInfo.nAccumulator = sAggInfo.nColumn; 2877 for(i=0; i<sAggInfo.nFunc; i++){ 2878 if( sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->pList) ){ 2879 goto select_end; 2880 } 2881 } 2882 if( sqlite3_malloc_failed ) goto select_end; 2883 2884 /* Processing for aggregates with GROUP BY is very different and 2885 ** much more complex tha aggregates without a GROUP BY. 2886 */ 2887 if( pGroupBy ){ 2888 KeyInfo *pKeyInfo; /* Keying information for the group by clause */ 2889 2890 /* Create labels that we will be needing 2891 */ 2892 2893 addrInitializeLoop = sqlite3VdbeMakeLabel(v); 2894 addrGroupByChange = sqlite3VdbeMakeLabel(v); 2895 addrProcessRow = sqlite3VdbeMakeLabel(v); 2896 2897 /* If there is a GROUP BY clause we might need a sorting index to 2898 ** implement it. Allocate that sorting index now. If it turns out 2899 ** that we do not need it after all, the OpenVirtual instruction 2900 ** will be converted into a Noop. 2901 */ 2902 sAggInfo.sortingIdx = pParse->nTab++; 2903 pKeyInfo = keyInfoFromExprList(pParse, pGroupBy); 2904 addrSortingIdx = 2905 sqlite3VdbeOp3(v, OP_OpenVirtual, sAggInfo.sortingIdx, 2906 sAggInfo.nSortingColumn, 2907 (char*)pKeyInfo, P3_KEYINFO_HANDOFF); 2908 2909 /* Initialize memory locations used by GROUP BY aggregate processing 2910 */ 2911 iUseFlag = pParse->nMem++; 2912 iAbortFlag = pParse->nMem++; 2913 iAMem = pParse->nMem; 2914 pParse->nMem += pGroupBy->nExpr; 2915 iBMem = pParse->nMem; 2916 pParse->nMem += pGroupBy->nExpr; 2917 sqlite3VdbeAddOp(v, OP_MemInt, 0, iAbortFlag); 2918 VdbeComment((v, "# clear abort flag")); 2919 sqlite3VdbeAddOp(v, OP_MemInt, 0, iUseFlag); 2920 VdbeComment((v, "# indicate accumulator empty")); 2921 sqlite3VdbeAddOp(v, OP_Goto, 0, addrInitializeLoop); 2922 2923 /* Generate a subroutine that outputs a single row of the result 2924 ** set. This subroutine first looks at the iUseFlag. If iUseFlag 2925 ** is less than or equal to zero, the subroutine is a no-op. If 2926 ** the processing calls for the query to abort, this subroutine 2927 ** increments the iAbortFlag memory location before returning in 2928 ** order to signal the caller to abort. 2929 */ 2930 addrSetAbort = sqlite3VdbeCurrentAddr(v); 2931 sqlite3VdbeAddOp(v, OP_MemInt, 1, iAbortFlag); 2932 VdbeComment((v, "# set abort flag")); 2933 sqlite3VdbeAddOp(v, OP_Return, 0, 0); 2934 addrOutputRow = sqlite3VdbeCurrentAddr(v); 2935 sqlite3VdbeAddOp(v, OP_IfMemPos, iUseFlag, addrOutputRow+2); 2936 VdbeComment((v, "# Groupby result generator entry point")); 2937 sqlite3VdbeAddOp(v, OP_Return, 0, 0); 2938 finalizeAggFunctions(pParse, &sAggInfo); 2939 if( pHaving ){ 2940 sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, 1); 2941 } 2942 rc = selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy, 2943 distinct, eDest, iParm, 2944 addrOutputRow+1, addrSetAbort, aff); 2945 if( rc ){ 2946 goto select_end; 2947 } 2948 sqlite3VdbeAddOp(v, OP_Return, 0, 0); 2949 VdbeComment((v, "# end groupby result generator")); 2950 2951 /* Generate a subroutine that will reset the group-by accumulator 2952 */ 2953 addrReset = sqlite3VdbeCurrentAddr(v); 2954 resetAccumulator(pParse, &sAggInfo); 2955 sqlite3VdbeAddOp(v, OP_Return, 0, 0); 2956 2957 /* Begin a loop that will extract all source rows in GROUP BY order. 2958 ** This might involve two separate loops with an OP_Sort in between, or 2959 ** it might be a single loop that uses an index to extract information 2960 ** in the right order to begin with. 2961 */ 2962 sqlite3VdbeResolveLabel(v, addrInitializeLoop); 2963 sqlite3VdbeAddOp(v, OP_Gosub, 0, addrReset); 2964 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy); 2965 if( pWInfo==0 ) goto select_end; 2966 if( pGroupBy==0 ){ 2967 /* The optimizer is able to deliver rows in group by order so 2968 ** we do not have to sort. The OP_OpenVirtual table will be 2969 ** cancelled later because we still need to use the pKeyInfo 2970 */ 2971 pGroupBy = p->pGroupBy; 2972 groupBySort = 0; 2973 }else{ 2974 /* Rows are coming out in undetermined order. We have to push 2975 ** each row into a sorting index, terminate the first loop, 2976 ** then loop over the sorting index in order to get the output 2977 ** in sorted order 2978 */ 2979 groupBySort = 1; 2980 sqlite3ExprCodeExprList(pParse, pGroupBy); 2981 sqlite3VdbeAddOp(v, OP_Sequence, sAggInfo.sortingIdx, 0); 2982 j = pGroupBy->nExpr+1; 2983 for(i=0; i<sAggInfo.nColumn; i++){ 2984 struct AggInfo_col *pCol = &sAggInfo.aCol[i]; 2985 if( pCol->iSorterColumn<j ) continue; 2986 if( pCol->iColumn<0 ){ 2987 sqlite3VdbeAddOp(v, OP_Rowid, pCol->iTable, 0); 2988 }else{ 2989 sqlite3VdbeAddOp(v, OP_Column, pCol->iTable, pCol->iColumn); 2990 } 2991 j++; 2992 } 2993 sqlite3VdbeAddOp(v, OP_MakeRecord, j, 0); 2994 sqlite3VdbeAddOp(v, OP_IdxInsert, sAggInfo.sortingIdx, 0); 2995 sqlite3WhereEnd(pWInfo); 2996 sqlite3VdbeAddOp(v, OP_Sort, sAggInfo.sortingIdx, addrEnd); 2997 VdbeComment((v, "# GROUP BY sort")); 2998 sAggInfo.useSortingIdx = 1; 2999 } 3000 3001 /* Evaluate the current GROUP BY terms and store in b0, b1, b2... 3002 ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth) 3003 ** Then compare the current GROUP BY terms against the GROUP BY terms 3004 ** from the previous row currently stored in a0, a1, a2... 3005 */ 3006 addrTopOfLoop = sqlite3VdbeCurrentAddr(v); 3007 for(j=0; j<pGroupBy->nExpr; j++){ 3008 if( groupBySort ){ 3009 sqlite3VdbeAddOp(v, OP_Column, sAggInfo.sortingIdx, j); 3010 }else{ 3011 sAggInfo.directMode = 1; 3012 sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr); 3013 } 3014 sqlite3VdbeAddOp(v, OP_MemStore, iBMem+j, j<pGroupBy->nExpr-1); 3015 } 3016 for(j=pGroupBy->nExpr-1; j>=0; j--){ 3017 if( j<pGroupBy->nExpr-1 ){ 3018 sqlite3VdbeAddOp(v, OP_MemLoad, iBMem+j, 0); 3019 } 3020 sqlite3VdbeAddOp(v, OP_MemLoad, iAMem+j, 0); 3021 if( j==0 ){ 3022 sqlite3VdbeAddOp(v, OP_Eq, 0x200, addrProcessRow); 3023 }else{ 3024 sqlite3VdbeAddOp(v, OP_Ne, 0x200, addrGroupByChange); 3025 } 3026 sqlite3VdbeChangeP3(v, -1, (void*)pKeyInfo->aColl[j], P3_COLLSEQ); 3027 } 3028 3029 /* Generate code that runs whenever the GROUP BY changes. 3030 ** Change in the GROUP BY are detected by the previous code 3031 ** block. If there were no changes, this block is skipped. 3032 ** 3033 ** This code copies current group by terms in b0,b1,b2,... 3034 ** over to a0,a1,a2. It then calls the output subroutine 3035 ** and resets the aggregate accumulator registers in preparation 3036 ** for the next GROUP BY batch. 3037 */ 3038 sqlite3VdbeResolveLabel(v, addrGroupByChange); 3039 for(j=0; j<pGroupBy->nExpr; j++){ 3040 sqlite3VdbeAddOp(v, OP_MemMove, iAMem+j, iBMem+j); 3041 } 3042 sqlite3VdbeAddOp(v, OP_Gosub, 0, addrOutputRow); 3043 VdbeComment((v, "# output one row")); 3044 sqlite3VdbeAddOp(v, OP_IfMemPos, iAbortFlag, addrEnd); 3045 VdbeComment((v, "# check abort flag")); 3046 sqlite3VdbeAddOp(v, OP_Gosub, 0, addrReset); 3047 VdbeComment((v, "# reset accumulator")); 3048 3049 /* Update the aggregate accumulators based on the content of 3050 ** the current row 3051 */ 3052 sqlite3VdbeResolveLabel(v, addrProcessRow); 3053 updateAccumulator(pParse, &sAggInfo); 3054 sqlite3VdbeAddOp(v, OP_MemInt, 1, iUseFlag); 3055 VdbeComment((v, "# indicate data in accumulator")); 3056 3057 /* End of the loop 3058 */ 3059 if( groupBySort ){ 3060 sqlite3VdbeAddOp(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop); 3061 }else{ 3062 sqlite3WhereEnd(pWInfo); 3063 uncreateSortingIndex(pParse, addrSortingIdx); 3064 } 3065 3066 /* Output the final row of result 3067 */ 3068 sqlite3VdbeAddOp(v, OP_Gosub, 0, addrOutputRow); 3069 VdbeComment((v, "# output final row")); 3070 3071 } /* endif pGroupBy */ 3072 else { 3073 /* This case runs if the aggregate has no GROUP BY clause. The 3074 ** processing is much simpler since there is only a single row 3075 ** of output. 3076 */ 3077 resetAccumulator(pParse, &sAggInfo); 3078 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0); 3079 if( pWInfo==0 ) goto select_end; 3080 updateAccumulator(pParse, &sAggInfo); 3081 sqlite3WhereEnd(pWInfo); 3082 finalizeAggFunctions(pParse, &sAggInfo); 3083 pOrderBy = 0; 3084 if( pHaving ){ 3085 sqlite3ExprIfFalse(pParse, pHaving, addrEnd, 1); 3086 } 3087 selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 3088 eDest, iParm, addrEnd, addrEnd, aff); 3089 } 3090 sqlite3VdbeResolveLabel(v, addrEnd); 3091 3092 } /* endif aggregate query */ 3093 3094 /* If there is an ORDER BY clause, then we need to sort the results 3095 ** and send them to the callback one by one. 3096 */ 3097 if( pOrderBy ){ 3098 generateSortTail(pParse, p, v, pEList->nExpr, eDest, iParm); 3099 } 3100 3101 #ifndef SQLITE_OMIT_SUBQUERY 3102 /* If this was a subquery, we have now converted the subquery into a 3103 ** temporary table. So delete the subquery structure from the parent 3104 ** to prevent this subquery from being evaluated again and to force the 3105 ** the use of the temporary table. 3106 */ 3107 if( pParent ){ 3108 assert( pParent->pSrc->nSrc>parentTab ); 3109 assert( pParent->pSrc->a[parentTab].pSelect==p ); 3110 sqlite3SelectDelete(p); 3111 pParent->pSrc->a[parentTab].pSelect = 0; 3112 } 3113 #endif 3114 3115 /* The SELECT was successfully coded. Set the return code to 0 3116 ** to indicate no errors. 3117 */ 3118 rc = 0; 3119 3120 /* Control jumps to here if an error is encountered above, or upon 3121 ** successful coding of the SELECT. 3122 */ 3123 select_end: 3124 sqliteFree(sAggInfo.aCol); 3125 sqliteFree(sAggInfo.aFunc); 3126 return rc; 3127 } 3128