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