xref: /sqlite-3.40.0/src/select.c (revision b8857447)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains C code routines that are called by the parser
13 ** to handle SELECT statements in SQLite.
14 */
15 #include "sqliteInt.h"
16 
17 /*
18 ** An instance of the following object is used to record information about
19 ** how to process the DISTINCT keyword, to simplify passing that information
20 ** into the selectInnerLoop() routine.
21 */
22 typedef struct DistinctCtx DistinctCtx;
23 struct DistinctCtx {
24   u8 isTnct;      /* 0: Not distinct. 1: DISTICT  2: DISTINCT and ORDER BY */
25   u8 eTnctType;   /* One of the WHERE_DISTINCT_* operators */
26   int tabTnct;    /* Ephemeral table used for DISTINCT processing */
27   int addrTnct;   /* Address of OP_OpenEphemeral opcode for tabTnct */
28 };
29 
30 /*
31 ** An instance of the following object is used to record information about
32 ** the ORDER BY (or GROUP BY) clause of query is being coded.
33 **
34 ** The aDefer[] array is used by the sorter-references optimization. For
35 ** example, assuming there is no index that can be used for the ORDER BY,
36 ** for the query:
37 **
38 **     SELECT a, bigblob FROM t1 ORDER BY a LIMIT 10;
39 **
40 ** it may be more efficient to add just the "a" values to the sorter, and
41 ** retrieve the associated "bigblob" values directly from table t1 as the
42 ** 10 smallest "a" values are extracted from the sorter.
43 **
44 ** When the sorter-reference optimization is used, there is one entry in the
45 ** aDefer[] array for each database table that may be read as values are
46 ** extracted from the sorter.
47 */
48 typedef struct SortCtx SortCtx;
49 struct SortCtx {
50   ExprList *pOrderBy;   /* The ORDER BY (or GROUP BY clause) */
51   int nOBSat;           /* Number of ORDER BY terms satisfied by indices */
52   int iECursor;         /* Cursor number for the sorter */
53   int regReturn;        /* Register holding block-output return address */
54   int labelBkOut;       /* Start label for the block-output subroutine */
55   int addrSortIndex;    /* Address of the OP_SorterOpen or OP_OpenEphemeral */
56   int labelDone;        /* Jump here when done, ex: LIMIT reached */
57   int labelOBLopt;      /* Jump here when sorter is full */
58   u8 sortFlags;         /* Zero or more SORTFLAG_* bits */
59 #ifdef SQLITE_ENABLE_SORTER_REFERENCES
60   u8 nDefer;            /* Number of valid entries in aDefer[] */
61   struct DeferredCsr {
62     Table *pTab;        /* Table definition */
63     int iCsr;           /* Cursor number for table */
64     int nKey;           /* Number of PK columns for table pTab (>=1) */
65   } aDefer[4];
66 #endif
67   struct RowLoadInfo *pDeferredRowLoad;  /* Deferred row loading info or NULL */
68 };
69 #define SORTFLAG_UseSorter  0x01   /* Use SorterOpen instead of OpenEphemeral */
70 
71 /*
72 ** Delete all the content of a Select structure.  Deallocate the structure
73 ** itself depending on the value of bFree
74 **
75 ** If bFree==1, call sqlite3DbFree() on the p object.
76 ** If bFree==0, Leave the first Select object unfreed
77 */
78 static void clearSelect(sqlite3 *db, Select *p, int bFree){
79   while( p ){
80     Select *pPrior = p->pPrior;
81     sqlite3ExprListDelete(db, p->pEList);
82     sqlite3SrcListDelete(db, p->pSrc);
83     sqlite3ExprDelete(db, p->pWhere);
84     sqlite3ExprListDelete(db, p->pGroupBy);
85     sqlite3ExprDelete(db, p->pHaving);
86     sqlite3ExprListDelete(db, p->pOrderBy);
87     sqlite3ExprDelete(db, p->pLimit);
88     if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
89 #ifndef SQLITE_OMIT_WINDOWFUNC
90     if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){
91       sqlite3WindowListDelete(db, p->pWinDefn);
92     }
93     while( p->pWin ){
94       assert( p->pWin->ppThis==&p->pWin );
95       sqlite3WindowUnlinkFromSelect(p->pWin);
96     }
97 #endif
98     if( bFree ) sqlite3DbFreeNN(db, p);
99     p = pPrior;
100     bFree = 1;
101   }
102 }
103 
104 /*
105 ** Initialize a SelectDest structure.
106 */
107 void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
108   pDest->eDest = (u8)eDest;
109   pDest->iSDParm = iParm;
110   pDest->iSDParm2 = 0;
111   pDest->zAffSdst = 0;
112   pDest->iSdst = 0;
113   pDest->nSdst = 0;
114 }
115 
116 
117 /*
118 ** Allocate a new Select structure and return a pointer to that
119 ** structure.
120 */
121 Select *sqlite3SelectNew(
122   Parse *pParse,        /* Parsing context */
123   ExprList *pEList,     /* which columns to include in the result */
124   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
125   Expr *pWhere,         /* the WHERE clause */
126   ExprList *pGroupBy,   /* the GROUP BY clause */
127   Expr *pHaving,        /* the HAVING clause */
128   ExprList *pOrderBy,   /* the ORDER BY clause */
129   u32 selFlags,         /* Flag parameters, such as SF_Distinct */
130   Expr *pLimit          /* LIMIT value.  NULL means not used */
131 ){
132   Select *pNew, *pAllocated;
133   Select standin;
134   pAllocated = pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) );
135   if( pNew==0 ){
136     assert( pParse->db->mallocFailed );
137     pNew = &standin;
138   }
139   if( pEList==0 ){
140     pEList = sqlite3ExprListAppend(pParse, 0,
141                                    sqlite3Expr(pParse->db,TK_ASTERISK,0));
142   }
143   pNew->pEList = pEList;
144   pNew->op = TK_SELECT;
145   pNew->selFlags = selFlags;
146   pNew->iLimit = 0;
147   pNew->iOffset = 0;
148   pNew->selId = ++pParse->nSelect;
149   pNew->addrOpenEphm[0] = -1;
150   pNew->addrOpenEphm[1] = -1;
151   pNew->nSelectRow = 0;
152   if( pSrc==0 ) pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*pSrc));
153   pNew->pSrc = pSrc;
154   pNew->pWhere = pWhere;
155   pNew->pGroupBy = pGroupBy;
156   pNew->pHaving = pHaving;
157   pNew->pOrderBy = pOrderBy;
158   pNew->pPrior = 0;
159   pNew->pNext = 0;
160   pNew->pLimit = pLimit;
161   pNew->pWith = 0;
162 #ifndef SQLITE_OMIT_WINDOWFUNC
163   pNew->pWin = 0;
164   pNew->pWinDefn = 0;
165 #endif
166   if( pParse->db->mallocFailed ) {
167     clearSelect(pParse->db, pNew, pNew!=&standin);
168     pAllocated = 0;
169   }else{
170     assert( pNew->pSrc!=0 || pParse->nErr>0 );
171   }
172   return pAllocated;
173 }
174 
175 
176 /*
177 ** Delete the given Select structure and all of its substructures.
178 */
179 void sqlite3SelectDelete(sqlite3 *db, Select *p){
180   if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1);
181 }
182 
183 /*
184 ** Return a pointer to the right-most SELECT statement in a compound.
185 */
186 static Select *findRightmost(Select *p){
187   while( p->pNext ) p = p->pNext;
188   return p;
189 }
190 
191 /*
192 ** Given 1 to 3 identifiers preceding the JOIN keyword, determine the
193 ** type of join.  Return an integer constant that expresses that type
194 ** in terms of the following bit values:
195 **
196 **     JT_INNER
197 **     JT_CROSS
198 **     JT_OUTER
199 **     JT_NATURAL
200 **     JT_LEFT
201 **     JT_RIGHT
202 **
203 ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
204 **
205 ** If an illegal or unsupported join type is seen, then still return
206 ** a join type, but put an error in the pParse structure.
207 **
208 ** These are the valid join types:
209 **
210 **
211 **      pA       pB       pC               Return Value
212 **     -------  -----    -----             ------------
213 **     CROSS      -        -                 JT_CROSS
214 **     INNER      -        -                 JT_INNER
215 **     LEFT       -        -                 JT_LEFT|JT_OUTER
216 **     LEFT     OUTER      -                 JT_LEFT|JT_OUTER
217 **     RIGHT      -        -                 JT_RIGHT|JT_OUTER
218 **     RIGHT    OUTER      -                 JT_RIGHT|JT_OUTER
219 **     FULL       -        -                 JT_LEFT|JT_RIGHT|JT_OUTER
220 **     FULL     OUTER      -                 JT_LEFT|JT_RIGHT|JT_OUTER
221 **     NATURAL  INNER      -                 JT_NATURAL|JT_INNER
222 **     NATURAL  LEFT       -                 JT_NATURAL|JT_LEFT|JT_OUTER
223 **     NATURAL  LEFT     OUTER               JT_NATURAL|JT_LEFT|JT_OUTER
224 **     NATURAL  RIGHT      -                 JT_NATURAL|JT_RIGHT|JT_OUTER
225 **     NATURAL  RIGHT    OUTER               JT_NATURAL|JT_RIGHT|JT_OUTER
226 **     NATURAL  FULL       -                 JT_NATURAL|JT_LEFT|JT_RIGHT
227 **     NATURAL  FULL     OUTER               JT_NATRUAL|JT_LEFT|JT_RIGHT
228 **
229 ** To preserve historical compatibly, SQLite also accepts a variety
230 ** of other non-standard and in many cases non-sensical join types.
231 ** This routine makes as much sense at it can from the nonsense join
232 ** type and returns a result.  Examples of accepted nonsense join types
233 ** include but are not limited to:
234 **
235 **          INNER CROSS JOIN        ->   same as JOIN
236 **          NATURAL CROSS JOIN      ->   same as NATURAL JOIN
237 **          OUTER LEFT JOIN         ->   same as LEFT JOIN
238 **          LEFT NATURAL JOIN       ->   same as NATURAL LEFT JOIN
239 **          LEFT RIGHT JOIN         ->   same as FULL JOIN
240 **          RIGHT OUTER FULL JOIN   ->   same as FULL JOIN
241 **          CROSS CROSS CROSS JOIN  ->   same as JOIN
242 **
243 ** The only restrictions on the join type name are:
244 **
245 **    *   "INNER" cannot appear together with "OUTER", "LEFT", "RIGHT",
246 **        or "FULL".
247 **
248 **    *   "CROSS" cannot appear together with "OUTER", "LEFT", "RIGHT,
249 **        or "FULL".
250 **
251 **    *   If "OUTER" is present then there must also be one of
252 **        "LEFT", "RIGHT", or "FULL"
253 */
254 int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
255   int jointype = 0;
256   Token *apAll[3];
257   Token *p;
258                              /*   0123456789 123456789 123456789 123 */
259   static const char zKeyText[] = "naturaleftouterightfullinnercross";
260   static const struct {
261     u8 i;        /* Beginning of keyword text in zKeyText[] */
262     u8 nChar;    /* Length of the keyword in characters */
263     u8 code;     /* Join type mask */
264   } aKeyword[] = {
265     /* (0) natural */ { 0,  7, JT_NATURAL                },
266     /* (1) left    */ { 6,  4, JT_LEFT|JT_OUTER          },
267     /* (2) outer   */ { 10, 5, JT_OUTER                  },
268     /* (3) right   */ { 14, 5, JT_RIGHT|JT_OUTER         },
269     /* (4) full    */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
270     /* (5) inner   */ { 23, 5, JT_INNER                  },
271     /* (6) cross   */ { 28, 5, JT_INNER|JT_CROSS         },
272   };
273   int i, j;
274   apAll[0] = pA;
275   apAll[1] = pB;
276   apAll[2] = pC;
277   for(i=0; i<3 && apAll[i]; i++){
278     p = apAll[i];
279     for(j=0; j<ArraySize(aKeyword); j++){
280       if( p->n==aKeyword[j].nChar
281           && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
282         jointype |= aKeyword[j].code;
283         break;
284       }
285     }
286     testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
287     if( j>=ArraySize(aKeyword) ){
288       jointype |= JT_ERROR;
289       break;
290     }
291   }
292   if(
293      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
294      (jointype & JT_ERROR)!=0 ||
295      (jointype & (JT_OUTER|JT_LEFT|JT_RIGHT))==JT_OUTER
296   ){
297     const char *zSp1 = " ";
298     const char *zSp2 = " ";
299     if( pB==0 ){ zSp1++; }
300     if( pC==0 ){ zSp2++; }
301     sqlite3ErrorMsg(pParse, "unknown join type: "
302        "%T%s%T%s%T", pA, zSp1, pB, zSp2, pC);
303     jointype = JT_INNER;
304   }
305   return jointype;
306 }
307 
308 /*
309 ** Return the index of a column in a table.  Return -1 if the column
310 ** is not contained in the table.
311 */
312 int sqlite3ColumnIndex(Table *pTab, const char *zCol){
313   int i;
314   u8 h = sqlite3StrIHash(zCol);
315   Column *pCol;
316   for(pCol=pTab->aCol, i=0; i<pTab->nCol; pCol++, i++){
317     if( pCol->hName==h && sqlite3StrICmp(pCol->zCnName, zCol)==0 ) return i;
318   }
319   return -1;
320 }
321 
322 /*
323 ** Mark a subquery result column as having been used.
324 */
325 void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){
326   assert( pItem!=0 );
327   assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
328   if( pItem->fg.isNestedFrom ){
329     ExprList *pResults;
330     assert( pItem->pSelect!=0 );
331     pResults = pItem->pSelect->pEList;
332     assert( pResults!=0 );
333     assert( iCol>=0 && iCol<pResults->nExpr );
334     pResults->a[iCol].fg.bUsed = 1;
335   }
336 }
337 
338 /*
339 ** Search the tables iStart..iEnd (inclusive) in pSrc, looking for a
340 ** table that has a column named zCol.  The search is left-to-right.
341 ** The first match found is returned.
342 **
343 ** When found, set *piTab and *piCol to the table index and column index
344 ** of the matching column and return TRUE.
345 **
346 ** If not found, return FALSE.
347 */
348 static int tableAndColumnIndex(
349   SrcList *pSrc,       /* Array of tables to search */
350   int iStart,          /* First member of pSrc->a[] to check */
351   int iEnd,            /* Last member of pSrc->a[] to check */
352   const char *zCol,    /* Name of the column we are looking for */
353   int *piTab,          /* Write index of pSrc->a[] here */
354   int *piCol,          /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
355   int bIgnoreHidden    /* Ignore hidden columns */
356 ){
357   int i;               /* For looping over tables in pSrc */
358   int iCol;            /* Index of column matching zCol */
359 
360   assert( iEnd<pSrc->nSrc );
361   assert( iStart>=0 );
362   assert( (piTab==0)==(piCol==0) );  /* Both or neither are NULL */
363 
364   for(i=iStart; i<=iEnd; i++){
365     iCol = sqlite3ColumnIndex(pSrc->a[i].pTab, zCol);
366     if( iCol>=0
367      && (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pTab->aCol[iCol])==0)
368     ){
369       if( piTab ){
370         sqlite3SrcItemColumnUsed(&pSrc->a[i], iCol);
371         *piTab = i;
372         *piCol = iCol;
373       }
374       return 1;
375     }
376   }
377   return 0;
378 }
379 
380 /*
381 ** Set the EP_OuterON property on all terms of the given expression.
382 ** And set the Expr.w.iJoin to iTable for every term in the
383 ** expression.
384 **
385 ** The EP_OuterON property is used on terms of an expression to tell
386 ** the OUTER JOIN processing logic that this term is part of the
387 ** join restriction specified in the ON or USING clause and not a part
388 ** of the more general WHERE clause.  These terms are moved over to the
389 ** WHERE clause during join processing but we need to remember that they
390 ** originated in the ON or USING clause.
391 **
392 ** The Expr.w.iJoin tells the WHERE clause processing that the
393 ** expression depends on table w.iJoin even if that table is not
394 ** explicitly mentioned in the expression.  That information is needed
395 ** for cases like this:
396 **
397 **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
398 **
399 ** The where clause needs to defer the handling of the t1.x=5
400 ** term until after the t2 loop of the join.  In that way, a
401 ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
402 ** defer the handling of t1.x=5, it will be processed immediately
403 ** after the t1 loop and rows with t1.x!=5 will never appear in
404 ** the output, which is incorrect.
405 */
406 void sqlite3SetJoinExpr(Expr *p, int iTable, u32 joinFlag){
407   assert( joinFlag==EP_OuterON || joinFlag==EP_InnerON );
408   while( p ){
409     ExprSetProperty(p, joinFlag);
410     assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
411     ExprSetVVAProperty(p, EP_NoReduce);
412     p->w.iJoin = iTable;
413     if( p->op==TK_FUNCTION ){
414       assert( ExprUseXList(p) );
415       if( p->x.pList ){
416         int i;
417         for(i=0; i<p->x.pList->nExpr; i++){
418           sqlite3SetJoinExpr(p->x.pList->a[i].pExpr, iTable, joinFlag);
419         }
420       }
421     }
422     sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag);
423     p = p->pRight;
424   }
425 }
426 
427 /* Undo the work of sqlite3SetJoinExpr().  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 be an aggregate.
4072 **        (3d) the outer query may not be DISTINCT.
4073 **        See also (26) for restrictions on RIGHT JOIN.
4074 **
4075 **   (4)  The subquery can not be DISTINCT.
4076 **
4077 **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
4078 **        sub-queries that were excluded from this optimization. Restriction
4079 **        (4) has since been expanded to exclude all DISTINCT subqueries.
4080 **
4081 **  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
4082 **        If the subquery is aggregate, the outer query may not be DISTINCT.
4083 **
4084 **   (7)  The subquery must have a FROM clause.  TODO:  For subqueries without
4085 **        A FROM clause, consider adding a FROM clause with the special
4086 **        table sqlite_once that consists of a single row containing a
4087 **        single NULL.
4088 **
4089 **   (8)  If the subquery uses LIMIT then the outer query may not be a join.
4090 **
4091 **   (9)  If the subquery uses LIMIT then the outer query may not be aggregate.
4092 **
4093 **  (**)  Restriction (10) was removed from the code on 2005-02-05 but we
4094 **        accidently carried the comment forward until 2014-09-15.  Original
4095 **        constraint: "If the subquery is aggregate then the outer query
4096 **        may not use LIMIT."
4097 **
4098 **  (11)  The subquery and the outer query may not both have ORDER BY clauses.
4099 **
4100 **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
4101 **        a separate restriction deriving from ticket #350.
4102 **
4103 **  (13)  The subquery and outer query may not both use LIMIT.
4104 **
4105 **  (14)  The subquery may not use OFFSET.
4106 **
4107 **  (15)  If the outer query is part of a compound select, then the
4108 **        subquery may not use LIMIT.
4109 **        (See ticket #2339 and ticket [02a8e81d44]).
4110 **
4111 **  (16)  If the outer query is aggregate, then the subquery may not
4112 **        use ORDER BY.  (Ticket #2942)  This used to not matter
4113 **        until we introduced the group_concat() function.
4114 **
4115 **  (17)  If the subquery is a compound select, then
4116 **        (17a) all compound operators must be a UNION ALL, and
4117 **        (17b) no terms within the subquery compound may be aggregate
4118 **              or DISTINCT, and
4119 **        (17c) every term within the subquery compound must have a FROM clause
4120 **        (17d) the outer query may not be
4121 **              (17d1) aggregate, or
4122 **              (17d2) DISTINCT
4123 **        (17e) the subquery may not contain window functions, and
4124 **        (17f) the subquery must not be the RHS of a LEFT JOIN.
4125 **
4126 **        The parent and sub-query may contain WHERE clauses. Subject to
4127 **        rules (11), (13) and (14), they may also contain ORDER BY,
4128 **        LIMIT and OFFSET clauses.  The subquery cannot use any compound
4129 **        operator other than UNION ALL because all the other compound
4130 **        operators have an implied DISTINCT which is disallowed by
4131 **        restriction (4).
4132 **
4133 **        Also, each component of the sub-query must return the same number
4134 **        of result columns. This is actually a requirement for any compound
4135 **        SELECT statement, but all the code here does is make sure that no
4136 **        such (illegal) sub-query is flattened. The caller will detect the
4137 **        syntax error and return a detailed message.
4138 **
4139 **  (18)  If the sub-query is a compound select, then all terms of the
4140 **        ORDER BY clause of the parent must be copies of a term returned
4141 **        by the parent query.
4142 **
4143 **  (19)  If the subquery uses LIMIT then the outer query may not
4144 **        have a WHERE clause.
4145 **
4146 **  (20)  If the sub-query is a compound select, then it must not use
4147 **        an ORDER BY clause.  Ticket #3773.  We could relax this constraint
4148 **        somewhat by saying that the terms of the ORDER BY clause must
4149 **        appear as unmodified result columns in the outer query.  But we
4150 **        have other optimizations in mind to deal with that case.
4151 **
4152 **  (21)  If the subquery uses LIMIT then the outer query may not be
4153 **        DISTINCT.  (See ticket [752e1646fc]).
4154 **
4155 **  (22)  The subquery may not be a recursive CTE.
4156 **
4157 **  (23)  If the outer query is a recursive CTE, then the sub-query may not be
4158 **        a compound query.  This restriction is because transforming the
4159 **        parent to a compound query confuses the code that handles
4160 **        recursive queries in multiSelect().
4161 **
4162 **  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
4163 **        The subquery may not be an aggregate that uses the built-in min() or
4164 **        or max() functions.  (Without this restriction, a query like:
4165 **        "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily
4166 **        return the value X for which Y was maximal.)
4167 **
4168 **  (25)  If either the subquery or the parent query contains a window
4169 **        function in the select list or ORDER BY clause, flattening
4170 **        is not attempted.
4171 **
4172 **  (26)  The subquery may not be the right operand of a RIGHT JOIN.
4173 **        See also (3) for restrictions on LEFT JOIN.
4174 **
4175 **  (27)  The subquery may not contain a FULL or RIGHT JOIN unless it
4176 **        is the first element of the parent query.
4177 **
4178 **  (28)  The subquery is not a MATERIALIZED CTE.
4179 **
4180 **  (29)  Either the subquery is not the right-hand operand of a join with an
4181 **        ON or USING clause nor the right-hand operand of a NATURAL JOIN, or
4182 **        the right-most table within the FROM clause of the subquery
4183 **        is not part of an outer join.
4184 **
4185 **
4186 ** In this routine, the "p" parameter is a pointer to the outer query.
4187 ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
4188 ** uses aggregates.
4189 **
4190 ** If flattening is not attempted, this routine is a no-op and returns 0.
4191 ** If flattening is attempted this routine returns 1.
4192 **
4193 ** All of the expression analysis must occur on both the outer query and
4194 ** the subquery before this routine runs.
4195 */
4196 static int flattenSubquery(
4197   Parse *pParse,       /* Parsing context */
4198   Select *p,           /* The parent or outer SELECT statement */
4199   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
4200   int isAgg            /* True if outer SELECT uses aggregate functions */
4201 ){
4202   const char *zSavedAuthContext = pParse->zAuthContext;
4203   Select *pParent;    /* Current UNION ALL term of the other query */
4204   Select *pSub;       /* The inner query or "subquery" */
4205   Select *pSub1;      /* Pointer to the rightmost select in sub-query */
4206   SrcList *pSrc;      /* The FROM clause of the outer query */
4207   SrcList *pSubSrc;   /* The FROM clause of the subquery */
4208   int iParent;        /* VDBE cursor number of the pSub result set temp table */
4209   int iNewParent = -1;/* Replacement table for iParent */
4210   int isOuterJoin = 0; /* True if pSub is the right side of a LEFT JOIN */
4211   int i;              /* Loop counter */
4212   Expr *pWhere;                    /* The WHERE clause */
4213   SrcItem *pSubitem;               /* The subquery */
4214   sqlite3 *db = pParse->db;
4215   Walker w;                        /* Walker to persist agginfo data */
4216   int *aCsrMap = 0;
4217 
4218   /* Check to see if flattening is permitted.  Return 0 if not.
4219   */
4220   assert( p!=0 );
4221   assert( p->pPrior==0 );
4222   if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0;
4223   pSrc = p->pSrc;
4224   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
4225   pSubitem = &pSrc->a[iFrom];
4226   iParent = pSubitem->iCursor;
4227   pSub = pSubitem->pSelect;
4228   assert( pSub!=0 );
4229 
4230 #ifndef SQLITE_OMIT_WINDOWFUNC
4231   if( p->pWin || pSub->pWin ) return 0;                  /* Restriction (25) */
4232 #endif
4233 
4234   pSubSrc = pSub->pSrc;
4235   assert( pSubSrc );
4236   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
4237   ** not arbitrary expressions, we allowed some combining of LIMIT and OFFSET
4238   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
4239   ** became arbitrary expressions, we were forced to add restrictions (13)
4240   ** and (14). */
4241   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
4242   if( pSub->pLimit && pSub->pLimit->pRight ) return 0;   /* Restriction (14) */
4243   if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){
4244     return 0;                                            /* Restriction (15) */
4245   }
4246   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
4247   if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (4)  */
4248   if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
4249      return 0;         /* Restrictions (8)(9) */
4250   }
4251   if( p->pOrderBy && pSub->pOrderBy ){
4252      return 0;                                           /* Restriction (11) */
4253   }
4254   if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
4255   if( pSub->pLimit && p->pWhere ) return 0;              /* Restriction (19) */
4256   if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
4257      return 0;         /* Restriction (21) */
4258   }
4259   if( pSub->selFlags & (SF_Recursive) ){
4260     return 0; /* Restrictions (22) */
4261   }
4262 
4263   /*
4264   ** If the subquery is the right operand of a LEFT JOIN, then the
4265   ** subquery may not be a join itself (3a). Example of why this is not
4266   ** allowed:
4267   **
4268   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
4269   **
4270   ** If we flatten the above, we would get
4271   **
4272   **         (t1 LEFT OUTER JOIN t2) JOIN t3
4273   **
4274   ** which is not at all the same thing.
4275   **
4276   ** If the subquery is the right operand of a LEFT JOIN, then the outer
4277   ** query cannot be an aggregate. (3c)  This is an artifact of the way
4278   ** aggregates are processed - there is no mechanism to determine if
4279   ** the LEFT JOIN table should be all-NULL.
4280   **
4281   ** See also tickets #306, #350, and #3300.
4282   */
4283   if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){
4284     if( pSubSrc->nSrc>1                        /* (3a) */
4285      || isAgg                                  /* (3b) */
4286      || IsVirtual(pSubSrc->a[0].pTab)          /* (3c) */
4287      || (p->selFlags & SF_Distinct)!=0         /* (3d) */
4288      || (pSubitem->fg.jointype & JT_RIGHT)!=0  /* (26) */
4289     ){
4290       return 0;
4291     }
4292     isOuterJoin = 1;
4293   }
4294 #ifdef SQLITE_EXTRA_IFNULLROW
4295   else if( iFrom>0 && !isAgg ){
4296     /* Setting isOuterJoin to -1 causes OP_IfNullRow opcodes to be generated for
4297     ** every reference to any result column from subquery in a join, even
4298     ** though they are not necessary.  This will stress-test the OP_IfNullRow
4299     ** opcode. */
4300     isOuterJoin = -1;
4301   }
4302 #endif
4303 
4304   assert( pSubSrc->nSrc>0 );  /* True by restriction (7) */
4305   if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
4306     return 0;   /* Restriction (27) */
4307   }
4308   if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){
4309     return 0;       /* (28) */
4310   }
4311 
4312   /* Restriction (29):
4313   **
4314   ** We do not want two constraints on the same term of the flattened
4315   ** query where one constraint has EP_InnerON and the other is EP_OuterON.
4316   ** To prevent this, one or the other of the following conditions must be
4317   ** false:
4318   **
4319   **   (29a)  The right-most entry in the FROM clause of the subquery
4320   **          must not be part of an outer join.
4321   **
4322   **   (29b)  The subquery itself must not be the right operand of a
4323   **          NATURAL join or a join that as an ON or USING clause.
4324   **
4325   ** These conditions are sufficient to keep an EP_OuterON from being
4326   ** flattened into an EP_InnerON.  Restrictions (3a) and (27) prevent
4327   ** an EP_InnerON from being flattened into an EP_OuterON.
4328   */
4329   if( pSubSrc->nSrc>=2
4330    && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0
4331   ){
4332     if( (pSubitem->fg.jointype & JT_NATURAL)!=0
4333      || pSubitem->fg.isUsing
4334      || NEVER(pSubitem->u3.pOn!=0) /* ON clause already shifted into WHERE */
4335      || pSubitem->fg.isOn
4336     ){
4337       return 0;
4338     }
4339   }
4340 
4341   /* Restriction (17): If the sub-query is a compound SELECT, then it must
4342   ** use only the UNION ALL operator. And none of the simple select queries
4343   ** that make up the compound SELECT are allowed to be aggregate or distinct
4344   ** queries.
4345   */
4346   if( pSub->pPrior ){
4347     if( pSub->pOrderBy ){
4348       return 0;  /* Restriction (20) */
4349     }
4350     if( isAgg || (p->selFlags & SF_Distinct)!=0 || isOuterJoin>0 ){
4351       return 0; /* (17d1), (17d2), or (17f) */
4352     }
4353     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
4354       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
4355       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
4356       assert( pSub->pSrc!=0 );
4357       assert( (pSub->selFlags & SF_Recursive)==0 );
4358       assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
4359       if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0    /* (17b) */
4360        || (pSub1->pPrior && pSub1->op!=TK_ALL)                 /* (17a) */
4361        || pSub1->pSrc->nSrc<1                                  /* (17c) */
4362 #ifndef SQLITE_OMIT_WINDOWFUNC
4363        || pSub1->pWin                                          /* (17e) */
4364 #endif
4365       ){
4366         return 0;
4367       }
4368       testcase( pSub1->pSrc->nSrc>1 );
4369     }
4370 
4371     /* Restriction (18). */
4372     if( p->pOrderBy ){
4373       int ii;
4374       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
4375         if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0;
4376       }
4377     }
4378 
4379     /* Restriction (23) */
4380     if( (p->selFlags & SF_Recursive) ) return 0;
4381 
4382     if( pSrc->nSrc>1 ){
4383       if( pParse->nSelect>500 ) return 0;
4384       if( OptimizationDisabled(db, SQLITE_FlttnUnionAll) ) return 0;
4385       aCsrMap = sqlite3DbMallocZero(db, ((i64)pParse->nTab+1)*sizeof(int));
4386       if( aCsrMap ) aCsrMap[0] = pParse->nTab;
4387     }
4388   }
4389 
4390   /***** If we reach this point, flattening is permitted. *****/
4391   SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n",
4392                    pSub->selId, pSub, iFrom));
4393 
4394   /* Authorize the subquery */
4395   pParse->zAuthContext = pSubitem->zName;
4396   TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
4397   testcase( i==SQLITE_DENY );
4398   pParse->zAuthContext = zSavedAuthContext;
4399 
4400   /* Delete the transient structures associated with thesubquery */
4401   pSub1 = pSubitem->pSelect;
4402   sqlite3DbFree(db, pSubitem->zDatabase);
4403   sqlite3DbFree(db, pSubitem->zName);
4404   sqlite3DbFree(db, pSubitem->zAlias);
4405   pSubitem->zDatabase = 0;
4406   pSubitem->zName = 0;
4407   pSubitem->zAlias = 0;
4408   pSubitem->pSelect = 0;
4409   assert( pSubitem->fg.isUsing!=0 || pSubitem->u3.pOn==0 );
4410 
4411   /* If the sub-query is a compound SELECT statement, then (by restrictions
4412   ** 17 and 18 above) it must be a UNION ALL and the parent query must
4413   ** be of the form:
4414   **
4415   **     SELECT <expr-list> FROM (<sub-query>) <where-clause>
4416   **
4417   ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
4418   ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or
4419   ** OFFSET clauses and joins them to the left-hand-side of the original
4420   ** using UNION ALL operators. In this case N is the number of simple
4421   ** select statements in the compound sub-query.
4422   **
4423   ** Example:
4424   **
4425   **     SELECT a+1 FROM (
4426   **        SELECT x FROM tab
4427   **        UNION ALL
4428   **        SELECT y FROM tab
4429   **        UNION ALL
4430   **        SELECT abs(z*2) FROM tab2
4431   **     ) WHERE a!=5 ORDER BY 1
4432   **
4433   ** Transformed into:
4434   **
4435   **     SELECT x+1 FROM tab WHERE x+1!=5
4436   **     UNION ALL
4437   **     SELECT y+1 FROM tab WHERE y+1!=5
4438   **     UNION ALL
4439   **     SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
4440   **     ORDER BY 1
4441   **
4442   ** We call this the "compound-subquery flattening".
4443   */
4444   for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
4445     Select *pNew;
4446     ExprList *pOrderBy = p->pOrderBy;
4447     Expr *pLimit = p->pLimit;
4448     Select *pPrior = p->pPrior;
4449     Table *pItemTab = pSubitem->pTab;
4450     pSubitem->pTab = 0;
4451     p->pOrderBy = 0;
4452     p->pPrior = 0;
4453     p->pLimit = 0;
4454     pNew = sqlite3SelectDup(db, p, 0);
4455     p->pLimit = pLimit;
4456     p->pOrderBy = pOrderBy;
4457     p->op = TK_ALL;
4458     pSubitem->pTab = pItemTab;
4459     if( pNew==0 ){
4460       p->pPrior = pPrior;
4461     }else{
4462       pNew->selId = ++pParse->nSelect;
4463       if( aCsrMap && ALWAYS(db->mallocFailed==0) ){
4464         renumberCursors(pParse, pNew, iFrom, aCsrMap);
4465       }
4466       pNew->pPrior = pPrior;
4467       if( pPrior ) pPrior->pNext = pNew;
4468       pNew->pNext = p;
4469       p->pPrior = pNew;
4470       SELECTTRACE(2,pParse,p,("compound-subquery flattener"
4471                               " creates %u as peer\n",pNew->selId));
4472     }
4473     assert( pSubitem->pSelect==0 );
4474   }
4475   sqlite3DbFree(db, aCsrMap);
4476   if( db->mallocFailed ){
4477     pSubitem->pSelect = pSub1;
4478     return 1;
4479   }
4480 
4481   /* Defer deleting the Table object associated with the
4482   ** subquery until code generation is
4483   ** complete, since there may still exist Expr.pTab entries that
4484   ** refer to the subquery even after flattening.  Ticket #3346.
4485   **
4486   ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
4487   */
4488   if( ALWAYS(pSubitem->pTab!=0) ){
4489     Table *pTabToDel = pSubitem->pTab;
4490     if( pTabToDel->nTabRef==1 ){
4491       Parse *pToplevel = sqlite3ParseToplevel(pParse);
4492       sqlite3ParserAddCleanup(pToplevel,
4493          (void(*)(sqlite3*,void*))sqlite3DeleteTable,
4494          pTabToDel);
4495       testcase( pToplevel->earlyCleanup );
4496     }else{
4497       pTabToDel->nTabRef--;
4498     }
4499     pSubitem->pTab = 0;
4500   }
4501 
4502   /* The following loop runs once for each term in a compound-subquery
4503   ** flattening (as described above).  If we are doing a different kind
4504   ** of flattening - a flattening other than a compound-subquery flattening -
4505   ** then this loop only runs once.
4506   **
4507   ** This loop moves all of the FROM elements of the subquery into the
4508   ** the FROM clause of the outer query.  Before doing this, remember
4509   ** the cursor number for the original outer query FROM element in
4510   ** iParent.  The iParent cursor will never be used.  Subsequent code
4511   ** will scan expressions looking for iParent references and replace
4512   ** those references with expressions that resolve to the subquery FROM
4513   ** elements we are now copying in.
4514   */
4515   pSub = pSub1;
4516   for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
4517     int nSubSrc;
4518     u8 jointype = 0;
4519     u8 ltorj = pSrc->a[iFrom].fg.jointype & JT_LTORJ;
4520     assert( pSub!=0 );
4521     pSubSrc = pSub->pSrc;     /* FROM clause of subquery */
4522     nSubSrc = pSubSrc->nSrc;  /* Number of terms in subquery FROM clause */
4523     pSrc = pParent->pSrc;     /* FROM clause of the outer query */
4524 
4525     if( pParent==p ){
4526       jointype = pSubitem->fg.jointype;     /* First time through the loop */
4527     }
4528 
4529     /* The subquery uses a single slot of the FROM clause of the outer
4530     ** query.  If the subquery has more than one element in its FROM clause,
4531     ** then expand the outer query to make space for it to hold all elements
4532     ** of the subquery.
4533     **
4534     ** Example:
4535     **
4536     **    SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
4537     **
4538     ** The outer query has 3 slots in its FROM clause.  One slot of the
4539     ** outer query (the middle slot) is used by the subquery.  The next
4540     ** block of code will expand the outer query FROM clause to 4 slots.
4541     ** The middle slot is expanded to two slots in order to make space
4542     ** for the two elements in the FROM clause of the subquery.
4543     */
4544     if( nSubSrc>1 ){
4545       pSrc = sqlite3SrcListEnlarge(pParse, pSrc, nSubSrc-1,iFrom+1);
4546       if( pSrc==0 ) break;
4547       pParent->pSrc = pSrc;
4548     }
4549 
4550     /* Transfer the FROM clause terms from the subquery into the
4551     ** outer query.
4552     */
4553     for(i=0; i<nSubSrc; i++){
4554       SrcItem *pItem = &pSrc->a[i+iFrom];
4555       if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing);
4556       assert( pItem->fg.isTabFunc==0 );
4557       *pItem = pSubSrc->a[i];
4558       pItem->fg.jointype |= ltorj;
4559       iNewParent = pSubSrc->a[i].iCursor;
4560       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
4561     }
4562     pSrc->a[iFrom].fg.jointype &= JT_LTORJ;
4563     pSrc->a[iFrom].fg.jointype |= jointype | ltorj;
4564 
4565     /* Now begin substituting subquery result set expressions for
4566     ** references to the iParent in the outer query.
4567     **
4568     ** Example:
4569     **
4570     **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
4571     **   \                     \_____________ subquery __________/          /
4572     **    \_____________________ outer query ______________________________/
4573     **
4574     ** We look at every expression in the outer query and every place we see
4575     ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
4576     */
4577     if( pSub->pOrderBy && (pParent->selFlags & SF_NoopOrderBy)==0 ){
4578       /* At this point, any non-zero iOrderByCol values indicate that the
4579       ** ORDER BY column expression is identical to the iOrderByCol'th
4580       ** expression returned by SELECT statement pSub. Since these values
4581       ** do not necessarily correspond to columns in SELECT statement pParent,
4582       ** zero them before transfering the ORDER BY clause.
4583       **
4584       ** Not doing this may cause an error if a subsequent call to this
4585       ** function attempts to flatten a compound sub-query into pParent
4586       ** (the only way this can happen is if the compound sub-query is
4587       ** currently part of pSub->pSrc). See ticket [d11a6e908f].  */
4588       ExprList *pOrderBy = pSub->pOrderBy;
4589       for(i=0; i<pOrderBy->nExpr; i++){
4590         pOrderBy->a[i].u.x.iOrderByCol = 0;
4591       }
4592       assert( pParent->pOrderBy==0 );
4593       pParent->pOrderBy = pOrderBy;
4594       pSub->pOrderBy = 0;
4595     }
4596     pWhere = pSub->pWhere;
4597     pSub->pWhere = 0;
4598     if( isOuterJoin>0 ){
4599       sqlite3SetJoinExpr(pWhere, iNewParent, EP_OuterON);
4600     }
4601     if( pWhere ){
4602       if( pParent->pWhere ){
4603         pParent->pWhere = sqlite3PExpr(pParse, TK_AND, pWhere, pParent->pWhere);
4604       }else{
4605         pParent->pWhere = pWhere;
4606       }
4607     }
4608     if( db->mallocFailed==0 ){
4609       SubstContext x;
4610       x.pParse = pParse;
4611       x.iTable = iParent;
4612       x.iNewTable = iNewParent;
4613       x.isOuterJoin = isOuterJoin;
4614       x.pEList = pSub->pEList;
4615       substSelect(&x, pParent, 0);
4616     }
4617 
4618     /* The flattened query is a compound if either the inner or the
4619     ** outer query is a compound. */
4620     pParent->selFlags |= pSub->selFlags & SF_Compound;
4621     assert( (pSub->selFlags & SF_Distinct)==0 ); /* restriction (17b) */
4622 
4623     /*
4624     ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
4625     **
4626     ** One is tempted to try to add a and b to combine the limits.  But this
4627     ** does not work if either limit is negative.
4628     */
4629     if( pSub->pLimit ){
4630       pParent->pLimit = pSub->pLimit;
4631       pSub->pLimit = 0;
4632     }
4633 
4634     /* Recompute the SrcList_item.colUsed masks for the flattened
4635     ** tables. */
4636     for(i=0; i<nSubSrc; i++){
4637       recomputeColumnsUsed(pParent, &pSrc->a[i+iFrom]);
4638     }
4639   }
4640 
4641   /* Finially, delete what is left of the subquery and return
4642   ** success.
4643   */
4644   sqlite3AggInfoPersistWalkerInit(&w, pParse);
4645   sqlite3WalkSelect(&w,pSub1);
4646   sqlite3SelectDelete(db, pSub1);
4647 
4648 #if TREETRACE_ENABLED
4649   if( sqlite3TreeTrace & 0x100 ){
4650     SELECTTRACE(0x100,pParse,p,("After flattening:\n"));
4651     sqlite3TreeViewSelect(0, p, 0);
4652   }
4653 #endif
4654 
4655   return 1;
4656 }
4657 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
4658 
4659 /*
4660 ** A structure to keep track of all of the column values that are fixed to
4661 ** a known value due to WHERE clause constraints of the form COLUMN=VALUE.
4662 */
4663 typedef struct WhereConst WhereConst;
4664 struct WhereConst {
4665   Parse *pParse;   /* Parsing context */
4666   u8 *pOomFault;   /* Pointer to pParse->db->mallocFailed */
4667   int nConst;      /* Number for COLUMN=CONSTANT terms */
4668   int nChng;       /* Number of times a constant is propagated */
4669   int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */
4670   u32 mExcludeOn;  /* Which ON expressions to exclude from considertion.
4671                    ** Either EP_OuterON or EP_InnerON|EP_OuterON */
4672   Expr **apExpr;   /* [i*2] is COLUMN and [i*2+1] is VALUE */
4673 };
4674 
4675 /*
4676 ** Add a new entry to the pConst object.  Except, do not add duplicate
4677 ** pColumn entires.  Also, do not add if doing so would not be appropriate.
4678 **
4679 ** The caller guarantees the pColumn is a column and pValue is a constant.
4680 ** This routine has to do some additional checks before completing the
4681 ** insert.
4682 */
4683 static void constInsert(
4684   WhereConst *pConst,  /* The WhereConst into which we are inserting */
4685   Expr *pColumn,       /* The COLUMN part of the constraint */
4686   Expr *pValue,        /* The VALUE part of the constraint */
4687   Expr *pExpr          /* Overall expression: COLUMN=VALUE or VALUE=COLUMN */
4688 ){
4689   int i;
4690   assert( pColumn->op==TK_COLUMN );
4691   assert( sqlite3ExprIsConstant(pValue) );
4692 
4693   if( ExprHasProperty(pColumn, EP_FixedCol) ) return;
4694   if( sqlite3ExprAffinity(pValue)!=0 ) return;
4695   if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pConst->pParse,pExpr)) ){
4696     return;
4697   }
4698 
4699   /* 2018-10-25 ticket [cf5ed20f]
4700   ** Make sure the same pColumn is not inserted more than once */
4701   for(i=0; i<pConst->nConst; i++){
4702     const Expr *pE2 = pConst->apExpr[i*2];
4703     assert( pE2->op==TK_COLUMN );
4704     if( pE2->iTable==pColumn->iTable
4705      && pE2->iColumn==pColumn->iColumn
4706     ){
4707       return;  /* Already present.  Return without doing anything. */
4708     }
4709   }
4710   if( sqlite3ExprAffinity(pColumn)==SQLITE_AFF_BLOB ){
4711     pConst->bHasAffBlob = 1;
4712   }
4713 
4714   pConst->nConst++;
4715   pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr,
4716                          pConst->nConst*2*sizeof(Expr*));
4717   if( pConst->apExpr==0 ){
4718     pConst->nConst = 0;
4719   }else{
4720     pConst->apExpr[pConst->nConst*2-2] = pColumn;
4721     pConst->apExpr[pConst->nConst*2-1] = pValue;
4722   }
4723 }
4724 
4725 /*
4726 ** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE
4727 ** is a constant expression and where the term must be true because it
4728 ** is part of the AND-connected terms of the expression.  For each term
4729 ** found, add it to the pConst structure.
4730 */
4731 static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
4732   Expr *pRight, *pLeft;
4733   if( NEVER(pExpr==0) ) return;
4734   if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){
4735     testcase( ExprHasProperty(pExpr, EP_OuterON) );
4736     testcase( ExprHasProperty(pExpr, EP_InnerON) );
4737     return;
4738   }
4739   if( pExpr->op==TK_AND ){
4740     findConstInWhere(pConst, pExpr->pRight);
4741     findConstInWhere(pConst, pExpr->pLeft);
4742     return;
4743   }
4744   if( pExpr->op!=TK_EQ ) return;
4745   pRight = pExpr->pRight;
4746   pLeft = pExpr->pLeft;
4747   assert( pRight!=0 );
4748   assert( pLeft!=0 );
4749   if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pLeft) ){
4750     constInsert(pConst,pRight,pLeft,pExpr);
4751   }
4752   if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pRight) ){
4753     constInsert(pConst,pLeft,pRight,pExpr);
4754   }
4755 }
4756 
4757 /*
4758 ** This is a helper function for Walker callback propagateConstantExprRewrite().
4759 **
4760 ** Argument pExpr is a candidate expression to be replaced by a value. If
4761 ** pExpr is equivalent to one of the columns named in pWalker->u.pConst,
4762 ** then overwrite it with the corresponding value. Except, do not do so
4763 ** if argument bIgnoreAffBlob is non-zero and the affinity of pExpr
4764 ** is SQLITE_AFF_BLOB.
4765 */
4766 static int propagateConstantExprRewriteOne(
4767   WhereConst *pConst,
4768   Expr *pExpr,
4769   int bIgnoreAffBlob
4770 ){
4771   int i;
4772   if( pConst->pOomFault[0] ) return WRC_Prune;
4773   if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
4774   if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){
4775     testcase( ExprHasProperty(pExpr, EP_FixedCol) );
4776     testcase( ExprHasProperty(pExpr, EP_OuterON) );
4777     testcase( ExprHasProperty(pExpr, EP_InnerON) );
4778     return WRC_Continue;
4779   }
4780   for(i=0; i<pConst->nConst; i++){
4781     Expr *pColumn = pConst->apExpr[i*2];
4782     if( pColumn==pExpr ) continue;
4783     if( pColumn->iTable!=pExpr->iTable ) continue;
4784     if( pColumn->iColumn!=pExpr->iColumn ) continue;
4785     if( bIgnoreAffBlob && sqlite3ExprAffinity(pColumn)==SQLITE_AFF_BLOB ){
4786       break;
4787     }
4788     /* A match is found.  Add the EP_FixedCol property */
4789     pConst->nChng++;
4790     ExprClearProperty(pExpr, EP_Leaf);
4791     ExprSetProperty(pExpr, EP_FixedCol);
4792     assert( pExpr->pLeft==0 );
4793     pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0);
4794     if( pConst->pParse->db->mallocFailed ) return WRC_Prune;
4795     break;
4796   }
4797   return WRC_Prune;
4798 }
4799 
4800 /*
4801 ** This is a Walker expression callback. pExpr is a node from the WHERE
4802 ** clause of a SELECT statement. This function examines pExpr to see if
4803 ** any substitutions based on the contents of pWalker->u.pConst should
4804 ** be made to pExpr or its immediate children.
4805 **
4806 ** A substitution is made if:
4807 **
4808 **   + pExpr is a column with an affinity other than BLOB that matches
4809 **     one of the columns in pWalker->u.pConst, or
4810 **
4811 **   + pExpr is a binary comparison operator (=, <=, >=, <, >) that
4812 **     uses an affinity other than TEXT and one of its immediate
4813 **     children is a column that matches one of the columns in
4814 **     pWalker->u.pConst.
4815 */
4816 static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){
4817   WhereConst *pConst = pWalker->u.pConst;
4818   assert( TK_GT==TK_EQ+1 );
4819   assert( TK_LE==TK_EQ+2 );
4820   assert( TK_LT==TK_EQ+3 );
4821   assert( TK_GE==TK_EQ+4 );
4822   if( pConst->bHasAffBlob ){
4823     if( (pExpr->op>=TK_EQ && pExpr->op<=TK_GE)
4824      || pExpr->op==TK_IS
4825     ){
4826       propagateConstantExprRewriteOne(pConst, pExpr->pLeft, 0);
4827       if( pConst->pOomFault[0] ) return WRC_Prune;
4828       if( sqlite3ExprAffinity(pExpr->pLeft)!=SQLITE_AFF_TEXT ){
4829         propagateConstantExprRewriteOne(pConst, pExpr->pRight, 0);
4830       }
4831     }
4832   }
4833   return propagateConstantExprRewriteOne(pConst, pExpr, pConst->bHasAffBlob);
4834 }
4835 
4836 /*
4837 ** The WHERE-clause constant propagation optimization.
4838 **
4839 ** If the WHERE clause contains terms of the form COLUMN=CONSTANT or
4840 ** CONSTANT=COLUMN that are top-level AND-connected terms that are not
4841 ** part of a ON clause from a LEFT JOIN, then throughout the query
4842 ** replace all other occurrences of COLUMN with CONSTANT.
4843 **
4844 ** For example, the query:
4845 **
4846 **      SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=t1.a AND t3.c=t2.b
4847 **
4848 ** Is transformed into
4849 **
4850 **      SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=39 AND t3.c=39
4851 **
4852 ** Return true if any transformations where made and false if not.
4853 **
4854 ** Implementation note:  Constant propagation is tricky due to affinity
4855 ** and collating sequence interactions.  Consider this example:
4856 **
4857 **    CREATE TABLE t1(a INT,b TEXT);
4858 **    INSERT INTO t1 VALUES(123,'0123');
4859 **    SELECT * FROM t1 WHERE a=123 AND b=a;
4860 **    SELECT * FROM t1 WHERE a=123 AND b=123;
4861 **
4862 ** The two SELECT statements above should return different answers.  b=a
4863 ** is alway true because the comparison uses numeric affinity, but b=123
4864 ** is false because it uses text affinity and '0123' is not the same as '123'.
4865 ** To work around this, the expression tree is not actually changed from
4866 ** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol
4867 ** and the "123" value is hung off of the pLeft pointer.  Code generator
4868 ** routines know to generate the constant "123" instead of looking up the
4869 ** column value.  Also, to avoid collation problems, this optimization is
4870 ** only attempted if the "a=123" term uses the default BINARY collation.
4871 **
4872 ** 2021-05-25 forum post 6a06202608: Another troublesome case is...
4873 **
4874 **    CREATE TABLE t1(x);
4875 **    INSERT INTO t1 VALUES(10.0);
4876 **    SELECT 1 FROM t1 WHERE x=10 AND x LIKE 10;
4877 **
4878 ** The query should return no rows, because the t1.x value is '10.0' not '10'
4879 ** and '10.0' is not LIKE '10'.  But if we are not careful, the first WHERE
4880 ** term "x=10" will cause the second WHERE term to become "10 LIKE 10",
4881 ** resulting in a false positive.  To avoid this, constant propagation for
4882 ** columns with BLOB affinity is only allowed if the constant is used with
4883 ** operators ==, <=, <, >=, >, or IS in a way that will cause the correct
4884 ** type conversions to occur.  See logic associated with the bHasAffBlob flag
4885 ** for details.
4886 */
4887 static int propagateConstants(
4888   Parse *pParse,   /* The parsing context */
4889   Select *p        /* The query in which to propagate constants */
4890 ){
4891   WhereConst x;
4892   Walker w;
4893   int nChng = 0;
4894   x.pParse = pParse;
4895   x.pOomFault = &pParse->db->mallocFailed;
4896   do{
4897     x.nConst = 0;
4898     x.nChng = 0;
4899     x.apExpr = 0;
4900     x.bHasAffBlob = 0;
4901     if( ALWAYS(p->pSrc!=0)
4902      && p->pSrc->nSrc>0
4903      && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0
4904     ){
4905       /* Do not propagate constants on any ON clause if there is a
4906       ** RIGHT JOIN anywhere in the query */
4907       x.mExcludeOn = EP_InnerON | EP_OuterON;
4908     }else{
4909       /* Do not propagate constants through the ON clause of a LEFT JOIN */
4910       x.mExcludeOn = EP_OuterON;
4911     }
4912     findConstInWhere(&x, p->pWhere);
4913     if( x.nConst ){
4914       memset(&w, 0, sizeof(w));
4915       w.pParse = pParse;
4916       w.xExprCallback = propagateConstantExprRewrite;
4917       w.xSelectCallback = sqlite3SelectWalkNoop;
4918       w.xSelectCallback2 = 0;
4919       w.walkerDepth = 0;
4920       w.u.pConst = &x;
4921       sqlite3WalkExpr(&w, p->pWhere);
4922       sqlite3DbFree(x.pParse->db, x.apExpr);
4923       nChng += x.nChng;
4924     }
4925   }while( x.nChng );
4926   return nChng;
4927 }
4928 
4929 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
4930 # if !defined(SQLITE_OMIT_WINDOWFUNC)
4931 /*
4932 ** This function is called to determine whether or not it is safe to
4933 ** push WHERE clause expression pExpr down to FROM clause sub-query
4934 ** pSubq, which contains at least one window function. Return 1
4935 ** if it is safe and the expression should be pushed down, or 0
4936 ** otherwise.
4937 **
4938 ** It is only safe to push the expression down if it consists only
4939 ** of constants and copies of expressions that appear in the PARTITION
4940 ** BY clause of all window function used by the sub-query. It is safe
4941 ** to filter out entire partitions, but not rows within partitions, as
4942 ** this may change the results of the window functions.
4943 **
4944 ** At the time this function is called it is guaranteed that
4945 **
4946 **   * the sub-query uses only one distinct window frame, and
4947 **   * that the window frame has a PARTITION BY clase.
4948 */
4949 static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
4950   assert( pSubq->pWin->pPartition );
4951   assert( (pSubq->selFlags & SF_MultiPart)==0 );
4952   assert( pSubq->pPrior==0 );
4953   return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition);
4954 }
4955 # endif /* SQLITE_OMIT_WINDOWFUNC */
4956 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
4957 
4958 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
4959 /*
4960 ** Make copies of relevant WHERE clause terms of the outer query into
4961 ** the WHERE clause of subquery.  Example:
4962 **
4963 **    SELECT * FROM (SELECT a AS x, c-d AS y FROM t1) WHERE x=5 AND y=10;
4964 **
4965 ** Transformed into:
4966 **
4967 **    SELECT * FROM (SELECT a AS x, c-d AS y FROM t1 WHERE a=5 AND c-d=10)
4968 **     WHERE x=5 AND y=10;
4969 **
4970 ** The hope is that the terms added to the inner query will make it more
4971 ** efficient.
4972 **
4973 ** Do not attempt this optimization if:
4974 **
4975 **   (1) (** This restriction was removed on 2017-09-29.  We used to
4976 **           disallow this optimization for aggregate subqueries, but now
4977 **           it is allowed by putting the extra terms on the HAVING clause.
4978 **           The added HAVING clause is pointless if the subquery lacks
4979 **           a GROUP BY clause.  But such a HAVING clause is also harmless
4980 **           so there does not appear to be any reason to add extra logic
4981 **           to suppress it. **)
4982 **
4983 **   (2) The inner query is the recursive part of a common table expression.
4984 **
4985 **   (3) The inner query has a LIMIT clause (since the changes to the WHERE
4986 **       clause would change the meaning of the LIMIT).
4987 **
4988 **   (4) The inner query is the right operand of a LEFT JOIN and the
4989 **       expression to be pushed down does not come from the ON clause
4990 **       on that LEFT JOIN.
4991 **
4992 **   (5) The WHERE clause expression originates in the ON or USING clause
4993 **       of a LEFT JOIN where iCursor is not the right-hand table of that
4994 **       left join.  An example:
4995 **
4996 **           SELECT *
4997 **           FROM (SELECT 1 AS a1 UNION ALL SELECT 2) AS aa
4998 **           JOIN (SELECT 1 AS b2 UNION ALL SELECT 2) AS bb ON (a1=b2)
4999 **           LEFT JOIN (SELECT 8 AS c3 UNION ALL SELECT 9) AS cc ON (b2=2);
5000 **
5001 **       The correct answer is three rows:  (1,1,NULL),(2,2,8),(2,2,9).
5002 **       But if the (b2=2) term were to be pushed down into the bb subquery,
5003 **       then the (1,1,NULL) row would be suppressed.
5004 **
5005 **   (6) Window functions make things tricky as changes to the WHERE clause
5006 **       of the inner query could change the window over which window
5007 **       functions are calculated. Therefore, do not attempt the optimization
5008 **       if:
5009 **
5010 **     (6a) The inner query uses multiple incompatible window partitions.
5011 **
5012 **     (6b) The inner query is a compound and uses window-functions.
5013 **
5014 **     (6c) The WHERE clause does not consist entirely of constants and
5015 **          copies of expressions found in the PARTITION BY clause of
5016 **          all window-functions used by the sub-query. It is safe to
5017 **          filter out entire partitions, as this does not change the
5018 **          window over which any window-function is calculated.
5019 **
5020 **   (7) The inner query is a Common Table Expression (CTE) that should
5021 **       be materialized.  (This restriction is implemented in the calling
5022 **       routine.)
5023 **
5024 ** Return 0 if no changes are made and non-zero if one or more WHERE clause
5025 ** terms are duplicated into the subquery.
5026 */
5027 static int pushDownWhereTerms(
5028   Parse *pParse,        /* Parse context (for malloc() and error reporting) */
5029   Select *pSubq,        /* The subquery whose WHERE clause is to be augmented */
5030   Expr *pWhere,         /* The WHERE clause of the outer query */
5031   SrcItem *pSrc         /* The subquery term of the outer FROM clause */
5032 ){
5033   Expr *pNew;
5034   int nChng = 0;
5035   if( pWhere==0 ) return 0;
5036   if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0;
5037   if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0;
5038 
5039 #ifndef SQLITE_OMIT_WINDOWFUNC
5040   if( pSubq->pPrior ){
5041     Select *pSel;
5042     for(pSel=pSubq; pSel; pSel=pSel->pPrior){
5043       if( pSel->pWin ) return 0;    /* restriction (6b) */
5044     }
5045   }else{
5046     if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
5047   }
5048 #endif
5049 
5050 #ifdef SQLITE_DEBUG
5051   /* Only the first term of a compound can have a WITH clause.  But make
5052   ** sure no other terms are marked SF_Recursive in case something changes
5053   ** in the future.
5054   */
5055   {
5056     Select *pX;
5057     for(pX=pSubq; pX; pX=pX->pPrior){
5058       assert( (pX->selFlags & (SF_Recursive))==0 );
5059     }
5060   }
5061 #endif
5062 
5063   if( pSubq->pLimit!=0 ){
5064     return 0; /* restriction (3) */
5065   }
5066   while( pWhere->op==TK_AND ){
5067     nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrc);
5068     pWhere = pWhere->pLeft;
5069   }
5070 
5071 #if 0  /* Legacy code. Checks now done by sqlite3ExprIsTableConstraint() */
5072   if( isLeftJoin
5073    && (ExprHasProperty(pWhere,EP_OuterON)==0
5074          || pWhere->w.iJoin!=iCursor)
5075   ){
5076     return 0; /* restriction (4) */
5077   }
5078   if( ExprHasProperty(pWhere,EP_OuterON)
5079    && pWhere->w.iJoin!=iCursor
5080   ){
5081     return 0; /* restriction (5) */
5082   }
5083 #endif
5084 
5085   if( sqlite3ExprIsTableConstraint(pWhere, pSrc) ){
5086     nChng++;
5087     pSubq->selFlags |= SF_PushDown;
5088     while( pSubq ){
5089       SubstContext x;
5090       pNew = sqlite3ExprDup(pParse->db, pWhere, 0);
5091       unsetJoinExpr(pNew, -1, 1);
5092       x.pParse = pParse;
5093       x.iTable = pSrc->iCursor;
5094       x.iNewTable = pSrc->iCursor;
5095       x.isOuterJoin = 0;
5096       x.pEList = pSubq->pEList;
5097       pNew = substExpr(&x, pNew);
5098 #ifndef SQLITE_OMIT_WINDOWFUNC
5099       if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){
5100         /* Restriction 6c has prevented push-down in this case */
5101         sqlite3ExprDelete(pParse->db, pNew);
5102         nChng--;
5103         break;
5104       }
5105 #endif
5106       if( pSubq->selFlags & SF_Aggregate ){
5107         pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew);
5108       }else{
5109         pSubq->pWhere = sqlite3ExprAnd(pParse, pSubq->pWhere, pNew);
5110       }
5111       pSubq = pSubq->pPrior;
5112     }
5113   }
5114   return nChng;
5115 }
5116 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
5117 
5118 /*
5119 ** The pFunc is the only aggregate function in the query.  Check to see
5120 ** if the query is a candidate for the min/max optimization.
5121 **
5122 ** If the query is a candidate for the min/max optimization, then set
5123 ** *ppMinMax to be an ORDER BY clause to be used for the optimization
5124 ** and return either WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX depending on
5125 ** whether pFunc is a min() or max() function.
5126 **
5127 ** If the query is not a candidate for the min/max optimization, return
5128 ** WHERE_ORDERBY_NORMAL (which must be zero).
5129 **
5130 ** This routine must be called after aggregate functions have been
5131 ** located but before their arguments have been subjected to aggregate
5132 ** analysis.
5133 */
5134 static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){
5135   int eRet = WHERE_ORDERBY_NORMAL;      /* Return value */
5136   ExprList *pEList;                     /* Arguments to agg function */
5137   const char *zFunc;                    /* Name of aggregate function pFunc */
5138   ExprList *pOrderBy;
5139   u8 sortFlags = 0;
5140 
5141   assert( *ppMinMax==0 );
5142   assert( pFunc->op==TK_AGG_FUNCTION );
5143   assert( !IsWindowFunc(pFunc) );
5144   assert( ExprUseXList(pFunc) );
5145   pEList = pFunc->x.pList;
5146   if( pEList==0
5147    || pEList->nExpr!=1
5148    || ExprHasProperty(pFunc, EP_WinFunc)
5149    || OptimizationDisabled(db, SQLITE_MinMaxOpt)
5150   ){
5151     return eRet;
5152   }
5153   assert( !ExprHasProperty(pFunc, EP_IntValue) );
5154   zFunc = pFunc->u.zToken;
5155   if( sqlite3StrICmp(zFunc, "min")==0 ){
5156     eRet = WHERE_ORDERBY_MIN;
5157     if( sqlite3ExprCanBeNull(pEList->a[0].pExpr) ){
5158       sortFlags = KEYINFO_ORDER_BIGNULL;
5159     }
5160   }else if( sqlite3StrICmp(zFunc, "max")==0 ){
5161     eRet = WHERE_ORDERBY_MAX;
5162     sortFlags = KEYINFO_ORDER_DESC;
5163   }else{
5164     return eRet;
5165   }
5166   *ppMinMax = pOrderBy = sqlite3ExprListDup(db, pEList, 0);
5167   assert( pOrderBy!=0 || db->mallocFailed );
5168   if( pOrderBy ) pOrderBy->a[0].fg.sortFlags = sortFlags;
5169   return eRet;
5170 }
5171 
5172 /*
5173 ** The select statement passed as the first argument is an aggregate query.
5174 ** The second argument is the associated aggregate-info object. This
5175 ** function tests if the SELECT is of the form:
5176 **
5177 **   SELECT count(*) FROM <tbl>
5178 **
5179 ** where table is a database table, not a sub-select or view. If the query
5180 ** does match this pattern, then a pointer to the Table object representing
5181 ** <tbl> is returned. Otherwise, NULL is returned.
5182 **
5183 ** This routine checks to see if it is safe to use the count optimization.
5184 ** A correct answer is still obtained (though perhaps more slowly) if
5185 ** this routine returns NULL when it could have returned a table pointer.
5186 ** But returning the pointer when NULL should have been returned can
5187 ** result in incorrect answers and/or crashes.  So, when in doubt, return NULL.
5188 */
5189 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
5190   Table *pTab;
5191   Expr *pExpr;
5192 
5193   assert( !p->pGroupBy );
5194 
5195   if( p->pWhere
5196    || p->pEList->nExpr!=1
5197    || p->pSrc->nSrc!=1
5198    || p->pSrc->a[0].pSelect
5199    || pAggInfo->nFunc!=1
5200   ){
5201     return 0;
5202   }
5203   pTab = p->pSrc->a[0].pTab;
5204   assert( pTab!=0 );
5205   assert( !IsView(pTab) );
5206   if( !IsOrdinaryTable(pTab) ) return 0;
5207   pExpr = p->pEList->a[0].pExpr;
5208   assert( pExpr!=0 );
5209   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
5210   if( pExpr->pAggInfo!=pAggInfo ) return 0;
5211   if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0;
5212   assert( pAggInfo->aFunc[0].pFExpr==pExpr );
5213   testcase( ExprHasProperty(pExpr, EP_Distinct) );
5214   testcase( ExprHasProperty(pExpr, EP_WinFunc) );
5215   if( ExprHasProperty(pExpr, EP_Distinct|EP_WinFunc) ) return 0;
5216 
5217   return pTab;
5218 }
5219 
5220 /*
5221 ** If the source-list item passed as an argument was augmented with an
5222 ** INDEXED BY clause, then try to locate the specified index. If there
5223 ** was such a clause and the named index cannot be found, return
5224 ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate
5225 ** pFrom->pIndex and return SQLITE_OK.
5226 */
5227 int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){
5228   Table *pTab = pFrom->pTab;
5229   char *zIndexedBy = pFrom->u1.zIndexedBy;
5230   Index *pIdx;
5231   assert( pTab!=0 );
5232   assert( pFrom->fg.isIndexedBy!=0 );
5233 
5234   for(pIdx=pTab->pIndex;
5235       pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy);
5236       pIdx=pIdx->pNext
5237   );
5238   if( !pIdx ){
5239     sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0);
5240     pParse->checkSchema = 1;
5241     return SQLITE_ERROR;
5242   }
5243   assert( pFrom->fg.isCte==0 );
5244   pFrom->u2.pIBIndex = pIdx;
5245   return SQLITE_OK;
5246 }
5247 
5248 /*
5249 ** Detect compound SELECT statements that use an ORDER BY clause with
5250 ** an alternative collating sequence.
5251 **
5252 **    SELECT ... FROM t1 EXCEPT SELECT ... FROM t2 ORDER BY .. COLLATE ...
5253 **
5254 ** These are rewritten as a subquery:
5255 **
5256 **    SELECT * FROM (SELECT ... FROM t1 EXCEPT SELECT ... FROM t2)
5257 **     ORDER BY ... COLLATE ...
5258 **
5259 ** This transformation is necessary because the multiSelectOrderBy() routine
5260 ** above that generates the code for a compound SELECT with an ORDER BY clause
5261 ** uses a merge algorithm that requires the same collating sequence on the
5262 ** result columns as on the ORDER BY clause.  See ticket
5263 ** http://www.sqlite.org/src/info/6709574d2a
5264 **
5265 ** This transformation is only needed for EXCEPT, INTERSECT, and UNION.
5266 ** The UNION ALL operator works fine with multiSelectOrderBy() even when
5267 ** there are COLLATE terms in the ORDER BY.
5268 */
5269 static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){
5270   int i;
5271   Select *pNew;
5272   Select *pX;
5273   sqlite3 *db;
5274   struct ExprList_item *a;
5275   SrcList *pNewSrc;
5276   Parse *pParse;
5277   Token dummy;
5278 
5279   if( p->pPrior==0 ) return WRC_Continue;
5280   if( p->pOrderBy==0 ) return WRC_Continue;
5281   for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){}
5282   if( pX==0 ) return WRC_Continue;
5283   a = p->pOrderBy->a;
5284 #ifndef SQLITE_OMIT_WINDOWFUNC
5285   /* If iOrderByCol is already non-zero, then it has already been matched
5286   ** to a result column of the SELECT statement. This occurs when the
5287   ** SELECT is rewritten for window-functions processing and then passed
5288   ** to sqlite3SelectPrep() and similar a second time. The rewriting done
5289   ** by this function is not required in this case. */
5290   if( a[0].u.x.iOrderByCol ) return WRC_Continue;
5291 #endif
5292   for(i=p->pOrderBy->nExpr-1; i>=0; i--){
5293     if( a[i].pExpr->flags & EP_Collate ) break;
5294   }
5295   if( i<0 ) return WRC_Continue;
5296 
5297   /* If we reach this point, that means the transformation is required. */
5298 
5299   pParse = pWalker->pParse;
5300   db = pParse->db;
5301   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
5302   if( pNew==0 ) return WRC_Abort;
5303   memset(&dummy, 0, sizeof(dummy));
5304   pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0);
5305   if( pNewSrc==0 ) return WRC_Abort;
5306   *pNew = *p;
5307   p->pSrc = pNewSrc;
5308   p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0));
5309   p->op = TK_SELECT;
5310   p->pWhere = 0;
5311   pNew->pGroupBy = 0;
5312   pNew->pHaving = 0;
5313   pNew->pOrderBy = 0;
5314   p->pPrior = 0;
5315   p->pNext = 0;
5316   p->pWith = 0;
5317 #ifndef SQLITE_OMIT_WINDOWFUNC
5318   p->pWinDefn = 0;
5319 #endif
5320   p->selFlags &= ~SF_Compound;
5321   assert( (p->selFlags & SF_Converted)==0 );
5322   p->selFlags |= SF_Converted;
5323   assert( pNew->pPrior!=0 );
5324   pNew->pPrior->pNext = pNew;
5325   pNew->pLimit = 0;
5326   return WRC_Continue;
5327 }
5328 
5329 /*
5330 ** Check to see if the FROM clause term pFrom has table-valued function
5331 ** arguments.  If it does, leave an error message in pParse and return
5332 ** non-zero, since pFrom is not allowed to be a table-valued function.
5333 */
5334 static int cannotBeFunction(Parse *pParse, SrcItem *pFrom){
5335   if( pFrom->fg.isTabFunc ){
5336     sqlite3ErrorMsg(pParse, "'%s' is not a function", pFrom->zName);
5337     return 1;
5338   }
5339   return 0;
5340 }
5341 
5342 #ifndef SQLITE_OMIT_CTE
5343 /*
5344 ** Argument pWith (which may be NULL) points to a linked list of nested
5345 ** WITH contexts, from inner to outermost. If the table identified by
5346 ** FROM clause element pItem is really a common-table-expression (CTE)
5347 ** then return a pointer to the CTE definition for that table. Otherwise
5348 ** return NULL.
5349 **
5350 ** If a non-NULL value is returned, set *ppContext to point to the With
5351 ** object that the returned CTE belongs to.
5352 */
5353 static struct Cte *searchWith(
5354   With *pWith,                    /* Current innermost WITH clause */
5355   SrcItem *pItem,                 /* FROM clause element to resolve */
5356   With **ppContext                /* OUT: WITH clause return value belongs to */
5357 ){
5358   const char *zName = pItem->zName;
5359   With *p;
5360   assert( pItem->zDatabase==0 );
5361   assert( zName!=0 );
5362   for(p=pWith; p; p=p->pOuter){
5363     int i;
5364     for(i=0; i<p->nCte; i++){
5365       if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){
5366         *ppContext = p;
5367         return &p->a[i];
5368       }
5369     }
5370     if( p->bView ) break;
5371   }
5372   return 0;
5373 }
5374 
5375 /* The code generator maintains a stack of active WITH clauses
5376 ** with the inner-most WITH clause being at the top of the stack.
5377 **
5378 ** This routine pushes the WITH clause passed as the second argument
5379 ** onto the top of the stack. If argument bFree is true, then this
5380 ** WITH clause will never be popped from the stack but should instead
5381 ** be freed along with the Parse object. In other cases, when
5382 ** bFree==0, the With object will be freed along with the SELECT
5383 ** statement with which it is associated.
5384 **
5385 ** This routine returns a copy of pWith.  Or, if bFree is true and
5386 ** the pWith object is destroyed immediately due to an OOM condition,
5387 ** then this routine return NULL.
5388 **
5389 ** If bFree is true, do not continue to use the pWith pointer after
5390 ** calling this routine,  Instead, use only the return value.
5391 */
5392 With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){
5393   if( pWith ){
5394     if( bFree ){
5395       pWith = (With*)sqlite3ParserAddCleanup(pParse,
5396                       (void(*)(sqlite3*,void*))sqlite3WithDelete,
5397                       pWith);
5398       if( pWith==0 ) return 0;
5399     }
5400     if( pParse->nErr==0 ){
5401       assert( pParse->pWith!=pWith );
5402       pWith->pOuter = pParse->pWith;
5403       pParse->pWith = pWith;
5404     }
5405   }
5406   return pWith;
5407 }
5408 
5409 /*
5410 ** This function checks if argument pFrom refers to a CTE declared by
5411 ** a WITH clause on the stack currently maintained by the parser (on the
5412 ** pParse->pWith linked list).  And if currently processing a CTE
5413 ** CTE expression, through routine checks to see if the reference is
5414 ** a recursive reference to the CTE.
5415 **
5416 ** If pFrom matches a CTE according to either of these two above, pFrom->pTab
5417 ** and other fields are populated accordingly.
5418 **
5419 ** Return 0 if no match is found.
5420 ** Return 1 if a match is found.
5421 ** Return 2 if an error condition is detected.
5422 */
5423 static int resolveFromTermToCte(
5424   Parse *pParse,                  /* The parsing context */
5425   Walker *pWalker,                /* Current tree walker */
5426   SrcItem *pFrom                  /* The FROM clause term to check */
5427 ){
5428   Cte *pCte;               /* Matched CTE (or NULL if no match) */
5429   With *pWith;             /* The matching WITH */
5430 
5431   assert( pFrom->pTab==0 );
5432   if( pParse->pWith==0 ){
5433     /* There are no WITH clauses in the stack.  No match is possible */
5434     return 0;
5435   }
5436   if( pParse->nErr ){
5437     /* Prior errors might have left pParse->pWith in a goofy state, so
5438     ** go no further. */
5439     return 0;
5440   }
5441   if( pFrom->zDatabase!=0 ){
5442     /* The FROM term contains a schema qualifier (ex: main.t1) and so
5443     ** it cannot possibly be a CTE reference. */
5444     return 0;
5445   }
5446   if( pFrom->fg.notCte ){
5447     /* The FROM term is specifically excluded from matching a CTE.
5448     **   (1)  It is part of a trigger that used to have zDatabase but had
5449     **        zDatabase removed by sqlite3FixTriggerStep().
5450     **   (2)  This is the first term in the FROM clause of an UPDATE.
5451     */
5452     return 0;
5453   }
5454   pCte = searchWith(pParse->pWith, pFrom, &pWith);
5455   if( pCte ){
5456     sqlite3 *db = pParse->db;
5457     Table *pTab;
5458     ExprList *pEList;
5459     Select *pSel;
5460     Select *pLeft;                /* Left-most SELECT statement */
5461     Select *pRecTerm;             /* Left-most recursive term */
5462     int bMayRecursive;            /* True if compound joined by UNION [ALL] */
5463     With *pSavedWith;             /* Initial value of pParse->pWith */
5464     int iRecTab = -1;             /* Cursor for recursive table */
5465     CteUse *pCteUse;
5466 
5467     /* If pCte->zCteErr is non-NULL at this point, then this is an illegal
5468     ** recursive reference to CTE pCte. Leave an error in pParse and return
5469     ** early. If pCte->zCteErr is NULL, then this is not a recursive reference.
5470     ** In this case, proceed.  */
5471     if( pCte->zCteErr ){
5472       sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName);
5473       return 2;
5474     }
5475     if( cannotBeFunction(pParse, pFrom) ) return 2;
5476 
5477     assert( pFrom->pTab==0 );
5478     pTab = sqlite3DbMallocZero(db, sizeof(Table));
5479     if( pTab==0 ) return 2;
5480     pCteUse = pCte->pUse;
5481     if( pCteUse==0 ){
5482       pCte->pUse = pCteUse = sqlite3DbMallocZero(db, sizeof(pCteUse[0]));
5483       if( pCteUse==0
5484        || sqlite3ParserAddCleanup(pParse,sqlite3DbFree,pCteUse)==0
5485       ){
5486         sqlite3DbFree(db, pTab);
5487         return 2;
5488       }
5489       pCteUse->eM10d = pCte->eM10d;
5490     }
5491     pFrom->pTab = pTab;
5492     pTab->nTabRef = 1;
5493     pTab->zName = sqlite3DbStrDup(db, pCte->zName);
5494     pTab->iPKey = -1;
5495     pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
5496     pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
5497     pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
5498     if( db->mallocFailed ) return 2;
5499     pFrom->pSelect->selFlags |= SF_CopyCte;
5500     assert( pFrom->pSelect );
5501     if( pFrom->fg.isIndexedBy ){
5502       sqlite3ErrorMsg(pParse, "no such index: \"%s\"", pFrom->u1.zIndexedBy);
5503       return 2;
5504     }
5505     pFrom->fg.isCte = 1;
5506     pFrom->u2.pCteUse = pCteUse;
5507     pCteUse->nUse++;
5508     if( pCteUse->nUse>=2 && pCteUse->eM10d==M10d_Any ){
5509       pCteUse->eM10d = M10d_Yes;
5510     }
5511 
5512     /* Check if this is a recursive CTE. */
5513     pRecTerm = pSel = pFrom->pSelect;
5514     bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION );
5515     while( bMayRecursive && pRecTerm->op==pSel->op ){
5516       int i;
5517       SrcList *pSrc = pRecTerm->pSrc;
5518       assert( pRecTerm->pPrior!=0 );
5519       for(i=0; i<pSrc->nSrc; i++){
5520         SrcItem *pItem = &pSrc->a[i];
5521         if( pItem->zDatabase==0
5522          && pItem->zName!=0
5523          && 0==sqlite3StrICmp(pItem->zName, pCte->zName)
5524         ){
5525           pItem->pTab = pTab;
5526           pTab->nTabRef++;
5527           pItem->fg.isRecursive = 1;
5528           if( pRecTerm->selFlags & SF_Recursive ){
5529             sqlite3ErrorMsg(pParse,
5530                "multiple references to recursive table: %s", pCte->zName
5531             );
5532             return 2;
5533           }
5534           pRecTerm->selFlags |= SF_Recursive;
5535           if( iRecTab<0 ) iRecTab = pParse->nTab++;
5536           pItem->iCursor = iRecTab;
5537         }
5538       }
5539       if( (pRecTerm->selFlags & SF_Recursive)==0 ) break;
5540       pRecTerm = pRecTerm->pPrior;
5541     }
5542 
5543     pCte->zCteErr = "circular reference: %s";
5544     pSavedWith = pParse->pWith;
5545     pParse->pWith = pWith;
5546     if( pSel->selFlags & SF_Recursive ){
5547       int rc;
5548       assert( pRecTerm!=0 );
5549       assert( (pRecTerm->selFlags & SF_Recursive)==0 );
5550       assert( pRecTerm->pNext!=0 );
5551       assert( (pRecTerm->pNext->selFlags & SF_Recursive)!=0 );
5552       assert( pRecTerm->pWith==0 );
5553       pRecTerm->pWith = pSel->pWith;
5554       rc = sqlite3WalkSelect(pWalker, pRecTerm);
5555       pRecTerm->pWith = 0;
5556       if( rc ){
5557         pParse->pWith = pSavedWith;
5558         return 2;
5559       }
5560     }else{
5561       if( sqlite3WalkSelect(pWalker, pSel) ){
5562         pParse->pWith = pSavedWith;
5563         return 2;
5564       }
5565     }
5566     pParse->pWith = pWith;
5567 
5568     for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior);
5569     pEList = pLeft->pEList;
5570     if( pCte->pCols ){
5571       if( pEList && pEList->nExpr!=pCte->pCols->nExpr ){
5572         sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns",
5573             pCte->zName, pEList->nExpr, pCte->pCols->nExpr
5574         );
5575         pParse->pWith = pSavedWith;
5576         return 2;
5577       }
5578       pEList = pCte->pCols;
5579     }
5580 
5581     sqlite3ColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol);
5582     if( bMayRecursive ){
5583       if( pSel->selFlags & SF_Recursive ){
5584         pCte->zCteErr = "multiple recursive references: %s";
5585       }else{
5586         pCte->zCteErr = "recursive reference in a subquery: %s";
5587       }
5588       sqlite3WalkSelect(pWalker, pSel);
5589     }
5590     pCte->zCteErr = 0;
5591     pParse->pWith = pSavedWith;
5592     return 1;  /* Success */
5593   }
5594   return 0;  /* No match */
5595 }
5596 #endif
5597 
5598 #ifndef SQLITE_OMIT_CTE
5599 /*
5600 ** If the SELECT passed as the second argument has an associated WITH
5601 ** clause, pop it from the stack stored as part of the Parse object.
5602 **
5603 ** This function is used as the xSelectCallback2() callback by
5604 ** sqlite3SelectExpand() when walking a SELECT tree to resolve table
5605 ** names and other FROM clause elements.
5606 */
5607 void sqlite3SelectPopWith(Walker *pWalker, Select *p){
5608   Parse *pParse = pWalker->pParse;
5609   if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){
5610     With *pWith = findRightmost(p)->pWith;
5611     if( pWith!=0 ){
5612       assert( pParse->pWith==pWith || pParse->nErr );
5613       pParse->pWith = pWith->pOuter;
5614     }
5615   }
5616 }
5617 #endif
5618 
5619 /*
5620 ** The SrcList_item structure passed as the second argument represents a
5621 ** sub-query in the FROM clause of a SELECT statement. This function
5622 ** allocates and populates the SrcList_item.pTab object. If successful,
5623 ** SQLITE_OK is returned. Otherwise, if an OOM error is encountered,
5624 ** SQLITE_NOMEM.
5625 */
5626 int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){
5627   Select *pSel = pFrom->pSelect;
5628   Table *pTab;
5629 
5630   assert( pSel );
5631   pFrom->pTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table));
5632   if( pTab==0 ) return SQLITE_NOMEM;
5633   pTab->nTabRef = 1;
5634   if( pFrom->zAlias ){
5635     pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias);
5636   }else{
5637     pTab->zName = sqlite3MPrintf(pParse->db, "%!S", pFrom);
5638   }
5639   while( pSel->pPrior ){ pSel = pSel->pPrior; }
5640   sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol);
5641   pTab->iPKey = -1;
5642   pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
5643 #ifndef SQLITE_ALLOW_ROWID_IN_VIEW
5644   /* The usual case - do not allow ROWID on a subquery */
5645   pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
5646 #else
5647   pTab->tabFlags |= TF_Ephemeral;  /* Legacy compatibility mode */
5648 #endif
5649   return pParse->nErr ? SQLITE_ERROR : SQLITE_OK;
5650 }
5651 
5652 
5653 /*
5654 ** Check the N SrcItem objects to the right of pBase.  (N might be zero!)
5655 ** If any of those SrcItem objects have a USING clause containing zName
5656 ** then return true.
5657 **
5658 ** If N is zero, or none of the N SrcItem objects to the right of pBase
5659 ** contains a USING clause, or if none of the USING clauses contain zName,
5660 ** then return false.
5661 */
5662 static int inAnyUsingClause(
5663   const char *zName, /* Name we are looking for */
5664   SrcItem *pBase,    /* The base SrcItem.  Looking at pBase[1] and following */
5665   int N              /* How many SrcItems to check */
5666 ){
5667   while( N>0 ){
5668     N--;
5669     pBase++;
5670     if( pBase->fg.isUsing==0 ) continue;
5671     if( NEVER(pBase->u3.pUsing==0) ) continue;
5672     if( sqlite3IdListIndex(pBase->u3.pUsing, zName)>=0 ) return 1;
5673   }
5674   return 0;
5675 }
5676 
5677 
5678 /*
5679 ** This routine is a Walker callback for "expanding" a SELECT statement.
5680 ** "Expanding" means to do the following:
5681 **
5682 **    (1)  Make sure VDBE cursor numbers have been assigned to every
5683 **         element of the FROM clause.
5684 **
5685 **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that
5686 **         defines FROM clause.  When views appear in the FROM clause,
5687 **         fill pTabList->a[].pSelect with a copy of the SELECT statement
5688 **         that implements the view.  A copy is made of the view's SELECT
5689 **         statement so that we can freely modify or delete that statement
5690 **         without worrying about messing up the persistent representation
5691 **         of the view.
5692 **
5693 **    (3)  Add terms to the WHERE clause to accommodate the NATURAL keyword
5694 **         on joins and the ON and USING clause of joins.
5695 **
5696 **    (4)  Scan the list of columns in the result set (pEList) looking
5697 **         for instances of the "*" operator or the TABLE.* operator.
5698 **         If found, expand each "*" to be every column in every table
5699 **         and TABLE.* to be every column in TABLE.
5700 **
5701 */
5702 static int selectExpander(Walker *pWalker, Select *p){
5703   Parse *pParse = pWalker->pParse;
5704   int i, j, k, rc;
5705   SrcList *pTabList;
5706   ExprList *pEList;
5707   SrcItem *pFrom;
5708   sqlite3 *db = pParse->db;
5709   Expr *pE, *pRight, *pExpr;
5710   u16 selFlags = p->selFlags;
5711   u32 elistFlags = 0;
5712 
5713   p->selFlags |= SF_Expanded;
5714   if( db->mallocFailed  ){
5715     return WRC_Abort;
5716   }
5717   assert( p->pSrc!=0 );
5718   if( (selFlags & SF_Expanded)!=0 ){
5719     return WRC_Prune;
5720   }
5721   if( pWalker->eCode ){
5722     /* Renumber selId because it has been copied from a view */
5723     p->selId = ++pParse->nSelect;
5724   }
5725   pTabList = p->pSrc;
5726   pEList = p->pEList;
5727   if( pParse->pWith && (p->selFlags & SF_View) ){
5728     if( p->pWith==0 ){
5729       p->pWith = (With*)sqlite3DbMallocZero(db, sizeof(With));
5730       if( p->pWith==0 ){
5731         return WRC_Abort;
5732       }
5733     }
5734     p->pWith->bView = 1;
5735   }
5736   sqlite3WithPush(pParse, p->pWith, 0);
5737 
5738   /* Make sure cursor numbers have been assigned to all entries in
5739   ** the FROM clause of the SELECT statement.
5740   */
5741   sqlite3SrcListAssignCursors(pParse, pTabList);
5742 
5743   /* Look up every table named in the FROM clause of the select.  If
5744   ** an entry of the FROM clause is a subquery instead of a table or view,
5745   ** then create a transient table structure to describe the subquery.
5746   */
5747   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
5748     Table *pTab;
5749     assert( pFrom->fg.isRecursive==0 || pFrom->pTab!=0 );
5750     if( pFrom->pTab ) continue;
5751     assert( pFrom->fg.isRecursive==0 );
5752     if( pFrom->zName==0 ){
5753 #ifndef SQLITE_OMIT_SUBQUERY
5754       Select *pSel = pFrom->pSelect;
5755       /* A sub-query in the FROM clause of a SELECT */
5756       assert( pSel!=0 );
5757       assert( pFrom->pTab==0 );
5758       if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort;
5759       if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort;
5760 #endif
5761 #ifndef SQLITE_OMIT_CTE
5762     }else if( (rc = resolveFromTermToCte(pParse, pWalker, pFrom))!=0 ){
5763       if( rc>1 ) return WRC_Abort;
5764       pTab = pFrom->pTab;
5765       assert( pTab!=0 );
5766 #endif
5767     }else{
5768       /* An ordinary table or view name in the FROM clause */
5769       assert( pFrom->pTab==0 );
5770       pFrom->pTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom);
5771       if( pTab==0 ) return WRC_Abort;
5772       if( pTab->nTabRef>=0xffff ){
5773         sqlite3ErrorMsg(pParse, "too many references to \"%s\": max 65535",
5774            pTab->zName);
5775         pFrom->pTab = 0;
5776         return WRC_Abort;
5777       }
5778       pTab->nTabRef++;
5779       if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){
5780         return WRC_Abort;
5781       }
5782 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
5783       if( !IsOrdinaryTable(pTab) ){
5784         i16 nCol;
5785         u8 eCodeOrig = pWalker->eCode;
5786         if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
5787         assert( pFrom->pSelect==0 );
5788         if( IsView(pTab) ){
5789           if( (db->flags & SQLITE_EnableView)==0
5790            && pTab->pSchema!=db->aDb[1].pSchema
5791           ){
5792             sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited",
5793               pTab->zName);
5794           }
5795           pFrom->pSelect = sqlite3SelectDup(db, pTab->u.view.pSelect, 0);
5796         }
5797 #ifndef SQLITE_OMIT_VIRTUALTABLE
5798         else if( ALWAYS(IsVirtual(pTab))
5799          && pFrom->fg.fromDDL
5800          && ALWAYS(pTab->u.vtab.p!=0)
5801          && pTab->u.vtab.p->eVtabRisk > ((db->flags & SQLITE_TrustedSchema)!=0)
5802         ){
5803           sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"",
5804                                   pTab->zName);
5805         }
5806         assert( SQLITE_VTABRISK_Normal==1 && SQLITE_VTABRISK_High==2 );
5807 #endif
5808         nCol = pTab->nCol;
5809         pTab->nCol = -1;
5810         pWalker->eCode = 1;  /* Turn on Select.selId renumbering */
5811         sqlite3WalkSelect(pWalker, pFrom->pSelect);
5812         pWalker->eCode = eCodeOrig;
5813         pTab->nCol = nCol;
5814       }
5815 #endif
5816     }
5817 
5818     /* Locate the index named by the INDEXED BY clause, if any. */
5819     if( pFrom->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pFrom) ){
5820       return WRC_Abort;
5821     }
5822   }
5823 
5824   /* Process NATURAL keywords, and ON and USING clauses of joins.
5825   */
5826   assert( db->mallocFailed==0 || pParse->nErr!=0 );
5827   if( pParse->nErr || sqlite3ProcessJoin(pParse, p) ){
5828     return WRC_Abort;
5829   }
5830 
5831   /* For every "*" that occurs in the column list, insert the names of
5832   ** all columns in all tables.  And for every TABLE.* insert the names
5833   ** of all columns in TABLE.  The parser inserted a special expression
5834   ** with the TK_ASTERISK operator for each "*" that it found in the column
5835   ** list.  The following code just has to locate the TK_ASTERISK
5836   ** expressions and expand each one to the list of all columns in
5837   ** all tables.
5838   **
5839   ** The first loop just checks to see if there are any "*" operators
5840   ** that need expanding.
5841   */
5842   for(k=0; k<pEList->nExpr; k++){
5843     pE = pEList->a[k].pExpr;
5844     if( pE->op==TK_ASTERISK ) break;
5845     assert( pE->op!=TK_DOT || pE->pRight!=0 );
5846     assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
5847     if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break;
5848     elistFlags |= pE->flags;
5849   }
5850   if( k<pEList->nExpr ){
5851     /*
5852     ** If we get here it means the result set contains one or more "*"
5853     ** operators that need to be expanded.  Loop through each expression
5854     ** in the result set and expand them one by one.
5855     */
5856     struct ExprList_item *a = pEList->a;
5857     ExprList *pNew = 0;
5858     int flags = pParse->db->flags;
5859     int longNames = (flags & SQLITE_FullColNames)!=0
5860                       && (flags & SQLITE_ShortColNames)==0;
5861 
5862     for(k=0; k<pEList->nExpr; k++){
5863       pE = a[k].pExpr;
5864       elistFlags |= pE->flags;
5865       pRight = pE->pRight;
5866       assert( pE->op!=TK_DOT || pRight!=0 );
5867       if( pE->op!=TK_ASTERISK
5868        && (pE->op!=TK_DOT || pRight->op!=TK_ASTERISK)
5869       ){
5870         /* This particular expression does not need to be expanded.
5871         */
5872         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
5873         if( pNew ){
5874           pNew->a[pNew->nExpr-1].zEName = a[k].zEName;
5875           pNew->a[pNew->nExpr-1].fg.eEName = a[k].fg.eEName;
5876           a[k].zEName = 0;
5877         }
5878         a[k].pExpr = 0;
5879       }else{
5880         /* This expression is a "*" or a "TABLE.*" and needs to be
5881         ** expanded. */
5882         int tableSeen = 0;      /* Set to 1 when TABLE matches */
5883         char *zTName = 0;       /* text of name of TABLE */
5884         if( pE->op==TK_DOT ){
5885           assert( pE->pLeft!=0 );
5886           assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
5887           zTName = pE->pLeft->u.zToken;
5888         }
5889         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
5890           Table *pTab = pFrom->pTab;   /* Table for this data source */
5891           ExprList *pNestedFrom;       /* Result-set of a nested FROM clause */
5892           char *zTabName;              /* AS name for this data source */
5893           const char *zSchemaName = 0; /* Schema name for this data source */
5894           int iDb;                     /* Schema index for this data src */
5895           IdList *pUsing;              /* USING clause for pFrom[1] */
5896 
5897           if( (zTabName = pFrom->zAlias)==0 ){
5898             zTabName = pTab->zName;
5899           }
5900           if( db->mallocFailed ) break;
5901           assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
5902           if( pFrom->fg.isNestedFrom ){
5903             assert( pFrom->pSelect!=0 );
5904             pNestedFrom = pFrom->pSelect->pEList;
5905             assert( pNestedFrom!=0 );
5906             assert( pNestedFrom->nExpr==pTab->nCol );
5907           }else{
5908             if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
5909               continue;
5910             }
5911             pNestedFrom = 0;
5912             iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
5913             zSchemaName = iDb>=0 ? db->aDb[iDb].zDbSName : "*";
5914           }
5915           if( i+1<pTabList->nSrc
5916            && pFrom[1].fg.isUsing
5917            && (selFlags & SF_NestedFrom)!=0
5918           ){
5919             int ii;
5920             pUsing = pFrom[1].u3.pUsing;
5921             for(ii=0; ii<pUsing->nId; ii++){
5922               const char *zUName = pUsing->a[ii].zName;
5923               pRight = sqlite3Expr(db, TK_ID, zUName);
5924               pNew = sqlite3ExprListAppend(pParse, pNew, pRight);
5925               if( pNew ){
5926                 struct ExprList_item *pX = &pNew->a[pNew->nExpr-1];
5927                 assert( pX->zEName==0 );
5928                 pX->zEName = sqlite3MPrintf(db,"..%s", zUName);
5929                 pX->fg.eEName = ENAME_TAB;
5930                 pX->fg.bUsingTerm = 1;
5931               }
5932             }
5933           }else{
5934             pUsing = 0;
5935           }
5936           for(j=0; j<pTab->nCol; j++){
5937             char *zName = pTab->aCol[j].zCnName;
5938             struct ExprList_item *pX; /* Newly added ExprList term */
5939 
5940             assert( zName );
5941             if( zTName
5942              && pNestedFrom
5943              && sqlite3MatchEName(&pNestedFrom->a[j], 0, zTName, 0)==0
5944             ){
5945               continue;
5946             }
5947 
5948             /* If a column is marked as 'hidden', omit it from the expanded
5949             ** result-set list unless the SELECT has the SF_IncludeHidden
5950             ** bit set.
5951             */
5952             if( (p->selFlags & SF_IncludeHidden)==0
5953              && IsHiddenColumn(&pTab->aCol[j])
5954             ){
5955               continue;
5956             }
5957             if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0
5958              && zTName==0
5959              && (selFlags & (SF_NestedFrom))==0
5960             ){
5961               continue;
5962             }
5963             tableSeen = 1;
5964 
5965             if( i>0 && zTName==0 && (selFlags & SF_NestedFrom)==0 ){
5966               if( pFrom->fg.isUsing
5967                && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0
5968               ){
5969                 /* In a join with a USING clause, omit columns in the
5970                 ** using clause from the table on the right. */
5971                 continue;
5972               }
5973             }
5974             pRight = sqlite3Expr(db, TK_ID, zName);
5975             if( (pTabList->nSrc>1
5976                  && (  (pFrom->fg.jointype & JT_LTORJ)==0
5977                      || (selFlags & SF_NestedFrom)!=0
5978                      || !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1)
5979                     )
5980                 )
5981              || IN_RENAME_OBJECT
5982             ){
5983               Expr *pLeft;
5984               pLeft = sqlite3Expr(db, TK_ID, zTabName);
5985               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
5986               if( IN_RENAME_OBJECT && pE->pLeft ){
5987                 sqlite3RenameTokenRemap(pParse, pLeft, pE->pLeft);
5988               }
5989               if( zSchemaName ){
5990                 pLeft = sqlite3Expr(db, TK_ID, zSchemaName);
5991                 pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr);
5992               }
5993             }else{
5994               pExpr = pRight;
5995             }
5996             pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
5997             if( pNew==0 ){
5998               break;  /* OOM */
5999             }
6000             pX = &pNew->a[pNew->nExpr-1];
6001             assert( pX->zEName==0 );
6002             if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){
6003               if( pNestedFrom ){
6004                 pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName);
6005                 testcase( pX->zEName==0 );
6006               }else{
6007                 pX->zEName = sqlite3MPrintf(db, "%s.%s.%s",
6008                                            zSchemaName, zTabName, zName);
6009                 testcase( pX->zEName==0 );
6010               }
6011               pX->fg.eEName = ENAME_TAB;
6012               if( (pFrom->fg.isUsing
6013                    && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0)
6014                || (pUsing && sqlite3IdListIndex(pUsing, zName)>=0)
6015                || (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0
6016               ){
6017                 pX->fg.bNoExpand = 1;
6018               }
6019             }else if( longNames ){
6020               pX->zEName = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
6021               pX->fg.eEName = ENAME_NAME;
6022             }else{
6023               pX->zEName = sqlite3DbStrDup(db, zName);
6024               pX->fg.eEName = ENAME_NAME;
6025             }
6026           }
6027         }
6028         if( !tableSeen ){
6029           if( zTName ){
6030             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
6031           }else{
6032             sqlite3ErrorMsg(pParse, "no tables specified");
6033           }
6034         }
6035       }
6036     }
6037     sqlite3ExprListDelete(db, pEList);
6038     p->pEList = pNew;
6039   }
6040   if( p->pEList ){
6041     if( p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
6042       sqlite3ErrorMsg(pParse, "too many columns in result set");
6043       return WRC_Abort;
6044     }
6045     if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){
6046       p->selFlags |= SF_ComplexResult;
6047     }
6048   }
6049 #if TREETRACE_ENABLED
6050   if( sqlite3TreeTrace & 0x100 ){
6051     SELECTTRACE(0x100,pParse,p,("After result-set wildcard expansion:\n"));
6052     sqlite3TreeViewSelect(0, p, 0);
6053   }
6054 #endif
6055   return WRC_Continue;
6056 }
6057 
6058 #if SQLITE_DEBUG
6059 /*
6060 ** Always assert.  This xSelectCallback2 implementation proves that the
6061 ** xSelectCallback2 is never invoked.
6062 */
6063 void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){
6064   UNUSED_PARAMETER2(NotUsed, NotUsed2);
6065   assert( 0 );
6066 }
6067 #endif
6068 /*
6069 ** This routine "expands" a SELECT statement and all of its subqueries.
6070 ** For additional information on what it means to "expand" a SELECT
6071 ** statement, see the comment on the selectExpand worker callback above.
6072 **
6073 ** Expanding a SELECT statement is the first step in processing a
6074 ** SELECT statement.  The SELECT statement must be expanded before
6075 ** name resolution is performed.
6076 **
6077 ** If anything goes wrong, an error message is written into pParse.
6078 ** The calling function can detect the problem by looking at pParse->nErr
6079 ** and/or pParse->db->mallocFailed.
6080 */
6081 static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
6082   Walker w;
6083   w.xExprCallback = sqlite3ExprWalkNoop;
6084   w.pParse = pParse;
6085   if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){
6086     w.xSelectCallback = convertCompoundSelectToSubquery;
6087     w.xSelectCallback2 = 0;
6088     sqlite3WalkSelect(&w, pSelect);
6089   }
6090   w.xSelectCallback = selectExpander;
6091   w.xSelectCallback2 = sqlite3SelectPopWith;
6092   w.eCode = 0;
6093   sqlite3WalkSelect(&w, pSelect);
6094 }
6095 
6096 
6097 #ifndef SQLITE_OMIT_SUBQUERY
6098 /*
6099 ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
6100 ** interface.
6101 **
6102 ** For each FROM-clause subquery, add Column.zType and Column.zColl
6103 ** information to the Table structure that represents the result set
6104 ** of that subquery.
6105 **
6106 ** The Table structure that represents the result set was constructed
6107 ** by selectExpander() but the type and collation information was omitted
6108 ** at that point because identifiers had not yet been resolved.  This
6109 ** routine is called after identifier resolution.
6110 */
6111 static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
6112   Parse *pParse;
6113   int i;
6114   SrcList *pTabList;
6115   SrcItem *pFrom;
6116 
6117   assert( p->selFlags & SF_Resolved );
6118   if( p->selFlags & SF_HasTypeInfo ) return;
6119   p->selFlags |= SF_HasTypeInfo;
6120   pParse = pWalker->pParse;
6121   pTabList = p->pSrc;
6122   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
6123     Table *pTab = pFrom->pTab;
6124     assert( pTab!=0 );
6125     if( (pTab->tabFlags & TF_Ephemeral)!=0 ){
6126       /* A sub-query in the FROM clause of a SELECT */
6127       Select *pSel = pFrom->pSelect;
6128       if( pSel ){
6129         while( pSel->pPrior ) pSel = pSel->pPrior;
6130         sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel,
6131                                                SQLITE_AFF_NONE);
6132       }
6133     }
6134   }
6135 }
6136 #endif
6137 
6138 
6139 /*
6140 ** This routine adds datatype and collating sequence information to
6141 ** the Table structures of all FROM-clause subqueries in a
6142 ** SELECT statement.
6143 **
6144 ** Use this routine after name resolution.
6145 */
6146 static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
6147 #ifndef SQLITE_OMIT_SUBQUERY
6148   Walker w;
6149   w.xSelectCallback = sqlite3SelectWalkNoop;
6150   w.xSelectCallback2 = selectAddSubqueryTypeInfo;
6151   w.xExprCallback = sqlite3ExprWalkNoop;
6152   w.pParse = pParse;
6153   sqlite3WalkSelect(&w, pSelect);
6154 #endif
6155 }
6156 
6157 
6158 /*
6159 ** This routine sets up a SELECT statement for processing.  The
6160 ** following is accomplished:
6161 **
6162 **     *  VDBE Cursor numbers are assigned to all FROM-clause terms.
6163 **     *  Ephemeral Table objects are created for all FROM-clause subqueries.
6164 **     *  ON and USING clauses are shifted into WHERE statements
6165 **     *  Wildcards "*" and "TABLE.*" in result sets are expanded.
6166 **     *  Identifiers in expression are matched to tables.
6167 **
6168 ** This routine acts recursively on all subqueries within the SELECT.
6169 */
6170 void sqlite3SelectPrep(
6171   Parse *pParse,         /* The parser context */
6172   Select *p,             /* The SELECT statement being coded. */
6173   NameContext *pOuterNC  /* Name context for container */
6174 ){
6175   assert( p!=0 || pParse->db->mallocFailed );
6176   assert( pParse->db->pParse==pParse );
6177   if( pParse->db->mallocFailed ) return;
6178   if( p->selFlags & SF_HasTypeInfo ) return;
6179   sqlite3SelectExpand(pParse, p);
6180   if( pParse->nErr ) return;
6181   sqlite3ResolveSelectNames(pParse, p, pOuterNC);
6182   if( pParse->nErr ) return;
6183   sqlite3SelectAddTypeInfo(pParse, p);
6184 }
6185 
6186 /*
6187 ** Reset the aggregate accumulator.
6188 **
6189 ** The aggregate accumulator is a set of memory cells that hold
6190 ** intermediate results while calculating an aggregate.  This
6191 ** routine generates code that stores NULLs in all of those memory
6192 ** cells.
6193 */
6194 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
6195   Vdbe *v = pParse->pVdbe;
6196   int i;
6197   struct AggInfo_func *pFunc;
6198   int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
6199   assert( pParse->db->pParse==pParse );
6200   assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 );
6201   if( nReg==0 ) return;
6202   if( pParse->nErr ) return;
6203 #ifdef SQLITE_DEBUG
6204   /* Verify that all AggInfo registers are within the range specified by
6205   ** AggInfo.mnReg..AggInfo.mxReg */
6206   assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 );
6207   for(i=0; i<pAggInfo->nColumn; i++){
6208     assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg
6209          && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg );
6210   }
6211   for(i=0; i<pAggInfo->nFunc; i++){
6212     assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg
6213          && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg );
6214   }
6215 #endif
6216   sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg);
6217   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
6218     if( pFunc->iDistinct>=0 ){
6219       Expr *pE = pFunc->pFExpr;
6220       assert( ExprUseXList(pE) );
6221       if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
6222         sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
6223            "argument");
6224         pFunc->iDistinct = -1;
6225       }else{
6226         KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0);
6227         pFunc->iDistAddr = sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
6228             pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO);
6229         ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(DISTINCT)",
6230                           pFunc->pFunc->zName));
6231       }
6232     }
6233   }
6234 }
6235 
6236 /*
6237 ** Invoke the OP_AggFinalize opcode for every aggregate function
6238 ** in the AggInfo structure.
6239 */
6240 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
6241   Vdbe *v = pParse->pVdbe;
6242   int i;
6243   struct AggInfo_func *pF;
6244   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
6245     ExprList *pList;
6246     assert( ExprUseXList(pF->pFExpr) );
6247     pList = pF->pFExpr->x.pList;
6248     sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0);
6249     sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
6250   }
6251 }
6252 
6253 
6254 /*
6255 ** Update the accumulator memory cells for an aggregate based on
6256 ** the current cursor position.
6257 **
6258 ** If regAcc is non-zero and there are no min() or max() aggregates
6259 ** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator
6260 ** registers if register regAcc contains 0. The caller will take care
6261 ** of setting and clearing regAcc.
6262 */
6263 static void updateAccumulator(
6264   Parse *pParse,
6265   int regAcc,
6266   AggInfo *pAggInfo,
6267   int eDistinctType
6268 ){
6269   Vdbe *v = pParse->pVdbe;
6270   int i;
6271   int regHit = 0;
6272   int addrHitTest = 0;
6273   struct AggInfo_func *pF;
6274   struct AggInfo_col *pC;
6275 
6276   pAggInfo->directMode = 1;
6277   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
6278     int nArg;
6279     int addrNext = 0;
6280     int regAgg;
6281     ExprList *pList;
6282     assert( ExprUseXList(pF->pFExpr) );
6283     assert( !IsWindowFunc(pF->pFExpr) );
6284     pList = pF->pFExpr->x.pList;
6285     if( ExprHasProperty(pF->pFExpr, EP_WinFunc) ){
6286       Expr *pFilter = pF->pFExpr->y.pWin->pFilter;
6287       if( pAggInfo->nAccumulator
6288        && (pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)
6289        && regAcc
6290       ){
6291         /* If regAcc==0, there there exists some min() or max() function
6292         ** without a FILTER clause that will ensure the magnet registers
6293         ** are populated. */
6294         if( regHit==0 ) regHit = ++pParse->nMem;
6295         /* If this is the first row of the group (regAcc contains 0), clear the
6296         ** "magnet" register regHit so that the accumulator registers
6297         ** are populated if the FILTER clause jumps over the the
6298         ** invocation of min() or max() altogether. Or, if this is not
6299         ** the first row (regAcc contains 1), set the magnet register so that
6300         ** the accumulators are not populated unless the min()/max() is invoked
6301         ** and indicates that they should be.  */
6302         sqlite3VdbeAddOp2(v, OP_Copy, regAcc, regHit);
6303       }
6304       addrNext = sqlite3VdbeMakeLabel(pParse);
6305       sqlite3ExprIfFalse(pParse, pFilter, addrNext, SQLITE_JUMPIFNULL);
6306     }
6307     if( pList ){
6308       nArg = pList->nExpr;
6309       regAgg = sqlite3GetTempRange(pParse, nArg);
6310       sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP);
6311     }else{
6312       nArg = 0;
6313       regAgg = 0;
6314     }
6315     if( pF->iDistinct>=0 && pList ){
6316       if( addrNext==0 ){
6317         addrNext = sqlite3VdbeMakeLabel(pParse);
6318       }
6319       pF->iDistinct = codeDistinct(pParse, eDistinctType,
6320           pF->iDistinct, addrNext, pList, regAgg);
6321     }
6322     if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
6323       CollSeq *pColl = 0;
6324       struct ExprList_item *pItem;
6325       int j;
6326       assert( pList!=0 );  /* pList!=0 if pF->pFunc has NEEDCOLL */
6327       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
6328         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
6329       }
6330       if( !pColl ){
6331         pColl = pParse->db->pDfltColl;
6332       }
6333       if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
6334       sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ);
6335     }
6336     sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem);
6337     sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
6338     sqlite3VdbeChangeP5(v, (u8)nArg);
6339     sqlite3ReleaseTempRange(pParse, regAgg, nArg);
6340     if( addrNext ){
6341       sqlite3VdbeResolveLabel(v, addrNext);
6342     }
6343   }
6344   if( regHit==0 && pAggInfo->nAccumulator ){
6345     regHit = regAcc;
6346   }
6347   if( regHit ){
6348     addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v);
6349   }
6350   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
6351     sqlite3ExprCode(pParse, pC->pCExpr, pC->iMem);
6352   }
6353 
6354   pAggInfo->directMode = 0;
6355   if( addrHitTest ){
6356     sqlite3VdbeJumpHereOrPopInst(v, addrHitTest);
6357   }
6358 }
6359 
6360 /*
6361 ** Add a single OP_Explain instruction to the VDBE to explain a simple
6362 ** count(*) query ("SELECT count(*) FROM pTab").
6363 */
6364 #ifndef SQLITE_OMIT_EXPLAIN
6365 static void explainSimpleCount(
6366   Parse *pParse,                  /* Parse context */
6367   Table *pTab,                    /* Table being queried */
6368   Index *pIdx                     /* Index used to optimize scan, or NULL */
6369 ){
6370   if( pParse->explain==2 ){
6371     int bCover = (pIdx!=0 && (HasRowid(pTab) || !IsPrimaryKeyIndex(pIdx)));
6372     sqlite3VdbeExplain(pParse, 0, "SCAN %s%s%s",
6373         pTab->zName,
6374         bCover ? " USING COVERING INDEX " : "",
6375         bCover ? pIdx->zName : ""
6376     );
6377   }
6378 }
6379 #else
6380 # define explainSimpleCount(a,b,c)
6381 #endif
6382 
6383 /*
6384 ** sqlite3WalkExpr() callback used by havingToWhere().
6385 **
6386 ** If the node passed to the callback is a TK_AND node, return
6387 ** WRC_Continue to tell sqlite3WalkExpr() to iterate through child nodes.
6388 **
6389 ** Otherwise, return WRC_Prune. In this case, also check if the
6390 ** sub-expression matches the criteria for being moved to the WHERE
6391 ** clause. If so, add it to the WHERE clause and replace the sub-expression
6392 ** within the HAVING expression with a constant "1".
6393 */
6394 static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){
6395   if( pExpr->op!=TK_AND ){
6396     Select *pS = pWalker->u.pSelect;
6397     /* This routine is called before the HAVING clause of the current
6398     ** SELECT is analyzed for aggregates. So if pExpr->pAggInfo is set
6399     ** here, it indicates that the expression is a correlated reference to a
6400     ** column from an outer aggregate query, or an aggregate function that
6401     ** belongs to an outer query. Do not move the expression to the WHERE
6402     ** clause in this obscure case, as doing so may corrupt the outer Select
6403     ** statements AggInfo structure.  */
6404     if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy)
6405      && ExprAlwaysFalse(pExpr)==0
6406      && pExpr->pAggInfo==0
6407     ){
6408       sqlite3 *db = pWalker->pParse->db;
6409       Expr *pNew = sqlite3Expr(db, TK_INTEGER, "1");
6410       if( pNew ){
6411         Expr *pWhere = pS->pWhere;
6412         SWAP(Expr, *pNew, *pExpr);
6413         pNew = sqlite3ExprAnd(pWalker->pParse, pWhere, pNew);
6414         pS->pWhere = pNew;
6415         pWalker->eCode = 1;
6416       }
6417     }
6418     return WRC_Prune;
6419   }
6420   return WRC_Continue;
6421 }
6422 
6423 /*
6424 ** Transfer eligible terms from the HAVING clause of a query, which is
6425 ** processed after grouping, to the WHERE clause, which is processed before
6426 ** grouping. For example, the query:
6427 **
6428 **   SELECT * FROM <tables> WHERE a=? GROUP BY b HAVING b=? AND c=?
6429 **
6430 ** can be rewritten as:
6431 **
6432 **   SELECT * FROM <tables> WHERE a=? AND b=? GROUP BY b HAVING c=?
6433 **
6434 ** A term of the HAVING expression is eligible for transfer if it consists
6435 ** entirely of constants and expressions that are also GROUP BY terms that
6436 ** use the "BINARY" collation sequence.
6437 */
6438 static void havingToWhere(Parse *pParse, Select *p){
6439   Walker sWalker;
6440   memset(&sWalker, 0, sizeof(sWalker));
6441   sWalker.pParse = pParse;
6442   sWalker.xExprCallback = havingToWhereExprCb;
6443   sWalker.u.pSelect = p;
6444   sqlite3WalkExpr(&sWalker, p->pHaving);
6445 #if TREETRACE_ENABLED
6446   if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){
6447     SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
6448     sqlite3TreeViewSelect(0, p, 0);
6449   }
6450 #endif
6451 }
6452 
6453 /*
6454 ** Check to see if the pThis entry of pTabList is a self-join of a prior view.
6455 ** If it is, then return the SrcList_item for the prior view.  If it is not,
6456 ** then return 0.
6457 */
6458 static SrcItem *isSelfJoinView(
6459   SrcList *pTabList,           /* Search for self-joins in this FROM clause */
6460   SrcItem *pThis               /* Search for prior reference to this subquery */
6461 ){
6462   SrcItem *pItem;
6463   assert( pThis->pSelect!=0 );
6464   if( pThis->pSelect->selFlags & SF_PushDown ) return 0;
6465   for(pItem = pTabList->a; pItem<pThis; pItem++){
6466     Select *pS1;
6467     if( pItem->pSelect==0 ) continue;
6468     if( pItem->fg.viaCoroutine ) continue;
6469     if( pItem->zName==0 ) continue;
6470     assert( pItem->pTab!=0 );
6471     assert( pThis->pTab!=0 );
6472     if( pItem->pTab->pSchema!=pThis->pTab->pSchema ) continue;
6473     if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue;
6474     pS1 = pItem->pSelect;
6475     if( pItem->pTab->pSchema==0 && pThis->pSelect->selId!=pS1->selId ){
6476       /* The query flattener left two different CTE tables with identical
6477       ** names in the same FROM clause. */
6478       continue;
6479     }
6480     if( pItem->pSelect->selFlags & SF_PushDown ){
6481       /* The view was modified by some other optimization such as
6482       ** pushDownWhereTerms() */
6483       continue;
6484     }
6485     return pItem;
6486   }
6487   return 0;
6488 }
6489 
6490 /*
6491 ** Deallocate a single AggInfo object
6492 */
6493 static void agginfoFree(sqlite3 *db, AggInfo *p){
6494   sqlite3DbFree(db, p->aCol);
6495   sqlite3DbFree(db, p->aFunc);
6496   sqlite3DbFreeNN(db, p);
6497 }
6498 
6499 #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
6500 /*
6501 ** Attempt to transform a query of the form
6502 **
6503 **    SELECT count(*) FROM (SELECT x FROM t1 UNION ALL SELECT y FROM t2)
6504 **
6505 ** Into this:
6506 **
6507 **    SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2)
6508 **
6509 ** The transformation only works if all of the following are true:
6510 **
6511 **   *  The subquery is a UNION ALL of two or more terms
6512 **   *  The subquery does not have a LIMIT clause
6513 **   *  There is no WHERE or GROUP BY or HAVING clauses on the subqueries
6514 **   *  The outer query is a simple count(*) with no WHERE clause or other
6515 **      extraneous syntax.
6516 **
6517 ** Return TRUE if the optimization is undertaken.
6518 */
6519 static int countOfViewOptimization(Parse *pParse, Select *p){
6520   Select *pSub, *pPrior;
6521   Expr *pExpr;
6522   Expr *pCount;
6523   sqlite3 *db;
6524   if( (p->selFlags & SF_Aggregate)==0 ) return 0;   /* This is an aggregate */
6525   if( p->pEList->nExpr!=1 ) return 0;               /* Single result column */
6526   if( p->pWhere ) return 0;
6527   if( p->pGroupBy ) return 0;
6528   pExpr = p->pEList->a[0].pExpr;
6529   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;        /* Result is an aggregate */
6530   assert( ExprUseUToken(pExpr) );
6531   if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0;  /* Is count() */
6532   assert( ExprUseXList(pExpr) );
6533   if( pExpr->x.pList!=0 ) return 0;                 /* Must be count(*) */
6534   if( p->pSrc->nSrc!=1 ) return 0;                  /* One table in FROM  */
6535   pSub = p->pSrc->a[0].pSelect;
6536   if( pSub==0 ) return 0;                           /* The FROM is a subquery */
6537   if( pSub->pPrior==0 ) return 0;                   /* Must be a compound ry */
6538   do{
6539     if( pSub->op!=TK_ALL && pSub->pPrior ) return 0;  /* Must be UNION ALL */
6540     if( pSub->pWhere ) return 0;                      /* No WHERE clause */
6541     if( pSub->pLimit ) return 0;                      /* No LIMIT clause */
6542     if( pSub->selFlags & SF_Aggregate ) return 0;     /* Not an aggregate */
6543     pSub = pSub->pPrior;                              /* Repeat over compound */
6544   }while( pSub );
6545 
6546   /* If we reach this point then it is OK to perform the transformation */
6547 
6548   db = pParse->db;
6549   pCount = pExpr;
6550   pExpr = 0;
6551   pSub = p->pSrc->a[0].pSelect;
6552   p->pSrc->a[0].pSelect = 0;
6553   sqlite3SrcListDelete(db, p->pSrc);
6554   p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*p->pSrc));
6555   while( pSub ){
6556     Expr *pTerm;
6557     pPrior = pSub->pPrior;
6558     pSub->pPrior = 0;
6559     pSub->pNext = 0;
6560     pSub->selFlags |= SF_Aggregate;
6561     pSub->selFlags &= ~SF_Compound;
6562     pSub->nSelectRow = 0;
6563     sqlite3ExprListDelete(db, pSub->pEList);
6564     pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount;
6565     pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm);
6566     pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
6567     sqlite3PExprAddSelect(pParse, pTerm, pSub);
6568     if( pExpr==0 ){
6569       pExpr = pTerm;
6570     }else{
6571       pExpr = sqlite3PExpr(pParse, TK_PLUS, pTerm, pExpr);
6572     }
6573     pSub = pPrior;
6574   }
6575   p->pEList->a[0].pExpr = pExpr;
6576   p->selFlags &= ~SF_Aggregate;
6577 
6578 #if TREETRACE_ENABLED
6579   if( sqlite3TreeTrace & 0x400 ){
6580     SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n"));
6581     sqlite3TreeViewSelect(0, p, 0);
6582   }
6583 #endif
6584   return 1;
6585 }
6586 #endif /* SQLITE_COUNTOFVIEW_OPTIMIZATION */
6587 
6588 /*
6589 ** If any term of pSrc, or any SF_NestedFrom sub-query, is not the same
6590 ** as pSrcItem but has the same alias as p0, then return true.
6591 ** Otherwise return false.
6592 */
6593 static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){
6594   int i;
6595   for(i=0; i<pSrc->nSrc; i++){
6596     SrcItem *p1 = &pSrc->a[i];
6597     if( p1==p0 ) continue;
6598     if( p0->pTab==p1->pTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){
6599       return 1;
6600     }
6601     if( p1->pSelect
6602      && (p1->pSelect->selFlags & SF_NestedFrom)!=0
6603      && sameSrcAlias(p0, p1->pSelect->pSrc)
6604     ){
6605       return 1;
6606     }
6607   }
6608   return 0;
6609 }
6610 
6611 /*
6612 ** Generate code for the SELECT statement given in the p argument.
6613 **
6614 ** The results are returned according to the SelectDest structure.
6615 ** See comments in sqliteInt.h for further information.
6616 **
6617 ** This routine returns the number of errors.  If any errors are
6618 ** encountered, then an appropriate error message is left in
6619 ** pParse->zErrMsg.
6620 **
6621 ** This routine does NOT free the Select structure passed in.  The
6622 ** calling function needs to do that.
6623 */
6624 int sqlite3Select(
6625   Parse *pParse,         /* The parser context */
6626   Select *p,             /* The SELECT statement being coded. */
6627   SelectDest *pDest      /* What to do with the query results */
6628 ){
6629   int i, j;              /* Loop counters */
6630   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
6631   Vdbe *v;               /* The virtual machine under construction */
6632   int isAgg;             /* True for select lists like "count(*)" */
6633   ExprList *pEList = 0;  /* List of columns to extract. */
6634   SrcList *pTabList;     /* List of tables to select from */
6635   Expr *pWhere;          /* The WHERE clause.  May be NULL */
6636   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
6637   Expr *pHaving;         /* The HAVING clause.  May be NULL */
6638   AggInfo *pAggInfo = 0; /* Aggregate information */
6639   int rc = 1;            /* Value to return from this function */
6640   DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */
6641   SortCtx sSort;         /* Info on how to code the ORDER BY clause */
6642   int iEnd;              /* Address of the end of the query */
6643   sqlite3 *db;           /* The database connection */
6644   ExprList *pMinMaxOrderBy = 0;  /* Added ORDER BY for min/max queries */
6645   u8 minMaxFlag;                 /* Flag for min/max queries */
6646 
6647   db = pParse->db;
6648   assert( pParse==db->pParse );
6649   v = sqlite3GetVdbe(pParse);
6650   if( p==0 || pParse->nErr ){
6651     return 1;
6652   }
6653   assert( db->mallocFailed==0 );
6654   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
6655 #if TREETRACE_ENABLED
6656   SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain));
6657   if( sqlite3TreeTrace & 0x10100 ){
6658     if( (sqlite3TreeTrace & 0x10001)==0x10000 ){
6659       sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d",
6660                            __FILE__, __LINE__);
6661     }
6662     sqlite3ShowSelect(p);
6663   }
6664 #endif
6665 
6666   assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo );
6667   assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo );
6668   assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistQueue );
6669   assert( p->pOrderBy==0 || pDest->eDest!=SRT_Queue );
6670   if( IgnorableDistinct(pDest) ){
6671     assert(pDest->eDest==SRT_Exists     || pDest->eDest==SRT_Union ||
6672            pDest->eDest==SRT_Except     || pDest->eDest==SRT_Discard ||
6673            pDest->eDest==SRT_DistQueue  || pDest->eDest==SRT_DistFifo );
6674     /* All of these destinations are also able to ignore the ORDER BY clause */
6675     if( p->pOrderBy ){
6676 #if TREETRACE_ENABLED
6677       SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n"));
6678       if( sqlite3TreeTrace & 0x100 ){
6679         sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY");
6680       }
6681 #endif
6682       sqlite3ParserAddCleanup(pParse,
6683         (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
6684         p->pOrderBy);
6685       testcase( pParse->earlyCleanup );
6686       p->pOrderBy = 0;
6687     }
6688     p->selFlags &= ~SF_Distinct;
6689     p->selFlags |= SF_NoopOrderBy;
6690   }
6691   sqlite3SelectPrep(pParse, p, 0);
6692   if( pParse->nErr ){
6693     goto select_end;
6694   }
6695   assert( db->mallocFailed==0 );
6696   assert( p->pEList!=0 );
6697 #if TREETRACE_ENABLED
6698   if( sqlite3TreeTrace & 0x104 ){
6699     SELECTTRACE(0x104,pParse,p, ("after name resolution:\n"));
6700     sqlite3TreeViewSelect(0, p, 0);
6701   }
6702 #endif
6703 
6704   /* If the SF_UFSrcCheck flag is set, then this function is being called
6705   ** as part of populating the temp table for an UPDATE...FROM statement.
6706   ** In this case, it is an error if the target object (pSrc->a[0]) name
6707   ** or alias is duplicated within FROM clause (pSrc->a[1..n]).
6708   **
6709   ** Postgres disallows this case too. The reason is that some other
6710   ** systems handle this case differently, and not all the same way,
6711   ** which is just confusing. To avoid this, we follow PG's lead and
6712   ** disallow it altogether.  */
6713   if( p->selFlags & SF_UFSrcCheck ){
6714     SrcItem *p0 = &p->pSrc->a[0];
6715     if( sameSrcAlias(p0, p->pSrc) ){
6716       sqlite3ErrorMsg(pParse,
6717           "target object/alias may not appear in FROM clause: %s",
6718           p0->zAlias ? p0->zAlias : p0->pTab->zName
6719       );
6720       goto select_end;
6721     }
6722 
6723     /* Clear the SF_UFSrcCheck flag. The check has already been performed,
6724     ** and leaving this flag set can cause errors if a compound sub-query
6725     ** in p->pSrc is flattened into this query and this function called
6726     ** again as part of compound SELECT processing.  */
6727     p->selFlags &= ~SF_UFSrcCheck;
6728   }
6729 
6730   if( pDest->eDest==SRT_Output ){
6731     sqlite3GenerateColumnNames(pParse, p);
6732   }
6733 
6734 #ifndef SQLITE_OMIT_WINDOWFUNC
6735   if( sqlite3WindowRewrite(pParse, p) ){
6736     assert( pParse->nErr );
6737     goto select_end;
6738   }
6739 #if TREETRACE_ENABLED
6740   if( p->pWin && (sqlite3TreeTrace & 0x108)!=0 ){
6741     SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n"));
6742     sqlite3TreeViewSelect(0, p, 0);
6743   }
6744 #endif
6745 #endif /* SQLITE_OMIT_WINDOWFUNC */
6746   pTabList = p->pSrc;
6747   isAgg = (p->selFlags & SF_Aggregate)!=0;
6748   memset(&sSort, 0, sizeof(sSort));
6749   sSort.pOrderBy = p->pOrderBy;
6750 
6751   /* Try to do various optimizations (flattening subqueries, and strength
6752   ** reduction of join operators) in the FROM clause up into the main query
6753   */
6754 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
6755   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
6756     SrcItem *pItem = &pTabList->a[i];
6757     Select *pSub = pItem->pSelect;
6758     Table *pTab = pItem->pTab;
6759 
6760     /* The expander should have already created transient Table objects
6761     ** even for FROM clause elements such as subqueries that do not correspond
6762     ** to a real table */
6763     assert( pTab!=0 );
6764 
6765     /* Convert LEFT JOIN into JOIN if there are terms of the right table
6766     ** of the LEFT JOIN used in the WHERE clause.
6767     */
6768     if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==JT_LEFT
6769      && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor)
6770      && OptimizationEnabled(db, SQLITE_SimplifyJoin)
6771     ){
6772       SELECTTRACE(0x100,pParse,p,
6773                 ("LEFT-JOIN simplifies to JOIN on term %d\n",i));
6774       pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
6775       assert( pItem->iCursor>=0 );
6776       unsetJoinExpr(p->pWhere, pItem->iCursor,
6777                     pTabList->a[0].fg.jointype & JT_LTORJ);
6778     }
6779 
6780     /* No futher action if this term of the FROM clause is no a subquery */
6781     if( pSub==0 ) continue;
6782 
6783     /* Catch mismatch in the declared columns of a view and the number of
6784     ** columns in the SELECT on the RHS */
6785     if( pTab->nCol!=pSub->pEList->nExpr ){
6786       sqlite3ErrorMsg(pParse, "expected %d columns for '%s' but got %d",
6787                       pTab->nCol, pTab->zName, pSub->pEList->nExpr);
6788       goto select_end;
6789     }
6790 
6791     /* Do not try to flatten an aggregate subquery.
6792     **
6793     ** Flattening an aggregate subquery is only possible if the outer query
6794     ** is not a join.  But if the outer query is not a join, then the subquery
6795     ** will be implemented as a co-routine and there is no advantage to
6796     ** flattening in that case.
6797     */
6798     if( (pSub->selFlags & SF_Aggregate)!=0 ) continue;
6799     assert( pSub->pGroupBy==0 );
6800 
6801     /* If a FROM-clause subquery has an ORDER BY clause that is not
6802     ** really doing anything, then delete it now so that it does not
6803     ** interfere with query flattening.  See the discussion at
6804     ** https://sqlite.org/forum/forumpost/2d76f2bcf65d256a
6805     **
6806     ** Beware of these cases where the ORDER BY clause may not be safely
6807     ** omitted:
6808     **
6809     **    (1)   There is also a LIMIT clause
6810     **    (2)   The subquery was added to help with window-function
6811     **          processing
6812     **    (3)   The subquery is in the FROM clause of an UPDATE
6813     **    (4)   The outer query uses an aggregate function other than
6814     **          the built-in count(), min(), or max().
6815     **    (5)   The ORDER BY isn't going to accomplish anything because
6816     **          one of:
6817     **            (a)  The outer query has a different ORDER BY clause
6818     **            (b)  The subquery is part of a join
6819     **          See forum post 062d576715d277c8
6820     */
6821     if( pSub->pOrderBy!=0
6822      && (p->pOrderBy!=0 || pTabList->nSrc>1)      /* Condition (5) */
6823      && pSub->pLimit==0                           /* Condition (1) */
6824      && (pSub->selFlags & SF_OrderByReqd)==0      /* Condition (2) */
6825      && (p->selFlags & SF_OrderByReqd)==0         /* Condition (3) and (4) */
6826      && OptimizationEnabled(db, SQLITE_OmitOrderBy)
6827     ){
6828       SELECTTRACE(0x100,pParse,p,
6829                 ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
6830       sqlite3ExprListDelete(db, pSub->pOrderBy);
6831       pSub->pOrderBy = 0;
6832     }
6833 
6834     /* If the outer query contains a "complex" result set (that is,
6835     ** if the result set of the outer query uses functions or subqueries)
6836     ** and if the subquery contains an ORDER BY clause and if
6837     ** it will be implemented as a co-routine, then do not flatten.  This
6838     ** restriction allows SQL constructs like this:
6839     **
6840     **  SELECT expensive_function(x)
6841     **    FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
6842     **
6843     ** The expensive_function() is only computed on the 10 rows that
6844     ** are output, rather than every row of the table.
6845     **
6846     ** The requirement that the outer query have a complex result set
6847     ** means that flattening does occur on simpler SQL constraints without
6848     ** the expensive_function() like:
6849     **
6850     **  SELECT x FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
6851     */
6852     if( pSub->pOrderBy!=0
6853      && i==0
6854      && (p->selFlags & SF_ComplexResult)!=0
6855      && (pTabList->nSrc==1
6856          || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0)
6857     ){
6858       continue;
6859     }
6860 
6861     if( flattenSubquery(pParse, p, i, isAgg) ){
6862       if( pParse->nErr ) goto select_end;
6863       /* This subquery can be absorbed into its parent. */
6864       i = -1;
6865     }
6866     pTabList = p->pSrc;
6867     if( db->mallocFailed ) goto select_end;
6868     if( !IgnorableOrderby(pDest) ){
6869       sSort.pOrderBy = p->pOrderBy;
6870     }
6871   }
6872 #endif
6873 
6874 #ifndef SQLITE_OMIT_COMPOUND_SELECT
6875   /* Handle compound SELECT statements using the separate multiSelect()
6876   ** procedure.
6877   */
6878   if( p->pPrior ){
6879     rc = multiSelect(pParse, p, pDest);
6880 #if TREETRACE_ENABLED
6881     SELECTTRACE(0x1,pParse,p,("end compound-select processing\n"));
6882     if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
6883       sqlite3TreeViewSelect(0, p, 0);
6884     }
6885 #endif
6886     if( p->pNext==0 ) ExplainQueryPlanPop(pParse);
6887     return rc;
6888   }
6889 #endif
6890 
6891   /* Do the WHERE-clause constant propagation optimization if this is
6892   ** a join.  No need to speed time on this operation for non-join queries
6893   ** as the equivalent optimization will be handled by query planner in
6894   ** sqlite3WhereBegin().
6895   */
6896   if( p->pWhere!=0
6897    && p->pWhere->op==TK_AND
6898    && OptimizationEnabled(db, SQLITE_PropagateConst)
6899    && propagateConstants(pParse, p)
6900   ){
6901 #if TREETRACE_ENABLED
6902     if( sqlite3TreeTrace & 0x100 ){
6903       SELECTTRACE(0x100,pParse,p,("After constant propagation:\n"));
6904       sqlite3TreeViewSelect(0, p, 0);
6905     }
6906 #endif
6907   }else{
6908     SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n"));
6909   }
6910 
6911 #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
6912   if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView)
6913    && countOfViewOptimization(pParse, p)
6914   ){
6915     if( db->mallocFailed ) goto select_end;
6916     pEList = p->pEList;
6917     pTabList = p->pSrc;
6918   }
6919 #endif
6920 
6921   /* For each term in the FROM clause, do two things:
6922   ** (1) Authorized unreferenced tables
6923   ** (2) Generate code for all sub-queries
6924   */
6925   for(i=0; i<pTabList->nSrc; i++){
6926     SrcItem *pItem = &pTabList->a[i];
6927     SrcItem *pPrior;
6928     SelectDest dest;
6929     Select *pSub;
6930 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
6931     const char *zSavedAuthContext;
6932 #endif
6933 
6934     /* Issue SQLITE_READ authorizations with a fake column name for any
6935     ** tables that are referenced but from which no values are extracted.
6936     ** Examples of where these kinds of null SQLITE_READ authorizations
6937     ** would occur:
6938     **
6939     **     SELECT count(*) FROM t1;   -- SQLITE_READ t1.""
6940     **     SELECT t1.* FROM t1, t2;   -- SQLITE_READ t2.""
6941     **
6942     ** The fake column name is an empty string.  It is possible for a table to
6943     ** have a column named by the empty string, in which case there is no way to
6944     ** distinguish between an unreferenced table and an actual reference to the
6945     ** "" column. The original design was for the fake column name to be a NULL,
6946     ** which would be unambiguous.  But legacy authorization callbacks might
6947     ** assume the column name is non-NULL and segfault.  The use of an empty
6948     ** string for the fake column name seems safer.
6949     */
6950     if( pItem->colUsed==0 && pItem->zName!=0 ){
6951       sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase);
6952     }
6953 
6954 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
6955     /* Generate code for all sub-queries in the FROM clause
6956     */
6957     pSub = pItem->pSelect;
6958     if( pSub==0 ) continue;
6959 
6960     /* The code for a subquery should only be generated once. */
6961     assert( pItem->addrFillSub==0 );
6962 
6963     /* Increment Parse.nHeight by the height of the largest expression
6964     ** tree referred to by this, the parent select. The child select
6965     ** may contain expression trees of at most
6966     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
6967     ** more conservative than necessary, but much easier than enforcing
6968     ** an exact limit.
6969     */
6970     pParse->nHeight += sqlite3SelectExprHeight(p);
6971 
6972     /* Make copies of constant WHERE-clause terms in the outer query down
6973     ** inside the subquery.  This can help the subquery to run more efficiently.
6974     */
6975     if( OptimizationEnabled(db, SQLITE_PushDown)
6976      && (pItem->fg.isCte==0
6977          || (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2))
6978      && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem)
6979     ){
6980 #if TREETRACE_ENABLED
6981       if( sqlite3TreeTrace & 0x100 ){
6982         SELECTTRACE(0x100,pParse,p,
6983             ("After WHERE-clause push-down into subquery %d:\n", pSub->selId));
6984         sqlite3TreeViewSelect(0, p, 0);
6985       }
6986 #endif
6987       assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
6988     }else{
6989       SELECTTRACE(0x100,pParse,p,("Push-down not possible\n"));
6990     }
6991 
6992     zSavedAuthContext = pParse->zAuthContext;
6993     pParse->zAuthContext = pItem->zName;
6994 
6995     /* Generate code to implement the subquery
6996     **
6997     ** The subquery is implemented as a co-routine all if the following are
6998     ** true:
6999     **
7000     **    (1)  the subquery is guaranteed to be the outer loop (so that
7001     **         it does not need to be computed more than once), and
7002     **    (2)  the subquery is not a CTE that should be materialized
7003     **    (3)  the subquery is not part of a left operand for a RIGHT JOIN
7004     */
7005     if( i==0
7006      && (pTabList->nSrc==1
7007             || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0)  /* (1) */
7008      && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes)   /* (2) */
7009      && (pTabList->a[0].fg.jointype & JT_LTORJ)==0                   /* (3) */
7010     ){
7011       /* Implement a co-routine that will return a single row of the result
7012       ** set on each invocation.
7013       */
7014       int addrTop = sqlite3VdbeCurrentAddr(v)+1;
7015 
7016       pItem->regReturn = ++pParse->nMem;
7017       sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
7018       VdbeComment((v, "%!S", pItem));
7019       pItem->addrFillSub = addrTop;
7020       sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn);
7021       ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem));
7022       sqlite3Select(pParse, pSub, &dest);
7023       pItem->pTab->nRowLogEst = pSub->nSelectRow;
7024       pItem->fg.viaCoroutine = 1;
7025       pItem->regResult = dest.iSdst;
7026       sqlite3VdbeEndCoroutine(v, pItem->regReturn);
7027       sqlite3VdbeJumpHere(v, addrTop-1);
7028       sqlite3ClearTempRegCache(pParse);
7029     }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){
7030       /* This is a CTE for which materialization code has already been
7031       ** generated.  Invoke the subroutine to compute the materialization,
7032       ** the make the pItem->iCursor be a copy of the ephemerial table that
7033       ** holds the result of the materialization. */
7034       CteUse *pCteUse = pItem->u2.pCteUse;
7035       sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e);
7036       if( pItem->iCursor!=pCteUse->iCur ){
7037         sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur);
7038         VdbeComment((v, "%!S", pItem));
7039       }
7040       pSub->nSelectRow = pCteUse->nRowEst;
7041     }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){
7042       /* This view has already been materialized by a prior entry in
7043       ** this same FROM clause.  Reuse it. */
7044       if( pPrior->addrFillSub ){
7045         sqlite3VdbeAddOp2(v, OP_Gosub, pPrior->regReturn, pPrior->addrFillSub);
7046       }
7047       sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor);
7048       pSub->nSelectRow = pPrior->pSelect->nSelectRow;
7049     }else{
7050       /* Materialize the view.  If the view is not correlated, generate a
7051       ** subroutine to do the materialization so that subsequent uses of
7052       ** the same view can reuse the materialization. */
7053       int topAddr;
7054       int onceAddr = 0;
7055 
7056       pItem->regReturn = ++pParse->nMem;
7057       topAddr = sqlite3VdbeAddOp0(v, OP_Goto);
7058       pItem->addrFillSub = topAddr+1;
7059       pItem->fg.isMaterialized = 1;
7060       if( pItem->fg.isCorrelated==0 ){
7061         /* If the subquery is not correlated and if we are not inside of
7062         ** a trigger, then we only need to compute the value of the subquery
7063         ** once. */
7064         onceAddr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
7065         VdbeComment((v, "materialize %!S", pItem));
7066       }else{
7067         VdbeNoopComment((v, "materialize %!S", pItem));
7068       }
7069       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
7070       ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem));
7071       sqlite3Select(pParse, pSub, &dest);
7072       pItem->pTab->nRowLogEst = pSub->nSelectRow;
7073       if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
7074       sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1);
7075       VdbeComment((v, "end %!S", pItem));
7076       sqlite3VdbeJumpHere(v, topAddr);
7077       sqlite3ClearTempRegCache(pParse);
7078       if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){
7079         CteUse *pCteUse = pItem->u2.pCteUse;
7080         pCteUse->addrM9e = pItem->addrFillSub;
7081         pCteUse->regRtn = pItem->regReturn;
7082         pCteUse->iCur = pItem->iCursor;
7083         pCteUse->nRowEst = pSub->nSelectRow;
7084       }
7085     }
7086     if( db->mallocFailed ) goto select_end;
7087     pParse->nHeight -= sqlite3SelectExprHeight(p);
7088     pParse->zAuthContext = zSavedAuthContext;
7089 #endif
7090   }
7091 
7092   /* Various elements of the SELECT copied into local variables for
7093   ** convenience */
7094   pEList = p->pEList;
7095   pWhere = p->pWhere;
7096   pGroupBy = p->pGroupBy;
7097   pHaving = p->pHaving;
7098   sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0;
7099 
7100 #if TREETRACE_ENABLED
7101   if( sqlite3TreeTrace & 0x400 ){
7102     SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n"));
7103     sqlite3TreeViewSelect(0, p, 0);
7104   }
7105 #endif
7106 
7107   /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and
7108   ** if the select-list is the same as the ORDER BY list, then this query
7109   ** can be rewritten as a GROUP BY. In other words, this:
7110   **
7111   **     SELECT DISTINCT xyz FROM ... ORDER BY xyz
7112   **
7113   ** is transformed to:
7114   **
7115   **     SELECT xyz FROM ... GROUP BY xyz ORDER BY xyz
7116   **
7117   ** The second form is preferred as a single index (or temp-table) may be
7118   ** used for both the ORDER BY and DISTINCT processing. As originally
7119   ** written the query must use a temp-table for at least one of the ORDER
7120   ** BY and DISTINCT, and an index or separate temp-table for the other.
7121   */
7122   if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct
7123    && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0
7124 #ifndef SQLITE_OMIT_WINDOWFUNC
7125    && p->pWin==0
7126 #endif
7127   ){
7128     p->selFlags &= ~SF_Distinct;
7129     pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0);
7130     p->selFlags |= SF_Aggregate;
7131     /* Notice that even thought SF_Distinct has been cleared from p->selFlags,
7132     ** the sDistinct.isTnct is still set.  Hence, isTnct represents the
7133     ** original setting of the SF_Distinct flag, not the current setting */
7134     assert( sDistinct.isTnct );
7135     sDistinct.isTnct = 2;
7136 
7137 #if TREETRACE_ENABLED
7138     if( sqlite3TreeTrace & 0x400 ){
7139       SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
7140       sqlite3TreeViewSelect(0, p, 0);
7141     }
7142 #endif
7143   }
7144 
7145   /* If there is an ORDER BY clause, then create an ephemeral index to
7146   ** do the sorting.  But this sorting ephemeral index might end up
7147   ** being unused if the data can be extracted in pre-sorted order.
7148   ** If that is the case, then the OP_OpenEphemeral instruction will be
7149   ** changed to an OP_Noop once we figure out that the sorting index is
7150   ** not needed.  The sSort.addrSortIndex variable is used to facilitate
7151   ** that change.
7152   */
7153   if( sSort.pOrderBy ){
7154     KeyInfo *pKeyInfo;
7155     pKeyInfo = sqlite3KeyInfoFromExprList(
7156         pParse, sSort.pOrderBy, 0, pEList->nExpr);
7157     sSort.iECursor = pParse->nTab++;
7158     sSort.addrSortIndex =
7159       sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
7160           sSort.iECursor, sSort.pOrderBy->nExpr+1+pEList->nExpr, 0,
7161           (char*)pKeyInfo, P4_KEYINFO
7162       );
7163   }else{
7164     sSort.addrSortIndex = -1;
7165   }
7166 
7167   /* If the output is destined for a temporary table, open that table.
7168   */
7169   if( pDest->eDest==SRT_EphemTab ){
7170     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iSDParm, pEList->nExpr);
7171     if( p->selFlags & SF_NestedFrom ){
7172       /* Delete or NULL-out result columns that will never be used */
7173       int ii;
7174       for(ii=pEList->nExpr-1; ii>0 && pEList->a[ii].fg.bUsed==0; ii--){
7175         sqlite3ExprDelete(db, pEList->a[ii].pExpr);
7176         sqlite3DbFree(db, pEList->a[ii].zEName);
7177         pEList->nExpr--;
7178       }
7179       for(ii=0; ii<pEList->nExpr; ii++){
7180         if( pEList->a[ii].fg.bUsed==0 ) pEList->a[ii].pExpr->op = TK_NULL;
7181       }
7182     }
7183   }
7184 
7185   /* Set the limiter.
7186   */
7187   iEnd = sqlite3VdbeMakeLabel(pParse);
7188   if( (p->selFlags & SF_FixedLimit)==0 ){
7189     p->nSelectRow = 320;  /* 4 billion rows */
7190   }
7191   computeLimitRegisters(pParse, p, iEnd);
7192   if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
7193     sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
7194     sSort.sortFlags |= SORTFLAG_UseSorter;
7195   }
7196 
7197   /* Open an ephemeral index to use for the distinct set.
7198   */
7199   if( p->selFlags & SF_Distinct ){
7200     sDistinct.tabTnct = pParse->nTab++;
7201     sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
7202                        sDistinct.tabTnct, 0, 0,
7203                        (char*)sqlite3KeyInfoFromExprList(pParse, p->pEList,0,0),
7204                        P4_KEYINFO);
7205     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
7206     sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED;
7207   }else{
7208     sDistinct.eTnctType = WHERE_DISTINCT_NOOP;
7209   }
7210 
7211   if( !isAgg && pGroupBy==0 ){
7212     /* No aggregate functions and no GROUP BY clause */
7213     u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0)
7214                    | (p->selFlags & SF_FixedLimit);
7215 #ifndef SQLITE_OMIT_WINDOWFUNC
7216     Window *pWin = p->pWin;      /* Main window object (or NULL) */
7217     if( pWin ){
7218       sqlite3WindowCodeInit(pParse, p);
7219     }
7220 #endif
7221     assert( WHERE_USE_LIMIT==SF_FixedLimit );
7222 
7223 
7224     /* Begin the database scan. */
7225     SELECTTRACE(1,pParse,p,("WhereBegin\n"));
7226     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy,
7227                                p->pEList, p, wctrlFlags, p->nSelectRow);
7228     if( pWInfo==0 ) goto select_end;
7229     if( sqlite3WhereOutputRowCount(pWInfo) < p->nSelectRow ){
7230       p->nSelectRow = sqlite3WhereOutputRowCount(pWInfo);
7231     }
7232     if( sDistinct.isTnct && sqlite3WhereIsDistinct(pWInfo) ){
7233       sDistinct.eTnctType = sqlite3WhereIsDistinct(pWInfo);
7234     }
7235     if( sSort.pOrderBy ){
7236       sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo);
7237       sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo);
7238       if( sSort.nOBSat==sSort.pOrderBy->nExpr ){
7239         sSort.pOrderBy = 0;
7240       }
7241     }
7242     SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
7243 
7244     /* If sorting index that was created by a prior OP_OpenEphemeral
7245     ** instruction ended up not being needed, then change the OP_OpenEphemeral
7246     ** into an OP_Noop.
7247     */
7248     if( sSort.addrSortIndex>=0 && sSort.pOrderBy==0 ){
7249       sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex);
7250     }
7251 
7252     assert( p->pEList==pEList );
7253 #ifndef SQLITE_OMIT_WINDOWFUNC
7254     if( pWin ){
7255       int addrGosub = sqlite3VdbeMakeLabel(pParse);
7256       int iCont = sqlite3VdbeMakeLabel(pParse);
7257       int iBreak = sqlite3VdbeMakeLabel(pParse);
7258       int regGosub = ++pParse->nMem;
7259 
7260       sqlite3WindowCodeStep(pParse, p, pWInfo, regGosub, addrGosub);
7261 
7262       sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
7263       sqlite3VdbeResolveLabel(v, addrGosub);
7264       VdbeNoopComment((v, "inner-loop subroutine"));
7265       sSort.labelOBLopt = 0;
7266       selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, iCont, iBreak);
7267       sqlite3VdbeResolveLabel(v, iCont);
7268       sqlite3VdbeAddOp1(v, OP_Return, regGosub);
7269       VdbeComment((v, "end inner-loop subroutine"));
7270       sqlite3VdbeResolveLabel(v, iBreak);
7271     }else
7272 #endif /* SQLITE_OMIT_WINDOWFUNC */
7273     {
7274       /* Use the standard inner loop. */
7275       selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest,
7276           sqlite3WhereContinueLabel(pWInfo),
7277           sqlite3WhereBreakLabel(pWInfo));
7278 
7279       /* End the database scan loop.
7280       */
7281       SELECTTRACE(1,pParse,p,("WhereEnd\n"));
7282       sqlite3WhereEnd(pWInfo);
7283     }
7284   }else{
7285     /* This case when there exist aggregate functions or a GROUP BY clause
7286     ** or both */
7287     NameContext sNC;    /* Name context for processing aggregate information */
7288     int iAMem;          /* First Mem address for storing current GROUP BY */
7289     int iBMem;          /* First Mem address for previous GROUP BY */
7290     int iUseFlag;       /* Mem address holding flag indicating that at least
7291                         ** one row of the input to the aggregator has been
7292                         ** processed */
7293     int iAbortFlag;     /* Mem address which causes query abort if positive */
7294     int groupBySort;    /* Rows come from source in GROUP BY order */
7295     int addrEnd;        /* End of processing for this SELECT */
7296     int sortPTab = 0;   /* Pseudotable used to decode sorting results */
7297     int sortOut = 0;    /* Output register from the sorter */
7298     int orderByGrp = 0; /* True if the GROUP BY and ORDER BY are the same */
7299 
7300     /* Remove any and all aliases between the result set and the
7301     ** GROUP BY clause.
7302     */
7303     if( pGroupBy ){
7304       int k;                        /* Loop counter */
7305       struct ExprList_item *pItem;  /* For looping over expression in a list */
7306 
7307       for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
7308         pItem->u.x.iAlias = 0;
7309       }
7310       for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
7311         pItem->u.x.iAlias = 0;
7312       }
7313       assert( 66==sqlite3LogEst(100) );
7314       if( p->nSelectRow>66 ) p->nSelectRow = 66;
7315 
7316       /* If there is both a GROUP BY and an ORDER BY clause and they are
7317       ** identical, then it may be possible to disable the ORDER BY clause
7318       ** on the grounds that the GROUP BY will cause elements to come out
7319       ** in the correct order. It also may not - the GROUP BY might use a
7320       ** database index that causes rows to be grouped together as required
7321       ** but not actually sorted. Either way, record the fact that the
7322       ** ORDER BY and GROUP BY clauses are the same by setting the orderByGrp
7323       ** variable.  */
7324       if( sSort.pOrderBy && pGroupBy->nExpr==sSort.pOrderBy->nExpr ){
7325         int ii;
7326         /* The GROUP BY processing doesn't care whether rows are delivered in
7327         ** ASC or DESC order - only that each group is returned contiguously.
7328         ** So set the ASC/DESC flags in the GROUP BY to match those in the
7329         ** ORDER BY to maximize the chances of rows being delivered in an
7330         ** order that makes the ORDER BY redundant.  */
7331         for(ii=0; ii<pGroupBy->nExpr; ii++){
7332           u8 sortFlags;
7333           sortFlags = sSort.pOrderBy->a[ii].fg.sortFlags & KEYINFO_ORDER_DESC;
7334           pGroupBy->a[ii].fg.sortFlags = sortFlags;
7335         }
7336         if( sqlite3ExprListCompare(pGroupBy, sSort.pOrderBy, -1)==0 ){
7337           orderByGrp = 1;
7338         }
7339       }
7340     }else{
7341       assert( 0==sqlite3LogEst(1) );
7342       p->nSelectRow = 0;
7343     }
7344 
7345     /* Create a label to jump to when we want to abort the query */
7346     addrEnd = sqlite3VdbeMakeLabel(pParse);
7347 
7348     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
7349     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
7350     ** SELECT statement.
7351     */
7352     pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) );
7353     if( pAggInfo ){
7354       sqlite3ParserAddCleanup(pParse,
7355           (void(*)(sqlite3*,void*))agginfoFree, pAggInfo);
7356       testcase( pParse->earlyCleanup );
7357     }
7358     if( db->mallocFailed ){
7359       goto select_end;
7360     }
7361     pAggInfo->selId = p->selId;
7362     memset(&sNC, 0, sizeof(sNC));
7363     sNC.pParse = pParse;
7364     sNC.pSrcList = pTabList;
7365     sNC.uNC.pAggInfo = pAggInfo;
7366     VVA_ONLY( sNC.ncFlags = NC_UAggInfo; )
7367     pAggInfo->mnReg = pParse->nMem+1;
7368     pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
7369     pAggInfo->pGroupBy = pGroupBy;
7370     sqlite3ExprAnalyzeAggList(&sNC, pEList);
7371     sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy);
7372     if( pHaving ){
7373       if( pGroupBy ){
7374         assert( pWhere==p->pWhere );
7375         assert( pHaving==p->pHaving );
7376         assert( pGroupBy==p->pGroupBy );
7377         havingToWhere(pParse, p);
7378         pWhere = p->pWhere;
7379       }
7380       sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
7381     }
7382     pAggInfo->nAccumulator = pAggInfo->nColumn;
7383     if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){
7384       minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy);
7385     }else{
7386       minMaxFlag = WHERE_ORDERBY_NORMAL;
7387     }
7388     for(i=0; i<pAggInfo->nFunc; i++){
7389       Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
7390       assert( ExprUseXList(pExpr) );
7391       sNC.ncFlags |= NC_InAggFunc;
7392       sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList);
7393 #ifndef SQLITE_OMIT_WINDOWFUNC
7394       assert( !IsWindowFunc(pExpr) );
7395       if( ExprHasProperty(pExpr, EP_WinFunc) ){
7396         sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter);
7397       }
7398 #endif
7399       sNC.ncFlags &= ~NC_InAggFunc;
7400     }
7401     pAggInfo->mxReg = pParse->nMem;
7402     if( db->mallocFailed ) goto select_end;
7403 #if TREETRACE_ENABLED
7404     if( sqlite3TreeTrace & 0x400 ){
7405       int ii;
7406       SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
7407       sqlite3TreeViewSelect(0, p, 0);
7408       if( minMaxFlag ){
7409         sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
7410         sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
7411       }
7412       for(ii=0; ii<pAggInfo->nColumn; ii++){
7413         sqlite3DebugPrintf("agg-column[%d] iMem=%d\n",
7414             ii, pAggInfo->aCol[ii].iMem);
7415         sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
7416       }
7417       for(ii=0; ii<pAggInfo->nFunc; ii++){
7418         sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
7419             ii, pAggInfo->aFunc[ii].iMem);
7420         sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
7421       }
7422     }
7423 #endif
7424 
7425 
7426     /* Processing for aggregates with GROUP BY is very different and
7427     ** much more complex than aggregates without a GROUP BY.
7428     */
7429     if( pGroupBy ){
7430       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
7431       int addr1;          /* A-vs-B comparision jump */
7432       int addrOutputRow;  /* Start of subroutine that outputs a result row */
7433       int regOutputRow;   /* Return address register for output subroutine */
7434       int addrSetAbort;   /* Set the abort flag and return */
7435       int addrTopOfLoop;  /* Top of the input loop */
7436       int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
7437       int addrReset;      /* Subroutine for resetting the accumulator */
7438       int regReset;       /* Return address register for reset subroutine */
7439       ExprList *pDistinct = 0;
7440       u16 distFlag = 0;
7441       int eDist = WHERE_DISTINCT_NOOP;
7442 
7443       if( pAggInfo->nFunc==1
7444        && pAggInfo->aFunc[0].iDistinct>=0
7445        && ALWAYS(pAggInfo->aFunc[0].pFExpr!=0)
7446        && ALWAYS(ExprUseXList(pAggInfo->aFunc[0].pFExpr))
7447        && pAggInfo->aFunc[0].pFExpr->x.pList!=0
7448       ){
7449         Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr;
7450         pExpr = sqlite3ExprDup(db, pExpr, 0);
7451         pDistinct = sqlite3ExprListDup(db, pGroupBy, 0);
7452         pDistinct = sqlite3ExprListAppend(pParse, pDistinct, pExpr);
7453         distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0;
7454       }
7455 
7456       /* If there is a GROUP BY clause we might need a sorting index to
7457       ** implement it.  Allocate that sorting index now.  If it turns out
7458       ** that we do not need it after all, the OP_SorterOpen instruction
7459       ** will be converted into a Noop.
7460       */
7461       pAggInfo->sortingIdx = pParse->nTab++;
7462       pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pGroupBy,
7463                                             0, pAggInfo->nColumn);
7464       addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen,
7465           pAggInfo->sortingIdx, pAggInfo->nSortingColumn,
7466           0, (char*)pKeyInfo, P4_KEYINFO);
7467 
7468       /* Initialize memory locations used by GROUP BY aggregate processing
7469       */
7470       iUseFlag = ++pParse->nMem;
7471       iAbortFlag = ++pParse->nMem;
7472       regOutputRow = ++pParse->nMem;
7473       addrOutputRow = sqlite3VdbeMakeLabel(pParse);
7474       regReset = ++pParse->nMem;
7475       addrReset = sqlite3VdbeMakeLabel(pParse);
7476       iAMem = pParse->nMem + 1;
7477       pParse->nMem += pGroupBy->nExpr;
7478       iBMem = pParse->nMem + 1;
7479       pParse->nMem += pGroupBy->nExpr;
7480       sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
7481       VdbeComment((v, "clear abort flag"));
7482       sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
7483 
7484       /* Begin a loop that will extract all source rows in GROUP BY order.
7485       ** This might involve two separate loops with an OP_Sort in between, or
7486       ** it might be a single loop that uses an index to extract information
7487       ** in the right order to begin with.
7488       */
7489       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
7490       SELECTTRACE(1,pParse,p,("WhereBegin\n"));
7491       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct,
7492           0, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY)
7493           |  (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0
7494       );
7495       if( pWInfo==0 ){
7496         sqlite3ExprListDelete(db, pDistinct);
7497         goto select_end;
7498       }
7499       eDist = sqlite3WhereIsDistinct(pWInfo);
7500       SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
7501       if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){
7502         /* The optimizer is able to deliver rows in group by order so
7503         ** we do not have to sort.  The OP_OpenEphemeral table will be
7504         ** cancelled later because we still need to use the pKeyInfo
7505         */
7506         groupBySort = 0;
7507       }else{
7508         /* Rows are coming out in undetermined order.  We have to push
7509         ** each row into a sorting index, terminate the first loop,
7510         ** then loop over the sorting index in order to get the output
7511         ** in sorted order
7512         */
7513         int regBase;
7514         int regRecord;
7515         int nCol;
7516         int nGroupBy;
7517 
7518         explainTempTable(pParse,
7519             (sDistinct.isTnct && (p->selFlags&SF_Distinct)==0) ?
7520                     "DISTINCT" : "GROUP BY");
7521 
7522         groupBySort = 1;
7523         nGroupBy = pGroupBy->nExpr;
7524         nCol = nGroupBy;
7525         j = nGroupBy;
7526         for(i=0; i<pAggInfo->nColumn; i++){
7527           if( pAggInfo->aCol[i].iSorterColumn>=j ){
7528             nCol++;
7529             j++;
7530           }
7531         }
7532         regBase = sqlite3GetTempRange(pParse, nCol);
7533         sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0);
7534         j = nGroupBy;
7535         for(i=0; i<pAggInfo->nColumn; i++){
7536           struct AggInfo_col *pCol = &pAggInfo->aCol[i];
7537           if( pCol->iSorterColumn>=j ){
7538             int r1 = j + regBase;
7539             sqlite3ExprCodeGetColumnOfTable(v,
7540                                pCol->pTab, pCol->iTable, pCol->iColumn, r1);
7541             j++;
7542           }
7543         }
7544         regRecord = sqlite3GetTempReg(pParse);
7545         sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
7546         sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
7547         sqlite3ReleaseTempReg(pParse, regRecord);
7548         sqlite3ReleaseTempRange(pParse, regBase, nCol);
7549         SELECTTRACE(1,pParse,p,("WhereEnd\n"));
7550         sqlite3WhereEnd(pWInfo);
7551         pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++;
7552         sortOut = sqlite3GetTempReg(pParse);
7553         sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol);
7554         sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd);
7555         VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v);
7556         pAggInfo->useSortingIdx = 1;
7557       }
7558 
7559       /* If the index or temporary table used by the GROUP BY sort
7560       ** will naturally deliver rows in the order required by the ORDER BY
7561       ** clause, cancel the ephemeral table open coded earlier.
7562       **
7563       ** This is an optimization - the correct answer should result regardless.
7564       ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER to
7565       ** disable this optimization for testing purposes.  */
7566       if( orderByGrp && OptimizationEnabled(db, SQLITE_GroupByOrder)
7567        && (groupBySort || sqlite3WhereIsSorted(pWInfo))
7568       ){
7569         sSort.pOrderBy = 0;
7570         sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex);
7571       }
7572 
7573       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
7574       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
7575       ** Then compare the current GROUP BY terms against the GROUP BY terms
7576       ** from the previous row currently stored in a0, a1, a2...
7577       */
7578       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
7579       if( groupBySort ){
7580         sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx,
7581                           sortOut, sortPTab);
7582       }
7583       for(j=0; j<pGroupBy->nExpr; j++){
7584         if( groupBySort ){
7585           sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
7586         }else{
7587           pAggInfo->directMode = 1;
7588           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
7589         }
7590       }
7591       sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
7592                           (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO);
7593       addr1 = sqlite3VdbeCurrentAddr(v);
7594       sqlite3VdbeAddOp3(v, OP_Jump, addr1+1, 0, addr1+1); VdbeCoverage(v);
7595 
7596       /* Generate code that runs whenever the GROUP BY changes.
7597       ** Changes in the GROUP BY are detected by the previous code
7598       ** block.  If there were no changes, this block is skipped.
7599       **
7600       ** This code copies current group by terms in b0,b1,b2,...
7601       ** over to a0,a1,a2.  It then calls the output subroutine
7602       ** and resets the aggregate accumulator registers in preparation
7603       ** for the next GROUP BY batch.
7604       */
7605       sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
7606       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
7607       VdbeComment((v, "output one row"));
7608       sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); VdbeCoverage(v);
7609       VdbeComment((v, "check abort flag"));
7610       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
7611       VdbeComment((v, "reset accumulator"));
7612 
7613       /* Update the aggregate accumulators based on the content of
7614       ** the current row
7615       */
7616       sqlite3VdbeJumpHere(v, addr1);
7617       updateAccumulator(pParse, iUseFlag, pAggInfo, eDist);
7618       sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
7619       VdbeComment((v, "indicate data in accumulator"));
7620 
7621       /* End of the loop
7622       */
7623       if( groupBySort ){
7624         sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop);
7625         VdbeCoverage(v);
7626       }else{
7627         SELECTTRACE(1,pParse,p,("WhereEnd\n"));
7628         sqlite3WhereEnd(pWInfo);
7629         sqlite3VdbeChangeToNoop(v, addrSortingIdx);
7630       }
7631       sqlite3ExprListDelete(db, pDistinct);
7632 
7633       /* Output the final row of result
7634       */
7635       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
7636       VdbeComment((v, "output final row"));
7637 
7638       /* Jump over the subroutines
7639       */
7640       sqlite3VdbeGoto(v, addrEnd);
7641 
7642       /* Generate a subroutine that outputs a single row of the result
7643       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
7644       ** is less than or equal to zero, the subroutine is a no-op.  If
7645       ** the processing calls for the query to abort, this subroutine
7646       ** increments the iAbortFlag memory location before returning in
7647       ** order to signal the caller to abort.
7648       */
7649       addrSetAbort = sqlite3VdbeCurrentAddr(v);
7650       sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
7651       VdbeComment((v, "set abort flag"));
7652       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
7653       sqlite3VdbeResolveLabel(v, addrOutputRow);
7654       addrOutputRow = sqlite3VdbeCurrentAddr(v);
7655       sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
7656       VdbeCoverage(v);
7657       VdbeComment((v, "Groupby result generator entry point"));
7658       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
7659       finalizeAggFunctions(pParse, pAggInfo);
7660       sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
7661       selectInnerLoop(pParse, p, -1, &sSort,
7662                       &sDistinct, pDest,
7663                       addrOutputRow+1, addrSetAbort);
7664       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
7665       VdbeComment((v, "end groupby result generator"));
7666 
7667       /* Generate a subroutine that will reset the group-by accumulator
7668       */
7669       sqlite3VdbeResolveLabel(v, addrReset);
7670       resetAccumulator(pParse, pAggInfo);
7671       sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
7672       VdbeComment((v, "indicate accumulator empty"));
7673       sqlite3VdbeAddOp1(v, OP_Return, regReset);
7674 
7675       if( distFlag!=0 && eDist!=WHERE_DISTINCT_NOOP ){
7676         struct AggInfo_func *pF = &pAggInfo->aFunc[0];
7677         fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr);
7678       }
7679     } /* endif pGroupBy.  Begin aggregate queries without GROUP BY: */
7680     else {
7681       Table *pTab;
7682       if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){
7683         /* If isSimpleCount() returns a pointer to a Table structure, then
7684         ** the SQL statement is of the form:
7685         **
7686         **   SELECT count(*) FROM <tbl>
7687         **
7688         ** where the Table structure returned represents table <tbl>.
7689         **
7690         ** This statement is so common that it is optimized specially. The
7691         ** OP_Count instruction is executed either on the intkey table that
7692         ** contains the data for table <tbl> or on one of its indexes. It
7693         ** is better to execute the op on an index, as indexes are almost
7694         ** always spread across less pages than their corresponding tables.
7695         */
7696         const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
7697         const int iCsr = pParse->nTab++;     /* Cursor to scan b-tree */
7698         Index *pIdx;                         /* Iterator variable */
7699         KeyInfo *pKeyInfo = 0;               /* Keyinfo for scanned index */
7700         Index *pBest = 0;                    /* Best index found so far */
7701         Pgno iRoot = pTab->tnum;             /* Root page of scanned b-tree */
7702 
7703         sqlite3CodeVerifySchema(pParse, iDb);
7704         sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
7705 
7706         /* Search for the index that has the lowest scan cost.
7707         **
7708         ** (2011-04-15) Do not do a full scan of an unordered index.
7709         **
7710         ** (2013-10-03) Do not count the entries in a partial index.
7711         **
7712         ** In practice the KeyInfo structure will not be used. It is only
7713         ** passed to keep OP_OpenRead happy.
7714         */
7715         if( !HasRowid(pTab) ) pBest = sqlite3PrimaryKeyIndex(pTab);
7716         if( !p->pSrc->a[0].fg.notIndexed ){
7717           for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
7718             if( pIdx->bUnordered==0
7719              && pIdx->szIdxRow<pTab->szTabRow
7720              && pIdx->pPartIdxWhere==0
7721              && (!pBest || pIdx->szIdxRow<pBest->szIdxRow)
7722             ){
7723               pBest = pIdx;
7724             }
7725           }
7726         }
7727         if( pBest ){
7728           iRoot = pBest->tnum;
7729           pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pBest);
7730         }
7731 
7732         /* Open a read-only cursor, execute the OP_Count, close the cursor. */
7733         sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, (int)iRoot, iDb, 1);
7734         if( pKeyInfo ){
7735           sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO);
7736         }
7737         sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem);
7738         sqlite3VdbeAddOp1(v, OP_Close, iCsr);
7739         explainSimpleCount(pParse, pTab, pBest);
7740       }else{
7741         int regAcc = 0;           /* "populate accumulators" flag */
7742         ExprList *pDistinct = 0;
7743         u16 distFlag = 0;
7744         int eDist;
7745 
7746         /* If there are accumulator registers but no min() or max() functions
7747         ** without FILTER clauses, allocate register regAcc. Register regAcc
7748         ** will contain 0 the first time the inner loop runs, and 1 thereafter.
7749         ** The code generated by updateAccumulator() uses this to ensure
7750         ** that the accumulator registers are (a) updated only once if
7751         ** there are no min() or max functions or (b) always updated for the
7752         ** first row visited by the aggregate, so that they are updated at
7753         ** least once even if the FILTER clause means the min() or max()
7754         ** function visits zero rows.  */
7755         if( pAggInfo->nAccumulator ){
7756           for(i=0; i<pAggInfo->nFunc; i++){
7757             if( ExprHasProperty(pAggInfo->aFunc[i].pFExpr, EP_WinFunc) ){
7758               continue;
7759             }
7760             if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){
7761               break;
7762             }
7763           }
7764           if( i==pAggInfo->nFunc ){
7765             regAcc = ++pParse->nMem;
7766             sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc);
7767           }
7768         }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){
7769           assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) );
7770           pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList;
7771           distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0;
7772         }
7773 
7774         /* This case runs if the aggregate has no GROUP BY clause.  The
7775         ** processing is much simpler since there is only a single row
7776         ** of output.
7777         */
7778         assert( p->pGroupBy==0 );
7779         resetAccumulator(pParse, pAggInfo);
7780 
7781         /* If this query is a candidate for the min/max optimization, then
7782         ** minMaxFlag will have been previously set to either
7783         ** WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX and pMinMaxOrderBy will
7784         ** be an appropriate ORDER BY expression for the optimization.
7785         */
7786         assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 );
7787         assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 );
7788 
7789         SELECTTRACE(1,pParse,p,("WhereBegin\n"));
7790         pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy,
7791                                    pDistinct, 0, minMaxFlag|distFlag, 0);
7792         if( pWInfo==0 ){
7793           goto select_end;
7794         }
7795         SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
7796         eDist = sqlite3WhereIsDistinct(pWInfo);
7797         updateAccumulator(pParse, regAcc, pAggInfo, eDist);
7798         if( eDist!=WHERE_DISTINCT_NOOP ){
7799           struct AggInfo_func *pF = pAggInfo->aFunc;
7800           if( pF ){
7801             fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr);
7802           }
7803         }
7804 
7805         if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc);
7806         if( minMaxFlag ){
7807           sqlite3WhereMinMaxOptEarlyOut(v, pWInfo);
7808         }
7809         SELECTTRACE(1,pParse,p,("WhereEnd\n"));
7810         sqlite3WhereEnd(pWInfo);
7811         finalizeAggFunctions(pParse, pAggInfo);
7812       }
7813 
7814       sSort.pOrderBy = 0;
7815       sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
7816       selectInnerLoop(pParse, p, -1, 0, 0,
7817                       pDest, addrEnd, addrEnd);
7818     }
7819     sqlite3VdbeResolveLabel(v, addrEnd);
7820 
7821   } /* endif aggregate query */
7822 
7823   if( sDistinct.eTnctType==WHERE_DISTINCT_UNORDERED ){
7824     explainTempTable(pParse, "DISTINCT");
7825   }
7826 
7827   /* If there is an ORDER BY clause, then we need to sort the results
7828   ** and send them to the callback one by one.
7829   */
7830   if( sSort.pOrderBy ){
7831     explainTempTable(pParse,
7832                      sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY");
7833     assert( p->pEList==pEList );
7834     generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest);
7835   }
7836 
7837   /* Jump here to skip this query
7838   */
7839   sqlite3VdbeResolveLabel(v, iEnd);
7840 
7841   /* The SELECT has been coded. If there is an error in the Parse structure,
7842   ** set the return code to 1. Otherwise 0. */
7843   rc = (pParse->nErr>0);
7844 
7845   /* Control jumps to here if an error is encountered above, or upon
7846   ** successful coding of the SELECT.
7847   */
7848 select_end:
7849   assert( db->mallocFailed==0 || db->mallocFailed==1 );
7850   assert( db->mallocFailed==0 || pParse->nErr!=0 );
7851   sqlite3ExprListDelete(db, pMinMaxOrderBy);
7852 #ifdef SQLITE_DEBUG
7853   if( pAggInfo && !db->mallocFailed ){
7854     for(i=0; i<pAggInfo->nColumn; i++){
7855       Expr *pExpr = pAggInfo->aCol[i].pCExpr;
7856       assert( pExpr!=0 );
7857       assert( pExpr->pAggInfo==pAggInfo );
7858       assert( pExpr->iAgg==i );
7859     }
7860     for(i=0; i<pAggInfo->nFunc; i++){
7861       Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
7862       assert( pExpr!=0 );
7863       assert( pExpr->pAggInfo==pAggInfo );
7864       assert( pExpr->iAgg==i );
7865     }
7866   }
7867 #endif
7868 
7869 #if TREETRACE_ENABLED
7870   SELECTTRACE(0x1,pParse,p,("end processing\n"));
7871   if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
7872     sqlite3TreeViewSelect(0, p, 0);
7873   }
7874 #endif
7875   ExplainQueryPlanPop(pParse);
7876   return rc;
7877 }
7878