modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/select.c (about)

     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  ** Trace output macros
    19  */
    20  #if SELECTTRACE_ENABLED
    21  /***/ int sqlite3SelectTrace = 0;
    22  # define SELECTTRACE(K,P,S,X)  \
    23    if(sqlite3SelectTrace&(K))   \
    24      sqlite3DebugPrintf("%*s%s.%p: ",(P)->nSelectIndent*2-2,"",\
    25          (S)->zSelName,(S)),\
    26      sqlite3DebugPrintf X
    27  #else
    28  # define SELECTTRACE(K,P,S,X)
    29  #endif
    30  
    31  
    32  /*
    33  ** An instance of the following object is used to record information about
    34  ** how to process the DISTINCT keyword, to simplify passing that information
    35  ** into the selectInnerLoop() routine.
    36  */
    37  typedef struct DistinctCtx DistinctCtx;
    38  struct DistinctCtx {
    39    u8 isTnct;      /* True if the DISTINCT keyword is present */
    40    u8 eTnctType;   /* One of the WHERE_DISTINCT_* operators */
    41    int tabTnct;    /* Ephemeral table used for DISTINCT processing */
    42    int addrTnct;   /* Address of OP_OpenEphemeral opcode for tabTnct */
    43  };
    44  
    45  /*
    46  ** An instance of the following object is used to record information about
    47  ** the ORDER BY (or GROUP BY) clause of query is being coded.
    48  */
    49  typedef struct SortCtx SortCtx;
    50  struct SortCtx {
    51    ExprList *pOrderBy;   /* The ORDER BY (or GROUP BY clause) */
    52    int nOBSat;           /* Number of ORDER BY terms satisfied by indices */
    53    int iECursor;         /* Cursor number for the sorter */
    54    int regReturn;        /* Register holding block-output return address */
    55    int labelBkOut;       /* Start label for the block-output subroutine */
    56    int addrSortIndex;    /* Address of the OP_SorterOpen or OP_OpenEphemeral */
    57    int labelDone;        /* Jump here when done, ex: LIMIT reached */
    58    u8 sortFlags;         /* Zero or more SORTFLAG_* bits */
    59    u8 bOrderedInnerLoop; /* ORDER BY correctly sorts the inner loop */
    60  };
    61  #define SORTFLAG_UseSorter  0x01   /* Use SorterOpen instead of OpenEphemeral */
    62  
    63  /*
    64  ** Delete all the content of a Select structure.  Deallocate the structure
    65  ** itself only if bFree is true.
    66  */
    67  static void clearSelect(sqlite3 *db, Select *p, int bFree){
    68    while( p ){
    69      Select *pPrior = p->pPrior;
    70      sqlite3ExprListDelete(db, p->pEList);
    71      sqlite3SrcListDelete(db, p->pSrc);
    72      sqlite3ExprDelete(db, p->pWhere);
    73      sqlite3ExprListDelete(db, p->pGroupBy);
    74      sqlite3ExprDelete(db, p->pHaving);
    75      sqlite3ExprListDelete(db, p->pOrderBy);
    76      sqlite3ExprDelete(db, p->pLimit);
    77      sqlite3ExprDelete(db, p->pOffset);
    78      if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
    79      if( bFree ) sqlite3DbFreeNN(db, p);
    80      p = pPrior;
    81      bFree = 1;
    82    }
    83  }
    84  
    85  /*
    86  ** Initialize a SelectDest structure.
    87  */
    88  void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
    89    pDest->eDest = (u8)eDest;
    90    pDest->iSDParm = iParm;
    91    pDest->zAffSdst = 0;
    92    pDest->iSdst = 0;
    93    pDest->nSdst = 0;
    94  }
    95  
    96  
    97  /*
    98  ** Allocate a new Select structure and return a pointer to that
    99  ** structure.
   100  */
   101  Select *sqlite3SelectNew(
   102    Parse *pParse,        /* Parsing context */
   103    ExprList *pEList,     /* which columns to include in the result */
   104    SrcList *pSrc,        /* the FROM clause -- which tables to scan */
   105    Expr *pWhere,         /* the WHERE clause */
   106    ExprList *pGroupBy,   /* the GROUP BY clause */
   107    Expr *pHaving,        /* the HAVING clause */
   108    ExprList *pOrderBy,   /* the ORDER BY clause */
   109    u32 selFlags,         /* Flag parameters, such as SF_Distinct */
   110    Expr *pLimit,         /* LIMIT value.  NULL means not used */
   111    Expr *pOffset         /* OFFSET value.  NULL means no offset */
   112  ){
   113    Select *pNew;
   114    Select standin;
   115    pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) );
   116    if( pNew==0 ){
   117      assert( pParse->db->mallocFailed );
   118      pNew = &standin;
   119    }
   120    if( pEList==0 ){
   121      pEList = sqlite3ExprListAppend(pParse, 0,
   122                                     sqlite3Expr(pParse->db,TK_ASTERISK,0));
   123    }
   124    pNew->pEList = pEList;
   125    pNew->op = TK_SELECT;
   126    pNew->selFlags = selFlags;
   127    pNew->iLimit = 0;
   128    pNew->iOffset = 0;
   129  #if SELECTTRACE_ENABLED
   130    pNew->zSelName[0] = 0;
   131  #endif
   132    pNew->addrOpenEphm[0] = -1;
   133    pNew->addrOpenEphm[1] = -1;
   134    pNew->nSelectRow = 0;
   135    if( pSrc==0 ) pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*pSrc));
   136    pNew->pSrc = pSrc;
   137    pNew->pWhere = pWhere;
   138    pNew->pGroupBy = pGroupBy;
   139    pNew->pHaving = pHaving;
   140    pNew->pOrderBy = pOrderBy;
   141    pNew->pPrior = 0;
   142    pNew->pNext = 0;
   143    pNew->pLimit = pLimit;
   144    pNew->pOffset = pOffset;
   145    pNew->pWith = 0;
   146    assert( pOffset==0 || pLimit!=0 || pParse->nErr>0
   147                       || pParse->db->mallocFailed!=0 );
   148    if( pParse->db->mallocFailed ) {
   149      clearSelect(pParse->db, pNew, pNew!=&standin);
   150      pNew = 0;
   151    }else{
   152      assert( pNew->pSrc!=0 || pParse->nErr>0 );
   153    }
   154    assert( pNew!=&standin );
   155    return pNew;
   156  }
   157  
   158  #if SELECTTRACE_ENABLED
   159  /*
   160  ** Set the name of a Select object
   161  */
   162  void sqlite3SelectSetName(Select *p, const char *zName){
   163    if( p && zName ){
   164      sqlite3_snprintf(sizeof(p->zSelName), p->zSelName, "%s", zName);
   165    }
   166  }
   167  #endif
   168  
   169  
   170  /*
   171  ** Delete the given Select structure and all of its substructures.
   172  */
   173  void sqlite3SelectDelete(sqlite3 *db, Select *p){
   174    if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1);
   175  }
   176  
   177  /*
   178  ** Return a pointer to the right-most SELECT statement in a compound.
   179  */
   180  static Select *findRightmost(Select *p){
   181    while( p->pNext ) p = p->pNext;
   182    return p;
   183  }
   184  
   185  /*
   186  ** Given 1 to 3 identifiers preceding the JOIN keyword, determine the
   187  ** type of join.  Return an integer constant that expresses that type
   188  ** in terms of the following bit values:
   189  **
   190  **     JT_INNER
   191  **     JT_CROSS
   192  **     JT_OUTER
   193  **     JT_NATURAL
   194  **     JT_LEFT
   195  **     JT_RIGHT
   196  **
   197  ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
   198  **
   199  ** If an illegal or unsupported join type is seen, then still return
   200  ** a join type, but put an error in the pParse structure.
   201  */
   202  int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
   203    int jointype = 0;
   204    Token *apAll[3];
   205    Token *p;
   206                               /*   0123456789 123456789 123456789 123 */
   207    static const char zKeyText[] = "naturaleftouterightfullinnercross";
   208    static const struct {
   209      u8 i;        /* Beginning of keyword text in zKeyText[] */
   210      u8 nChar;    /* Length of the keyword in characters */
   211      u8 code;     /* Join type mask */
   212    } aKeyword[] = {
   213      /* natural */ { 0,  7, JT_NATURAL                },
   214      /* left    */ { 6,  4, JT_LEFT|JT_OUTER          },
   215      /* outer   */ { 10, 5, JT_OUTER                  },
   216      /* right   */ { 14, 5, JT_RIGHT|JT_OUTER         },
   217      /* full    */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
   218      /* inner   */ { 23, 5, JT_INNER                  },
   219      /* cross   */ { 28, 5, JT_INNER|JT_CROSS         },
   220    };
   221    int i, j;
   222    apAll[0] = pA;
   223    apAll[1] = pB;
   224    apAll[2] = pC;
   225    for(i=0; i<3 && apAll[i]; i++){
   226      p = apAll[i];
   227      for(j=0; j<ArraySize(aKeyword); j++){
   228        if( p->n==aKeyword[j].nChar 
   229            && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
   230          jointype |= aKeyword[j].code;
   231          break;
   232        }
   233      }
   234      testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
   235      if( j>=ArraySize(aKeyword) ){
   236        jointype |= JT_ERROR;
   237        break;
   238      }
   239    }
   240    if(
   241       (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
   242       (jointype & JT_ERROR)!=0
   243    ){
   244      const char *zSp = " ";
   245      assert( pB!=0 );
   246      if( pC==0 ){ zSp++; }
   247      sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
   248         "%T %T%s%T", pA, pB, zSp, pC);
   249      jointype = JT_INNER;
   250    }else if( (jointype & JT_OUTER)!=0 
   251           && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){
   252      sqlite3ErrorMsg(pParse, 
   253        "RIGHT and FULL OUTER JOINs are not currently supported");
   254      jointype = JT_INNER;
   255    }
   256    return jointype;
   257  }
   258  
   259  /*
   260  ** Return the index of a column in a table.  Return -1 if the column
   261  ** is not contained in the table.
   262  */
   263  static int columnIndex(Table *pTab, const char *zCol){
   264    int i;
   265    for(i=0; i<pTab->nCol; i++){
   266      if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
   267    }
   268    return -1;
   269  }
   270  
   271  /*
   272  ** Search the first N tables in pSrc, from left to right, looking for a
   273  ** table that has a column named zCol.  
   274  **
   275  ** When found, set *piTab and *piCol to the table index and column index
   276  ** of the matching column and return TRUE.
   277  **
   278  ** If not found, return FALSE.
   279  */
   280  static int tableAndColumnIndex(
   281    SrcList *pSrc,       /* Array of tables to search */
   282    int N,               /* Number of tables in pSrc->a[] to search */
   283    const char *zCol,    /* Name of the column we are looking for */
   284    int *piTab,          /* Write index of pSrc->a[] here */
   285    int *piCol           /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
   286  ){
   287    int i;               /* For looping over tables in pSrc */
   288    int iCol;            /* Index of column matching zCol */
   289  
   290    assert( (piTab==0)==(piCol==0) );  /* Both or neither are NULL */
   291    for(i=0; i<N; i++){
   292      iCol = columnIndex(pSrc->a[i].pTab, zCol);
   293      if( iCol>=0 ){
   294        if( piTab ){
   295          *piTab = i;
   296          *piCol = iCol;
   297        }
   298        return 1;
   299      }
   300    }
   301    return 0;
   302  }
   303  
   304  /*
   305  ** This function is used to add terms implied by JOIN syntax to the
   306  ** WHERE clause expression of a SELECT statement. The new term, which
   307  ** is ANDed with the existing WHERE clause, is of the form:
   308  **
   309  **    (tab1.col1 = tab2.col2)
   310  **
   311  ** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the 
   312  ** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is
   313  ** column iColRight of tab2.
   314  */
   315  static void addWhereTerm(
   316    Parse *pParse,                  /* Parsing context */
   317    SrcList *pSrc,                  /* List of tables in FROM clause */
   318    int iLeft,                      /* Index of first table to join in pSrc */
   319    int iColLeft,                   /* Index of column in first table */
   320    int iRight,                     /* Index of second table in pSrc */
   321    int iColRight,                  /* Index of column in second table */
   322    int isOuterJoin,                /* True if this is an OUTER join */
   323    Expr **ppWhere                  /* IN/OUT: The WHERE clause to add to */
   324  ){
   325    sqlite3 *db = pParse->db;
   326    Expr *pE1;
   327    Expr *pE2;
   328    Expr *pEq;
   329  
   330    assert( iLeft<iRight );
   331    assert( pSrc->nSrc>iRight );
   332    assert( pSrc->a[iLeft].pTab );
   333    assert( pSrc->a[iRight].pTab );
   334  
   335    pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft);
   336    pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight);
   337  
   338    pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2);
   339    if( pEq && isOuterJoin ){
   340      ExprSetProperty(pEq, EP_FromJoin);
   341      assert( !ExprHasProperty(pEq, EP_TokenOnly|EP_Reduced) );
   342      ExprSetVVAProperty(pEq, EP_NoReduce);
   343      pEq->iRightJoinTable = (i16)pE2->iTable;
   344    }
   345    *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
   346  }
   347  
   348  /*
   349  ** Set the EP_FromJoin property on all terms of the given expression.
   350  ** And set the Expr.iRightJoinTable to iTable for every term in the
   351  ** expression.
   352  **
   353  ** The EP_FromJoin property is used on terms of an expression to tell
   354  ** the LEFT OUTER JOIN processing logic that this term is part of the
   355  ** join restriction specified in the ON or USING clause and not a part
   356  ** of the more general WHERE clause.  These terms are moved over to the
   357  ** WHERE clause during join processing but we need to remember that they
   358  ** originated in the ON or USING clause.
   359  **
   360  ** The Expr.iRightJoinTable tells the WHERE clause processing that the
   361  ** expression depends on table iRightJoinTable even if that table is not
   362  ** explicitly mentioned in the expression.  That information is needed
   363  ** for cases like this:
   364  **
   365  **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
   366  **
   367  ** The where clause needs to defer the handling of the t1.x=5
   368  ** term until after the t2 loop of the join.  In that way, a
   369  ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
   370  ** defer the handling of t1.x=5, it will be processed immediately
   371  ** after the t1 loop and rows with t1.x!=5 will never appear in
   372  ** the output, which is incorrect.
   373  */
   374  static void setJoinExpr(Expr *p, int iTable){
   375    while( p ){
   376      ExprSetProperty(p, EP_FromJoin);
   377      assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
   378      ExprSetVVAProperty(p, EP_NoReduce);
   379      p->iRightJoinTable = (i16)iTable;
   380      if( p->op==TK_FUNCTION && p->x.pList ){
   381        int i;
   382        for(i=0; i<p->x.pList->nExpr; i++){
   383          setJoinExpr(p->x.pList->a[i].pExpr, iTable);
   384        }
   385      }
   386      setJoinExpr(p->pLeft, iTable);
   387      p = p->pRight;
   388    } 
   389  }
   390  
   391  /*
   392  ** This routine processes the join information for a SELECT statement.
   393  ** ON and USING clauses are converted into extra terms of the WHERE clause.
   394  ** NATURAL joins also create extra WHERE clause terms.
   395  **
   396  ** The terms of a FROM clause are contained in the Select.pSrc structure.
   397  ** The left most table is the first entry in Select.pSrc.  The right-most
   398  ** table is the last entry.  The join operator is held in the entry to
   399  ** the left.  Thus entry 0 contains the join operator for the join between
   400  ** entries 0 and 1.  Any ON or USING clauses associated with the join are
   401  ** also attached to the left entry.
   402  **
   403  ** This routine returns the number of errors encountered.
   404  */
   405  static int sqliteProcessJoin(Parse *pParse, Select *p){
   406    SrcList *pSrc;                  /* All tables in the FROM clause */
   407    int i, j;                       /* Loop counters */
   408    struct SrcList_item *pLeft;     /* Left table being joined */
   409    struct SrcList_item *pRight;    /* Right table being joined */
   410  
   411    pSrc = p->pSrc;
   412    pLeft = &pSrc->a[0];
   413    pRight = &pLeft[1];
   414    for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
   415      Table *pRightTab = pRight->pTab;
   416      int isOuter;
   417  
   418      if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue;
   419      isOuter = (pRight->fg.jointype & JT_OUTER)!=0;
   420  
   421      /* When the NATURAL keyword is present, add WHERE clause terms for
   422      ** every column that the two tables have in common.
   423      */
   424      if( pRight->fg.jointype & JT_NATURAL ){
   425        if( pRight->pOn || pRight->pUsing ){
   426          sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
   427             "an ON or USING clause", 0);
   428          return 1;
   429        }
   430        for(j=0; j<pRightTab->nCol; j++){
   431          char *zName;   /* Name of column in the right table */
   432          int iLeft;     /* Matching left table */
   433          int iLeftCol;  /* Matching column in the left table */
   434  
   435          zName = pRightTab->aCol[j].zName;
   436          if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){
   437            addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j,
   438                         isOuter, &p->pWhere);
   439          }
   440        }
   441      }
   442  
   443      /* Disallow both ON and USING clauses in the same join
   444      */
   445      if( pRight->pOn && pRight->pUsing ){
   446        sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
   447          "clauses in the same join");
   448        return 1;
   449      }
   450  
   451      /* Add the ON clause to the end of the WHERE clause, connected by
   452      ** an AND operator.
   453      */
   454      if( pRight->pOn ){
   455        if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
   456        p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
   457        pRight->pOn = 0;
   458      }
   459  
   460      /* Create extra terms on the WHERE clause for each column named
   461      ** in the USING clause.  Example: If the two tables to be joined are 
   462      ** A and B and the USING clause names X, Y, and Z, then add this
   463      ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
   464      ** Report an error if any column mentioned in the USING clause is
   465      ** not contained in both tables to be joined.
   466      */
   467      if( pRight->pUsing ){
   468        IdList *pList = pRight->pUsing;
   469        for(j=0; j<pList->nId; j++){
   470          char *zName;     /* Name of the term in the USING clause */
   471          int iLeft;       /* Table on the left with matching column name */
   472          int iLeftCol;    /* Column number of matching column on the left */
   473          int iRightCol;   /* Column number of matching column on the right */
   474  
   475          zName = pList->a[j].zName;
   476          iRightCol = columnIndex(pRightTab, zName);
   477          if( iRightCol<0
   478           || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol)
   479          ){
   480            sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
   481              "not present in both tables", zName);
   482            return 1;
   483          }
   484          addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol,
   485                       isOuter, &p->pWhere);
   486        }
   487      }
   488    }
   489    return 0;
   490  }
   491  
   492  /* Forward reference */
   493  static KeyInfo *keyInfoFromExprList(
   494    Parse *pParse,       /* Parsing context */
   495    ExprList *pList,     /* Form the KeyInfo object from this ExprList */
   496    int iStart,          /* Begin with this column of pList */
   497    int nExtra           /* Add this many extra columns to the end */
   498  );
   499  
   500  /*
   501  ** Generate code that will push the record in registers regData
   502  ** through regData+nData-1 onto the sorter.
   503  */
   504  static void pushOntoSorter(
   505    Parse *pParse,         /* Parser context */
   506    SortCtx *pSort,        /* Information about the ORDER BY clause */
   507    Select *pSelect,       /* The whole SELECT statement */
   508    int regData,           /* First register holding data to be sorted */
   509    int regOrigData,       /* First register holding data before packing */
   510    int nData,             /* Number of elements in the data array */
   511    int nPrefixReg         /* No. of reg prior to regData available for use */
   512  ){
   513    Vdbe *v = pParse->pVdbe;                         /* Stmt under construction */
   514    int bSeq = ((pSort->sortFlags & SORTFLAG_UseSorter)==0);
   515    int nExpr = pSort->pOrderBy->nExpr;              /* No. of ORDER BY terms */
   516    int nBase = nExpr + bSeq + nData;                /* Fields in sorter record */
   517    int regBase;                                     /* Regs for sorter record */
   518    int regRecord = ++pParse->nMem;                  /* Assembled sorter record */
   519    int nOBSat = pSort->nOBSat;                      /* ORDER BY terms to skip */
   520    int op;                            /* Opcode to add sorter record to sorter */
   521    int iLimit;                        /* LIMIT counter */
   522  
   523    assert( bSeq==0 || bSeq==1 );
   524    assert( nData==1 || regData==regOrigData || regOrigData==0 );
   525    if( nPrefixReg ){
   526      assert( nPrefixReg==nExpr+bSeq );
   527      regBase = regData - nExpr - bSeq;
   528    }else{
   529      regBase = pParse->nMem + 1;
   530      pParse->nMem += nBase;
   531    }
   532    assert( pSelect->iOffset==0 || pSelect->iLimit!=0 );
   533    iLimit = pSelect->iOffset ? pSelect->iOffset+1 : pSelect->iLimit;
   534    pSort->labelDone = sqlite3VdbeMakeLabel(v);
   535    sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, regOrigData,
   536                            SQLITE_ECEL_DUP | (regOrigData? SQLITE_ECEL_REF : 0));
   537    if( bSeq ){
   538      sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr);
   539    }
   540    if( nPrefixReg==0 && nData>0 ){
   541      sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+bSeq, nData);
   542    }
   543    sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nBase-nOBSat, regRecord);
   544    if( nOBSat>0 ){
   545      int regPrevKey;   /* The first nOBSat columns of the previous row */
   546      int addrFirst;    /* Address of the OP_IfNot opcode */
   547      int addrJmp;      /* Address of the OP_Jump opcode */
   548      VdbeOp *pOp;      /* Opcode that opens the sorter */
   549      int nKey;         /* Number of sorting key columns, including OP_Sequence */
   550      KeyInfo *pKI;     /* Original KeyInfo on the sorter table */
   551  
   552      regPrevKey = pParse->nMem+1;
   553      pParse->nMem += pSort->nOBSat;
   554      nKey = nExpr - pSort->nOBSat + bSeq;
   555      if( bSeq ){
   556        addrFirst = sqlite3VdbeAddOp1(v, OP_IfNot, regBase+nExpr); 
   557      }else{
   558        addrFirst = sqlite3VdbeAddOp1(v, OP_SequenceTest, pSort->iECursor);
   559      }
   560      VdbeCoverage(v);
   561      sqlite3VdbeAddOp3(v, OP_Compare, regPrevKey, regBase, pSort->nOBSat);
   562      pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex);
   563      if( pParse->db->mallocFailed ) return;
   564      pOp->p2 = nKey + nData;
   565      pKI = pOp->p4.pKeyInfo;
   566      memset(pKI->aSortOrder, 0, pKI->nKeyField); /* Makes OP_Jump testable */
   567      sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO);
   568      testcase( pKI->nAllField > pKI->nKeyField+2 );
   569      pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat,
   570                                             pKI->nAllField-pKI->nKeyField-1);
   571      addrJmp = sqlite3VdbeCurrentAddr(v);
   572      sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v);
   573      pSort->labelBkOut = sqlite3VdbeMakeLabel(v);
   574      pSort->regReturn = ++pParse->nMem;
   575      sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut);
   576      sqlite3VdbeAddOp1(v, OP_ResetSorter, pSort->iECursor);
   577      if( iLimit ){
   578        sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, pSort->labelDone);
   579        VdbeCoverage(v);
   580      }
   581      sqlite3VdbeJumpHere(v, addrFirst);
   582      sqlite3ExprCodeMove(pParse, regBase, regPrevKey, pSort->nOBSat);
   583      sqlite3VdbeJumpHere(v, addrJmp);
   584    }
   585    if( pSort->sortFlags & SORTFLAG_UseSorter ){
   586      op = OP_SorterInsert;
   587    }else{
   588      op = OP_IdxInsert;
   589    }
   590    sqlite3VdbeAddOp4Int(v, op, pSort->iECursor, regRecord,
   591                         regBase+nOBSat, nBase-nOBSat);
   592    if( iLimit ){
   593      int addr;
   594      int r1 = 0;
   595      /* Fill the sorter until it contains LIMIT+OFFSET entries.  (The iLimit
   596      ** register is initialized with value of LIMIT+OFFSET.)  After the sorter
   597      ** fills up, delete the least entry in the sorter after each insert.
   598      ** Thus we never hold more than the LIMIT+OFFSET rows in memory at once */
   599      addr = sqlite3VdbeAddOp1(v, OP_IfNotZero, iLimit); VdbeCoverage(v);
   600      sqlite3VdbeAddOp1(v, OP_Last, pSort->iECursor);
   601      if( pSort->bOrderedInnerLoop ){
   602        r1 = ++pParse->nMem;
   603        sqlite3VdbeAddOp3(v, OP_Column, pSort->iECursor, nExpr, r1);
   604        VdbeComment((v, "seq"));
   605      }
   606      sqlite3VdbeAddOp1(v, OP_Delete, pSort->iECursor);
   607      if( pSort->bOrderedInnerLoop ){
   608        /* If the inner loop is driven by an index such that values from
   609        ** the same iteration of the inner loop are in sorted order, then
   610        ** immediately jump to the next iteration of an inner loop if the
   611        ** entry from the current iteration does not fit into the top
   612        ** LIMIT+OFFSET entries of the sorter. */
   613        int iBrk = sqlite3VdbeCurrentAddr(v) + 2;
   614        sqlite3VdbeAddOp3(v, OP_Eq, regBase+nExpr, iBrk, r1);
   615        sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
   616        VdbeCoverage(v);
   617      }
   618      sqlite3VdbeJumpHere(v, addr);
   619    }
   620  }
   621  
   622  /*
   623  ** Add code to implement the OFFSET
   624  */
   625  static void codeOffset(
   626    Vdbe *v,          /* Generate code into this VM */
   627    int iOffset,      /* Register holding the offset counter */
   628    int iContinue     /* Jump here to skip the current record */
   629  ){
   630    if( iOffset>0 ){
   631      sqlite3VdbeAddOp3(v, OP_IfPos, iOffset, iContinue, 1); VdbeCoverage(v);
   632      VdbeComment((v, "OFFSET"));
   633    }
   634  }
   635  
   636  /*
   637  ** Add code that will check to make sure the N registers starting at iMem
   638  ** form a distinct entry.  iTab is a sorting index that holds previously
   639  ** seen combinations of the N values.  A new entry is made in iTab
   640  ** if the current N values are new.
   641  **
   642  ** A jump to addrRepeat is made and the N+1 values are popped from the
   643  ** stack if the top N elements are not distinct.
   644  */
   645  static void codeDistinct(
   646    Parse *pParse,     /* Parsing and code generating context */
   647    int iTab,          /* A sorting index used to test for distinctness */
   648    int addrRepeat,    /* Jump to here if not distinct */
   649    int N,             /* Number of elements */
   650    int iMem           /* First element */
   651  ){
   652    Vdbe *v;
   653    int r1;
   654  
   655    v = pParse->pVdbe;
   656    r1 = sqlite3GetTempReg(pParse);
   657    sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N); VdbeCoverage(v);
   658    sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
   659    sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, iMem, N);
   660    sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
   661    sqlite3ReleaseTempReg(pParse, r1);
   662  }
   663  
   664  /*
   665  ** This routine generates the code for the inside of the inner loop
   666  ** of a SELECT.
   667  **
   668  ** If srcTab is negative, then the p->pEList expressions
   669  ** are evaluated in order to get the data for this row.  If srcTab is
   670  ** zero or more, then data is pulled from srcTab and p->pEList is used only 
   671  ** to get the number of columns and the collation sequence for each column.
   672  */
   673  static void selectInnerLoop(
   674    Parse *pParse,          /* The parser context */
   675    Select *p,              /* The complete select statement being coded */
   676    int srcTab,             /* Pull data from this table if non-negative */
   677    SortCtx *pSort,         /* If not NULL, info on how to process ORDER BY */
   678    DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */
   679    SelectDest *pDest,      /* How to dispose of the results */
   680    int iContinue,          /* Jump here to continue with next row */
   681    int iBreak              /* Jump here to break out of the inner loop */
   682  ){
   683    Vdbe *v = pParse->pVdbe;
   684    int i;
   685    int hasDistinct;            /* True if the DISTINCT keyword is present */
   686    int eDest = pDest->eDest;   /* How to dispose of results */
   687    int iParm = pDest->iSDParm; /* First argument to disposal method */
   688    int nResultCol;             /* Number of result columns */
   689    int nPrefixReg = 0;         /* Number of extra registers before regResult */
   690  
   691    /* Usually, regResult is the first cell in an array of memory cells
   692    ** containing the current result row. In this case regOrig is set to the
   693    ** same value. However, if the results are being sent to the sorter, the
   694    ** values for any expressions that are also part of the sort-key are omitted
   695    ** from this array. In this case regOrig is set to zero.  */
   696    int regResult;              /* Start of memory holding current results */
   697    int regOrig;                /* Start of memory holding full result (or 0) */
   698  
   699    assert( v );
   700    assert( p->pEList!=0 );
   701    hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP;
   702    if( pSort && pSort->pOrderBy==0 ) pSort = 0;
   703    if( pSort==0 && !hasDistinct ){
   704      assert( iContinue!=0 );
   705      codeOffset(v, p->iOffset, iContinue);
   706    }
   707  
   708    /* Pull the requested columns.
   709    */
   710    nResultCol = p->pEList->nExpr;
   711  
   712    if( pDest->iSdst==0 ){
   713      if( pSort ){
   714        nPrefixReg = pSort->pOrderBy->nExpr;
   715        if( !(pSort->sortFlags & SORTFLAG_UseSorter) ) nPrefixReg++;
   716        pParse->nMem += nPrefixReg;
   717      }
   718      pDest->iSdst = pParse->nMem+1;
   719      pParse->nMem += nResultCol;
   720    }else if( pDest->iSdst+nResultCol > pParse->nMem ){
   721      /* This is an error condition that can result, for example, when a SELECT
   722      ** on the right-hand side of an INSERT contains more result columns than
   723      ** there are columns in the table on the left.  The error will be caught
   724      ** and reported later.  But we need to make sure enough memory is allocated
   725      ** to avoid other spurious errors in the meantime. */
   726      pParse->nMem += nResultCol;
   727    }
   728    pDest->nSdst = nResultCol;
   729    regOrig = regResult = pDest->iSdst;
   730    if( srcTab>=0 ){
   731      for(i=0; i<nResultCol; i++){
   732        sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
   733        VdbeComment((v, "%s", p->pEList->a[i].zName));
   734      }
   735    }else if( eDest!=SRT_Exists ){
   736      /* If the destination is an EXISTS(...) expression, the actual
   737      ** values returned by the SELECT are not required.
   738      */
   739      u8 ecelFlags;
   740      if( eDest==SRT_Mem || eDest==SRT_Output || eDest==SRT_Coroutine ){
   741        ecelFlags = SQLITE_ECEL_DUP;
   742      }else{
   743        ecelFlags = 0;
   744      }
   745      if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){
   746        /* For each expression in p->pEList that is a copy of an expression in
   747        ** the ORDER BY clause (pSort->pOrderBy), set the associated 
   748        ** iOrderByCol value to one more than the index of the ORDER BY 
   749        ** expression within the sort-key that pushOntoSorter() will generate.
   750        ** This allows the p->pEList field to be omitted from the sorted record,
   751        ** saving space and CPU cycles.  */
   752        ecelFlags |= (SQLITE_ECEL_OMITREF|SQLITE_ECEL_REF);
   753        for(i=pSort->nOBSat; i<pSort->pOrderBy->nExpr; i++){
   754          int j;
   755          if( (j = pSort->pOrderBy->a[i].u.x.iOrderByCol)>0 ){
   756            p->pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat;
   757          }
   758        }
   759        regOrig = 0;
   760        assert( eDest==SRT_Set || eDest==SRT_Mem 
   761             || eDest==SRT_Coroutine || eDest==SRT_Output );
   762      }
   763      nResultCol = sqlite3ExprCodeExprList(pParse,p->pEList,regResult,
   764                                           0,ecelFlags);
   765    }
   766  
   767    /* If the DISTINCT keyword was present on the SELECT statement
   768    ** and this row has been seen before, then do not make this row
   769    ** part of the result.
   770    */
   771    if( hasDistinct ){
   772      switch( pDistinct->eTnctType ){
   773        case WHERE_DISTINCT_ORDERED: {
   774          VdbeOp *pOp;            /* No longer required OpenEphemeral instr. */
   775          int iJump;              /* Jump destination */
   776          int regPrev;            /* Previous row content */
   777  
   778          /* Allocate space for the previous row */
   779          regPrev = pParse->nMem+1;
   780          pParse->nMem += nResultCol;
   781  
   782          /* Change the OP_OpenEphemeral coded earlier to an OP_Null
   783          ** sets the MEM_Cleared bit on the first register of the
   784          ** previous value.  This will cause the OP_Ne below to always
   785          ** fail on the first iteration of the loop even if the first
   786          ** row is all NULLs.
   787          */
   788          sqlite3VdbeChangeToNoop(v, pDistinct->addrTnct);
   789          pOp = sqlite3VdbeGetOp(v, pDistinct->addrTnct);
   790          pOp->opcode = OP_Null;
   791          pOp->p1 = 1;
   792          pOp->p2 = regPrev;
   793  
   794          iJump = sqlite3VdbeCurrentAddr(v) + nResultCol;
   795          for(i=0; i<nResultCol; i++){
   796            CollSeq *pColl = sqlite3ExprCollSeq(pParse, p->pEList->a[i].pExpr);
   797            if( i<nResultCol-1 ){
   798              sqlite3VdbeAddOp3(v, OP_Ne, regResult+i, iJump, regPrev+i);
   799              VdbeCoverage(v);
   800            }else{
   801              sqlite3VdbeAddOp3(v, OP_Eq, regResult+i, iContinue, regPrev+i);
   802              VdbeCoverage(v);
   803             }
   804            sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
   805            sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
   806          }
   807          assert( sqlite3VdbeCurrentAddr(v)==iJump || pParse->db->mallocFailed );
   808          sqlite3VdbeAddOp3(v, OP_Copy, regResult, regPrev, nResultCol-1);
   809          break;
   810        }
   811  
   812        case WHERE_DISTINCT_UNIQUE: {
   813          sqlite3VdbeChangeToNoop(v, pDistinct->addrTnct);
   814          break;
   815        }
   816  
   817        default: {
   818          assert( pDistinct->eTnctType==WHERE_DISTINCT_UNORDERED );
   819          codeDistinct(pParse, pDistinct->tabTnct, iContinue, nResultCol,
   820                       regResult);
   821          break;
   822        }
   823      }
   824      if( pSort==0 ){
   825        codeOffset(v, p->iOffset, iContinue);
   826      }
   827    }
   828  
   829    switch( eDest ){
   830      /* In this mode, write each query result to the key of the temporary
   831      ** table iParm.
   832      */
   833  #ifndef SQLITE_OMIT_COMPOUND_SELECT
   834      case SRT_Union: {
   835        int r1;
   836        r1 = sqlite3GetTempReg(pParse);
   837        sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
   838        sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol);
   839        sqlite3ReleaseTempReg(pParse, r1);
   840        break;
   841      }
   842  
   843      /* Construct a record from the query result, but instead of
   844      ** saving that record, use it as a key to delete elements from
   845      ** the temporary table iParm.
   846      */
   847      case SRT_Except: {
   848        sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nResultCol);
   849        break;
   850      }
   851  #endif /* SQLITE_OMIT_COMPOUND_SELECT */
   852  
   853      /* Store the result as data using a unique key.
   854      */
   855      case SRT_Fifo:
   856      case SRT_DistFifo:
   857      case SRT_Table:
   858      case SRT_EphemTab: {
   859        int r1 = sqlite3GetTempRange(pParse, nPrefixReg+1);
   860        testcase( eDest==SRT_Table );
   861        testcase( eDest==SRT_EphemTab );
   862        testcase( eDest==SRT_Fifo );
   863        testcase( eDest==SRT_DistFifo );
   864        sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg);
   865  #ifndef SQLITE_OMIT_CTE
   866        if( eDest==SRT_DistFifo ){
   867          /* If the destination is DistFifo, then cursor (iParm+1) is open
   868          ** on an ephemeral index. If the current row is already present
   869          ** in the index, do not write it to the output. If not, add the
   870          ** current row to the index and proceed with writing it to the
   871          ** output table as well.  */
   872          int addr = sqlite3VdbeCurrentAddr(v) + 4;
   873          sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, addr, r1, 0);
   874          VdbeCoverage(v);
   875          sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm+1, r1,regResult,nResultCol);
   876          assert( pSort==0 );
   877        }
   878  #endif
   879        if( pSort ){
   880          pushOntoSorter(pParse, pSort, p, r1+nPrefixReg,regResult,1,nPrefixReg);
   881        }else{
   882          int r2 = sqlite3GetTempReg(pParse);
   883          sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
   884          sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
   885          sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
   886          sqlite3ReleaseTempReg(pParse, r2);
   887        }
   888        sqlite3ReleaseTempRange(pParse, r1, nPrefixReg+1);
   889        break;
   890      }
   891  
   892  #ifndef SQLITE_OMIT_SUBQUERY
   893      /* If we are creating a set for an "expr IN (SELECT ...)" construct,
   894      ** then there should be a single item on the stack.  Write this
   895      ** item into the set table with bogus data.
   896      */
   897      case SRT_Set: {
   898        if( pSort ){
   899          /* At first glance you would think we could optimize out the
   900          ** ORDER BY in this case since the order of entries in the set
   901          ** does not matter.  But there might be a LIMIT clause, in which
   902          ** case the order does matter */
   903          pushOntoSorter(
   904              pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg);
   905        }else{
   906          int r1 = sqlite3GetTempReg(pParse);
   907          assert( sqlite3Strlen30(pDest->zAffSdst)==nResultCol );
   908          sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, nResultCol, 
   909              r1, pDest->zAffSdst, nResultCol);
   910          sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol);
   911          sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol);
   912          sqlite3ReleaseTempReg(pParse, r1);
   913        }
   914        break;
   915      }
   916  
   917      /* If any row exist in the result set, record that fact and abort.
   918      */
   919      case SRT_Exists: {
   920        sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
   921        /* The LIMIT clause will terminate the loop for us */
   922        break;
   923      }
   924  
   925      /* If this is a scalar select that is part of an expression, then
   926      ** store the results in the appropriate memory cell or array of 
   927      ** memory cells and break out of the scan loop.
   928      */
   929      case SRT_Mem: {
   930        if( pSort ){
   931          assert( nResultCol<=pDest->nSdst );
   932          pushOntoSorter(
   933              pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg);
   934        }else{
   935          assert( nResultCol==pDest->nSdst );
   936          assert( regResult==iParm );
   937          /* The LIMIT clause will jump out of the loop for us */
   938        }
   939        break;
   940      }
   941  #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
   942  
   943      case SRT_Coroutine:       /* Send data to a co-routine */
   944      case SRT_Output: {        /* Return the results */
   945        testcase( eDest==SRT_Coroutine );
   946        testcase( eDest==SRT_Output );
   947        if( pSort ){
   948          pushOntoSorter(pParse, pSort, p, regResult, regOrig, nResultCol,
   949                         nPrefixReg);
   950        }else if( eDest==SRT_Coroutine ){
   951          sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm);
   952        }else{
   953          sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol);
   954          sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol);
   955        }
   956        break;
   957      }
   958  
   959  #ifndef SQLITE_OMIT_CTE
   960      /* Write the results into a priority queue that is order according to
   961      ** pDest->pOrderBy (in pSO).  pDest->iSDParm (in iParm) is the cursor for an
   962      ** index with pSO->nExpr+2 columns.  Build a key using pSO for the first
   963      ** pSO->nExpr columns, then make sure all keys are unique by adding a
   964      ** final OP_Sequence column.  The last column is the record as a blob.
   965      */
   966      case SRT_DistQueue:
   967      case SRT_Queue: {
   968        int nKey;
   969        int r1, r2, r3;
   970        int addrTest = 0;
   971        ExprList *pSO;
   972        pSO = pDest->pOrderBy;
   973        assert( pSO );
   974        nKey = pSO->nExpr;
   975        r1 = sqlite3GetTempReg(pParse);
   976        r2 = sqlite3GetTempRange(pParse, nKey+2);
   977        r3 = r2+nKey+1;
   978        if( eDest==SRT_DistQueue ){
   979          /* If the destination is DistQueue, then cursor (iParm+1) is open
   980          ** on a second ephemeral index that holds all values every previously
   981          ** added to the queue. */
   982          addrTest = sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, 0, 
   983                                          regResult, nResultCol);
   984          VdbeCoverage(v);
   985        }
   986        sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r3);
   987        if( eDest==SRT_DistQueue ){
   988          sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r3);
   989          sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
   990        }
   991        for(i=0; i<nKey; i++){
   992          sqlite3VdbeAddOp2(v, OP_SCopy,
   993                            regResult + pSO->a[i].u.x.iOrderByCol - 1,
   994                            r2+i);
   995        }
   996        sqlite3VdbeAddOp2(v, OP_Sequence, iParm, r2+nKey);
   997        sqlite3VdbeAddOp3(v, OP_MakeRecord, r2, nKey+2, r1);
   998        sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, r2, nKey+2);
   999        if( addrTest ) sqlite3VdbeJumpHere(v, addrTest);
  1000        sqlite3ReleaseTempReg(pParse, r1);
  1001        sqlite3ReleaseTempRange(pParse, r2, nKey+2);
  1002        break;
  1003      }
  1004  #endif /* SQLITE_OMIT_CTE */
  1005  
  1006  
  1007  
  1008  #if !defined(SQLITE_OMIT_TRIGGER)
  1009      /* Discard the results.  This is used for SELECT statements inside
  1010      ** the body of a TRIGGER.  The purpose of such selects is to call
  1011      ** user-defined functions that have side effects.  We do not care
  1012      ** about the actual results of the select.
  1013      */
  1014      default: {
  1015        assert( eDest==SRT_Discard );
  1016        break;
  1017      }
  1018  #endif
  1019    }
  1020  
  1021    /* Jump to the end of the loop if the LIMIT is reached.  Except, if
  1022    ** there is a sorter, in which case the sorter has already limited
  1023    ** the output for us.
  1024    */
  1025    if( pSort==0 && p->iLimit ){
  1026      sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v);
  1027    }
  1028  }
  1029  
  1030  /*
  1031  ** Allocate a KeyInfo object sufficient for an index of N key columns and
  1032  ** X extra columns.
  1033  */
  1034  KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){
  1035    int nExtra = (N+X)*(sizeof(CollSeq*)+1) - sizeof(CollSeq*);
  1036    KeyInfo *p = sqlite3DbMallocRawNN(db, sizeof(KeyInfo) + nExtra);
  1037    if( p ){
  1038      p->aSortOrder = (u8*)&p->aColl[N+X];
  1039      p->nKeyField = (u16)N;
  1040      p->nAllField = (u16)(N+X);
  1041      p->enc = ENC(db);
  1042      p->db = db;
  1043      p->nRef = 1;
  1044      memset(&p[1], 0, nExtra);
  1045    }else{
  1046      sqlite3OomFault(db);
  1047    }
  1048    return p;
  1049  }
  1050  
  1051  /*
  1052  ** Deallocate a KeyInfo object
  1053  */
  1054  void sqlite3KeyInfoUnref(KeyInfo *p){
  1055    if( p ){
  1056      assert( p->nRef>0 );
  1057      p->nRef--;
  1058      if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p);
  1059    }
  1060  }
  1061  
  1062  /*
  1063  ** Make a new pointer to a KeyInfo object
  1064  */
  1065  KeyInfo *sqlite3KeyInfoRef(KeyInfo *p){
  1066    if( p ){
  1067      assert( p->nRef>0 );
  1068      p->nRef++;
  1069    }
  1070    return p;
  1071  }
  1072  
  1073  #ifdef SQLITE_DEBUG
  1074  /*
  1075  ** Return TRUE if a KeyInfo object can be change.  The KeyInfo object
  1076  ** can only be changed if this is just a single reference to the object.
  1077  **
  1078  ** This routine is used only inside of assert() statements.
  1079  */
  1080  int sqlite3KeyInfoIsWriteable(KeyInfo *p){ return p->nRef==1; }
  1081  #endif /* SQLITE_DEBUG */
  1082  
  1083  /*
  1084  ** Given an expression list, generate a KeyInfo structure that records
  1085  ** the collating sequence for each expression in that expression list.
  1086  **
  1087  ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
  1088  ** KeyInfo structure is appropriate for initializing a virtual index to
  1089  ** implement that clause.  If the ExprList is the result set of a SELECT
  1090  ** then the KeyInfo structure is appropriate for initializing a virtual
  1091  ** index to implement a DISTINCT test.
  1092  **
  1093  ** Space to hold the KeyInfo structure is obtained from malloc.  The calling
  1094  ** function is responsible for seeing that this structure is eventually
  1095  ** freed.
  1096  */
  1097  static KeyInfo *keyInfoFromExprList(
  1098    Parse *pParse,       /* Parsing context */
  1099    ExprList *pList,     /* Form the KeyInfo object from this ExprList */
  1100    int iStart,          /* Begin with this column of pList */
  1101    int nExtra           /* Add this many extra columns to the end */
  1102  ){
  1103    int nExpr;
  1104    KeyInfo *pInfo;
  1105    struct ExprList_item *pItem;
  1106    sqlite3 *db = pParse->db;
  1107    int i;
  1108  
  1109    nExpr = pList->nExpr;
  1110    pInfo = sqlite3KeyInfoAlloc(db, nExpr-iStart, nExtra+1);
  1111    if( pInfo ){
  1112      assert( sqlite3KeyInfoIsWriteable(pInfo) );
  1113      for(i=iStart, pItem=pList->a+iStart; i<nExpr; i++, pItem++){
  1114        pInfo->aColl[i-iStart] = sqlite3ExprNNCollSeq(pParse, pItem->pExpr);
  1115        pInfo->aSortOrder[i-iStart] = pItem->sortOrder;
  1116      }
  1117    }
  1118    return pInfo;
  1119  }
  1120  
  1121  /*
  1122  ** Name of the connection operator, used for error messages.
  1123  */
  1124  static const char *selectOpName(int id){
  1125    char *z;
  1126    switch( id ){
  1127      case TK_ALL:       z = "UNION ALL";   break;
  1128      case TK_INTERSECT: z = "INTERSECT";   break;
  1129      case TK_EXCEPT:    z = "EXCEPT";      break;
  1130      default:           z = "UNION";       break;
  1131    }
  1132    return z;
  1133  }
  1134  
  1135  #ifndef SQLITE_OMIT_EXPLAIN
  1136  /*
  1137  ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
  1138  ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
  1139  ** where the caption is of the form:
  1140  **
  1141  **   "USE TEMP B-TREE FOR xxx"
  1142  **
  1143  ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
  1144  ** is determined by the zUsage argument.
  1145  */
  1146  static void explainTempTable(Parse *pParse, const char *zUsage){
  1147    if( pParse->explain==2 ){
  1148      Vdbe *v = pParse->pVdbe;
  1149      char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
  1150      sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
  1151    }
  1152  }
  1153  
  1154  /*
  1155  ** Assign expression b to lvalue a. A second, no-op, version of this macro
  1156  ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
  1157  ** in sqlite3Select() to assign values to structure member variables that
  1158  ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
  1159  ** code with #ifndef directives.
  1160  */
  1161  # define explainSetInteger(a, b) a = b
  1162  
  1163  #else
  1164  /* No-op versions of the explainXXX() functions and macros. */
  1165  # define explainTempTable(y,z)
  1166  # define explainSetInteger(y,z)
  1167  #endif
  1168  
  1169  #if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT)
  1170  /*
  1171  ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
  1172  ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
  1173  ** where the caption is of one of the two forms:
  1174  **
  1175  **   "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
  1176  **   "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
  1177  **
  1178  ** where iSub1 and iSub2 are the integers passed as the corresponding
  1179  ** function parameters, and op is the text representation of the parameter
  1180  ** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
  1181  ** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is 
  1182  ** false, or the second form if it is true.
  1183  */
  1184  static void explainComposite(
  1185    Parse *pParse,                  /* Parse context */
  1186    int op,                         /* One of TK_UNION, TK_EXCEPT etc. */
  1187    int iSub1,                      /* Subquery id 1 */
  1188    int iSub2,                      /* Subquery id 2 */
  1189    int bUseTmp                     /* True if a temp table was used */
  1190  ){
  1191    assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
  1192    if( pParse->explain==2 ){
  1193      Vdbe *v = pParse->pVdbe;
  1194      char *zMsg = sqlite3MPrintf(
  1195          pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
  1196          bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
  1197      );
  1198      sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
  1199    }
  1200  }
  1201  #else
  1202  /* No-op versions of the explainXXX() functions and macros. */
  1203  # define explainComposite(v,w,x,y,z)
  1204  #endif
  1205  
  1206  /*
  1207  ** If the inner loop was generated using a non-null pOrderBy argument,
  1208  ** then the results were placed in a sorter.  After the loop is terminated
  1209  ** we need to run the sorter and output the results.  The following
  1210  ** routine generates the code needed to do that.
  1211  */
  1212  static void generateSortTail(
  1213    Parse *pParse,    /* Parsing context */
  1214    Select *p,        /* The SELECT statement */
  1215    SortCtx *pSort,   /* Information on the ORDER BY clause */
  1216    int nColumn,      /* Number of columns of data */
  1217    SelectDest *pDest /* Write the sorted results here */
  1218  ){
  1219    Vdbe *v = pParse->pVdbe;                     /* The prepared statement */
  1220    int addrBreak = pSort->labelDone;            /* Jump here to exit loop */
  1221    int addrContinue = sqlite3VdbeMakeLabel(v);  /* Jump here for next cycle */
  1222    int addr;
  1223    int addrOnce = 0;
  1224    int iTab;
  1225    ExprList *pOrderBy = pSort->pOrderBy;
  1226    int eDest = pDest->eDest;
  1227    int iParm = pDest->iSDParm;
  1228    int regRow;
  1229    int regRowid;
  1230    int iCol;
  1231    int nKey;
  1232    int iSortTab;                   /* Sorter cursor to read from */
  1233    int nSortData;                  /* Trailing values to read from sorter */
  1234    int i;
  1235    int bSeq;                       /* True if sorter record includes seq. no. */
  1236    struct ExprList_item *aOutEx = p->pEList->a;
  1237  
  1238    assert( addrBreak<0 );
  1239    if( pSort->labelBkOut ){
  1240      sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut);
  1241      sqlite3VdbeGoto(v, addrBreak);
  1242      sqlite3VdbeResolveLabel(v, pSort->labelBkOut);
  1243    }
  1244    iTab = pSort->iECursor;
  1245    if( eDest==SRT_Output || eDest==SRT_Coroutine || eDest==SRT_Mem ){
  1246      regRowid = 0;
  1247      regRow = pDest->iSdst;
  1248      nSortData = nColumn;
  1249    }else{
  1250      regRowid = sqlite3GetTempReg(pParse);
  1251      regRow = sqlite3GetTempRange(pParse, nColumn);
  1252      nSortData = nColumn;
  1253    }
  1254    nKey = pOrderBy->nExpr - pSort->nOBSat;
  1255    if( pSort->sortFlags & SORTFLAG_UseSorter ){
  1256      int regSortOut = ++pParse->nMem;
  1257      iSortTab = pParse->nTab++;
  1258      if( pSort->labelBkOut ){
  1259        addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
  1260      }
  1261      sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, nKey+1+nSortData);
  1262      if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
  1263      addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
  1264      VdbeCoverage(v);
  1265      codeOffset(v, p->iOffset, addrContinue);
  1266      sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
  1267      bSeq = 0;
  1268    }else{
  1269      addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
  1270      codeOffset(v, p->iOffset, addrContinue);
  1271      iSortTab = iTab;
  1272      bSeq = 1;
  1273    }
  1274    for(i=0, iCol=nKey+bSeq; i<nSortData; i++){
  1275      int iRead;
  1276      if( aOutEx[i].u.x.iOrderByCol ){
  1277        iRead = aOutEx[i].u.x.iOrderByCol-1;
  1278      }else{
  1279        iRead = iCol++;
  1280      }
  1281      sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iRead, regRow+i);
  1282      VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
  1283    }
  1284    switch( eDest ){
  1285      case SRT_Table:
  1286      case SRT_EphemTab: {
  1287        sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
  1288        sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
  1289        sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
  1290        break;
  1291      }
  1292  #ifndef SQLITE_OMIT_SUBQUERY
  1293      case SRT_Set: {
  1294        assert( nColumn==sqlite3Strlen30(pDest->zAffSdst) );
  1295        sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, regRowid,
  1296                          pDest->zAffSdst, nColumn);
  1297        sqlite3ExprCacheAffinityChange(pParse, regRow, nColumn);
  1298        sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, regRowid, regRow, nColumn);
  1299        break;
  1300      }
  1301      case SRT_Mem: {
  1302        /* The LIMIT clause will terminate the loop for us */
  1303        break;
  1304      }
  1305  #endif
  1306      default: {
  1307        assert( eDest==SRT_Output || eDest==SRT_Coroutine ); 
  1308        testcase( eDest==SRT_Output );
  1309        testcase( eDest==SRT_Coroutine );
  1310        if( eDest==SRT_Output ){
  1311          sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn);
  1312          sqlite3ExprCacheAffinityChange(pParse, pDest->iSdst, nColumn);
  1313        }else{
  1314          sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm);
  1315        }
  1316        break;
  1317      }
  1318    }
  1319    if( regRowid ){
  1320      if( eDest==SRT_Set ){
  1321        sqlite3ReleaseTempRange(pParse, regRow, nColumn);
  1322      }else{
  1323        sqlite3ReleaseTempReg(pParse, regRow);
  1324      }
  1325      sqlite3ReleaseTempReg(pParse, regRowid);
  1326    }
  1327    /* The bottom of the loop
  1328    */
  1329    sqlite3VdbeResolveLabel(v, addrContinue);
  1330    if( pSort->sortFlags & SORTFLAG_UseSorter ){
  1331      sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr); VdbeCoverage(v);
  1332    }else{
  1333      sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v);
  1334    }
  1335    if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn);
  1336    sqlite3VdbeResolveLabel(v, addrBreak);
  1337  }
  1338  
  1339  /*
  1340  ** Return a pointer to a string containing the 'declaration type' of the
  1341  ** expression pExpr. The string may be treated as static by the caller.
  1342  **
  1343  ** Also try to estimate the size of the returned value and return that
  1344  ** result in *pEstWidth.
  1345  **
  1346  ** The declaration type is the exact datatype definition extracted from the
  1347  ** original CREATE TABLE statement if the expression is a column. The
  1348  ** declaration type for a ROWID field is INTEGER. Exactly when an expression
  1349  ** is considered a column can be complex in the presence of subqueries. The
  1350  ** result-set expression in all of the following SELECT statements is 
  1351  ** considered a column by this function.
  1352  **
  1353  **   SELECT col FROM tbl;
  1354  **   SELECT (SELECT col FROM tbl;
  1355  **   SELECT (SELECT col FROM tbl);
  1356  **   SELECT abc FROM (SELECT col AS abc FROM tbl);
  1357  ** 
  1358  ** The declaration type for any expression other than a column is NULL.
  1359  **
  1360  ** This routine has either 3 or 6 parameters depending on whether or not
  1361  ** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used.
  1362  */
  1363  #ifdef SQLITE_ENABLE_COLUMN_METADATA
  1364  # define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E)
  1365  #else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
  1366  # define columnType(A,B,C,D,E) columnTypeImpl(A,B)
  1367  #endif
  1368  static const char *columnTypeImpl(
  1369    NameContext *pNC, 
  1370  #ifndef SQLITE_ENABLE_COLUMN_METADATA
  1371    Expr *pExpr
  1372  #else
  1373    Expr *pExpr,
  1374    const char **pzOrigDb,
  1375    const char **pzOrigTab,
  1376    const char **pzOrigCol
  1377  #endif
  1378  ){
  1379    char const *zType = 0;
  1380    int j;
  1381  #ifdef SQLITE_ENABLE_COLUMN_METADATA
  1382    char const *zOrigDb = 0;
  1383    char const *zOrigTab = 0;
  1384    char const *zOrigCol = 0;
  1385  #endif
  1386  
  1387    assert( pExpr!=0 );
  1388    assert( pNC->pSrcList!=0 );
  1389    switch( pExpr->op ){
  1390      case TK_AGG_COLUMN:
  1391      case TK_COLUMN: {
  1392        /* The expression is a column. Locate the table the column is being
  1393        ** extracted from in NameContext.pSrcList. This table may be real
  1394        ** database table or a subquery.
  1395        */
  1396        Table *pTab = 0;            /* Table structure column is extracted from */
  1397        Select *pS = 0;             /* Select the column is extracted from */
  1398        int iCol = pExpr->iColumn;  /* Index of column in pTab */
  1399        testcase( pExpr->op==TK_AGG_COLUMN );
  1400        testcase( pExpr->op==TK_COLUMN );
  1401        while( pNC && !pTab ){
  1402          SrcList *pTabList = pNC->pSrcList;
  1403          for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
  1404          if( j<pTabList->nSrc ){
  1405            pTab = pTabList->a[j].pTab;
  1406            pS = pTabList->a[j].pSelect;
  1407          }else{
  1408            pNC = pNC->pNext;
  1409          }
  1410        }
  1411  
  1412        if( pTab==0 ){
  1413          /* At one time, code such as "SELECT new.x" within a trigger would
  1414          ** cause this condition to run.  Since then, we have restructured how
  1415          ** trigger code is generated and so this condition is no longer 
  1416          ** possible. However, it can still be true for statements like
  1417          ** the following:
  1418          **
  1419          **   CREATE TABLE t1(col INTEGER);
  1420          **   SELECT (SELECT t1.col) FROM FROM t1;
  1421          **
  1422          ** when columnType() is called on the expression "t1.col" in the 
  1423          ** sub-select. In this case, set the column type to NULL, even
  1424          ** though it should really be "INTEGER".
  1425          **
  1426          ** This is not a problem, as the column type of "t1.col" is never
  1427          ** used. When columnType() is called on the expression 
  1428          ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT
  1429          ** branch below.  */
  1430          break;
  1431        }
  1432  
  1433        assert( pTab && pExpr->pTab==pTab );
  1434        if( pS ){
  1435          /* The "table" is actually a sub-select or a view in the FROM clause
  1436          ** of the SELECT statement. Return the declaration type and origin
  1437          ** data for the result-set column of the sub-select.
  1438          */
  1439          if( iCol>=0 && iCol<pS->pEList->nExpr ){
  1440            /* If iCol is less than zero, then the expression requests the
  1441            ** rowid of the sub-select or view. This expression is legal (see 
  1442            ** test case misc2.2.2) - it always evaluates to NULL.
  1443            */
  1444            NameContext sNC;
  1445            Expr *p = pS->pEList->a[iCol].pExpr;
  1446            sNC.pSrcList = pS->pSrc;
  1447            sNC.pNext = pNC;
  1448            sNC.pParse = pNC->pParse;
  1449            zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol); 
  1450          }
  1451        }else{
  1452          /* A real table or a CTE table */
  1453          assert( !pS );
  1454  #ifdef SQLITE_ENABLE_COLUMN_METADATA
  1455          if( iCol<0 ) iCol = pTab->iPKey;
  1456          assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
  1457          if( iCol<0 ){
  1458            zType = "INTEGER";
  1459            zOrigCol = "rowid";
  1460          }else{
  1461            zOrigCol = pTab->aCol[iCol].zName;
  1462            zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
  1463          }
  1464          zOrigTab = pTab->zName;
  1465          if( pNC->pParse && pTab->pSchema ){
  1466            int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
  1467            zOrigDb = pNC->pParse->db->aDb[iDb].zDbSName;
  1468          }
  1469  #else
  1470          assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
  1471          if( iCol<0 ){
  1472            zType = "INTEGER";
  1473          }else{
  1474            zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
  1475          }
  1476  #endif
  1477        }
  1478        break;
  1479      }
  1480  #ifndef SQLITE_OMIT_SUBQUERY
  1481      case TK_SELECT: {
  1482        /* The expression is a sub-select. Return the declaration type and
  1483        ** origin info for the single column in the result set of the SELECT
  1484        ** statement.
  1485        */
  1486        NameContext sNC;
  1487        Select *pS = pExpr->x.pSelect;
  1488        Expr *p = pS->pEList->a[0].pExpr;
  1489        assert( ExprHasProperty(pExpr, EP_xIsSelect) );
  1490        sNC.pSrcList = pS->pSrc;
  1491        sNC.pNext = pNC;
  1492        sNC.pParse = pNC->pParse;
  1493        zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); 
  1494        break;
  1495      }
  1496  #endif
  1497    }
  1498  
  1499  #ifdef SQLITE_ENABLE_COLUMN_METADATA  
  1500    if( pzOrigDb ){
  1501      assert( pzOrigTab && pzOrigCol );
  1502      *pzOrigDb = zOrigDb;
  1503      *pzOrigTab = zOrigTab;
  1504      *pzOrigCol = zOrigCol;
  1505    }
  1506  #endif
  1507    return zType;
  1508  }
  1509  
  1510  /*
  1511  ** Generate code that will tell the VDBE the declaration types of columns
  1512  ** in the result set.
  1513  */
  1514  static void generateColumnTypes(
  1515    Parse *pParse,      /* Parser context */
  1516    SrcList *pTabList,  /* List of tables */
  1517    ExprList *pEList    /* Expressions defining the result set */
  1518  ){
  1519  #ifndef SQLITE_OMIT_DECLTYPE
  1520    Vdbe *v = pParse->pVdbe;
  1521    int i;
  1522    NameContext sNC;
  1523    sNC.pSrcList = pTabList;
  1524    sNC.pParse = pParse;
  1525    sNC.pNext = 0;
  1526    for(i=0; i<pEList->nExpr; i++){
  1527      Expr *p = pEList->a[i].pExpr;
  1528      const char *zType;
  1529  #ifdef SQLITE_ENABLE_COLUMN_METADATA
  1530      const char *zOrigDb = 0;
  1531      const char *zOrigTab = 0;
  1532      const char *zOrigCol = 0;
  1533      zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
  1534  
  1535      /* The vdbe must make its own copy of the column-type and other 
  1536      ** column specific strings, in case the schema is reset before this
  1537      ** virtual machine is deleted.
  1538      */
  1539      sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT);
  1540      sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
  1541      sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
  1542  #else
  1543      zType = columnType(&sNC, p, 0, 0, 0);
  1544  #endif
  1545      sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
  1546    }
  1547  #endif /* !defined(SQLITE_OMIT_DECLTYPE) */
  1548  }
  1549  
  1550  
  1551  /*
  1552  ** Compute the column names for a SELECT statement.
  1553  **
  1554  ** The only guarantee that SQLite makes about column names is that if the
  1555  ** column has an AS clause assigning it a name, that will be the name used.
  1556  ** That is the only documented guarantee.  However, countless applications
  1557  ** developed over the years have made baseless assumptions about column names
  1558  ** and will break if those assumptions changes.  Hence, use extreme caution
  1559  ** when modifying this routine to avoid breaking legacy.
  1560  **
  1561  ** See Also: sqlite3ColumnsFromExprList()
  1562  **
  1563  ** The PRAGMA short_column_names and PRAGMA full_column_names settings are
  1564  ** deprecated.  The default setting is short=ON, full=OFF.  99.9% of all
  1565  ** applications should operate this way.  Nevertheless, we need to support the
  1566  ** other modes for legacy:
  1567  **
  1568  **    short=OFF, full=OFF:      Column name is the text of the expression has it
  1569  **                              originally appears in the SELECT statement.  In
  1570  **                              other words, the zSpan of the result expression.
  1571  **
  1572  **    short=ON, full=OFF:       (This is the default setting).  If the result
  1573  **                              refers directly to a table column, then the
  1574  **                              result column name is just the table column
  1575  **                              name: COLUMN.  Otherwise use zSpan.
  1576  **
  1577  **    full=ON, short=ANY:       If the result refers directly to a table column,
  1578  **                              then the result column name with the table name
  1579  **                              prefix, ex: TABLE.COLUMN.  Otherwise use zSpan.
  1580  */
  1581  static void generateColumnNames(
  1582    Parse *pParse,      /* Parser context */
  1583    Select *pSelect     /* Generate column names for this SELECT statement */
  1584  ){
  1585    Vdbe *v = pParse->pVdbe;
  1586    int i;
  1587    Table *pTab;
  1588    SrcList *pTabList;
  1589    ExprList *pEList;
  1590    sqlite3 *db = pParse->db;
  1591    int fullName;    /* TABLE.COLUMN if no AS clause and is a direct table ref */
  1592    int srcName;     /* COLUMN or TABLE.COLUMN if no AS clause and is direct */
  1593  
  1594  #ifndef SQLITE_OMIT_EXPLAIN
  1595    /* If this is an EXPLAIN, skip this step */
  1596    if( pParse->explain ){
  1597      return;
  1598    }
  1599  #endif
  1600  
  1601    if( pParse->colNamesSet || db->mallocFailed ) return;
  1602    /* Column names are determined by the left-most term of a compound select */
  1603    while( pSelect->pPrior ) pSelect = pSelect->pPrior;
  1604    pTabList = pSelect->pSrc;
  1605    pEList = pSelect->pEList;
  1606    assert( v!=0 );
  1607    assert( pTabList!=0 );
  1608    pParse->colNamesSet = 1;
  1609    fullName = (db->flags & SQLITE_FullColNames)!=0;
  1610    srcName = (db->flags & SQLITE_ShortColNames)!=0 || fullName;
  1611    sqlite3VdbeSetNumCols(v, pEList->nExpr);
  1612    for(i=0; i<pEList->nExpr; i++){
  1613      Expr *p = pEList->a[i].pExpr;
  1614  
  1615      assert( p!=0 );
  1616      assert( p->op!=TK_AGG_COLUMN );  /* Agg processing has not run yet */
  1617      assert( p->op!=TK_COLUMN || p->pTab!=0 ); /* Covering idx not yet coded */
  1618      if( pEList->a[i].zName ){
  1619        /* An AS clause always takes first priority */
  1620        char *zName = pEList->a[i].zName;
  1621        sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT);
  1622      }else if( srcName && p->op==TK_COLUMN ){
  1623        char *zCol;
  1624        int iCol = p->iColumn;
  1625        pTab = p->pTab;
  1626        assert( pTab!=0 );
  1627        if( iCol<0 ) iCol = pTab->iPKey;
  1628        assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
  1629        if( iCol<0 ){
  1630          zCol = "rowid";
  1631        }else{
  1632          zCol = pTab->aCol[iCol].zName;
  1633        }
  1634        if( fullName ){
  1635          char *zName = 0;
  1636          zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol);
  1637          sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC);
  1638        }else{
  1639          sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT);
  1640        }
  1641      }else{
  1642        const char *z = pEList->a[i].zSpan;
  1643        z = z==0 ? sqlite3MPrintf(db, "column%d", i+1) : sqlite3DbStrDup(db, z);
  1644        sqlite3VdbeSetColName(v, i, COLNAME_NAME, z, SQLITE_DYNAMIC);
  1645      }
  1646    }
  1647    generateColumnTypes(pParse, pTabList, pEList);
  1648  }
  1649  
  1650  /*
  1651  ** Given an expression list (which is really the list of expressions
  1652  ** that form the result set of a SELECT statement) compute appropriate
  1653  ** column names for a table that would hold the expression list.
  1654  **
  1655  ** All column names will be unique.
  1656  **
  1657  ** Only the column names are computed.  Column.zType, Column.zColl,
  1658  ** and other fields of Column are zeroed.
  1659  **
  1660  ** Return SQLITE_OK on success.  If a memory allocation error occurs,
  1661  ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM.
  1662  **
  1663  ** The only guarantee that SQLite makes about column names is that if the
  1664  ** column has an AS clause assigning it a name, that will be the name used.
  1665  ** That is the only documented guarantee.  However, countless applications
  1666  ** developed over the years have made baseless assumptions about column names
  1667  ** and will break if those assumptions changes.  Hence, use extreme caution
  1668  ** when modifying this routine to avoid breaking legacy.
  1669  **
  1670  ** See Also: generateColumnNames()
  1671  */
  1672  int sqlite3ColumnsFromExprList(
  1673    Parse *pParse,          /* Parsing context */
  1674    ExprList *pEList,       /* Expr list from which to derive column names */
  1675    i16 *pnCol,             /* Write the number of columns here */
  1676    Column **paCol          /* Write the new column list here */
  1677  ){
  1678    sqlite3 *db = pParse->db;   /* Database connection */
  1679    int i, j;                   /* Loop counters */
  1680    u32 cnt;                    /* Index added to make the name unique */
  1681    Column *aCol, *pCol;        /* For looping over result columns */
  1682    int nCol;                   /* Number of columns in the result set */
  1683    char *zName;                /* Column name */
  1684    int nName;                  /* Size of name in zName[] */
  1685    Hash ht;                    /* Hash table of column names */
  1686  
  1687    sqlite3HashInit(&ht);
  1688    if( pEList ){
  1689      nCol = pEList->nExpr;
  1690      aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
  1691      testcase( aCol==0 );
  1692      if( nCol>32767 ) nCol = 32767;
  1693    }else{
  1694      nCol = 0;
  1695      aCol = 0;
  1696    }
  1697    assert( nCol==(i16)nCol );
  1698    *pnCol = nCol;
  1699    *paCol = aCol;
  1700  
  1701    for(i=0, pCol=aCol; i<nCol && !db->mallocFailed; i++, pCol++){
  1702      /* Get an appropriate name for the column
  1703      */
  1704      if( (zName = pEList->a[i].zName)!=0 ){
  1705        /* If the column contains an "AS <name>" phrase, use <name> as the name */
  1706      }else{
  1707        Expr *pColExpr = sqlite3ExprSkipCollate(pEList->a[i].pExpr);
  1708        while( pColExpr->op==TK_DOT ){
  1709          pColExpr = pColExpr->pRight;
  1710          assert( pColExpr!=0 );
  1711        }
  1712        if( (pColExpr->op==TK_COLUMN || pColExpr->op==TK_AGG_COLUMN)
  1713         && pColExpr->pTab!=0 
  1714        ){
  1715          /* For columns use the column name name */
  1716          int iCol = pColExpr->iColumn;
  1717          Table *pTab = pColExpr->pTab;
  1718          if( iCol<0 ) iCol = pTab->iPKey;
  1719          zName = iCol>=0 ? pTab->aCol[iCol].zName : "rowid";
  1720        }else if( pColExpr->op==TK_ID ){
  1721          assert( !ExprHasProperty(pColExpr, EP_IntValue) );
  1722          zName = pColExpr->u.zToken;
  1723        }else{
  1724          /* Use the original text of the column expression as its name */
  1725          zName = pEList->a[i].zSpan;
  1726        }
  1727      }
  1728      if( zName ){
  1729        zName = sqlite3DbStrDup(db, zName);
  1730      }else{
  1731        zName = sqlite3MPrintf(db,"column%d",i+1);
  1732      }
  1733  
  1734      /* Make sure the column name is unique.  If the name is not unique,
  1735      ** append an integer to the name so that it becomes unique.
  1736      */
  1737      cnt = 0;
  1738      while( zName && sqlite3HashFind(&ht, zName)!=0 ){
  1739        nName = sqlite3Strlen30(zName);
  1740        if( nName>0 ){
  1741          for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){}
  1742          if( zName[j]==':' ) nName = j;
  1743        }
  1744        zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt);
  1745        if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt);
  1746      }
  1747      pCol->zName = zName;
  1748      sqlite3ColumnPropertiesFromName(0, pCol);
  1749      if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){
  1750        sqlite3OomFault(db);
  1751      }
  1752    }
  1753    sqlite3HashClear(&ht);
  1754    if( db->mallocFailed ){
  1755      for(j=0; j<i; j++){
  1756        sqlite3DbFree(db, aCol[j].zName);
  1757      }
  1758      sqlite3DbFree(db, aCol);
  1759      *paCol = 0;
  1760      *pnCol = 0;
  1761      return SQLITE_NOMEM_BKPT;
  1762    }
  1763    return SQLITE_OK;
  1764  }
  1765  
  1766  /*
  1767  ** Add type and collation information to a column list based on
  1768  ** a SELECT statement.
  1769  ** 
  1770  ** The column list presumably came from selectColumnNamesFromExprList().
  1771  ** The column list has only names, not types or collations.  This
  1772  ** routine goes through and adds the types and collations.
  1773  **
  1774  ** This routine requires that all identifiers in the SELECT
  1775  ** statement be resolved.
  1776  */
  1777  void sqlite3SelectAddColumnTypeAndCollation(
  1778    Parse *pParse,        /* Parsing contexts */
  1779    Table *pTab,          /* Add column type information to this table */
  1780    Select *pSelect       /* SELECT used to determine types and collations */
  1781  ){
  1782    sqlite3 *db = pParse->db;
  1783    NameContext sNC;
  1784    Column *pCol;
  1785    CollSeq *pColl;
  1786    int i;
  1787    Expr *p;
  1788    struct ExprList_item *a;
  1789  
  1790    assert( pSelect!=0 );
  1791    assert( (pSelect->selFlags & SF_Resolved)!=0 );
  1792    assert( pTab->nCol==pSelect->pEList->nExpr || db->mallocFailed );
  1793    if( db->mallocFailed ) return;
  1794    memset(&sNC, 0, sizeof(sNC));
  1795    sNC.pSrcList = pSelect->pSrc;
  1796    a = pSelect->pEList->a;
  1797    for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
  1798      const char *zType;
  1799      int n, m;
  1800      p = a[i].pExpr;
  1801      zType = columnType(&sNC, p, 0, 0, 0);
  1802      /* pCol->szEst = ... // Column size est for SELECT tables never used */
  1803      pCol->affinity = sqlite3ExprAffinity(p);
  1804      if( zType ){
  1805        m = sqlite3Strlen30(zType);
  1806        n = sqlite3Strlen30(pCol->zName);
  1807        pCol->zName = sqlite3DbReallocOrFree(db, pCol->zName, n+m+2);
  1808        if( pCol->zName ){
  1809          memcpy(&pCol->zName[n+1], zType, m+1);
  1810          pCol->colFlags |= COLFLAG_HASTYPE;
  1811        }
  1812      }
  1813      if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_BLOB;
  1814      pColl = sqlite3ExprCollSeq(pParse, p);
  1815      if( pColl && pCol->zColl==0 ){
  1816        pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
  1817      }
  1818    }
  1819    pTab->szTabRow = 1; /* Any non-zero value works */
  1820  }
  1821  
  1822  /*
  1823  ** Given a SELECT statement, generate a Table structure that describes
  1824  ** the result set of that SELECT.
  1825  */
  1826  Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
  1827    Table *pTab;
  1828    sqlite3 *db = pParse->db;
  1829    int savedFlags;
  1830  
  1831    savedFlags = db->flags;
  1832    db->flags &= ~SQLITE_FullColNames;
  1833    db->flags |= SQLITE_ShortColNames;
  1834    sqlite3SelectPrep(pParse, pSelect, 0);
  1835    if( pParse->nErr ) return 0;
  1836    while( pSelect->pPrior ) pSelect = pSelect->pPrior;
  1837    db->flags = savedFlags;
  1838    pTab = sqlite3DbMallocZero(db, sizeof(Table) );
  1839    if( pTab==0 ){
  1840      return 0;
  1841    }
  1842    /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
  1843    ** is disabled */
  1844    assert( db->lookaside.bDisable );
  1845    pTab->nTabRef = 1;
  1846    pTab->zName = 0;
  1847    pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
  1848    sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
  1849    sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect);
  1850    pTab->iPKey = -1;
  1851    if( db->mallocFailed ){
  1852      sqlite3DeleteTable(db, pTab);
  1853      return 0;
  1854    }
  1855    return pTab;
  1856  }
  1857  
  1858  /*
  1859  ** Get a VDBE for the given parser context.  Create a new one if necessary.
  1860  ** If an error occurs, return NULL and leave a message in pParse.
  1861  */
  1862  Vdbe *sqlite3GetVdbe(Parse *pParse){
  1863    if( pParse->pVdbe ){
  1864      return pParse->pVdbe;
  1865    }
  1866    if( pParse->pToplevel==0
  1867     && OptimizationEnabled(pParse->db,SQLITE_FactorOutConst)
  1868    ){
  1869      pParse->okConstFactor = 1;
  1870    }
  1871    return sqlite3VdbeCreate(pParse);
  1872  }
  1873  
  1874  
  1875  /*
  1876  ** Compute the iLimit and iOffset fields of the SELECT based on the
  1877  ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
  1878  ** that appear in the original SQL statement after the LIMIT and OFFSET
  1879  ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
  1880  ** are the integer memory register numbers for counters used to compute 
  1881  ** the limit and offset.  If there is no limit and/or offset, then 
  1882  ** iLimit and iOffset are negative.
  1883  **
  1884  ** This routine changes the values of iLimit and iOffset only if
  1885  ** a limit or offset is defined by pLimit and pOffset.  iLimit and
  1886  ** iOffset should have been preset to appropriate default values (zero)
  1887  ** prior to calling this routine.
  1888  **
  1889  ** The iOffset register (if it exists) is initialized to the value
  1890  ** of the OFFSET.  The iLimit register is initialized to LIMIT.  Register
  1891  ** iOffset+1 is initialized to LIMIT+OFFSET.
  1892  **
  1893  ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
  1894  ** redefined.  The UNION ALL operator uses this property to force
  1895  ** the reuse of the same limit and offset registers across multiple
  1896  ** SELECT statements.
  1897  */
  1898  static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
  1899    Vdbe *v = 0;
  1900    int iLimit = 0;
  1901    int iOffset;
  1902    int n;
  1903    if( p->iLimit ) return;
  1904  
  1905    /* 
  1906    ** "LIMIT -1" always shows all rows.  There is some
  1907    ** controversy about what the correct behavior should be.
  1908    ** The current implementation interprets "LIMIT 0" to mean
  1909    ** no rows.
  1910    */
  1911    sqlite3ExprCacheClear(pParse);
  1912    assert( p->pOffset==0 || p->pLimit!=0 );
  1913    if( p->pLimit ){
  1914      p->iLimit = iLimit = ++pParse->nMem;
  1915      v = sqlite3GetVdbe(pParse);
  1916      assert( v!=0 );
  1917      if( sqlite3ExprIsInteger(p->pLimit, &n) ){
  1918        sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
  1919        VdbeComment((v, "LIMIT counter"));
  1920        if( n==0 ){
  1921          sqlite3VdbeGoto(v, iBreak);
  1922        }else if( n>=0 && p->nSelectRow>sqlite3LogEst((u64)n) ){
  1923          p->nSelectRow = sqlite3LogEst((u64)n);
  1924          p->selFlags |= SF_FixedLimit;
  1925        }
  1926      }else{
  1927        sqlite3ExprCode(pParse, p->pLimit, iLimit);
  1928        sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v);
  1929        VdbeComment((v, "LIMIT counter"));
  1930        sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v);
  1931      }
  1932      if( p->pOffset ){
  1933        p->iOffset = iOffset = ++pParse->nMem;
  1934        pParse->nMem++;   /* Allocate an extra register for limit+offset */
  1935        sqlite3ExprCode(pParse, p->pOffset, iOffset);
  1936        sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); VdbeCoverage(v);
  1937        VdbeComment((v, "OFFSET counter"));
  1938        sqlite3VdbeAddOp3(v, OP_OffsetLimit, iLimit, iOffset+1, iOffset);
  1939        VdbeComment((v, "LIMIT+OFFSET"));
  1940      }
  1941    }
  1942  }
  1943  
  1944  #ifndef SQLITE_OMIT_COMPOUND_SELECT
  1945  /*
  1946  ** Return the appropriate collating sequence for the iCol-th column of
  1947  ** the result set for the compound-select statement "p".  Return NULL if
  1948  ** the column has no default collating sequence.
  1949  **
  1950  ** The collating sequence for the compound select is taken from the
  1951  ** left-most term of the select that has a collating sequence.
  1952  */
  1953  static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
  1954    CollSeq *pRet;
  1955    if( p->pPrior ){
  1956      pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
  1957    }else{
  1958      pRet = 0;
  1959    }
  1960    assert( iCol>=0 );
  1961    /* iCol must be less than p->pEList->nExpr.  Otherwise an error would
  1962    ** have been thrown during name resolution and we would not have gotten
  1963    ** this far */
  1964    if( pRet==0 && ALWAYS(iCol<p->pEList->nExpr) ){
  1965      pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
  1966    }
  1967    return pRet;
  1968  }
  1969  
  1970  /*
  1971  ** The select statement passed as the second parameter is a compound SELECT
  1972  ** with an ORDER BY clause. This function allocates and returns a KeyInfo
  1973  ** structure suitable for implementing the ORDER BY.
  1974  **
  1975  ** Space to hold the KeyInfo structure is obtained from malloc. The calling
  1976  ** function is responsible for ensuring that this structure is eventually
  1977  ** freed.
  1978  */
  1979  static KeyInfo *multiSelectOrderByKeyInfo(Parse *pParse, Select *p, int nExtra){
  1980    ExprList *pOrderBy = p->pOrderBy;
  1981    int nOrderBy = p->pOrderBy->nExpr;
  1982    sqlite3 *db = pParse->db;
  1983    KeyInfo *pRet = sqlite3KeyInfoAlloc(db, nOrderBy+nExtra, 1);
  1984    if( pRet ){
  1985      int i;
  1986      for(i=0; i<nOrderBy; i++){
  1987        struct ExprList_item *pItem = &pOrderBy->a[i];
  1988        Expr *pTerm = pItem->pExpr;
  1989        CollSeq *pColl;
  1990  
  1991        if( pTerm->flags & EP_Collate ){
  1992          pColl = sqlite3ExprCollSeq(pParse, pTerm);
  1993        }else{
  1994          pColl = multiSelectCollSeq(pParse, p, pItem->u.x.iOrderByCol-1);
  1995          if( pColl==0 ) pColl = db->pDfltColl;
  1996          pOrderBy->a[i].pExpr =
  1997            sqlite3ExprAddCollateString(pParse, pTerm, pColl->zName);
  1998        }
  1999        assert( sqlite3KeyInfoIsWriteable(pRet) );
  2000        pRet->aColl[i] = pColl;
  2001        pRet->aSortOrder[i] = pOrderBy->a[i].sortOrder;
  2002      }
  2003    }
  2004  
  2005    return pRet;
  2006  }
  2007  
  2008  #ifndef SQLITE_OMIT_CTE
  2009  /*
  2010  ** This routine generates VDBE code to compute the content of a WITH RECURSIVE
  2011  ** query of the form:
  2012  **
  2013  **   <recursive-table> AS (<setup-query> UNION [ALL] <recursive-query>)
  2014  **                         \___________/             \_______________/
  2015  **                           p->pPrior                      p
  2016  **
  2017  **
  2018  ** There is exactly one reference to the recursive-table in the FROM clause
  2019  ** of recursive-query, marked with the SrcList->a[].fg.isRecursive flag.
  2020  **
  2021  ** The setup-query runs once to generate an initial set of rows that go
  2022  ** into a Queue table.  Rows are extracted from the Queue table one by
  2023  ** one.  Each row extracted from Queue is output to pDest.  Then the single
  2024  ** extracted row (now in the iCurrent table) becomes the content of the
  2025  ** recursive-table for a recursive-query run.  The output of the recursive-query
  2026  ** is added back into the Queue table.  Then another row is extracted from Queue
  2027  ** and the iteration continues until the Queue table is empty.
  2028  **
  2029  ** If the compound query operator is UNION then no duplicate rows are ever
  2030  ** inserted into the Queue table.  The iDistinct table keeps a copy of all rows
  2031  ** that have ever been inserted into Queue and causes duplicates to be
  2032  ** discarded.  If the operator is UNION ALL, then duplicates are allowed.
  2033  ** 
  2034  ** If the query has an ORDER BY, then entries in the Queue table are kept in
  2035  ** ORDER BY order and the first entry is extracted for each cycle.  Without
  2036  ** an ORDER BY, the Queue table is just a FIFO.
  2037  **
  2038  ** If a LIMIT clause is provided, then the iteration stops after LIMIT rows
  2039  ** have been output to pDest.  A LIMIT of zero means to output no rows and a
  2040  ** negative LIMIT means to output all rows.  If there is also an OFFSET clause
  2041  ** with a positive value, then the first OFFSET outputs are discarded rather
  2042  ** than being sent to pDest.  The LIMIT count does not begin until after OFFSET
  2043  ** rows have been skipped.
  2044  */
  2045  static void generateWithRecursiveQuery(
  2046    Parse *pParse,        /* Parsing context */
  2047    Select *p,            /* The recursive SELECT to be coded */
  2048    SelectDest *pDest     /* What to do with query results */
  2049  ){
  2050    SrcList *pSrc = p->pSrc;      /* The FROM clause of the recursive query */
  2051    int nCol = p->pEList->nExpr;  /* Number of columns in the recursive table */
  2052    Vdbe *v = pParse->pVdbe;      /* The prepared statement under construction */
  2053    Select *pSetup = p->pPrior;   /* The setup query */
  2054    int addrTop;                  /* Top of the loop */
  2055    int addrCont, addrBreak;      /* CONTINUE and BREAK addresses */
  2056    int iCurrent = 0;             /* The Current table */
  2057    int regCurrent;               /* Register holding Current table */
  2058    int iQueue;                   /* The Queue table */
  2059    int iDistinct = 0;            /* To ensure unique results if UNION */
  2060    int eDest = SRT_Fifo;         /* How to write to Queue */
  2061    SelectDest destQueue;         /* SelectDest targetting the Queue table */
  2062    int i;                        /* Loop counter */
  2063    int rc;                       /* Result code */
  2064    ExprList *pOrderBy;           /* The ORDER BY clause */
  2065    Expr *pLimit, *pOffset;       /* Saved LIMIT and OFFSET */
  2066    int regLimit, regOffset;      /* Registers used by LIMIT and OFFSET */
  2067  
  2068    /* Obtain authorization to do a recursive query */
  2069    if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return;
  2070  
  2071    /* Process the LIMIT and OFFSET clauses, if they exist */
  2072    addrBreak = sqlite3VdbeMakeLabel(v);
  2073    p->nSelectRow = 320;  /* 4 billion rows */
  2074    computeLimitRegisters(pParse, p, addrBreak);
  2075    pLimit = p->pLimit;
  2076    pOffset = p->pOffset;
  2077    regLimit = p->iLimit;
  2078    regOffset = p->iOffset;
  2079    p->pLimit = p->pOffset = 0;
  2080    p->iLimit = p->iOffset = 0;
  2081    pOrderBy = p->pOrderBy;
  2082  
  2083    /* Locate the cursor number of the Current table */
  2084    for(i=0; ALWAYS(i<pSrc->nSrc); i++){
  2085      if( pSrc->a[i].fg.isRecursive ){
  2086        iCurrent = pSrc->a[i].iCursor;
  2087        break;
  2088      }
  2089    }
  2090  
  2091    /* Allocate cursors numbers for Queue and Distinct.  The cursor number for
  2092    ** the Distinct table must be exactly one greater than Queue in order
  2093    ** for the SRT_DistFifo and SRT_DistQueue destinations to work. */
  2094    iQueue = pParse->nTab++;
  2095    if( p->op==TK_UNION ){
  2096      eDest = pOrderBy ? SRT_DistQueue : SRT_DistFifo;
  2097      iDistinct = pParse->nTab++;
  2098    }else{
  2099      eDest = pOrderBy ? SRT_Queue : SRT_Fifo;
  2100    }
  2101    sqlite3SelectDestInit(&destQueue, eDest, iQueue);
  2102  
  2103    /* Allocate cursors for Current, Queue, and Distinct. */
  2104    regCurrent = ++pParse->nMem;
  2105    sqlite3VdbeAddOp3(v, OP_OpenPseudo, iCurrent, regCurrent, nCol);
  2106    if( pOrderBy ){
  2107      KeyInfo *pKeyInfo = multiSelectOrderByKeyInfo(pParse, p, 1);
  2108      sqlite3VdbeAddOp4(v, OP_OpenEphemeral, iQueue, pOrderBy->nExpr+2, 0,
  2109                        (char*)pKeyInfo, P4_KEYINFO);
  2110      destQueue.pOrderBy = pOrderBy;
  2111    }else{
  2112      sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iQueue, nCol);
  2113    }
  2114    VdbeComment((v, "Queue table"));
  2115    if( iDistinct ){
  2116      p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iDistinct, 0);
  2117      p->selFlags |= SF_UsesEphemeral;
  2118    }
  2119  
  2120    /* Detach the ORDER BY clause from the compound SELECT */
  2121    p->pOrderBy = 0;
  2122  
  2123    /* Store the results of the setup-query in Queue. */
  2124    pSetup->pNext = 0;
  2125    rc = sqlite3Select(pParse, pSetup, &destQueue);
  2126    pSetup->pNext = p;
  2127    if( rc ) goto end_of_recursive_query;
  2128  
  2129    /* Find the next row in the Queue and output that row */
  2130    addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iQueue, addrBreak); VdbeCoverage(v);
  2131  
  2132    /* Transfer the next row in Queue over to Current */
  2133    sqlite3VdbeAddOp1(v, OP_NullRow, iCurrent); /* To reset column cache */
  2134    if( pOrderBy ){
  2135      sqlite3VdbeAddOp3(v, OP_Column, iQueue, pOrderBy->nExpr+1, regCurrent);
  2136    }else{
  2137      sqlite3VdbeAddOp2(v, OP_RowData, iQueue, regCurrent);
  2138    }
  2139    sqlite3VdbeAddOp1(v, OP_Delete, iQueue);
  2140  
  2141    /* Output the single row in Current */
  2142    addrCont = sqlite3VdbeMakeLabel(v);
  2143    codeOffset(v, regOffset, addrCont);
  2144    selectInnerLoop(pParse, p, iCurrent,
  2145        0, 0, pDest, addrCont, addrBreak);
  2146    if( regLimit ){
  2147      sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak);
  2148      VdbeCoverage(v);
  2149    }
  2150    sqlite3VdbeResolveLabel(v, addrCont);
  2151  
  2152    /* Execute the recursive SELECT taking the single row in Current as
  2153    ** the value for the recursive-table. Store the results in the Queue.
  2154    */
  2155    if( p->selFlags & SF_Aggregate ){
  2156      sqlite3ErrorMsg(pParse, "recursive aggregate queries not supported");
  2157    }else{
  2158      p->pPrior = 0;
  2159      sqlite3Select(pParse, p, &destQueue);
  2160      assert( p->pPrior==0 );
  2161      p->pPrior = pSetup;
  2162    }
  2163  
  2164    /* Keep running the loop until the Queue is empty */
  2165    sqlite3VdbeGoto(v, addrTop);
  2166    sqlite3VdbeResolveLabel(v, addrBreak);
  2167  
  2168  end_of_recursive_query:
  2169    sqlite3ExprListDelete(pParse->db, p->pOrderBy);
  2170    p->pOrderBy = pOrderBy;
  2171    p->pLimit = pLimit;
  2172    p->pOffset = pOffset;
  2173    return;
  2174  }
  2175  #endif /* SQLITE_OMIT_CTE */
  2176  
  2177  /* Forward references */
  2178  static int multiSelectOrderBy(
  2179    Parse *pParse,        /* Parsing context */
  2180    Select *p,            /* The right-most of SELECTs to be coded */
  2181    SelectDest *pDest     /* What to do with query results */
  2182  );
  2183  
  2184  /*
  2185  ** Handle the special case of a compound-select that originates from a
  2186  ** VALUES clause.  By handling this as a special case, we avoid deep
  2187  ** recursion, and thus do not need to enforce the SQLITE_LIMIT_COMPOUND_SELECT
  2188  ** on a VALUES clause.
  2189  **
  2190  ** Because the Select object originates from a VALUES clause:
  2191  **   (1) It has no LIMIT or OFFSET
  2192  **   (2) All terms are UNION ALL
  2193  **   (3) There is no ORDER BY clause
  2194  */
  2195  static int multiSelectValues(
  2196    Parse *pParse,        /* Parsing context */
  2197    Select *p,            /* The right-most of SELECTs to be coded */
  2198    SelectDest *pDest     /* What to do with query results */
  2199  ){
  2200    Select *pPrior;
  2201    int nRow = 1;
  2202    int rc = 0;
  2203    assert( p->selFlags & SF_MultiValue );
  2204    do{
  2205      assert( p->selFlags & SF_Values );
  2206      assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) );
  2207      assert( p->pLimit==0 );
  2208      assert( p->pOffset==0 );
  2209      assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr );
  2210      if( p->pPrior==0 ) break;
  2211      assert( p->pPrior->pNext==p );
  2212      p = p->pPrior;
  2213      nRow++;
  2214    }while(1);
  2215    while( p ){
  2216      pPrior = p->pPrior;
  2217      p->pPrior = 0;
  2218      rc = sqlite3Select(pParse, p, pDest);
  2219      p->pPrior = pPrior;
  2220      if( rc ) break;
  2221      p->nSelectRow = nRow;
  2222      p = p->pNext;
  2223    }
  2224    return rc;
  2225  }
  2226  
  2227  /*
  2228  ** This routine is called to process a compound query form from
  2229  ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
  2230  ** INTERSECT
  2231  **
  2232  ** "p" points to the right-most of the two queries.  the query on the
  2233  ** left is p->pPrior.  The left query could also be a compound query
  2234  ** in which case this routine will be called recursively. 
  2235  **
  2236  ** The results of the total query are to be written into a destination
  2237  ** of type eDest with parameter iParm.
  2238  **
  2239  ** Example 1:  Consider a three-way compound SQL statement.
  2240  **
  2241  **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
  2242  **
  2243  ** This statement is parsed up as follows:
  2244  **
  2245  **     SELECT c FROM t3
  2246  **      |
  2247  **      `----->  SELECT b FROM t2
  2248  **                |
  2249  **                `------>  SELECT a FROM t1
  2250  **
  2251  ** The arrows in the diagram above represent the Select.pPrior pointer.
  2252  ** So if this routine is called with p equal to the t3 query, then
  2253  ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
  2254  **
  2255  ** Notice that because of the way SQLite parses compound SELECTs, the
  2256  ** individual selects always group from left to right.
  2257  */
  2258  static int multiSelect(
  2259    Parse *pParse,        /* Parsing context */
  2260    Select *p,            /* The right-most of SELECTs to be coded */
  2261    SelectDest *pDest     /* What to do with query results */
  2262  ){
  2263    int rc = SQLITE_OK;   /* Success code from a subroutine */
  2264    Select *pPrior;       /* Another SELECT immediately to our left */
  2265    Vdbe *v;              /* Generate code to this VDBE */
  2266    SelectDest dest;      /* Alternative data destination */
  2267    Select *pDelete = 0;  /* Chain of simple selects to delete */
  2268    sqlite3 *db;          /* Database connection */
  2269  #ifndef SQLITE_OMIT_EXPLAIN
  2270    int iSub1 = 0;        /* EQP id of left-hand query */
  2271    int iSub2 = 0;        /* EQP id of right-hand query */
  2272  #endif
  2273  
  2274    /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
  2275    ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
  2276    */
  2277    assert( p && p->pPrior );  /* Calling function guarantees this much */
  2278    assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION );
  2279    db = pParse->db;
  2280    pPrior = p->pPrior;
  2281    dest = *pDest;
  2282    if( pPrior->pOrderBy || pPrior->pLimit ){
  2283      sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
  2284        pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
  2285      rc = 1;
  2286      goto multi_select_end;
  2287    }
  2288  
  2289    v = sqlite3GetVdbe(pParse);
  2290    assert( v!=0 );  /* The VDBE already created by calling function */
  2291  
  2292    /* Create the destination temporary table if necessary
  2293    */
  2294    if( dest.eDest==SRT_EphemTab ){
  2295      assert( p->pEList );
  2296      sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr);
  2297      dest.eDest = SRT_Table;
  2298    }
  2299  
  2300    /* Special handling for a compound-select that originates as a VALUES clause.
  2301    */
  2302    if( p->selFlags & SF_MultiValue ){
  2303      rc = multiSelectValues(pParse, p, &dest);
  2304      goto multi_select_end;
  2305    }
  2306  
  2307    /* Make sure all SELECTs in the statement have the same number of elements
  2308    ** in their result sets.
  2309    */
  2310    assert( p->pEList && pPrior->pEList );
  2311    assert( p->pEList->nExpr==pPrior->pEList->nExpr );
  2312  
  2313  #ifndef SQLITE_OMIT_CTE
  2314    if( p->selFlags & SF_Recursive ){
  2315      generateWithRecursiveQuery(pParse, p, &dest);
  2316    }else
  2317  #endif
  2318  
  2319    /* Compound SELECTs that have an ORDER BY clause are handled separately.
  2320    */
  2321    if( p->pOrderBy ){
  2322      return multiSelectOrderBy(pParse, p, pDest);
  2323    }else
  2324  
  2325    /* Generate code for the left and right SELECT statements.
  2326    */
  2327    switch( p->op ){
  2328      case TK_ALL: {
  2329        int addr = 0;
  2330        int nLimit;
  2331        assert( !pPrior->pLimit );
  2332        pPrior->iLimit = p->iLimit;
  2333        pPrior->iOffset = p->iOffset;
  2334        pPrior->pLimit = p->pLimit;
  2335        pPrior->pOffset = p->pOffset;
  2336        explainSetInteger(iSub1, pParse->iNextSelectId);
  2337        rc = sqlite3Select(pParse, pPrior, &dest);
  2338        p->pLimit = 0;
  2339        p->pOffset = 0;
  2340        if( rc ){
  2341          goto multi_select_end;
  2342        }
  2343        p->pPrior = 0;
  2344        p->iLimit = pPrior->iLimit;
  2345        p->iOffset = pPrior->iOffset;
  2346        if( p->iLimit ){
  2347          addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v);
  2348          VdbeComment((v, "Jump ahead if LIMIT reached"));
  2349          if( p->iOffset ){
  2350            sqlite3VdbeAddOp3(v, OP_OffsetLimit,
  2351                              p->iLimit, p->iOffset+1, p->iOffset);
  2352          }
  2353        }
  2354        explainSetInteger(iSub2, pParse->iNextSelectId);
  2355        rc = sqlite3Select(pParse, p, &dest);
  2356        testcase( rc!=SQLITE_OK );
  2357        pDelete = p->pPrior;
  2358        p->pPrior = pPrior;
  2359        p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
  2360        if( pPrior->pLimit
  2361         && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
  2362         && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit) 
  2363        ){
  2364          p->nSelectRow = sqlite3LogEst((u64)nLimit);
  2365        }
  2366        if( addr ){
  2367          sqlite3VdbeJumpHere(v, addr);
  2368        }
  2369        break;
  2370      }
  2371      case TK_EXCEPT:
  2372      case TK_UNION: {
  2373        int unionTab;    /* Cursor number of the temporary table holding result */
  2374        u8 op = 0;       /* One of the SRT_ operations to apply to self */
  2375        int priorOp;     /* The SRT_ operation to apply to prior selects */
  2376        Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
  2377        int addr;
  2378        SelectDest uniondest;
  2379  
  2380        testcase( p->op==TK_EXCEPT );
  2381        testcase( p->op==TK_UNION );
  2382        priorOp = SRT_Union;
  2383        if( dest.eDest==priorOp ){
  2384          /* We can reuse a temporary table generated by a SELECT to our
  2385          ** right.
  2386          */
  2387          assert( p->pLimit==0 );      /* Not allowed on leftward elements */
  2388          assert( p->pOffset==0 );     /* Not allowed on leftward elements */
  2389          unionTab = dest.iSDParm;
  2390        }else{
  2391          /* We will need to create our own temporary table to hold the
  2392          ** intermediate results.
  2393          */
  2394          unionTab = pParse->nTab++;
  2395          assert( p->pOrderBy==0 );
  2396          addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
  2397          assert( p->addrOpenEphm[0] == -1 );
  2398          p->addrOpenEphm[0] = addr;
  2399          findRightmost(p)->selFlags |= SF_UsesEphemeral;
  2400          assert( p->pEList );
  2401        }
  2402  
  2403        /* Code the SELECT statements to our left
  2404        */
  2405        assert( !pPrior->pOrderBy );
  2406        sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
  2407        explainSetInteger(iSub1, pParse->iNextSelectId);
  2408        rc = sqlite3Select(pParse, pPrior, &uniondest);
  2409        if( rc ){
  2410          goto multi_select_end;
  2411        }
  2412  
  2413        /* Code the current SELECT statement
  2414        */
  2415        if( p->op==TK_EXCEPT ){
  2416          op = SRT_Except;
  2417        }else{
  2418          assert( p->op==TK_UNION );
  2419          op = SRT_Union;
  2420        }
  2421        p->pPrior = 0;
  2422        pLimit = p->pLimit;
  2423        p->pLimit = 0;
  2424        pOffset = p->pOffset;
  2425        p->pOffset = 0;
  2426        uniondest.eDest = op;
  2427        explainSetInteger(iSub2, pParse->iNextSelectId);
  2428        rc = sqlite3Select(pParse, p, &uniondest);
  2429        testcase( rc!=SQLITE_OK );
  2430        /* Query flattening in sqlite3Select() might refill p->pOrderBy.
  2431        ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
  2432        sqlite3ExprListDelete(db, p->pOrderBy);
  2433        pDelete = p->pPrior;
  2434        p->pPrior = pPrior;
  2435        p->pOrderBy = 0;
  2436        if( p->op==TK_UNION ){
  2437          p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
  2438        }
  2439        sqlite3ExprDelete(db, p->pLimit);
  2440        p->pLimit = pLimit;
  2441        p->pOffset = pOffset;
  2442        p->iLimit = 0;
  2443        p->iOffset = 0;
  2444  
  2445        /* Convert the data in the temporary table into whatever form
  2446        ** it is that we currently need.
  2447        */
  2448        assert( unionTab==dest.iSDParm || dest.eDest!=priorOp );
  2449        if( dest.eDest!=priorOp ){
  2450          int iCont, iBreak, iStart;
  2451          assert( p->pEList );
  2452          iBreak = sqlite3VdbeMakeLabel(v);
  2453          iCont = sqlite3VdbeMakeLabel(v);
  2454          computeLimitRegisters(pParse, p, iBreak);
  2455          sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v);
  2456          iStart = sqlite3VdbeCurrentAddr(v);
  2457          selectInnerLoop(pParse, p, unionTab,
  2458                          0, 0, &dest, iCont, iBreak);
  2459          sqlite3VdbeResolveLabel(v, iCont);
  2460          sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v);
  2461          sqlite3VdbeResolveLabel(v, iBreak);
  2462          sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
  2463        }
  2464        break;
  2465      }
  2466      default: assert( p->op==TK_INTERSECT ); {
  2467        int tab1, tab2;
  2468        int iCont, iBreak, iStart;
  2469        Expr *pLimit, *pOffset;
  2470        int addr;
  2471        SelectDest intersectdest;
  2472        int r1;
  2473  
  2474        /* INTERSECT is different from the others since it requires
  2475        ** two temporary tables.  Hence it has its own case.  Begin
  2476        ** by allocating the tables we will need.
  2477        */
  2478        tab1 = pParse->nTab++;
  2479        tab2 = pParse->nTab++;
  2480        assert( p->pOrderBy==0 );
  2481  
  2482        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
  2483        assert( p->addrOpenEphm[0] == -1 );
  2484        p->addrOpenEphm[0] = addr;
  2485        findRightmost(p)->selFlags |= SF_UsesEphemeral;
  2486        assert( p->pEList );
  2487  
  2488        /* Code the SELECTs to our left into temporary table "tab1".
  2489        */
  2490        sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
  2491        explainSetInteger(iSub1, pParse->iNextSelectId);
  2492        rc = sqlite3Select(pParse, pPrior, &intersectdest);
  2493        if( rc ){
  2494          goto multi_select_end;
  2495        }
  2496  
  2497        /* Code the current SELECT into temporary table "tab2"
  2498        */
  2499        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
  2500        assert( p->addrOpenEphm[1] == -1 );
  2501        p->addrOpenEphm[1] = addr;
  2502        p->pPrior = 0;
  2503        pLimit = p->pLimit;
  2504        p->pLimit = 0;
  2505        pOffset = p->pOffset;
  2506        p->pOffset = 0;
  2507        intersectdest.iSDParm = tab2;
  2508        explainSetInteger(iSub2, pParse->iNextSelectId);
  2509        rc = sqlite3Select(pParse, p, &intersectdest);
  2510        testcase( rc!=SQLITE_OK );
  2511        pDelete = p->pPrior;
  2512        p->pPrior = pPrior;
  2513        if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
  2514        sqlite3ExprDelete(db, p->pLimit);
  2515        p->pLimit = pLimit;
  2516        p->pOffset = pOffset;
  2517  
  2518        /* Generate code to take the intersection of the two temporary
  2519        ** tables.
  2520        */
  2521        assert( p->pEList );
  2522        iBreak = sqlite3VdbeMakeLabel(v);
  2523        iCont = sqlite3VdbeMakeLabel(v);
  2524        computeLimitRegisters(pParse, p, iBreak);
  2525        sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); VdbeCoverage(v);
  2526        r1 = sqlite3GetTempReg(pParse);
  2527        iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1);
  2528        sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); VdbeCoverage(v);
  2529        sqlite3ReleaseTempReg(pParse, r1);
  2530        selectInnerLoop(pParse, p, tab1,
  2531                        0, 0, &dest, iCont, iBreak);
  2532        sqlite3VdbeResolveLabel(v, iCont);
  2533        sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v);
  2534        sqlite3VdbeResolveLabel(v, iBreak);
  2535        sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
  2536        sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
  2537        break;
  2538      }
  2539    }
  2540  
  2541    explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
  2542  
  2543    /* Compute collating sequences used by 
  2544    ** temporary tables needed to implement the compound select.
  2545    ** Attach the KeyInfo structure to all temporary tables.
  2546    **
  2547    ** This section is run by the right-most SELECT statement only.
  2548    ** SELECT statements to the left always skip this part.  The right-most
  2549    ** SELECT might also skip this part if it has no ORDER BY clause and
  2550    ** no temp tables are required.
  2551    */
  2552    if( p->selFlags & SF_UsesEphemeral ){
  2553      int i;                        /* Loop counter */
  2554      KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
  2555      Select *pLoop;                /* For looping through SELECT statements */
  2556      CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
  2557      int nCol;                     /* Number of columns in result set */
  2558  
  2559      assert( p->pNext==0 );
  2560      nCol = p->pEList->nExpr;
  2561      pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1);
  2562      if( !pKeyInfo ){
  2563        rc = SQLITE_NOMEM_BKPT;
  2564        goto multi_select_end;
  2565      }
  2566      for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
  2567        *apColl = multiSelectCollSeq(pParse, p, i);
  2568        if( 0==*apColl ){
  2569          *apColl = db->pDfltColl;
  2570        }
  2571      }
  2572  
  2573      for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
  2574        for(i=0; i<2; i++){
  2575          int addr = pLoop->addrOpenEphm[i];
  2576          if( addr<0 ){
  2577            /* If [0] is unused then [1] is also unused.  So we can
  2578            ** always safely abort as soon as the first unused slot is found */
  2579            assert( pLoop->addrOpenEphm[1]<0 );
  2580            break;
  2581          }
  2582          sqlite3VdbeChangeP2(v, addr, nCol);
  2583          sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo),
  2584                              P4_KEYINFO);
  2585          pLoop->addrOpenEphm[i] = -1;
  2586        }
  2587      }
  2588      sqlite3KeyInfoUnref(pKeyInfo);
  2589    }
  2590  
  2591  multi_select_end:
  2592    pDest->iSdst = dest.iSdst;
  2593    pDest->nSdst = dest.nSdst;
  2594    sqlite3SelectDelete(db, pDelete);
  2595    return rc;
  2596  }
  2597  #endif /* SQLITE_OMIT_COMPOUND_SELECT */
  2598  
  2599  /*
  2600  ** Error message for when two or more terms of a compound select have different
  2601  ** size result sets.
  2602  */
  2603  void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p){
  2604    if( p->selFlags & SF_Values ){
  2605      sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms");
  2606    }else{
  2607      sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
  2608        " do not have the same number of result columns", selectOpName(p->op));
  2609    }
  2610  }
  2611  
  2612  /*
  2613  ** Code an output subroutine for a coroutine implementation of a
  2614  ** SELECT statment.
  2615  **
  2616  ** The data to be output is contained in pIn->iSdst.  There are
  2617  ** pIn->nSdst columns to be output.  pDest is where the output should
  2618  ** be sent.
  2619  **
  2620  ** regReturn is the number of the register holding the subroutine
  2621  ** return address.
  2622  **
  2623  ** If regPrev>0 then it is the first register in a vector that
  2624  ** records the previous output.  mem[regPrev] is a flag that is false
  2625  ** if there has been no previous output.  If regPrev>0 then code is
  2626  ** generated to suppress duplicates.  pKeyInfo is used for comparing
  2627  ** keys.
  2628  **
  2629  ** If the LIMIT found in p->iLimit is reached, jump immediately to
  2630  ** iBreak.
  2631  */
  2632  static int generateOutputSubroutine(
  2633    Parse *pParse,          /* Parsing context */
  2634    Select *p,              /* The SELECT statement */
  2635    SelectDest *pIn,        /* Coroutine supplying data */
  2636    SelectDest *pDest,      /* Where to send the data */
  2637    int regReturn,          /* The return address register */
  2638    int regPrev,            /* Previous result register.  No uniqueness if 0 */
  2639    KeyInfo *pKeyInfo,      /* For comparing with previous entry */
  2640    int iBreak              /* Jump here if we hit the LIMIT */
  2641  ){
  2642    Vdbe *v = pParse->pVdbe;
  2643    int iContinue;
  2644    int addr;
  2645  
  2646    addr = sqlite3VdbeCurrentAddr(v);
  2647    iContinue = sqlite3VdbeMakeLabel(v);
  2648  
  2649    /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 
  2650    */
  2651    if( regPrev ){
  2652      int addr1, addr2;
  2653      addr1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); VdbeCoverage(v);
  2654      addr2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iSdst, regPrev+1, pIn->nSdst,
  2655                                (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO);
  2656      sqlite3VdbeAddOp3(v, OP_Jump, addr2+2, iContinue, addr2+2); VdbeCoverage(v);
  2657      sqlite3VdbeJumpHere(v, addr1);
  2658      sqlite3VdbeAddOp3(v, OP_Copy, pIn->iSdst, regPrev+1, pIn->nSdst-1);
  2659      sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
  2660    }
  2661    if( pParse->db->mallocFailed ) return 0;
  2662  
  2663    /* Suppress the first OFFSET entries if there is an OFFSET clause
  2664    */
  2665    codeOffset(v, p->iOffset, iContinue);
  2666  
  2667    assert( pDest->eDest!=SRT_Exists );
  2668    assert( pDest->eDest!=SRT_Table );
  2669    switch( pDest->eDest ){
  2670      /* Store the result as data using a unique key.
  2671      */
  2672      case SRT_EphemTab: {
  2673        int r1 = sqlite3GetTempReg(pParse);
  2674        int r2 = sqlite3GetTempReg(pParse);
  2675        sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1);
  2676        sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iSDParm, r2);
  2677        sqlite3VdbeAddOp3(v, OP_Insert, pDest->iSDParm, r1, r2);
  2678        sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
  2679        sqlite3ReleaseTempReg(pParse, r2);
  2680        sqlite3ReleaseTempReg(pParse, r1);
  2681        break;
  2682      }
  2683  
  2684  #ifndef SQLITE_OMIT_SUBQUERY
  2685      /* If we are creating a set for an "expr IN (SELECT ...)".
  2686      */
  2687      case SRT_Set: {
  2688        int r1;
  2689        testcase( pIn->nSdst>1 );
  2690        r1 = sqlite3GetTempReg(pParse);
  2691        sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, 
  2692            r1, pDest->zAffSdst, pIn->nSdst);
  2693        sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst);
  2694        sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pDest->iSDParm, r1,
  2695                             pIn->iSdst, pIn->nSdst);
  2696        sqlite3ReleaseTempReg(pParse, r1);
  2697        break;
  2698      }
  2699  
  2700      /* If this is a scalar select that is part of an expression, then
  2701      ** store the results in the appropriate memory cell and break out
  2702      ** of the scan loop.
  2703      */
  2704      case SRT_Mem: {
  2705        assert( pIn->nSdst==1 || pParse->nErr>0 );  testcase( pIn->nSdst!=1 );
  2706        sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSDParm, 1);
  2707        /* The LIMIT clause will jump out of the loop for us */
  2708        break;
  2709      }
  2710  #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
  2711  
  2712      /* The results are stored in a sequence of registers
  2713      ** starting at pDest->iSdst.  Then the co-routine yields.
  2714      */
  2715      case SRT_Coroutine: {
  2716        if( pDest->iSdst==0 ){
  2717          pDest->iSdst = sqlite3GetTempRange(pParse, pIn->nSdst);
  2718          pDest->nSdst = pIn->nSdst;
  2719        }
  2720        sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSdst, pIn->nSdst);
  2721        sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm);
  2722        break;
  2723      }
  2724  
  2725      /* If none of the above, then the result destination must be
  2726      ** SRT_Output.  This routine is never called with any other
  2727      ** destination other than the ones handled above or SRT_Output.
  2728      **
  2729      ** For SRT_Output, results are stored in a sequence of registers.  
  2730      ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to
  2731      ** return the next row of result.
  2732      */
  2733      default: {
  2734        assert( pDest->eDest==SRT_Output );
  2735        sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iSdst, pIn->nSdst);
  2736        sqlite3ExprCacheAffinityChange(pParse, pIn->iSdst, pIn->nSdst);
  2737        break;
  2738      }
  2739    }
  2740  
  2741    /* Jump to the end of the loop if the LIMIT is reached.
  2742    */
  2743    if( p->iLimit ){
  2744      sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v);
  2745    }
  2746  
  2747    /* Generate the subroutine return
  2748    */
  2749    sqlite3VdbeResolveLabel(v, iContinue);
  2750    sqlite3VdbeAddOp1(v, OP_Return, regReturn);
  2751  
  2752    return addr;
  2753  }
  2754  
  2755  /*
  2756  ** Alternative compound select code generator for cases when there
  2757  ** is an ORDER BY clause.
  2758  **
  2759  ** We assume a query of the following form:
  2760  **
  2761  **      <selectA>  <operator>  <selectB>  ORDER BY <orderbylist>
  2762  **
  2763  ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT.  The idea
  2764  ** is to code both <selectA> and <selectB> with the ORDER BY clause as
  2765  ** co-routines.  Then run the co-routines in parallel and merge the results
  2766  ** into the output.  In addition to the two coroutines (called selectA and
  2767  ** selectB) there are 7 subroutines:
  2768  **
  2769  **    outA:    Move the output of the selectA coroutine into the output
  2770  **             of the compound query.
  2771  **
  2772  **    outB:    Move the output of the selectB coroutine into the output
  2773  **             of the compound query.  (Only generated for UNION and
  2774  **             UNION ALL.  EXCEPT and INSERTSECT never output a row that
  2775  **             appears only in B.)
  2776  **
  2777  **    AltB:    Called when there is data from both coroutines and A<B.
  2778  **
  2779  **    AeqB:    Called when there is data from both coroutines and A==B.
  2780  **
  2781  **    AgtB:    Called when there is data from both coroutines and A>B.
  2782  **
  2783  **    EofA:    Called when data is exhausted from selectA.
  2784  **
  2785  **    EofB:    Called when data is exhausted from selectB.
  2786  **
  2787  ** The implementation of the latter five subroutines depend on which 
  2788  ** <operator> is used:
  2789  **
  2790  **
  2791  **             UNION ALL         UNION            EXCEPT          INTERSECT
  2792  **          -------------  -----------------  --------------  -----------------
  2793  **   AltB:   outA, nextA      outA, nextA       outA, nextA         nextA
  2794  **
  2795  **   AeqB:   outA, nextA         nextA             nextA         outA, nextA
  2796  **
  2797  **   AgtB:   outB, nextB      outB, nextB          nextB            nextB
  2798  **
  2799  **   EofA:   outB, nextB      outB, nextB          halt             halt
  2800  **
  2801  **   EofB:   outA, nextA      outA, nextA       outA, nextA         halt
  2802  **
  2803  ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
  2804  ** causes an immediate jump to EofA and an EOF on B following nextB causes
  2805  ** an immediate jump to EofB.  Within EofA and EofB, and EOF on entry or
  2806  ** following nextX causes a jump to the end of the select processing.
  2807  **
  2808  ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
  2809  ** within the output subroutine.  The regPrev register set holds the previously
  2810  ** output value.  A comparison is made against this value and the output
  2811  ** is skipped if the next results would be the same as the previous.
  2812  **
  2813  ** The implementation plan is to implement the two coroutines and seven
  2814  ** subroutines first, then put the control logic at the bottom.  Like this:
  2815  **
  2816  **          goto Init
  2817  **     coA: coroutine for left query (A)
  2818  **     coB: coroutine for right query (B)
  2819  **    outA: output one row of A
  2820  **    outB: output one row of B (UNION and UNION ALL only)
  2821  **    EofA: ...
  2822  **    EofB: ...
  2823  **    AltB: ...
  2824  **    AeqB: ...
  2825  **    AgtB: ...
  2826  **    Init: initialize coroutine registers
  2827  **          yield coA
  2828  **          if eof(A) goto EofA
  2829  **          yield coB
  2830  **          if eof(B) goto EofB
  2831  **    Cmpr: Compare A, B
  2832  **          Jump AltB, AeqB, AgtB
  2833  **     End: ...
  2834  **
  2835  ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
  2836  ** actually called using Gosub and they do not Return.  EofA and EofB loop
  2837  ** until all data is exhausted then jump to the "end" labe.  AltB, AeqB,
  2838  ** and AgtB jump to either L2 or to one of EofA or EofB.
  2839  */
  2840  #ifndef SQLITE_OMIT_COMPOUND_SELECT
  2841  static int multiSelectOrderBy(
  2842    Parse *pParse,        /* Parsing context */
  2843    Select *p,            /* The right-most of SELECTs to be coded */
  2844    SelectDest *pDest     /* What to do with query results */
  2845  ){
  2846    int i, j;             /* Loop counters */
  2847    Select *pPrior;       /* Another SELECT immediately to our left */
  2848    Vdbe *v;              /* Generate code to this VDBE */
  2849    SelectDest destA;     /* Destination for coroutine A */
  2850    SelectDest destB;     /* Destination for coroutine B */
  2851    int regAddrA;         /* Address register for select-A coroutine */
  2852    int regAddrB;         /* Address register for select-B coroutine */
  2853    int addrSelectA;      /* Address of the select-A coroutine */
  2854    int addrSelectB;      /* Address of the select-B coroutine */
  2855    int regOutA;          /* Address register for the output-A subroutine */
  2856    int regOutB;          /* Address register for the output-B subroutine */
  2857    int addrOutA;         /* Address of the output-A subroutine */
  2858    int addrOutB = 0;     /* Address of the output-B subroutine */
  2859    int addrEofA;         /* Address of the select-A-exhausted subroutine */
  2860    int addrEofA_noB;     /* Alternate addrEofA if B is uninitialized */
  2861    int addrEofB;         /* Address of the select-B-exhausted subroutine */
  2862    int addrAltB;         /* Address of the A<B subroutine */
  2863    int addrAeqB;         /* Address of the A==B subroutine */
  2864    int addrAgtB;         /* Address of the A>B subroutine */
  2865    int regLimitA;        /* Limit register for select-A */
  2866    int regLimitB;        /* Limit register for select-A */
  2867    int regPrev;          /* A range of registers to hold previous output */
  2868    int savedLimit;       /* Saved value of p->iLimit */
  2869    int savedOffset;      /* Saved value of p->iOffset */
  2870    int labelCmpr;        /* Label for the start of the merge algorithm */
  2871    int labelEnd;         /* Label for the end of the overall SELECT stmt */
  2872    int addr1;            /* Jump instructions that get retargetted */
  2873    int op;               /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
  2874    KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */
  2875    KeyInfo *pKeyMerge;   /* Comparison information for merging rows */
  2876    sqlite3 *db;          /* Database connection */
  2877    ExprList *pOrderBy;   /* The ORDER BY clause */
  2878    int nOrderBy;         /* Number of terms in the ORDER BY clause */
  2879    int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
  2880  #ifndef SQLITE_OMIT_EXPLAIN
  2881    int iSub1;            /* EQP id of left-hand query */
  2882    int iSub2;            /* EQP id of right-hand query */
  2883  #endif
  2884  
  2885    assert( p->pOrderBy!=0 );
  2886    assert( pKeyDup==0 ); /* "Managed" code needs this.  Ticket #3382. */
  2887    db = pParse->db;
  2888    v = pParse->pVdbe;
  2889    assert( v!=0 );       /* Already thrown the error if VDBE alloc failed */
  2890    labelEnd = sqlite3VdbeMakeLabel(v);
  2891    labelCmpr = sqlite3VdbeMakeLabel(v);
  2892  
  2893  
  2894    /* Patch up the ORDER BY clause
  2895    */
  2896    op = p->op;  
  2897    pPrior = p->pPrior;
  2898    assert( pPrior->pOrderBy==0 );
  2899    pOrderBy = p->pOrderBy;
  2900    assert( pOrderBy );
  2901    nOrderBy = pOrderBy->nExpr;
  2902  
  2903    /* For operators other than UNION ALL we have to make sure that
  2904    ** the ORDER BY clause covers every term of the result set.  Add
  2905    ** terms to the ORDER BY clause as necessary.
  2906    */
  2907    if( op!=TK_ALL ){
  2908      for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
  2909        struct ExprList_item *pItem;
  2910        for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){
  2911          assert( pItem->u.x.iOrderByCol>0 );
  2912          if( pItem->u.x.iOrderByCol==i ) break;
  2913        }
  2914        if( j==nOrderBy ){
  2915          Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0);
  2916          if( pNew==0 ) return SQLITE_NOMEM_BKPT;
  2917          pNew->flags |= EP_IntValue;
  2918          pNew->u.iValue = i;
  2919          p->pOrderBy = pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew);
  2920          if( pOrderBy ) pOrderBy->a[nOrderBy++].u.x.iOrderByCol = (u16)i;
  2921        }
  2922      }
  2923    }
  2924  
  2925    /* Compute the comparison permutation and keyinfo that is used with
  2926    ** the permutation used to determine if the next
  2927    ** row of results comes from selectA or selectB.  Also add explicit
  2928    ** collations to the ORDER BY clause terms so that when the subqueries
  2929    ** to the right and the left are evaluated, they use the correct
  2930    ** collation.
  2931    */
  2932    aPermute = sqlite3DbMallocRawNN(db, sizeof(int)*(nOrderBy + 1));
  2933    if( aPermute ){
  2934      struct ExprList_item *pItem;
  2935      aPermute[0] = nOrderBy;
  2936      for(i=1, pItem=pOrderBy->a; i<=nOrderBy; i++, pItem++){
  2937        assert( pItem->u.x.iOrderByCol>0 );
  2938        assert( pItem->u.x.iOrderByCol<=p->pEList->nExpr );
  2939        aPermute[i] = pItem->u.x.iOrderByCol - 1;
  2940      }
  2941      pKeyMerge = multiSelectOrderByKeyInfo(pParse, p, 1);
  2942    }else{
  2943      pKeyMerge = 0;
  2944    }
  2945  
  2946    /* Reattach the ORDER BY clause to the query.
  2947    */
  2948    p->pOrderBy = pOrderBy;
  2949    pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0);
  2950  
  2951    /* Allocate a range of temporary registers and the KeyInfo needed
  2952    ** for the logic that removes duplicate result rows when the
  2953    ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
  2954    */
  2955    if( op==TK_ALL ){
  2956      regPrev = 0;
  2957    }else{
  2958      int nExpr = p->pEList->nExpr;
  2959      assert( nOrderBy>=nExpr || db->mallocFailed );
  2960      regPrev = pParse->nMem+1;
  2961      pParse->nMem += nExpr+1;
  2962      sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
  2963      pKeyDup = sqlite3KeyInfoAlloc(db, nExpr, 1);
  2964      if( pKeyDup ){
  2965        assert( sqlite3KeyInfoIsWriteable(pKeyDup) );
  2966        for(i=0; i<nExpr; i++){
  2967          pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
  2968          pKeyDup->aSortOrder[i] = 0;
  2969        }
  2970      }
  2971    }
  2972   
  2973    /* Separate the left and the right query from one another
  2974    */
  2975    p->pPrior = 0;
  2976    pPrior->pNext = 0;
  2977    sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER");
  2978    if( pPrior->pPrior==0 ){
  2979      sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER");
  2980    }
  2981  
  2982    /* Compute the limit registers */
  2983    computeLimitRegisters(pParse, p, labelEnd);
  2984    if( p->iLimit && op==TK_ALL ){
  2985      regLimitA = ++pParse->nMem;
  2986      regLimitB = ++pParse->nMem;
  2987      sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
  2988                                    regLimitA);
  2989      sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
  2990    }else{
  2991      regLimitA = regLimitB = 0;
  2992    }
  2993    sqlite3ExprDelete(db, p->pLimit);
  2994    p->pLimit = 0;
  2995    sqlite3ExprDelete(db, p->pOffset);
  2996    p->pOffset = 0;
  2997  
  2998    regAddrA = ++pParse->nMem;
  2999    regAddrB = ++pParse->nMem;
  3000    regOutA = ++pParse->nMem;
  3001    regOutB = ++pParse->nMem;
  3002    sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
  3003    sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
  3004  
  3005    /* Generate a coroutine to evaluate the SELECT statement to the
  3006    ** left of the compound operator - the "A" select.
  3007    */
  3008    addrSelectA = sqlite3VdbeCurrentAddr(v) + 1;
  3009    addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrA, 0, addrSelectA);
  3010    VdbeComment((v, "left SELECT"));
  3011    pPrior->iLimit = regLimitA;
  3012    explainSetInteger(iSub1, pParse->iNextSelectId);
  3013    sqlite3Select(pParse, pPrior, &destA);
  3014    sqlite3VdbeEndCoroutine(v, regAddrA);
  3015    sqlite3VdbeJumpHere(v, addr1);
  3016  
  3017    /* Generate a coroutine to evaluate the SELECT statement on 
  3018    ** the right - the "B" select
  3019    */
  3020    addrSelectB = sqlite3VdbeCurrentAddr(v) + 1;
  3021    addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrB, 0, addrSelectB);
  3022    VdbeComment((v, "right SELECT"));
  3023    savedLimit = p->iLimit;
  3024    savedOffset = p->iOffset;
  3025    p->iLimit = regLimitB;
  3026    p->iOffset = 0;  
  3027    explainSetInteger(iSub2, pParse->iNextSelectId);
  3028    sqlite3Select(pParse, p, &destB);
  3029    p->iLimit = savedLimit;
  3030    p->iOffset = savedOffset;
  3031    sqlite3VdbeEndCoroutine(v, regAddrB);
  3032  
  3033    /* Generate a subroutine that outputs the current row of the A
  3034    ** select as the next output row of the compound select.
  3035    */
  3036    VdbeNoopComment((v, "Output routine for A"));
  3037    addrOutA = generateOutputSubroutine(pParse,
  3038                   p, &destA, pDest, regOutA,
  3039                   regPrev, pKeyDup, labelEnd);
  3040    
  3041    /* Generate a subroutine that outputs the current row of the B
  3042    ** select as the next output row of the compound select.
  3043    */
  3044    if( op==TK_ALL || op==TK_UNION ){
  3045      VdbeNoopComment((v, "Output routine for B"));
  3046      addrOutB = generateOutputSubroutine(pParse,
  3047                   p, &destB, pDest, regOutB,
  3048                   regPrev, pKeyDup, labelEnd);
  3049    }
  3050    sqlite3KeyInfoUnref(pKeyDup);
  3051  
  3052    /* Generate a subroutine to run when the results from select A
  3053    ** are exhausted and only data in select B remains.
  3054    */
  3055    if( op==TK_EXCEPT || op==TK_INTERSECT ){
  3056      addrEofA_noB = addrEofA = labelEnd;
  3057    }else{  
  3058      VdbeNoopComment((v, "eof-A subroutine"));
  3059      addrEofA = sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
  3060      addrEofA_noB = sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, labelEnd);
  3061                                       VdbeCoverage(v);
  3062      sqlite3VdbeGoto(v, addrEofA);
  3063      p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
  3064    }
  3065  
  3066    /* Generate a subroutine to run when the results from select B
  3067    ** are exhausted and only data in select A remains.
  3068    */
  3069    if( op==TK_INTERSECT ){
  3070      addrEofB = addrEofA;
  3071      if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
  3072    }else{  
  3073      VdbeNoopComment((v, "eof-B subroutine"));
  3074      addrEofB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
  3075      sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, labelEnd); VdbeCoverage(v);
  3076      sqlite3VdbeGoto(v, addrEofB);
  3077    }
  3078  
  3079    /* Generate code to handle the case of A<B
  3080    */
  3081    VdbeNoopComment((v, "A-lt-B subroutine"));
  3082    addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
  3083    sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA); VdbeCoverage(v);
  3084    sqlite3VdbeGoto(v, labelCmpr);
  3085  
  3086    /* Generate code to handle the case of A==B
  3087    */
  3088    if( op==TK_ALL ){
  3089      addrAeqB = addrAltB;
  3090    }else if( op==TK_INTERSECT ){
  3091      addrAeqB = addrAltB;
  3092      addrAltB++;
  3093    }else{
  3094      VdbeNoopComment((v, "A-eq-B subroutine"));
  3095      addrAeqB =
  3096      sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA); VdbeCoverage(v);
  3097      sqlite3VdbeGoto(v, labelCmpr);
  3098    }
  3099  
  3100    /* Generate code to handle the case of A>B
  3101    */
  3102    VdbeNoopComment((v, "A-gt-B subroutine"));
  3103    addrAgtB = sqlite3VdbeCurrentAddr(v);
  3104    if( op==TK_ALL || op==TK_UNION ){
  3105      sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
  3106    }
  3107    sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v);
  3108    sqlite3VdbeGoto(v, labelCmpr);
  3109  
  3110    /* This code runs once to initialize everything.
  3111    */
  3112    sqlite3VdbeJumpHere(v, addr1);
  3113    sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA_noB); VdbeCoverage(v);
  3114    sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v);
  3115  
  3116    /* Implement the main merge loop
  3117    */
  3118    sqlite3VdbeResolveLabel(v, labelCmpr);
  3119    sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
  3120    sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy,
  3121                           (char*)pKeyMerge, P4_KEYINFO);
  3122    sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE);
  3123    sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); VdbeCoverage(v);
  3124  
  3125    /* Jump to the this point in order to terminate the query.
  3126    */
  3127    sqlite3VdbeResolveLabel(v, labelEnd);
  3128  
  3129    /* Reassembly the compound query so that it will be freed correctly
  3130    ** by the calling function */
  3131    if( p->pPrior ){
  3132      sqlite3SelectDelete(db, p->pPrior);
  3133    }
  3134    p->pPrior = pPrior;
  3135    pPrior->pNext = p;
  3136  
  3137    /*** TBD:  Insert subroutine calls to close cursors on incomplete
  3138    **** subqueries ****/
  3139    explainComposite(pParse, p->op, iSub1, iSub2, 0);
  3140    return pParse->nErr!=0;
  3141  }
  3142  #endif
  3143  
  3144  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  3145  
  3146  /* An instance of the SubstContext object describes an substitution edit
  3147  ** to be performed on a parse tree.
  3148  **
  3149  ** All references to columns in table iTable are to be replaced by corresponding
  3150  ** expressions in pEList.
  3151  */
  3152  typedef struct SubstContext {
  3153    Parse *pParse;            /* The parsing context */
  3154    int iTable;               /* Replace references to this table */
  3155    int iNewTable;            /* New table number */
  3156    int isLeftJoin;           /* Add TK_IF_NULL_ROW opcodes on each replacement */
  3157    ExprList *pEList;         /* Replacement expressions */
  3158  } SubstContext;
  3159  
  3160  /* Forward Declarations */
  3161  static void substExprList(SubstContext*, ExprList*);
  3162  static void substSelect(SubstContext*, Select*, int);
  3163  
  3164  /*
  3165  ** Scan through the expression pExpr.  Replace every reference to
  3166  ** a column in table number iTable with a copy of the iColumn-th
  3167  ** entry in pEList.  (But leave references to the ROWID column 
  3168  ** unchanged.)
  3169  **
  3170  ** This routine is part of the flattening procedure.  A subquery
  3171  ** whose result set is defined by pEList appears as entry in the
  3172  ** FROM clause of a SELECT such that the VDBE cursor assigned to that
  3173  ** FORM clause entry is iTable.  This routine makes the necessary 
  3174  ** changes to pExpr so that it refers directly to the source table
  3175  ** of the subquery rather the result set of the subquery.
  3176  */
  3177  static Expr *substExpr(
  3178    SubstContext *pSubst,  /* Description of the substitution */
  3179    Expr *pExpr            /* Expr in which substitution occurs */
  3180  ){
  3181    if( pExpr==0 ) return 0;
  3182    if( ExprHasProperty(pExpr, EP_FromJoin)
  3183     && pExpr->iRightJoinTable==pSubst->iTable
  3184    ){
  3185      pExpr->iRightJoinTable = pSubst->iNewTable;
  3186    }
  3187    if( pExpr->op==TK_COLUMN && pExpr->iTable==pSubst->iTable ){
  3188      if( pExpr->iColumn<0 ){
  3189        pExpr->op = TK_NULL;
  3190      }else{
  3191        Expr *pNew;
  3192        Expr *pCopy = pSubst->pEList->a[pExpr->iColumn].pExpr;
  3193        Expr ifNullRow;
  3194        assert( pSubst->pEList!=0 && pExpr->iColumn<pSubst->pEList->nExpr );
  3195        assert( pExpr->pLeft==0 && pExpr->pRight==0 );
  3196        if( sqlite3ExprIsVector(pCopy) ){
  3197          sqlite3VectorErrorMsg(pSubst->pParse, pCopy);
  3198        }else{
  3199          sqlite3 *db = pSubst->pParse->db;
  3200          if( pSubst->isLeftJoin && pCopy->op!=TK_COLUMN ){
  3201            memset(&ifNullRow, 0, sizeof(ifNullRow));
  3202            ifNullRow.op = TK_IF_NULL_ROW;
  3203            ifNullRow.pLeft = pCopy;
  3204            ifNullRow.iTable = pSubst->iNewTable;
  3205            pCopy = &ifNullRow;
  3206          }
  3207          pNew = sqlite3ExprDup(db, pCopy, 0);
  3208          if( pNew && pSubst->isLeftJoin ){
  3209            ExprSetProperty(pNew, EP_CanBeNull);
  3210          }
  3211          if( pNew && ExprHasProperty(pExpr,EP_FromJoin) ){
  3212            pNew->iRightJoinTable = pExpr->iRightJoinTable;
  3213            ExprSetProperty(pNew, EP_FromJoin);
  3214          }
  3215          sqlite3ExprDelete(db, pExpr);
  3216          pExpr = pNew;
  3217        }
  3218      }
  3219    }else{
  3220      if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){
  3221        pExpr->iTable = pSubst->iNewTable;
  3222      }
  3223      pExpr->pLeft = substExpr(pSubst, pExpr->pLeft);
  3224      pExpr->pRight = substExpr(pSubst, pExpr->pRight);
  3225      if( ExprHasProperty(pExpr, EP_xIsSelect) ){
  3226        substSelect(pSubst, pExpr->x.pSelect, 1);
  3227      }else{
  3228        substExprList(pSubst, pExpr->x.pList);
  3229      }
  3230    }
  3231    return pExpr;
  3232  }
  3233  static void substExprList(
  3234    SubstContext *pSubst, /* Description of the substitution */
  3235    ExprList *pList       /* List to scan and in which to make substitutes */
  3236  ){
  3237    int i;
  3238    if( pList==0 ) return;
  3239    for(i=0; i<pList->nExpr; i++){
  3240      pList->a[i].pExpr = substExpr(pSubst, pList->a[i].pExpr);
  3241    }
  3242  }
  3243  static void substSelect(
  3244    SubstContext *pSubst, /* Description of the substitution */
  3245    Select *p,            /* SELECT statement in which to make substitutions */
  3246    int doPrior           /* Do substitutes on p->pPrior too */
  3247  ){
  3248    SrcList *pSrc;
  3249    struct SrcList_item *pItem;
  3250    int i;
  3251    if( !p ) return;
  3252    do{
  3253      substExprList(pSubst, p->pEList);
  3254      substExprList(pSubst, p->pGroupBy);
  3255      substExprList(pSubst, p->pOrderBy);
  3256      p->pHaving = substExpr(pSubst, p->pHaving);
  3257      p->pWhere = substExpr(pSubst, p->pWhere);
  3258      pSrc = p->pSrc;
  3259      assert( pSrc!=0 );
  3260      for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
  3261        substSelect(pSubst, pItem->pSelect, 1);
  3262        if( pItem->fg.isTabFunc ){
  3263          substExprList(pSubst, pItem->u1.pFuncArg);
  3264        }
  3265      }
  3266    }while( doPrior && (p = p->pPrior)!=0 );
  3267  }
  3268  #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
  3269  
  3270  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  3271  /*
  3272  ** This routine attempts to flatten subqueries as a performance optimization.
  3273  ** This routine returns 1 if it makes changes and 0 if no flattening occurs.
  3274  **
  3275  ** To understand the concept of flattening, consider the following
  3276  ** query:
  3277  **
  3278  **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
  3279  **
  3280  ** The default way of implementing this query is to execute the
  3281  ** subquery first and store the results in a temporary table, then
  3282  ** run the outer query on that temporary table.  This requires two
  3283  ** passes over the data.  Furthermore, because the temporary table
  3284  ** has no indices, the WHERE clause on the outer query cannot be
  3285  ** optimized.
  3286  **
  3287  ** This routine attempts to rewrite queries such as the above into
  3288  ** a single flat select, like this:
  3289  **
  3290  **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
  3291  **
  3292  ** The code generated for this simplification gives the same result
  3293  ** but only has to scan the data once.  And because indices might 
  3294  ** exist on the table t1, a complete scan of the data might be
  3295  ** avoided.
  3296  **
  3297  ** Flattening is subject to the following constraints:
  3298  **
  3299  **  (**)  We no longer attempt to flatten aggregate subqueries. Was:
  3300  **        The subquery and the outer query cannot both be aggregates.
  3301  **
  3302  **  (**)  We no longer attempt to flatten aggregate subqueries. Was:
  3303  **        (2) If the subquery is an aggregate then
  3304  **        (2a) the outer query must not be a join and
  3305  **        (2b) the outer query must not use subqueries
  3306  **             other than the one FROM-clause subquery that is a candidate
  3307  **             for flattening.  (This is due to ticket [2f7170d73bf9abf80]
  3308  **             from 2015-02-09.)
  3309  **
  3310  **   (3)  If the subquery is the right operand of a LEFT JOIN then
  3311  **        (3a) the subquery may not be a join and
  3312  **        (3b) the FROM clause of the subquery may not contain a virtual
  3313  **             table and
  3314  **        (3c) the outer query may not be an aggregate.
  3315  **
  3316  **   (4)  The subquery can not be DISTINCT.
  3317  **
  3318  **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
  3319  **        sub-queries that were excluded from this optimization. Restriction 
  3320  **        (4) has since been expanded to exclude all DISTINCT subqueries.
  3321  **
  3322  **  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
  3323  **        If the subquery is aggregate, the outer query may not be DISTINCT.
  3324  **
  3325  **   (7)  The subquery must have a FROM clause.  TODO:  For subqueries without
  3326  **        A FROM clause, consider adding a FROM clause with the special
  3327  **        table sqlite_once that consists of a single row containing a
  3328  **        single NULL.
  3329  **
  3330  **   (8)  If the subquery uses LIMIT then the outer query may not be a join.
  3331  **
  3332  **   (9)  If the subquery uses LIMIT then the outer query may not be aggregate.
  3333  **
  3334  **  (**)  Restriction (10) was removed from the code on 2005-02-05 but we
  3335  **        accidently carried the comment forward until 2014-09-15.  Original
  3336  **        constraint: "If the subquery is aggregate then the outer query 
  3337  **        may not use LIMIT."
  3338  **
  3339  **  (11)  The subquery and the outer query may not both have ORDER BY clauses.
  3340  **
  3341  **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
  3342  **        a separate restriction deriving from ticket #350.
  3343  **
  3344  **  (13)  The subquery and outer query may not both use LIMIT.
  3345  **
  3346  **  (14)  The subquery may not use OFFSET.
  3347  **
  3348  **  (15)  If the outer query is part of a compound select, then the
  3349  **        subquery may not use LIMIT.
  3350  **        (See ticket #2339 and ticket [02a8e81d44]).
  3351  **
  3352  **  (16)  If the outer query is aggregate, then the subquery may not
  3353  **        use ORDER BY.  (Ticket #2942)  This used to not matter
  3354  **        until we introduced the group_concat() function.  
  3355  **
  3356  **  (17)  If the subquery is a compound select, then
  3357  **        (17a) all compound operators must be a UNION ALL, and
  3358  **        (17b) no terms within the subquery compound may be aggregate
  3359  **              or DISTINCT, and
  3360  **        (17c) every term within the subquery compound must have a FROM clause
  3361  **        (17d) the outer query may not be
  3362  **              (17d1) aggregate, or
  3363  **              (17d2) DISTINCT, or
  3364  **              (17d3) a join.
  3365  **
  3366  **        The parent and sub-query may contain WHERE clauses. Subject to
  3367  **        rules (11), (13) and (14), they may also contain ORDER BY,
  3368  **        LIMIT and OFFSET clauses.  The subquery cannot use any compound
  3369  **        operator other than UNION ALL because all the other compound
  3370  **        operators have an implied DISTINCT which is disallowed by
  3371  **        restriction (4).
  3372  **
  3373  **        Also, each component of the sub-query must return the same number
  3374  **        of result columns. This is actually a requirement for any compound
  3375  **        SELECT statement, but all the code here does is make sure that no
  3376  **        such (illegal) sub-query is flattened. The caller will detect the
  3377  **        syntax error and return a detailed message.
  3378  **
  3379  **  (18)  If the sub-query is a compound select, then all terms of the
  3380  **        ORDER BY clause of the parent must be simple references to 
  3381  **        columns of the sub-query.
  3382  **
  3383  **  (19)  If the subquery uses LIMIT then the outer query may not
  3384  **        have a WHERE clause.
  3385  **
  3386  **  (**)  Subsumed into (17d3).  Was: If the sub-query is a compound select,
  3387  **        then it must not use an ORDER BY clause - Ticket #3773.  Because
  3388  **        of (17d3), then only way to have a compound subquery is if it is
  3389  **        the only term in the FROM clause of the outer query.  But if the
  3390  **        only term in the FROM clause has an ORDER BY, then it will be
  3391  **        implemented as a co-routine and the flattener will never be called.
  3392  **
  3393  **  (21)  If the subquery uses LIMIT then the outer query may not be
  3394  **        DISTINCT.  (See ticket [752e1646fc]).
  3395  **
  3396  **  (22)  The subquery may not be a recursive CTE.
  3397  **
  3398  **  (**)  Subsumed into restriction (17d3).  Was: If the outer query is
  3399  **        a recursive CTE, then the sub-query may not be a compound query.
  3400  **        This restriction is because transforming the
  3401  **        parent to a compound query confuses the code that handles
  3402  **        recursive queries in multiSelect().
  3403  **
  3404  **  (**)  We no longer attempt to flatten aggregate subqueries.  Was:
  3405  **        The subquery may not be an aggregate that uses the built-in min() or 
  3406  **        or max() functions.  (Without this restriction, a query like:
  3407  **        "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily
  3408  **        return the value X for which Y was maximal.)
  3409  **
  3410  **
  3411  ** In this routine, the "p" parameter is a pointer to the outer query.
  3412  ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
  3413  ** uses aggregates.
  3414  **
  3415  ** If flattening is not attempted, this routine is a no-op and returns 0.
  3416  ** If flattening is attempted this routine returns 1.
  3417  **
  3418  ** All of the expression analysis must occur on both the outer query and
  3419  ** the subquery before this routine runs.
  3420  */
  3421  static int flattenSubquery(
  3422    Parse *pParse,       /* Parsing context */
  3423    Select *p,           /* The parent or outer SELECT statement */
  3424    int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
  3425    int isAgg            /* True if outer SELECT uses aggregate functions */
  3426  ){
  3427    const char *zSavedAuthContext = pParse->zAuthContext;
  3428    Select *pParent;    /* Current UNION ALL term of the other query */
  3429    Select *pSub;       /* The inner query or "subquery" */
  3430    Select *pSub1;      /* Pointer to the rightmost select in sub-query */
  3431    SrcList *pSrc;      /* The FROM clause of the outer query */
  3432    SrcList *pSubSrc;   /* The FROM clause of the subquery */
  3433    int iParent;        /* VDBE cursor number of the pSub result set temp table */
  3434    int iNewParent = -1;/* Replacement table for iParent */
  3435    int isLeftJoin = 0; /* True if pSub is the right side of a LEFT JOIN */    
  3436    int i;              /* Loop counter */
  3437    Expr *pWhere;                    /* The WHERE clause */
  3438    struct SrcList_item *pSubitem;   /* The subquery */
  3439    sqlite3 *db = pParse->db;
  3440  
  3441    /* Check to see if flattening is permitted.  Return 0 if not.
  3442    */
  3443    assert( p!=0 );
  3444    assert( p->pPrior==0 );
  3445    if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0;
  3446    pSrc = p->pSrc;
  3447    assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
  3448    pSubitem = &pSrc->a[iFrom];
  3449    iParent = pSubitem->iCursor;
  3450    pSub = pSubitem->pSelect;
  3451    assert( pSub!=0 );
  3452  
  3453    pSubSrc = pSub->pSrc;
  3454    assert( pSubSrc );
  3455    /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
  3456    ** not arbitrary expressions, we allowed some combining of LIMIT and OFFSET
  3457    ** because they could be computed at compile-time.  But when LIMIT and OFFSET
  3458    ** became arbitrary expressions, we were forced to add restrictions (13)
  3459    ** and (14). */
  3460    if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
  3461    if( pSub->pOffset ) return 0;                          /* Restriction (14) */
  3462    if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){
  3463      return 0;                                            /* Restriction (15) */
  3464    }
  3465    if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
  3466    if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (4)  */
  3467    if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
  3468       return 0;         /* Restrictions (8)(9) */
  3469    }
  3470    if( p->pOrderBy && pSub->pOrderBy ){
  3471       return 0;                                           /* Restriction (11) */
  3472    }
  3473    if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
  3474    if( pSub->pLimit && p->pWhere ) return 0;              /* Restriction (19) */
  3475    if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
  3476       return 0;         /* Restriction (21) */
  3477    }
  3478    if( pSub->selFlags & (SF_Recursive) ){
  3479      return 0; /* Restrictions (22) */
  3480    }
  3481  
  3482    /*
  3483    ** If the subquery is the right operand of a LEFT JOIN, then the
  3484    ** subquery may not be a join itself (3a). Example of why this is not
  3485    ** allowed:
  3486    **
  3487    **         t1 LEFT OUTER JOIN (t2 JOIN t3)
  3488    **
  3489    ** If we flatten the above, we would get
  3490    **
  3491    **         (t1 LEFT OUTER JOIN t2) JOIN t3
  3492    **
  3493    ** which is not at all the same thing.
  3494    **
  3495    ** If the subquery is the right operand of a LEFT JOIN, then the outer
  3496    ** query cannot be an aggregate. (3c)  This is an artifact of the way
  3497    ** aggregates are processed - there is no mechanism to determine if
  3498    ** the LEFT JOIN table should be all-NULL.
  3499    **
  3500    ** See also tickets #306, #350, and #3300.
  3501    */
  3502    if( (pSubitem->fg.jointype & JT_OUTER)!=0 ){
  3503      isLeftJoin = 1;
  3504      if( pSubSrc->nSrc>1 || isAgg || IsVirtual(pSubSrc->a[0].pTab) ){
  3505        /*  (3a)             (3c)     (3b) */
  3506        return 0;
  3507      }
  3508    }
  3509  #ifdef SQLITE_EXTRA_IFNULLROW
  3510    else if( iFrom>0 && !isAgg ){
  3511      /* Setting isLeftJoin to -1 causes OP_IfNullRow opcodes to be generated for
  3512      ** every reference to any result column from subquery in a join, even
  3513      ** though they are not necessary.  This will stress-test the OP_IfNullRow 
  3514      ** opcode. */
  3515      isLeftJoin = -1;
  3516    }
  3517  #endif
  3518  
  3519    /* Restriction (17): If the sub-query is a compound SELECT, then it must
  3520    ** use only the UNION ALL operator. And none of the simple select queries
  3521    ** that make up the compound SELECT are allowed to be aggregate or distinct
  3522    ** queries.
  3523    */
  3524    if( pSub->pPrior ){
  3525      if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
  3526        return 0; /* (17d1), (17d2), or (17d3) */
  3527      }
  3528      for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
  3529        testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
  3530        testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
  3531        assert( pSub->pSrc!=0 );
  3532        assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
  3533        if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0    /* (17b) */
  3534         || (pSub1->pPrior && pSub1->op!=TK_ALL)                 /* (17a) */
  3535         || pSub1->pSrc->nSrc<1                                  /* (17c) */
  3536        ){
  3537          return 0;
  3538        }
  3539        testcase( pSub1->pSrc->nSrc>1 );
  3540      }
  3541  
  3542      /* Restriction (18). */
  3543      if( p->pOrderBy ){
  3544        int ii;
  3545        for(ii=0; ii<p->pOrderBy->nExpr; ii++){
  3546          if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0;
  3547        }
  3548      }
  3549    }
  3550  
  3551    /* Ex-restriction (23):
  3552    ** The only way that the recursive part of a CTE can contain a compound
  3553    ** subquery is for the subquery to be one term of a join.  But if the
  3554    ** subquery is a join, then the flattening has already been stopped by
  3555    ** restriction (17d3)
  3556    */
  3557    assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 );
  3558  
  3559    /* Ex-restriction (20):
  3560    ** A compound subquery must be the only term in the FROM clause of the
  3561    ** outer query by restriction (17d3).  But if that term also has an
  3562    ** ORDER BY clause, then the subquery will be implemented by co-routine
  3563    ** and so the flattener will never be invoked.  Hence, it is not possible
  3564    ** for the subquery to be a compound and have an ORDER BY clause.
  3565    */
  3566    assert( pSub->pPrior==0 || pSub->pOrderBy==0 );
  3567  
  3568    /***** If we reach this point, flattening is permitted. *****/
  3569    SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n",
  3570                     pSub->zSelName, pSub, iFrom));
  3571  
  3572    /* Authorize the subquery */
  3573    pParse->zAuthContext = pSubitem->zName;
  3574    TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
  3575    testcase( i==SQLITE_DENY );
  3576    pParse->zAuthContext = zSavedAuthContext;
  3577  
  3578    /* If the sub-query is a compound SELECT statement, then (by restrictions
  3579    ** 17 and 18 above) it must be a UNION ALL and the parent query must 
  3580    ** be of the form:
  3581    **
  3582    **     SELECT <expr-list> FROM (<sub-query>) <where-clause> 
  3583    **
  3584    ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
  3585    ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or 
  3586    ** OFFSET clauses and joins them to the left-hand-side of the original
  3587    ** using UNION ALL operators. In this case N is the number of simple
  3588    ** select statements in the compound sub-query.
  3589    **
  3590    ** Example:
  3591    **
  3592    **     SELECT a+1 FROM (
  3593    **        SELECT x FROM tab
  3594    **        UNION ALL
  3595    **        SELECT y FROM tab
  3596    **        UNION ALL
  3597    **        SELECT abs(z*2) FROM tab2
  3598    **     ) WHERE a!=5 ORDER BY 1
  3599    **
  3600    ** Transformed into:
  3601    **
  3602    **     SELECT x+1 FROM tab WHERE x+1!=5
  3603    **     UNION ALL
  3604    **     SELECT y+1 FROM tab WHERE y+1!=5
  3605    **     UNION ALL
  3606    **     SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
  3607    **     ORDER BY 1
  3608    **
  3609    ** We call this the "compound-subquery flattening".
  3610    */
  3611    for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
  3612      Select *pNew;
  3613      ExprList *pOrderBy = p->pOrderBy;
  3614      Expr *pLimit = p->pLimit;
  3615      Expr *pOffset = p->pOffset;
  3616      Select *pPrior = p->pPrior;
  3617      p->pOrderBy = 0;
  3618      p->pSrc = 0;
  3619      p->pPrior = 0;
  3620      p->pLimit = 0;
  3621      p->pOffset = 0;
  3622      pNew = sqlite3SelectDup(db, p, 0);
  3623      sqlite3SelectSetName(pNew, pSub->zSelName);
  3624      p->pOffset = pOffset;
  3625      p->pLimit = pLimit;
  3626      p->pOrderBy = pOrderBy;
  3627      p->pSrc = pSrc;
  3628      p->op = TK_ALL;
  3629      if( pNew==0 ){
  3630        p->pPrior = pPrior;
  3631      }else{
  3632        pNew->pPrior = pPrior;
  3633        if( pPrior ) pPrior->pNext = pNew;
  3634        pNew->pNext = p;
  3635        p->pPrior = pNew;
  3636        SELECTTRACE(2,pParse,p,
  3637           ("compound-subquery flattener creates %s.%p as peer\n",
  3638           pNew->zSelName, pNew));
  3639      }
  3640      if( db->mallocFailed ) return 1;
  3641    }
  3642  
  3643    /* Begin flattening the iFrom-th entry of the FROM clause 
  3644    ** in the outer query.
  3645    */
  3646    pSub = pSub1 = pSubitem->pSelect;
  3647  
  3648    /* Delete the transient table structure associated with the
  3649    ** subquery
  3650    */
  3651    sqlite3DbFree(db, pSubitem->zDatabase);
  3652    sqlite3DbFree(db, pSubitem->zName);
  3653    sqlite3DbFree(db, pSubitem->zAlias);
  3654    pSubitem->zDatabase = 0;
  3655    pSubitem->zName = 0;
  3656    pSubitem->zAlias = 0;
  3657    pSubitem->pSelect = 0;
  3658  
  3659    /* Defer deleting the Table object associated with the
  3660    ** subquery until code generation is
  3661    ** complete, since there may still exist Expr.pTab entries that
  3662    ** refer to the subquery even after flattening.  Ticket #3346.
  3663    **
  3664    ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
  3665    */
  3666    if( ALWAYS(pSubitem->pTab!=0) ){
  3667      Table *pTabToDel = pSubitem->pTab;
  3668      if( pTabToDel->nTabRef==1 ){
  3669        Parse *pToplevel = sqlite3ParseToplevel(pParse);
  3670        pTabToDel->pNextZombie = pToplevel->pZombieTab;
  3671        pToplevel->pZombieTab = pTabToDel;
  3672      }else{
  3673        pTabToDel->nTabRef--;
  3674      }
  3675      pSubitem->pTab = 0;
  3676    }
  3677  
  3678    /* The following loop runs once for each term in a compound-subquery
  3679    ** flattening (as described above).  If we are doing a different kind
  3680    ** of flattening - a flattening other than a compound-subquery flattening -
  3681    ** then this loop only runs once.
  3682    **
  3683    ** This loop moves all of the FROM elements of the subquery into the
  3684    ** the FROM clause of the outer query.  Before doing this, remember
  3685    ** the cursor number for the original outer query FROM element in
  3686    ** iParent.  The iParent cursor will never be used.  Subsequent code
  3687    ** will scan expressions looking for iParent references and replace
  3688    ** those references with expressions that resolve to the subquery FROM
  3689    ** elements we are now copying in.
  3690    */
  3691    for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
  3692      int nSubSrc;
  3693      u8 jointype = 0;
  3694      pSubSrc = pSub->pSrc;     /* FROM clause of subquery */
  3695      nSubSrc = pSubSrc->nSrc;  /* Number of terms in subquery FROM clause */
  3696      pSrc = pParent->pSrc;     /* FROM clause of the outer query */
  3697  
  3698      if( pSrc ){
  3699        assert( pParent==p );  /* First time through the loop */
  3700        jointype = pSubitem->fg.jointype;
  3701      }else{
  3702        assert( pParent!=p );  /* 2nd and subsequent times through the loop */
  3703        pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
  3704        if( pSrc==0 ){
  3705          assert( db->mallocFailed );
  3706          break;
  3707        }
  3708      }
  3709  
  3710      /* The subquery uses a single slot of the FROM clause of the outer
  3711      ** query.  If the subquery has more than one element in its FROM clause,
  3712      ** then expand the outer query to make space for it to hold all elements
  3713      ** of the subquery.
  3714      **
  3715      ** Example:
  3716      **
  3717      **    SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
  3718      **
  3719      ** The outer query has 3 slots in its FROM clause.  One slot of the
  3720      ** outer query (the middle slot) is used by the subquery.  The next
  3721      ** block of code will expand the outer query FROM clause to 4 slots.
  3722      ** The middle slot is expanded to two slots in order to make space
  3723      ** for the two elements in the FROM clause of the subquery.
  3724      */
  3725      if( nSubSrc>1 ){
  3726        pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1);
  3727        if( db->mallocFailed ){
  3728          break;
  3729        }
  3730      }
  3731  
  3732      /* Transfer the FROM clause terms from the subquery into the
  3733      ** outer query.
  3734      */
  3735      for(i=0; i<nSubSrc; i++){
  3736        sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing);
  3737        assert( pSrc->a[i+iFrom].fg.isTabFunc==0 );
  3738        pSrc->a[i+iFrom] = pSubSrc->a[i];
  3739        iNewParent = pSubSrc->a[i].iCursor;
  3740        memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
  3741      }
  3742      pSrc->a[iFrom].fg.jointype = jointype;
  3743    
  3744      /* Now begin substituting subquery result set expressions for 
  3745      ** references to the iParent in the outer query.
  3746      ** 
  3747      ** Example:
  3748      **
  3749      **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
  3750      **   \                     \_____________ subquery __________/          /
  3751      **    \_____________________ outer query ______________________________/
  3752      **
  3753      ** We look at every expression in the outer query and every place we see
  3754      ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
  3755      */
  3756      if( pSub->pOrderBy ){
  3757        /* At this point, any non-zero iOrderByCol values indicate that the
  3758        ** ORDER BY column expression is identical to the iOrderByCol'th
  3759        ** expression returned by SELECT statement pSub. Since these values
  3760        ** do not necessarily correspond to columns in SELECT statement pParent,
  3761        ** zero them before transfering the ORDER BY clause.
  3762        **
  3763        ** Not doing this may cause an error if a subsequent call to this
  3764        ** function attempts to flatten a compound sub-query into pParent
  3765        ** (the only way this can happen is if the compound sub-query is
  3766        ** currently part of pSub->pSrc). See ticket [d11a6e908f].  */
  3767        ExprList *pOrderBy = pSub->pOrderBy;
  3768        for(i=0; i<pOrderBy->nExpr; i++){
  3769          pOrderBy->a[i].u.x.iOrderByCol = 0;
  3770        }
  3771        assert( pParent->pOrderBy==0 );
  3772        assert( pSub->pPrior==0 );
  3773        pParent->pOrderBy = pOrderBy;
  3774        pSub->pOrderBy = 0;
  3775      }
  3776      pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
  3777      if( isLeftJoin>0 ){
  3778        setJoinExpr(pWhere, iNewParent);
  3779      }
  3780      pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
  3781      if( db->mallocFailed==0 ){
  3782        SubstContext x;
  3783        x.pParse = pParse;
  3784        x.iTable = iParent;
  3785        x.iNewTable = iNewParent;
  3786        x.isLeftJoin = isLeftJoin;
  3787        x.pEList = pSub->pEList;
  3788        substSelect(&x, pParent, 0);
  3789      }
  3790    
  3791      /* The flattened query is distinct if either the inner or the
  3792      ** outer query is distinct. 
  3793      */
  3794      pParent->selFlags |= pSub->selFlags & SF_Distinct;
  3795    
  3796      /*
  3797      ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
  3798      **
  3799      ** One is tempted to try to add a and b to combine the limits.  But this
  3800      ** does not work if either limit is negative.
  3801      */
  3802      if( pSub->pLimit ){
  3803        pParent->pLimit = pSub->pLimit;
  3804        pSub->pLimit = 0;
  3805      }
  3806    }
  3807  
  3808    /* Finially, delete what is left of the subquery and return
  3809    ** success.
  3810    */
  3811    sqlite3SelectDelete(db, pSub1);
  3812  
  3813  #if SELECTTRACE_ENABLED
  3814    if( sqlite3SelectTrace & 0x100 ){
  3815      SELECTTRACE(0x100,pParse,p,("After flattening:\n"));
  3816      sqlite3TreeViewSelect(0, p, 0);
  3817    }
  3818  #endif
  3819  
  3820    return 1;
  3821  }
  3822  #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
  3823  
  3824  
  3825  
  3826  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  3827  /*
  3828  ** Make copies of relevant WHERE clause terms of the outer query into
  3829  ** the WHERE clause of subquery.  Example:
  3830  **
  3831  **    SELECT * FROM (SELECT a AS x, c-d AS y FROM t1) WHERE x=5 AND y=10;
  3832  **
  3833  ** Transformed into:
  3834  **
  3835  **    SELECT * FROM (SELECT a AS x, c-d AS y FROM t1 WHERE a=5 AND c-d=10)
  3836  **     WHERE x=5 AND y=10;
  3837  **
  3838  ** The hope is that the terms added to the inner query will make it more
  3839  ** efficient.
  3840  **
  3841  ** Do not attempt this optimization if:
  3842  **
  3843  **   (1) (** This restriction was removed on 2017-09-29.  We used to
  3844  **           disallow this optimization for aggregate subqueries, but now
  3845  **           it is allowed by putting the extra terms on the HAVING clause.
  3846  **           The added HAVING clause is pointless if the subquery lacks
  3847  **           a GROUP BY clause.  But such a HAVING clause is also harmless
  3848  **           so there does not appear to be any reason to add extra logic
  3849  **           to suppress it. **)
  3850  **
  3851  **   (2) The inner query is the recursive part of a common table expression.
  3852  **
  3853  **   (3) The inner query has a LIMIT clause (since the changes to the WHERE
  3854  **       close would change the meaning of the LIMIT).
  3855  **
  3856  **   (4) The inner query is the right operand of a LEFT JOIN.  (The caller
  3857  **       enforces this restriction since this routine does not have enough
  3858  **       information to know.)
  3859  **
  3860  **   (5) The WHERE clause expression originates in the ON or USING clause
  3861  **       of a LEFT JOIN.
  3862  **
  3863  ** Return 0 if no changes are made and non-zero if one or more WHERE clause
  3864  ** terms are duplicated into the subquery.
  3865  */
  3866  static int pushDownWhereTerms(
  3867    Parse *pParse,        /* Parse context (for malloc() and error reporting) */
  3868    Select *pSubq,        /* The subquery whose WHERE clause is to be augmented */
  3869    Expr *pWhere,         /* The WHERE clause of the outer query */
  3870    int iCursor           /* Cursor number of the subquery */
  3871  ){
  3872    Expr *pNew;
  3873    int nChng = 0;
  3874    if( pWhere==0 ) return 0;
  3875    if( pSubq->selFlags & SF_Recursive ) return 0;  /* restriction (2) */
  3876  
  3877  #ifdef SQLITE_DEBUG
  3878    /* Only the first term of a compound can have a WITH clause.  But make
  3879    ** sure no other terms are marked SF_Recursive in case something changes
  3880    ** in the future.
  3881    */
  3882    {
  3883      Select *pX;  
  3884      for(pX=pSubq; pX; pX=pX->pPrior){
  3885        assert( (pX->selFlags & (SF_Recursive))==0 );
  3886      }
  3887    }
  3888  #endif
  3889  
  3890    if( pSubq->pLimit!=0 ){
  3891      return 0; /* restriction (3) */
  3892    }
  3893    while( pWhere->op==TK_AND ){
  3894      nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, iCursor);
  3895      pWhere = pWhere->pLeft;
  3896    }
  3897    if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction (5) */
  3898    if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){
  3899      nChng++;
  3900      while( pSubq ){
  3901        SubstContext x;
  3902        pNew = sqlite3ExprDup(pParse->db, pWhere, 0);
  3903        x.pParse = pParse;
  3904        x.iTable = iCursor;
  3905        x.iNewTable = iCursor;
  3906        x.isLeftJoin = 0;
  3907        x.pEList = pSubq->pEList;
  3908        pNew = substExpr(&x, pNew);
  3909        if( pSubq->selFlags & SF_Aggregate ){
  3910          pSubq->pHaving = sqlite3ExprAnd(pParse->db, pSubq->pHaving, pNew);
  3911        }else{
  3912          pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
  3913        }
  3914        pSubq = pSubq->pPrior;
  3915      }
  3916    }
  3917    return nChng;
  3918  }
  3919  #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
  3920  
  3921  /*
  3922  ** Based on the contents of the AggInfo structure indicated by the first
  3923  ** argument, this function checks if the following are true:
  3924  **
  3925  **    * the query contains just a single aggregate function,
  3926  **    * the aggregate function is either min() or max(), and
  3927  **    * the argument to the aggregate function is a column value.
  3928  **
  3929  ** If all of the above are true, then WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX
  3930  ** is returned as appropriate. Also, *ppMinMax is set to point to the 
  3931  ** list of arguments passed to the aggregate before returning.
  3932  **
  3933  ** Or, if the conditions above are not met, *ppMinMax is set to 0 and
  3934  ** WHERE_ORDERBY_NORMAL is returned.
  3935  */
  3936  static u8 minMaxQuery(AggInfo *pAggInfo, ExprList **ppMinMax){
  3937    int eRet = WHERE_ORDERBY_NORMAL;          /* Return value */
  3938  
  3939    *ppMinMax = 0;
  3940    if( pAggInfo->nFunc==1 ){
  3941      Expr *pExpr = pAggInfo->aFunc[0].pExpr; /* Aggregate function */
  3942      ExprList *pEList = pExpr->x.pList;      /* Arguments to agg function */
  3943  
  3944      assert( pExpr->op==TK_AGG_FUNCTION );
  3945      if( pEList && pEList->nExpr==1 && pEList->a[0].pExpr->op==TK_AGG_COLUMN ){
  3946        const char *zFunc = pExpr->u.zToken;
  3947        if( sqlite3StrICmp(zFunc, "min")==0 ){
  3948          eRet = WHERE_ORDERBY_MIN;
  3949          *ppMinMax = pEList;
  3950        }else if( sqlite3StrICmp(zFunc, "max")==0 ){
  3951          eRet = WHERE_ORDERBY_MAX;
  3952          *ppMinMax = pEList;
  3953        }
  3954      }
  3955    }
  3956  
  3957    assert( *ppMinMax==0 || (*ppMinMax)->nExpr==1 );
  3958    return eRet;
  3959  }
  3960  
  3961  /*
  3962  ** The select statement passed as the first argument is an aggregate query.
  3963  ** The second argument is the associated aggregate-info object. This 
  3964  ** function tests if the SELECT is of the form:
  3965  **
  3966  **   SELECT count(*) FROM <tbl>
  3967  **
  3968  ** where table is a database table, not a sub-select or view. If the query
  3969  ** does match this pattern, then a pointer to the Table object representing
  3970  ** <tbl> is returned. Otherwise, 0 is returned.
  3971  */
  3972  static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
  3973    Table *pTab;
  3974    Expr *pExpr;
  3975  
  3976    assert( !p->pGroupBy );
  3977  
  3978    if( p->pWhere || p->pEList->nExpr!=1 
  3979     || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect
  3980    ){
  3981      return 0;
  3982    }
  3983    pTab = p->pSrc->a[0].pTab;
  3984    pExpr = p->pEList->a[0].pExpr;
  3985    assert( pTab && !pTab->pSelect && pExpr );
  3986  
  3987    if( IsVirtual(pTab) ) return 0;
  3988    if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
  3989    if( NEVER(pAggInfo->nFunc==0) ) return 0;
  3990    if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0;
  3991    if( pExpr->flags&EP_Distinct ) return 0;
  3992  
  3993    return pTab;
  3994  }
  3995  
  3996  /*
  3997  ** If the source-list item passed as an argument was augmented with an
  3998  ** INDEXED BY clause, then try to locate the specified index. If there
  3999  ** was such a clause and the named index cannot be found, return 
  4000  ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate 
  4001  ** pFrom->pIndex and return SQLITE_OK.
  4002  */
  4003  int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
  4004    if( pFrom->pTab && pFrom->fg.isIndexedBy ){
  4005      Table *pTab = pFrom->pTab;
  4006      char *zIndexedBy = pFrom->u1.zIndexedBy;
  4007      Index *pIdx;
  4008      for(pIdx=pTab->pIndex; 
  4009          pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy); 
  4010          pIdx=pIdx->pNext
  4011      );
  4012      if( !pIdx ){
  4013        sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0);
  4014        pParse->checkSchema = 1;
  4015        return SQLITE_ERROR;
  4016      }
  4017      pFrom->pIBIndex = pIdx;
  4018    }
  4019    return SQLITE_OK;
  4020  }
  4021  /*
  4022  ** Detect compound SELECT statements that use an ORDER BY clause with 
  4023  ** an alternative collating sequence.
  4024  **
  4025  **    SELECT ... FROM t1 EXCEPT SELECT ... FROM t2 ORDER BY .. COLLATE ...
  4026  **
  4027  ** These are rewritten as a subquery:
  4028  **
  4029  **    SELECT * FROM (SELECT ... FROM t1 EXCEPT SELECT ... FROM t2)
  4030  **     ORDER BY ... COLLATE ...
  4031  **
  4032  ** This transformation is necessary because the multiSelectOrderBy() routine
  4033  ** above that generates the code for a compound SELECT with an ORDER BY clause
  4034  ** uses a merge algorithm that requires the same collating sequence on the
  4035  ** result columns as on the ORDER BY clause.  See ticket
  4036  ** http://www.sqlite.org/src/info/6709574d2a
  4037  **
  4038  ** This transformation is only needed for EXCEPT, INTERSECT, and UNION.
  4039  ** The UNION ALL operator works fine with multiSelectOrderBy() even when
  4040  ** there are COLLATE terms in the ORDER BY.
  4041  */
  4042  static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){
  4043    int i;
  4044    Select *pNew;
  4045    Select *pX;
  4046    sqlite3 *db;
  4047    struct ExprList_item *a;
  4048    SrcList *pNewSrc;
  4049    Parse *pParse;
  4050    Token dummy;
  4051  
  4052    if( p->pPrior==0 ) return WRC_Continue;
  4053    if( p->pOrderBy==0 ) return WRC_Continue;
  4054    for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){}
  4055    if( pX==0 ) return WRC_Continue;
  4056    a = p->pOrderBy->a;
  4057    for(i=p->pOrderBy->nExpr-1; i>=0; i--){
  4058      if( a[i].pExpr->flags & EP_Collate ) break;
  4059    }
  4060    if( i<0 ) return WRC_Continue;
  4061  
  4062    /* If we reach this point, that means the transformation is required. */
  4063  
  4064    pParse = pWalker->pParse;
  4065    db = pParse->db;
  4066    pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
  4067    if( pNew==0 ) return WRC_Abort;
  4068    memset(&dummy, 0, sizeof(dummy));
  4069    pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0,0);
  4070    if( pNewSrc==0 ) return WRC_Abort;
  4071    *pNew = *p;
  4072    p->pSrc = pNewSrc;
  4073    p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0));
  4074    p->op = TK_SELECT;
  4075    p->pWhere = 0;
  4076    pNew->pGroupBy = 0;
  4077    pNew->pHaving = 0;
  4078    pNew->pOrderBy = 0;
  4079    p->pPrior = 0;
  4080    p->pNext = 0;
  4081    p->pWith = 0;
  4082    p->selFlags &= ~SF_Compound;
  4083    assert( (p->selFlags & SF_Converted)==0 );
  4084    p->selFlags |= SF_Converted;
  4085    assert( pNew->pPrior!=0 );
  4086    pNew->pPrior->pNext = pNew;
  4087    pNew->pLimit = 0;
  4088    pNew->pOffset = 0;
  4089    return WRC_Continue;
  4090  }
  4091  
  4092  /*
  4093  ** Check to see if the FROM clause term pFrom has table-valued function
  4094  ** arguments.  If it does, leave an error message in pParse and return
  4095  ** non-zero, since pFrom is not allowed to be a table-valued function.
  4096  */
  4097  static int cannotBeFunction(Parse *pParse, struct SrcList_item *pFrom){
  4098    if( pFrom->fg.isTabFunc ){
  4099      sqlite3ErrorMsg(pParse, "'%s' is not a function", pFrom->zName);
  4100      return 1;
  4101    }
  4102    return 0;
  4103  }
  4104  
  4105  #ifndef SQLITE_OMIT_CTE
  4106  /*
  4107  ** Argument pWith (which may be NULL) points to a linked list of nested 
  4108  ** WITH contexts, from inner to outermost. If the table identified by 
  4109  ** FROM clause element pItem is really a common-table-expression (CTE) 
  4110  ** then return a pointer to the CTE definition for that table. Otherwise
  4111  ** return NULL.
  4112  **
  4113  ** If a non-NULL value is returned, set *ppContext to point to the With
  4114  ** object that the returned CTE belongs to.
  4115  */
  4116  static struct Cte *searchWith(
  4117    With *pWith,                    /* Current innermost WITH clause */
  4118    struct SrcList_item *pItem,     /* FROM clause element to resolve */
  4119    With **ppContext                /* OUT: WITH clause return value belongs to */
  4120  ){
  4121    const char *zName;
  4122    if( pItem->zDatabase==0 && (zName = pItem->zName)!=0 ){
  4123      With *p;
  4124      for(p=pWith; p; p=p->pOuter){
  4125        int i;
  4126        for(i=0; i<p->nCte; i++){
  4127          if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){
  4128            *ppContext = p;
  4129            return &p->a[i];
  4130          }
  4131        }
  4132      }
  4133    }
  4134    return 0;
  4135  }
  4136  
  4137  /* The code generator maintains a stack of active WITH clauses
  4138  ** with the inner-most WITH clause being at the top of the stack.
  4139  **
  4140  ** This routine pushes the WITH clause passed as the second argument
  4141  ** onto the top of the stack. If argument bFree is true, then this
  4142  ** WITH clause will never be popped from the stack. In this case it
  4143  ** should be freed along with the Parse object. In other cases, when
  4144  ** bFree==0, the With object will be freed along with the SELECT 
  4145  ** statement with which it is associated.
  4146  */
  4147  void sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){
  4148    assert( bFree==0 || (pParse->pWith==0 && pParse->pWithToFree==0) );
  4149    if( pWith ){
  4150      assert( pParse->pWith!=pWith );
  4151      pWith->pOuter = pParse->pWith;
  4152      pParse->pWith = pWith;
  4153      if( bFree ) pParse->pWithToFree = pWith;
  4154    }
  4155  }
  4156  
  4157  /*
  4158  ** This function checks if argument pFrom refers to a CTE declared by 
  4159  ** a WITH clause on the stack currently maintained by the parser. And,
  4160  ** if currently processing a CTE expression, if it is a recursive
  4161  ** reference to the current CTE.
  4162  **
  4163  ** If pFrom falls into either of the two categories above, pFrom->pTab
  4164  ** and other fields are populated accordingly. The caller should check
  4165  ** (pFrom->pTab!=0) to determine whether or not a successful match
  4166  ** was found.
  4167  **
  4168  ** Whether or not a match is found, SQLITE_OK is returned if no error
  4169  ** occurs. If an error does occur, an error message is stored in the
  4170  ** parser and some error code other than SQLITE_OK returned.
  4171  */
  4172  static int withExpand(
  4173    Walker *pWalker, 
  4174    struct SrcList_item *pFrom
  4175  ){
  4176    Parse *pParse = pWalker->pParse;
  4177    sqlite3 *db = pParse->db;
  4178    struct Cte *pCte;               /* Matched CTE (or NULL if no match) */
  4179    With *pWith;                    /* WITH clause that pCte belongs to */
  4180  
  4181    assert( pFrom->pTab==0 );
  4182  
  4183    pCte = searchWith(pParse->pWith, pFrom, &pWith);
  4184    if( pCte ){
  4185      Table *pTab;
  4186      ExprList *pEList;
  4187      Select *pSel;
  4188      Select *pLeft;                /* Left-most SELECT statement */
  4189      int bMayRecursive;            /* True if compound joined by UNION [ALL] */
  4190      With *pSavedWith;             /* Initial value of pParse->pWith */
  4191  
  4192      /* If pCte->zCteErr is non-NULL at this point, then this is an illegal
  4193      ** recursive reference to CTE pCte. Leave an error in pParse and return
  4194      ** early. If pCte->zCteErr is NULL, then this is not a recursive reference.
  4195      ** In this case, proceed.  */
  4196      if( pCte->zCteErr ){
  4197        sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName);
  4198        return SQLITE_ERROR;
  4199      }
  4200      if( cannotBeFunction(pParse, pFrom) ) return SQLITE_ERROR;
  4201  
  4202      assert( pFrom->pTab==0 );
  4203      pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
  4204      if( pTab==0 ) return WRC_Abort;
  4205      pTab->nTabRef = 1;
  4206      pTab->zName = sqlite3DbStrDup(db, pCte->zName);
  4207      pTab->iPKey = -1;
  4208      pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
  4209      pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
  4210      pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
  4211      if( db->mallocFailed ) return SQLITE_NOMEM_BKPT;
  4212      assert( pFrom->pSelect );
  4213  
  4214      /* Check if this is a recursive CTE. */
  4215      pSel = pFrom->pSelect;
  4216      bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION );
  4217      if( bMayRecursive ){
  4218        int i;
  4219        SrcList *pSrc = pFrom->pSelect->pSrc;
  4220        for(i=0; i<pSrc->nSrc; i++){
  4221          struct SrcList_item *pItem = &pSrc->a[i];
  4222          if( pItem->zDatabase==0 
  4223           && pItem->zName!=0 
  4224           && 0==sqlite3StrICmp(pItem->zName, pCte->zName)
  4225            ){
  4226            pItem->pTab = pTab;
  4227            pItem->fg.isRecursive = 1;
  4228            pTab->nTabRef++;
  4229            pSel->selFlags |= SF_Recursive;
  4230          }
  4231        }
  4232      }
  4233  
  4234      /* Only one recursive reference is permitted. */ 
  4235      if( pTab->nTabRef>2 ){
  4236        sqlite3ErrorMsg(
  4237            pParse, "multiple references to recursive table: %s", pCte->zName
  4238        );
  4239        return SQLITE_ERROR;
  4240      }
  4241      assert( pTab->nTabRef==1 || 
  4242              ((pSel->selFlags&SF_Recursive) && pTab->nTabRef==2 ));
  4243  
  4244      pCte->zCteErr = "circular reference: %s";
  4245      pSavedWith = pParse->pWith;
  4246      pParse->pWith = pWith;
  4247      if( bMayRecursive ){
  4248        Select *pPrior = pSel->pPrior;
  4249        assert( pPrior->pWith==0 );
  4250        pPrior->pWith = pSel->pWith;
  4251        sqlite3WalkSelect(pWalker, pPrior);
  4252        pPrior->pWith = 0;
  4253      }else{
  4254        sqlite3WalkSelect(pWalker, pSel);
  4255      }
  4256      pParse->pWith = pWith;
  4257  
  4258      for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior);
  4259      pEList = pLeft->pEList;
  4260      if( pCte->pCols ){
  4261        if( pEList && pEList->nExpr!=pCte->pCols->nExpr ){
  4262          sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns",
  4263              pCte->zName, pEList->nExpr, pCte->pCols->nExpr
  4264          );
  4265          pParse->pWith = pSavedWith;
  4266          return SQLITE_ERROR;
  4267        }
  4268        pEList = pCte->pCols;
  4269      }
  4270  
  4271      sqlite3ColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol);
  4272      if( bMayRecursive ){
  4273        if( pSel->selFlags & SF_Recursive ){
  4274          pCte->zCteErr = "multiple recursive references: %s";
  4275        }else{
  4276          pCte->zCteErr = "recursive reference in a subquery: %s";
  4277        }
  4278        sqlite3WalkSelect(pWalker, pSel);
  4279      }
  4280      pCte->zCteErr = 0;
  4281      pParse->pWith = pSavedWith;
  4282    }
  4283  
  4284    return SQLITE_OK;
  4285  }
  4286  #endif
  4287  
  4288  #ifndef SQLITE_OMIT_CTE
  4289  /*
  4290  ** If the SELECT passed as the second argument has an associated WITH 
  4291  ** clause, pop it from the stack stored as part of the Parse object.
  4292  **
  4293  ** This function is used as the xSelectCallback2() callback by
  4294  ** sqlite3SelectExpand() when walking a SELECT tree to resolve table
  4295  ** names and other FROM clause elements. 
  4296  */
  4297  static void selectPopWith(Walker *pWalker, Select *p){
  4298    Parse *pParse = pWalker->pParse;
  4299    if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){
  4300      With *pWith = findRightmost(p)->pWith;
  4301      if( pWith!=0 ){
  4302        assert( pParse->pWith==pWith );
  4303        pParse->pWith = pWith->pOuter;
  4304      }
  4305    }
  4306  }
  4307  #else
  4308  #define selectPopWith 0
  4309  #endif
  4310  
  4311  /*
  4312  ** This routine is a Walker callback for "expanding" a SELECT statement.
  4313  ** "Expanding" means to do the following:
  4314  **
  4315  **    (1)  Make sure VDBE cursor numbers have been assigned to every
  4316  **         element of the FROM clause.
  4317  **
  4318  **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
  4319  **         defines FROM clause.  When views appear in the FROM clause,
  4320  **         fill pTabList->a[].pSelect with a copy of the SELECT statement
  4321  **         that implements the view.  A copy is made of the view's SELECT
  4322  **         statement so that we can freely modify or delete that statement
  4323  **         without worrying about messing up the persistent representation
  4324  **         of the view.
  4325  **
  4326  **    (3)  Add terms to the WHERE clause to accommodate the NATURAL keyword
  4327  **         on joins and the ON and USING clause of joins.
  4328  **
  4329  **    (4)  Scan the list of columns in the result set (pEList) looking
  4330  **         for instances of the "*" operator or the TABLE.* operator.
  4331  **         If found, expand each "*" to be every column in every table
  4332  **         and TABLE.* to be every column in TABLE.
  4333  **
  4334  */
  4335  static int selectExpander(Walker *pWalker, Select *p){
  4336    Parse *pParse = pWalker->pParse;
  4337    int i, j, k;
  4338    SrcList *pTabList;
  4339    ExprList *pEList;
  4340    struct SrcList_item *pFrom;
  4341    sqlite3 *db = pParse->db;
  4342    Expr *pE, *pRight, *pExpr;
  4343    u16 selFlags = p->selFlags;
  4344  
  4345    p->selFlags |= SF_Expanded;
  4346    if( db->mallocFailed  ){
  4347      return WRC_Abort;
  4348    }
  4349    if( NEVER(p->pSrc==0) || (selFlags & SF_Expanded)!=0 ){
  4350      return WRC_Prune;
  4351    }
  4352    pTabList = p->pSrc;
  4353    pEList = p->pEList;
  4354    if( OK_IF_ALWAYS_TRUE(p->pWith) ){
  4355      sqlite3WithPush(pParse, p->pWith, 0);
  4356    }
  4357  
  4358    /* Make sure cursor numbers have been assigned to all entries in
  4359    ** the FROM clause of the SELECT statement.
  4360    */
  4361    sqlite3SrcListAssignCursors(pParse, pTabList);
  4362  
  4363    /* Look up every table named in the FROM clause of the select.  If
  4364    ** an entry of the FROM clause is a subquery instead of a table or view,
  4365    ** then create a transient table structure to describe the subquery.
  4366    */
  4367    for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
  4368      Table *pTab;
  4369      assert( pFrom->fg.isRecursive==0 || pFrom->pTab!=0 );
  4370      if( pFrom->fg.isRecursive ) continue;
  4371      assert( pFrom->pTab==0 );
  4372  #ifndef SQLITE_OMIT_CTE
  4373      if( withExpand(pWalker, pFrom) ) return WRC_Abort;
  4374      if( pFrom->pTab ) {} else
  4375  #endif
  4376      if( pFrom->zName==0 ){
  4377  #ifndef SQLITE_OMIT_SUBQUERY
  4378        Select *pSel = pFrom->pSelect;
  4379        /* A sub-query in the FROM clause of a SELECT */
  4380        assert( pSel!=0 );
  4381        assert( pFrom->pTab==0 );
  4382        if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort;
  4383        pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
  4384        if( pTab==0 ) return WRC_Abort;
  4385        pTab->nTabRef = 1;
  4386        if( pFrom->zAlias ){
  4387          pTab->zName = sqlite3DbStrDup(db, pFrom->zAlias);
  4388        }else{
  4389          pTab->zName = sqlite3MPrintf(db, "subquery_%p", (void*)pTab);
  4390        }
  4391        while( pSel->pPrior ){ pSel = pSel->pPrior; }
  4392        sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol);
  4393        pTab->iPKey = -1;
  4394        pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
  4395        pTab->tabFlags |= TF_Ephemeral;
  4396  #endif
  4397      }else{
  4398        /* An ordinary table or view name in the FROM clause */
  4399        assert( pFrom->pTab==0 );
  4400        pFrom->pTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom);
  4401        if( pTab==0 ) return WRC_Abort;
  4402        if( pTab->nTabRef>=0xffff ){
  4403          sqlite3ErrorMsg(pParse, "too many references to \"%s\": max 65535",
  4404             pTab->zName);
  4405          pFrom->pTab = 0;
  4406          return WRC_Abort;
  4407        }
  4408        pTab->nTabRef++;
  4409        if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){
  4410          return WRC_Abort;
  4411        }
  4412  #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
  4413        if( IsVirtual(pTab) || pTab->pSelect ){
  4414          i16 nCol;
  4415          if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
  4416          assert( pFrom->pSelect==0 );
  4417          pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
  4418          sqlite3SelectSetName(pFrom->pSelect, pTab->zName);
  4419          nCol = pTab->nCol;
  4420          pTab->nCol = -1;
  4421          sqlite3WalkSelect(pWalker, pFrom->pSelect);
  4422          pTab->nCol = nCol;
  4423        }
  4424  #endif
  4425      }
  4426  
  4427      /* Locate the index named by the INDEXED BY clause, if any. */
  4428      if( sqlite3IndexedByLookup(pParse, pFrom) ){
  4429        return WRC_Abort;
  4430      }
  4431    }
  4432  
  4433    /* Process NATURAL keywords, and ON and USING clauses of joins.
  4434    */
  4435    if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
  4436      return WRC_Abort;
  4437    }
  4438  
  4439    /* For every "*" that occurs in the column list, insert the names of
  4440    ** all columns in all tables.  And for every TABLE.* insert the names
  4441    ** of all columns in TABLE.  The parser inserted a special expression
  4442    ** with the TK_ASTERISK operator for each "*" that it found in the column
  4443    ** list.  The following code just has to locate the TK_ASTERISK
  4444    ** expressions and expand each one to the list of all columns in
  4445    ** all tables.
  4446    **
  4447    ** The first loop just checks to see if there are any "*" operators
  4448    ** that need expanding.
  4449    */
  4450    for(k=0; k<pEList->nExpr; k++){
  4451      pE = pEList->a[k].pExpr;
  4452      if( pE->op==TK_ASTERISK ) break;
  4453      assert( pE->op!=TK_DOT || pE->pRight!=0 );
  4454      assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
  4455      if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break;
  4456    }
  4457    if( k<pEList->nExpr ){
  4458      /*
  4459      ** If we get here it means the result set contains one or more "*"
  4460      ** operators that need to be expanded.  Loop through each expression
  4461      ** in the result set and expand them one by one.
  4462      */
  4463      struct ExprList_item *a = pEList->a;
  4464      ExprList *pNew = 0;
  4465      int flags = pParse->db->flags;
  4466      int longNames = (flags & SQLITE_FullColNames)!=0
  4467                        && (flags & SQLITE_ShortColNames)==0;
  4468  
  4469      for(k=0; k<pEList->nExpr; k++){
  4470        pE = a[k].pExpr;
  4471        pRight = pE->pRight;
  4472        assert( pE->op!=TK_DOT || pRight!=0 );
  4473        if( pE->op!=TK_ASTERISK
  4474         && (pE->op!=TK_DOT || pRight->op!=TK_ASTERISK)
  4475        ){
  4476          /* This particular expression does not need to be expanded.
  4477          */
  4478          pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
  4479          if( pNew ){
  4480            pNew->a[pNew->nExpr-1].zName = a[k].zName;
  4481            pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan;
  4482            a[k].zName = 0;
  4483            a[k].zSpan = 0;
  4484          }
  4485          a[k].pExpr = 0;
  4486        }else{
  4487          /* This expression is a "*" or a "TABLE.*" and needs to be
  4488          ** expanded. */
  4489          int tableSeen = 0;      /* Set to 1 when TABLE matches */
  4490          char *zTName = 0;       /* text of name of TABLE */
  4491          if( pE->op==TK_DOT ){
  4492            assert( pE->pLeft!=0 );
  4493            assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
  4494            zTName = pE->pLeft->u.zToken;
  4495          }
  4496          for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
  4497            Table *pTab = pFrom->pTab;
  4498            Select *pSub = pFrom->pSelect;
  4499            char *zTabName = pFrom->zAlias;
  4500            const char *zSchemaName = 0;
  4501            int iDb;
  4502            if( zTabName==0 ){
  4503              zTabName = pTab->zName;
  4504            }
  4505            if( db->mallocFailed ) break;
  4506            if( pSub==0 || (pSub->selFlags & SF_NestedFrom)==0 ){
  4507              pSub = 0;
  4508              if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
  4509                continue;
  4510              }
  4511              iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
  4512              zSchemaName = iDb>=0 ? db->aDb[iDb].zDbSName : "*";
  4513            }
  4514            for(j=0; j<pTab->nCol; j++){
  4515              char *zName = pTab->aCol[j].zName;
  4516              char *zColname;  /* The computed column name */
  4517              char *zToFree;   /* Malloced string that needs to be freed */
  4518              Token sColname;  /* Computed column name as a token */
  4519  
  4520              assert( zName );
  4521              if( zTName && pSub
  4522               && sqlite3MatchSpanName(pSub->pEList->a[j].zSpan, 0, zTName, 0)==0
  4523              ){
  4524                continue;
  4525              }
  4526  
  4527              /* If a column is marked as 'hidden', omit it from the expanded
  4528              ** result-set list unless the SELECT has the SF_IncludeHidden
  4529              ** bit set.
  4530              */
  4531              if( (p->selFlags & SF_IncludeHidden)==0
  4532               && IsHiddenColumn(&pTab->aCol[j]) 
  4533              ){
  4534                continue;
  4535              }
  4536              tableSeen = 1;
  4537  
  4538              if( i>0 && zTName==0 ){
  4539                if( (pFrom->fg.jointype & JT_NATURAL)!=0
  4540                  && tableAndColumnIndex(pTabList, i, zName, 0, 0)
  4541                ){
  4542                  /* In a NATURAL join, omit the join columns from the 
  4543                  ** table to the right of the join */
  4544                  continue;
  4545                }
  4546                if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){
  4547                  /* In a join with a USING clause, omit columns in the
  4548                  ** using clause from the table on the right. */
  4549                  continue;
  4550                }
  4551              }
  4552              pRight = sqlite3Expr(db, TK_ID, zName);
  4553              zColname = zName;
  4554              zToFree = 0;
  4555              if( longNames || pTabList->nSrc>1 ){
  4556                Expr *pLeft;
  4557                pLeft = sqlite3Expr(db, TK_ID, zTabName);
  4558                pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
  4559                if( zSchemaName ){
  4560                  pLeft = sqlite3Expr(db, TK_ID, zSchemaName);
  4561                  pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr);
  4562                }
  4563                if( longNames ){
  4564                  zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
  4565                  zToFree = zColname;
  4566                }
  4567              }else{
  4568                pExpr = pRight;
  4569              }
  4570              pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
  4571              sqlite3TokenInit(&sColname, zColname);
  4572              sqlite3ExprListSetName(pParse, pNew, &sColname, 0);
  4573              if( pNew && (p->selFlags & SF_NestedFrom)!=0 ){
  4574                struct ExprList_item *pX = &pNew->a[pNew->nExpr-1];
  4575                if( pSub ){
  4576                  pX->zSpan = sqlite3DbStrDup(db, pSub->pEList->a[j].zSpan);
  4577                  testcase( pX->zSpan==0 );
  4578                }else{
  4579                  pX->zSpan = sqlite3MPrintf(db, "%s.%s.%s",
  4580                                             zSchemaName, zTabName, zColname);
  4581                  testcase( pX->zSpan==0 );
  4582                }
  4583                pX->bSpanIsTab = 1;
  4584              }
  4585              sqlite3DbFree(db, zToFree);
  4586            }
  4587          }
  4588          if( !tableSeen ){
  4589            if( zTName ){
  4590              sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
  4591            }else{
  4592              sqlite3ErrorMsg(pParse, "no tables specified");
  4593            }
  4594          }
  4595        }
  4596      }
  4597      sqlite3ExprListDelete(db, pEList);
  4598      p->pEList = pNew;
  4599    }
  4600    if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
  4601      sqlite3ErrorMsg(pParse, "too many columns in result set");
  4602      return WRC_Abort;
  4603    }
  4604    return WRC_Continue;
  4605  }
  4606  
  4607  /*
  4608  ** No-op routine for the parse-tree walker.
  4609  **
  4610  ** When this routine is the Walker.xExprCallback then expression trees
  4611  ** are walked without any actions being taken at each node.  Presumably,
  4612  ** when this routine is used for Walker.xExprCallback then 
  4613  ** Walker.xSelectCallback is set to do something useful for every 
  4614  ** subquery in the parser tree.
  4615  */
  4616  int sqlite3ExprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
  4617    UNUSED_PARAMETER2(NotUsed, NotUsed2);
  4618    return WRC_Continue;
  4619  }
  4620  
  4621  /*
  4622  ** No-op routine for the parse-tree walker for SELECT statements.
  4623  ** subquery in the parser tree.
  4624  */
  4625  int sqlite3SelectWalkNoop(Walker *NotUsed, Select *NotUsed2){
  4626    UNUSED_PARAMETER2(NotUsed, NotUsed2);
  4627    return WRC_Continue;
  4628  }
  4629  
  4630  #if SQLITE_DEBUG
  4631  /*
  4632  ** Always assert.  This xSelectCallback2 implementation proves that the
  4633  ** xSelectCallback2 is never invoked.
  4634  */
  4635  void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){
  4636    UNUSED_PARAMETER2(NotUsed, NotUsed2);
  4637    assert( 0 );
  4638  }
  4639  #endif
  4640  /*
  4641  ** This routine "expands" a SELECT statement and all of its subqueries.
  4642  ** For additional information on what it means to "expand" a SELECT
  4643  ** statement, see the comment on the selectExpand worker callback above.
  4644  **
  4645  ** Expanding a SELECT statement is the first step in processing a
  4646  ** SELECT statement.  The SELECT statement must be expanded before
  4647  ** name resolution is performed.
  4648  **
  4649  ** If anything goes wrong, an error message is written into pParse.
  4650  ** The calling function can detect the problem by looking at pParse->nErr
  4651  ** and/or pParse->db->mallocFailed.
  4652  */
  4653  static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
  4654    Walker w;
  4655    w.xExprCallback = sqlite3ExprWalkNoop;
  4656    w.pParse = pParse;
  4657    if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){
  4658      w.xSelectCallback = convertCompoundSelectToSubquery;
  4659      w.xSelectCallback2 = 0;
  4660      sqlite3WalkSelect(&w, pSelect);
  4661    }
  4662    w.xSelectCallback = selectExpander;
  4663    w.xSelectCallback2 = selectPopWith;
  4664    sqlite3WalkSelect(&w, pSelect);
  4665  }
  4666  
  4667  
  4668  #ifndef SQLITE_OMIT_SUBQUERY
  4669  /*
  4670  ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
  4671  ** interface.
  4672  **
  4673  ** For each FROM-clause subquery, add Column.zType and Column.zColl
  4674  ** information to the Table structure that represents the result set
  4675  ** of that subquery.
  4676  **
  4677  ** The Table structure that represents the result set was constructed
  4678  ** by selectExpander() but the type and collation information was omitted
  4679  ** at that point because identifiers had not yet been resolved.  This
  4680  ** routine is called after identifier resolution.
  4681  */
  4682  static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
  4683    Parse *pParse;
  4684    int i;
  4685    SrcList *pTabList;
  4686    struct SrcList_item *pFrom;
  4687  
  4688    assert( p->selFlags & SF_Resolved );
  4689    assert( (p->selFlags & SF_HasTypeInfo)==0 );
  4690    p->selFlags |= SF_HasTypeInfo;
  4691    pParse = pWalker->pParse;
  4692    pTabList = p->pSrc;
  4693    for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
  4694      Table *pTab = pFrom->pTab;
  4695      assert( pTab!=0 );
  4696      if( (pTab->tabFlags & TF_Ephemeral)!=0 ){
  4697        /* A sub-query in the FROM clause of a SELECT */
  4698        Select *pSel = pFrom->pSelect;
  4699        if( pSel ){
  4700          while( pSel->pPrior ) pSel = pSel->pPrior;
  4701          sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel);
  4702        }
  4703      }
  4704    }
  4705  }
  4706  #endif
  4707  
  4708  
  4709  /*
  4710  ** This routine adds datatype and collating sequence information to
  4711  ** the Table structures of all FROM-clause subqueries in a
  4712  ** SELECT statement.
  4713  **
  4714  ** Use this routine after name resolution.
  4715  */
  4716  static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
  4717  #ifndef SQLITE_OMIT_SUBQUERY
  4718    Walker w;
  4719    w.xSelectCallback = sqlite3SelectWalkNoop;
  4720    w.xSelectCallback2 = selectAddSubqueryTypeInfo;
  4721    w.xExprCallback = sqlite3ExprWalkNoop;
  4722    w.pParse = pParse;
  4723    sqlite3WalkSelect(&w, pSelect);
  4724  #endif
  4725  }
  4726  
  4727  
  4728  /*
  4729  ** This routine sets up a SELECT statement for processing.  The
  4730  ** following is accomplished:
  4731  **
  4732  **     *  VDBE Cursor numbers are assigned to all FROM-clause terms.
  4733  **     *  Ephemeral Table objects are created for all FROM-clause subqueries.
  4734  **     *  ON and USING clauses are shifted into WHERE statements
  4735  **     *  Wildcards "*" and "TABLE.*" in result sets are expanded.
  4736  **     *  Identifiers in expression are matched to tables.
  4737  **
  4738  ** This routine acts recursively on all subqueries within the SELECT.
  4739  */
  4740  void sqlite3SelectPrep(
  4741    Parse *pParse,         /* The parser context */
  4742    Select *p,             /* The SELECT statement being coded. */
  4743    NameContext *pOuterNC  /* Name context for container */
  4744  ){
  4745    assert( p!=0 || pParse->db->mallocFailed );
  4746    if( pParse->db->mallocFailed ) return;
  4747    if( p->selFlags & SF_HasTypeInfo ) return;
  4748    sqlite3SelectExpand(pParse, p);
  4749    if( pParse->nErr || pParse->db->mallocFailed ) return;
  4750    sqlite3ResolveSelectNames(pParse, p, pOuterNC);
  4751    if( pParse->nErr || pParse->db->mallocFailed ) return;
  4752    sqlite3SelectAddTypeInfo(pParse, p);
  4753  }
  4754  
  4755  /*
  4756  ** Reset the aggregate accumulator.
  4757  **
  4758  ** The aggregate accumulator is a set of memory cells that hold
  4759  ** intermediate results while calculating an aggregate.  This
  4760  ** routine generates code that stores NULLs in all of those memory
  4761  ** cells.
  4762  */
  4763  static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
  4764    Vdbe *v = pParse->pVdbe;
  4765    int i;
  4766    struct AggInfo_func *pFunc;
  4767    int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
  4768    if( nReg==0 ) return;
  4769  #ifdef SQLITE_DEBUG
  4770    /* Verify that all AggInfo registers are within the range specified by
  4771    ** AggInfo.mnReg..AggInfo.mxReg */
  4772    assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 );
  4773    for(i=0; i<pAggInfo->nColumn; i++){
  4774      assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg
  4775           && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg );
  4776    }
  4777    for(i=0; i<pAggInfo->nFunc; i++){
  4778      assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg
  4779           && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg );
  4780    }
  4781  #endif
  4782    sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg);
  4783    for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
  4784      if( pFunc->iDistinct>=0 ){
  4785        Expr *pE = pFunc->pExpr;
  4786        assert( !ExprHasProperty(pE, EP_xIsSelect) );
  4787        if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
  4788          sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
  4789             "argument");
  4790          pFunc->iDistinct = -1;
  4791        }else{
  4792          KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList, 0, 0);
  4793          sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
  4794                            (char*)pKeyInfo, P4_KEYINFO);
  4795        }
  4796      }
  4797    }
  4798  }
  4799  
  4800  /*
  4801  ** Invoke the OP_AggFinalize opcode for every aggregate function
  4802  ** in the AggInfo structure.
  4803  */
  4804  static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
  4805    Vdbe *v = pParse->pVdbe;
  4806    int i;
  4807    struct AggInfo_func *pF;
  4808    for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
  4809      ExprList *pList = pF->pExpr->x.pList;
  4810      assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
  4811      sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0);
  4812      sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
  4813    }
  4814  }
  4815  
  4816  /*
  4817  ** Update the accumulator memory cells for an aggregate based on
  4818  ** the current cursor position.
  4819  */
  4820  static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
  4821    Vdbe *v = pParse->pVdbe;
  4822    int i;
  4823    int regHit = 0;
  4824    int addrHitTest = 0;
  4825    struct AggInfo_func *pF;
  4826    struct AggInfo_col *pC;
  4827  
  4828    pAggInfo->directMode = 1;
  4829    for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
  4830      int nArg;
  4831      int addrNext = 0;
  4832      int regAgg;
  4833      ExprList *pList = pF->pExpr->x.pList;
  4834      assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
  4835      if( pList ){
  4836        nArg = pList->nExpr;
  4837        regAgg = sqlite3GetTempRange(pParse, nArg);
  4838        sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP);
  4839      }else{
  4840        nArg = 0;
  4841        regAgg = 0;
  4842      }
  4843      if( pF->iDistinct>=0 ){
  4844        addrNext = sqlite3VdbeMakeLabel(v);
  4845        testcase( nArg==0 );  /* Error condition */
  4846        testcase( nArg>1 );   /* Also an error */
  4847        codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
  4848      }
  4849      if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
  4850        CollSeq *pColl = 0;
  4851        struct ExprList_item *pItem;
  4852        int j;
  4853        assert( pList!=0 );  /* pList!=0 if pF->pFunc has NEEDCOLL */
  4854        for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
  4855          pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
  4856        }
  4857        if( !pColl ){
  4858          pColl = pParse->db->pDfltColl;
  4859        }
  4860        if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
  4861        sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ);
  4862      }
  4863      sqlite3VdbeAddOp3(v, OP_AggStep0, 0, regAgg, pF->iMem);
  4864      sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
  4865      sqlite3VdbeChangeP5(v, (u8)nArg);
  4866      sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
  4867      sqlite3ReleaseTempRange(pParse, regAgg, nArg);
  4868      if( addrNext ){
  4869        sqlite3VdbeResolveLabel(v, addrNext);
  4870        sqlite3ExprCacheClear(pParse);
  4871      }
  4872    }
  4873  
  4874    /* Before populating the accumulator registers, clear the column cache.
  4875    ** Otherwise, if any of the required column values are already present 
  4876    ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value
  4877    ** to pC->iMem. But by the time the value is used, the original register
  4878    ** may have been used, invalidating the underlying buffer holding the
  4879    ** text or blob value. See ticket [883034dcb5].
  4880    **
  4881    ** Another solution would be to change the OP_SCopy used to copy cached
  4882    ** values to an OP_Copy.
  4883    */
  4884    if( regHit ){
  4885      addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v);
  4886    }
  4887    sqlite3ExprCacheClear(pParse);
  4888    for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
  4889      sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
  4890    }
  4891    pAggInfo->directMode = 0;
  4892    sqlite3ExprCacheClear(pParse);
  4893    if( addrHitTest ){
  4894      sqlite3VdbeJumpHere(v, addrHitTest);
  4895    }
  4896  }
  4897  
  4898  /*
  4899  ** Add a single OP_Explain instruction to the VDBE to explain a simple
  4900  ** count(*) query ("SELECT count(*) FROM pTab").
  4901  */
  4902  #ifndef SQLITE_OMIT_EXPLAIN
  4903  static void explainSimpleCount(
  4904    Parse *pParse,                  /* Parse context */
  4905    Table *pTab,                    /* Table being queried */
  4906    Index *pIdx                     /* Index used to optimize scan, or NULL */
  4907  ){
  4908    if( pParse->explain==2 ){
  4909      int bCover = (pIdx!=0 && (HasRowid(pTab) || !IsPrimaryKeyIndex(pIdx)));
  4910      char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s%s%s",
  4911          pTab->zName,
  4912          bCover ? " USING COVERING INDEX " : "",
  4913          bCover ? pIdx->zName : ""
  4914      );
  4915      sqlite3VdbeAddOp4(
  4916          pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC
  4917      );
  4918    }
  4919  }
  4920  #else
  4921  # define explainSimpleCount(a,b,c)
  4922  #endif
  4923  
  4924  /*
  4925  ** Context object for havingToWhereExprCb().
  4926  */
  4927  struct HavingToWhereCtx {
  4928    Expr **ppWhere;
  4929    ExprList *pGroupBy;
  4930  };
  4931  
  4932  /*
  4933  ** sqlite3WalkExpr() callback used by havingToWhere().
  4934  **
  4935  ** If the node passed to the callback is a TK_AND node, return 
  4936  ** WRC_Continue to tell sqlite3WalkExpr() to iterate through child nodes.
  4937  **
  4938  ** Otherwise, return WRC_Prune. In this case, also check if the 
  4939  ** sub-expression matches the criteria for being moved to the WHERE
  4940  ** clause. If so, add it to the WHERE clause and replace the sub-expression
  4941  ** within the HAVING expression with a constant "1".
  4942  */
  4943  static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){
  4944    if( pExpr->op!=TK_AND ){
  4945      struct HavingToWhereCtx *p = pWalker->u.pHavingCtx;
  4946      if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, p->pGroupBy) ){
  4947        sqlite3 *db = pWalker->pParse->db;
  4948        Expr *pNew = sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[1], 0);
  4949        if( pNew ){
  4950          Expr *pWhere = *(p->ppWhere);
  4951          SWAP(Expr, *pNew, *pExpr);
  4952          pNew = sqlite3ExprAnd(db, pWhere, pNew);
  4953          *(p->ppWhere) = pNew;
  4954        }
  4955      }
  4956      return WRC_Prune;
  4957    }
  4958    return WRC_Continue;
  4959  }
  4960  
  4961  /*
  4962  ** Transfer eligible terms from the HAVING clause of a query, which is
  4963  ** processed after grouping, to the WHERE clause, which is processed before
  4964  ** grouping. For example, the query:
  4965  **
  4966  **   SELECT * FROM <tables> WHERE a=? GROUP BY b HAVING b=? AND c=?
  4967  **
  4968  ** can be rewritten as:
  4969  **
  4970  **   SELECT * FROM <tables> WHERE a=? AND b=? GROUP BY b HAVING c=?
  4971  **
  4972  ** A term of the HAVING expression is eligible for transfer if it consists
  4973  ** entirely of constants and expressions that are also GROUP BY terms that
  4974  ** use the "BINARY" collation sequence.
  4975  */
  4976  static void havingToWhere(
  4977    Parse *pParse,
  4978    ExprList *pGroupBy,
  4979    Expr *pHaving, 
  4980    Expr **ppWhere
  4981  ){
  4982    struct HavingToWhereCtx sCtx;
  4983    Walker sWalker;
  4984  
  4985    sCtx.ppWhere = ppWhere;
  4986    sCtx.pGroupBy = pGroupBy;
  4987  
  4988    memset(&sWalker, 0, sizeof(sWalker));
  4989    sWalker.pParse = pParse;
  4990    sWalker.xExprCallback = havingToWhereExprCb;
  4991    sWalker.u.pHavingCtx = &sCtx;
  4992    sqlite3WalkExpr(&sWalker, pHaving);
  4993  }
  4994  
  4995  /*
  4996  ** Check to see if the pThis entry of pTabList is a self-join of a prior view.
  4997  ** If it is, then return the SrcList_item for the prior view.  If it is not,
  4998  ** then return 0.
  4999  */
  5000  static struct SrcList_item *isSelfJoinView(
  5001    SrcList *pTabList,           /* Search for self-joins in this FROM clause */
  5002    struct SrcList_item *pThis   /* Search for prior reference to this subquery */
  5003  ){
  5004    struct SrcList_item *pItem;
  5005    for(pItem = pTabList->a; pItem<pThis; pItem++){
  5006      if( pItem->pSelect==0 ) continue;
  5007      if( pItem->fg.viaCoroutine ) continue;
  5008      if( pItem->zName==0 ) continue;
  5009      if( sqlite3_stricmp(pItem->zDatabase, pThis->zDatabase)!=0 ) continue;
  5010      if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue;
  5011      if( sqlite3ExprCompare(0, 
  5012            pThis->pSelect->pWhere, pItem->pSelect->pWhere, -1) 
  5013      ){
  5014        /* The view was modified by some other optimization such as
  5015        ** pushDownWhereTerms() */
  5016        continue;
  5017      }
  5018      return pItem;
  5019    }
  5020    return 0;
  5021  }
  5022  
  5023  #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
  5024  /*
  5025  ** Attempt to transform a query of the form
  5026  **
  5027  **    SELECT count(*) FROM (SELECT x FROM t1 UNION ALL SELECT y FROM t2)
  5028  **
  5029  ** Into this:
  5030  **
  5031  **    SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2)
  5032  **
  5033  ** The transformation only works if all of the following are true:
  5034  **
  5035  **   *  The subquery is a UNION ALL of two or more terms
  5036  **   *  There is no WHERE or GROUP BY or HAVING clauses on the subqueries
  5037  **   *  The outer query is a simple count(*)
  5038  **
  5039  ** Return TRUE if the optimization is undertaken.
  5040  */
  5041  static int countOfViewOptimization(Parse *pParse, Select *p){
  5042    Select *pSub, *pPrior;
  5043    Expr *pExpr;
  5044    Expr *pCount;
  5045    sqlite3 *db;
  5046    if( (p->selFlags & SF_Aggregate)==0 ) return 0;   /* This is an aggregate */
  5047    if( p->pEList->nExpr!=1 ) return 0;               /* Single result column */
  5048    pExpr = p->pEList->a[0].pExpr;
  5049    if( pExpr->op!=TK_AGG_FUNCTION ) return 0;        /* Result is an aggregate */
  5050    if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0;  /* Is count() */
  5051    if( pExpr->x.pList!=0 ) return 0;                 /* Must be count(*) */
  5052    if( p->pSrc->nSrc!=1 ) return 0;                  /* One table in FROM  */
  5053    pSub = p->pSrc->a[0].pSelect;
  5054    if( pSub==0 ) return 0;                           /* The FROM is a subquery */
  5055    if( pSub->pPrior==0 ) return 0;                   /* Must be a compound ry */
  5056    do{
  5057      if( pSub->op!=TK_ALL && pSub->pPrior ) return 0;  /* Must be UNION ALL */
  5058      if( pSub->pWhere ) return 0;                      /* No WHERE clause */
  5059      if( pSub->selFlags & SF_Aggregate ) return 0;     /* Not an aggregate */
  5060      pSub = pSub->pPrior;                              /* Repeat over compound */
  5061    }while( pSub );
  5062  
  5063    /* If we reach this point then it is OK to perform the transformation */
  5064  
  5065    db = pParse->db;
  5066    pCount = pExpr;
  5067    pExpr = 0;
  5068    pSub = p->pSrc->a[0].pSelect;
  5069    p->pSrc->a[0].pSelect = 0;
  5070    sqlite3SrcListDelete(db, p->pSrc);
  5071    p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*p->pSrc));
  5072    while( pSub ){
  5073      Expr *pTerm;
  5074      pPrior = pSub->pPrior;
  5075      pSub->pPrior = 0;
  5076      pSub->pNext = 0;
  5077      pSub->selFlags |= SF_Aggregate;
  5078      pSub->selFlags &= ~SF_Compound;
  5079      pSub->nSelectRow = 0;
  5080      sqlite3ExprListDelete(db, pSub->pEList);
  5081      pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount;
  5082      pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm);
  5083      pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
  5084      sqlite3PExprAddSelect(pParse, pTerm, pSub);
  5085      if( pExpr==0 ){
  5086        pExpr = pTerm;
  5087      }else{
  5088        pExpr = sqlite3PExpr(pParse, TK_PLUS, pTerm, pExpr);
  5089      }
  5090      pSub = pPrior;
  5091    }
  5092    p->pEList->a[0].pExpr = pExpr;
  5093    p->selFlags &= ~SF_Aggregate;
  5094  
  5095  #if SELECTTRACE_ENABLED
  5096    if( sqlite3SelectTrace & 0x400 ){
  5097      SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n"));
  5098      sqlite3TreeViewSelect(0, p, 0);
  5099    }
  5100  #endif
  5101    return 1;
  5102  }
  5103  #endif /* SQLITE_COUNTOFVIEW_OPTIMIZATION */
  5104  
  5105  /*
  5106  ** Generate code for the SELECT statement given in the p argument.  
  5107  **
  5108  ** The results are returned according to the SelectDest structure.
  5109  ** See comments in sqliteInt.h for further information.
  5110  **
  5111  ** This routine returns the number of errors.  If any errors are
  5112  ** encountered, then an appropriate error message is left in
  5113  ** pParse->zErrMsg.
  5114  **
  5115  ** This routine does NOT free the Select structure passed in.  The
  5116  ** calling function needs to do that.
  5117  */
  5118  int sqlite3Select(
  5119    Parse *pParse,         /* The parser context */
  5120    Select *p,             /* The SELECT statement being coded. */
  5121    SelectDest *pDest      /* What to do with the query results */
  5122  ){
  5123    int i, j;              /* Loop counters */
  5124    WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
  5125    Vdbe *v;               /* The virtual machine under construction */
  5126    int isAgg;             /* True for select lists like "count(*)" */
  5127    ExprList *pEList = 0;  /* List of columns to extract. */
  5128    SrcList *pTabList;     /* List of tables to select from */
  5129    Expr *pWhere;          /* The WHERE clause.  May be NULL */
  5130    ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
  5131    Expr *pHaving;         /* The HAVING clause.  May be NULL */
  5132    int rc = 1;            /* Value to return from this function */
  5133    DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */
  5134    SortCtx sSort;         /* Info on how to code the ORDER BY clause */
  5135    AggInfo sAggInfo;      /* Information used by aggregate queries */
  5136    int iEnd;              /* Address of the end of the query */
  5137    sqlite3 *db;           /* The database connection */
  5138  
  5139  #ifndef SQLITE_OMIT_EXPLAIN
  5140    int iRestoreSelectId = pParse->iSelectId;
  5141    pParse->iSelectId = pParse->iNextSelectId++;
  5142  #endif
  5143  
  5144    db = pParse->db;
  5145    if( p==0 || db->mallocFailed || pParse->nErr ){
  5146      return 1;
  5147    }
  5148    if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
  5149    memset(&sAggInfo, 0, sizeof(sAggInfo));
  5150  #if SELECTTRACE_ENABLED
  5151    pParse->nSelectIndent++;
  5152    SELECTTRACE(1,pParse,p, ("begin processing:\n"));
  5153    if( sqlite3SelectTrace & 0x100 ){
  5154      sqlite3TreeViewSelect(0, p, 0);
  5155    }
  5156  #endif
  5157  
  5158    assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo );
  5159    assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo );
  5160    assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistQueue );
  5161    assert( p->pOrderBy==0 || pDest->eDest!=SRT_Queue );
  5162    if( IgnorableOrderby(pDest) ){
  5163      assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 
  5164             pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard ||
  5165             pDest->eDest==SRT_Queue  || pDest->eDest==SRT_DistFifo ||
  5166             pDest->eDest==SRT_DistQueue || pDest->eDest==SRT_Fifo);
  5167      /* If ORDER BY makes no difference in the output then neither does
  5168      ** DISTINCT so it can be removed too. */
  5169      sqlite3ExprListDelete(db, p->pOrderBy);
  5170      p->pOrderBy = 0;
  5171      p->selFlags &= ~SF_Distinct;
  5172    }
  5173    sqlite3SelectPrep(pParse, p, 0);
  5174    memset(&sSort, 0, sizeof(sSort));
  5175    sSort.pOrderBy = p->pOrderBy;
  5176    pTabList = p->pSrc;
  5177    if( pParse->nErr || db->mallocFailed ){
  5178      goto select_end;
  5179    }
  5180    assert( p->pEList!=0 );
  5181    isAgg = (p->selFlags & SF_Aggregate)!=0;
  5182  #if SELECTTRACE_ENABLED
  5183    if( sqlite3SelectTrace & 0x100 ){
  5184      SELECTTRACE(0x100,pParse,p, ("after name resolution:\n"));
  5185      sqlite3TreeViewSelect(0, p, 0);
  5186    }
  5187  #endif
  5188  
  5189    /* Get a pointer the VDBE under construction, allocating a new VDBE if one
  5190    ** does not already exist */
  5191    v = sqlite3GetVdbe(pParse);
  5192    if( v==0 ) goto select_end;
  5193    if( pDest->eDest==SRT_Output ){
  5194      generateColumnNames(pParse, p);
  5195    }
  5196  
  5197    /* Try to flatten subqueries in the FROM clause up into the main query
  5198    */
  5199  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  5200    for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
  5201      struct SrcList_item *pItem = &pTabList->a[i];
  5202      Select *pSub = pItem->pSelect;
  5203      Table *pTab = pItem->pTab;
  5204      if( pSub==0 ) continue;
  5205  
  5206      /* Catch mismatch in the declared columns of a view and the number of
  5207      ** columns in the SELECT on the RHS */
  5208      if( pTab->nCol!=pSub->pEList->nExpr ){
  5209        sqlite3ErrorMsg(pParse, "expected %d columns for '%s' but got %d",
  5210                        pTab->nCol, pTab->zName, pSub->pEList->nExpr);
  5211        goto select_end;
  5212      }
  5213  
  5214      /* Do not try to flatten an aggregate subquery.
  5215      **
  5216      ** Flattening an aggregate subquery is only possible if the outer query
  5217      ** is not a join.  But if the outer query is not a join, then the subquery
  5218      ** will be implemented as a co-routine and there is no advantage to
  5219      ** flattening in that case.
  5220      */
  5221      if( (pSub->selFlags & SF_Aggregate)!=0 ) continue;
  5222      assert( pSub->pGroupBy==0 );
  5223  
  5224      /* If the subquery contains an ORDER BY clause and if
  5225      ** it will be implemented as a co-routine, then do not flatten.  This
  5226      ** restriction allows SQL constructs like this:
  5227      **
  5228      **  SELECT expensive_function(x)
  5229      **    FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
  5230      **
  5231      ** The expensive_function() is only computed on the 10 rows that
  5232      ** are output, rather than every row of the table.
  5233      */
  5234      if( pSub->pOrderBy!=0
  5235       && i==0
  5236       && (pTabList->nSrc==1
  5237           || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0)
  5238      ){
  5239        continue;
  5240      }
  5241  
  5242      if( flattenSubquery(pParse, p, i, isAgg) ){
  5243        /* This subquery can be absorbed into its parent. */
  5244        i = -1;
  5245      }
  5246      pTabList = p->pSrc;
  5247      if( db->mallocFailed ) goto select_end;
  5248      if( !IgnorableOrderby(pDest) ){
  5249        sSort.pOrderBy = p->pOrderBy;
  5250      }
  5251    }
  5252  #endif
  5253  
  5254  #ifndef SQLITE_OMIT_COMPOUND_SELECT
  5255    /* Handle compound SELECT statements using the separate multiSelect()
  5256    ** procedure.
  5257    */
  5258    if( p->pPrior ){
  5259      rc = multiSelect(pParse, p, pDest);
  5260      explainSetInteger(pParse->iSelectId, iRestoreSelectId);
  5261  #if SELECTTRACE_ENABLED
  5262      SELECTTRACE(1,pParse,p,("end compound-select processing\n"));
  5263      pParse->nSelectIndent--;
  5264  #endif
  5265      return rc;
  5266    }
  5267  #endif
  5268  
  5269    /* For each term in the FROM clause, do two things:
  5270    ** (1) Authorized unreferenced tables
  5271    ** (2) Generate code for all sub-queries
  5272    */
  5273    for(i=0; i<pTabList->nSrc; i++){
  5274      struct SrcList_item *pItem = &pTabList->a[i];
  5275      SelectDest dest;
  5276      Select *pSub;
  5277  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  5278      const char *zSavedAuthContext;
  5279  #endif
  5280  
  5281      /* Issue SQLITE_READ authorizations with a fake column name for any
  5282      ** tables that are referenced but from which no values are extracted.
  5283      ** Examples of where these kinds of null SQLITE_READ authorizations
  5284      ** would occur:
  5285      **
  5286      **     SELECT count(*) FROM t1;   -- SQLITE_READ t1.""
  5287      **     SELECT t1.* FROM t1, t2;   -- SQLITE_READ t2.""
  5288      **
  5289      ** The fake column name is an empty string.  It is possible for a table to
  5290      ** have a column named by the empty string, in which case there is no way to
  5291      ** distinguish between an unreferenced table and an actual reference to the
  5292      ** "" column. The original design was for the fake column name to be a NULL,
  5293      ** which would be unambiguous.  But legacy authorization callbacks might
  5294      ** assume the column name is non-NULL and segfault.  The use of an empty
  5295      ** string for the fake column name seems safer.
  5296      */
  5297      if( pItem->colUsed==0 ){
  5298        sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase);
  5299      }
  5300  
  5301  #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  5302      /* Generate code for all sub-queries in the FROM clause
  5303      */
  5304      pSub = pItem->pSelect;
  5305      if( pSub==0 ) continue;
  5306  
  5307      /* Sometimes the code for a subquery will be generated more than
  5308      ** once, if the subquery is part of the WHERE clause in a LEFT JOIN,
  5309      ** for example.  In that case, do not regenerate the code to manifest
  5310      ** a view or the co-routine to implement a view.  The first instance
  5311      ** is sufficient, though the subroutine to manifest the view does need
  5312      ** to be invoked again. */
  5313      if( pItem->addrFillSub ){
  5314        if( pItem->fg.viaCoroutine==0 ){
  5315          /* The subroutine that manifests the view might be a one-time routine,
  5316          ** or it might need to be rerun on each iteration because it
  5317          ** encodes a correlated subquery. */
  5318          testcase( sqlite3VdbeGetOp(v, pItem->addrFillSub)->opcode==OP_Once );
  5319          sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub);
  5320        }
  5321        continue;
  5322      }
  5323  
  5324      /* Increment Parse.nHeight by the height of the largest expression
  5325      ** tree referred to by this, the parent select. The child select
  5326      ** may contain expression trees of at most
  5327      ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
  5328      ** more conservative than necessary, but much easier than enforcing
  5329      ** an exact limit.
  5330      */
  5331      pParse->nHeight += sqlite3SelectExprHeight(p);
  5332  
  5333      /* Make copies of constant WHERE-clause terms in the outer query down
  5334      ** inside the subquery.  This can help the subquery to run more efficiently.
  5335      */
  5336      if( (pItem->fg.jointype & JT_OUTER)==0
  5337       && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem->iCursor)
  5338      ){
  5339  #if SELECTTRACE_ENABLED
  5340        if( sqlite3SelectTrace & 0x100 ){
  5341          SELECTTRACE(0x100,pParse,p,("After WHERE-clause push-down:\n"));
  5342          sqlite3TreeViewSelect(0, p, 0);
  5343        }
  5344  #endif
  5345      }
  5346  
  5347      zSavedAuthContext = pParse->zAuthContext;
  5348      pParse->zAuthContext = pItem->zName;
  5349  
  5350      /* Generate code to implement the subquery
  5351      **
  5352      ** The subquery is implemented as a co-routine if the subquery is
  5353      ** guaranteed to be the outer loop (so that it does not need to be
  5354      ** computed more than once)
  5355      **
  5356      ** TODO: Are there other reasons beside (1) to use a co-routine
  5357      ** implementation?
  5358      */
  5359      if( i==0
  5360       && (pTabList->nSrc==1
  5361              || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0)  /* (1) */
  5362      ){
  5363        /* Implement a co-routine that will return a single row of the result
  5364        ** set on each invocation.
  5365        */
  5366        int addrTop = sqlite3VdbeCurrentAddr(v)+1;
  5367       
  5368        pItem->regReturn = ++pParse->nMem;
  5369        sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
  5370        VdbeComment((v, "%s", pItem->pTab->zName));
  5371        pItem->addrFillSub = addrTop;
  5372        sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn);
  5373        explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
  5374        sqlite3Select(pParse, pSub, &dest);
  5375        pItem->pTab->nRowLogEst = pSub->nSelectRow;
  5376        pItem->fg.viaCoroutine = 1;
  5377        pItem->regResult = dest.iSdst;
  5378        sqlite3VdbeEndCoroutine(v, pItem->regReturn);
  5379        sqlite3VdbeJumpHere(v, addrTop-1);
  5380        sqlite3ClearTempRegCache(pParse);
  5381      }else{
  5382        /* Generate a subroutine that will fill an ephemeral table with
  5383        ** the content of this subquery.  pItem->addrFillSub will point
  5384        ** to the address of the generated subroutine.  pItem->regReturn
  5385        ** is a register allocated to hold the subroutine return address
  5386        */
  5387        int topAddr;
  5388        int onceAddr = 0;
  5389        int retAddr;
  5390        struct SrcList_item *pPrior;
  5391  
  5392        assert( pItem->addrFillSub==0 );
  5393        pItem->regReturn = ++pParse->nMem;
  5394        topAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pItem->regReturn);
  5395        pItem->addrFillSub = topAddr+1;
  5396        if( pItem->fg.isCorrelated==0 ){
  5397          /* If the subquery is not correlated and if we are not inside of
  5398          ** a trigger, then we only need to compute the value of the subquery
  5399          ** once. */
  5400          onceAddr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
  5401          VdbeComment((v, "materialize \"%s\"", pItem->pTab->zName));
  5402        }else{
  5403          VdbeNoopComment((v, "materialize \"%s\"", pItem->pTab->zName));
  5404        }
  5405        pPrior = isSelfJoinView(pTabList, pItem);
  5406        if( pPrior ){
  5407          sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor);
  5408          explainSetInteger(pItem->iSelectId, pPrior->iSelectId);
  5409          assert( pPrior->pSelect!=0 );
  5410          pSub->nSelectRow = pPrior->pSelect->nSelectRow;
  5411        }else{
  5412          sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
  5413          explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
  5414          sqlite3Select(pParse, pSub, &dest);
  5415        }
  5416        pItem->pTab->nRowLogEst = pSub->nSelectRow;
  5417        if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
  5418        retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn);
  5419        VdbeComment((v, "end %s", pItem->pTab->zName));
  5420        sqlite3VdbeChangeP1(v, topAddr, retAddr);
  5421        sqlite3ClearTempRegCache(pParse);
  5422      }
  5423      if( db->mallocFailed ) goto select_end;
  5424      pParse->nHeight -= sqlite3SelectExprHeight(p);
  5425      pParse->zAuthContext = zSavedAuthContext;
  5426  #endif
  5427    }
  5428  
  5429    /* Various elements of the SELECT copied into local variables for
  5430    ** convenience */
  5431    pEList = p->pEList;
  5432    pWhere = p->pWhere;
  5433    pGroupBy = p->pGroupBy;
  5434    pHaving = p->pHaving;
  5435    sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0;
  5436  
  5437  #if SELECTTRACE_ENABLED
  5438    if( sqlite3SelectTrace & 0x400 ){
  5439      SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n"));
  5440      sqlite3TreeViewSelect(0, p, 0);
  5441    }
  5442  #endif
  5443  
  5444  #ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
  5445    if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView)
  5446     && countOfViewOptimization(pParse, p)
  5447    ){
  5448      if( db->mallocFailed ) goto select_end;
  5449      pEList = p->pEList;
  5450      pTabList = p->pSrc;
  5451    }
  5452  #endif
  5453  
  5454    /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and 
  5455    ** if the select-list is the same as the ORDER BY list, then this query
  5456    ** can be rewritten as a GROUP BY. In other words, this:
  5457    **
  5458    **     SELECT DISTINCT xyz FROM ... ORDER BY xyz
  5459    **
  5460    ** is transformed to:
  5461    **
  5462    **     SELECT xyz FROM ... GROUP BY xyz ORDER BY xyz
  5463    **
  5464    ** The second form is preferred as a single index (or temp-table) may be 
  5465    ** used for both the ORDER BY and DISTINCT processing. As originally 
  5466    ** written the query must use a temp-table for at least one of the ORDER 
  5467    ** BY and DISTINCT, and an index or separate temp-table for the other.
  5468    */
  5469    if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct 
  5470     && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0
  5471    ){
  5472      p->selFlags &= ~SF_Distinct;
  5473      pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0);
  5474      /* Notice that even thought SF_Distinct has been cleared from p->selFlags,
  5475      ** the sDistinct.isTnct is still set.  Hence, isTnct represents the
  5476      ** original setting of the SF_Distinct flag, not the current setting */
  5477      assert( sDistinct.isTnct );
  5478  
  5479  #if SELECTTRACE_ENABLED
  5480      if( sqlite3SelectTrace & 0x400 ){
  5481        SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
  5482        sqlite3TreeViewSelect(0, p, 0);
  5483      }
  5484  #endif
  5485    }
  5486  
  5487    /* If there is an ORDER BY clause, then create an ephemeral index to
  5488    ** do the sorting.  But this sorting ephemeral index might end up
  5489    ** being unused if the data can be extracted in pre-sorted order.
  5490    ** If that is the case, then the OP_OpenEphemeral instruction will be
  5491    ** changed to an OP_Noop once we figure out that the sorting index is
  5492    ** not needed.  The sSort.addrSortIndex variable is used to facilitate
  5493    ** that change.
  5494    */
  5495    if( sSort.pOrderBy ){
  5496      KeyInfo *pKeyInfo;
  5497      pKeyInfo = keyInfoFromExprList(pParse, sSort.pOrderBy, 0, pEList->nExpr);
  5498      sSort.iECursor = pParse->nTab++;
  5499      sSort.addrSortIndex =
  5500        sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
  5501            sSort.iECursor, sSort.pOrderBy->nExpr+1+pEList->nExpr, 0,
  5502            (char*)pKeyInfo, P4_KEYINFO
  5503        );
  5504    }else{
  5505      sSort.addrSortIndex = -1;
  5506    }
  5507  
  5508    /* If the output is destined for a temporary table, open that table.
  5509    */
  5510    if( pDest->eDest==SRT_EphemTab ){
  5511      sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iSDParm, pEList->nExpr);
  5512    }
  5513  
  5514    /* Set the limiter.
  5515    */
  5516    iEnd = sqlite3VdbeMakeLabel(v);
  5517    if( (p->selFlags & SF_FixedLimit)==0 ){
  5518      p->nSelectRow = 320;  /* 4 billion rows */
  5519    }
  5520    computeLimitRegisters(pParse, p, iEnd);
  5521    if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
  5522      sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
  5523      sSort.sortFlags |= SORTFLAG_UseSorter;
  5524    }
  5525  
  5526    /* Open an ephemeral index to use for the distinct set.
  5527    */
  5528    if( p->selFlags & SF_Distinct ){
  5529      sDistinct.tabTnct = pParse->nTab++;
  5530      sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
  5531                               sDistinct.tabTnct, 0, 0,
  5532                               (char*)keyInfoFromExprList(pParse, p->pEList,0,0),
  5533                               P4_KEYINFO);
  5534      sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
  5535      sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED;
  5536    }else{
  5537      sDistinct.eTnctType = WHERE_DISTINCT_NOOP;
  5538    }
  5539  
  5540    if( !isAgg && pGroupBy==0 ){
  5541      /* No aggregate functions and no GROUP BY clause */
  5542      u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0);
  5543      assert( WHERE_USE_LIMIT==SF_FixedLimit );
  5544      wctrlFlags |= p->selFlags & SF_FixedLimit;
  5545  
  5546      /* Begin the database scan. */
  5547      pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy,
  5548                                 p->pEList, wctrlFlags, p->nSelectRow);
  5549      if( pWInfo==0 ) goto select_end;
  5550      if( sqlite3WhereOutputRowCount(pWInfo) < p->nSelectRow ){
  5551        p->nSelectRow = sqlite3WhereOutputRowCount(pWInfo);
  5552      }
  5553      if( sDistinct.isTnct && sqlite3WhereIsDistinct(pWInfo) ){
  5554        sDistinct.eTnctType = sqlite3WhereIsDistinct(pWInfo);
  5555      }
  5556      if( sSort.pOrderBy ){
  5557        sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo);
  5558        sSort.bOrderedInnerLoop = sqlite3WhereOrderedInnerLoop(pWInfo);
  5559        if( sSort.nOBSat==sSort.pOrderBy->nExpr ){
  5560          sSort.pOrderBy = 0;
  5561        }
  5562      }
  5563  
  5564      /* If sorting index that was created by a prior OP_OpenEphemeral 
  5565      ** instruction ended up not being needed, then change the OP_OpenEphemeral
  5566      ** into an OP_Noop.
  5567      */
  5568      if( sSort.addrSortIndex>=0 && sSort.pOrderBy==0 ){
  5569        sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex);
  5570      }
  5571  
  5572      /* Use the standard inner loop. */
  5573      assert( p->pEList==pEList );
  5574      selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest,
  5575                      sqlite3WhereContinueLabel(pWInfo),
  5576                      sqlite3WhereBreakLabel(pWInfo));
  5577  
  5578      /* End the database scan loop.
  5579      */
  5580      sqlite3WhereEnd(pWInfo);
  5581    }else{
  5582      /* This case when there exist aggregate functions or a GROUP BY clause
  5583      ** or both */
  5584      NameContext sNC;    /* Name context for processing aggregate information */
  5585      int iAMem;          /* First Mem address for storing current GROUP BY */
  5586      int iBMem;          /* First Mem address for previous GROUP BY */
  5587      int iUseFlag;       /* Mem address holding flag indicating that at least
  5588                          ** one row of the input to the aggregator has been
  5589                          ** processed */
  5590      int iAbortFlag;     /* Mem address which causes query abort if positive */
  5591      int groupBySort;    /* Rows come from source in GROUP BY order */
  5592      int addrEnd;        /* End of processing for this SELECT */
  5593      int sortPTab = 0;   /* Pseudotable used to decode sorting results */
  5594      int sortOut = 0;    /* Output register from the sorter */
  5595      int orderByGrp = 0; /* True if the GROUP BY and ORDER BY are the same */
  5596  
  5597      /* Remove any and all aliases between the result set and the
  5598      ** GROUP BY clause.
  5599      */
  5600      if( pGroupBy ){
  5601        int k;                        /* Loop counter */
  5602        struct ExprList_item *pItem;  /* For looping over expression in a list */
  5603  
  5604        for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
  5605          pItem->u.x.iAlias = 0;
  5606        }
  5607        for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
  5608          pItem->u.x.iAlias = 0;
  5609        }
  5610        assert( 66==sqlite3LogEst(100) );
  5611        if( p->nSelectRow>66 ) p->nSelectRow = 66;
  5612      }else{
  5613        assert( 0==sqlite3LogEst(1) );
  5614        p->nSelectRow = 0;
  5615      }
  5616  
  5617      /* If there is both a GROUP BY and an ORDER BY clause and they are
  5618      ** identical, then it may be possible to disable the ORDER BY clause 
  5619      ** on the grounds that the GROUP BY will cause elements to come out 
  5620      ** in the correct order. It also may not - the GROUP BY might use a
  5621      ** database index that causes rows to be grouped together as required
  5622      ** but not actually sorted. Either way, record the fact that the
  5623      ** ORDER BY and GROUP BY clauses are the same by setting the orderByGrp
  5624      ** variable.  */
  5625      if( sqlite3ExprListCompare(pGroupBy, sSort.pOrderBy, -1)==0 ){
  5626        orderByGrp = 1;
  5627      }
  5628   
  5629      /* Create a label to jump to when we want to abort the query */
  5630      addrEnd = sqlite3VdbeMakeLabel(v);
  5631  
  5632      /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
  5633      ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
  5634      ** SELECT statement.
  5635      */
  5636      memset(&sNC, 0, sizeof(sNC));
  5637      sNC.pParse = pParse;
  5638      sNC.pSrcList = pTabList;
  5639      sNC.pAggInfo = &sAggInfo;
  5640      sAggInfo.mnReg = pParse->nMem+1;
  5641      sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
  5642      sAggInfo.pGroupBy = pGroupBy;
  5643      sqlite3ExprAnalyzeAggList(&sNC, pEList);
  5644      sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy);
  5645      if( pHaving ){
  5646        if( pGroupBy ){
  5647          assert( pWhere==p->pWhere );
  5648          havingToWhere(pParse, pGroupBy, pHaving, &p->pWhere);
  5649          pWhere = p->pWhere;
  5650        }
  5651        sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
  5652      }
  5653      sAggInfo.nAccumulator = sAggInfo.nColumn;
  5654      for(i=0; i<sAggInfo.nFunc; i++){
  5655        assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
  5656        sNC.ncFlags |= NC_InAggFunc;
  5657        sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
  5658        sNC.ncFlags &= ~NC_InAggFunc;
  5659      }
  5660      sAggInfo.mxReg = pParse->nMem;
  5661      if( db->mallocFailed ) goto select_end;
  5662  
  5663      /* Processing for aggregates with GROUP BY is very different and
  5664      ** much more complex than aggregates without a GROUP BY.
  5665      */
  5666      if( pGroupBy ){
  5667        KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
  5668        int addr1;          /* A-vs-B comparision jump */
  5669        int addrOutputRow;  /* Start of subroutine that outputs a result row */
  5670        int regOutputRow;   /* Return address register for output subroutine */
  5671        int addrSetAbort;   /* Set the abort flag and return */
  5672        int addrTopOfLoop;  /* Top of the input loop */
  5673        int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
  5674        int addrReset;      /* Subroutine for resetting the accumulator */
  5675        int regReset;       /* Return address register for reset subroutine */
  5676  
  5677        /* If there is a GROUP BY clause we might need a sorting index to
  5678        ** implement it.  Allocate that sorting index now.  If it turns out
  5679        ** that we do not need it after all, the OP_SorterOpen instruction
  5680        ** will be converted into a Noop.  
  5681        */
  5682        sAggInfo.sortingIdx = pParse->nTab++;
  5683        pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0, sAggInfo.nColumn);
  5684        addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, 
  5685            sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 
  5686            0, (char*)pKeyInfo, P4_KEYINFO);
  5687  
  5688        /* Initialize memory locations used by GROUP BY aggregate processing
  5689        */
  5690        iUseFlag = ++pParse->nMem;
  5691        iAbortFlag = ++pParse->nMem;
  5692        regOutputRow = ++pParse->nMem;
  5693        addrOutputRow = sqlite3VdbeMakeLabel(v);
  5694        regReset = ++pParse->nMem;
  5695        addrReset = sqlite3VdbeMakeLabel(v);
  5696        iAMem = pParse->nMem + 1;
  5697        pParse->nMem += pGroupBy->nExpr;
  5698        iBMem = pParse->nMem + 1;
  5699        pParse->nMem += pGroupBy->nExpr;
  5700        sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
  5701        VdbeComment((v, "clear abort flag"));
  5702        sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
  5703        VdbeComment((v, "indicate accumulator empty"));
  5704        sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
  5705  
  5706        /* Begin a loop that will extract all source rows in GROUP BY order.
  5707        ** This might involve two separate loops with an OP_Sort in between, or
  5708        ** it might be a single loop that uses an index to extract information
  5709        ** in the right order to begin with.
  5710        */
  5711        sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
  5712        pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, 0,
  5713            WHERE_GROUPBY | (orderByGrp ? WHERE_SORTBYGROUP : 0), 0
  5714        );
  5715        if( pWInfo==0 ) goto select_end;
  5716        if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){
  5717          /* The optimizer is able to deliver rows in group by order so
  5718          ** we do not have to sort.  The OP_OpenEphemeral table will be
  5719          ** cancelled later because we still need to use the pKeyInfo
  5720          */
  5721          groupBySort = 0;
  5722        }else{
  5723          /* Rows are coming out in undetermined order.  We have to push
  5724          ** each row into a sorting index, terminate the first loop,
  5725          ** then loop over the sorting index in order to get the output
  5726          ** in sorted order
  5727          */
  5728          int regBase;
  5729          int regRecord;
  5730          int nCol;
  5731          int nGroupBy;
  5732  
  5733          explainTempTable(pParse, 
  5734              (sDistinct.isTnct && (p->selFlags&SF_Distinct)==0) ?
  5735                      "DISTINCT" : "GROUP BY");
  5736  
  5737          groupBySort = 1;
  5738          nGroupBy = pGroupBy->nExpr;
  5739          nCol = nGroupBy;
  5740          j = nGroupBy;
  5741          for(i=0; i<sAggInfo.nColumn; i++){
  5742            if( sAggInfo.aCol[i].iSorterColumn>=j ){
  5743              nCol++;
  5744              j++;
  5745            }
  5746          }
  5747          regBase = sqlite3GetTempRange(pParse, nCol);
  5748          sqlite3ExprCacheClear(pParse);
  5749          sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0);
  5750          j = nGroupBy;
  5751          for(i=0; i<sAggInfo.nColumn; i++){
  5752            struct AggInfo_col *pCol = &sAggInfo.aCol[i];
  5753            if( pCol->iSorterColumn>=j ){
  5754              int r1 = j + regBase;
  5755              sqlite3ExprCodeGetColumnToReg(pParse, 
  5756                                 pCol->pTab, pCol->iColumn, pCol->iTable, r1);
  5757              j++;
  5758            }
  5759          }
  5760          regRecord = sqlite3GetTempReg(pParse);
  5761          sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
  5762          sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord);
  5763          sqlite3ReleaseTempReg(pParse, regRecord);
  5764          sqlite3ReleaseTempRange(pParse, regBase, nCol);
  5765          sqlite3WhereEnd(pWInfo);
  5766          sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++;
  5767          sortOut = sqlite3GetTempReg(pParse);
  5768          sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol);
  5769          sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd);
  5770          VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v);
  5771          sAggInfo.useSortingIdx = 1;
  5772          sqlite3ExprCacheClear(pParse);
  5773  
  5774        }
  5775  
  5776        /* If the index or temporary table used by the GROUP BY sort
  5777        ** will naturally deliver rows in the order required by the ORDER BY
  5778        ** clause, cancel the ephemeral table open coded earlier.
  5779        **
  5780        ** This is an optimization - the correct answer should result regardless.
  5781        ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER to 
  5782        ** disable this optimization for testing purposes.  */
  5783        if( orderByGrp && OptimizationEnabled(db, SQLITE_GroupByOrder) 
  5784         && (groupBySort || sqlite3WhereIsSorted(pWInfo))
  5785        ){
  5786          sSort.pOrderBy = 0;
  5787          sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex);
  5788        }
  5789  
  5790        /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
  5791        ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
  5792        ** Then compare the current GROUP BY terms against the GROUP BY terms
  5793        ** from the previous row currently stored in a0, a1, a2...
  5794        */
  5795        addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
  5796        sqlite3ExprCacheClear(pParse);
  5797        if( groupBySort ){
  5798          sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx,
  5799                            sortOut, sortPTab);
  5800        }
  5801        for(j=0; j<pGroupBy->nExpr; j++){
  5802          if( groupBySort ){
  5803            sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
  5804          }else{
  5805            sAggInfo.directMode = 1;
  5806            sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
  5807          }
  5808        }
  5809        sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
  5810                            (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO);
  5811        addr1 = sqlite3VdbeCurrentAddr(v);
  5812        sqlite3VdbeAddOp3(v, OP_Jump, addr1+1, 0, addr1+1); VdbeCoverage(v);
  5813  
  5814        /* Generate code that runs whenever the GROUP BY changes.
  5815        ** Changes in the GROUP BY are detected by the previous code
  5816        ** block.  If there were no changes, this block is skipped.
  5817        **
  5818        ** This code copies current group by terms in b0,b1,b2,...
  5819        ** over to a0,a1,a2.  It then calls the output subroutine
  5820        ** and resets the aggregate accumulator registers in preparation
  5821        ** for the next GROUP BY batch.
  5822        */
  5823        sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
  5824        sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
  5825        VdbeComment((v, "output one row"));
  5826        sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); VdbeCoverage(v);
  5827        VdbeComment((v, "check abort flag"));
  5828        sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
  5829        VdbeComment((v, "reset accumulator"));
  5830  
  5831        /* Update the aggregate accumulators based on the content of
  5832        ** the current row
  5833        */
  5834        sqlite3VdbeJumpHere(v, addr1);
  5835        updateAccumulator(pParse, &sAggInfo);
  5836        sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
  5837        VdbeComment((v, "indicate data in accumulator"));
  5838  
  5839        /* End of the loop
  5840        */
  5841        if( groupBySort ){
  5842          sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop);
  5843          VdbeCoverage(v);
  5844        }else{
  5845          sqlite3WhereEnd(pWInfo);
  5846          sqlite3VdbeChangeToNoop(v, addrSortingIdx);
  5847        }
  5848  
  5849        /* Output the final row of result
  5850        */
  5851        sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
  5852        VdbeComment((v, "output final row"));
  5853  
  5854        /* Jump over the subroutines
  5855        */
  5856        sqlite3VdbeGoto(v, addrEnd);
  5857  
  5858        /* Generate a subroutine that outputs a single row of the result
  5859        ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
  5860        ** is less than or equal to zero, the subroutine is a no-op.  If
  5861        ** the processing calls for the query to abort, this subroutine
  5862        ** increments the iAbortFlag memory location before returning in
  5863        ** order to signal the caller to abort.
  5864        */
  5865        addrSetAbort = sqlite3VdbeCurrentAddr(v);
  5866        sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
  5867        VdbeComment((v, "set abort flag"));
  5868        sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
  5869        sqlite3VdbeResolveLabel(v, addrOutputRow);
  5870        addrOutputRow = sqlite3VdbeCurrentAddr(v);
  5871        sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
  5872        VdbeCoverage(v);
  5873        VdbeComment((v, "Groupby result generator entry point"));
  5874        sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
  5875        finalizeAggFunctions(pParse, &sAggInfo);
  5876        sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
  5877        selectInnerLoop(pParse, p, -1, &sSort,
  5878                        &sDistinct, pDest,
  5879                        addrOutputRow+1, addrSetAbort);
  5880        sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
  5881        VdbeComment((v, "end groupby result generator"));
  5882  
  5883        /* Generate a subroutine that will reset the group-by accumulator
  5884        */
  5885        sqlite3VdbeResolveLabel(v, addrReset);
  5886        resetAccumulator(pParse, &sAggInfo);
  5887        sqlite3VdbeAddOp1(v, OP_Return, regReset);
  5888       
  5889      } /* endif pGroupBy.  Begin aggregate queries without GROUP BY: */
  5890      else {
  5891        ExprList *pDel = 0;
  5892  #ifndef SQLITE_OMIT_BTREECOUNT
  5893        Table *pTab;
  5894        if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
  5895          /* If isSimpleCount() returns a pointer to a Table structure, then
  5896          ** the SQL statement is of the form:
  5897          **
  5898          **   SELECT count(*) FROM <tbl>
  5899          **
  5900          ** where the Table structure returned represents table <tbl>.
  5901          **
  5902          ** This statement is so common that it is optimized specially. The
  5903          ** OP_Count instruction is executed either on the intkey table that
  5904          ** contains the data for table <tbl> or on one of its indexes. It
  5905          ** is better to execute the op on an index, as indexes are almost
  5906          ** always spread across less pages than their corresponding tables.
  5907          */
  5908          const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
  5909          const int iCsr = pParse->nTab++;     /* Cursor to scan b-tree */
  5910          Index *pIdx;                         /* Iterator variable */
  5911          KeyInfo *pKeyInfo = 0;               /* Keyinfo for scanned index */
  5912          Index *pBest = 0;                    /* Best index found so far */
  5913          int iRoot = pTab->tnum;              /* Root page of scanned b-tree */
  5914  
  5915          sqlite3CodeVerifySchema(pParse, iDb);
  5916          sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
  5917  
  5918          /* Search for the index that has the lowest scan cost.
  5919          **
  5920          ** (2011-04-15) Do not do a full scan of an unordered index.
  5921          **
  5922          ** (2013-10-03) Do not count the entries in a partial index.
  5923          **
  5924          ** In practice the KeyInfo structure will not be used. It is only 
  5925          ** passed to keep OP_OpenRead happy.
  5926          */
  5927          if( !HasRowid(pTab) ) pBest = sqlite3PrimaryKeyIndex(pTab);
  5928          for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
  5929            if( pIdx->bUnordered==0
  5930             && pIdx->szIdxRow<pTab->szTabRow
  5931             && pIdx->pPartIdxWhere==0
  5932             && (!pBest || pIdx->szIdxRow<pBest->szIdxRow)
  5933            ){
  5934              pBest = pIdx;
  5935            }
  5936          }
  5937          if( pBest ){
  5938            iRoot = pBest->tnum;
  5939            pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pBest);
  5940          }
  5941  
  5942          /* Open a read-only cursor, execute the OP_Count, close the cursor. */
  5943          sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, iRoot, iDb, 1);
  5944          if( pKeyInfo ){
  5945            sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO);
  5946          }
  5947          sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem);
  5948          sqlite3VdbeAddOp1(v, OP_Close, iCsr);
  5949          explainSimpleCount(pParse, pTab, pBest);
  5950        }else
  5951  #endif /* SQLITE_OMIT_BTREECOUNT */
  5952        {
  5953          /* Check if the query is of one of the following forms:
  5954          **
  5955          **   SELECT min(x) FROM ...
  5956          **   SELECT max(x) FROM ...
  5957          **
  5958          ** If it is, then ask the code in where.c to attempt to sort results
  5959          ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. 
  5960          ** If where.c is able to produce results sorted in this order, then
  5961          ** add vdbe code to break out of the processing loop after the 
  5962          ** first iteration (since the first iteration of the loop is 
  5963          ** guaranteed to operate on the row with the minimum or maximum 
  5964          ** value of x, the only row required).
  5965          **
  5966          ** A special flag must be passed to sqlite3WhereBegin() to slightly
  5967          ** modify behavior as follows:
  5968          **
  5969          **   + If the query is a "SELECT min(x)", then the loop coded by
  5970          **     where.c should not iterate over any values with a NULL value
  5971          **     for x.
  5972          **
  5973          **   + The optimizer code in where.c (the thing that decides which
  5974          **     index or indices to use) should place a different priority on 
  5975          **     satisfying the 'ORDER BY' clause than it does in other cases.
  5976          **     Refer to code and comments in where.c for details.
  5977          */
  5978          ExprList *pMinMax = 0;
  5979          u8 flag = WHERE_ORDERBY_NORMAL;
  5980          
  5981          assert( p->pGroupBy==0 );
  5982          assert( flag==0 );
  5983          if( p->pHaving==0 ){
  5984            flag = minMaxQuery(&sAggInfo, &pMinMax);
  5985          }
  5986          assert( flag==0 || (pMinMax!=0 && pMinMax->nExpr==1) );
  5987  
  5988          if( flag ){
  5989            pMinMax = sqlite3ExprListDup(db, pMinMax, 0);
  5990            pDel = pMinMax;
  5991            assert( db->mallocFailed || pMinMax!=0 );
  5992            if( !db->mallocFailed ){
  5993              pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
  5994              pMinMax->a[0].pExpr->op = TK_COLUMN;
  5995            }
  5996          }
  5997    
  5998          /* This case runs if the aggregate has no GROUP BY clause.  The
  5999          ** processing is much simpler since there is only a single row
  6000          ** of output.
  6001          */
  6002          resetAccumulator(pParse, &sAggInfo);
  6003          pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMax, 0,flag,0);
  6004          if( pWInfo==0 ){
  6005            sqlite3ExprListDelete(db, pDel);
  6006            goto select_end;
  6007          }
  6008          updateAccumulator(pParse, &sAggInfo);
  6009          assert( pMinMax==0 || pMinMax->nExpr==1 );
  6010          if( sqlite3WhereIsOrdered(pWInfo)>0 ){
  6011            sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo));
  6012            VdbeComment((v, "%s() by index",
  6013                  (flag==WHERE_ORDERBY_MIN?"min":"max")));
  6014          }
  6015          sqlite3WhereEnd(pWInfo);
  6016          finalizeAggFunctions(pParse, &sAggInfo);
  6017        }
  6018  
  6019        sSort.pOrderBy = 0;
  6020        sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
  6021        selectInnerLoop(pParse, p, -1, 0, 0, 
  6022                        pDest, addrEnd, addrEnd);
  6023        sqlite3ExprListDelete(db, pDel);
  6024      }
  6025      sqlite3VdbeResolveLabel(v, addrEnd);
  6026      
  6027    } /* endif aggregate query */
  6028  
  6029    if( sDistinct.eTnctType==WHERE_DISTINCT_UNORDERED ){
  6030      explainTempTable(pParse, "DISTINCT");
  6031    }
  6032  
  6033    /* If there is an ORDER BY clause, then we need to sort the results
  6034    ** and send them to the callback one by one.
  6035    */
  6036    if( sSort.pOrderBy ){
  6037      explainTempTable(pParse,
  6038                       sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY");
  6039      generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest);
  6040    }
  6041  
  6042    /* Jump here to skip this query
  6043    */
  6044    sqlite3VdbeResolveLabel(v, iEnd);
  6045  
  6046    /* The SELECT has been coded. If there is an error in the Parse structure,
  6047    ** set the return code to 1. Otherwise 0. */
  6048    rc = (pParse->nErr>0);
  6049  
  6050    /* Control jumps to here if an error is encountered above, or upon
  6051    ** successful coding of the SELECT.
  6052    */
  6053  select_end:
  6054    explainSetInteger(pParse->iSelectId, iRestoreSelectId);
  6055  
  6056    sqlite3DbFree(db, sAggInfo.aCol);
  6057    sqlite3DbFree(db, sAggInfo.aFunc);
  6058  #if SELECTTRACE_ENABLED
  6059    SELECTTRACE(1,pParse,p,("end processing\n"));
  6060    pParse->nSelectIndent--;
  6061  #endif
  6062    return rc;
  6063  }