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