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