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