persistentstorage/sql/SQLite/select.c
changeset 0 08ec8eefde2f
child 17 55f2396f6d25
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 /*
       
     2 ** 2001 September 15
       
     3 **
       
     4 ** The author disclaims copyright to this source code.  In place of
       
     5 ** a legal notice, here is a blessing:
       
     6 **
       
     7 **    May you do good and not evil.
       
     8 **    May you find forgiveness for yourself and forgive others.
       
     9 **    May you share freely, never taking more than you give.
       
    10 **
       
    11 *************************************************************************
       
    12 ** This file contains C code routines that are called by the parser
       
    13 ** to handle SELECT statements in SQLite.
       
    14 **
       
    15 ** $Id: select.c,v 1.463 2008/08/04 03:51:24 danielk1977 Exp $
       
    16 */
       
    17 #include "sqliteInt.h"
       
    18 
       
    19 
       
    20 /*
       
    21 ** Delete all the content of a Select structure but do not deallocate
       
    22 ** the select structure itself.
       
    23 */
       
    24 static void clearSelect(sqlite3 *db, Select *p){
       
    25   sqlite3ExprListDelete(db, p->pEList);
       
    26   sqlite3SrcListDelete(db, p->pSrc);
       
    27   sqlite3ExprDelete(db, p->pWhere);
       
    28   sqlite3ExprListDelete(db, p->pGroupBy);
       
    29   sqlite3ExprDelete(db, p->pHaving);
       
    30   sqlite3ExprListDelete(db, p->pOrderBy);
       
    31   sqlite3SelectDelete(db, p->pPrior);
       
    32   sqlite3ExprDelete(db, p->pLimit);
       
    33   sqlite3ExprDelete(db, p->pOffset);
       
    34 }
       
    35 
       
    36 /*
       
    37 ** Initialize a SelectDest structure.
       
    38 */
       
    39 void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
       
    40   pDest->eDest = eDest;
       
    41   pDest->iParm = iParm;
       
    42   pDest->affinity = 0;
       
    43   pDest->iMem = 0;
       
    44   pDest->nMem = 0;
       
    45 }
       
    46 
       
    47 
       
    48 /*
       
    49 ** Allocate a new Select structure and return a pointer to that
       
    50 ** structure.
       
    51 */
       
    52 Select *sqlite3SelectNew(
       
    53   Parse *pParse,        /* Parsing context */
       
    54   ExprList *pEList,     /* which columns to include in the result */
       
    55   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
       
    56   Expr *pWhere,         /* the WHERE clause */
       
    57   ExprList *pGroupBy,   /* the GROUP BY clause */
       
    58   Expr *pHaving,        /* the HAVING clause */
       
    59   ExprList *pOrderBy,   /* the ORDER BY clause */
       
    60   int isDistinct,       /* true if the DISTINCT keyword is present */
       
    61   Expr *pLimit,         /* LIMIT value.  NULL means not used */
       
    62   Expr *pOffset         /* OFFSET value.  NULL means no offset */
       
    63 ){
       
    64   Select *pNew;
       
    65   Select standin;
       
    66   sqlite3 *db = pParse->db;
       
    67   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
       
    68   assert( !pOffset || pLimit );   /* Can't have OFFSET without LIMIT. */
       
    69   if( pNew==0 ){
       
    70     pNew = &standin;
       
    71     memset(pNew, 0, sizeof(*pNew));
       
    72   }
       
    73   if( pEList==0 ){
       
    74     pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0,0,0), 0);
       
    75   }
       
    76   pNew->pEList = pEList;
       
    77   pNew->pSrc = pSrc;
       
    78   pNew->pWhere = pWhere;
       
    79   pNew->pGroupBy = pGroupBy;
       
    80   pNew->pHaving = pHaving;
       
    81   pNew->pOrderBy = pOrderBy;
       
    82   pNew->isDistinct = isDistinct;
       
    83   pNew->op = TK_SELECT;
       
    84   assert( pOffset==0 || pLimit!=0 );
       
    85   pNew->pLimit = pLimit;
       
    86   pNew->pOffset = pOffset;
       
    87   pNew->addrOpenEphm[0] = -1;
       
    88   pNew->addrOpenEphm[1] = -1;
       
    89   pNew->addrOpenEphm[2] = -1;
       
    90   if( pNew==&standin) {
       
    91     clearSelect(db, pNew);
       
    92     pNew = 0;
       
    93   }
       
    94   return pNew;
       
    95 }
       
    96 
       
    97 /*
       
    98 ** Delete the given Select structure and all of its substructures.
       
    99 */
       
   100 void sqlite3SelectDelete(sqlite3 *db, Select *p){
       
   101   if( p ){
       
   102     clearSelect(db, p);
       
   103     sqlite3DbFree(db, p);
       
   104   }
       
   105 }
       
   106 
       
   107 /*
       
   108 ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
       
   109 ** type of join.  Return an integer constant that expresses that type
       
   110 ** in terms of the following bit values:
       
   111 **
       
   112 **     JT_INNER
       
   113 **     JT_CROSS
       
   114 **     JT_OUTER
       
   115 **     JT_NATURAL
       
   116 **     JT_LEFT
       
   117 **     JT_RIGHT
       
   118 **
       
   119 ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
       
   120 **
       
   121 ** If an illegal or unsupported join type is seen, then still return
       
   122 ** a join type, but put an error in the pParse structure.
       
   123 */
       
   124 int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
       
   125   int jointype = 0;
       
   126   Token *apAll[3];
       
   127   Token *p;
       
   128   static const struct {
       
   129     const char zKeyword[8];
       
   130     u8 nChar;
       
   131     u8 code;
       
   132   } keywords[] = {
       
   133     { "natural", 7, JT_NATURAL },
       
   134     { "left",    4, JT_LEFT|JT_OUTER },
       
   135     { "right",   5, JT_RIGHT|JT_OUTER },
       
   136     { "full",    4, JT_LEFT|JT_RIGHT|JT_OUTER },
       
   137     { "outer",   5, JT_OUTER },
       
   138     { "inner",   5, JT_INNER },
       
   139     { "cross",   5, JT_INNER|JT_CROSS },
       
   140   };
       
   141   int i, j;
       
   142   apAll[0] = pA;
       
   143   apAll[1] = pB;
       
   144   apAll[2] = pC;
       
   145   for(i=0; i<3 && apAll[i]; i++){
       
   146     p = apAll[i];
       
   147     for(j=0; j<sizeof(keywords)/sizeof(keywords[0]); j++){
       
   148       if( p->n==keywords[j].nChar 
       
   149           && sqlite3StrNICmp((char*)p->z, keywords[j].zKeyword, p->n)==0 ){
       
   150         jointype |= keywords[j].code;
       
   151         break;
       
   152       }
       
   153     }
       
   154     if( j>=sizeof(keywords)/sizeof(keywords[0]) ){
       
   155       jointype |= JT_ERROR;
       
   156       break;
       
   157     }
       
   158   }
       
   159   if(
       
   160      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
       
   161      (jointype & JT_ERROR)!=0
       
   162   ){
       
   163     const char *zSp = " ";
       
   164     assert( pB!=0 );
       
   165     if( pC==0 ){ zSp++; }
       
   166     sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
       
   167        "%T %T%s%T", pA, pB, zSp, pC);
       
   168     jointype = JT_INNER;
       
   169   }else if( jointype & JT_RIGHT ){
       
   170     sqlite3ErrorMsg(pParse, 
       
   171       "RIGHT and FULL OUTER JOINs are not currently supported");
       
   172     jointype = JT_INNER;
       
   173   }
       
   174   return jointype;
       
   175 }
       
   176 
       
   177 /*
       
   178 ** Return the index of a column in a table.  Return -1 if the column
       
   179 ** is not contained in the table.
       
   180 */
       
   181 static int columnIndex(Table *pTab, const char *zCol){
       
   182   int i;
       
   183   for(i=0; i<pTab->nCol; i++){
       
   184     if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
       
   185   }
       
   186   return -1;
       
   187 }
       
   188 
       
   189 /*
       
   190 ** Set the value of a token to a '\000'-terminated string.
       
   191 */
       
   192 static void setToken(Token *p, const char *z){
       
   193   p->z = (u8*)z;
       
   194   p->n = z ? strlen(z) : 0;
       
   195   p->dyn = 0;
       
   196 }
       
   197 
       
   198 /*
       
   199 ** Set the token to the double-quoted and escaped version of the string pointed
       
   200 ** to by z. For example;
       
   201 **
       
   202 **    {a"bc}  ->  {"a""bc"}
       
   203 */
       
   204 static void setQuotedToken(Parse *pParse, Token *p, const char *z){
       
   205 
       
   206   /* Check if the string contains any " characters. If it does, then
       
   207   ** this function will malloc space to create a quoted version of
       
   208   ** the string in. Otherwise, save a call to sqlite3MPrintf() by
       
   209   ** just copying the pointer to the string.
       
   210   */
       
   211   const char *z2 = z;
       
   212   while( *z2 ){
       
   213     if( *z2=='"' ) break;
       
   214     z2++;
       
   215   }
       
   216 
       
   217   if( *z2 ){
       
   218     /* String contains " characters - copy and quote the string. */
       
   219     p->z = (u8 *)sqlite3MPrintf(pParse->db, "\"%w\"", z);
       
   220     if( p->z ){
       
   221       p->n = strlen((char *)p->z);
       
   222       p->dyn = 1;
       
   223     }
       
   224   }else{
       
   225     /* String contains no " characters - copy the pointer. */
       
   226     p->z = (u8*)z;
       
   227     p->n = (z2 - z);
       
   228     p->dyn = 0;
       
   229   }
       
   230 }
       
   231 
       
   232 /*
       
   233 ** Create an expression node for an identifier with the name of zName
       
   234 */
       
   235 Expr *sqlite3CreateIdExpr(Parse *pParse, const char *zName){
       
   236   Token dummy;
       
   237   setToken(&dummy, zName);
       
   238   return sqlite3PExpr(pParse, TK_ID, 0, 0, &dummy);
       
   239 }
       
   240 
       
   241 /*
       
   242 ** Add a term to the WHERE expression in *ppExpr that requires the
       
   243 ** zCol column to be equal in the two tables pTab1 and pTab2.
       
   244 */
       
   245 static void addWhereTerm(
       
   246   Parse *pParse,           /* Parsing context */
       
   247   const char *zCol,        /* Name of the column */
       
   248   const Table *pTab1,      /* First table */
       
   249   const char *zAlias1,     /* Alias for first table.  May be NULL */
       
   250   const Table *pTab2,      /* Second table */
       
   251   const char *zAlias2,     /* Alias for second table.  May be NULL */
       
   252   int iRightJoinTable,     /* VDBE cursor for the right table */
       
   253   Expr **ppExpr,           /* Add the equality term to this expression */
       
   254   int isOuterJoin          /* True if dealing with an OUTER join */
       
   255 ){
       
   256   Expr *pE1a, *pE1b, *pE1c;
       
   257   Expr *pE2a, *pE2b, *pE2c;
       
   258   Expr *pE;
       
   259 
       
   260   pE1a = sqlite3CreateIdExpr(pParse, zCol);
       
   261   pE2a = sqlite3CreateIdExpr(pParse, zCol);
       
   262   if( zAlias1==0 ){
       
   263     zAlias1 = pTab1->zName;
       
   264   }
       
   265   pE1b = sqlite3CreateIdExpr(pParse, zAlias1);
       
   266   if( zAlias2==0 ){
       
   267     zAlias2 = pTab2->zName;
       
   268   }
       
   269   pE2b = sqlite3CreateIdExpr(pParse, zAlias2);
       
   270   pE1c = sqlite3PExpr(pParse, TK_DOT, pE1b, pE1a, 0);
       
   271   pE2c = sqlite3PExpr(pParse, TK_DOT, pE2b, pE2a, 0);
       
   272   pE = sqlite3PExpr(pParse, TK_EQ, pE1c, pE2c, 0);
       
   273   if( pE && isOuterJoin ){
       
   274     ExprSetProperty(pE, EP_FromJoin);
       
   275     pE->iRightJoinTable = iRightJoinTable;
       
   276   }
       
   277   *ppExpr = sqlite3ExprAnd(pParse->db,*ppExpr, pE);
       
   278 }
       
   279 
       
   280 /*
       
   281 ** Set the EP_FromJoin property on all terms of the given expression.
       
   282 ** And set the Expr.iRightJoinTable to iTable for every term in the
       
   283 ** expression.
       
   284 **
       
   285 ** The EP_FromJoin property is used on terms of an expression to tell
       
   286 ** the LEFT OUTER JOIN processing logic that this term is part of the
       
   287 ** join restriction specified in the ON or USING clause and not a part
       
   288 ** of the more general WHERE clause.  These terms are moved over to the
       
   289 ** WHERE clause during join processing but we need to remember that they
       
   290 ** originated in the ON or USING clause.
       
   291 **
       
   292 ** The Expr.iRightJoinTable tells the WHERE clause processing that the
       
   293 ** expression depends on table iRightJoinTable even if that table is not
       
   294 ** explicitly mentioned in the expression.  That information is needed
       
   295 ** for cases like this:
       
   296 **
       
   297 **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
       
   298 **
       
   299 ** The where clause needs to defer the handling of the t1.x=5
       
   300 ** term until after the t2 loop of the join.  In that way, a
       
   301 ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
       
   302 ** defer the handling of t1.x=5, it will be processed immediately
       
   303 ** after the t1 loop and rows with t1.x!=5 will never appear in
       
   304 ** the output, which is incorrect.
       
   305 */
       
   306 static void setJoinExpr(Expr *p, int iTable){
       
   307   while( p ){
       
   308     ExprSetProperty(p, EP_FromJoin);
       
   309     p->iRightJoinTable = iTable;
       
   310     setJoinExpr(p->pLeft, iTable);
       
   311     p = p->pRight;
       
   312   } 
       
   313 }
       
   314 
       
   315 /*
       
   316 ** This routine processes the join information for a SELECT statement.
       
   317 ** ON and USING clauses are converted into extra terms of the WHERE clause.
       
   318 ** NATURAL joins also create extra WHERE clause terms.
       
   319 **
       
   320 ** The terms of a FROM clause are contained in the Select.pSrc structure.
       
   321 ** The left most table is the first entry in Select.pSrc.  The right-most
       
   322 ** table is the last entry.  The join operator is held in the entry to
       
   323 ** the left.  Thus entry 0 contains the join operator for the join between
       
   324 ** entries 0 and 1.  Any ON or USING clauses associated with the join are
       
   325 ** also attached to the left entry.
       
   326 **
       
   327 ** This routine returns the number of errors encountered.
       
   328 */
       
   329 static int sqliteProcessJoin(Parse *pParse, Select *p){
       
   330   SrcList *pSrc;                  /* All tables in the FROM clause */
       
   331   int i, j;                       /* Loop counters */
       
   332   struct SrcList_item *pLeft;     /* Left table being joined */
       
   333   struct SrcList_item *pRight;    /* Right table being joined */
       
   334 
       
   335   pSrc = p->pSrc;
       
   336   pLeft = &pSrc->a[0];
       
   337   pRight = &pLeft[1];
       
   338   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
       
   339     Table *pLeftTab = pLeft->pTab;
       
   340     Table *pRightTab = pRight->pTab;
       
   341     int isOuter;
       
   342 
       
   343     if( pLeftTab==0 || pRightTab==0 ) continue;
       
   344     isOuter = (pRight->jointype & JT_OUTER)!=0;
       
   345 
       
   346     /* When the NATURAL keyword is present, add WHERE clause terms for
       
   347     ** every column that the two tables have in common.
       
   348     */
       
   349     if( pRight->jointype & JT_NATURAL ){
       
   350       if( pRight->pOn || pRight->pUsing ){
       
   351         sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
       
   352            "an ON or USING clause", 0);
       
   353         return 1;
       
   354       }
       
   355       for(j=0; j<pLeftTab->nCol; j++){
       
   356         char *zName = pLeftTab->aCol[j].zName;
       
   357         if( columnIndex(pRightTab, zName)>=0 ){
       
   358           addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, 
       
   359                               pRightTab, pRight->zAlias,
       
   360                               pRight->iCursor, &p->pWhere, isOuter);
       
   361           
       
   362         }
       
   363       }
       
   364     }
       
   365 
       
   366     /* Disallow both ON and USING clauses in the same join
       
   367     */
       
   368     if( pRight->pOn && pRight->pUsing ){
       
   369       sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
       
   370         "clauses in the same join");
       
   371       return 1;
       
   372     }
       
   373 
       
   374     /* Add the ON clause to the end of the WHERE clause, connected by
       
   375     ** an AND operator.
       
   376     */
       
   377     if( pRight->pOn ){
       
   378       if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
       
   379       p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
       
   380       pRight->pOn = 0;
       
   381     }
       
   382 
       
   383     /* Create extra terms on the WHERE clause for each column named
       
   384     ** in the USING clause.  Example: If the two tables to be joined are 
       
   385     ** A and B and the USING clause names X, Y, and Z, then add this
       
   386     ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
       
   387     ** Report an error if any column mentioned in the USING clause is
       
   388     ** not contained in both tables to be joined.
       
   389     */
       
   390     if( pRight->pUsing ){
       
   391       IdList *pList = pRight->pUsing;
       
   392       for(j=0; j<pList->nId; j++){
       
   393         char *zName = pList->a[j].zName;
       
   394         if( columnIndex(pLeftTab, zName)<0 || columnIndex(pRightTab, zName)<0 ){
       
   395           sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
       
   396             "not present in both tables", zName);
       
   397           return 1;
       
   398         }
       
   399         addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, 
       
   400                             pRightTab, pRight->zAlias,
       
   401                             pRight->iCursor, &p->pWhere, isOuter);
       
   402       }
       
   403     }
       
   404   }
       
   405   return 0;
       
   406 }
       
   407 
       
   408 /*
       
   409 ** Insert code into "v" that will push the record on the top of the
       
   410 ** stack into the sorter.
       
   411 */
       
   412 static void pushOntoSorter(
       
   413   Parse *pParse,         /* Parser context */
       
   414   ExprList *pOrderBy,    /* The ORDER BY clause */
       
   415   Select *pSelect,       /* The whole SELECT statement */
       
   416   int regData            /* Register holding data to be sorted */
       
   417 ){
       
   418   Vdbe *v = pParse->pVdbe;
       
   419   int nExpr = pOrderBy->nExpr;
       
   420   int regBase = sqlite3GetTempRange(pParse, nExpr+2);
       
   421   int regRecord = sqlite3GetTempReg(pParse);
       
   422   sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0);
       
   423   sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr);
       
   424   sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
       
   425   sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord);
       
   426   sqlite3VdbeAddOp2(v, OP_IdxInsert, pOrderBy->iECursor, regRecord);
       
   427   sqlite3ReleaseTempReg(pParse, regRecord);
       
   428   sqlite3ReleaseTempRange(pParse, regBase, nExpr+2);
       
   429   if( pSelect->iLimit ){
       
   430     int addr1, addr2;
       
   431     int iLimit;
       
   432     if( pSelect->iOffset ){
       
   433       iLimit = pSelect->iOffset+1;
       
   434     }else{
       
   435       iLimit = pSelect->iLimit;
       
   436     }
       
   437     addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit);
       
   438     sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
       
   439     addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
       
   440     sqlite3VdbeJumpHere(v, addr1);
       
   441     sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor);
       
   442     sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor);
       
   443     sqlite3VdbeJumpHere(v, addr2);
       
   444     pSelect->iLimit = 0;
       
   445   }
       
   446 }
       
   447 
       
   448 /*
       
   449 ** Add code to implement the OFFSET
       
   450 */
       
   451 static void codeOffset(
       
   452   Vdbe *v,          /* Generate code into this VM */
       
   453   Select *p,        /* The SELECT statement being coded */
       
   454   int iContinue     /* Jump here to skip the current record */
       
   455 ){
       
   456   if( p->iOffset && iContinue!=0 ){
       
   457     int addr;
       
   458     sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
       
   459     addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
       
   460     sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
       
   461     VdbeComment((v, "skip OFFSET records"));
       
   462     sqlite3VdbeJumpHere(v, addr);
       
   463   }
       
   464 }
       
   465 
       
   466 /*
       
   467 ** Add code that will check to make sure the N registers starting at iMem
       
   468 ** form a distinct entry.  iTab is a sorting index that holds previously
       
   469 ** seen combinations of the N values.  A new entry is made in iTab
       
   470 ** if the current N values are new.
       
   471 **
       
   472 ** A jump to addrRepeat is made and the N+1 values are popped from the
       
   473 ** stack if the top N elements are not distinct.
       
   474 */
       
   475 static void codeDistinct(
       
   476   Parse *pParse,     /* Parsing and code generating context */
       
   477   int iTab,          /* A sorting index used to test for distinctness */
       
   478   int addrRepeat,    /* Jump to here if not distinct */
       
   479   int N,             /* Number of elements */
       
   480   int iMem           /* First element */
       
   481 ){
       
   482   Vdbe *v;
       
   483   int r1;
       
   484 
       
   485   v = pParse->pVdbe;
       
   486   r1 = sqlite3GetTempReg(pParse);
       
   487   sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
       
   488   sqlite3VdbeAddOp3(v, OP_Found, iTab, addrRepeat, r1);
       
   489   sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
       
   490   sqlite3ReleaseTempReg(pParse, r1);
       
   491 }
       
   492 
       
   493 /*
       
   494 ** Generate an error message when a SELECT is used within a subexpression
       
   495 ** (example:  "a IN (SELECT * FROM table)") but it has more than 1 result
       
   496 ** column.  We do this in a subroutine because the error occurs in multiple
       
   497 ** places.
       
   498 */
       
   499 static int checkForMultiColumnSelectError(
       
   500   Parse *pParse,       /* Parse context. */
       
   501   SelectDest *pDest,   /* Destination of SELECT results */
       
   502   int nExpr            /* Number of result columns returned by SELECT */
       
   503 ){
       
   504   int eDest = pDest->eDest;
       
   505   if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
       
   506     sqlite3ErrorMsg(pParse, "only a single result allowed for "
       
   507        "a SELECT that is part of an expression");
       
   508     return 1;
       
   509   }else{
       
   510     return 0;
       
   511   }
       
   512 }
       
   513 
       
   514 /*
       
   515 ** This routine generates the code for the inside of the inner loop
       
   516 ** of a SELECT.
       
   517 **
       
   518 ** If srcTab and nColumn are both zero, then the pEList expressions
       
   519 ** are evaluated in order to get the data for this row.  If nColumn>0
       
   520 ** then data is pulled from srcTab and pEList is used only to get the
       
   521 ** datatypes for each column.
       
   522 */
       
   523 static void selectInnerLoop(
       
   524   Parse *pParse,          /* The parser context */
       
   525   Select *p,              /* The complete select statement being coded */
       
   526   ExprList *pEList,       /* List of values being extracted */
       
   527   int srcTab,             /* Pull data from this table */
       
   528   int nColumn,            /* Number of columns in the source table */
       
   529   ExprList *pOrderBy,     /* If not NULL, sort results using this key */
       
   530   int distinct,           /* If >=0, make sure results are distinct */
       
   531   SelectDest *pDest,      /* How to dispose of the results */
       
   532   int iContinue,          /* Jump here to continue with next row */
       
   533   int iBreak              /* Jump here to break out of the inner loop */
       
   534 ){
       
   535   Vdbe *v = pParse->pVdbe;
       
   536   int i;
       
   537   int hasDistinct;        /* True if the DISTINCT keyword is present */
       
   538   int regResult;              /* Start of memory holding result set */
       
   539   int eDest = pDest->eDest;   /* How to dispose of results */
       
   540   int iParm = pDest->iParm;   /* First argument to disposal method */
       
   541   int nResultCol;             /* Number of result columns */
       
   542 
       
   543   if( v==0 ) return;
       
   544   assert( pEList!=0 );
       
   545   hasDistinct = distinct>=0;
       
   546   if( pOrderBy==0 && !hasDistinct ){
       
   547     codeOffset(v, p, iContinue);
       
   548   }
       
   549 
       
   550   /* Pull the requested columns.
       
   551   */
       
   552   if( nColumn>0 ){
       
   553     nResultCol = nColumn;
       
   554   }else{
       
   555     nResultCol = pEList->nExpr;
       
   556   }
       
   557   if( pDest->iMem==0 ){
       
   558     pDest->iMem = pParse->nMem+1;
       
   559     pDest->nMem = nResultCol;
       
   560     pParse->nMem += nResultCol;
       
   561   }else if( pDest->nMem!=nResultCol ){
       
   562     /* This happens when two SELECTs of a compound SELECT have differing
       
   563     ** numbers of result columns.  The error message will be generated by
       
   564     ** a higher-level routine. */
       
   565     return;
       
   566   }
       
   567   regResult = pDest->iMem;
       
   568   if( nColumn>0 ){
       
   569     for(i=0; i<nColumn; i++){
       
   570       sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
       
   571     }
       
   572   }else if( eDest!=SRT_Exists ){
       
   573     /* If the destination is an EXISTS(...) expression, the actual
       
   574     ** values returned by the SELECT are not required.
       
   575     */
       
   576     sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Callback);
       
   577   }
       
   578   nColumn = nResultCol;
       
   579 
       
   580   /* If the DISTINCT keyword was present on the SELECT statement
       
   581   ** and this row has been seen before, then do not make this row
       
   582   ** part of the result.
       
   583   */
       
   584   if( hasDistinct ){
       
   585     assert( pEList!=0 );
       
   586     assert( pEList->nExpr==nColumn );
       
   587     codeDistinct(pParse, distinct, iContinue, nColumn, regResult);
       
   588     if( pOrderBy==0 ){
       
   589       codeOffset(v, p, iContinue);
       
   590     }
       
   591   }
       
   592 
       
   593   if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
       
   594     return;
       
   595   }
       
   596 
       
   597   switch( eDest ){
       
   598     /* In this mode, write each query result to the key of the temporary
       
   599     ** table iParm.
       
   600     */
       
   601 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
   602     case SRT_Union: {
       
   603       int r1;
       
   604       r1 = sqlite3GetTempReg(pParse);
       
   605       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
       
   606       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
       
   607       sqlite3ReleaseTempReg(pParse, r1);
       
   608       break;
       
   609     }
       
   610 
       
   611     /* Construct a record from the query result, but instead of
       
   612     ** saving that record, use it as a key to delete elements from
       
   613     ** the temporary table iParm.
       
   614     */
       
   615     case SRT_Except: {
       
   616       sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
       
   617       break;
       
   618     }
       
   619 #endif
       
   620 
       
   621     /* Store the result as data using a unique key.
       
   622     */
       
   623     case SRT_Table:
       
   624     case SRT_EphemTab: {
       
   625       int r1 = sqlite3GetTempReg(pParse);
       
   626       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
       
   627       if( pOrderBy ){
       
   628         pushOntoSorter(pParse, pOrderBy, p, r1);
       
   629       }else{
       
   630         int r2 = sqlite3GetTempReg(pParse);
       
   631         sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
       
   632         sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
       
   633         sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
       
   634         sqlite3ReleaseTempReg(pParse, r2);
       
   635       }
       
   636       sqlite3ReleaseTempReg(pParse, r1);
       
   637       break;
       
   638     }
       
   639 
       
   640 #ifndef SQLITE_OMIT_SUBQUERY
       
   641     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
       
   642     ** then there should be a single item on the stack.  Write this
       
   643     ** item into the set table with bogus data.
       
   644     */
       
   645     case SRT_Set: {
       
   646       assert( nColumn==1 );
       
   647       p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity);
       
   648       if( pOrderBy ){
       
   649         /* At first glance you would think we could optimize out the
       
   650         ** ORDER BY in this case since the order of entries in the set
       
   651         ** does not matter.  But there might be a LIMIT clause, in which
       
   652         ** case the order does matter */
       
   653         pushOntoSorter(pParse, pOrderBy, p, regResult);
       
   654       }else{
       
   655         int r1 = sqlite3GetTempReg(pParse);
       
   656         sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1);
       
   657         sqlite3ExprCacheAffinityChange(pParse, regResult, 1);
       
   658         sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
       
   659         sqlite3ReleaseTempReg(pParse, r1);
       
   660       }
       
   661       break;
       
   662     }
       
   663 
       
   664     /* If any row exist in the result set, record that fact and abort.
       
   665     */
       
   666     case SRT_Exists: {
       
   667       sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
       
   668       /* The LIMIT clause will terminate the loop for us */
       
   669       break;
       
   670     }
       
   671 
       
   672     /* If this is a scalar select that is part of an expression, then
       
   673     ** store the results in the appropriate memory cell and break out
       
   674     ** of the scan loop.
       
   675     */
       
   676     case SRT_Mem: {
       
   677       assert( nColumn==1 );
       
   678       if( pOrderBy ){
       
   679         pushOntoSorter(pParse, pOrderBy, p, regResult);
       
   680       }else{
       
   681         sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
       
   682         /* The LIMIT clause will jump out of the loop for us */
       
   683       }
       
   684       break;
       
   685     }
       
   686 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
       
   687 
       
   688     /* Send the data to the callback function or to a subroutine.  In the
       
   689     ** case of a subroutine, the subroutine itself is responsible for
       
   690     ** popping the data from the stack.
       
   691     */
       
   692     case SRT_Coroutine:
       
   693     case SRT_Callback: {
       
   694       if( pOrderBy ){
       
   695         int r1 = sqlite3GetTempReg(pParse);
       
   696         sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
       
   697         pushOntoSorter(pParse, pOrderBy, p, r1);
       
   698         sqlite3ReleaseTempReg(pParse, r1);
       
   699       }else if( eDest==SRT_Coroutine ){
       
   700         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
       
   701       }else{
       
   702         sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
       
   703         sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
       
   704       }
       
   705       break;
       
   706     }
       
   707 
       
   708 #if !defined(SQLITE_OMIT_TRIGGER)
       
   709     /* Discard the results.  This is used for SELECT statements inside
       
   710     ** the body of a TRIGGER.  The purpose of such selects is to call
       
   711     ** user-defined functions that have side effects.  We do not care
       
   712     ** about the actual results of the select.
       
   713     */
       
   714     default: {
       
   715       assert( eDest==SRT_Discard );
       
   716       break;
       
   717     }
       
   718 #endif
       
   719   }
       
   720 
       
   721   /* Jump to the end of the loop if the LIMIT is reached.
       
   722   */
       
   723   if( p->iLimit ){
       
   724     assert( pOrderBy==0 );  /* If there is an ORDER BY, the call to
       
   725                             ** pushOntoSorter() would have cleared p->iLimit */
       
   726     sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1);
       
   727     sqlite3VdbeAddOp2(v, OP_IfZero, p->iLimit, iBreak);
       
   728   }
       
   729 }
       
   730 
       
   731 /*
       
   732 ** Given an expression list, generate a KeyInfo structure that records
       
   733 ** the collating sequence for each expression in that expression list.
       
   734 **
       
   735 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
       
   736 ** KeyInfo structure is appropriate for initializing a virtual index to
       
   737 ** implement that clause.  If the ExprList is the result set of a SELECT
       
   738 ** then the KeyInfo structure is appropriate for initializing a virtual
       
   739 ** index to implement a DISTINCT test.
       
   740 **
       
   741 ** Space to hold the KeyInfo structure is obtain from malloc.  The calling
       
   742 ** function is responsible for seeing that this structure is eventually
       
   743 ** freed.  Add the KeyInfo structure to the P4 field of an opcode using
       
   744 ** P4_KEYINFO_HANDOFF is the usual way of dealing with this.
       
   745 */
       
   746 static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
       
   747   sqlite3 *db = pParse->db;
       
   748   int nExpr;
       
   749   KeyInfo *pInfo;
       
   750   struct ExprList_item *pItem;
       
   751   int i;
       
   752 
       
   753   nExpr = pList->nExpr;
       
   754   pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
       
   755   if( pInfo ){
       
   756     pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
       
   757     pInfo->nField = nExpr;
       
   758     pInfo->enc = ENC(db);
       
   759     for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
       
   760       CollSeq *pColl;
       
   761       pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
       
   762       if( !pColl ){
       
   763         pColl = db->pDfltColl;
       
   764       }
       
   765       pInfo->aColl[i] = pColl;
       
   766       pInfo->aSortOrder[i] = pItem->sortOrder;
       
   767     }
       
   768   }
       
   769   return pInfo;
       
   770 }
       
   771 
       
   772 
       
   773 /*
       
   774 ** If the inner loop was generated using a non-null pOrderBy argument,
       
   775 ** then the results were placed in a sorter.  After the loop is terminated
       
   776 ** we need to run the sorter and output the results.  The following
       
   777 ** routine generates the code needed to do that.
       
   778 */
       
   779 static void generateSortTail(
       
   780   Parse *pParse,    /* Parsing context */
       
   781   Select *p,        /* The SELECT statement */
       
   782   Vdbe *v,          /* Generate code into this VDBE */
       
   783   int nColumn,      /* Number of columns of data */
       
   784   SelectDest *pDest /* Write the sorted results here */
       
   785 ){
       
   786   int brk = sqlite3VdbeMakeLabel(v);
       
   787   int cont = sqlite3VdbeMakeLabel(v);
       
   788   int addr;
       
   789   int iTab;
       
   790   int pseudoTab = 0;
       
   791   ExprList *pOrderBy = p->pOrderBy;
       
   792 
       
   793   int eDest = pDest->eDest;
       
   794   int iParm = pDest->iParm;
       
   795 
       
   796   int regRow;
       
   797   int regRowid;
       
   798 
       
   799   iTab = pOrderBy->iECursor;
       
   800   if( eDest==SRT_Callback || eDest==SRT_Coroutine ){
       
   801     pseudoTab = pParse->nTab++;
       
   802     sqlite3VdbeAddOp2(v, OP_SetNumColumns, 0, nColumn);
       
   803     sqlite3VdbeAddOp2(v, OP_OpenPseudo, pseudoTab, eDest==SRT_Callback);
       
   804   }
       
   805   addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, brk);
       
   806   codeOffset(v, p, cont);
       
   807   regRow = sqlite3GetTempReg(pParse);
       
   808   regRowid = sqlite3GetTempReg(pParse);
       
   809   sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr + 1, regRow);
       
   810   switch( eDest ){
       
   811     case SRT_Table:
       
   812     case SRT_EphemTab: {
       
   813       sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
       
   814       sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
       
   815       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
       
   816       break;
       
   817     }
       
   818 #ifndef SQLITE_OMIT_SUBQUERY
       
   819     case SRT_Set: {
       
   820       assert( nColumn==1 );
       
   821       sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1);
       
   822       sqlite3ExprCacheAffinityChange(pParse, regRow, 1);
       
   823       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid);
       
   824       break;
       
   825     }
       
   826     case SRT_Mem: {
       
   827       assert( nColumn==1 );
       
   828       sqlite3ExprCodeMove(pParse, regRow, iParm, 1);
       
   829       /* The LIMIT clause will terminate the loop for us */
       
   830       break;
       
   831     }
       
   832 #endif
       
   833     case SRT_Callback:
       
   834     case SRT_Coroutine: {
       
   835       int i;
       
   836       sqlite3VdbeAddOp2(v, OP_Integer, 1, regRowid);
       
   837       sqlite3VdbeAddOp3(v, OP_Insert, pseudoTab, regRow, regRowid);
       
   838       for(i=0; i<nColumn; i++){
       
   839         assert( regRow!=pDest->iMem+i );
       
   840         sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
       
   841       }
       
   842       if( eDest==SRT_Callback ){
       
   843         sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);
       
   844         sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn);
       
   845       }else{
       
   846         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
       
   847       }
       
   848       break;
       
   849     }
       
   850     default: {
       
   851       /* Do nothing */
       
   852       break;
       
   853     }
       
   854   }
       
   855   sqlite3ReleaseTempReg(pParse, regRow);
       
   856   sqlite3ReleaseTempReg(pParse, regRowid);
       
   857 
       
   858   /* LIMIT has been implemented by the pushOntoSorter() routine.
       
   859   */
       
   860   assert( p->iLimit==0 );
       
   861 
       
   862   /* The bottom of the loop
       
   863   */
       
   864   sqlite3VdbeResolveLabel(v, cont);
       
   865   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr);
       
   866   sqlite3VdbeResolveLabel(v, brk);
       
   867   if( eDest==SRT_Callback || eDest==SRT_Coroutine ){
       
   868     sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0);
       
   869   }
       
   870 
       
   871 }
       
   872 
       
   873 /*
       
   874 ** Return a pointer to a string containing the 'declaration type' of the
       
   875 ** expression pExpr. The string may be treated as static by the caller.
       
   876 **
       
   877 ** The declaration type is the exact datatype definition extracted from the
       
   878 ** original CREATE TABLE statement if the expression is a column. The
       
   879 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
       
   880 ** is considered a column can be complex in the presence of subqueries. The
       
   881 ** result-set expression in all of the following SELECT statements is 
       
   882 ** considered a column by this function.
       
   883 **
       
   884 **   SELECT col FROM tbl;
       
   885 **   SELECT (SELECT col FROM tbl;
       
   886 **   SELECT (SELECT col FROM tbl);
       
   887 **   SELECT abc FROM (SELECT col AS abc FROM tbl);
       
   888 ** 
       
   889 ** The declaration type for any expression other than a column is NULL.
       
   890 */
       
   891 static const char *columnType(
       
   892   NameContext *pNC, 
       
   893   Expr *pExpr,
       
   894   const char **pzOriginDb,
       
   895   const char **pzOriginTab,
       
   896   const char **pzOriginCol
       
   897 ){
       
   898   char const *zType = 0;
       
   899   char const *zOriginDb = 0;
       
   900   char const *zOriginTab = 0;
       
   901   char const *zOriginCol = 0;
       
   902   int j;
       
   903   if( pExpr==0 || pNC->pSrcList==0 ) return 0;
       
   904 
       
   905   switch( pExpr->op ){
       
   906     case TK_AGG_COLUMN:
       
   907     case TK_COLUMN: {
       
   908       /* The expression is a column. Locate the table the column is being
       
   909       ** extracted from in NameContext.pSrcList. This table may be real
       
   910       ** database table or a subquery.
       
   911       */
       
   912       Table *pTab = 0;            /* Table structure column is extracted from */
       
   913       Select *pS = 0;             /* Select the column is extracted from */
       
   914       int iCol = pExpr->iColumn;  /* Index of column in pTab */
       
   915       while( pNC && !pTab ){
       
   916         SrcList *pTabList = pNC->pSrcList;
       
   917         for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
       
   918         if( j<pTabList->nSrc ){
       
   919           pTab = pTabList->a[j].pTab;
       
   920           pS = pTabList->a[j].pSelect;
       
   921         }else{
       
   922           pNC = pNC->pNext;
       
   923         }
       
   924       }
       
   925 
       
   926       if( pTab==0 ){
       
   927         /* FIX ME:
       
   928         ** This can occurs if you have something like "SELECT new.x;" inside
       
   929         ** a trigger.  In other words, if you reference the special "new"
       
   930         ** table in the result set of a select.  We do not have a good way
       
   931         ** to find the actual table type, so call it "TEXT".  This is really
       
   932         ** something of a bug, but I do not know how to fix it.
       
   933         **
       
   934         ** This code does not produce the correct answer - it just prevents
       
   935         ** a segfault.  See ticket #1229.
       
   936         */
       
   937         zType = "TEXT";
       
   938         break;
       
   939       }
       
   940 
       
   941       assert( pTab );
       
   942       if( pS ){
       
   943         /* The "table" is actually a sub-select or a view in the FROM clause
       
   944         ** of the SELECT statement. Return the declaration type and origin
       
   945         ** data for the result-set column of the sub-select.
       
   946         */
       
   947         if( iCol>=0 && iCol<pS->pEList->nExpr ){
       
   948           /* If iCol is less than zero, then the expression requests the
       
   949           ** rowid of the sub-select or view. This expression is legal (see 
       
   950           ** test case misc2.2.2) - it always evaluates to NULL.
       
   951           */
       
   952           NameContext sNC;
       
   953           Expr *p = pS->pEList->a[iCol].pExpr;
       
   954           sNC.pSrcList = pS->pSrc;
       
   955           sNC.pNext = 0;
       
   956           sNC.pParse = pNC->pParse;
       
   957           zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
       
   958         }
       
   959       }else if( pTab->pSchema ){
       
   960         /* A real table */
       
   961         assert( !pS );
       
   962         if( iCol<0 ) iCol = pTab->iPKey;
       
   963         assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
       
   964         if( iCol<0 ){
       
   965           zType = "INTEGER";
       
   966           zOriginCol = "rowid";
       
   967         }else{
       
   968           zType = pTab->aCol[iCol].zType;
       
   969           zOriginCol = pTab->aCol[iCol].zName;
       
   970         }
       
   971         zOriginTab = pTab->zName;
       
   972         if( pNC->pParse ){
       
   973           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
       
   974           zOriginDb = pNC->pParse->db->aDb[iDb].zName;
       
   975         }
       
   976       }
       
   977       break;
       
   978     }
       
   979 #ifndef SQLITE_OMIT_SUBQUERY
       
   980     case TK_SELECT: {
       
   981       /* The expression is a sub-select. Return the declaration type and
       
   982       ** origin info for the single column in the result set of the SELECT
       
   983       ** statement.
       
   984       */
       
   985       NameContext sNC;
       
   986       Select *pS = pExpr->pSelect;
       
   987       Expr *p = pS->pEList->a[0].pExpr;
       
   988       sNC.pSrcList = pS->pSrc;
       
   989       sNC.pNext = pNC;
       
   990       sNC.pParse = pNC->pParse;
       
   991       zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
       
   992       break;
       
   993     }
       
   994 #endif
       
   995   }
       
   996   
       
   997   if( pzOriginDb ){
       
   998     assert( pzOriginTab && pzOriginCol );
       
   999     *pzOriginDb = zOriginDb;
       
  1000     *pzOriginTab = zOriginTab;
       
  1001     *pzOriginCol = zOriginCol;
       
  1002   }
       
  1003   return zType;
       
  1004 }
       
  1005 
       
  1006 /*
       
  1007 ** Generate code that will tell the VDBE the declaration types of columns
       
  1008 ** in the result set.
       
  1009 */
       
  1010 static void generateColumnTypes(
       
  1011   Parse *pParse,      /* Parser context */
       
  1012   SrcList *pTabList,  /* List of tables */
       
  1013   ExprList *pEList    /* Expressions defining the result set */
       
  1014 ){
       
  1015 #ifndef SQLITE_OMIT_DECLTYPE
       
  1016   Vdbe *v = pParse->pVdbe;
       
  1017   int i;
       
  1018   NameContext sNC;
       
  1019   sNC.pSrcList = pTabList;
       
  1020   sNC.pParse = pParse;
       
  1021   for(i=0; i<pEList->nExpr; i++){
       
  1022     Expr *p = pEList->a[i].pExpr;
       
  1023     const char *zType;
       
  1024 #ifdef SQLITE_ENABLE_COLUMN_METADATA
       
  1025     const char *zOrigDb = 0;
       
  1026     const char *zOrigTab = 0;
       
  1027     const char *zOrigCol = 0;
       
  1028     zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
       
  1029 
       
  1030     /* The vdbe must make its own copy of the column-type and other 
       
  1031     ** column specific strings, in case the schema is reset before this
       
  1032     ** virtual machine is deleted.
       
  1033     */
       
  1034     sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, P4_TRANSIENT);
       
  1035     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, P4_TRANSIENT);
       
  1036     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, P4_TRANSIENT);
       
  1037 #else
       
  1038     zType = columnType(&sNC, p, 0, 0, 0);
       
  1039 #endif
       
  1040     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, P4_TRANSIENT);
       
  1041   }
       
  1042 #endif /* SQLITE_OMIT_DECLTYPE */
       
  1043 }
       
  1044 
       
  1045 /*
       
  1046 ** Generate code that will tell the VDBE the names of columns
       
  1047 ** in the result set.  This information is used to provide the
       
  1048 ** azCol[] values in the callback.
       
  1049 */
       
  1050 static void generateColumnNames(
       
  1051   Parse *pParse,      /* Parser context */
       
  1052   SrcList *pTabList,  /* List of tables */
       
  1053   ExprList *pEList    /* Expressions defining the result set */
       
  1054 ){
       
  1055   Vdbe *v = pParse->pVdbe;
       
  1056   int i, j;
       
  1057   sqlite3 *db = pParse->db;
       
  1058   int fullNames, shortNames;
       
  1059 
       
  1060 #ifndef SQLITE_OMIT_EXPLAIN
       
  1061   /* If this is an EXPLAIN, skip this step */
       
  1062   if( pParse->explain ){
       
  1063     return;
       
  1064   }
       
  1065 #endif
       
  1066 
       
  1067   assert( v!=0 );
       
  1068   if( pParse->colNamesSet || v==0 || db->mallocFailed ) return;
       
  1069   pParse->colNamesSet = 1;
       
  1070   fullNames = (db->flags & SQLITE_FullColNames)!=0;
       
  1071   shortNames = (db->flags & SQLITE_ShortColNames)!=0;
       
  1072   sqlite3VdbeSetNumCols(v, pEList->nExpr);
       
  1073   for(i=0; i<pEList->nExpr; i++){
       
  1074     Expr *p;
       
  1075     p = pEList->a[i].pExpr;
       
  1076     if( p==0 ) continue;
       
  1077     if( pEList->a[i].zName ){
       
  1078       char *zName = pEList->a[i].zName;
       
  1079       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, strlen(zName));
       
  1080     }else if( p->op==TK_COLUMN && pTabList ){
       
  1081       Table *pTab;
       
  1082       char *zCol;
       
  1083       int iCol = p->iColumn;
       
  1084       for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){}
       
  1085       assert( j<pTabList->nSrc );
       
  1086       pTab = pTabList->a[j].pTab;
       
  1087       if( iCol<0 ) iCol = pTab->iPKey;
       
  1088       assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
       
  1089       if( iCol<0 ){
       
  1090         zCol = "rowid";
       
  1091       }else{
       
  1092         zCol = pTab->aCol[iCol].zName;
       
  1093       }
       
  1094       if( !shortNames && !fullNames ){
       
  1095         sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);
       
  1096       }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){
       
  1097         char *zName = 0;
       
  1098         char *zTab;
       
  1099  
       
  1100         zTab = pTabList->a[j].zAlias;
       
  1101         if( fullNames || zTab==0 ) zTab = pTab->zName;
       
  1102         zName = sqlite3MPrintf(db, "%s.%s", zTab, zCol);
       
  1103         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, P4_DYNAMIC);
       
  1104       }else{
       
  1105         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, strlen(zCol));
       
  1106       }
       
  1107     }else{
       
  1108       sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);
       
  1109     }
       
  1110   }
       
  1111   generateColumnTypes(pParse, pTabList, pEList);
       
  1112 }
       
  1113 
       
  1114 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
  1115 /*
       
  1116 ** Name of the connection operator, used for error messages.
       
  1117 */
       
  1118 static const char *selectOpName(int id){
       
  1119   char *z;
       
  1120   switch( id ){
       
  1121     case TK_ALL:       z = "UNION ALL";   break;
       
  1122     case TK_INTERSECT: z = "INTERSECT";   break;
       
  1123     case TK_EXCEPT:    z = "EXCEPT";      break;
       
  1124     default:           z = "UNION";       break;
       
  1125   }
       
  1126   return z;
       
  1127 }
       
  1128 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
       
  1129 
       
  1130 /*
       
  1131 ** Forward declaration
       
  1132 */
       
  1133 static int prepSelectStmt(Parse*, Select*);
       
  1134 
       
  1135 /*
       
  1136 ** Given a SELECT statement, generate a Table structure that describes
       
  1137 ** the result set of that SELECT.
       
  1138 */
       
  1139 Table *sqlite3ResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){
       
  1140   Table *pTab;
       
  1141   int i, j, rc;
       
  1142   ExprList *pEList;
       
  1143   Column *aCol, *pCol;
       
  1144   sqlite3 *db = pParse->db;
       
  1145   int savedFlags;
       
  1146 
       
  1147   savedFlags = db->flags;
       
  1148   db->flags &= ~SQLITE_FullColNames;
       
  1149   db->flags |= SQLITE_ShortColNames;
       
  1150   rc = sqlite3SelectResolve(pParse, pSelect, 0);
       
  1151   if( rc==SQLITE_OK ){
       
  1152     while( pSelect->pPrior ) pSelect = pSelect->pPrior;
       
  1153     rc = prepSelectStmt(pParse, pSelect);
       
  1154     if( rc==SQLITE_OK ){
       
  1155       rc = sqlite3SelectResolve(pParse, pSelect, 0);
       
  1156     }
       
  1157   }
       
  1158   db->flags = savedFlags;
       
  1159   if( rc ){
       
  1160     return 0;
       
  1161   }
       
  1162   pTab = sqlite3DbMallocZero(db, sizeof(Table) );
       
  1163   if( pTab==0 ){
       
  1164     return 0;
       
  1165   }
       
  1166   pTab->db = db;
       
  1167   pTab->nRef = 1;
       
  1168   pTab->zName = zTabName ? sqlite3DbStrDup(db, zTabName) : 0;
       
  1169   pEList = pSelect->pEList;
       
  1170   pTab->nCol = pEList->nExpr;
       
  1171   assert( pTab->nCol>0 );
       
  1172   pTab->aCol = aCol = sqlite3DbMallocZero(db, sizeof(pTab->aCol[0])*pTab->nCol);
       
  1173   testcase( aCol==0 );
       
  1174   for(i=0, pCol=aCol; i<pTab->nCol; i++, pCol++){
       
  1175     Expr *p;
       
  1176     char *zType;
       
  1177     char *zName;
       
  1178     int nName;
       
  1179     CollSeq *pColl;
       
  1180     int cnt;
       
  1181     NameContext sNC;
       
  1182     
       
  1183     /* Get an appropriate name for the column
       
  1184     */
       
  1185     p = pEList->a[i].pExpr;
       
  1186     assert( p->pRight==0 || p->pRight->token.z==0 || p->pRight->token.z[0]!=0 );
       
  1187     if( (zName = pEList->a[i].zName)!=0 ){
       
  1188       /* If the column contains an "AS <name>" phrase, use <name> as the name */
       
  1189       zName = sqlite3DbStrDup(db, zName);
       
  1190     }else if( p->op==TK_COLUMN && p->pTab ){
       
  1191       /* For columns use the column name name */
       
  1192       int iCol = p->iColumn;
       
  1193       if( iCol<0 ) iCol = p->pTab->iPKey;
       
  1194       zName = sqlite3MPrintf(db, "%s", p->pTab->aCol[iCol].zName);
       
  1195     }else{
       
  1196       /* Use the original text of the column expression as its name */
       
  1197       zName = sqlite3MPrintf(db, "%T", &p->span);
       
  1198     }
       
  1199     if( db->mallocFailed ){
       
  1200       sqlite3DbFree(db, zName);
       
  1201       break;
       
  1202     }
       
  1203     sqlite3Dequote(zName);
       
  1204 
       
  1205     /* Make sure the column name is unique.  If the name is not unique,
       
  1206     ** append a integer to the name so that it becomes unique.
       
  1207     */
       
  1208     nName = strlen(zName);
       
  1209     for(j=cnt=0; j<i; j++){
       
  1210       if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
       
  1211         char *zNewName;
       
  1212         zName[nName] = 0;
       
  1213         zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
       
  1214         sqlite3DbFree(db, zName);
       
  1215         zName = zNewName;
       
  1216         j = -1;
       
  1217         if( zName==0 ) break;
       
  1218       }
       
  1219     }
       
  1220     pCol->zName = zName;
       
  1221 
       
  1222     /* Get the typename, type affinity, and collating sequence for the
       
  1223     ** column.
       
  1224     */
       
  1225     memset(&sNC, 0, sizeof(sNC));
       
  1226     sNC.pSrcList = pSelect->pSrc;
       
  1227     zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
       
  1228     pCol->zType = zType;
       
  1229     pCol->affinity = sqlite3ExprAffinity(p);
       
  1230     pColl = sqlite3ExprCollSeq(pParse, p);
       
  1231     if( pColl ){
       
  1232       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
       
  1233     }
       
  1234   }
       
  1235   pTab->iPKey = -1;
       
  1236   if( db->mallocFailed ){
       
  1237     sqlite3DeleteTable(pTab);
       
  1238     return 0;
       
  1239   }
       
  1240   return pTab;
       
  1241 }
       
  1242 
       
  1243 /*
       
  1244 ** Prepare a SELECT statement for processing by doing the following
       
  1245 ** things:
       
  1246 **
       
  1247 **    (1)  Make sure VDBE cursor numbers have been assigned to every
       
  1248 **         element of the FROM clause.
       
  1249 **
       
  1250 **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
       
  1251 **         defines FROM clause.  When views appear in the FROM clause,
       
  1252 **         fill pTabList->a[].pSelect with a copy of the SELECT statement
       
  1253 **         that implements the view.  A copy is made of the view's SELECT
       
  1254 **         statement so that we can freely modify or delete that statement
       
  1255 **         without worrying about messing up the presistent representation
       
  1256 **         of the view.
       
  1257 **
       
  1258 **    (3)  Add terms to the WHERE clause to accomodate the NATURAL keyword
       
  1259 **         on joins and the ON and USING clause of joins.
       
  1260 **
       
  1261 **    (4)  Scan the list of columns in the result set (pEList) looking
       
  1262 **         for instances of the "*" operator or the TABLE.* operator.
       
  1263 **         If found, expand each "*" to be every column in every table
       
  1264 **         and TABLE.* to be every column in TABLE.
       
  1265 **
       
  1266 ** Return 0 on success.  If there are problems, leave an error message
       
  1267 ** in pParse and return non-zero.
       
  1268 */
       
  1269 static int prepSelectStmt(Parse *pParse, Select *p){
       
  1270   int i, j, k, rc;
       
  1271   SrcList *pTabList;
       
  1272   ExprList *pEList;
       
  1273   struct SrcList_item *pFrom;
       
  1274   sqlite3 *db = pParse->db;
       
  1275 
       
  1276   if( p==0 || p->pSrc==0 || db->mallocFailed ){
       
  1277     return 1;
       
  1278   }
       
  1279   pTabList = p->pSrc;
       
  1280   pEList = p->pEList;
       
  1281 
       
  1282   /* Make sure cursor numbers have been assigned to all entries in
       
  1283   ** the FROM clause of the SELECT statement.
       
  1284   */
       
  1285   sqlite3SrcListAssignCursors(pParse, p->pSrc);
       
  1286 
       
  1287   /* Look up every table named in the FROM clause of the select.  If
       
  1288   ** an entry of the FROM clause is a subquery instead of a table or view,
       
  1289   ** then create a transient table structure to describe the subquery.
       
  1290   */
       
  1291   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
       
  1292     Table *pTab;
       
  1293     if( pFrom->pTab!=0 ){
       
  1294       /* This statement has already been prepared.  There is no need
       
  1295       ** to go further. */
       
  1296       assert( i==0 );
       
  1297       return 0;
       
  1298     }
       
  1299     if( pFrom->zName==0 ){
       
  1300 #ifndef SQLITE_OMIT_SUBQUERY
       
  1301       /* A sub-query in the FROM clause of a SELECT */
       
  1302       assert( pFrom->pSelect!=0 );
       
  1303       if( pFrom->zAlias==0 ){
       
  1304         pFrom->zAlias =
       
  1305           sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pFrom->pSelect);
       
  1306       }
       
  1307       assert( pFrom->pTab==0 );
       
  1308       pFrom->pTab = pTab = 
       
  1309         sqlite3ResultSetOfSelect(pParse, pFrom->zAlias, pFrom->pSelect);
       
  1310       if( pTab==0 ){
       
  1311         return 1;
       
  1312       }
       
  1313       /* The isEphem flag indicates that the Table structure has been
       
  1314       ** dynamically allocated and may be freed at any time.  In other words,
       
  1315       ** pTab is not pointing to a persistent table structure that defines
       
  1316       ** part of the schema. */
       
  1317       pTab->isEphem = 1;
       
  1318 #endif
       
  1319     }else{
       
  1320       /* An ordinary table or view name in the FROM clause */
       
  1321       assert( pFrom->pTab==0 );
       
  1322       pFrom->pTab = pTab = 
       
  1323         sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase);
       
  1324       if( pTab==0 ){
       
  1325         return 1;
       
  1326       }
       
  1327       pTab->nRef++;
       
  1328 #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
       
  1329       if( pTab->pSelect || IsVirtual(pTab) ){
       
  1330         /* We reach here if the named table is a really a view */
       
  1331         if( sqlite3ViewGetColumnNames(pParse, pTab) ){
       
  1332           return 1;
       
  1333         }
       
  1334         /* If pFrom->pSelect!=0 it means we are dealing with a
       
  1335         ** view within a view.  The SELECT structure has already been
       
  1336         ** copied by the outer view so we can skip the copy step here
       
  1337         ** in the inner view.
       
  1338         */
       
  1339         if( pFrom->pSelect==0 ){
       
  1340           pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect);
       
  1341         }
       
  1342       }
       
  1343 #endif
       
  1344     }
       
  1345   }
       
  1346 
       
  1347   /* Process NATURAL keywords, and ON and USING clauses of joins.
       
  1348   */
       
  1349   if( sqliteProcessJoin(pParse, p) ) return 1;
       
  1350 
       
  1351   /* For every "*" that occurs in the column list, insert the names of
       
  1352   ** all columns in all tables.  And for every TABLE.* insert the names
       
  1353   ** of all columns in TABLE.  The parser inserted a special expression
       
  1354   ** with the TK_ALL operator for each "*" that it found in the column list.
       
  1355   ** The following code just has to locate the TK_ALL expressions and expand
       
  1356   ** each one to the list of all columns in all tables.
       
  1357   **
       
  1358   ** The first loop just checks to see if there are any "*" operators
       
  1359   ** that need expanding.
       
  1360   */
       
  1361   for(k=0; k<pEList->nExpr; k++){
       
  1362     Expr *pE = pEList->a[k].pExpr;
       
  1363     if( pE->op==TK_ALL ) break;
       
  1364     if( pE->op==TK_DOT && pE->pRight && pE->pRight->op==TK_ALL
       
  1365          && pE->pLeft && pE->pLeft->op==TK_ID ) break;
       
  1366   }
       
  1367   rc = 0;
       
  1368   if( k<pEList->nExpr ){
       
  1369     /*
       
  1370     ** If we get here it means the result set contains one or more "*"
       
  1371     ** operators that need to be expanded.  Loop through each expression
       
  1372     ** in the result set and expand them one by one.
       
  1373     */
       
  1374     struct ExprList_item *a = pEList->a;
       
  1375     ExprList *pNew = 0;
       
  1376     int flags = pParse->db->flags;
       
  1377     int longNames = (flags & SQLITE_FullColNames)!=0
       
  1378                       && (flags & SQLITE_ShortColNames)==0;
       
  1379 
       
  1380     for(k=0; k<pEList->nExpr; k++){
       
  1381       Expr *pE = a[k].pExpr;
       
  1382       if( pE->op!=TK_ALL &&
       
  1383            (pE->op!=TK_DOT || pE->pRight==0 || pE->pRight->op!=TK_ALL) ){
       
  1384         /* This particular expression does not need to be expanded.
       
  1385         */
       
  1386         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr, 0);
       
  1387         if( pNew ){
       
  1388           pNew->a[pNew->nExpr-1].zName = a[k].zName;
       
  1389         }else{
       
  1390           rc = 1;
       
  1391         }
       
  1392         a[k].pExpr = 0;
       
  1393         a[k].zName = 0;
       
  1394       }else{
       
  1395         /* This expression is a "*" or a "TABLE.*" and needs to be
       
  1396         ** expanded. */
       
  1397         int tableSeen = 0;      /* Set to 1 when TABLE matches */
       
  1398         char *zTName;            /* text of name of TABLE */
       
  1399         if( pE->op==TK_DOT && pE->pLeft ){
       
  1400           zTName = sqlite3NameFromToken(db, &pE->pLeft->token);
       
  1401         }else{
       
  1402           zTName = 0;
       
  1403         }
       
  1404         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
       
  1405           Table *pTab = pFrom->pTab;
       
  1406           char *zTabName = pFrom->zAlias;
       
  1407           if( zTabName==0 || zTabName[0]==0 ){ 
       
  1408             zTabName = pTab->zName;
       
  1409           }
       
  1410           assert( zTabName );
       
  1411           if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
       
  1412             continue;
       
  1413           }
       
  1414           tableSeen = 1;
       
  1415           for(j=0; j<pTab->nCol; j++){
       
  1416             Expr *pExpr, *pRight;
       
  1417             char *zName = pTab->aCol[j].zName;
       
  1418 
       
  1419             /* If a column is marked as 'hidden' (currently only possible
       
  1420             ** for virtual tables), do not include it in the expanded
       
  1421             ** result-set list.
       
  1422             */
       
  1423             if( IsHiddenColumn(&pTab->aCol[j]) ){
       
  1424               assert(IsVirtual(pTab));
       
  1425               continue;
       
  1426             }
       
  1427 
       
  1428             if( i>0 ){
       
  1429               struct SrcList_item *pLeft = &pTabList->a[i-1];
       
  1430               if( (pLeft[1].jointype & JT_NATURAL)!=0 &&
       
  1431                         columnIndex(pLeft->pTab, zName)>=0 ){
       
  1432                 /* In a NATURAL join, omit the join columns from the 
       
  1433                 ** table on the right */
       
  1434                 continue;
       
  1435               }
       
  1436               if( sqlite3IdListIndex(pLeft[1].pUsing, zName)>=0 ){
       
  1437                 /* In a join with a USING clause, omit columns in the
       
  1438                 ** using clause from the table on the right. */
       
  1439                 continue;
       
  1440               }
       
  1441             }
       
  1442             pRight = sqlite3PExpr(pParse, TK_ID, 0, 0, 0);
       
  1443             if( pRight==0 ) break;
       
  1444             setQuotedToken(pParse, &pRight->token, zName);
       
  1445             if( longNames || pTabList->nSrc>1 ){
       
  1446               Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, 0);
       
  1447               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
       
  1448               if( pExpr==0 ) break;
       
  1449               setQuotedToken(pParse, &pLeft->token, zTabName);
       
  1450 #if 1
       
  1451               setToken(&pExpr->span, 
       
  1452                   sqlite3MPrintf(db, "%s.%s", zTabName, zName));
       
  1453               pExpr->span.dyn = 1;
       
  1454 #else
       
  1455               pExpr->span = pRight->token;
       
  1456               pExpr->span.dyn = 0;
       
  1457 #endif
       
  1458               pExpr->token.z = 0;
       
  1459               pExpr->token.n = 0;
       
  1460               pExpr->token.dyn = 0;
       
  1461             }else{
       
  1462               pExpr = pRight;
       
  1463               pExpr->span = pExpr->token;
       
  1464               pExpr->span.dyn = 0;
       
  1465             }
       
  1466             if( longNames ){
       
  1467               pNew = sqlite3ExprListAppend(pParse, pNew, pExpr, &pExpr->span);
       
  1468             }else{
       
  1469               pNew = sqlite3ExprListAppend(pParse, pNew, pExpr, &pRight->token);
       
  1470             }
       
  1471           }
       
  1472         }
       
  1473         if( !tableSeen ){
       
  1474           if( zTName ){
       
  1475             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
       
  1476           }else{
       
  1477             sqlite3ErrorMsg(pParse, "no tables specified");
       
  1478           }
       
  1479           rc = 1;
       
  1480         }
       
  1481         sqlite3DbFree(db, zTName);
       
  1482       }
       
  1483     }
       
  1484     sqlite3ExprListDelete(db, pEList);
       
  1485     p->pEList = pNew;
       
  1486   }
       
  1487 #if SQLITE_MAX_COLUMN
       
  1488   if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
       
  1489     sqlite3ErrorMsg(pParse, "too many columns in result set");
       
  1490     rc = SQLITE_ERROR;
       
  1491   }
       
  1492 #endif
       
  1493   if( db->mallocFailed ){
       
  1494     rc = SQLITE_NOMEM;
       
  1495   }
       
  1496   return rc;
       
  1497 }
       
  1498 
       
  1499 /*
       
  1500 ** pE is a pointer to an expression which is a single term in
       
  1501 ** ORDER BY or GROUP BY clause.
       
  1502 **
       
  1503 ** At the point this routine is called, we already know that the
       
  1504 ** ORDER BY term is not an integer index into the result set.  That
       
  1505 ** casee is handled by the calling routine.
       
  1506 **
       
  1507 ** If pE is a well-formed expression and the SELECT statement
       
  1508 ** is not compound, then return 0.  This indicates to the
       
  1509 ** caller that it should sort by the value of the ORDER BY
       
  1510 ** expression.
       
  1511 **
       
  1512 ** If the SELECT is compound, then attempt to match pE against
       
  1513 ** result set columns in the left-most SELECT statement.  Return
       
  1514 ** the index i of the matching column, as an indication to the 
       
  1515 ** caller that it should sort by the i-th column.  If there is
       
  1516 ** no match, return -1 and leave an error message in pParse.
       
  1517 */
       
  1518 static int matchOrderByTermToExprList(
       
  1519   Parse *pParse,     /* Parsing context for error messages */
       
  1520   Select *pSelect,   /* The SELECT statement with the ORDER BY clause */
       
  1521   Expr *pE,          /* The specific ORDER BY term */
       
  1522   int idx,           /* When ORDER BY term is this */
       
  1523   int isCompound,    /* True if this is a compound SELECT */
       
  1524   u8 *pHasAgg        /* True if expression contains aggregate functions */
       
  1525 ){
       
  1526   int i;             /* Loop counter */
       
  1527   ExprList *pEList;  /* The columns of the result set */
       
  1528   NameContext nc;    /* Name context for resolving pE */
       
  1529 
       
  1530   assert( sqlite3ExprIsInteger(pE, &i)==0 );
       
  1531   pEList = pSelect->pEList;
       
  1532 
       
  1533   /* If the term is a simple identifier that try to match that identifier
       
  1534   ** against a column name in the result set.
       
  1535   */
       
  1536   if( pE->op==TK_ID || (pE->op==TK_STRING && pE->token.z[0]!='\'') ){
       
  1537     sqlite3 *db = pParse->db;
       
  1538     char *zCol = sqlite3NameFromToken(db, &pE->token);
       
  1539     if( zCol==0 ){
       
  1540       return -1;
       
  1541     }
       
  1542     for(i=0; i<pEList->nExpr; i++){
       
  1543       char *zAs = pEList->a[i].zName;
       
  1544       if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
       
  1545         sqlite3DbFree(db, zCol);
       
  1546         return i+1;
       
  1547       }
       
  1548     }
       
  1549     sqlite3DbFree(db, zCol);
       
  1550   }
       
  1551 
       
  1552   /* Resolve all names in the ORDER BY term expression
       
  1553   */
       
  1554   memset(&nc, 0, sizeof(nc));
       
  1555   nc.pParse = pParse;
       
  1556   nc.pSrcList = pSelect->pSrc;
       
  1557   nc.pEList = pEList;
       
  1558   nc.allowAgg = 1;
       
  1559   nc.nErr = 0;
       
  1560   if( sqlite3ExprResolveNames(&nc, pE) ){
       
  1561     if( isCompound ){
       
  1562       sqlite3ErrorClear(pParse);
       
  1563       return 0;
       
  1564     }else{
       
  1565       return -1;
       
  1566     }
       
  1567   }
       
  1568   if( nc.hasAgg && pHasAgg ){
       
  1569     *pHasAgg = 1;
       
  1570   }
       
  1571 
       
  1572   /* For a compound SELECT, we need to try to match the ORDER BY
       
  1573   ** expression against an expression in the result set
       
  1574   */
       
  1575   if( isCompound ){
       
  1576     for(i=0; i<pEList->nExpr; i++){
       
  1577       if( sqlite3ExprCompare(pEList->a[i].pExpr, pE) ){
       
  1578         return i+1;
       
  1579       }
       
  1580     }
       
  1581   }
       
  1582   return 0;
       
  1583 }
       
  1584 
       
  1585 
       
  1586 /*
       
  1587 ** Analyze and ORDER BY or GROUP BY clause in a simple SELECT statement.
       
  1588 ** Return the number of errors seen.
       
  1589 **
       
  1590 ** Every term of the ORDER BY or GROUP BY clause needs to be an
       
  1591 ** expression.  If any expression is an integer constant, then
       
  1592 ** that expression is replaced by the corresponding 
       
  1593 ** expression from the result set.
       
  1594 */
       
  1595 static int processOrderGroupBy(
       
  1596   Parse *pParse,        /* Parsing context.  Leave error messages here */
       
  1597   Select *pSelect,      /* The SELECT statement containing the clause */
       
  1598   ExprList *pOrderBy,   /* The ORDER BY or GROUP BY clause to be processed */
       
  1599   int isOrder,          /* 1 for ORDER BY.  0 for GROUP BY */
       
  1600   u8 *pHasAgg           /* Set to TRUE if any term contains an aggregate */
       
  1601 ){
       
  1602   int i;
       
  1603   sqlite3 *db = pParse->db;
       
  1604   ExprList *pEList;
       
  1605 
       
  1606   if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
       
  1607 #if SQLITE_MAX_COLUMN
       
  1608   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
       
  1609     const char *zType = isOrder ? "ORDER" : "GROUP";
       
  1610     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
       
  1611     return 1;
       
  1612   }
       
  1613 #endif
       
  1614   pEList = pSelect->pEList;
       
  1615   if( pEList==0 ){
       
  1616     return 0;
       
  1617   }
       
  1618   for(i=0; i<pOrderBy->nExpr; i++){
       
  1619     int iCol;
       
  1620     Expr *pE = pOrderBy->a[i].pExpr;
       
  1621     if( sqlite3ExprIsInteger(pE, &iCol) ){
       
  1622       if( iCol<=0 || iCol>pEList->nExpr ){
       
  1623         const char *zType = isOrder ? "ORDER" : "GROUP";
       
  1624         sqlite3ErrorMsg(pParse, 
       
  1625            "%r %s BY term out of range - should be "
       
  1626            "between 1 and %d", i+1, zType, pEList->nExpr);
       
  1627         return 1;
       
  1628       }
       
  1629     }else{
       
  1630       iCol = matchOrderByTermToExprList(pParse, pSelect, pE, i+1, 0, pHasAgg);
       
  1631       if( iCol<0 ){
       
  1632         return 1;
       
  1633       }
       
  1634     }
       
  1635     if( iCol>0 ){
       
  1636       CollSeq *pColl = pE->pColl;
       
  1637       int flags = pE->flags & EP_ExpCollate;
       
  1638       sqlite3ExprDelete(db, pE);
       
  1639       pE = sqlite3ExprDup(db, pEList->a[iCol-1].pExpr);
       
  1640       pOrderBy->a[i].pExpr = pE;
       
  1641       if( pE && pColl && flags ){
       
  1642         pE->pColl = pColl;
       
  1643         pE->flags |= flags;
       
  1644       }
       
  1645     }
       
  1646   }
       
  1647   return 0;
       
  1648 }
       
  1649 
       
  1650 /*
       
  1651 ** Analyze and ORDER BY or GROUP BY clause in a SELECT statement.  Return
       
  1652 ** the number of errors seen.
       
  1653 **
       
  1654 ** If iTable>0 then make the N-th term of the ORDER BY clause refer to
       
  1655 ** the N-th column of table iTable.
       
  1656 **
       
  1657 ** If iTable==0 then transform each term of the ORDER BY clause to refer
       
  1658 ** to a column of the result set by number.
       
  1659 */
       
  1660 static int processCompoundOrderBy(
       
  1661   Parse *pParse,        /* Parsing context.  Leave error messages here */
       
  1662   Select *pSelect       /* The SELECT statement containing the ORDER BY */
       
  1663 ){
       
  1664   int i;
       
  1665   ExprList *pOrderBy;
       
  1666   ExprList *pEList;
       
  1667   sqlite3 *db;
       
  1668   int moreToDo = 1;
       
  1669 
       
  1670   pOrderBy = pSelect->pOrderBy;
       
  1671   if( pOrderBy==0 ) return 0;
       
  1672   db = pParse->db;
       
  1673 #if SQLITE_MAX_COLUMN
       
  1674   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
       
  1675     sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
       
  1676     return 1;
       
  1677   }
       
  1678 #endif
       
  1679   for(i=0; i<pOrderBy->nExpr; i++){
       
  1680     pOrderBy->a[i].done = 0;
       
  1681   }
       
  1682   while( pSelect->pPrior ){
       
  1683     pSelect = pSelect->pPrior;
       
  1684   }
       
  1685   while( pSelect && moreToDo ){
       
  1686     moreToDo = 0;
       
  1687     pEList = pSelect->pEList;
       
  1688     if( pEList==0 ){
       
  1689       return 1;
       
  1690     }
       
  1691     for(i=0; i<pOrderBy->nExpr; i++){
       
  1692       int iCol = -1;
       
  1693       Expr *pE, *pDup;
       
  1694       if( pOrderBy->a[i].done ) continue;
       
  1695       pE = pOrderBy->a[i].pExpr;
       
  1696       if( sqlite3ExprIsInteger(pE, &iCol) ){
       
  1697         if( iCol<0 || iCol>pEList->nExpr ){
       
  1698           sqlite3ErrorMsg(pParse, 
       
  1699              "%r ORDER BY term out of range - should be "
       
  1700              "between 1 and %d", i+1, pEList->nExpr);
       
  1701           return 1;
       
  1702         }
       
  1703       }else{
       
  1704         pDup = sqlite3ExprDup(db, pE);
       
  1705         if( !db->mallocFailed ){
       
  1706           assert(pDup);
       
  1707           iCol = matchOrderByTermToExprList(pParse, pSelect, pDup, i+1, 1, 0);
       
  1708         }
       
  1709         sqlite3ExprDelete(db, pDup);
       
  1710         if( iCol<0 ){
       
  1711           return 1;
       
  1712         }
       
  1713       }
       
  1714       if( iCol>0 ){
       
  1715         pE->op = TK_INTEGER;
       
  1716         pE->flags |= EP_IntValue;
       
  1717         pE->iTable = iCol;
       
  1718         pOrderBy->a[i].done = 1;
       
  1719       }else{
       
  1720         moreToDo = 1;
       
  1721       }
       
  1722     }
       
  1723     pSelect = pSelect->pNext;
       
  1724   }
       
  1725   for(i=0; i<pOrderBy->nExpr; i++){
       
  1726     if( pOrderBy->a[i].done==0 ){
       
  1727       sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any "
       
  1728             "column in the result set", i+1);
       
  1729       return 1;
       
  1730     }
       
  1731   }
       
  1732   return 0;
       
  1733 }
       
  1734 
       
  1735 /*
       
  1736 ** Get a VDBE for the given parser context.  Create a new one if necessary.
       
  1737 ** If an error occurs, return NULL and leave a message in pParse.
       
  1738 */
       
  1739 Vdbe *sqlite3GetVdbe(Parse *pParse){
       
  1740   Vdbe *v = pParse->pVdbe;
       
  1741   if( v==0 ){
       
  1742     v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
       
  1743 #ifndef SQLITE_OMIT_TRACE
       
  1744     if( v ){
       
  1745       sqlite3VdbeAddOp0(v, OP_Trace);
       
  1746     }
       
  1747 #endif
       
  1748   }
       
  1749   return v;
       
  1750 }
       
  1751 
       
  1752 
       
  1753 /*
       
  1754 ** Compute the iLimit and iOffset fields of the SELECT based on the
       
  1755 ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
       
  1756 ** that appear in the original SQL statement after the LIMIT and OFFSET
       
  1757 ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
       
  1758 ** are the integer memory register numbers for counters used to compute 
       
  1759 ** the limit and offset.  If there is no limit and/or offset, then 
       
  1760 ** iLimit and iOffset are negative.
       
  1761 **
       
  1762 ** This routine changes the values of iLimit and iOffset only if
       
  1763 ** a limit or offset is defined by pLimit and pOffset.  iLimit and
       
  1764 ** iOffset should have been preset to appropriate default values
       
  1765 ** (usually but not always -1) prior to calling this routine.
       
  1766 ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
       
  1767 ** redefined.  The UNION ALL operator uses this property to force
       
  1768 ** the reuse of the same limit and offset registers across multiple
       
  1769 ** SELECT statements.
       
  1770 */
       
  1771 static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
       
  1772   Vdbe *v = 0;
       
  1773   int iLimit = 0;
       
  1774   int iOffset;
       
  1775   int addr1;
       
  1776   if( p->iLimit ) return;
       
  1777 
       
  1778   /* 
       
  1779   ** "LIMIT -1" always shows all rows.  There is some
       
  1780   ** contraversy about what the correct behavior should be.
       
  1781   ** The current implementation interprets "LIMIT 0" to mean
       
  1782   ** no rows.
       
  1783   */
       
  1784   if( p->pLimit ){
       
  1785     p->iLimit = iLimit = ++pParse->nMem;
       
  1786     v = sqlite3GetVdbe(pParse);
       
  1787     if( v==0 ) return;
       
  1788     sqlite3ExprCode(pParse, p->pLimit, iLimit);
       
  1789     sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit);
       
  1790     VdbeComment((v, "LIMIT counter"));
       
  1791     sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak);
       
  1792   }
       
  1793   if( p->pOffset ){
       
  1794     p->iOffset = iOffset = ++pParse->nMem;
       
  1795     if( p->pLimit ){
       
  1796       pParse->nMem++;   /* Allocate an extra register for limit+offset */
       
  1797     }
       
  1798     v = sqlite3GetVdbe(pParse);
       
  1799     if( v==0 ) return;
       
  1800     sqlite3ExprCode(pParse, p->pOffset, iOffset);
       
  1801     sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset);
       
  1802     VdbeComment((v, "OFFSET counter"));
       
  1803     addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset);
       
  1804     sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset);
       
  1805     sqlite3VdbeJumpHere(v, addr1);
       
  1806     if( p->pLimit ){
       
  1807       sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1);
       
  1808       VdbeComment((v, "LIMIT+OFFSET"));
       
  1809       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit);
       
  1810       sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1);
       
  1811       sqlite3VdbeJumpHere(v, addr1);
       
  1812     }
       
  1813   }
       
  1814 }
       
  1815 
       
  1816 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
  1817 /*
       
  1818 ** Return the appropriate collating sequence for the iCol-th column of
       
  1819 ** the result set for the compound-select statement "p".  Return NULL if
       
  1820 ** the column has no default collating sequence.
       
  1821 **
       
  1822 ** The collating sequence for the compound select is taken from the
       
  1823 ** left-most term of the select that has a collating sequence.
       
  1824 */
       
  1825 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
       
  1826   CollSeq *pRet;
       
  1827   if( p->pPrior ){
       
  1828     pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
       
  1829   }else{
       
  1830     pRet = 0;
       
  1831   }
       
  1832   if( pRet==0 ){
       
  1833     pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
       
  1834   }
       
  1835   return pRet;
       
  1836 }
       
  1837 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
       
  1838 
       
  1839 /* Forward reference */
       
  1840 static int multiSelectOrderBy(
       
  1841   Parse *pParse,        /* Parsing context */
       
  1842   Select *p,            /* The right-most of SELECTs to be coded */
       
  1843   SelectDest *pDest     /* What to do with query results */
       
  1844 );
       
  1845 
       
  1846 
       
  1847 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
  1848 /*
       
  1849 ** This routine is called to process a compound query form from
       
  1850 ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
       
  1851 ** INTERSECT
       
  1852 **
       
  1853 ** "p" points to the right-most of the two queries.  the query on the
       
  1854 ** left is p->pPrior.  The left query could also be a compound query
       
  1855 ** in which case this routine will be called recursively. 
       
  1856 **
       
  1857 ** The results of the total query are to be written into a destination
       
  1858 ** of type eDest with parameter iParm.
       
  1859 **
       
  1860 ** Example 1:  Consider a three-way compound SQL statement.
       
  1861 **
       
  1862 **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
       
  1863 **
       
  1864 ** This statement is parsed up as follows:
       
  1865 **
       
  1866 **     SELECT c FROM t3
       
  1867 **      |
       
  1868 **      `----->  SELECT b FROM t2
       
  1869 **                |
       
  1870 **                `------>  SELECT a FROM t1
       
  1871 **
       
  1872 ** The arrows in the diagram above represent the Select.pPrior pointer.
       
  1873 ** So if this routine is called with p equal to the t3 query, then
       
  1874 ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
       
  1875 **
       
  1876 ** Notice that because of the way SQLite parses compound SELECTs, the
       
  1877 ** individual selects always group from left to right.
       
  1878 */
       
  1879 static int multiSelect(
       
  1880   Parse *pParse,        /* Parsing context */
       
  1881   Select *p,            /* The right-most of SELECTs to be coded */
       
  1882   SelectDest *pDest     /* What to do with query results */
       
  1883 ){
       
  1884   int rc = SQLITE_OK;   /* Success code from a subroutine */
       
  1885   Select *pPrior;       /* Another SELECT immediately to our left */
       
  1886   Vdbe *v;              /* Generate code to this VDBE */
       
  1887   SelectDest dest;      /* Alternative data destination */
       
  1888   Select *pDelete = 0;  /* Chain of simple selects to delete */
       
  1889   sqlite3 *db;          /* Database connection */
       
  1890 
       
  1891   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
       
  1892   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
       
  1893   */
       
  1894   assert( p && p->pPrior );  /* Calling function guarantees this much */
       
  1895   db = pParse->db;
       
  1896   pPrior = p->pPrior;
       
  1897   assert( pPrior->pRightmost!=pPrior );
       
  1898   assert( pPrior->pRightmost==p->pRightmost );
       
  1899   if( pPrior->pOrderBy ){
       
  1900     sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
       
  1901       selectOpName(p->op));
       
  1902     rc = 1;
       
  1903     goto multi_select_end;
       
  1904   }
       
  1905   if( pPrior->pLimit ){
       
  1906     sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
       
  1907       selectOpName(p->op));
       
  1908     rc = 1;
       
  1909     goto multi_select_end;
       
  1910   }
       
  1911 
       
  1912   v = sqlite3GetVdbe(pParse);
       
  1913   assert( v!=0 );  /* The VDBE already created by calling function */
       
  1914 
       
  1915   /* Create the destination temporary table if necessary
       
  1916   */
       
  1917   dest = *pDest;
       
  1918   if( dest.eDest==SRT_EphemTab ){
       
  1919     assert( p->pEList );
       
  1920     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
       
  1921     dest.eDest = SRT_Table;
       
  1922   }
       
  1923 
       
  1924   /* Make sure all SELECTs in the statement have the same number of elements
       
  1925   ** in their result sets.
       
  1926   */
       
  1927   assert( p->pEList && pPrior->pEList );
       
  1928   if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
       
  1929     sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
       
  1930       " do not have the same number of result columns", selectOpName(p->op));
       
  1931     rc = 1;
       
  1932     goto multi_select_end;
       
  1933   }
       
  1934 
       
  1935   /* Compound SELECTs that have an ORDER BY clause are handled separately.
       
  1936   */
       
  1937   if( p->pOrderBy ){
       
  1938     return multiSelectOrderBy(pParse, p, pDest);
       
  1939   }
       
  1940 
       
  1941   /* Generate code for the left and right SELECT statements.
       
  1942   */
       
  1943   switch( p->op ){
       
  1944     case TK_ALL: {
       
  1945       int addr = 0;
       
  1946       assert( !pPrior->pLimit );
       
  1947       pPrior->pLimit = p->pLimit;
       
  1948       pPrior->pOffset = p->pOffset;
       
  1949       rc = sqlite3Select(pParse, pPrior, &dest, 0, 0, 0);
       
  1950       p->pLimit = 0;
       
  1951       p->pOffset = 0;
       
  1952       if( rc ){
       
  1953         goto multi_select_end;
       
  1954       }
       
  1955       p->pPrior = 0;
       
  1956       p->iLimit = pPrior->iLimit;
       
  1957       p->iOffset = pPrior->iOffset;
       
  1958       if( p->iLimit ){
       
  1959         addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
       
  1960         VdbeComment((v, "Jump ahead if LIMIT reached"));
       
  1961       }
       
  1962       rc = sqlite3Select(pParse, p, &dest, 0, 0, 0);
       
  1963       pDelete = p->pPrior;
       
  1964       p->pPrior = pPrior;
       
  1965       if( rc ){
       
  1966         goto multi_select_end;
       
  1967       }
       
  1968       if( addr ){
       
  1969         sqlite3VdbeJumpHere(v, addr);
       
  1970       }
       
  1971       break;
       
  1972     }
       
  1973     case TK_EXCEPT:
       
  1974     case TK_UNION: {
       
  1975       int unionTab;    /* Cursor number of the temporary table holding result */
       
  1976       int op = 0;      /* One of the SRT_ operations to apply to self */
       
  1977       int priorOp;     /* The SRT_ operation to apply to prior selects */
       
  1978       Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
       
  1979       int addr;
       
  1980       SelectDest uniondest;
       
  1981 
       
  1982       priorOp = SRT_Union;
       
  1983       if( dest.eDest==priorOp && !p->pLimit && !p->pOffset ){
       
  1984         /* We can reuse a temporary table generated by a SELECT to our
       
  1985         ** right.
       
  1986         */
       
  1987         unionTab = dest.iParm;
       
  1988       }else{
       
  1989         /* We will need to create our own temporary table to hold the
       
  1990         ** intermediate results.
       
  1991         */
       
  1992         unionTab = pParse->nTab++;
       
  1993         assert( p->pOrderBy==0 );
       
  1994         addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
       
  1995         assert( p->addrOpenEphm[0] == -1 );
       
  1996         p->addrOpenEphm[0] = addr;
       
  1997         p->pRightmost->usesEphm = 1;
       
  1998         assert( p->pEList );
       
  1999       }
       
  2000 
       
  2001       /* Code the SELECT statements to our left
       
  2002       */
       
  2003       assert( !pPrior->pOrderBy );
       
  2004       sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
       
  2005       rc = sqlite3Select(pParse, pPrior, &uniondest, 0, 0, 0);
       
  2006       if( rc ){
       
  2007         goto multi_select_end;
       
  2008       }
       
  2009 
       
  2010       /* Code the current SELECT statement
       
  2011       */
       
  2012       if( p->op==TK_EXCEPT ){
       
  2013         op = SRT_Except;
       
  2014       }else{
       
  2015         assert( p->op==TK_UNION );
       
  2016         op = SRT_Union;
       
  2017       }
       
  2018       p->pPrior = 0;
       
  2019       p->disallowOrderBy = 0;
       
  2020       pLimit = p->pLimit;
       
  2021       p->pLimit = 0;
       
  2022       pOffset = p->pOffset;
       
  2023       p->pOffset = 0;
       
  2024       uniondest.eDest = op;
       
  2025       rc = sqlite3Select(pParse, p, &uniondest, 0, 0, 0);
       
  2026       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
       
  2027       ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
       
  2028       sqlite3ExprListDelete(db, p->pOrderBy);
       
  2029       pDelete = p->pPrior;
       
  2030       p->pPrior = pPrior;
       
  2031       p->pOrderBy = 0;
       
  2032       sqlite3ExprDelete(db, p->pLimit);
       
  2033       p->pLimit = pLimit;
       
  2034       p->pOffset = pOffset;
       
  2035       p->iLimit = 0;
       
  2036       p->iOffset = 0;
       
  2037       if( rc ){
       
  2038         goto multi_select_end;
       
  2039       }
       
  2040 
       
  2041 
       
  2042       /* Convert the data in the temporary table into whatever form
       
  2043       ** it is that we currently need.
       
  2044       */      
       
  2045       if( dest.eDest!=priorOp || unionTab!=dest.iParm ){
       
  2046         int iCont, iBreak, iStart;
       
  2047         assert( p->pEList );
       
  2048         if( dest.eDest==SRT_Callback ){
       
  2049           Select *pFirst = p;
       
  2050           while( pFirst->pPrior ) pFirst = pFirst->pPrior;
       
  2051           generateColumnNames(pParse, 0, pFirst->pEList);
       
  2052         }
       
  2053         iBreak = sqlite3VdbeMakeLabel(v);
       
  2054         iCont = sqlite3VdbeMakeLabel(v);
       
  2055         computeLimitRegisters(pParse, p, iBreak);
       
  2056         sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
       
  2057         iStart = sqlite3VdbeCurrentAddr(v);
       
  2058         selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
       
  2059                         0, -1, &dest, iCont, iBreak);
       
  2060         sqlite3VdbeResolveLabel(v, iCont);
       
  2061         sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
       
  2062         sqlite3VdbeResolveLabel(v, iBreak);
       
  2063         sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
       
  2064       }
       
  2065       break;
       
  2066     }
       
  2067     case TK_INTERSECT: {
       
  2068       int tab1, tab2;
       
  2069       int iCont, iBreak, iStart;
       
  2070       Expr *pLimit, *pOffset;
       
  2071       int addr;
       
  2072       SelectDest intersectdest;
       
  2073       int r1;
       
  2074 
       
  2075       /* INTERSECT is different from the others since it requires
       
  2076       ** two temporary tables.  Hence it has its own case.  Begin
       
  2077       ** by allocating the tables we will need.
       
  2078       */
       
  2079       tab1 = pParse->nTab++;
       
  2080       tab2 = pParse->nTab++;
       
  2081       assert( p->pOrderBy==0 );
       
  2082 
       
  2083       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
       
  2084       assert( p->addrOpenEphm[0] == -1 );
       
  2085       p->addrOpenEphm[0] = addr;
       
  2086       p->pRightmost->usesEphm = 1;
       
  2087       assert( p->pEList );
       
  2088 
       
  2089       /* Code the SELECTs to our left into temporary table "tab1".
       
  2090       */
       
  2091       sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
       
  2092       rc = sqlite3Select(pParse, pPrior, &intersectdest, 0, 0, 0);
       
  2093       if( rc ){
       
  2094         goto multi_select_end;
       
  2095       }
       
  2096 
       
  2097       /* Code the current SELECT into temporary table "tab2"
       
  2098       */
       
  2099       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
       
  2100       assert( p->addrOpenEphm[1] == -1 );
       
  2101       p->addrOpenEphm[1] = addr;
       
  2102       p->pPrior = 0;
       
  2103       pLimit = p->pLimit;
       
  2104       p->pLimit = 0;
       
  2105       pOffset = p->pOffset;
       
  2106       p->pOffset = 0;
       
  2107       intersectdest.iParm = tab2;
       
  2108       rc = sqlite3Select(pParse, p, &intersectdest, 0, 0, 0);
       
  2109       pDelete = p->pPrior;
       
  2110       p->pPrior = pPrior;
       
  2111       sqlite3ExprDelete(db, p->pLimit);
       
  2112       p->pLimit = pLimit;
       
  2113       p->pOffset = pOffset;
       
  2114       if( rc ){
       
  2115         goto multi_select_end;
       
  2116       }
       
  2117 
       
  2118       /* Generate code to take the intersection of the two temporary
       
  2119       ** tables.
       
  2120       */
       
  2121       assert( p->pEList );
       
  2122       if( dest.eDest==SRT_Callback ){
       
  2123         Select *pFirst = p;
       
  2124         while( pFirst->pPrior ) pFirst = pFirst->pPrior;
       
  2125         generateColumnNames(pParse, 0, pFirst->pEList);
       
  2126       }
       
  2127       iBreak = sqlite3VdbeMakeLabel(v);
       
  2128       iCont = sqlite3VdbeMakeLabel(v);
       
  2129       computeLimitRegisters(pParse, p, iBreak);
       
  2130       sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
       
  2131       r1 = sqlite3GetTempReg(pParse);
       
  2132       iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
       
  2133       sqlite3VdbeAddOp3(v, OP_NotFound, tab2, iCont, r1);
       
  2134       sqlite3ReleaseTempReg(pParse, r1);
       
  2135       selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
       
  2136                       0, -1, &dest, iCont, iBreak);
       
  2137       sqlite3VdbeResolveLabel(v, iCont);
       
  2138       sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
       
  2139       sqlite3VdbeResolveLabel(v, iBreak);
       
  2140       sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
       
  2141       sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
       
  2142       break;
       
  2143     }
       
  2144   }
       
  2145 
       
  2146   /* Compute collating sequences used by 
       
  2147   ** temporary tables needed to implement the compound select.
       
  2148   ** Attach the KeyInfo structure to all temporary tables.
       
  2149   **
       
  2150   ** This section is run by the right-most SELECT statement only.
       
  2151   ** SELECT statements to the left always skip this part.  The right-most
       
  2152   ** SELECT might also skip this part if it has no ORDER BY clause and
       
  2153   ** no temp tables are required.
       
  2154   */
       
  2155   if( p->usesEphm ){
       
  2156     int i;                        /* Loop counter */
       
  2157     KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
       
  2158     Select *pLoop;                /* For looping through SELECT statements */
       
  2159     CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
       
  2160     int nCol;                     /* Number of columns in result set */
       
  2161 
       
  2162     assert( p->pRightmost==p );
       
  2163     nCol = p->pEList->nExpr;
       
  2164     pKeyInfo = sqlite3DbMallocZero(db,
       
  2165                        sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1));
       
  2166     if( !pKeyInfo ){
       
  2167       rc = SQLITE_NOMEM;
       
  2168       goto multi_select_end;
       
  2169     }
       
  2170 
       
  2171     pKeyInfo->enc = ENC(db);
       
  2172     pKeyInfo->nField = nCol;
       
  2173 
       
  2174     for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
       
  2175       *apColl = multiSelectCollSeq(pParse, p, i);
       
  2176       if( 0==*apColl ){
       
  2177         *apColl = db->pDfltColl;
       
  2178       }
       
  2179     }
       
  2180 
       
  2181     for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
       
  2182       for(i=0; i<2; i++){
       
  2183         int addr = pLoop->addrOpenEphm[i];
       
  2184         if( addr<0 ){
       
  2185           /* If [0] is unused then [1] is also unused.  So we can
       
  2186           ** always safely abort as soon as the first unused slot is found */
       
  2187           assert( pLoop->addrOpenEphm[1]<0 );
       
  2188           break;
       
  2189         }
       
  2190         sqlite3VdbeChangeP2(v, addr, nCol);
       
  2191         sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO);
       
  2192         pLoop->addrOpenEphm[i] = -1;
       
  2193       }
       
  2194     }
       
  2195     sqlite3DbFree(db, pKeyInfo);
       
  2196   }
       
  2197 
       
  2198 multi_select_end:
       
  2199   pDest->iMem = dest.iMem;
       
  2200   pDest->nMem = dest.nMem;
       
  2201   sqlite3SelectDelete(db, pDelete);
       
  2202   return rc;
       
  2203 }
       
  2204 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
       
  2205 
       
  2206 /*
       
  2207 ** Code an output subroutine for a coroutine implementation of a
       
  2208 ** SELECT statment.
       
  2209 **
       
  2210 ** The data to be output is contained in pIn->iMem.  There are
       
  2211 ** pIn->nMem columns to be output.  pDest is where the output should
       
  2212 ** be sent.
       
  2213 **
       
  2214 ** regReturn is the number of the register holding the subroutine
       
  2215 ** return address.
       
  2216 **
       
  2217 ** If regPrev>0 then it is a the first register in a vector that
       
  2218 ** records the previous output.  mem[regPrev] is a flag that is false
       
  2219 ** if there has been no previous output.  If regPrev>0 then code is
       
  2220 ** generated to suppress duplicates.  pKeyInfo is used for comparing
       
  2221 ** keys.
       
  2222 **
       
  2223 ** If the LIMIT found in p->iLimit is reached, jump immediately to
       
  2224 ** iBreak.
       
  2225 */
       
  2226 static int generateOutputSubroutine(
       
  2227   Parse *pParse,          /* Parsing context */
       
  2228   Select *p,              /* The SELECT statement */
       
  2229   SelectDest *pIn,        /* Coroutine supplying data */
       
  2230   SelectDest *pDest,      /* Where to send the data */
       
  2231   int regReturn,          /* The return address register */
       
  2232   int regPrev,            /* Previous result register.  No uniqueness if 0 */
       
  2233   KeyInfo *pKeyInfo,      /* For comparing with previous entry */
       
  2234   int p4type,             /* The p4 type for pKeyInfo */
       
  2235   int iBreak              /* Jump here if we hit the LIMIT */
       
  2236 ){
       
  2237   Vdbe *v = pParse->pVdbe;
       
  2238   int iContinue;
       
  2239   int addr;
       
  2240 
       
  2241   addr = sqlite3VdbeCurrentAddr(v);
       
  2242   iContinue = sqlite3VdbeMakeLabel(v);
       
  2243 
       
  2244   /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 
       
  2245   */
       
  2246   if( regPrev ){
       
  2247     int j1, j2;
       
  2248     j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev);
       
  2249     j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem,
       
  2250                               (char*)pKeyInfo, p4type);
       
  2251     sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2);
       
  2252     sqlite3VdbeJumpHere(v, j1);
       
  2253     sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem);
       
  2254     sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
       
  2255   }
       
  2256   if( pParse->db->mallocFailed ) return 0;
       
  2257 
       
  2258   /* Suppress the the first OFFSET entries if there is an OFFSET clause
       
  2259   */
       
  2260   codeOffset(v, p, iContinue);
       
  2261 
       
  2262   switch( pDest->eDest ){
       
  2263     /* Store the result as data using a unique key.
       
  2264     */
       
  2265     case SRT_Table:
       
  2266     case SRT_EphemTab: {
       
  2267       int r1 = sqlite3GetTempReg(pParse);
       
  2268       int r2 = sqlite3GetTempReg(pParse);
       
  2269       sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1);
       
  2270       sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2);
       
  2271       sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2);
       
  2272       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
       
  2273       sqlite3ReleaseTempReg(pParse, r2);
       
  2274       sqlite3ReleaseTempReg(pParse, r1);
       
  2275       break;
       
  2276     }
       
  2277 
       
  2278 #ifndef SQLITE_OMIT_SUBQUERY
       
  2279     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
       
  2280     ** then there should be a single item on the stack.  Write this
       
  2281     ** item into the set table with bogus data.
       
  2282     */
       
  2283     case SRT_Set: {
       
  2284       int r1;
       
  2285       assert( pIn->nMem==1 );
       
  2286       p->affinity = 
       
  2287          sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity);
       
  2288       r1 = sqlite3GetTempReg(pParse);
       
  2289       sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1);
       
  2290       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1);
       
  2291       sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1);
       
  2292       sqlite3ReleaseTempReg(pParse, r1);
       
  2293       break;
       
  2294     }
       
  2295 
       
  2296 #if 0  /* Never occurs on an ORDER BY query */
       
  2297     /* If any row exist in the result set, record that fact and abort.
       
  2298     */
       
  2299     case SRT_Exists: {
       
  2300       sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm);
       
  2301       /* The LIMIT clause will terminate the loop for us */
       
  2302       break;
       
  2303     }
       
  2304 #endif
       
  2305 
       
  2306     /* If this is a scalar select that is part of an expression, then
       
  2307     ** store the results in the appropriate memory cell and break out
       
  2308     ** of the scan loop.
       
  2309     */
       
  2310     case SRT_Mem: {
       
  2311       assert( pIn->nMem==1 );
       
  2312       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1);
       
  2313       /* The LIMIT clause will jump out of the loop for us */
       
  2314       break;
       
  2315     }
       
  2316 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
       
  2317 
       
  2318     /* Send the data to the callback function or to a subroutine.  In the
       
  2319     ** case of a subroutine, the subroutine itself is responsible for
       
  2320     ** popping the data from the stack.
       
  2321     */
       
  2322     case SRT_Coroutine: {
       
  2323       if( pDest->iMem==0 ){
       
  2324         pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem);
       
  2325         pDest->nMem = pIn->nMem;
       
  2326       }
       
  2327       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem);
       
  2328       sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
       
  2329       break;
       
  2330     }
       
  2331 
       
  2332     case SRT_Callback: {
       
  2333       sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem);
       
  2334       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem);
       
  2335       break;
       
  2336     }
       
  2337 
       
  2338 #if !defined(SQLITE_OMIT_TRIGGER)
       
  2339     /* Discard the results.  This is used for SELECT statements inside
       
  2340     ** the body of a TRIGGER.  The purpose of such selects is to call
       
  2341     ** user-defined functions that have side effects.  We do not care
       
  2342     ** about the actual results of the select.
       
  2343     */
       
  2344     default: {
       
  2345       break;
       
  2346     }
       
  2347 #endif
       
  2348   }
       
  2349 
       
  2350   /* Jump to the end of the loop if the LIMIT is reached.
       
  2351   */
       
  2352   if( p->iLimit ){
       
  2353     sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1);
       
  2354     sqlite3VdbeAddOp2(v, OP_IfZero, p->iLimit, iBreak);
       
  2355   }
       
  2356 
       
  2357   /* Generate the subroutine return
       
  2358   */
       
  2359   sqlite3VdbeResolveLabel(v, iContinue);
       
  2360   sqlite3VdbeAddOp1(v, OP_Return, regReturn);
       
  2361 
       
  2362   return addr;
       
  2363 }
       
  2364 
       
  2365 /*
       
  2366 ** Alternative compound select code generator for cases when there
       
  2367 ** is an ORDER BY clause.
       
  2368 **
       
  2369 ** We assume a query of the following form:
       
  2370 **
       
  2371 **      <selectA>  <operator>  <selectB>  ORDER BY <orderbylist>
       
  2372 **
       
  2373 ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT.  The idea
       
  2374 ** is to code both <selectA> and <selectB> with the ORDER BY clause as
       
  2375 ** co-routines.  Then run the co-routines in parallel and merge the results
       
  2376 ** into the output.  In addition to the two coroutines (called selectA and
       
  2377 ** selectB) there are 7 subroutines:
       
  2378 **
       
  2379 **    outA:    Move the output of the selectA coroutine into the output
       
  2380 **             of the compound query.
       
  2381 **
       
  2382 **    outB:    Move the output of the selectB coroutine into the output
       
  2383 **             of the compound query.  (Only generated for UNION and
       
  2384 **             UNION ALL.  EXCEPT and INSERTSECT never output a row that
       
  2385 **             appears only in B.)
       
  2386 **
       
  2387 **    AltB:    Called when there is data from both coroutines and A<B.
       
  2388 **
       
  2389 **    AeqB:    Called when there is data from both coroutines and A==B.
       
  2390 **
       
  2391 **    AgtB:    Called when there is data from both coroutines and A>B.
       
  2392 **
       
  2393 **    EofA:    Called when data is exhausted from selectA.
       
  2394 **
       
  2395 **    EofB:    Called when data is exhausted from selectB.
       
  2396 **
       
  2397 ** The implementation of the latter five subroutines depend on which 
       
  2398 ** <operator> is used:
       
  2399 **
       
  2400 **
       
  2401 **             UNION ALL         UNION            EXCEPT          INTERSECT
       
  2402 **          -------------  -----------------  --------------  -----------------
       
  2403 **   AltB:   outA, nextA      outA, nextA       outA, nextA         nextA
       
  2404 **
       
  2405 **   AeqB:   outA, nextA         nextA             nextA         outA, nextA
       
  2406 **
       
  2407 **   AgtB:   outB, nextB      outB, nextB          nextB            nextB
       
  2408 **
       
  2409 **   EofA:   outB, nextB      outB, nextB          halt             halt
       
  2410 **
       
  2411 **   EofB:   outA, nextA      outA, nextA       outA, nextA         halt
       
  2412 **
       
  2413 ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
       
  2414 ** causes an immediate jump to EofA and an EOF on B following nextB causes
       
  2415 ** an immediate jump to EofB.  Within EofA and EofB, and EOF on entry or
       
  2416 ** following nextX causes a jump to the end of the select processing.
       
  2417 **
       
  2418 ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
       
  2419 ** within the output subroutine.  The regPrev register set holds the previously
       
  2420 ** output value.  A comparison is made against this value and the output
       
  2421 ** is skipped if the next results would be the same as the previous.
       
  2422 **
       
  2423 ** The implementation plan is to implement the two coroutines and seven
       
  2424 ** subroutines first, then put the control logic at the bottom.  Like this:
       
  2425 **
       
  2426 **          goto Init
       
  2427 **     coA: coroutine for left query (A)
       
  2428 **     coB: coroutine for right query (B)
       
  2429 **    outA: output one row of A
       
  2430 **    outB: output one row of B (UNION and UNION ALL only)
       
  2431 **    EofA: ...
       
  2432 **    EofB: ...
       
  2433 **    AltB: ...
       
  2434 **    AeqB: ...
       
  2435 **    AgtB: ...
       
  2436 **    Init: initialize coroutine registers
       
  2437 **          yield coA
       
  2438 **          if eof(A) goto EofA
       
  2439 **          yield coB
       
  2440 **          if eof(B) goto EofB
       
  2441 **    Cmpr: Compare A, B
       
  2442 **          Jump AltB, AeqB, AgtB
       
  2443 **     End: ...
       
  2444 **
       
  2445 ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
       
  2446 ** actually called using Gosub and they do not Return.  EofA and EofB loop
       
  2447 ** until all data is exhausted then jump to the "end" labe.  AltB, AeqB,
       
  2448 ** and AgtB jump to either L2 or to one of EofA or EofB.
       
  2449 */
       
  2450 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
  2451 static int multiSelectOrderBy(
       
  2452   Parse *pParse,        /* Parsing context */
       
  2453   Select *p,            /* The right-most of SELECTs to be coded */
       
  2454   SelectDest *pDest     /* What to do with query results */
       
  2455 ){
       
  2456   int i, j;             /* Loop counters */
       
  2457   Select *pPrior;       /* Another SELECT immediately to our left */
       
  2458   Vdbe *v;              /* Generate code to this VDBE */
       
  2459   SelectDest destA;     /* Destination for coroutine A */
       
  2460   SelectDest destB;     /* Destination for coroutine B */
       
  2461   int regAddrA;         /* Address register for select-A coroutine */
       
  2462   int regEofA;          /* Flag to indicate when select-A is complete */
       
  2463   int regAddrB;         /* Address register for select-B coroutine */
       
  2464   int regEofB;          /* Flag to indicate when select-B is complete */
       
  2465   int addrSelectA;      /* Address of the select-A coroutine */
       
  2466   int addrSelectB;      /* Address of the select-B coroutine */
       
  2467   int regOutA;          /* Address register for the output-A subroutine */
       
  2468   int regOutB;          /* Address register for the output-B subroutine */
       
  2469   int addrOutA;         /* Address of the output-A subroutine */
       
  2470   int addrOutB;         /* Address of the output-B subroutine */
       
  2471   int addrEofA;         /* Address of the select-A-exhausted subroutine */
       
  2472   int addrEofB;         /* Address of the select-B-exhausted subroutine */
       
  2473   int addrAltB;         /* Address of the A<B subroutine */
       
  2474   int addrAeqB;         /* Address of the A==B subroutine */
       
  2475   int addrAgtB;         /* Address of the A>B subroutine */
       
  2476   int regLimitA;        /* Limit register for select-A */
       
  2477   int regLimitB;        /* Limit register for select-A */
       
  2478   int regPrev;          /* A range of registers to hold previous output */
       
  2479   int savedLimit;       /* Saved value of p->iLimit */
       
  2480   int savedOffset;      /* Saved value of p->iOffset */
       
  2481   int labelCmpr;        /* Label for the start of the merge algorithm */
       
  2482   int labelEnd;         /* Label for the end of the overall SELECT stmt */
       
  2483   int j1;               /* Jump instructions that get retargetted */
       
  2484   int op;               /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
       
  2485   KeyInfo *pKeyDup;     /* Comparison information for duplicate removal */
       
  2486   KeyInfo *pKeyMerge;   /* Comparison information for merging rows */
       
  2487   sqlite3 *db;          /* Database connection */
       
  2488   ExprList *pOrderBy;   /* The ORDER BY clause */
       
  2489   int nOrderBy;         /* Number of terms in the ORDER BY clause */
       
  2490   int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
       
  2491   u8 NotUsed;           /* Dummy variables */
       
  2492 
       
  2493   assert( p->pOrderBy!=0 );
       
  2494   db = pParse->db;
       
  2495   v = pParse->pVdbe;
       
  2496   if( v==0 ) return SQLITE_NOMEM;
       
  2497   labelEnd = sqlite3VdbeMakeLabel(v);
       
  2498   labelCmpr = sqlite3VdbeMakeLabel(v);
       
  2499 
       
  2500 
       
  2501   /* Patch up the ORDER BY clause
       
  2502   */
       
  2503   op = p->op;  
       
  2504   pPrior = p->pPrior;
       
  2505   assert( pPrior->pOrderBy==0 );
       
  2506   pOrderBy = p->pOrderBy;
       
  2507   assert( pOrderBy );
       
  2508   if( processCompoundOrderBy(pParse, p) ){
       
  2509     return SQLITE_ERROR;
       
  2510   }
       
  2511   nOrderBy = pOrderBy->nExpr;
       
  2512 
       
  2513   /* For operators other than UNION ALL we have to make sure that
       
  2514   ** the ORDER BY clause covers every term of the result set.  Add
       
  2515   ** terms to the ORDER BY clause as necessary.
       
  2516   */
       
  2517   if( op!=TK_ALL ){
       
  2518     for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
       
  2519       for(j=0; j<nOrderBy; j++){
       
  2520         Expr *pTerm = pOrderBy->a[j].pExpr;
       
  2521         assert( pTerm->op==TK_INTEGER );
       
  2522         assert( (pTerm->flags & EP_IntValue)!=0 );
       
  2523         if( pTerm->iTable==i ) break;
       
  2524       }
       
  2525       if( j==nOrderBy ){
       
  2526         Expr *pNew = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, 0);
       
  2527         if( pNew==0 ) return SQLITE_NOMEM;
       
  2528         pNew->flags |= EP_IntValue;
       
  2529         pNew->iTable = i;
       
  2530         pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew, 0);
       
  2531         nOrderBy++;
       
  2532       }
       
  2533     }
       
  2534   }
       
  2535 
       
  2536   /* Compute the comparison permutation and keyinfo that is used with
       
  2537   ** the permutation in order to comparisons to determine if the next
       
  2538   ** row of results comes from selectA or selectB.  Also add explicit
       
  2539   ** collations to the ORDER BY clause terms so that when the subqueries
       
  2540   ** to the right and the left are evaluated, they use the correct
       
  2541   ** collation.
       
  2542   */
       
  2543   aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy);
       
  2544   if( aPermute ){
       
  2545     for(i=0; i<nOrderBy; i++){
       
  2546       Expr *pTerm = pOrderBy->a[i].pExpr;
       
  2547       assert( pTerm->op==TK_INTEGER );
       
  2548       assert( (pTerm->flags & EP_IntValue)!=0 );
       
  2549       aPermute[i] = pTerm->iTable-1;
       
  2550       assert( aPermute[i]>=0 && aPermute[i]<p->pEList->nExpr );
       
  2551     }
       
  2552     pKeyMerge =
       
  2553       sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1));
       
  2554     if( pKeyMerge ){
       
  2555       pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy];
       
  2556       pKeyMerge->nField = nOrderBy;
       
  2557       pKeyMerge->enc = ENC(db);
       
  2558       for(i=0; i<nOrderBy; i++){
       
  2559         CollSeq *pColl;
       
  2560         Expr *pTerm = pOrderBy->a[i].pExpr;
       
  2561         if( pTerm->flags & EP_ExpCollate ){
       
  2562           pColl = pTerm->pColl;
       
  2563         }else{
       
  2564           pColl = multiSelectCollSeq(pParse, p, aPermute[i]);
       
  2565           pTerm->flags |= EP_ExpCollate;
       
  2566           pTerm->pColl = pColl;
       
  2567         }
       
  2568         pKeyMerge->aColl[i] = pColl;
       
  2569         pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder;
       
  2570       }
       
  2571     }
       
  2572   }else{
       
  2573     pKeyMerge = 0;
       
  2574   }
       
  2575 
       
  2576   /* Reattach the ORDER BY clause to the query.
       
  2577   */
       
  2578   p->pOrderBy = pOrderBy;
       
  2579   pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy);
       
  2580 
       
  2581   /* Allocate a range of temporary registers and the KeyInfo needed
       
  2582   ** for the logic that removes duplicate result rows when the
       
  2583   ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
       
  2584   */
       
  2585   if( op==TK_ALL ){
       
  2586     regPrev = 0;
       
  2587   }else{
       
  2588     int nExpr = p->pEList->nExpr;
       
  2589     assert( nOrderBy>=nExpr );
       
  2590     regPrev = sqlite3GetTempRange(pParse, nExpr+1);
       
  2591     sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
       
  2592     pKeyDup = sqlite3DbMallocZero(db,
       
  2593                   sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
       
  2594     if( pKeyDup ){
       
  2595       pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
       
  2596       pKeyDup->nField = nExpr;
       
  2597       pKeyDup->enc = ENC(db);
       
  2598       for(i=0; i<nExpr; i++){
       
  2599         pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
       
  2600         pKeyDup->aSortOrder[i] = 0;
       
  2601       }
       
  2602     }
       
  2603   }
       
  2604  
       
  2605   /* Separate the left and the right query from one another
       
  2606   */
       
  2607   p->pPrior = 0;
       
  2608   pPrior->pRightmost = 0;
       
  2609   processOrderGroupBy(pParse, p, p->pOrderBy, 1, &NotUsed);
       
  2610   if( pPrior->pPrior==0 ){
       
  2611     processOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, 1, &NotUsed);
       
  2612   }
       
  2613 
       
  2614   /* Compute the limit registers */
       
  2615   computeLimitRegisters(pParse, p, labelEnd);
       
  2616   if( p->iLimit && op==TK_ALL ){
       
  2617     regLimitA = ++pParse->nMem;
       
  2618     regLimitB = ++pParse->nMem;
       
  2619     sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
       
  2620                                   regLimitA);
       
  2621     sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
       
  2622   }else{
       
  2623     regLimitA = regLimitB = 0;
       
  2624   }
       
  2625   sqlite3ExprDelete(db, p->pLimit);
       
  2626   p->pLimit = 0;
       
  2627   sqlite3ExprDelete(db, p->pOffset);
       
  2628   p->pOffset = 0;
       
  2629 
       
  2630   regAddrA = ++pParse->nMem;
       
  2631   regEofA = ++pParse->nMem;
       
  2632   regAddrB = ++pParse->nMem;
       
  2633   regEofB = ++pParse->nMem;
       
  2634   regOutA = ++pParse->nMem;
       
  2635   regOutB = ++pParse->nMem;
       
  2636   sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
       
  2637   sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
       
  2638 
       
  2639   /* Jump past the various subroutines and coroutines to the main
       
  2640   ** merge loop
       
  2641   */
       
  2642   j1 = sqlite3VdbeAddOp0(v, OP_Goto);
       
  2643   addrSelectA = sqlite3VdbeCurrentAddr(v);
       
  2644 
       
  2645 
       
  2646   /* Generate a coroutine to evaluate the SELECT statement to the
       
  2647   ** left of the compound operator - the "A" select.
       
  2648   */
       
  2649   VdbeNoopComment((v, "Begin coroutine for left SELECT"));
       
  2650   pPrior->iLimit = regLimitA;
       
  2651   sqlite3Select(pParse, pPrior, &destA, 0, 0, 0);
       
  2652   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
       
  2653   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
       
  2654   VdbeNoopComment((v, "End coroutine for left SELECT"));
       
  2655 
       
  2656   /* Generate a coroutine to evaluate the SELECT statement on 
       
  2657   ** the right - the "B" select
       
  2658   */
       
  2659   addrSelectB = sqlite3VdbeCurrentAddr(v);
       
  2660   VdbeNoopComment((v, "Begin coroutine for right SELECT"));
       
  2661   savedLimit = p->iLimit;
       
  2662   savedOffset = p->iOffset;
       
  2663   p->iLimit = regLimitB;
       
  2664   p->iOffset = 0;  
       
  2665   sqlite3Select(pParse, p, &destB, 0, 0, 0);
       
  2666   p->iLimit = savedLimit;
       
  2667   p->iOffset = savedOffset;
       
  2668   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB);
       
  2669   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
       
  2670   VdbeNoopComment((v, "End coroutine for right SELECT"));
       
  2671 
       
  2672   /* Generate a subroutine that outputs the current row of the A
       
  2673   ** select as the next output row of the compound select.
       
  2674   */
       
  2675   VdbeNoopComment((v, "Output routine for A"));
       
  2676   addrOutA = generateOutputSubroutine(pParse,
       
  2677                  p, &destA, pDest, regOutA,
       
  2678                  regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd);
       
  2679   
       
  2680   /* Generate a subroutine that outputs the current row of the B
       
  2681   ** select as the next output row of the compound select.
       
  2682   */
       
  2683   if( op==TK_ALL || op==TK_UNION ){
       
  2684     VdbeNoopComment((v, "Output routine for B"));
       
  2685     addrOutB = generateOutputSubroutine(pParse,
       
  2686                  p, &destB, pDest, regOutB,
       
  2687                  regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd);
       
  2688   }
       
  2689 
       
  2690   /* Generate a subroutine to run when the results from select A
       
  2691   ** are exhausted and only data in select B remains.
       
  2692   */
       
  2693   VdbeNoopComment((v, "eof-A subroutine"));
       
  2694   if( op==TK_EXCEPT || op==TK_INTERSECT ){
       
  2695     addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd);
       
  2696   }else{  
       
  2697     addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd);
       
  2698     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
       
  2699     sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
       
  2700     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
       
  2701   }
       
  2702 
       
  2703   /* Generate a subroutine to run when the results from select B
       
  2704   ** are exhausted and only data in select A remains.
       
  2705   */
       
  2706   if( op==TK_INTERSECT ){
       
  2707     addrEofB = addrEofA;
       
  2708   }else{  
       
  2709     VdbeNoopComment((v, "eof-B subroutine"));
       
  2710     addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
       
  2711     sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
       
  2712     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
       
  2713     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB);
       
  2714   }
       
  2715 
       
  2716   /* Generate code to handle the case of A<B
       
  2717   */
       
  2718   VdbeNoopComment((v, "A-lt-B subroutine"));
       
  2719   addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
       
  2720   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
       
  2721   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
       
  2722   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
       
  2723 
       
  2724   /* Generate code to handle the case of A==B
       
  2725   */
       
  2726   if( op==TK_ALL ){
       
  2727     addrAeqB = addrAltB;
       
  2728   }else if( op==TK_INTERSECT ){
       
  2729     addrAeqB = addrAltB;
       
  2730     addrAltB++;
       
  2731   }else{
       
  2732     VdbeNoopComment((v, "A-eq-B subroutine"));
       
  2733     addrAeqB =
       
  2734     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
       
  2735     sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
       
  2736     sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
       
  2737   }
       
  2738 
       
  2739   /* Generate code to handle the case of A>B
       
  2740   */
       
  2741   VdbeNoopComment((v, "A-gt-B subroutine"));
       
  2742   addrAgtB = sqlite3VdbeCurrentAddr(v);
       
  2743   if( op==TK_ALL || op==TK_UNION ){
       
  2744     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
       
  2745   }
       
  2746   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
       
  2747   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
       
  2748   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
       
  2749 
       
  2750   /* This code runs once to initialize everything.
       
  2751   */
       
  2752   sqlite3VdbeJumpHere(v, j1);
       
  2753   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA);
       
  2754   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB);
       
  2755   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA);
       
  2756   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB);
       
  2757   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
       
  2758   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
       
  2759 
       
  2760   /* Implement the main merge loop
       
  2761   */
       
  2762   sqlite3VdbeResolveLabel(v, labelCmpr);
       
  2763   sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
       
  2764   sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy,
       
  2765                          (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
       
  2766   sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
       
  2767 
       
  2768   /* Release temporary registers
       
  2769   */
       
  2770   if( regPrev ){
       
  2771     sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
       
  2772   }
       
  2773 
       
  2774   /* Jump to the this point in order to terminate the query.
       
  2775   */
       
  2776   sqlite3VdbeResolveLabel(v, labelEnd);
       
  2777 
       
  2778   /* Set the number of output columns
       
  2779   */
       
  2780   if( pDest->eDest==SRT_Callback ){
       
  2781     Select *pFirst = pPrior;
       
  2782     while( pFirst->pPrior ) pFirst = pFirst->pPrior;
       
  2783     generateColumnNames(pParse, 0, pFirst->pEList);
       
  2784   }
       
  2785 
       
  2786   /* Reassembly the compound query so that it will be freed correctly
       
  2787   ** by the calling function */
       
  2788   if( p->pPrior ){
       
  2789     sqlite3SelectDelete(db, p->pPrior);
       
  2790   }
       
  2791   p->pPrior = pPrior;
       
  2792 
       
  2793   /*** TBD:  Insert subroutine calls to close cursors on incomplete
       
  2794   **** subqueries ****/
       
  2795   return SQLITE_OK;
       
  2796 }
       
  2797 #endif
       
  2798 
       
  2799 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
       
  2800 /* Forward Declarations */
       
  2801 static void substExprList(sqlite3*, ExprList*, int, ExprList*);
       
  2802 static void substSelect(sqlite3*, Select *, int, ExprList *);
       
  2803 
       
  2804 /*
       
  2805 ** Scan through the expression pExpr.  Replace every reference to
       
  2806 ** a column in table number iTable with a copy of the iColumn-th
       
  2807 ** entry in pEList.  (But leave references to the ROWID column 
       
  2808 ** unchanged.)
       
  2809 **
       
  2810 ** This routine is part of the flattening procedure.  A subquery
       
  2811 ** whose result set is defined by pEList appears as entry in the
       
  2812 ** FROM clause of a SELECT such that the VDBE cursor assigned to that
       
  2813 ** FORM clause entry is iTable.  This routine make the necessary 
       
  2814 ** changes to pExpr so that it refers directly to the source table
       
  2815 ** of the subquery rather the result set of the subquery.
       
  2816 */
       
  2817 static void substExpr(
       
  2818   sqlite3 *db,        /* Report malloc errors to this connection */
       
  2819   Expr *pExpr,        /* Expr in which substitution occurs */
       
  2820   int iTable,         /* Table to be substituted */
       
  2821   ExprList *pEList    /* Substitute expressions */
       
  2822 ){
       
  2823   if( pExpr==0 ) return;
       
  2824   if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
       
  2825     if( pExpr->iColumn<0 ){
       
  2826       pExpr->op = TK_NULL;
       
  2827     }else{
       
  2828       Expr *pNew;
       
  2829       assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
       
  2830       assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 );
       
  2831       pNew = pEList->a[pExpr->iColumn].pExpr;
       
  2832       assert( pNew!=0 );
       
  2833       pExpr->op = pNew->op;
       
  2834       assert( pExpr->pLeft==0 );
       
  2835       pExpr->pLeft = sqlite3ExprDup(db, pNew->pLeft);
       
  2836       assert( pExpr->pRight==0 );
       
  2837       pExpr->pRight = sqlite3ExprDup(db, pNew->pRight);
       
  2838       assert( pExpr->pList==0 );
       
  2839       pExpr->pList = sqlite3ExprListDup(db, pNew->pList);
       
  2840       pExpr->iTable = pNew->iTable;
       
  2841       pExpr->pTab = pNew->pTab;
       
  2842       pExpr->iColumn = pNew->iColumn;
       
  2843       pExpr->iAgg = pNew->iAgg;
       
  2844       sqlite3TokenCopy(db, &pExpr->token, &pNew->token);
       
  2845       sqlite3TokenCopy(db, &pExpr->span, &pNew->span);
       
  2846       pExpr->pSelect = sqlite3SelectDup(db, pNew->pSelect);
       
  2847       pExpr->flags = pNew->flags;
       
  2848     }
       
  2849   }else{
       
  2850     substExpr(db, pExpr->pLeft, iTable, pEList);
       
  2851     substExpr(db, pExpr->pRight, iTable, pEList);
       
  2852     substSelect(db, pExpr->pSelect, iTable, pEList);
       
  2853     substExprList(db, pExpr->pList, iTable, pEList);
       
  2854   }
       
  2855 }
       
  2856 static void substExprList(
       
  2857   sqlite3 *db,         /* Report malloc errors here */
       
  2858   ExprList *pList,     /* List to scan and in which to make substitutes */
       
  2859   int iTable,          /* Table to be substituted */
       
  2860   ExprList *pEList     /* Substitute values */
       
  2861 ){
       
  2862   int i;
       
  2863   if( pList==0 ) return;
       
  2864   for(i=0; i<pList->nExpr; i++){
       
  2865     substExpr(db, pList->a[i].pExpr, iTable, pEList);
       
  2866   }
       
  2867 }
       
  2868 static void substSelect(
       
  2869   sqlite3 *db,         /* Report malloc errors here */
       
  2870   Select *p,           /* SELECT statement in which to make substitutions */
       
  2871   int iTable,          /* Table to be replaced */
       
  2872   ExprList *pEList     /* Substitute values */
       
  2873 ){
       
  2874   if( !p ) return;
       
  2875   substExprList(db, p->pEList, iTable, pEList);
       
  2876   substExprList(db, p->pGroupBy, iTable, pEList);
       
  2877   substExprList(db, p->pOrderBy, iTable, pEList);
       
  2878   substExpr(db, p->pHaving, iTable, pEList);
       
  2879   substExpr(db, p->pWhere, iTable, pEList);
       
  2880   substSelect(db, p->pPrior, iTable, pEList);
       
  2881 }
       
  2882 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
       
  2883 
       
  2884 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
       
  2885 /*
       
  2886 ** This routine attempts to flatten subqueries in order to speed
       
  2887 ** execution.  It returns 1 if it makes changes and 0 if no flattening
       
  2888 ** occurs.
       
  2889 **
       
  2890 ** To understand the concept of flattening, consider the following
       
  2891 ** query:
       
  2892 **
       
  2893 **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
       
  2894 **
       
  2895 ** The default way of implementing this query is to execute the
       
  2896 ** subquery first and store the results in a temporary table, then
       
  2897 ** run the outer query on that temporary table.  This requires two
       
  2898 ** passes over the data.  Furthermore, because the temporary table
       
  2899 ** has no indices, the WHERE clause on the outer query cannot be
       
  2900 ** optimized.
       
  2901 **
       
  2902 ** This routine attempts to rewrite queries such as the above into
       
  2903 ** a single flat select, like this:
       
  2904 **
       
  2905 **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
       
  2906 **
       
  2907 ** The code generated for this simpification gives the same result
       
  2908 ** but only has to scan the data once.  And because indices might 
       
  2909 ** exist on the table t1, a complete scan of the data might be
       
  2910 ** avoided.
       
  2911 **
       
  2912 ** Flattening is only attempted if all of the following are true:
       
  2913 **
       
  2914 **   (1)  The subquery and the outer query do not both use aggregates.
       
  2915 **
       
  2916 **   (2)  The subquery is not an aggregate or the outer query is not a join.
       
  2917 **
       
  2918 **   (3)  The subquery is not the right operand of a left outer join, or
       
  2919 **        the subquery is not itself a join.  (Ticket #306)
       
  2920 **
       
  2921 **   (4)  The subquery is not DISTINCT or the outer query is not a join.
       
  2922 **
       
  2923 **   (5)  The subquery is not DISTINCT or the outer query does not use
       
  2924 **        aggregates.
       
  2925 **
       
  2926 **   (6)  The subquery does not use aggregates or the outer query is not
       
  2927 **        DISTINCT.
       
  2928 **
       
  2929 **   (7)  The subquery has a FROM clause.
       
  2930 **
       
  2931 **   (8)  The subquery does not use LIMIT or the outer query is not a join.
       
  2932 **
       
  2933 **   (9)  The subquery does not use LIMIT or the outer query does not use
       
  2934 **        aggregates.
       
  2935 **
       
  2936 **  (10)  The subquery does not use aggregates or the outer query does not
       
  2937 **        use LIMIT.
       
  2938 **
       
  2939 **  (11)  The subquery and the outer query do not both have ORDER BY clauses.
       
  2940 **
       
  2941 **  (12)  The subquery is not the right term of a LEFT OUTER JOIN or the
       
  2942 **        subquery has no WHERE clause.  (added by ticket #350)
       
  2943 **
       
  2944 **  (13)  The subquery and outer query do not both use LIMIT
       
  2945 **
       
  2946 **  (14)  The subquery does not use OFFSET
       
  2947 **
       
  2948 **  (15)  The outer query is not part of a compound select or the
       
  2949 **        subquery does not have both an ORDER BY and a LIMIT clause.
       
  2950 **        (See ticket #2339)
       
  2951 **
       
  2952 **  (16)  The outer query is not an aggregate or the subquery does
       
  2953 **        not contain ORDER BY.  (Ticket #2942)  This used to not matter
       
  2954 **        until we introduced the group_concat() function.  
       
  2955 **
       
  2956 **  (17)  The sub-query is not a compound select, or it is a UNION ALL 
       
  2957 **        compound clause made up entirely of non-aggregate queries, and 
       
  2958 **        the parent query:
       
  2959 **
       
  2960 **          * is not itself part of a compound select,
       
  2961 **          * is not an aggregate or DISTINCT query, and
       
  2962 **          * has no other tables or sub-selects in the FROM clause.
       
  2963 **
       
  2964 **        The parent and sub-query may contain WHERE clauses. Subject to
       
  2965 **        rules (11), (13) and (14), they may also contain ORDER BY,
       
  2966 **        LIMIT and OFFSET clauses.
       
  2967 **
       
  2968 **  (18)  If the sub-query is a compound select, then all terms of the
       
  2969 **        ORDER by clause of the parent must be simple references to 
       
  2970 **        columns of the sub-query.
       
  2971 **
       
  2972 ** In this routine, the "p" parameter is a pointer to the outer query.
       
  2973 ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
       
  2974 ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
       
  2975 **
       
  2976 ** If flattening is not attempted, this routine is a no-op and returns 0.
       
  2977 ** If flattening is attempted this routine returns 1.
       
  2978 **
       
  2979 ** All of the expression analysis must occur on both the outer query and
       
  2980 ** the subquery before this routine runs.
       
  2981 */
       
  2982 static int flattenSubquery(
       
  2983   Parse *pParse,       /* Parsing context */
       
  2984   Select *p,           /* The parent or outer SELECT statement */
       
  2985   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
       
  2986   int isAgg,           /* True if outer SELECT uses aggregate functions */
       
  2987   int subqueryIsAgg    /* True if the subquery uses aggregate functions */
       
  2988 ){
       
  2989   const char *zSavedAuthContext = pParse->zAuthContext;
       
  2990   Select *pParent;
       
  2991   Select *pSub;       /* The inner query or "subquery" */
       
  2992   Select *pSub1;      /* Pointer to the rightmost select in sub-query */
       
  2993   SrcList *pSrc;      /* The FROM clause of the outer query */
       
  2994   SrcList *pSubSrc;   /* The FROM clause of the subquery */
       
  2995   ExprList *pList;    /* The result set of the outer query */
       
  2996   int iParent;        /* VDBE cursor number of the pSub result set temp table */
       
  2997   int i;              /* Loop counter */
       
  2998   Expr *pWhere;                    /* The WHERE clause */
       
  2999   struct SrcList_item *pSubitem;   /* The subquery */
       
  3000   sqlite3 *db = pParse->db;
       
  3001 
       
  3002   /* Check to see if flattening is permitted.  Return 0 if not.
       
  3003   */
       
  3004   if( p==0 ) return 0;
       
  3005   pSrc = p->pSrc;
       
  3006   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
       
  3007   pSubitem = &pSrc->a[iFrom];
       
  3008   iParent = pSubitem->iCursor;
       
  3009   pSub = pSubitem->pSelect;
       
  3010   assert( pSub!=0 );
       
  3011   if( isAgg && subqueryIsAgg ) return 0;                 /* Restriction (1)  */
       
  3012   if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;          /* Restriction (2)  */
       
  3013   pSubSrc = pSub->pSrc;
       
  3014   assert( pSubSrc );
       
  3015   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
       
  3016   ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
       
  3017   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
       
  3018   ** became arbitrary expressions, we were forced to add restrictions (13)
       
  3019   ** and (14). */
       
  3020   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
       
  3021   if( pSub->pOffset ) return 0;                          /* Restriction (14) */
       
  3022   if( p->pRightmost && pSub->pLimit && pSub->pOrderBy ){
       
  3023     return 0;                                            /* Restriction (15) */
       
  3024   }
       
  3025   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
       
  3026   if( (pSub->isDistinct || pSub->pLimit) 
       
  3027          && (pSrc->nSrc>1 || isAgg) ){          /* Restrictions (4)(5)(8)(9) */
       
  3028      return 0;       
       
  3029   }
       
  3030   if( p->isDistinct && subqueryIsAgg ) return 0;         /* Restriction (6)  */
       
  3031   if( (p->disallowOrderBy || p->pOrderBy) && pSub->pOrderBy ){
       
  3032      return 0;                                           /* Restriction (11) */
       
  3033   }
       
  3034   if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
       
  3035 
       
  3036   /* Restriction 3:  If the subquery is a join, make sure the subquery is 
       
  3037   ** not used as the right operand of an outer join.  Examples of why this
       
  3038   ** is not allowed:
       
  3039   **
       
  3040   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
       
  3041   **
       
  3042   ** If we flatten the above, we would get
       
  3043   **
       
  3044   **         (t1 LEFT OUTER JOIN t2) JOIN t3
       
  3045   **
       
  3046   ** which is not at all the same thing.
       
  3047   */
       
  3048   if( pSubSrc->nSrc>1 && (pSubitem->jointype & JT_OUTER)!=0 ){
       
  3049     return 0;
       
  3050   }
       
  3051 
       
  3052   /* Restriction 12:  If the subquery is the right operand of a left outer
       
  3053   ** join, make sure the subquery has no WHERE clause.
       
  3054   ** An examples of why this is not allowed:
       
  3055   **
       
  3056   **         t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
       
  3057   **
       
  3058   ** If we flatten the above, we would get
       
  3059   **
       
  3060   **         (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
       
  3061   **
       
  3062   ** But the t2.x>0 test will always fail on a NULL row of t2, which
       
  3063   ** effectively converts the OUTER JOIN into an INNER JOIN.
       
  3064   */
       
  3065   if( (pSubitem->jointype & JT_OUTER)!=0 && pSub->pWhere!=0 ){
       
  3066     return 0;
       
  3067   }
       
  3068 
       
  3069   /* Restriction 17: If the sub-query is a compound SELECT, then it must
       
  3070   ** use only the UNION ALL operator. And none of the simple select queries
       
  3071   ** that make up the compound SELECT are allowed to be aggregate or distinct
       
  3072   ** queries.
       
  3073   */
       
  3074   if( pSub->pPrior ){
       
  3075     if( p->pPrior || isAgg || p->isDistinct || pSrc->nSrc!=1 ){
       
  3076       return 0;
       
  3077     }
       
  3078     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
       
  3079       if( pSub1->isAgg || pSub1->isDistinct 
       
  3080        || (pSub1->pPrior && pSub1->op!=TK_ALL) 
       
  3081        || !pSub1->pSrc || pSub1->pSrc->nSrc!=1
       
  3082       ){
       
  3083         return 0;
       
  3084       }
       
  3085     }
       
  3086 
       
  3087     /* Restriction 18. */
       
  3088     if( p->pOrderBy ){
       
  3089       int ii;
       
  3090       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
       
  3091         Expr *pExpr = p->pOrderBy->a[ii].pExpr;
       
  3092         if( pExpr->op!=TK_COLUMN || pExpr->iTable!=iParent ){ 
       
  3093           return 0;
       
  3094         }
       
  3095       }
       
  3096     }
       
  3097   }
       
  3098 
       
  3099   pParse->zAuthContext = pSubitem->zName;
       
  3100   sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
       
  3101   pParse->zAuthContext = zSavedAuthContext;
       
  3102 
       
  3103   /* If the sub-query is a compound SELECT statement, then it must be
       
  3104   ** a UNION ALL and the parent query must be of the form:
       
  3105   **
       
  3106   **     SELECT <expr-list> FROM (<sub-query>) <where-clause> 
       
  3107   **
       
  3108   ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
       
  3109   ** creates N copies of the parent query without any ORDER BY, LIMIT or 
       
  3110   ** OFFSET clauses and joins them to the left-hand-side of the original
       
  3111   ** using UNION ALL operators. In this case N is the number of simple
       
  3112   ** select statements in the compound sub-query.
       
  3113   */
       
  3114   for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
       
  3115     Select *pNew;
       
  3116     ExprList *pOrderBy = p->pOrderBy;
       
  3117     Expr *pLimit = p->pLimit;
       
  3118     Expr *pOffset = p->pOffset;
       
  3119     Select *pPrior = p->pPrior;
       
  3120     p->pOrderBy = 0;
       
  3121     p->pSrc = 0;
       
  3122     p->pPrior = 0;
       
  3123     p->pLimit = 0;
       
  3124     pNew = sqlite3SelectDup(db, p);
       
  3125     pNew->pPrior = pPrior;
       
  3126     p->pPrior = pNew;
       
  3127     p->pOrderBy = pOrderBy;
       
  3128     p->op = TK_ALL;
       
  3129     p->pSrc = pSrc;
       
  3130     p->pLimit = pLimit;
       
  3131     p->pOffset = pOffset;
       
  3132     p->pRightmost = 0;
       
  3133     pNew->pRightmost = 0;
       
  3134   }
       
  3135 
       
  3136   /* If we reach this point, it means flattening is permitted for the
       
  3137   ** iFrom-th entry of the FROM clause in the outer query.
       
  3138   */
       
  3139   pSub = pSub1 = pSubitem->pSelect;
       
  3140   for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
       
  3141     int nSubSrc = pSubSrc->nSrc;
       
  3142     int jointype = 0;
       
  3143     pSubSrc = pSub->pSrc;
       
  3144     pSrc = pParent->pSrc;
       
  3145 
       
  3146     /* Move all of the FROM elements of the subquery into the
       
  3147     ** the FROM clause of the outer query.  Before doing this, remember
       
  3148     ** the cursor number for the original outer query FROM element in
       
  3149     ** iParent.  The iParent cursor will never be used.  Subsequent code
       
  3150     ** will scan expressions looking for iParent references and replace
       
  3151     ** those references with expressions that resolve to the subquery FROM
       
  3152     ** elements we are now copying in.
       
  3153     */
       
  3154     if( pSrc ){
       
  3155       pSubitem = &pSrc->a[iFrom];
       
  3156       nSubSrc = pSubSrc->nSrc;
       
  3157       jointype = pSubitem->jointype;
       
  3158       sqlite3DeleteTable(pSubitem->pTab);
       
  3159       sqlite3DbFree(db, pSubitem->zDatabase);
       
  3160       sqlite3DbFree(db, pSubitem->zName);
       
  3161       sqlite3DbFree(db, pSubitem->zAlias);
       
  3162       pSubitem->pTab = 0;
       
  3163       pSubitem->zDatabase = 0;
       
  3164       pSubitem->zName = 0;
       
  3165       pSubitem->zAlias = 0;
       
  3166     }
       
  3167     if( nSubSrc!=1 || !pSrc ){
       
  3168       int extra = nSubSrc - 1;
       
  3169       for(i=(pSrc?1:0); i<nSubSrc; i++){
       
  3170         pSrc = sqlite3SrcListAppend(db, pSrc, 0, 0);
       
  3171         if( pSrc==0 ){
       
  3172           pParent->pSrc = 0;
       
  3173           return 1;
       
  3174         }
       
  3175       }
       
  3176       pParent->pSrc = pSrc;
       
  3177       for(i=pSrc->nSrc-1; i-extra>=iFrom; i--){
       
  3178         pSrc->a[i] = pSrc->a[i-extra];
       
  3179       }
       
  3180     }
       
  3181     for(i=0; i<nSubSrc; i++){
       
  3182       pSrc->a[i+iFrom] = pSubSrc->a[i];
       
  3183       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
       
  3184     }
       
  3185     pSrc->a[iFrom].jointype = jointype;
       
  3186   
       
  3187     /* Now begin substituting subquery result set expressions for 
       
  3188     ** references to the iParent in the outer query.
       
  3189     ** 
       
  3190     ** Example:
       
  3191     **
       
  3192     **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
       
  3193     **   \                     \_____________ subquery __________/          /
       
  3194     **    \_____________________ outer query ______________________________/
       
  3195     **
       
  3196     ** We look at every expression in the outer query and every place we see
       
  3197     ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
       
  3198     */
       
  3199     pList = pParent->pEList;
       
  3200     for(i=0; i<pList->nExpr; i++){
       
  3201       Expr *pExpr;
       
  3202       if( pList->a[i].zName==0 && (pExpr = pList->a[i].pExpr)->span.z!=0 ){
       
  3203         pList->a[i].zName = 
       
  3204                sqlite3DbStrNDup(db, (char*)pExpr->span.z, pExpr->span.n);
       
  3205       }
       
  3206     }
       
  3207     substExprList(db, pParent->pEList, iParent, pSub->pEList);
       
  3208     if( isAgg ){
       
  3209       substExprList(db, pParent->pGroupBy, iParent, pSub->pEList);
       
  3210       substExpr(db, pParent->pHaving, iParent, pSub->pEList);
       
  3211     }
       
  3212     if( pSub->pOrderBy ){
       
  3213       assert( pParent->pOrderBy==0 );
       
  3214       pParent->pOrderBy = pSub->pOrderBy;
       
  3215       pSub->pOrderBy = 0;
       
  3216     }else if( pParent->pOrderBy ){
       
  3217       substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
       
  3218     }
       
  3219     if( pSub->pWhere ){
       
  3220       pWhere = sqlite3ExprDup(db, pSub->pWhere);
       
  3221     }else{
       
  3222       pWhere = 0;
       
  3223     }
       
  3224     if( subqueryIsAgg ){
       
  3225       assert( pParent->pHaving==0 );
       
  3226       pParent->pHaving = pParent->pWhere;
       
  3227       pParent->pWhere = pWhere;
       
  3228       substExpr(db, pParent->pHaving, iParent, pSub->pEList);
       
  3229       pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, 
       
  3230                                   sqlite3ExprDup(db, pSub->pHaving));
       
  3231       assert( pParent->pGroupBy==0 );
       
  3232       pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy);
       
  3233     }else{
       
  3234       substExpr(db, pParent->pWhere, iParent, pSub->pEList);
       
  3235       pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere);
       
  3236     }
       
  3237   
       
  3238     /* The flattened query is distinct if either the inner or the
       
  3239     ** outer query is distinct. 
       
  3240     */
       
  3241     pParent->isDistinct = pParent->isDistinct || pSub->isDistinct;
       
  3242   
       
  3243     /*
       
  3244     ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
       
  3245     **
       
  3246     ** One is tempted to try to add a and b to combine the limits.  But this
       
  3247     ** does not work if either limit is negative.
       
  3248     */
       
  3249     if( pSub->pLimit ){
       
  3250       pParent->pLimit = pSub->pLimit;
       
  3251       pSub->pLimit = 0;
       
  3252     }
       
  3253   }
       
  3254 
       
  3255   /* Finially, delete what is left of the subquery and return
       
  3256   ** success.
       
  3257   */
       
  3258   sqlite3SelectDelete(db, pSub1);
       
  3259 
       
  3260   return 1;
       
  3261 }
       
  3262 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
       
  3263 
       
  3264 /*
       
  3265 ** Analyze the SELECT statement passed as an argument to see if it
       
  3266 ** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if 
       
  3267 ** it is, or 0 otherwise. At present, a query is considered to be
       
  3268 ** a min()/max() query if:
       
  3269 **
       
  3270 **   1. There is a single object in the FROM clause.
       
  3271 **
       
  3272 **   2. There is a single expression in the result set, and it is
       
  3273 **      either min(x) or max(x), where x is a column reference.
       
  3274 */
       
  3275 static int minMaxQuery(Parse *pParse, Select *p){
       
  3276   Expr *pExpr;
       
  3277   ExprList *pEList = p->pEList;
       
  3278 
       
  3279   if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL;
       
  3280   pExpr = pEList->a[0].pExpr;
       
  3281   pEList = pExpr->pList;
       
  3282   if( pExpr->op!=TK_AGG_FUNCTION || pEList==0 || pEList->nExpr!=1 ) return 0;
       
  3283   if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL;
       
  3284   if( pExpr->token.n!=3 ) return WHERE_ORDERBY_NORMAL;
       
  3285   if( sqlite3StrNICmp((char*)pExpr->token.z,"min",3)==0 ){
       
  3286     return WHERE_ORDERBY_MIN;
       
  3287   }else if( sqlite3StrNICmp((char*)pExpr->token.z,"max",3)==0 ){
       
  3288     return WHERE_ORDERBY_MAX;
       
  3289   }
       
  3290   return WHERE_ORDERBY_NORMAL;
       
  3291 }
       
  3292 
       
  3293 /*
       
  3294 ** This routine resolves any names used in the result set of the
       
  3295 ** supplied SELECT statement. If the SELECT statement being resolved
       
  3296 ** is a sub-select, then pOuterNC is a pointer to the NameContext 
       
  3297 ** of the parent SELECT.
       
  3298 */
       
  3299 int sqlite3SelectResolve(
       
  3300   Parse *pParse,         /* The parser context */
       
  3301   Select *p,             /* The SELECT statement being coded. */
       
  3302   NameContext *pOuterNC  /* The outer name context. May be NULL. */
       
  3303 ){
       
  3304   ExprList *pEList;          /* Result set. */
       
  3305   int i;                     /* For-loop variable used in multiple places */
       
  3306   NameContext sNC;           /* Local name-context */
       
  3307   ExprList *pGroupBy;        /* The group by clause */
       
  3308 
       
  3309   /* If this routine has run before, return immediately. */
       
  3310   if( p->isResolved ){
       
  3311     assert( !pOuterNC );
       
  3312     return SQLITE_OK;
       
  3313   }
       
  3314   p->isResolved = 1;
       
  3315 
       
  3316   /* If there have already been errors, do nothing. */
       
  3317   if( pParse->nErr>0 ){
       
  3318     return SQLITE_ERROR;
       
  3319   }
       
  3320 
       
  3321   /* Prepare the select statement. This call will allocate all cursors
       
  3322   ** required to handle the tables and subqueries in the FROM clause.
       
  3323   */
       
  3324   if( prepSelectStmt(pParse, p) ){
       
  3325     return SQLITE_ERROR;
       
  3326   }
       
  3327 
       
  3328   /* Resolve the expressions in the LIMIT and OFFSET clauses. These
       
  3329   ** are not allowed to refer to any names, so pass an empty NameContext.
       
  3330   */
       
  3331   memset(&sNC, 0, sizeof(sNC));
       
  3332   sNC.pParse = pParse;
       
  3333   if( sqlite3ExprResolveNames(&sNC, p->pLimit) ||
       
  3334       sqlite3ExprResolveNames(&sNC, p->pOffset) ){
       
  3335     return SQLITE_ERROR;
       
  3336   }
       
  3337 
       
  3338   /* Set up the local name-context to pass to ExprResolveNames() to
       
  3339   ** resolve the expression-list.
       
  3340   */
       
  3341   sNC.allowAgg = 1;
       
  3342   sNC.pSrcList = p->pSrc;
       
  3343   sNC.pNext = pOuterNC;
       
  3344 
       
  3345   /* Resolve names in the result set. */
       
  3346   pEList = p->pEList;
       
  3347   if( !pEList ) return SQLITE_ERROR;
       
  3348   for(i=0; i<pEList->nExpr; i++){
       
  3349     Expr *pX = pEList->a[i].pExpr;
       
  3350     if( sqlite3ExprResolveNames(&sNC, pX) ){
       
  3351       return SQLITE_ERROR;
       
  3352     }
       
  3353   }
       
  3354 
       
  3355   /* If there are no aggregate functions in the result-set, and no GROUP BY 
       
  3356   ** expression, do not allow aggregates in any of the other expressions.
       
  3357   */
       
  3358   assert( !p->isAgg );
       
  3359   pGroupBy = p->pGroupBy;
       
  3360   if( pGroupBy || sNC.hasAgg ){
       
  3361     p->isAgg = 1;
       
  3362   }else{
       
  3363     sNC.allowAgg = 0;
       
  3364   }
       
  3365 
       
  3366   /* If a HAVING clause is present, then there must be a GROUP BY clause.
       
  3367   */
       
  3368   if( p->pHaving && !pGroupBy ){
       
  3369     sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
       
  3370     return SQLITE_ERROR;
       
  3371   }
       
  3372 
       
  3373   /* Add the expression list to the name-context before parsing the
       
  3374   ** other expressions in the SELECT statement. This is so that
       
  3375   ** expressions in the WHERE clause (etc.) can refer to expressions by
       
  3376   ** aliases in the result set.
       
  3377   **
       
  3378   ** Minor point: If this is the case, then the expression will be
       
  3379   ** re-evaluated for each reference to it.
       
  3380   */
       
  3381   sNC.pEList = p->pEList;
       
  3382   if( sqlite3ExprResolveNames(&sNC, p->pWhere) ||
       
  3383      sqlite3ExprResolveNames(&sNC, p->pHaving) ){
       
  3384     return SQLITE_ERROR;
       
  3385   }
       
  3386   if( p->pPrior==0 ){
       
  3387     if( processOrderGroupBy(pParse, p, p->pOrderBy, 1, &sNC.hasAgg) ){
       
  3388       return SQLITE_ERROR;
       
  3389     }
       
  3390   }
       
  3391   if( processOrderGroupBy(pParse, p, pGroupBy, 0, &sNC.hasAgg) ){
       
  3392     return SQLITE_ERROR;
       
  3393   }
       
  3394 
       
  3395   if( pParse->db->mallocFailed ){
       
  3396     return SQLITE_NOMEM;
       
  3397   }
       
  3398 
       
  3399   /* Make sure the GROUP BY clause does not contain aggregate functions.
       
  3400   */
       
  3401   if( pGroupBy ){
       
  3402     struct ExprList_item *pItem;
       
  3403   
       
  3404     for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
       
  3405       if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
       
  3406         sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
       
  3407             "the GROUP BY clause");
       
  3408         return SQLITE_ERROR;
       
  3409       }
       
  3410     }
       
  3411   }
       
  3412 
       
  3413   /* If this is one SELECT of a compound, be sure to resolve names
       
  3414   ** in the other SELECTs.
       
  3415   */
       
  3416   if( p->pPrior ){
       
  3417     return sqlite3SelectResolve(pParse, p->pPrior, pOuterNC);
       
  3418   }else{
       
  3419     return SQLITE_OK;
       
  3420   }
       
  3421 }
       
  3422 
       
  3423 /*
       
  3424 ** Reset the aggregate accumulator.
       
  3425 **
       
  3426 ** The aggregate accumulator is a set of memory cells that hold
       
  3427 ** intermediate results while calculating an aggregate.  This
       
  3428 ** routine simply stores NULLs in all of those memory cells.
       
  3429 */
       
  3430 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
       
  3431   Vdbe *v = pParse->pVdbe;
       
  3432   int i;
       
  3433   struct AggInfo_func *pFunc;
       
  3434   if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
       
  3435     return;
       
  3436   }
       
  3437   for(i=0; i<pAggInfo->nColumn; i++){
       
  3438     sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
       
  3439   }
       
  3440   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
       
  3441     sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
       
  3442     if( pFunc->iDistinct>=0 ){
       
  3443       Expr *pE = pFunc->pExpr;
       
  3444       if( pE->pList==0 || pE->pList->nExpr!=1 ){
       
  3445         sqlite3ErrorMsg(pParse, "DISTINCT in aggregate must be followed "
       
  3446            "by an expression");
       
  3447         pFunc->iDistinct = -1;
       
  3448       }else{
       
  3449         KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->pList);
       
  3450         sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
       
  3451                           (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
       
  3452       }
       
  3453     }
       
  3454   }
       
  3455 }
       
  3456 
       
  3457 /*
       
  3458 ** Invoke the OP_AggFinalize opcode for every aggregate function
       
  3459 ** in the AggInfo structure.
       
  3460 */
       
  3461 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
       
  3462   Vdbe *v = pParse->pVdbe;
       
  3463   int i;
       
  3464   struct AggInfo_func *pF;
       
  3465   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
       
  3466     ExprList *pList = pF->pExpr->pList;
       
  3467     sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0,
       
  3468                       (void*)pF->pFunc, P4_FUNCDEF);
       
  3469   }
       
  3470 }
       
  3471 
       
  3472 /*
       
  3473 ** Update the accumulator memory cells for an aggregate based on
       
  3474 ** the current cursor position.
       
  3475 */
       
  3476 static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
       
  3477   Vdbe *v = pParse->pVdbe;
       
  3478   int i;
       
  3479   struct AggInfo_func *pF;
       
  3480   struct AggInfo_col *pC;
       
  3481 
       
  3482   pAggInfo->directMode = 1;
       
  3483   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
       
  3484     int nArg;
       
  3485     int addrNext = 0;
       
  3486     int regAgg;
       
  3487     ExprList *pList = pF->pExpr->pList;
       
  3488     if( pList ){
       
  3489       nArg = pList->nExpr;
       
  3490       regAgg = sqlite3GetTempRange(pParse, nArg);
       
  3491       sqlite3ExprCodeExprList(pParse, pList, regAgg, 0);
       
  3492     }else{
       
  3493       nArg = 0;
       
  3494       regAgg = 0;
       
  3495     }
       
  3496     if( pF->iDistinct>=0 ){
       
  3497       addrNext = sqlite3VdbeMakeLabel(v);
       
  3498       assert( nArg==1 );
       
  3499       codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
       
  3500     }
       
  3501     if( pF->pFunc->needCollSeq ){
       
  3502       CollSeq *pColl = 0;
       
  3503       struct ExprList_item *pItem;
       
  3504       int j;
       
  3505       assert( pList!=0 );  /* pList!=0 if pF->pFunc->needCollSeq is true */
       
  3506       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
       
  3507         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
       
  3508       }
       
  3509       if( !pColl ){
       
  3510         pColl = pParse->db->pDfltColl;
       
  3511       }
       
  3512       sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
       
  3513     }
       
  3514     sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem,
       
  3515                       (void*)pF->pFunc, P4_FUNCDEF);
       
  3516     sqlite3VdbeChangeP5(v, nArg);
       
  3517     sqlite3ReleaseTempRange(pParse, regAgg, nArg);
       
  3518     sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
       
  3519     if( addrNext ){
       
  3520       sqlite3VdbeResolveLabel(v, addrNext);
       
  3521     }
       
  3522   }
       
  3523   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
       
  3524     sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
       
  3525   }
       
  3526   pAggInfo->directMode = 0;
       
  3527 }
       
  3528 
       
  3529 /*
       
  3530 ** Generate code for the given SELECT statement.
       
  3531 **
       
  3532 ** The results are distributed in various ways depending on the
       
  3533 ** contents of the SelectDest structure pointed to by argument pDest
       
  3534 ** as follows:
       
  3535 **
       
  3536 **     pDest->eDest    Result
       
  3537 **     ------------    -------------------------------------------
       
  3538 **     SRT_Callback    Invoke the callback for each row of the result.
       
  3539 **
       
  3540 **     SRT_Mem         Store first result in memory cell pDest->iParm
       
  3541 **
       
  3542 **     SRT_Set         Store results as keys of table pDest->iParm. 
       
  3543 **                     Apply the affinity pDest->affinity before storing them.
       
  3544 **
       
  3545 **     SRT_Union       Store results as a key in a temporary table pDest->iParm.
       
  3546 **
       
  3547 **     SRT_Except      Remove results from the temporary table pDest->iParm.
       
  3548 **
       
  3549 **     SRT_Table       Store results in temporary table pDest->iParm
       
  3550 **
       
  3551 **     SRT_EphemTab    Create an temporary table pDest->iParm and store
       
  3552 **                     the result there. The cursor is left open after
       
  3553 **                     returning.
       
  3554 **
       
  3555 **     SRT_Coroutine   Invoke a co-routine to compute a single row of 
       
  3556 **                     the result
       
  3557 **
       
  3558 **     SRT_Exists      Store a 1 in memory cell pDest->iParm if the result
       
  3559 **                     set is not empty.
       
  3560 **
       
  3561 **     SRT_Discard     Throw the results away.
       
  3562 **
       
  3563 ** See the selectInnerLoop() function for a canonical listing of the 
       
  3564 ** allowed values of eDest and their meanings.
       
  3565 **
       
  3566 ** This routine returns the number of errors.  If any errors are
       
  3567 ** encountered, then an appropriate error message is left in
       
  3568 ** pParse->zErrMsg.
       
  3569 **
       
  3570 ** This routine does NOT free the Select structure passed in.  The
       
  3571 ** calling function needs to do that.
       
  3572 **
       
  3573 ** The pParent, parentTab, and *pParentAgg fields are filled in if this
       
  3574 ** SELECT is a subquery.  This routine may try to combine this SELECT
       
  3575 ** with its parent to form a single flat query.  In so doing, it might
       
  3576 ** change the parent query from a non-aggregate to an aggregate query.
       
  3577 ** For that reason, the pParentAgg flag is passed as a pointer, so it
       
  3578 ** can be changed.
       
  3579 **
       
  3580 ** Example 1:   The meaning of the pParent parameter.
       
  3581 **
       
  3582 **    SELECT * FROM t1 JOIN (SELECT x, count(*) FROM t2) JOIN t3;
       
  3583 **    \                      \_______ subquery _______/        /
       
  3584 **     \                                                      /
       
  3585 **      \____________________ outer query ___________________/
       
  3586 **
       
  3587 ** This routine is called for the outer query first.   For that call,
       
  3588 ** pParent will be NULL.  During the processing of the outer query, this 
       
  3589 ** routine is called recursively to handle the subquery.  For the recursive
       
  3590 ** call, pParent will point to the outer query.  Because the subquery is
       
  3591 ** the second element in a three-way join, the parentTab parameter will
       
  3592 ** be 1 (the 2nd value of a 0-indexed array.)
       
  3593 */
       
  3594 int sqlite3Select(
       
  3595   Parse *pParse,         /* The parser context */
       
  3596   Select *p,             /* The SELECT statement being coded. */
       
  3597   SelectDest *pDest,     /* What to do with the query results */
       
  3598   Select *pParent,       /* Another SELECT for which this is a sub-query */
       
  3599   int parentTab,         /* Index in pParent->pSrc of this query */
       
  3600   int *pParentAgg        /* True if pParent uses aggregate functions */
       
  3601 ){
       
  3602   int i, j;              /* Loop counters */
       
  3603   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
       
  3604   Vdbe *v;               /* The virtual machine under construction */
       
  3605   int isAgg;             /* True for select lists like "count(*)" */
       
  3606   ExprList *pEList;      /* List of columns to extract. */
       
  3607   SrcList *pTabList;     /* List of tables to select from */
       
  3608   Expr *pWhere;          /* The WHERE clause.  May be NULL */
       
  3609   ExprList *pOrderBy;    /* The ORDER BY clause.  May be NULL */
       
  3610   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
       
  3611   Expr *pHaving;         /* The HAVING clause.  May be NULL */
       
  3612   int isDistinct;        /* True if the DISTINCT keyword is present */
       
  3613   int distinct;          /* Table to use for the distinct set */
       
  3614   int rc = 1;            /* Value to return from this function */
       
  3615   int addrSortIndex;     /* Address of an OP_OpenEphemeral instruction */
       
  3616   AggInfo sAggInfo;      /* Information used by aggregate queries */
       
  3617   int iEnd;              /* Address of the end of the query */
       
  3618   sqlite3 *db;           /* The database connection */
       
  3619 
       
  3620   db = pParse->db;
       
  3621   if( p==0 || db->mallocFailed || pParse->nErr ){
       
  3622     return 1;
       
  3623   }
       
  3624   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
       
  3625   memset(&sAggInfo, 0, sizeof(sAggInfo));
       
  3626 
       
  3627   pOrderBy = p->pOrderBy;
       
  3628   if( IgnorableOrderby(pDest) ){
       
  3629     p->pOrderBy = 0;
       
  3630 
       
  3631     /* In these cases the DISTINCT operator makes no difference to the
       
  3632     ** results, so remove it if it were specified.
       
  3633     */
       
  3634     assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 
       
  3635            pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard);
       
  3636     p->isDistinct = 0;
       
  3637   }
       
  3638   if( sqlite3SelectResolve(pParse, p, 0) ){
       
  3639     goto select_end;
       
  3640   }
       
  3641   p->pOrderBy = pOrderBy;
       
  3642 
       
  3643 
       
  3644   /* Make local copies of the parameters for this query.
       
  3645   */
       
  3646   pTabList = p->pSrc;
       
  3647   isAgg = p->isAgg;
       
  3648   pEList = p->pEList;
       
  3649   if( pEList==0 ) goto select_end;
       
  3650 
       
  3651   /* 
       
  3652   ** Do not even attempt to generate any code if we have already seen
       
  3653   ** errors before this routine starts.
       
  3654   */
       
  3655   if( pParse->nErr>0 ) goto select_end;
       
  3656 
       
  3657   /* ORDER BY is ignored for some destinations.
       
  3658   */
       
  3659   if( IgnorableOrderby(pDest) ){
       
  3660     pOrderBy = 0;
       
  3661   }
       
  3662 
       
  3663   /* Begin generating code.
       
  3664   */
       
  3665   v = sqlite3GetVdbe(pParse);
       
  3666   if( v==0 ) goto select_end;
       
  3667 
       
  3668   /* Generate code for all sub-queries in the FROM clause
       
  3669   */
       
  3670 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
       
  3671   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
       
  3672     struct SrcList_item *pItem = &pTabList->a[i];
       
  3673     SelectDest dest;
       
  3674     Select *pSub = pItem->pSelect;
       
  3675     int isAggSub;
       
  3676     char *zName = pItem->zName;
       
  3677 
       
  3678     if( pSub==0 || pItem->isPopulated ) continue;
       
  3679     if( zName!=0 ){   /* An sql view */
       
  3680       const char *zSavedAuthContext = pParse->zAuthContext;
       
  3681       pParse->zAuthContext = zName;
       
  3682       rc = sqlite3SelectResolve(pParse, pSub, 0);
       
  3683       pParse->zAuthContext = zSavedAuthContext;
       
  3684       if( rc ){
       
  3685         goto select_end;
       
  3686       }
       
  3687     }
       
  3688 
       
  3689     /* Increment Parse.nHeight by the height of the largest expression
       
  3690     ** tree refered to by this, the parent select. The child select
       
  3691     ** may contain expression trees of at most
       
  3692     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
       
  3693     ** more conservative than necessary, but much easier than enforcing
       
  3694     ** an exact limit.
       
  3695     */
       
  3696     pParse->nHeight += sqlite3SelectExprHeight(p);
       
  3697 
       
  3698     /* Check to see if the subquery can be absorbed into the parent. */
       
  3699     isAggSub = pSub->isAgg;
       
  3700     if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
       
  3701       if( isAggSub ){
       
  3702         p->isAgg = isAgg = 1;
       
  3703       }
       
  3704       i = -1;
       
  3705     }else{
       
  3706       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
       
  3707       sqlite3Select(pParse, pSub, &dest, p, i, &isAgg);
       
  3708     }
       
  3709     if( pParse->nErr || db->mallocFailed ){
       
  3710       goto select_end;
       
  3711     }
       
  3712     pParse->nHeight -= sqlite3SelectExprHeight(p);
       
  3713     pTabList = p->pSrc;
       
  3714     if( !IgnorableOrderby(pDest) ){
       
  3715       pOrderBy = p->pOrderBy;
       
  3716     }
       
  3717   }
       
  3718   pEList = p->pEList;
       
  3719 #endif
       
  3720   pWhere = p->pWhere;
       
  3721   pGroupBy = p->pGroupBy;
       
  3722   pHaving = p->pHaving;
       
  3723   isDistinct = p->isDistinct;
       
  3724 
       
  3725 #ifndef SQLITE_OMIT_COMPOUND_SELECT
       
  3726   /* If there is are a sequence of queries, do the earlier ones first.
       
  3727   */
       
  3728   if( p->pPrior ){
       
  3729     if( p->pRightmost==0 ){
       
  3730       Select *pLoop, *pRight = 0;
       
  3731       int cnt = 0;
       
  3732       int mxSelect;
       
  3733       for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
       
  3734         pLoop->pRightmost = p;
       
  3735         pLoop->pNext = pRight;
       
  3736         pRight = pLoop;
       
  3737       }
       
  3738       mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
       
  3739       if( mxSelect && cnt>mxSelect ){
       
  3740         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
       
  3741         return 1;
       
  3742       }
       
  3743     }
       
  3744     return multiSelect(pParse, p, pDest);
       
  3745   }
       
  3746 #endif
       
  3747 
       
  3748   /* If writing to memory or generating a set
       
  3749   ** only a single column may be output.
       
  3750   */
       
  3751 #ifndef SQLITE_OMIT_SUBQUERY
       
  3752   if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
       
  3753     goto select_end;
       
  3754   }
       
  3755 #endif
       
  3756 
       
  3757   /* If possible, rewrite the query to use GROUP BY instead of DISTINCT.
       
  3758   ** GROUP BY may use an index, DISTINCT never does.
       
  3759   */
       
  3760   if( p->isDistinct && !p->isAgg && !p->pGroupBy ){
       
  3761     p->pGroupBy = sqlite3ExprListDup(db, p->pEList);
       
  3762     pGroupBy = p->pGroupBy;
       
  3763     p->isDistinct = 0;
       
  3764     isDistinct = 0;
       
  3765   }
       
  3766 
       
  3767   /* If there is an ORDER BY clause, then this sorting
       
  3768   ** index might end up being unused if the data can be 
       
  3769   ** extracted in pre-sorted order.  If that is the case, then the
       
  3770   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
       
  3771   ** we figure out that the sorting index is not needed.  The addrSortIndex
       
  3772   ** variable is used to facilitate that change.
       
  3773   */
       
  3774   if( pOrderBy ){
       
  3775     KeyInfo *pKeyInfo;
       
  3776     pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
       
  3777     pOrderBy->iECursor = pParse->nTab++;
       
  3778     p->addrOpenEphm[2] = addrSortIndex =
       
  3779       sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
       
  3780                            pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
       
  3781                            (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
       
  3782   }else{
       
  3783     addrSortIndex = -1;
       
  3784   }
       
  3785 
       
  3786   /* If the output is destined for a temporary table, open that table.
       
  3787   */
       
  3788   if( pDest->eDest==SRT_EphemTab ){
       
  3789     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr);
       
  3790   }
       
  3791 
       
  3792   /* Set the limiter.
       
  3793   */
       
  3794   iEnd = sqlite3VdbeMakeLabel(v);
       
  3795   computeLimitRegisters(pParse, p, iEnd);
       
  3796 
       
  3797   /* Open a virtual index to use for the distinct set.
       
  3798   */
       
  3799   if( isDistinct ){
       
  3800     KeyInfo *pKeyInfo;
       
  3801     assert( isAgg || pGroupBy );
       
  3802     distinct = pParse->nTab++;
       
  3803     pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
       
  3804     sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
       
  3805                         (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
       
  3806   }else{
       
  3807     distinct = -1;
       
  3808   }
       
  3809 
       
  3810   /* Aggregate and non-aggregate queries are handled differently */
       
  3811   if( !isAgg && pGroupBy==0 ){
       
  3812     /* This case is for non-aggregate queries
       
  3813     ** Begin the database scan
       
  3814     */
       
  3815     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0);
       
  3816     if( pWInfo==0 ) goto select_end;
       
  3817 
       
  3818     /* If sorting index that was created by a prior OP_OpenEphemeral 
       
  3819     ** instruction ended up not being needed, then change the OP_OpenEphemeral
       
  3820     ** into an OP_Noop.
       
  3821     */
       
  3822     if( addrSortIndex>=0 && pOrderBy==0 ){
       
  3823       sqlite3VdbeChangeToNoop(v, addrSortIndex, 1);
       
  3824       p->addrOpenEphm[2] = -1;
       
  3825     }
       
  3826 
       
  3827     /* Use the standard inner loop
       
  3828     */
       
  3829     assert(!isDistinct);
       
  3830     selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, -1, pDest,
       
  3831                     pWInfo->iContinue, pWInfo->iBreak);
       
  3832 
       
  3833     /* End the database scan loop.
       
  3834     */
       
  3835     sqlite3WhereEnd(pWInfo);
       
  3836   }else{
       
  3837     /* This is the processing for aggregate queries */
       
  3838     NameContext sNC;    /* Name context for processing aggregate information */
       
  3839     int iAMem;          /* First Mem address for storing current GROUP BY */
       
  3840     int iBMem;          /* First Mem address for previous GROUP BY */
       
  3841     int iUseFlag;       /* Mem address holding flag indicating that at least
       
  3842                         ** one row of the input to the aggregator has been
       
  3843                         ** processed */
       
  3844     int iAbortFlag;     /* Mem address which causes query abort if positive */
       
  3845     int groupBySort;    /* Rows come from source in GROUP BY order */
       
  3846 
       
  3847 
       
  3848     /* The following variables hold addresses or labels for parts of the
       
  3849     ** virtual machine program we are putting together */
       
  3850     int addrOutputRow;      /* Start of subroutine that outputs a result row */
       
  3851     int regOutputRow;       /* Return address register for output subroutine */
       
  3852     int addrSetAbort;       /* Set the abort flag and return */
       
  3853     int addrInitializeLoop; /* Start of code that initializes the input loop */
       
  3854     int addrTopOfLoop;      /* Top of the input loop */
       
  3855     int addrEnd;            /* End of all processing */
       
  3856     int addrSortingIdx;     /* The OP_OpenEphemeral for the sorting index */
       
  3857     int addrReset;          /* Subroutine for resetting the accumulator */
       
  3858     int regReset;           /* Return address register for reset subroutine */
       
  3859 
       
  3860     addrEnd = sqlite3VdbeMakeLabel(v);
       
  3861 
       
  3862     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
       
  3863     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
       
  3864     ** SELECT statement.
       
  3865     */
       
  3866     memset(&sNC, 0, sizeof(sNC));
       
  3867     sNC.pParse = pParse;
       
  3868     sNC.pSrcList = pTabList;
       
  3869     sNC.pAggInfo = &sAggInfo;
       
  3870     sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
       
  3871     sAggInfo.pGroupBy = pGroupBy;
       
  3872     sqlite3ExprAnalyzeAggList(&sNC, pEList);
       
  3873     sqlite3ExprAnalyzeAggList(&sNC, pOrderBy);
       
  3874     if( pHaving ){
       
  3875       sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
       
  3876     }
       
  3877     sAggInfo.nAccumulator = sAggInfo.nColumn;
       
  3878     for(i=0; i<sAggInfo.nFunc; i++){
       
  3879       sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->pList);
       
  3880     }
       
  3881     if( db->mallocFailed ) goto select_end;
       
  3882 
       
  3883     /* Processing for aggregates with GROUP BY is very different and
       
  3884     ** much more complex than aggregates without a GROUP BY.
       
  3885     */
       
  3886     if( pGroupBy ){
       
  3887       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
       
  3888       int j1;
       
  3889 
       
  3890       /* Create labels that we will be needing
       
  3891       */
       
  3892       addrInitializeLoop = sqlite3VdbeMakeLabel(v);
       
  3893 
       
  3894       /* If there is a GROUP BY clause we might need a sorting index to
       
  3895       ** implement it.  Allocate that sorting index now.  If it turns out
       
  3896       ** that we do not need it after all, the OpenEphemeral instruction
       
  3897       ** will be converted into a Noop.  
       
  3898       */
       
  3899       sAggInfo.sortingIdx = pParse->nTab++;
       
  3900       pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
       
  3901       addrSortingIdx = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 
       
  3902           sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 
       
  3903           0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
       
  3904 
       
  3905       /* Initialize memory locations used by GROUP BY aggregate processing
       
  3906       */
       
  3907       iUseFlag = ++pParse->nMem;
       
  3908       iAbortFlag = ++pParse->nMem;
       
  3909       iAMem = pParse->nMem + 1;
       
  3910       pParse->nMem += pGroupBy->nExpr;
       
  3911       iBMem = pParse->nMem + 1;
       
  3912       pParse->nMem += pGroupBy->nExpr;
       
  3913       sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
       
  3914       VdbeComment((v, "clear abort flag"));
       
  3915       sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
       
  3916       VdbeComment((v, "indicate accumulator empty"));
       
  3917       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrInitializeLoop);
       
  3918 
       
  3919       /* Generate a subroutine that outputs a single row of the result
       
  3920       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
       
  3921       ** is less than or equal to zero, the subroutine is a no-op.  If
       
  3922       ** the processing calls for the query to abort, this subroutine
       
  3923       ** increments the iAbortFlag memory location before returning in
       
  3924       ** order to signal the caller to abort.
       
  3925       */
       
  3926       addrSetAbort = sqlite3VdbeCurrentAddr(v);
       
  3927       sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
       
  3928       VdbeComment((v, "set abort flag"));
       
  3929       regOutputRow = ++pParse->nMem;
       
  3930       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
       
  3931       addrOutputRow = sqlite3VdbeCurrentAddr(v);
       
  3932       sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
       
  3933       VdbeComment((v, "Groupby result generator entry point"));
       
  3934       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
       
  3935       finalizeAggFunctions(pParse, &sAggInfo);
       
  3936       if( pHaving ){
       
  3937         sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
       
  3938       }
       
  3939       selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
       
  3940                       distinct, pDest,
       
  3941                       addrOutputRow+1, addrSetAbort);
       
  3942       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
       
  3943       VdbeComment((v, "end groupby result generator"));
       
  3944 
       
  3945       /* Generate a subroutine that will reset the group-by accumulator
       
  3946       */
       
  3947       addrReset = sqlite3VdbeCurrentAddr(v);
       
  3948       regReset = ++pParse->nMem;
       
  3949       resetAccumulator(pParse, &sAggInfo);
       
  3950       sqlite3VdbeAddOp1(v, OP_Return, regReset);
       
  3951 
       
  3952       /* Begin a loop that will extract all source rows in GROUP BY order.
       
  3953       ** This might involve two separate loops with an OP_Sort in between, or
       
  3954       ** it might be a single loop that uses an index to extract information
       
  3955       ** in the right order to begin with.
       
  3956       */
       
  3957       sqlite3VdbeResolveLabel(v, addrInitializeLoop);
       
  3958       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
       
  3959       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0);
       
  3960       if( pWInfo==0 ) goto select_end;
       
  3961       if( pGroupBy==0 ){
       
  3962         /* The optimizer is able to deliver rows in group by order so
       
  3963         ** we do not have to sort.  The OP_OpenEphemeral table will be
       
  3964         ** cancelled later because we still need to use the pKeyInfo
       
  3965         */
       
  3966         pGroupBy = p->pGroupBy;
       
  3967         groupBySort = 0;
       
  3968       }else{
       
  3969         /* Rows are coming out in undetermined order.  We have to push
       
  3970         ** each row into a sorting index, terminate the first loop,
       
  3971         ** then loop over the sorting index in order to get the output
       
  3972         ** in sorted order
       
  3973         */
       
  3974         int regBase;
       
  3975         int regRecord;
       
  3976         int nCol;
       
  3977         int nGroupBy;
       
  3978 
       
  3979         groupBySort = 1;
       
  3980         nGroupBy = pGroupBy->nExpr;
       
  3981         nCol = nGroupBy + 1;
       
  3982         j = nGroupBy+1;
       
  3983         for(i=0; i<sAggInfo.nColumn; i++){
       
  3984           if( sAggInfo.aCol[i].iSorterColumn>=j ){
       
  3985             nCol++;
       
  3986             j++;
       
  3987           }
       
  3988         }
       
  3989         regBase = sqlite3GetTempRange(pParse, nCol);
       
  3990         sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
       
  3991         sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
       
  3992         j = nGroupBy+1;
       
  3993         for(i=0; i<sAggInfo.nColumn; i++){
       
  3994           struct AggInfo_col *pCol = &sAggInfo.aCol[i];
       
  3995           if( pCol->iSorterColumn>=j ){
       
  3996             int r1 = j + regBase;
       
  3997 #ifndef NDEBUG
       
  3998             int r2 = 
       
  3999 #endif
       
  4000                      sqlite3ExprCodeGetColumn(pParse, 
       
  4001                                pCol->pTab, pCol->iColumn, pCol->iTable, r1, 0);
       
  4002             j++;
       
  4003 
       
  4004             /* sAggInfo.aCol[] only contains one entry per column.  So
       
  4005             ** The reference to pCol->iColumn,pCol->iTable must have been
       
  4006             ** the first reference to that column.  Hence, 
       
  4007             ** sqliteExprCodeGetColumn is guaranteed to put the result in
       
  4008             ** the column requested. 
       
  4009             */
       
  4010             assert( r1==r2 );
       
  4011           }
       
  4012         }
       
  4013         regRecord = sqlite3GetTempReg(pParse);
       
  4014         sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
       
  4015         sqlite3VdbeAddOp2(v, OP_IdxInsert, sAggInfo.sortingIdx, regRecord);
       
  4016         sqlite3ReleaseTempReg(pParse, regRecord);
       
  4017         sqlite3ReleaseTempRange(pParse, regBase, nCol);
       
  4018         sqlite3WhereEnd(pWInfo);
       
  4019         sqlite3VdbeAddOp2(v, OP_Sort, sAggInfo.sortingIdx, addrEnd);
       
  4020         VdbeComment((v, "GROUP BY sort"));
       
  4021         sAggInfo.useSortingIdx = 1;
       
  4022       }
       
  4023 
       
  4024       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
       
  4025       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
       
  4026       ** Then compare the current GROUP BY terms against the GROUP BY terms
       
  4027       ** from the previous row currently stored in a0, a1, a2...
       
  4028       */
       
  4029       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
       
  4030       for(j=0; j<pGroupBy->nExpr; j++){
       
  4031         if( groupBySort ){
       
  4032           sqlite3VdbeAddOp3(v, OP_Column, sAggInfo.sortingIdx, j, iBMem+j);
       
  4033         }else{
       
  4034           sAggInfo.directMode = 1;
       
  4035           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
       
  4036         }
       
  4037       }
       
  4038       sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
       
  4039                           (char*)pKeyInfo, P4_KEYINFO);
       
  4040       j1 = sqlite3VdbeCurrentAddr(v);
       
  4041       sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1);
       
  4042 
       
  4043       /* Generate code that runs whenever the GROUP BY changes.
       
  4044       ** Changes in the GROUP BY are detected by the previous code
       
  4045       ** block.  If there were no changes, this block is skipped.
       
  4046       **
       
  4047       ** This code copies current group by terms in b0,b1,b2,...
       
  4048       ** over to a0,a1,a2.  It then calls the output subroutine
       
  4049       ** and resets the aggregate accumulator registers in preparation
       
  4050       ** for the next GROUP BY batch.
       
  4051       */
       
  4052       sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
       
  4053       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
       
  4054       VdbeComment((v, "output one row"));
       
  4055       sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd);
       
  4056       VdbeComment((v, "check abort flag"));
       
  4057       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
       
  4058       VdbeComment((v, "reset accumulator"));
       
  4059 
       
  4060       /* Update the aggregate accumulators based on the content of
       
  4061       ** the current row
       
  4062       */
       
  4063       sqlite3VdbeJumpHere(v, j1);
       
  4064       updateAccumulator(pParse, &sAggInfo);
       
  4065       sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
       
  4066       VdbeComment((v, "indicate data in accumulator"));
       
  4067 
       
  4068       /* End of the loop
       
  4069       */
       
  4070       if( groupBySort ){
       
  4071         sqlite3VdbeAddOp2(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop);
       
  4072       }else{
       
  4073         sqlite3WhereEnd(pWInfo);
       
  4074         sqlite3VdbeChangeToNoop(v, addrSortingIdx, 1);
       
  4075       }
       
  4076 
       
  4077       /* Output the final row of result
       
  4078       */
       
  4079       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
       
  4080       VdbeComment((v, "output final row"));
       
  4081       
       
  4082     } /* endif pGroupBy */
       
  4083     else {
       
  4084       ExprList *pMinMax = 0;
       
  4085       ExprList *pDel = 0;
       
  4086       u8 flag;
       
  4087 
       
  4088       /* Check if the query is of one of the following forms:
       
  4089       **
       
  4090       **   SELECT min(x) FROM ...
       
  4091       **   SELECT max(x) FROM ...
       
  4092       **
       
  4093       ** If it is, then ask the code in where.c to attempt to sort results
       
  4094       ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. 
       
  4095       ** If where.c is able to produce results sorted in this order, then
       
  4096       ** add vdbe code to break out of the processing loop after the 
       
  4097       ** first iteration (since the first iteration of the loop is 
       
  4098       ** guaranteed to operate on the row with the minimum or maximum 
       
  4099       ** value of x, the only row required).
       
  4100       **
       
  4101       ** A special flag must be passed to sqlite3WhereBegin() to slightly
       
  4102       ** modify behaviour as follows:
       
  4103       **
       
  4104       **   + If the query is a "SELECT min(x)", then the loop coded by
       
  4105       **     where.c should not iterate over any values with a NULL value
       
  4106       **     for x.
       
  4107       **
       
  4108       **   + The optimizer code in where.c (the thing that decides which
       
  4109       **     index or indices to use) should place a different priority on 
       
  4110       **     satisfying the 'ORDER BY' clause than it does in other cases.
       
  4111       **     Refer to code and comments in where.c for details.
       
  4112       */
       
  4113       flag = minMaxQuery(pParse, p);
       
  4114       if( flag ){
       
  4115         pDel = pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->pList);
       
  4116         if( pMinMax && !db->mallocFailed ){
       
  4117           pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN;
       
  4118           pMinMax->a[0].pExpr->op = TK_COLUMN;
       
  4119         }
       
  4120       }
       
  4121 
       
  4122       /* This case runs if the aggregate has no GROUP BY clause.  The
       
  4123       ** processing is much simpler since there is only a single row
       
  4124       ** of output.
       
  4125       */
       
  4126       resetAccumulator(pParse, &sAggInfo);
       
  4127       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, flag);
       
  4128       if( pWInfo==0 ){
       
  4129         sqlite3ExprListDelete(db, pDel);
       
  4130         goto select_end;
       
  4131       }
       
  4132       updateAccumulator(pParse, &sAggInfo);
       
  4133       if( !pMinMax && flag ){
       
  4134         sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak);
       
  4135         VdbeComment((v, "%s() by index",(flag==WHERE_ORDERBY_MIN?"min":"max")));
       
  4136       }
       
  4137       sqlite3WhereEnd(pWInfo);
       
  4138       finalizeAggFunctions(pParse, &sAggInfo);
       
  4139       pOrderBy = 0;
       
  4140       if( pHaving ){
       
  4141         sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
       
  4142       }
       
  4143       selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 
       
  4144                       pDest, addrEnd, addrEnd);
       
  4145 
       
  4146       sqlite3ExprListDelete(db, pDel);
       
  4147     }
       
  4148     sqlite3VdbeResolveLabel(v, addrEnd);
       
  4149     
       
  4150   } /* endif aggregate query */
       
  4151 
       
  4152   /* If there is an ORDER BY clause, then we need to sort the results
       
  4153   ** and send them to the callback one by one.
       
  4154   */
       
  4155   if( pOrderBy ){
       
  4156     generateSortTail(pParse, p, v, pEList->nExpr, pDest);
       
  4157   }
       
  4158 
       
  4159 #ifndef SQLITE_OMIT_SUBQUERY
       
  4160   /* If this was a subquery, we have now converted the subquery into a
       
  4161   ** temporary table.  So set the SrcList_item.isPopulated flag to prevent
       
  4162   ** this subquery from being evaluated again and to force the use of
       
  4163   ** the temporary table.
       
  4164   */
       
  4165   if( pParent ){
       
  4166     assert( pParent->pSrc->nSrc>parentTab );
       
  4167     assert( pParent->pSrc->a[parentTab].pSelect==p );
       
  4168     pParent->pSrc->a[parentTab].isPopulated = 1;
       
  4169   }
       
  4170 #endif
       
  4171 
       
  4172   /* Jump here to skip this query
       
  4173   */
       
  4174   sqlite3VdbeResolveLabel(v, iEnd);
       
  4175 
       
  4176   /* The SELECT was successfully coded.   Set the return code to 0
       
  4177   ** to indicate no errors.
       
  4178   */
       
  4179   rc = 0;
       
  4180 
       
  4181   /* Control jumps to here if an error is encountered above, or upon
       
  4182   ** successful coding of the SELECT.
       
  4183   */
       
  4184 select_end:
       
  4185 
       
  4186   /* Identify column names if we will be using them in a callback.  This
       
  4187   ** step is skipped if the output is going to some other destination.
       
  4188   */
       
  4189   if( rc==SQLITE_OK && pDest->eDest==SRT_Callback ){
       
  4190     generateColumnNames(pParse, pTabList, pEList);
       
  4191   }
       
  4192 
       
  4193   sqlite3DbFree(db, sAggInfo.aCol);
       
  4194   sqlite3DbFree(db, sAggInfo.aFunc);
       
  4195   return rc;
       
  4196 }
       
  4197 
       
  4198 #if defined(SQLITE_DEBUG)
       
  4199 /*
       
  4200 *******************************************************************************
       
  4201 ** The following code is used for testing and debugging only.  The code
       
  4202 ** that follows does not appear in normal builds.
       
  4203 **
       
  4204 ** These routines are used to print out the content of all or part of a 
       
  4205 ** parse structures such as Select or Expr.  Such printouts are useful
       
  4206 ** for helping to understand what is happening inside the code generator
       
  4207 ** during the execution of complex SELECT statements.
       
  4208 **
       
  4209 ** These routine are not called anywhere from within the normal
       
  4210 ** code base.  Then are intended to be called from within the debugger
       
  4211 ** or from temporary "printf" statements inserted for debugging.
       
  4212 */
       
  4213 void sqlite3PrintExpr(Expr *p){
       
  4214   if( p->token.z && p->token.n>0 ){
       
  4215     sqlite3DebugPrintf("(%.*s", p->token.n, p->token.z);
       
  4216   }else{
       
  4217     sqlite3DebugPrintf("(%d", p->op);
       
  4218   }
       
  4219   if( p->pLeft ){
       
  4220     sqlite3DebugPrintf(" ");
       
  4221     sqlite3PrintExpr(p->pLeft);
       
  4222   }
       
  4223   if( p->pRight ){
       
  4224     sqlite3DebugPrintf(" ");
       
  4225     sqlite3PrintExpr(p->pRight);
       
  4226   }
       
  4227   sqlite3DebugPrintf(")");
       
  4228 }
       
  4229 void sqlite3PrintExprList(ExprList *pList){
       
  4230   int i;
       
  4231   for(i=0; i<pList->nExpr; i++){
       
  4232     sqlite3PrintExpr(pList->a[i].pExpr);
       
  4233     if( i<pList->nExpr-1 ){
       
  4234       sqlite3DebugPrintf(", ");
       
  4235     }
       
  4236   }
       
  4237 }
       
  4238 void sqlite3PrintSelect(Select *p, int indent){
       
  4239   sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p);
       
  4240   sqlite3PrintExprList(p->pEList);
       
  4241   sqlite3DebugPrintf("\n");
       
  4242   if( p->pSrc ){
       
  4243     char *zPrefix;
       
  4244     int i;
       
  4245     zPrefix = "FROM";
       
  4246     for(i=0; i<p->pSrc->nSrc; i++){
       
  4247       struct SrcList_item *pItem = &p->pSrc->a[i];
       
  4248       sqlite3DebugPrintf("%*s ", indent+6, zPrefix);
       
  4249       zPrefix = "";
       
  4250       if( pItem->pSelect ){
       
  4251         sqlite3DebugPrintf("(\n");
       
  4252         sqlite3PrintSelect(pItem->pSelect, indent+10);
       
  4253         sqlite3DebugPrintf("%*s)", indent+8, "");
       
  4254       }else if( pItem->zName ){
       
  4255         sqlite3DebugPrintf("%s", pItem->zName);
       
  4256       }
       
  4257       if( pItem->pTab ){
       
  4258         sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName);
       
  4259       }
       
  4260       if( pItem->zAlias ){
       
  4261         sqlite3DebugPrintf(" AS %s", pItem->zAlias);
       
  4262       }
       
  4263       if( i<p->pSrc->nSrc-1 ){
       
  4264         sqlite3DebugPrintf(",");
       
  4265       }
       
  4266       sqlite3DebugPrintf("\n");
       
  4267     }
       
  4268   }
       
  4269   if( p->pWhere ){
       
  4270     sqlite3DebugPrintf("%*s WHERE ", indent, "");
       
  4271     sqlite3PrintExpr(p->pWhere);
       
  4272     sqlite3DebugPrintf("\n");
       
  4273   }
       
  4274   if( p->pGroupBy ){
       
  4275     sqlite3DebugPrintf("%*s GROUP BY ", indent, "");
       
  4276     sqlite3PrintExprList(p->pGroupBy);
       
  4277     sqlite3DebugPrintf("\n");
       
  4278   }
       
  4279   if( p->pHaving ){
       
  4280     sqlite3DebugPrintf("%*s HAVING ", indent, "");
       
  4281     sqlite3PrintExpr(p->pHaving);
       
  4282     sqlite3DebugPrintf("\n");
       
  4283   }
       
  4284   if( p->pOrderBy ){
       
  4285     sqlite3DebugPrintf("%*s ORDER BY ", indent, "");
       
  4286     sqlite3PrintExprList(p->pOrderBy);
       
  4287     sqlite3DebugPrintf("\n");
       
  4288   }
       
  4289 }
       
  4290 /* End of the structure debug printing code
       
  4291 *****************************************************************************/
       
  4292 #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */