extensions/sqlite/sqlite-source/select.c
author Matt Woodrow <pred@alliedmods.net>
Mon Aug 17 10:53:54 2009 +1200 (2009-08-17)
changeset 2771 ea849fc91a9b
parent 1952 b7aa2b626807
permissions -rw-r--r--
Forgot makefiles patch
     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$
    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(Select *p){
    25   sqlite3ExprListDelete(p->pEList);
    26   sqlite3SrcListDelete(p->pSrc);
    27   sqlite3ExprDelete(p->pWhere);
    28   sqlite3ExprListDelete(p->pGroupBy);
    29   sqlite3ExprDelete(p->pHaving);
    30   sqlite3ExprListDelete(p->pOrderBy);
    31   sqlite3SelectDelete(p->pPrior);
    32   sqlite3ExprDelete(p->pLimit);
    33   sqlite3ExprDelete(p->pOffset);
    34 }
    35 
    36 
    37 /*
    38 ** Allocate a new Select structure and return a pointer to that
    39 ** structure.
    40 */
    41 Select *sqlite3SelectNew(
    42   Parse *pParse,        /* Parsing context */
    43   ExprList *pEList,     /* which columns to include in the result */
    44   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
    45   Expr *pWhere,         /* the WHERE clause */
    46   ExprList *pGroupBy,   /* the GROUP BY clause */
    47   Expr *pHaving,        /* the HAVING clause */
    48   ExprList *pOrderBy,   /* the ORDER BY clause */
    49   int isDistinct,       /* true if the DISTINCT keyword is present */
    50   Expr *pLimit,         /* LIMIT value.  NULL means not used */
    51   Expr *pOffset         /* OFFSET value.  NULL means no offset */
    52 ){
    53   Select *pNew;
    54   Select standin;
    55   sqlite3 *db = pParse->db;
    56   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
    57   assert( !pOffset || pLimit );   /* Can't have OFFSET without LIMIT. */
    58   if( pNew==0 ){
    59     pNew = &standin;
    60     memset(pNew, 0, sizeof(*pNew));
    61   }
    62   if( pEList==0 ){
    63     pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0,0,0), 0);
    64   }
    65   pNew->pEList = pEList;
    66   pNew->pSrc = pSrc;
    67   pNew->pWhere = pWhere;
    68   pNew->pGroupBy = pGroupBy;
    69   pNew->pHaving = pHaving;
    70   pNew->pOrderBy = pOrderBy;
    71   pNew->isDistinct = isDistinct;
    72   pNew->op = TK_SELECT;
    73   assert( pOffset==0 || pLimit!=0 );
    74   pNew->pLimit = pLimit;
    75   pNew->pOffset = pOffset;
    76   pNew->iLimit = -1;
    77   pNew->iOffset = -1;
    78   pNew->addrOpenEphm[0] = -1;
    79   pNew->addrOpenEphm[1] = -1;
    80   pNew->addrOpenEphm[2] = -1;
    81   if( pNew==&standin) {
    82     clearSelect(pNew);
    83     pNew = 0;
    84   }
    85   return pNew;
    86 }
    87 
    88 /*
    89 ** Delete the given Select structure and all of its substructures.
    90 */
    91 void sqlite3SelectDelete(Select *p){
    92   if( p ){
    93     clearSelect(p);
    94     sqlite3_free(p);
    95   }
    96 }
    97 
    98 /*
    99 ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
   100 ** type of join.  Return an integer constant that expresses that type
   101 ** in terms of the following bit values:
   102 **
   103 **     JT_INNER
   104 **     JT_CROSS
   105 **     JT_OUTER
   106 **     JT_NATURAL
   107 **     JT_LEFT
   108 **     JT_RIGHT
   109 **
   110 ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
   111 **
   112 ** If an illegal or unsupported join type is seen, then still return
   113 ** a join type, but put an error in the pParse structure.
   114 */
   115 int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
   116   int jointype = 0;
   117   Token *apAll[3];
   118   Token *p;
   119   static const struct {
   120     const char zKeyword[8];
   121     u8 nChar;
   122     u8 code;
   123   } keywords[] = {
   124     { "natural", 7, JT_NATURAL },
   125     { "left",    4, JT_LEFT|JT_OUTER },
   126     { "right",   5, JT_RIGHT|JT_OUTER },
   127     { "full",    4, JT_LEFT|JT_RIGHT|JT_OUTER },
   128     { "outer",   5, JT_OUTER },
   129     { "inner",   5, JT_INNER },
   130     { "cross",   5, JT_INNER|JT_CROSS },
   131   };
   132   int i, j;
   133   apAll[0] = pA;
   134   apAll[1] = pB;
   135   apAll[2] = pC;
   136   for(i=0; i<3 && apAll[i]; i++){
   137     p = apAll[i];
   138     for(j=0; j<sizeof(keywords)/sizeof(keywords[0]); j++){
   139       if( p->n==keywords[j].nChar 
   140           && sqlite3StrNICmp((char*)p->z, keywords[j].zKeyword, p->n)==0 ){
   141         jointype |= keywords[j].code;
   142         break;
   143       }
   144     }
   145     if( j>=sizeof(keywords)/sizeof(keywords[0]) ){
   146       jointype |= JT_ERROR;
   147       break;
   148     }
   149   }
   150   if(
   151      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
   152      (jointype & JT_ERROR)!=0
   153   ){
   154     const char *zSp1 = " ";
   155     const char *zSp2 = " ";
   156     if( pB==0 ){ zSp1++; }
   157     if( pC==0 ){ zSp2++; }
   158     sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
   159        "%T%s%T%s%T", pA, zSp1, pB, zSp2, pC);
   160     jointype = JT_INNER;
   161   }else if( jointype & JT_RIGHT ){
   162     sqlite3ErrorMsg(pParse, 
   163       "RIGHT and FULL OUTER JOINs are not currently supported");
   164     jointype = JT_INNER;
   165   }
   166   return jointype;
   167 }
   168 
   169 /*
   170 ** Return the index of a column in a table.  Return -1 if the column
   171 ** is not contained in the table.
   172 */
   173 static int columnIndex(Table *pTab, const char *zCol){
   174   int i;
   175   for(i=0; i<pTab->nCol; i++){
   176     if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
   177   }
   178   return -1;
   179 }
   180 
   181 /*
   182 ** Set the value of a token to a '\000'-terminated string.
   183 */
   184 static void setToken(Token *p, const char *z){
   185   p->z = (u8*)z;
   186   p->n = z ? strlen(z) : 0;
   187   p->dyn = 0;
   188 }
   189 
   190 /*
   191 ** Set the token to the double-quoted and escaped version of the string pointed
   192 ** to by z. For example;
   193 **
   194 **    {a"bc}  ->  {"a""bc"}
   195 */
   196 static void setQuotedToken(Parse *pParse, Token *p, const char *z){
   197   p->z = (u8 *)sqlite3MPrintf(0, "\"%w\"", z);
   198   p->dyn = 1;
   199   if( p->z ){
   200     p->n = strlen((char *)p->z);
   201   }else{
   202     pParse->db->mallocFailed = 1;
   203   }
   204 }
   205 
   206 /*
   207 ** Create an expression node for an identifier with the name of zName
   208 */
   209 Expr *sqlite3CreateIdExpr(Parse *pParse, const char *zName){
   210   Token dummy;
   211   setToken(&dummy, zName);
   212   return sqlite3PExpr(pParse, TK_ID, 0, 0, &dummy);
   213 }
   214 
   215 
   216 /*
   217 ** Add a term to the WHERE expression in *ppExpr that requires the
   218 ** zCol column to be equal in the two tables pTab1 and pTab2.
   219 */
   220 static void addWhereTerm(
   221   Parse *pParse,           /* Parsing context */
   222   const char *zCol,        /* Name of the column */
   223   const Table *pTab1,      /* First table */
   224   const char *zAlias1,     /* Alias for first table.  May be NULL */
   225   const Table *pTab2,      /* Second table */
   226   const char *zAlias2,     /* Alias for second table.  May be NULL */
   227   int iRightJoinTable,     /* VDBE cursor for the right table */
   228   Expr **ppExpr            /* Add the equality term to this expression */
   229 ){
   230   Expr *pE1a, *pE1b, *pE1c;
   231   Expr *pE2a, *pE2b, *pE2c;
   232   Expr *pE;
   233 
   234   pE1a = sqlite3CreateIdExpr(pParse, zCol);
   235   pE2a = sqlite3CreateIdExpr(pParse, zCol);
   236   if( zAlias1==0 ){
   237     zAlias1 = pTab1->zName;
   238   }
   239   pE1b = sqlite3CreateIdExpr(pParse, zAlias1);
   240   if( zAlias2==0 ){
   241     zAlias2 = pTab2->zName;
   242   }
   243   pE2b = sqlite3CreateIdExpr(pParse, zAlias2);
   244   pE1c = sqlite3PExpr(pParse, TK_DOT, pE1b, pE1a, 0);
   245   pE2c = sqlite3PExpr(pParse, TK_DOT, pE2b, pE2a, 0);
   246   pE = sqlite3PExpr(pParse, TK_EQ, pE1c, pE2c, 0);
   247   if( pE ){
   248     ExprSetProperty(pE, EP_FromJoin);
   249     pE->iRightJoinTable = iRightJoinTable;
   250   }
   251   pE = sqlite3ExprAnd(pParse->db,*ppExpr, pE);
   252   if( pE ){
   253     *ppExpr = pE;
   254   }
   255 }
   256 
   257 /*
   258 ** Set the EP_FromJoin property on all terms of the given expression.
   259 ** And set the Expr.iRightJoinTable to iTable for every term in the
   260 ** expression.
   261 **
   262 ** The EP_FromJoin property is used on terms of an expression to tell
   263 ** the LEFT OUTER JOIN processing logic that this term is part of the
   264 ** join restriction specified in the ON or USING clause and not a part
   265 ** of the more general WHERE clause.  These terms are moved over to the
   266 ** WHERE clause during join processing but we need to remember that they
   267 ** originated in the ON or USING clause.
   268 **
   269 ** The Expr.iRightJoinTable tells the WHERE clause processing that the
   270 ** expression depends on table iRightJoinTable even if that table is not
   271 ** explicitly mentioned in the expression.  That information is needed
   272 ** for cases like this:
   273 **
   274 **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
   275 **
   276 ** The where clause needs to defer the handling of the t1.x=5
   277 ** term until after the t2 loop of the join.  In that way, a
   278 ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
   279 ** defer the handling of t1.x=5, it will be processed immediately
   280 ** after the t1 loop and rows with t1.x!=5 will never appear in
   281 ** the output, which is incorrect.
   282 */
   283 static void setJoinExpr(Expr *p, int iTable){
   284   while( p ){
   285     ExprSetProperty(p, EP_FromJoin);
   286     p->iRightJoinTable = iTable;
   287     setJoinExpr(p->pLeft, iTable);
   288     p = p->pRight;
   289   } 
   290 }
   291 
   292 /*
   293 ** This routine processes the join information for a SELECT statement.
   294 ** ON and USING clauses are converted into extra terms of the WHERE clause.
   295 ** NATURAL joins also create extra WHERE clause terms.
   296 **
   297 ** The terms of a FROM clause are contained in the Select.pSrc structure.
   298 ** The left most table is the first entry in Select.pSrc.  The right-most
   299 ** table is the last entry.  The join operator is held in the entry to
   300 ** the left.  Thus entry 0 contains the join operator for the join between
   301 ** entries 0 and 1.  Any ON or USING clauses associated with the join are
   302 ** also attached to the left entry.
   303 **
   304 ** This routine returns the number of errors encountered.
   305 */
   306 static int sqliteProcessJoin(Parse *pParse, Select *p){
   307   SrcList *pSrc;                  /* All tables in the FROM clause */
   308   int i, j;                       /* Loop counters */
   309   struct SrcList_item *pLeft;     /* Left table being joined */
   310   struct SrcList_item *pRight;    /* Right table being joined */
   311 
   312   pSrc = p->pSrc;
   313   pLeft = &pSrc->a[0];
   314   pRight = &pLeft[1];
   315   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
   316     Table *pLeftTab = pLeft->pTab;
   317     Table *pRightTab = pRight->pTab;
   318 
   319     if( pLeftTab==0 || pRightTab==0 ) continue;
   320 
   321     /* When the NATURAL keyword is present, add WHERE clause terms for
   322     ** every column that the two tables have in common.
   323     */
   324     if( pRight->jointype & JT_NATURAL ){
   325       if( pRight->pOn || pRight->pUsing ){
   326         sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
   327            "an ON or USING clause", 0);
   328         return 1;
   329       }
   330       for(j=0; j<pLeftTab->nCol; j++){
   331         char *zName = pLeftTab->aCol[j].zName;
   332         if( columnIndex(pRightTab, zName)>=0 ){
   333           addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, 
   334                               pRightTab, pRight->zAlias,
   335                               pRight->iCursor, &p->pWhere);
   336           
   337         }
   338       }
   339     }
   340 
   341     /* Disallow both ON and USING clauses in the same join
   342     */
   343     if( pRight->pOn && pRight->pUsing ){
   344       sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
   345         "clauses in the same join");
   346       return 1;
   347     }
   348 
   349     /* Add the ON clause to the end of the WHERE clause, connected by
   350     ** an AND operator.
   351     */
   352     if( pRight->pOn ){
   353       setJoinExpr(pRight->pOn, pRight->iCursor);
   354       p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
   355       pRight->pOn = 0;
   356     }
   357 
   358     /* Create extra terms on the WHERE clause for each column named
   359     ** in the USING clause.  Example: If the two tables to be joined are 
   360     ** A and B and the USING clause names X, Y, and Z, then add this
   361     ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
   362     ** Report an error if any column mentioned in the USING clause is
   363     ** not contained in both tables to be joined.
   364     */
   365     if( pRight->pUsing ){
   366       IdList *pList = pRight->pUsing;
   367       for(j=0; j<pList->nId; j++){
   368         char *zName = pList->a[j].zName;
   369         if( columnIndex(pLeftTab, zName)<0 || columnIndex(pRightTab, zName)<0 ){
   370           sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
   371             "not present in both tables", zName);
   372           return 1;
   373         }
   374         addWhereTerm(pParse, zName, pLeftTab, pLeft->zAlias, 
   375                             pRightTab, pRight->zAlias,
   376                             pRight->iCursor, &p->pWhere);
   377       }
   378     }
   379   }
   380   return 0;
   381 }
   382 
   383 /*
   384 ** Insert code into "v" that will push the record on the top of the
   385 ** stack into the sorter.
   386 */
   387 static void pushOntoSorter(
   388   Parse *pParse,         /* Parser context */
   389   ExprList *pOrderBy,    /* The ORDER BY clause */
   390   Select *pSelect        /* The whole SELECT statement */
   391 ){
   392   Vdbe *v = pParse->pVdbe;
   393   sqlite3ExprCodeExprList(pParse, pOrderBy);
   394   sqlite3VdbeAddOp(v, OP_Sequence, pOrderBy->iECursor, 0);
   395   sqlite3VdbeAddOp(v, OP_Pull, pOrderBy->nExpr + 1, 0);
   396   sqlite3VdbeAddOp(v, OP_MakeRecord, pOrderBy->nExpr + 2, 0);
   397   sqlite3VdbeAddOp(v, OP_IdxInsert, pOrderBy->iECursor, 0);
   398   if( pSelect->iLimit>=0 ){
   399     int addr1, addr2;
   400     addr1 = sqlite3VdbeAddOp(v, OP_IfMemZero, pSelect->iLimit+1, 0);
   401     sqlite3VdbeAddOp(v, OP_MemIncr, -1, pSelect->iLimit+1);
   402     addr2 = sqlite3VdbeAddOp(v, OP_Goto, 0, 0);
   403     sqlite3VdbeJumpHere(v, addr1);
   404     sqlite3VdbeAddOp(v, OP_Last, pOrderBy->iECursor, 0);
   405     sqlite3VdbeAddOp(v, OP_Delete, pOrderBy->iECursor, 0);
   406     sqlite3VdbeJumpHere(v, addr2);
   407     pSelect->iLimit = -1;
   408   }
   409 }
   410 
   411 /*
   412 ** Add code to implement the OFFSET
   413 */
   414 static void codeOffset(
   415   Vdbe *v,          /* Generate code into this VM */
   416   Select *p,        /* The SELECT statement being coded */
   417   int iContinue,    /* Jump here to skip the current record */
   418   int nPop          /* Number of times to pop stack when jumping */
   419 ){
   420   if( p->iOffset>=0 && iContinue!=0 ){
   421     int addr;
   422     sqlite3VdbeAddOp(v, OP_MemIncr, -1, p->iOffset);
   423     addr = sqlite3VdbeAddOp(v, OP_IfMemNeg, p->iOffset, 0);
   424     if( nPop>0 ){
   425       sqlite3VdbeAddOp(v, OP_Pop, nPop, 0);
   426     }
   427     sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue);
   428     VdbeComment((v, "# skip OFFSET records"));
   429     sqlite3VdbeJumpHere(v, addr);
   430   }
   431 }
   432 
   433 /*
   434 ** Add code that will check to make sure the top N elements of the
   435 ** stack are distinct.  iTab is a sorting index that holds previously
   436 ** seen combinations of the N values.  A new entry is made in iTab
   437 ** if the current N values are new.
   438 **
   439 ** A jump to addrRepeat is made and the N+1 values are popped from the
   440 ** stack if the top N elements are not distinct.
   441 */
   442 static void codeDistinct(
   443   Vdbe *v,           /* Generate code into this VM */
   444   int iTab,          /* A sorting index used to test for distinctness */
   445   int addrRepeat,    /* Jump to here if not distinct */
   446   int N              /* The top N elements of the stack must be distinct */
   447 ){
   448   sqlite3VdbeAddOp(v, OP_MakeRecord, -N, 0);
   449   sqlite3VdbeAddOp(v, OP_Distinct, iTab, sqlite3VdbeCurrentAddr(v)+3);
   450   sqlite3VdbeAddOp(v, OP_Pop, N+1, 0);
   451   sqlite3VdbeAddOp(v, OP_Goto, 0, addrRepeat);
   452   VdbeComment((v, "# skip indistinct records"));
   453   sqlite3VdbeAddOp(v, OP_IdxInsert, iTab, 0);
   454 }
   455 
   456 /*
   457 ** Generate an error message when a SELECT is used within a subexpression
   458 ** (example:  "a IN (SELECT * FROM table)") but it has more than 1 result
   459 ** column.  We do this in a subroutine because the error occurs in multiple
   460 ** places.
   461 */
   462 static int checkForMultiColumnSelectError(Parse *pParse, int eDest, int nExpr){
   463   if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
   464     sqlite3ErrorMsg(pParse, "only a single result allowed for "
   465        "a SELECT that is part of an expression");
   466     return 1;
   467   }else{
   468     return 0;
   469   }
   470 }
   471 
   472 /*
   473 ** This routine generates the code for the inside of the inner loop
   474 ** of a SELECT.
   475 **
   476 ** If srcTab and nColumn are both zero, then the pEList expressions
   477 ** are evaluated in order to get the data for this row.  If nColumn>0
   478 ** then data is pulled from srcTab and pEList is used only to get the
   479 ** datatypes for each column.
   480 */
   481 static int selectInnerLoop(
   482   Parse *pParse,          /* The parser context */
   483   Select *p,              /* The complete select statement being coded */
   484   ExprList *pEList,       /* List of values being extracted */
   485   int srcTab,             /* Pull data from this table */
   486   int nColumn,            /* Number of columns in the source table */
   487   ExprList *pOrderBy,     /* If not NULL, sort results using this key */
   488   int distinct,           /* If >=0, make sure results are distinct */
   489   int eDest,              /* How to dispose of the results */
   490   int iParm,              /* An argument to the disposal method */
   491   int iContinue,          /* Jump here to continue with next row */
   492   int iBreak,             /* Jump here to break out of the inner loop */
   493   char *aff               /* affinity string if eDest is SRT_Union */
   494 ){
   495   Vdbe *v = pParse->pVdbe;
   496   int i;
   497   int hasDistinct;        /* True if the DISTINCT keyword is present */
   498 
   499   if( v==0 ) return 0;
   500   assert( pEList!=0 );
   501 
   502   /* If there was a LIMIT clause on the SELECT statement, then do the check
   503   ** to see if this row should be output.
   504   */
   505   hasDistinct = distinct>=0 && pEList->nExpr>0;
   506   if( pOrderBy==0 && !hasDistinct ){
   507     codeOffset(v, p, iContinue, 0);
   508   }
   509 
   510   /* Pull the requested columns.
   511   */
   512   if( nColumn>0 ){
   513     for(i=0; i<nColumn; i++){
   514       sqlite3VdbeAddOp(v, OP_Column, srcTab, i);
   515     }
   516   }else{
   517     nColumn = pEList->nExpr;
   518     sqlite3ExprCodeExprList(pParse, pEList);
   519   }
   520 
   521   /* If the DISTINCT keyword was present on the SELECT statement
   522   ** and this row has been seen before, then do not make this row
   523   ** part of the result.
   524   */
   525   if( hasDistinct ){
   526     assert( pEList!=0 );
   527     assert( pEList->nExpr==nColumn );
   528     codeDistinct(v, distinct, iContinue, nColumn);
   529     if( pOrderBy==0 ){
   530       codeOffset(v, p, iContinue, nColumn);
   531     }
   532   }
   533 
   534   if( checkForMultiColumnSelectError(pParse, eDest, pEList->nExpr) ){
   535     return 0;
   536   }
   537 
   538   switch( eDest ){
   539     /* In this mode, write each query result to the key of the temporary
   540     ** table iParm.
   541     */
   542 #ifndef SQLITE_OMIT_COMPOUND_SELECT
   543     case SRT_Union: {
   544       sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);
   545       if( aff ){
   546         sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC);
   547       }
   548       sqlite3VdbeAddOp(v, OP_IdxInsert, iParm, 0);
   549       break;
   550     }
   551 
   552     /* Construct a record from the query result, but instead of
   553     ** saving that record, use it as a key to delete elements from
   554     ** the temporary table iParm.
   555     */
   556     case SRT_Except: {
   557       int addr;
   558       addr = sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);
   559       sqlite3VdbeChangeP3(v, -1, aff, P3_STATIC);
   560       sqlite3VdbeAddOp(v, OP_NotFound, iParm, addr+3);
   561       sqlite3VdbeAddOp(v, OP_Delete, iParm, 0);
   562       break;
   563     }
   564 #endif
   565 
   566     /* Store the result as data using a unique key.
   567     */
   568     case SRT_Table:
   569     case SRT_EphemTab: {
   570       sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);
   571       if( pOrderBy ){
   572         pushOntoSorter(pParse, pOrderBy, p);
   573       }else{
   574         sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0);
   575         sqlite3VdbeAddOp(v, OP_Pull, 1, 0);
   576         sqlite3VdbeAddOp(v, OP_Insert, iParm, OPFLAG_APPEND);
   577       }
   578       break;
   579     }
   580 
   581 #ifndef SQLITE_OMIT_SUBQUERY
   582     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
   583     ** then there should be a single item on the stack.  Write this
   584     ** item into the set table with bogus data.
   585     */
   586     case SRT_Set: {
   587       int addr1 = sqlite3VdbeCurrentAddr(v);
   588       int addr2;
   589 
   590       assert( nColumn==1 );
   591       sqlite3VdbeAddOp(v, OP_NotNull, -1, addr1+3);
   592       sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
   593       addr2 = sqlite3VdbeAddOp(v, OP_Goto, 0, 0);
   594       p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr,(iParm>>16)&0xff);
   595       if( pOrderBy ){
   596         /* At first glance you would think we could optimize out the
   597         ** ORDER BY in this case since the order of entries in the set
   598         ** does not matter.  But there might be a LIMIT clause, in which
   599         ** case the order does matter */
   600         pushOntoSorter(pParse, pOrderBy, p);
   601       }else{
   602         sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &p->affinity, 1);
   603         sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0);
   604       }
   605       sqlite3VdbeJumpHere(v, addr2);
   606       break;
   607     }
   608 
   609     /* If any row exist in the result set, record that fact and abort.
   610     */
   611     case SRT_Exists: {
   612       sqlite3VdbeAddOp(v, OP_MemInt, 1, iParm);
   613       sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0);
   614       /* The LIMIT clause will terminate the loop for us */
   615       break;
   616     }
   617 
   618     /* If this is a scalar select that is part of an expression, then
   619     ** store the results in the appropriate memory cell and break out
   620     ** of the scan loop.
   621     */
   622     case SRT_Mem: {
   623       assert( nColumn==1 );
   624       if( pOrderBy ){
   625         pushOntoSorter(pParse, pOrderBy, p);
   626       }else{
   627         sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1);
   628         /* The LIMIT clause will jump out of the loop for us */
   629       }
   630       break;
   631     }
   632 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
   633 
   634     /* Send the data to the callback function or to a subroutine.  In the
   635     ** case of a subroutine, the subroutine itself is responsible for
   636     ** popping the data from the stack.
   637     */
   638     case SRT_Subroutine:
   639     case SRT_Callback: {
   640       if( pOrderBy ){
   641         sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0);
   642         pushOntoSorter(pParse, pOrderBy, p);
   643       }else if( eDest==SRT_Subroutine ){
   644         sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm);
   645       }else{
   646         sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0);
   647       }
   648       break;
   649     }
   650 
   651 #if !defined(SQLITE_OMIT_TRIGGER)
   652     /* Discard the results.  This is used for SELECT statements inside
   653     ** the body of a TRIGGER.  The purpose of such selects is to call
   654     ** user-defined functions that have side effects.  We do not care
   655     ** about the actual results of the select.
   656     */
   657     default: {
   658       assert( eDest==SRT_Discard );
   659       sqlite3VdbeAddOp(v, OP_Pop, nColumn, 0);
   660       break;
   661     }
   662 #endif
   663   }
   664 
   665   /* Jump to the end of the loop if the LIMIT is reached.
   666   */
   667   if( p->iLimit>=0 && pOrderBy==0 ){
   668     sqlite3VdbeAddOp(v, OP_MemIncr, -1, p->iLimit);
   669     sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, iBreak);
   670   }
   671   return 0;
   672 }
   673 
   674 /*
   675 ** Given an expression list, generate a KeyInfo structure that records
   676 ** the collating sequence for each expression in that expression list.
   677 **
   678 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
   679 ** KeyInfo structure is appropriate for initializing a virtual index to
   680 ** implement that clause.  If the ExprList is the result set of a SELECT
   681 ** then the KeyInfo structure is appropriate for initializing a virtual
   682 ** index to implement a DISTINCT test.
   683 **
   684 ** Space to hold the KeyInfo structure is obtain from malloc.  The calling
   685 ** function is responsible for seeing that this structure is eventually
   686 ** freed.  Add the KeyInfo structure to the P3 field of an opcode using
   687 ** P3_KEYINFO_HANDOFF is the usual way of dealing with this.
   688 */
   689 static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
   690   sqlite3 *db = pParse->db;
   691   int nExpr;
   692   KeyInfo *pInfo;
   693   struct ExprList_item *pItem;
   694   int i;
   695 
   696   nExpr = pList->nExpr;
   697   pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
   698   if( pInfo ){
   699     pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
   700     pInfo->nField = nExpr;
   701     pInfo->enc = ENC(db);
   702     for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
   703       CollSeq *pColl;
   704       pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
   705       if( !pColl ){
   706         pColl = db->pDfltColl;
   707       }
   708       pInfo->aColl[i] = pColl;
   709       pInfo->aSortOrder[i] = pItem->sortOrder;
   710     }
   711   }
   712   return pInfo;
   713 }
   714 
   715 
   716 /*
   717 ** If the inner loop was generated using a non-null pOrderBy argument,
   718 ** then the results were placed in a sorter.  After the loop is terminated
   719 ** we need to run the sorter and output the results.  The following
   720 ** routine generates the code needed to do that.
   721 */
   722 static void generateSortTail(
   723   Parse *pParse,   /* Parsing context */
   724   Select *p,       /* The SELECT statement */
   725   Vdbe *v,         /* Generate code into this VDBE */
   726   int nColumn,     /* Number of columns of data */
   727   int eDest,       /* Write the sorted results here */
   728   int iParm        /* Optional parameter associated with eDest */
   729 ){
   730   int brk = sqlite3VdbeMakeLabel(v);
   731   int cont = sqlite3VdbeMakeLabel(v);
   732   int addr;
   733   int iTab;
   734   int pseudoTab = 0;
   735   ExprList *pOrderBy = p->pOrderBy;
   736 
   737   iTab = pOrderBy->iECursor;
   738   if( eDest==SRT_Callback || eDest==SRT_Subroutine ){
   739     pseudoTab = pParse->nTab++;
   740     sqlite3VdbeAddOp(v, OP_OpenPseudo, pseudoTab, 0);
   741     sqlite3VdbeAddOp(v, OP_SetNumColumns, pseudoTab, nColumn);
   742   }
   743   addr = 1 + sqlite3VdbeAddOp(v, OP_Sort, iTab, brk);
   744   codeOffset(v, p, cont, 0);
   745   if( eDest==SRT_Callback || eDest==SRT_Subroutine ){
   746     sqlite3VdbeAddOp(v, OP_Integer, 1, 0);
   747   }
   748   sqlite3VdbeAddOp(v, OP_Column, iTab, pOrderBy->nExpr + 1);
   749   switch( eDest ){
   750     case SRT_Table:
   751     case SRT_EphemTab: {
   752       sqlite3VdbeAddOp(v, OP_NewRowid, iParm, 0);
   753       sqlite3VdbeAddOp(v, OP_Pull, 1, 0);
   754       sqlite3VdbeAddOp(v, OP_Insert, iParm, OPFLAG_APPEND);
   755       break;
   756     }
   757 #ifndef SQLITE_OMIT_SUBQUERY
   758     case SRT_Set: {
   759       assert( nColumn==1 );
   760       sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3);
   761       sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
   762       sqlite3VdbeAddOp(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+3);
   763       sqlite3VdbeOp3(v, OP_MakeRecord, 1, 0, &p->affinity, 1);
   764       sqlite3VdbeAddOp(v, OP_IdxInsert, (iParm&0x0000FFFF), 0);
   765       break;
   766     }
   767     case SRT_Mem: {
   768       assert( nColumn==1 );
   769       sqlite3VdbeAddOp(v, OP_MemStore, iParm, 1);
   770       /* The LIMIT clause will terminate the loop for us */
   771       break;
   772     }
   773 #endif
   774     case SRT_Callback:
   775     case SRT_Subroutine: {
   776       int i;
   777       sqlite3VdbeAddOp(v, OP_Insert, pseudoTab, 0);
   778       for(i=0; i<nColumn; i++){
   779         sqlite3VdbeAddOp(v, OP_Column, pseudoTab, i);
   780       }
   781       if( eDest==SRT_Callback ){
   782         sqlite3VdbeAddOp(v, OP_Callback, nColumn, 0);
   783       }else{
   784         sqlite3VdbeAddOp(v, OP_Gosub, 0, iParm);
   785       }
   786       break;
   787     }
   788     default: {
   789       /* Do nothing */
   790       break;
   791     }
   792   }
   793 
   794   /* Jump to the end of the loop when the LIMIT is reached
   795   */
   796   if( p->iLimit>=0 ){
   797     sqlite3VdbeAddOp(v, OP_MemIncr, -1, p->iLimit);
   798     sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, brk);
   799   }
   800 
   801   /* The bottom of the loop
   802   */
   803   sqlite3VdbeResolveLabel(v, cont);
   804   sqlite3VdbeAddOp(v, OP_Next, iTab, addr);
   805   sqlite3VdbeResolveLabel(v, brk);
   806   if( eDest==SRT_Callback || eDest==SRT_Subroutine ){
   807     sqlite3VdbeAddOp(v, OP_Close, pseudoTab, 0);
   808   }
   809 
   810 }
   811 
   812 /*
   813 ** Return a pointer to a string containing the 'declaration type' of the
   814 ** expression pExpr. The string may be treated as static by the caller.
   815 **
   816 ** The declaration type is the exact datatype definition extracted from the
   817 ** original CREATE TABLE statement if the expression is a column. The
   818 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
   819 ** is considered a column can be complex in the presence of subqueries. The
   820 ** result-set expression in all of the following SELECT statements is 
   821 ** considered a column by this function.
   822 **
   823 **   SELECT col FROM tbl;
   824 **   SELECT (SELECT col FROM tbl;
   825 **   SELECT (SELECT col FROM tbl);
   826 **   SELECT abc FROM (SELECT col AS abc FROM tbl);
   827 ** 
   828 ** The declaration type for any expression other than a column is NULL.
   829 */
   830 static const char *columnType(
   831   NameContext *pNC, 
   832   Expr *pExpr,
   833   const char **pzOriginDb,
   834   const char **pzOriginTab,
   835   const char **pzOriginCol
   836 ){
   837   char const *zType = 0;
   838   char const *zOriginDb = 0;
   839   char const *zOriginTab = 0;
   840   char const *zOriginCol = 0;
   841   int j;
   842   if( pExpr==0 || pNC->pSrcList==0 ) return 0;
   843 
   844   switch( pExpr->op ){
   845     case TK_AGG_COLUMN:
   846     case TK_COLUMN: {
   847       /* The expression is a column. Locate the table the column is being
   848       ** extracted from in NameContext.pSrcList. This table may be real
   849       ** database table or a subquery.
   850       */
   851       Table *pTab = 0;            /* Table structure column is extracted from */
   852       Select *pS = 0;             /* Select the column is extracted from */
   853       int iCol = pExpr->iColumn;  /* Index of column in pTab */
   854       while( pNC && !pTab ){
   855         SrcList *pTabList = pNC->pSrcList;
   856         for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
   857         if( j<pTabList->nSrc ){
   858           pTab = pTabList->a[j].pTab;
   859           pS = pTabList->a[j].pSelect;
   860         }else{
   861           pNC = pNC->pNext;
   862         }
   863       }
   864 
   865       if( pTab==0 ){
   866         /* FIX ME:
   867         ** This can occurs if you have something like "SELECT new.x;" inside
   868         ** a trigger.  In other words, if you reference the special "new"
   869         ** table in the result set of a select.  We do not have a good way
   870         ** to find the actual table type, so call it "TEXT".  This is really
   871         ** something of a bug, but I do not know how to fix it.
   872         **
   873         ** This code does not produce the correct answer - it just prevents
   874         ** a segfault.  See ticket #1229.
   875         */
   876         zType = "TEXT";
   877         break;
   878       }
   879 
   880       assert( pTab );
   881       if( pS ){
   882         /* The "table" is actually a sub-select or a view in the FROM clause
   883         ** of the SELECT statement. Return the declaration type and origin
   884         ** data for the result-set column of the sub-select.
   885         */
   886         if( iCol>=0 && iCol<pS->pEList->nExpr ){
   887           /* If iCol is less than zero, then the expression requests the
   888           ** rowid of the sub-select or view. This expression is legal (see 
   889           ** test case misc2.2.2) - it always evaluates to NULL.
   890           */
   891           NameContext sNC;
   892           Expr *p = pS->pEList->a[iCol].pExpr;
   893           sNC.pSrcList = pS->pSrc;
   894           sNC.pNext = 0;
   895           sNC.pParse = pNC->pParse;
   896           zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
   897         }
   898       }else if( pTab->pSchema ){
   899         /* A real table */
   900         assert( !pS );
   901         if( iCol<0 ) iCol = pTab->iPKey;
   902         assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
   903         if( iCol<0 ){
   904           zType = "INTEGER";
   905           zOriginCol = "rowid";
   906         }else{
   907           zType = pTab->aCol[iCol].zType;
   908           zOriginCol = pTab->aCol[iCol].zName;
   909         }
   910         zOriginTab = pTab->zName;
   911         if( pNC->pParse ){
   912           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
   913           zOriginDb = pNC->pParse->db->aDb[iDb].zName;
   914         }
   915       }
   916       break;
   917     }
   918 #ifndef SQLITE_OMIT_SUBQUERY
   919     case TK_SELECT: {
   920       /* The expression is a sub-select. Return the declaration type and
   921       ** origin info for the single column in the result set of the SELECT
   922       ** statement.
   923       */
   924       NameContext sNC;
   925       Select *pS = pExpr->pSelect;
   926       Expr *p = pS->pEList->a[0].pExpr;
   927       sNC.pSrcList = pS->pSrc;
   928       sNC.pNext = pNC;
   929       sNC.pParse = pNC->pParse;
   930       zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
   931       break;
   932     }
   933 #endif
   934   }
   935   
   936   if( pzOriginDb ){
   937     assert( pzOriginTab && pzOriginCol );
   938     *pzOriginDb = zOriginDb;
   939     *pzOriginTab = zOriginTab;
   940     *pzOriginCol = zOriginCol;
   941   }
   942   return zType;
   943 }
   944 
   945 /*
   946 ** Generate code that will tell the VDBE the declaration types of columns
   947 ** in the result set.
   948 */
   949 static void generateColumnTypes(
   950   Parse *pParse,      /* Parser context */
   951   SrcList *pTabList,  /* List of tables */
   952   ExprList *pEList    /* Expressions defining the result set */
   953 ){
   954   Vdbe *v = pParse->pVdbe;
   955   int i;
   956   NameContext sNC;
   957   sNC.pSrcList = pTabList;
   958   sNC.pParse = pParse;
   959   for(i=0; i<pEList->nExpr; i++){
   960     Expr *p = pEList->a[i].pExpr;
   961     const char *zOrigDb = 0;
   962     const char *zOrigTab = 0;
   963     const char *zOrigCol = 0;
   964     const char *zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
   965 
   966     /* The vdbe must make it's own copy of the column-type and other 
   967     ** column specific strings, in case the schema is reset before this
   968     ** virtual machine is deleted.
   969     */
   970     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, P3_TRANSIENT);
   971     sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, P3_TRANSIENT);
   972     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, P3_TRANSIENT);
   973     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, P3_TRANSIENT);
   974   }
   975 }
   976 
   977 /*
   978 ** Generate code that will tell the VDBE the names of columns
   979 ** in the result set.  This information is used to provide the
   980 ** azCol[] values in the callback.
   981 */
   982 static void generateColumnNames(
   983   Parse *pParse,      /* Parser context */
   984   SrcList *pTabList,  /* List of tables */
   985   ExprList *pEList    /* Expressions defining the result set */
   986 ){
   987   Vdbe *v = pParse->pVdbe;
   988   int i, j;
   989   sqlite3 *db = pParse->db;
   990   int fullNames, shortNames;
   991 
   992 #ifndef SQLITE_OMIT_EXPLAIN
   993   /* If this is an EXPLAIN, skip this step */
   994   if( pParse->explain ){
   995     return;
   996   }
   997 #endif
   998 
   999   assert( v!=0 );
  1000   if( pParse->colNamesSet || v==0 || db->mallocFailed ) return;
  1001   pParse->colNamesSet = 1;
  1002   fullNames = (db->flags & SQLITE_FullColNames)!=0;
  1003   shortNames = (db->flags & SQLITE_ShortColNames)!=0;
  1004   sqlite3VdbeSetNumCols(v, pEList->nExpr);
  1005   for(i=0; i<pEList->nExpr; i++){
  1006     Expr *p;
  1007     p = pEList->a[i].pExpr;
  1008     if( p==0 ) continue;
  1009     if( pEList->a[i].zName ){
  1010       char *zName = pEList->a[i].zName;
  1011       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, strlen(zName));
  1012       continue;
  1013     }
  1014     if( p->op==TK_COLUMN && pTabList ){
  1015       Table *pTab;
  1016       char *zCol;
  1017       int iCol = p->iColumn;
  1018       for(j=0; j<pTabList->nSrc && pTabList->a[j].iCursor!=p->iTable; j++){}
  1019       assert( j<pTabList->nSrc );
  1020       pTab = pTabList->a[j].pTab;
  1021       if( iCol<0 ) iCol = pTab->iPKey;
  1022       assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
  1023       if( iCol<0 ){
  1024         zCol = "rowid";
  1025       }else{
  1026         zCol = pTab->aCol[iCol].zName;
  1027       }
  1028       if( !shortNames && !fullNames && p->span.z && p->span.z[0] ){
  1029         sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);
  1030       }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){
  1031         char *zName = 0;
  1032         char *zTab;
  1033  
  1034         zTab = pTabList->a[j].zAlias;
  1035         if( fullNames || zTab==0 ) zTab = pTab->zName;
  1036         sqlite3SetString(&zName, zTab, ".", zCol, (char*)0);
  1037         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, P3_DYNAMIC);
  1038       }else{
  1039         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, strlen(zCol));
  1040       }
  1041     }else if( p->span.z && p->span.z[0] ){
  1042       sqlite3VdbeSetColName(v, i, COLNAME_NAME, (char*)p->span.z, p->span.n);
  1043       /* sqlite3VdbeCompressSpace(v, addr); */
  1044     }else{
  1045       char zName[30];
  1046       assert( p->op!=TK_COLUMN || pTabList==0 );
  1047       sqlite3_snprintf(sizeof(zName), zName, "column%d", i+1);
  1048       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, 0);
  1049     }
  1050   }
  1051   generateColumnTypes(pParse, pTabList, pEList);
  1052 }
  1053 
  1054 #ifndef SQLITE_OMIT_COMPOUND_SELECT
  1055 /*
  1056 ** Name of the connection operator, used for error messages.
  1057 */
  1058 static const char *selectOpName(int id){
  1059   char *z;
  1060   switch( id ){
  1061     case TK_ALL:       z = "UNION ALL";   break;
  1062     case TK_INTERSECT: z = "INTERSECT";   break;
  1063     case TK_EXCEPT:    z = "EXCEPT";      break;
  1064     default:           z = "UNION";       break;
  1065   }
  1066   return z;
  1067 }
  1068 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
  1069 
  1070 /*
  1071 ** Forward declaration
  1072 */
  1073 static int prepSelectStmt(Parse*, Select*);
  1074 
  1075 /*
  1076 ** Given a SELECT statement, generate a Table structure that describes
  1077 ** the result set of that SELECT.
  1078 */
  1079 Table *sqlite3ResultSetOfSelect(Parse *pParse, char *zTabName, Select *pSelect){
  1080   Table *pTab;
  1081   int i, j;
  1082   ExprList *pEList;
  1083   Column *aCol, *pCol;
  1084   sqlite3 *db = pParse->db;
  1085 
  1086   while( pSelect->pPrior ) pSelect = pSelect->pPrior;
  1087   if( prepSelectStmt(pParse, pSelect) ){
  1088     return 0;
  1089   }
  1090   if( sqlite3SelectResolve(pParse, pSelect, 0) ){
  1091     return 0;
  1092   }
  1093   pTab = sqlite3DbMallocZero(db, sizeof(Table) );
  1094   if( pTab==0 ){
  1095     return 0;
  1096   }
  1097   pTab->nRef = 1;
  1098   pTab->zName = zTabName ? sqlite3DbStrDup(db, zTabName) : 0;
  1099   pEList = pSelect->pEList;
  1100   pTab->nCol = pEList->nExpr;
  1101   assert( pTab->nCol>0 );
  1102   pTab->aCol = aCol = sqlite3DbMallocZero(db, sizeof(pTab->aCol[0])*pTab->nCol);
  1103   for(i=0, pCol=aCol; i<pTab->nCol; i++, pCol++){
  1104     Expr *p, *pR;
  1105     char *zType;
  1106     char *zName;
  1107     int nName;
  1108     CollSeq *pColl;
  1109     int cnt;
  1110     NameContext sNC;
  1111     
  1112     /* Get an appropriate name for the column
  1113     */
  1114     p = pEList->a[i].pExpr;
  1115     assert( p->pRight==0 || p->pRight->token.z==0 || p->pRight->token.z[0]!=0 );
  1116     if( (zName = pEList->a[i].zName)!=0 ){
  1117       /* If the column contains an "AS <name>" phrase, use <name> as the name */
  1118       zName = sqlite3DbStrDup(db, zName);
  1119     }else if( p->op==TK_DOT 
  1120               && (pR=p->pRight)!=0 && pR->token.z && pR->token.z[0] ){
  1121       /* For columns of the from A.B use B as the name */
  1122       zName = sqlite3MPrintf(db, "%T", &pR->token);
  1123     }else if( p->span.z && p->span.z[0] ){
  1124       /* Use the original text of the column expression as its name */
  1125       zName = sqlite3MPrintf(db, "%T", &p->span);
  1126     }else{
  1127       /* If all else fails, make up a name */
  1128       zName = sqlite3MPrintf(db, "column%d", i+1);
  1129     }
  1130     if( !zName || db->mallocFailed ){
  1131       db->mallocFailed = 1;
  1132       sqlite3_free(zName);
  1133       sqlite3DeleteTable(pTab);
  1134       return 0;
  1135     }
  1136     sqlite3Dequote(zName);
  1137 
  1138     /* Make sure the column name is unique.  If the name is not unique,
  1139     ** append a integer to the name so that it becomes unique.
  1140     */
  1141     nName = strlen(zName);
  1142     for(j=cnt=0; j<i; j++){
  1143       if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
  1144         zName[nName] = 0;
  1145         zName = sqlite3MPrintf(db, "%z:%d", zName, ++cnt);
  1146         j = -1;
  1147         if( zName==0 ) break;
  1148       }
  1149     }
  1150     pCol->zName = zName;
  1151 
  1152     /* Get the typename, type affinity, and collating sequence for the
  1153     ** column.
  1154     */
  1155     memset(&sNC, 0, sizeof(sNC));
  1156     sNC.pSrcList = pSelect->pSrc;
  1157     zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
  1158     pCol->zType = zType;
  1159     pCol->affinity = sqlite3ExprAffinity(p);
  1160     pColl = sqlite3ExprCollSeq(pParse, p);
  1161     if( pColl ){
  1162       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
  1163     }
  1164   }
  1165   pTab->iPKey = -1;
  1166   return pTab;
  1167 }
  1168 
  1169 /*
  1170 ** Prepare a SELECT statement for processing by doing the following
  1171 ** things:
  1172 **
  1173 **    (1)  Make sure VDBE cursor numbers have been assigned to every
  1174 **         element of the FROM clause.
  1175 **
  1176 **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
  1177 **         defines FROM clause.  When views appear in the FROM clause,
  1178 **         fill pTabList->a[].pSelect with a copy of the SELECT statement
  1179 **         that implements the view.  A copy is made of the view's SELECT
  1180 **         statement so that we can freely modify or delete that statement
  1181 **         without worrying about messing up the presistent representation
  1182 **         of the view.
  1183 **
  1184 **    (3)  Add terms to the WHERE clause to accomodate the NATURAL keyword
  1185 **         on joins and the ON and USING clause of joins.
  1186 **
  1187 **    (4)  Scan the list of columns in the result set (pEList) looking
  1188 **         for instances of the "*" operator or the TABLE.* operator.
  1189 **         If found, expand each "*" to be every column in every table
  1190 **         and TABLE.* to be every column in TABLE.
  1191 **
  1192 ** Return 0 on success.  If there are problems, leave an error message
  1193 ** in pParse and return non-zero.
  1194 */
  1195 static int prepSelectStmt(Parse *pParse, Select *p){
  1196   int i, j, k, rc;
  1197   SrcList *pTabList;
  1198   ExprList *pEList;
  1199   struct SrcList_item *pFrom;
  1200   sqlite3 *db = pParse->db;
  1201 
  1202   if( p==0 || p->pSrc==0 || db->mallocFailed ){
  1203     return 1;
  1204   }
  1205   pTabList = p->pSrc;
  1206   pEList = p->pEList;
  1207 
  1208   /* Make sure cursor numbers have been assigned to all entries in
  1209   ** the FROM clause of the SELECT statement.
  1210   */
  1211   sqlite3SrcListAssignCursors(pParse, p->pSrc);
  1212 
  1213   /* Look up every table named in the FROM clause of the select.  If
  1214   ** an entry of the FROM clause is a subquery instead of a table or view,
  1215   ** then create a transient table structure to describe the subquery.
  1216   */
  1217   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
  1218     Table *pTab;
  1219     if( pFrom->pTab!=0 ){
  1220       /* This statement has already been prepared.  There is no need
  1221       ** to go further. */
  1222       assert( i==0 );
  1223       return 0;
  1224     }
  1225     if( pFrom->zName==0 ){
  1226 #ifndef SQLITE_OMIT_SUBQUERY
  1227       /* A sub-query in the FROM clause of a SELECT */
  1228       assert( pFrom->pSelect!=0 );
  1229       if( pFrom->zAlias==0 ){
  1230         pFrom->zAlias =
  1231           sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pFrom->pSelect);
  1232       }
  1233       assert( pFrom->pTab==0 );
  1234       pFrom->pTab = pTab = 
  1235         sqlite3ResultSetOfSelect(pParse, pFrom->zAlias, pFrom->pSelect);
  1236       if( pTab==0 ){
  1237         return 1;
  1238       }
  1239       /* The isEphem flag indicates that the Table structure has been
  1240       ** dynamically allocated and may be freed at any time.  In other words,
  1241       ** pTab is not pointing to a persistent table structure that defines
  1242       ** part of the schema. */
  1243       pTab->isEphem = 1;
  1244 #endif
  1245     }else{
  1246       /* An ordinary table or view name in the FROM clause */
  1247       assert( pFrom->pTab==0 );
  1248       pFrom->pTab = pTab = 
  1249         sqlite3LocateTable(pParse,pFrom->zName,pFrom->zDatabase);
  1250       if( pTab==0 ){
  1251         return 1;
  1252       }
  1253       pTab->nRef++;
  1254 #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
  1255       if( pTab->pSelect || IsVirtual(pTab) ){
  1256         /* We reach here if the named table is a really a view */
  1257         if( sqlite3ViewGetColumnNames(pParse, pTab) ){
  1258           return 1;
  1259         }
  1260         /* If pFrom->pSelect!=0 it means we are dealing with a
  1261         ** view within a view.  The SELECT structure has already been
  1262         ** copied by the outer view so we can skip the copy step here
  1263         ** in the inner view.
  1264         */
  1265         if( pFrom->pSelect==0 ){
  1266           pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect);
  1267         }
  1268       }
  1269 #endif
  1270     }
  1271   }
  1272 
  1273   /* Process NATURAL keywords, and ON and USING clauses of joins.
  1274   */
  1275   if( sqliteProcessJoin(pParse, p) ) return 1;
  1276 
  1277   /* For every "*" that occurs in the column list, insert the names of
  1278   ** all columns in all tables.  And for every TABLE.* insert the names
  1279   ** of all columns in TABLE.  The parser inserted a special expression
  1280   ** with the TK_ALL operator for each "*" that it found in the column list.
  1281   ** The following code just has to locate the TK_ALL expressions and expand
  1282   ** each one to the list of all columns in all tables.
  1283   **
  1284   ** The first loop just checks to see if there are any "*" operators
  1285   ** that need expanding.
  1286   */
  1287   for(k=0; k<pEList->nExpr; k++){
  1288     Expr *pE = pEList->a[k].pExpr;
  1289     if( pE->op==TK_ALL ) break;
  1290     if( pE->op==TK_DOT && pE->pRight && pE->pRight->op==TK_ALL
  1291          && pE->pLeft && pE->pLeft->op==TK_ID ) break;
  1292   }
  1293   rc = 0;
  1294   if( k<pEList->nExpr ){
  1295     /*
  1296     ** If we get here it means the result set contains one or more "*"
  1297     ** operators that need to be expanded.  Loop through each expression
  1298     ** in the result set and expand them one by one.
  1299     */
  1300     struct ExprList_item *a = pEList->a;
  1301     ExprList *pNew = 0;
  1302     int flags = pParse->db->flags;
  1303     int longNames = (flags & SQLITE_FullColNames)!=0 &&
  1304                       (flags & SQLITE_ShortColNames)==0;
  1305 
  1306     for(k=0; k<pEList->nExpr; k++){
  1307       Expr *pE = a[k].pExpr;
  1308       if( pE->op!=TK_ALL &&
  1309            (pE->op!=TK_DOT || pE->pRight==0 || pE->pRight->op!=TK_ALL) ){
  1310         /* This particular expression does not need to be expanded.
  1311         */
  1312         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr, 0);
  1313         if( pNew ){
  1314           pNew->a[pNew->nExpr-1].zName = a[k].zName;
  1315         }else{
  1316           rc = 1;
  1317         }
  1318         a[k].pExpr = 0;
  1319         a[k].zName = 0;
  1320       }else{
  1321         /* This expression is a "*" or a "TABLE.*" and needs to be
  1322         ** expanded. */
  1323         int tableSeen = 0;      /* Set to 1 when TABLE matches */
  1324         char *zTName;            /* text of name of TABLE */
  1325         if( pE->op==TK_DOT && pE->pLeft ){
  1326           zTName = sqlite3NameFromToken(db, &pE->pLeft->token);
  1327         }else{
  1328           zTName = 0;
  1329         }
  1330         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
  1331           Table *pTab = pFrom->pTab;
  1332           char *zTabName = pFrom->zAlias;
  1333           if( zTabName==0 || zTabName[0]==0 ){ 
  1334             zTabName = pTab->zName;
  1335           }
  1336           if( zTName && (zTabName==0 || zTabName[0]==0 || 
  1337                  sqlite3StrICmp(zTName, zTabName)!=0) ){
  1338             continue;
  1339           }
  1340           tableSeen = 1;
  1341           for(j=0; j<pTab->nCol; j++){
  1342             Expr *pExpr, *pRight;
  1343             char *zName = pTab->aCol[j].zName;
  1344 
  1345             /* If a column is marked as 'hidden' (currently only possible
  1346             ** for virtual tables), do not include it in the expanded
  1347             ** result-set list.
  1348             */
  1349             if( IsHiddenColumn(&pTab->aCol[j]) ){
  1350               assert(IsVirtual(pTab));
  1351               continue;
  1352             }
  1353 
  1354             if( i>0 ){
  1355               struct SrcList_item *pLeft = &pTabList->a[i-1];
  1356               if( (pLeft[1].jointype & JT_NATURAL)!=0 &&
  1357                         columnIndex(pLeft->pTab, zName)>=0 ){
  1358                 /* In a NATURAL join, omit the join columns from the 
  1359                 ** table on the right */
  1360                 continue;
  1361               }
  1362               if( sqlite3IdListIndex(pLeft[1].pUsing, zName)>=0 ){
  1363                 /* In a join with a USING clause, omit columns in the
  1364                 ** using clause from the table on the right. */
  1365                 continue;
  1366               }
  1367             }
  1368             pRight = sqlite3PExpr(pParse, TK_ID, 0, 0, 0);
  1369             if( pRight==0 ) break;
  1370             setQuotedToken(pParse, &pRight->token, zName);
  1371             if( zTabName && (longNames || pTabList->nSrc>1) ){
  1372               Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, 0);
  1373               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
  1374               if( pExpr==0 ) break;
  1375               setQuotedToken(pParse, &pLeft->token, zTabName);
  1376               setToken(&pExpr->span, 
  1377                   sqlite3MPrintf(db, "%s.%s", zTabName, zName));
  1378               pExpr->span.dyn = 1;
  1379               pExpr->token.z = 0;
  1380               pExpr->token.n = 0;
  1381               pExpr->token.dyn = 0;
  1382             }else{
  1383               pExpr = pRight;
  1384               pExpr->span = pExpr->token;
  1385               pExpr->span.dyn = 0;
  1386             }
  1387             if( longNames ){
  1388               pNew = sqlite3ExprListAppend(pParse, pNew, pExpr, &pExpr->span);
  1389             }else{
  1390               pNew = sqlite3ExprListAppend(pParse, pNew, pExpr, &pRight->token);
  1391             }
  1392           }
  1393         }
  1394         if( !tableSeen ){
  1395           if( zTName ){
  1396             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
  1397           }else{
  1398             sqlite3ErrorMsg(pParse, "no tables specified");
  1399           }
  1400           rc = 1;
  1401         }
  1402         sqlite3_free(zTName);
  1403       }
  1404     }
  1405     sqlite3ExprListDelete(pEList);
  1406     p->pEList = pNew;
  1407   }
  1408   if( p->pEList && p->pEList->nExpr>SQLITE_MAX_COLUMN ){
  1409     sqlite3ErrorMsg(pParse, "too many columns in result set");
  1410     rc = SQLITE_ERROR;
  1411   }
  1412   if( db->mallocFailed ){
  1413     rc = SQLITE_NOMEM;
  1414   }
  1415   return rc;
  1416 }
  1417 
  1418 #ifndef SQLITE_OMIT_COMPOUND_SELECT
  1419 /*
  1420 ** This routine associates entries in an ORDER BY expression list with
  1421 ** columns in a result.  For each ORDER BY expression, the opcode of
  1422 ** the top-level node is changed to TK_COLUMN and the iColumn value of
  1423 ** the top-level node is filled in with column number and the iTable
  1424 ** value of the top-level node is filled with iTable parameter.
  1425 **
  1426 ** If there are prior SELECT clauses, they are processed first.  A match
  1427 ** in an earlier SELECT takes precedence over a later SELECT.
  1428 **
  1429 ** Any entry that does not match is flagged as an error.  The number
  1430 ** of errors is returned.
  1431 */
  1432 static int matchOrderbyToColumn(
  1433   Parse *pParse,          /* A place to leave error messages */
  1434   Select *pSelect,        /* Match to result columns of this SELECT */
  1435   ExprList *pOrderBy,     /* The ORDER BY values to match against columns */
  1436   int iTable,             /* Insert this value in iTable */
  1437   int mustComplete        /* If TRUE all ORDER BYs must match */
  1438 ){
  1439   int nErr = 0;
  1440   int i, j;
  1441   ExprList *pEList;
  1442   sqlite3 *db = pParse->db;
  1443 
  1444   if( pSelect==0 || pOrderBy==0 ) return 1;
  1445   if( mustComplete ){
  1446     for(i=0; i<pOrderBy->nExpr; i++){ pOrderBy->a[i].done = 0; }
  1447   }
  1448   if( prepSelectStmt(pParse, pSelect) ){
  1449     return 1;
  1450   }
  1451   if( pSelect->pPrior ){
  1452     if( matchOrderbyToColumn(pParse, pSelect->pPrior, pOrderBy, iTable, 0) ){
  1453       return 1;
  1454     }
  1455   }
  1456   pEList = pSelect->pEList;
  1457   for(i=0; i<pOrderBy->nExpr; i++){
  1458     struct ExprList_item *pItem;
  1459     Expr *pE = pOrderBy->a[i].pExpr;
  1460     int iCol = -1;
  1461     char *zLabel;
  1462 
  1463     if( pOrderBy->a[i].done ) continue;
  1464     if( sqlite3ExprIsInteger(pE, &iCol) ){
  1465       if( iCol<=0 || iCol>pEList->nExpr ){
  1466         sqlite3ErrorMsg(pParse,
  1467           "ORDER BY position %d should be between 1 and %d",
  1468           iCol, pEList->nExpr);
  1469         nErr++;
  1470         break;
  1471       }
  1472       if( !mustComplete ) continue;
  1473       iCol--;
  1474     }
  1475     if( iCol<0 && (zLabel = sqlite3NameFromToken(db, &pE->token))!=0 ){
  1476       for(j=0, pItem=pEList->a; j<pEList->nExpr; j++, pItem++){
  1477         char *zName;
  1478         int isMatch;
  1479         if( pItem->zName ){
  1480           zName = sqlite3DbStrDup(db, pItem->zName);
  1481         }else{
  1482           zName = sqlite3NameFromToken(db, &pItem->pExpr->token);
  1483         }
  1484         isMatch = zName && sqlite3StrICmp(zName, zLabel)==0;
  1485         sqlite3_free(zName);
  1486         if( isMatch ){
  1487           iCol = j;
  1488           break;
  1489         }
  1490       }
  1491       sqlite3_free(zLabel);
  1492     }
  1493     if( iCol>=0 ){
  1494       pE->op = TK_COLUMN;
  1495       pE->iColumn = iCol;
  1496       pE->iTable = iTable;
  1497       pE->iAgg = -1;
  1498       pOrderBy->a[i].done = 1;
  1499     }else if( mustComplete ){
  1500       sqlite3ErrorMsg(pParse,
  1501         "ORDER BY term number %d does not match any result column", i+1);
  1502       nErr++;
  1503       break;
  1504     }
  1505   }
  1506   return nErr;  
  1507 }
  1508 #endif /* #ifndef SQLITE_OMIT_COMPOUND_SELECT */
  1509 
  1510 /*
  1511 ** Get a VDBE for the given parser context.  Create a new one if necessary.
  1512 ** If an error occurs, return NULL and leave a message in pParse.
  1513 */
  1514 Vdbe *sqlite3GetVdbe(Parse *pParse){
  1515   Vdbe *v = pParse->pVdbe;
  1516   if( v==0 ){
  1517     v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
  1518   }
  1519   return v;
  1520 }
  1521 
  1522 
  1523 /*
  1524 ** Compute the iLimit and iOffset fields of the SELECT based on the
  1525 ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
  1526 ** that appear in the original SQL statement after the LIMIT and OFFSET
  1527 ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
  1528 ** are the integer memory register numbers for counters used to compute 
  1529 ** the limit and offset.  If there is no limit and/or offset, then 
  1530 ** iLimit and iOffset are negative.
  1531 **
  1532 ** This routine changes the values of iLimit and iOffset only if
  1533 ** a limit or offset is defined by pLimit and pOffset.  iLimit and
  1534 ** iOffset should have been preset to appropriate default values
  1535 ** (usually but not always -1) prior to calling this routine.
  1536 ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
  1537 ** redefined.  The UNION ALL operator uses this property to force
  1538 ** the reuse of the same limit and offset registers across multiple
  1539 ** SELECT statements.
  1540 */
  1541 static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
  1542   Vdbe *v = 0;
  1543   int iLimit = 0;
  1544   int iOffset;
  1545   int addr1, addr2;
  1546 
  1547   /* 
  1548   ** "LIMIT -1" always shows all rows.  There is some
  1549   ** contraversy about what the correct behavior should be.
  1550   ** The current implementation interprets "LIMIT 0" to mean
  1551   ** no rows.
  1552   */
  1553   if( p->pLimit ){
  1554     p->iLimit = iLimit = pParse->nMem;
  1555     pParse->nMem += 2;
  1556     v = sqlite3GetVdbe(pParse);
  1557     if( v==0 ) return;
  1558     sqlite3ExprCode(pParse, p->pLimit);
  1559     sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0);
  1560     sqlite3VdbeAddOp(v, OP_MemStore, iLimit, 1);
  1561     VdbeComment((v, "# LIMIT counter"));
  1562     sqlite3VdbeAddOp(v, OP_IfMemZero, iLimit, iBreak);
  1563     sqlite3VdbeAddOp(v, OP_MemLoad, iLimit, 0);
  1564   }
  1565   if( p->pOffset ){
  1566     p->iOffset = iOffset = pParse->nMem++;
  1567     v = sqlite3GetVdbe(pParse);
  1568     if( v==0 ) return;
  1569     sqlite3ExprCode(pParse, p->pOffset);
  1570     sqlite3VdbeAddOp(v, OP_MustBeInt, 0, 0);
  1571     sqlite3VdbeAddOp(v, OP_MemStore, iOffset, p->pLimit==0);
  1572     VdbeComment((v, "# OFFSET counter"));
  1573     addr1 = sqlite3VdbeAddOp(v, OP_IfMemPos, iOffset, 0);
  1574     sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
  1575     sqlite3VdbeAddOp(v, OP_Integer, 0, 0);
  1576     sqlite3VdbeJumpHere(v, addr1);
  1577     if( p->pLimit ){
  1578       sqlite3VdbeAddOp(v, OP_Add, 0, 0);
  1579     }
  1580   }
  1581   if( p->pLimit ){
  1582     addr1 = sqlite3VdbeAddOp(v, OP_IfMemPos, iLimit, 0);
  1583     sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
  1584     sqlite3VdbeAddOp(v, OP_MemInt, -1, iLimit+1);
  1585     addr2 = sqlite3VdbeAddOp(v, OP_Goto, 0, 0);
  1586     sqlite3VdbeJumpHere(v, addr1);
  1587     sqlite3VdbeAddOp(v, OP_MemStore, iLimit+1, 1);
  1588     VdbeComment((v, "# LIMIT+OFFSET"));
  1589     sqlite3VdbeJumpHere(v, addr2);
  1590   }
  1591 }
  1592 
  1593 /*
  1594 ** Allocate a virtual index to use for sorting.
  1595 */
  1596 static void createSortingIndex(Parse *pParse, Select *p, ExprList *pOrderBy){
  1597   if( pOrderBy ){
  1598     int addr;
  1599     assert( pOrderBy->iECursor==0 );
  1600     pOrderBy->iECursor = pParse->nTab++;
  1601     addr = sqlite3VdbeAddOp(pParse->pVdbe, OP_OpenEphemeral,
  1602                             pOrderBy->iECursor, pOrderBy->nExpr+1);
  1603     assert( p->addrOpenEphm[2] == -1 );
  1604     p->addrOpenEphm[2] = addr;
  1605   }
  1606 }
  1607 
  1608 #ifndef SQLITE_OMIT_COMPOUND_SELECT
  1609 /*
  1610 ** Return the appropriate collating sequence for the iCol-th column of
  1611 ** the result set for the compound-select statement "p".  Return NULL if
  1612 ** the column has no default collating sequence.
  1613 **
  1614 ** The collating sequence for the compound select is taken from the
  1615 ** left-most term of the select that has a collating sequence.
  1616 */
  1617 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
  1618   CollSeq *pRet;
  1619   if( p->pPrior ){
  1620     pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
  1621   }else{
  1622     pRet = 0;
  1623   }
  1624   if( pRet==0 ){
  1625     pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
  1626   }
  1627   return pRet;
  1628 }
  1629 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
  1630 
  1631 #ifndef SQLITE_OMIT_COMPOUND_SELECT
  1632 /*
  1633 ** This routine is called to process a query that is really the union
  1634 ** or intersection of two or more separate queries.
  1635 **
  1636 ** "p" points to the right-most of the two queries.  the query on the
  1637 ** left is p->pPrior.  The left query could also be a compound query
  1638 ** in which case this routine will be called recursively. 
  1639 **
  1640 ** The results of the total query are to be written into a destination
  1641 ** of type eDest with parameter iParm.
  1642 **
  1643 ** Example 1:  Consider a three-way compound SQL statement.
  1644 **
  1645 **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
  1646 **
  1647 ** This statement is parsed up as follows:
  1648 **
  1649 **     SELECT c FROM t3
  1650 **      |
  1651 **      `----->  SELECT b FROM t2
  1652 **                |
  1653 **                `------>  SELECT a FROM t1
  1654 **
  1655 ** The arrows in the diagram above represent the Select.pPrior pointer.
  1656 ** So if this routine is called with p equal to the t3 query, then
  1657 ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
  1658 **
  1659 ** Notice that because of the way SQLite parses compound SELECTs, the
  1660 ** individual selects always group from left to right.
  1661 */
  1662 static int multiSelect(
  1663   Parse *pParse,        /* Parsing context */
  1664   Select *p,            /* The right-most of SELECTs to be coded */
  1665   int eDest,            /* \___  Store query results as specified */
  1666   int iParm,            /* /     by these two parameters.         */
  1667   char *aff             /* If eDest is SRT_Union, the affinity string */
  1668 ){
  1669   int rc = SQLITE_OK;   /* Success code from a subroutine */
  1670   Select *pPrior;       /* Another SELECT immediately to our left */
  1671   Vdbe *v;              /* Generate code to this VDBE */
  1672   int nCol;             /* Number of columns in the result set */
  1673   ExprList *pOrderBy;   /* The ORDER BY clause on p */
  1674   int aSetP2[2];        /* Set P2 value of these op to number of columns */
  1675   int nSetP2 = 0;       /* Number of slots in aSetP2[] used */
  1676 
  1677   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
  1678   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
  1679   */
  1680   if( p==0 || p->pPrior==0 ){
  1681     rc = 1;
  1682     goto multi_select_end;
  1683   }
  1684   pPrior = p->pPrior;
  1685   assert( pPrior->pRightmost!=pPrior );
  1686   assert( pPrior->pRightmost==p->pRightmost );
  1687   if( pPrior->pOrderBy ){
  1688     sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
  1689       selectOpName(p->op));
  1690     rc = 1;
  1691     goto multi_select_end;
  1692   }
  1693   if( pPrior->pLimit ){
  1694     sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
  1695       selectOpName(p->op));
  1696     rc = 1;
  1697     goto multi_select_end;
  1698   }
  1699 
  1700   /* Make sure we have a valid query engine.  If not, create a new one.
  1701   */
  1702   v = sqlite3GetVdbe(pParse);
  1703   if( v==0 ){
  1704     rc = 1;
  1705     goto multi_select_end;
  1706   }
  1707 
  1708   /* Create the destination temporary table if necessary
  1709   */
  1710   if( eDest==SRT_EphemTab ){
  1711     assert( p->pEList );
  1712     assert( nSetP2<sizeof(aSetP2)/sizeof(aSetP2[0]) );
  1713     aSetP2[nSetP2++] = sqlite3VdbeAddOp(v, OP_OpenEphemeral, iParm, 0);
  1714     eDest = SRT_Table;
  1715   }
  1716 
  1717   /* Generate code for the left and right SELECT statements.
  1718   */
  1719   pOrderBy = p->pOrderBy;
  1720   switch( p->op ){
  1721     case TK_ALL: {
  1722       if( pOrderBy==0 ){
  1723         int addr = 0;
  1724         assert( !pPrior->pLimit );
  1725         pPrior->pLimit = p->pLimit;
  1726         pPrior->pOffset = p->pOffset;
  1727         rc = sqlite3Select(pParse, pPrior, eDest, iParm, 0, 0, 0, aff);
  1728         p->pLimit = 0;
  1729         p->pOffset = 0;
  1730         if( rc ){
  1731           goto multi_select_end;
  1732         }
  1733         p->pPrior = 0;
  1734         p->iLimit = pPrior->iLimit;
  1735         p->iOffset = pPrior->iOffset;
  1736         if( p->iLimit>=0 ){
  1737           addr = sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, 0);
  1738           VdbeComment((v, "# Jump ahead if LIMIT reached"));
  1739         }
  1740         rc = sqlite3Select(pParse, p, eDest, iParm, 0, 0, 0, aff);
  1741         p->pPrior = pPrior;
  1742         if( rc ){
  1743           goto multi_select_end;
  1744         }
  1745         if( addr ){
  1746           sqlite3VdbeJumpHere(v, addr);
  1747         }
  1748         break;
  1749       }
  1750       /* For UNION ALL ... ORDER BY fall through to the next case */
  1751     }
  1752     case TK_EXCEPT:
  1753     case TK_UNION: {
  1754       int unionTab;    /* Cursor number of the temporary table holding result */
  1755       int op = 0;      /* One of the SRT_ operations to apply to self */
  1756       int priorOp;     /* The SRT_ operation to apply to prior selects */
  1757       Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
  1758       int addr;
  1759 
  1760       priorOp = p->op==TK_ALL ? SRT_Table : SRT_Union;
  1761       if( eDest==priorOp && pOrderBy==0 && !p->pLimit && !p->pOffset ){
  1762         /* We can reuse a temporary table generated by a SELECT to our
  1763         ** right.
  1764         */
  1765         unionTab = iParm;
  1766       }else{
  1767         /* We will need to create our own temporary table to hold the
  1768         ** intermediate results.
  1769         */
  1770         unionTab = pParse->nTab++;
  1771         if( pOrderBy && matchOrderbyToColumn(pParse, p, pOrderBy, unionTab,1) ){
  1772           rc = 1;
  1773           goto multi_select_end;
  1774         }
  1775         addr = sqlite3VdbeAddOp(v, OP_OpenEphemeral, unionTab, 0);
  1776         if( priorOp==SRT_Table ){
  1777           assert( nSetP2<sizeof(aSetP2)/sizeof(aSetP2[0]) );
  1778           aSetP2[nSetP2++] = addr;
  1779         }else{
  1780           assert( p->addrOpenEphm[0] == -1 );
  1781           p->addrOpenEphm[0] = addr;
  1782           p->pRightmost->usesEphm = 1;
  1783         }
  1784         createSortingIndex(pParse, p, pOrderBy);
  1785         assert( p->pEList );
  1786       }
  1787 
  1788       /* Code the SELECT statements to our left
  1789       */
  1790       assert( !pPrior->pOrderBy );
  1791       rc = sqlite3Select(pParse, pPrior, priorOp, unionTab, 0, 0, 0, aff);
  1792       if( rc ){
  1793         goto multi_select_end;
  1794       }
  1795 
  1796       /* Code the current SELECT statement
  1797       */
  1798       switch( p->op ){
  1799          case TK_EXCEPT:  op = SRT_Except;   break;
  1800          case TK_UNION:   op = SRT_Union;    break;
  1801          case TK_ALL:     op = SRT_Table;    break;
  1802       }
  1803       p->pPrior = 0;
  1804       p->pOrderBy = 0;
  1805       p->disallowOrderBy = pOrderBy!=0;
  1806       pLimit = p->pLimit;
  1807       p->pLimit = 0;
  1808       pOffset = p->pOffset;
  1809       p->pOffset = 0;
  1810       rc = sqlite3Select(pParse, p, op, unionTab, 0, 0, 0, aff);
  1811       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
  1812       ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
  1813       sqlite3ExprListDelete(p->pOrderBy);
  1814       p->pPrior = pPrior;
  1815       p->pOrderBy = pOrderBy;
  1816       sqlite3ExprDelete(p->pLimit);
  1817       p->pLimit = pLimit;
  1818       p->pOffset = pOffset;
  1819       p->iLimit = -1;
  1820       p->iOffset = -1;
  1821       if( rc ){
  1822         goto multi_select_end;
  1823       }
  1824 
  1825 
  1826       /* Convert the data in the temporary table into whatever form
  1827       ** it is that we currently need.
  1828       */      
  1829       if( eDest!=priorOp || unionTab!=iParm ){
  1830         int iCont, iBreak, iStart;
  1831         assert( p->pEList );
  1832         if( eDest==SRT_Callback ){
  1833           Select *pFirst = p;
  1834           while( pFirst->pPrior ) pFirst = pFirst->pPrior;
  1835           generateColumnNames(pParse, 0, pFirst->pEList);
  1836         }
  1837         iBreak = sqlite3VdbeMakeLabel(v);
  1838         iCont = sqlite3VdbeMakeLabel(v);
  1839         computeLimitRegisters(pParse, p, iBreak);
  1840         sqlite3VdbeAddOp(v, OP_Rewind, unionTab, iBreak);
  1841         iStart = sqlite3VdbeCurrentAddr(v);
  1842         rc = selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
  1843                              pOrderBy, -1, eDest, iParm, 
  1844                              iCont, iBreak, 0);
  1845         if( rc ){
  1846           rc = 1;
  1847           goto multi_select_end;
  1848         }
  1849         sqlite3VdbeResolveLabel(v, iCont);
  1850         sqlite3VdbeAddOp(v, OP_Next, unionTab, iStart);
  1851         sqlite3VdbeResolveLabel(v, iBreak);
  1852         sqlite3VdbeAddOp(v, OP_Close, unionTab, 0);
  1853       }
  1854       break;
  1855     }
  1856     case TK_INTERSECT: {
  1857       int tab1, tab2;
  1858       int iCont, iBreak, iStart;
  1859       Expr *pLimit, *pOffset;
  1860       int addr;
  1861 
  1862       /* INTERSECT is different from the others since it requires
  1863       ** two temporary tables.  Hence it has its own case.  Begin
  1864       ** by allocating the tables we will need.
  1865       */
  1866       tab1 = pParse->nTab++;
  1867       tab2 = pParse->nTab++;
  1868       if( pOrderBy && matchOrderbyToColumn(pParse,p,pOrderBy,tab1,1) ){
  1869         rc = 1;
  1870         goto multi_select_end;
  1871       }
  1872       createSortingIndex(pParse, p, pOrderBy);
  1873 
  1874       addr = sqlite3VdbeAddOp(v, OP_OpenEphemeral, tab1, 0);
  1875       assert( p->addrOpenEphm[0] == -1 );
  1876       p->addrOpenEphm[0] = addr;
  1877       p->pRightmost->usesEphm = 1;
  1878       assert( p->pEList );
  1879 
  1880       /* Code the SELECTs to our left into temporary table "tab1".
  1881       */
  1882       rc = sqlite3Select(pParse, pPrior, SRT_Union, tab1, 0, 0, 0, aff);
  1883       if( rc ){
  1884         goto multi_select_end;
  1885       }
  1886 
  1887       /* Code the current SELECT into temporary table "tab2"
  1888       */
  1889       addr = sqlite3VdbeAddOp(v, OP_OpenEphemeral, tab2, 0);
  1890       assert( p->addrOpenEphm[1] == -1 );
  1891       p->addrOpenEphm[1] = addr;
  1892       p->pPrior = 0;
  1893       pLimit = p->pLimit;
  1894       p->pLimit = 0;
  1895       pOffset = p->pOffset;
  1896       p->pOffset = 0;
  1897       rc = sqlite3Select(pParse, p, SRT_Union, tab2, 0, 0, 0, aff);
  1898       p->pPrior = pPrior;
  1899       sqlite3ExprDelete(p->pLimit);
  1900       p->pLimit = pLimit;
  1901       p->pOffset = pOffset;
  1902       if( rc ){
  1903         goto multi_select_end;
  1904       }
  1905 
  1906       /* Generate code to take the intersection of the two temporary
  1907       ** tables.
  1908       */
  1909       assert( p->pEList );
  1910       if( eDest==SRT_Callback ){
  1911         Select *pFirst = p;
  1912         while( pFirst->pPrior ) pFirst = pFirst->pPrior;
  1913         generateColumnNames(pParse, 0, pFirst->pEList);
  1914       }
  1915       iBreak = sqlite3VdbeMakeLabel(v);
  1916       iCont = sqlite3VdbeMakeLabel(v);
  1917       computeLimitRegisters(pParse, p, iBreak);
  1918       sqlite3VdbeAddOp(v, OP_Rewind, tab1, iBreak);
  1919       iStart = sqlite3VdbeAddOp(v, OP_RowKey, tab1, 0);
  1920       sqlite3VdbeAddOp(v, OP_NotFound, tab2, iCont);
  1921       rc = selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
  1922                              pOrderBy, -1, eDest, iParm, 
  1923                              iCont, iBreak, 0);
  1924       if( rc ){
  1925         rc = 1;
  1926         goto multi_select_end;
  1927       }
  1928       sqlite3VdbeResolveLabel(v, iCont);
  1929       sqlite3VdbeAddOp(v, OP_Next, tab1, iStart);
  1930       sqlite3VdbeResolveLabel(v, iBreak);
  1931       sqlite3VdbeAddOp(v, OP_Close, tab2, 0);
  1932       sqlite3VdbeAddOp(v, OP_Close, tab1, 0);
  1933       break;
  1934     }
  1935   }
  1936 
  1937   /* Make sure all SELECTs in the statement have the same number of elements
  1938   ** in their result sets.
  1939   */
  1940   assert( p->pEList && pPrior->pEList );
  1941   if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
  1942     sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
  1943       " do not have the same number of result columns", selectOpName(p->op));
  1944     rc = 1;
  1945     goto multi_select_end;
  1946   }
  1947 
  1948   /* Set the number of columns in temporary tables
  1949   */
  1950   nCol = p->pEList->nExpr;
  1951   while( nSetP2 ){
  1952     sqlite3VdbeChangeP2(v, aSetP2[--nSetP2], nCol);
  1953   }
  1954 
  1955   /* Compute collating sequences used by either the ORDER BY clause or
  1956   ** by any temporary tables needed to implement the compound select.
  1957   ** Attach the KeyInfo structure to all temporary tables.  Invoke the
  1958   ** ORDER BY processing if there is an ORDER BY clause.
  1959   **
  1960   ** This section is run by the right-most SELECT statement only.
  1961   ** SELECT statements to the left always skip this part.  The right-most
  1962   ** SELECT might also skip this part if it has no ORDER BY clause and
  1963   ** no temp tables are required.
  1964   */
  1965   if( pOrderBy || p->usesEphm ){
  1966     int i;                        /* Loop counter */
  1967     KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
  1968     Select *pLoop;                /* For looping through SELECT statements */
  1969     int nKeyCol;                  /* Number of entries in pKeyInfo->aCol[] */
  1970     CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
  1971     CollSeq **aCopy;              /* A copy of pKeyInfo->aColl[] */
  1972 
  1973     assert( p->pRightmost==p );
  1974     nKeyCol = nCol + (pOrderBy ? pOrderBy->nExpr : 0);
  1975     pKeyInfo = sqlite3DbMallocZero(pParse->db,
  1976                        sizeof(*pKeyInfo)+nKeyCol*(sizeof(CollSeq*) + 1));
  1977     if( !pKeyInfo ){
  1978       rc = SQLITE_NOMEM;
  1979       goto multi_select_end;
  1980     }
  1981 
  1982     pKeyInfo->enc = ENC(pParse->db);
  1983     pKeyInfo->nField = nCol;
  1984 
  1985     for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
  1986       *apColl = multiSelectCollSeq(pParse, p, i);
  1987       if( 0==*apColl ){
  1988         *apColl = pParse->db->pDfltColl;
  1989       }
  1990     }
  1991 
  1992     for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
  1993       for(i=0; i<2; i++){
  1994         int addr = pLoop->addrOpenEphm[i];
  1995         if( addr<0 ){
  1996           /* If [0] is unused then [1] is also unused.  So we can
  1997           ** always safely abort as soon as the first unused slot is found */
  1998           assert( pLoop->addrOpenEphm[1]<0 );
  1999           break;
  2000         }
  2001         sqlite3VdbeChangeP2(v, addr, nCol);
  2002         sqlite3VdbeChangeP3(v, addr, (char*)pKeyInfo, P3_KEYINFO);
  2003         pLoop->addrOpenEphm[i] = -1;
  2004       }
  2005     }
  2006 
  2007     if( pOrderBy ){
  2008       struct ExprList_item *pOTerm = pOrderBy->a;
  2009       int nOrderByExpr = pOrderBy->nExpr;
  2010       int addr;
  2011       u8 *pSortOrder;
  2012 
  2013       /* Reuse the same pKeyInfo for the ORDER BY as was used above for
  2014       ** the compound select statements.  Except we have to change out the
  2015       ** pKeyInfo->aColl[] values.  Some of the aColl[] values will be
  2016       ** reused when constructing the pKeyInfo for the ORDER BY, so make
  2017       ** a copy.  Sufficient space to hold both the nCol entries for
  2018       ** the compound select and the nOrderbyExpr entries for the ORDER BY
  2019       ** was allocated above.  But we need to move the compound select
  2020       ** entries out of the way before constructing the ORDER BY entries.
  2021       ** Move the compound select entries into aCopy[] where they can be
  2022       ** accessed and reused when constructing the ORDER BY entries.
  2023       ** Because nCol might be greater than or less than nOrderByExpr
  2024       ** we have to use memmove() when doing the copy.
  2025       */
  2026       aCopy = &pKeyInfo->aColl[nOrderByExpr];
  2027       pSortOrder = pKeyInfo->aSortOrder = (u8*)&aCopy[nCol];
  2028       memmove(aCopy, pKeyInfo->aColl, nCol*sizeof(CollSeq*));
  2029 
  2030       apColl = pKeyInfo->aColl;
  2031       for(i=0; i<nOrderByExpr; i++, pOTerm++, apColl++, pSortOrder++){
  2032         Expr *pExpr = pOTerm->pExpr;
  2033         if( (pExpr->flags & EP_ExpCollate) ){
  2034           assert( pExpr->pColl!=0 );
  2035           *apColl = pExpr->pColl;
  2036         }else{
  2037           *apColl = aCopy[pExpr->iColumn];
  2038         }
  2039         *pSortOrder = pOTerm->sortOrder;
  2040       }
  2041       assert( p->pRightmost==p );
  2042       assert( p->addrOpenEphm[2]>=0 );
  2043       addr = p->addrOpenEphm[2];
  2044       sqlite3VdbeChangeP2(v, addr, p->pOrderBy->nExpr+2);
  2045       pKeyInfo->nField = nOrderByExpr;
  2046       sqlite3VdbeChangeP3(v, addr, (char*)pKeyInfo, P3_KEYINFO_HANDOFF);
  2047       pKeyInfo = 0;
  2048       generateSortTail(pParse, p, v, p->pEList->nExpr, eDest, iParm);
  2049     }
  2050 
  2051     sqlite3_free(pKeyInfo);
  2052   }
  2053 
  2054 multi_select_end:
  2055   return rc;
  2056 }
  2057 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
  2058 
  2059 #ifndef SQLITE_OMIT_VIEW
  2060 /* Forward Declarations */
  2061 static void substExprList(sqlite3*, ExprList*, int, ExprList*);
  2062 static void substSelect(sqlite3*, Select *, int, ExprList *);
  2063 
  2064 /*
  2065 ** Scan through the expression pExpr.  Replace every reference to
  2066 ** a column in table number iTable with a copy of the iColumn-th
  2067 ** entry in pEList.  (But leave references to the ROWID column 
  2068 ** unchanged.)
  2069 **
  2070 ** This routine is part of the flattening procedure.  A subquery
  2071 ** whose result set is defined by pEList appears as entry in the
  2072 ** FROM clause of a SELECT such that the VDBE cursor assigned to that
  2073 ** FORM clause entry is iTable.  This routine make the necessary 
  2074 ** changes to pExpr so that it refers directly to the source table
  2075 ** of the subquery rather the result set of the subquery.
  2076 */
  2077 static void substExpr(
  2078   sqlite3 *db,        /* Report malloc errors to this connection */
  2079   Expr *pExpr,        /* Expr in which substitution occurs */
  2080   int iTable,         /* Table to be substituted */
  2081   ExprList *pEList    /* Substitute expressions */
  2082 ){
  2083   if( pExpr==0 ) return;
  2084   if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
  2085     if( pExpr->iColumn<0 ){
  2086       pExpr->op = TK_NULL;
  2087     }else{
  2088       Expr *pNew;
  2089       assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
  2090       assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 );
  2091       pNew = pEList->a[pExpr->iColumn].pExpr;
  2092       assert( pNew!=0 );
  2093       pExpr->op = pNew->op;
  2094       assert( pExpr->pLeft==0 );
  2095       pExpr->pLeft = sqlite3ExprDup(db, pNew->pLeft);
  2096       assert( pExpr->pRight==0 );
  2097       pExpr->pRight = sqlite3ExprDup(db, pNew->pRight);
  2098       assert( pExpr->pList==0 );
  2099       pExpr->pList = sqlite3ExprListDup(db, pNew->pList);
  2100       pExpr->iTable = pNew->iTable;
  2101       pExpr->pTab = pNew->pTab;
  2102       pExpr->iColumn = pNew->iColumn;
  2103       pExpr->iAgg = pNew->iAgg;
  2104       sqlite3TokenCopy(db, &pExpr->token, &pNew->token);
  2105       sqlite3TokenCopy(db, &pExpr->span, &pNew->span);
  2106       pExpr->pSelect = sqlite3SelectDup(db, pNew->pSelect);
  2107       pExpr->flags = pNew->flags;
  2108     }
  2109   }else{
  2110     substExpr(db, pExpr->pLeft, iTable, pEList);
  2111     substExpr(db, pExpr->pRight, iTable, pEList);
  2112     substSelect(db, pExpr->pSelect, iTable, pEList);
  2113     substExprList(db, pExpr->pList, iTable, pEList);
  2114   }
  2115 }
  2116 static void substExprList(
  2117   sqlite3 *db,         /* Report malloc errors here */
  2118   ExprList *pList,     /* List to scan and in which to make substitutes */
  2119   int iTable,          /* Table to be substituted */
  2120   ExprList *pEList     /* Substitute values */
  2121 ){
  2122   int i;
  2123   if( pList==0 ) return;
  2124   for(i=0; i<pList->nExpr; i++){
  2125     substExpr(db, pList->a[i].pExpr, iTable, pEList);
  2126   }
  2127 }
  2128 static void substSelect(
  2129   sqlite3 *db,         /* Report malloc errors here */
  2130   Select *p,           /* SELECT statement in which to make substitutions */
  2131   int iTable,          /* Table to be replaced */
  2132   ExprList *pEList     /* Substitute values */
  2133 ){
  2134   if( !p ) return;
  2135   substExprList(db, p->pEList, iTable, pEList);
  2136   substExprList(db, p->pGroupBy, iTable, pEList);
  2137   substExprList(db, p->pOrderBy, iTable, pEList);
  2138   substExpr(db, p->pHaving, iTable, pEList);
  2139   substExpr(db, p->pWhere, iTable, pEList);
  2140   substSelect(db, p->pPrior, iTable, pEList);
  2141 }
  2142 #endif /* !defined(SQLITE_OMIT_VIEW) */
  2143 
  2144 #ifndef SQLITE_OMIT_VIEW
  2145 /*
  2146 ** This routine attempts to flatten subqueries in order to speed
  2147 ** execution.  It returns 1 if it makes changes and 0 if no flattening
  2148 ** occurs.
  2149 **
  2150 ** To understand the concept of flattening, consider the following
  2151 ** query:
  2152 **
  2153 **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
  2154 **
  2155 ** The default way of implementing this query is to execute the
  2156 ** subquery first and store the results in a temporary table, then
  2157 ** run the outer query on that temporary table.  This requires two
  2158 ** passes over the data.  Furthermore, because the temporary table
  2159 ** has no indices, the WHERE clause on the outer query cannot be
  2160 ** optimized.
  2161 **
  2162 ** This routine attempts to rewrite queries such as the above into
  2163 ** a single flat select, like this:
  2164 **
  2165 **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
  2166 **
  2167 ** The code generated for this simpification gives the same result
  2168 ** but only has to scan the data once.  And because indices might 
  2169 ** exist on the table t1, a complete scan of the data might be
  2170 ** avoided.
  2171 **
  2172 ** Flattening is only attempted if all of the following are true:
  2173 **
  2174 **   (1)  The subquery and the outer query do not both use aggregates.
  2175 **
  2176 **   (2)  The subquery is not an aggregate or the outer query is not a join.
  2177 **
  2178 **   (3)  The subquery is not the right operand of a left outer join, or
  2179 **        the subquery is not itself a join.  (Ticket #306)
  2180 **
  2181 **   (4)  The subquery is not DISTINCT or the outer query is not a join.
  2182 **
  2183 **   (5)  The subquery is not DISTINCT or the outer query does not use
  2184 **        aggregates.
  2185 **
  2186 **   (6)  The subquery does not use aggregates or the outer query is not
  2187 **        DISTINCT.
  2188 **
  2189 **   (7)  The subquery has a FROM clause.
  2190 **
  2191 **   (8)  The subquery does not use LIMIT or the outer query is not a join.
  2192 **
  2193 **   (9)  The subquery does not use LIMIT or the outer query does not use
  2194 **        aggregates.
  2195 **
  2196 **  (10)  The subquery does not use aggregates or the outer query does not
  2197 **        use LIMIT.
  2198 **
  2199 **  (11)  The subquery and the outer query do not both have ORDER BY clauses.
  2200 **
  2201 **  (12)  The subquery is not the right term of a LEFT OUTER JOIN or the
  2202 **        subquery has no WHERE clause.  (added by ticket #350)
  2203 **
  2204 **  (13)  The subquery and outer query do not both use LIMIT
  2205 **
  2206 **  (14)  The subquery does not use OFFSET
  2207 **
  2208 **  (15)  The outer query is not part of a compound select or the
  2209 **        subquery does not have both an ORDER BY and a LIMIT clause.
  2210 **        (See ticket #2339)
  2211 **
  2212 ** In this routine, the "p" parameter is a pointer to the outer query.
  2213 ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
  2214 ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
  2215 **
  2216 ** If flattening is not attempted, this routine is a no-op and returns 0.
  2217 ** If flattening is attempted this routine returns 1.
  2218 **
  2219 ** All of the expression analysis must occur on both the outer query and
  2220 ** the subquery before this routine runs.
  2221 */
  2222 static int flattenSubquery(
  2223   sqlite3 *db,         /* Database connection */
  2224   Select *p,           /* The parent or outer SELECT statement */
  2225   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
  2226   int isAgg,           /* True if outer SELECT uses aggregate functions */
  2227   int subqueryIsAgg    /* True if the subquery uses aggregate functions */
  2228 ){
  2229   Select *pSub;       /* The inner query or "subquery" */
  2230   SrcList *pSrc;      /* The FROM clause of the outer query */
  2231   SrcList *pSubSrc;   /* The FROM clause of the subquery */
  2232   ExprList *pList;    /* The result set of the outer query */
  2233   int iParent;        /* VDBE cursor number of the pSub result set temp table */
  2234   int i;              /* Loop counter */
  2235   Expr *pWhere;                    /* The WHERE clause */
  2236   struct SrcList_item *pSubitem;   /* The subquery */
  2237 
  2238   /* Check to see if flattening is permitted.  Return 0 if not.
  2239   */
  2240   if( p==0 ) return 0;
  2241   pSrc = p->pSrc;
  2242   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
  2243   pSubitem = &pSrc->a[iFrom];
  2244   pSub = pSubitem->pSelect;
  2245   assert( pSub!=0 );
  2246   if( isAgg && subqueryIsAgg ) return 0;                 /* Restriction (1)  */
  2247   if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;          /* Restriction (2)  */
  2248   pSubSrc = pSub->pSrc;
  2249   assert( pSubSrc );
  2250   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
  2251   ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
  2252   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
  2253   ** became arbitrary expressions, we were forced to add restrictions (13)
  2254   ** and (14). */
  2255   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
  2256   if( pSub->pOffset ) return 0;                          /* Restriction (14) */
  2257   if( p->pRightmost && pSub->pLimit && pSub->pOrderBy ){
  2258     return 0;                                            /* Restriction (15) */
  2259   }
  2260   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
  2261   if( (pSub->isDistinct || pSub->pLimit) 
  2262          && (pSrc->nSrc>1 || isAgg) ){          /* Restrictions (4)(5)(8)(9) */
  2263      return 0;       
  2264   }
  2265   if( p->isDistinct && subqueryIsAgg ) return 0;         /* Restriction (6)  */
  2266   if( (p->disallowOrderBy || p->pOrderBy) && pSub->pOrderBy ){
  2267      return 0;                                           /* Restriction (11) */
  2268   }
  2269 
  2270   /* Restriction 3:  If the subquery is a join, make sure the subquery is 
  2271   ** not used as the right operand of an outer join.  Examples of why this
  2272   ** is not allowed:
  2273   **
  2274   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
  2275   **
  2276   ** If we flatten the above, we would get
  2277   **
  2278   **         (t1 LEFT OUTER JOIN t2) JOIN t3
  2279   **
  2280   ** which is not at all the same thing.
  2281   */
  2282   if( pSubSrc->nSrc>1 && (pSubitem->jointype & JT_OUTER)!=0 ){
  2283     return 0;
  2284   }
  2285 
  2286   /* Restriction 12:  If the subquery is the right operand of a left outer
  2287   ** join, make sure the subquery has no WHERE clause.
  2288   ** An examples of why this is not allowed:
  2289   **
  2290   **         t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
  2291   **
  2292   ** If we flatten the above, we would get
  2293   **
  2294   **         (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
  2295   **
  2296   ** But the t2.x>0 test will always fail on a NULL row of t2, which
  2297   ** effectively converts the OUTER JOIN into an INNER JOIN.
  2298   */
  2299   if( (pSubitem->jointype & JT_OUTER)!=0 && pSub->pWhere!=0 ){
  2300     return 0;
  2301   }
  2302 
  2303   /* If we reach this point, it means flattening is permitted for the
  2304   ** iFrom-th entry of the FROM clause in the outer query.
  2305   */
  2306 
  2307   /* Move all of the FROM elements of the subquery into the
  2308   ** the FROM clause of the outer query.  Before doing this, remember
  2309   ** the cursor number for the original outer query FROM element in
  2310   ** iParent.  The iParent cursor will never be used.  Subsequent code
  2311   ** will scan expressions looking for iParent references and replace
  2312   ** those references with expressions that resolve to the subquery FROM
  2313   ** elements we are now copying in.
  2314   */
  2315   iParent = pSubitem->iCursor;
  2316   {
  2317     int nSubSrc = pSubSrc->nSrc;
  2318     int jointype = pSubitem->jointype;
  2319 
  2320     sqlite3DeleteTable(pSubitem->pTab);
  2321     sqlite3_free(pSubitem->zDatabase);
  2322     sqlite3_free(pSubitem->zName);
  2323     sqlite3_free(pSubitem->zAlias);
  2324     if( nSubSrc>1 ){
  2325       int extra = nSubSrc - 1;
  2326       for(i=1; i<nSubSrc; i++){
  2327         pSrc = sqlite3SrcListAppend(db, pSrc, 0, 0);
  2328       }
  2329       p->pSrc = pSrc;
  2330       for(i=pSrc->nSrc-1; i-extra>=iFrom; i--){
  2331         pSrc->a[i] = pSrc->a[i-extra];
  2332       }
  2333     }
  2334     for(i=0; i<nSubSrc; i++){
  2335       pSrc->a[i+iFrom] = pSubSrc->a[i];
  2336       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
  2337     }
  2338     pSrc->a[iFrom].jointype = jointype;
  2339   }
  2340 
  2341   /* Now begin substituting subquery result set expressions for 
  2342   ** references to the iParent in the outer query.
  2343   ** 
  2344   ** Example:
  2345   **
  2346   **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
  2347   **   \                     \_____________ subquery __________/          /
  2348   **    \_____________________ outer query ______________________________/
  2349   **
  2350   ** We look at every expression in the outer query and every place we see
  2351   ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
  2352   */
  2353   pList = p->pEList;
  2354   for(i=0; i<pList->nExpr; i++){
  2355     Expr *pExpr;
  2356     if( pList->a[i].zName==0 && (pExpr = pList->a[i].pExpr)->span.z!=0 ){
  2357       pList->a[i].zName = 
  2358              sqlite3DbStrNDup(db, (char*)pExpr->span.z, pExpr->span.n);
  2359     }
  2360   }
  2361   substExprList(db, p->pEList, iParent, pSub->pEList);
  2362   if( isAgg ){
  2363     substExprList(db, p->pGroupBy, iParent, pSub->pEList);
  2364     substExpr(db, p->pHaving, iParent, pSub->pEList);
  2365   }
  2366   if( pSub->pOrderBy ){
  2367     assert( p->pOrderBy==0 );
  2368     p->pOrderBy = pSub->pOrderBy;
  2369     pSub->pOrderBy = 0;
  2370   }else if( p->pOrderBy ){
  2371     substExprList(db, p->pOrderBy, iParent, pSub->pEList);
  2372   }
  2373   if( pSub->pWhere ){
  2374     pWhere = sqlite3ExprDup(db, pSub->pWhere);
  2375   }else{
  2376     pWhere = 0;
  2377   }
  2378   if( subqueryIsAgg ){
  2379     assert( p->pHaving==0 );
  2380     p->pHaving = p->pWhere;
  2381     p->pWhere = pWhere;
  2382     substExpr(db, p->pHaving, iParent, pSub->pEList);
  2383     p->pHaving = sqlite3ExprAnd(db, p->pHaving, 
  2384                                 sqlite3ExprDup(db, pSub->pHaving));
  2385     assert( p->pGroupBy==0 );
  2386     p->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy);
  2387   }else{
  2388     substExpr(db, p->pWhere, iParent, pSub->pEList);
  2389     p->pWhere = sqlite3ExprAnd(db, p->pWhere, pWhere);
  2390   }
  2391 
  2392   /* The flattened query is distinct if either the inner or the
  2393   ** outer query is distinct. 
  2394   */
  2395   p->isDistinct = p->isDistinct || pSub->isDistinct;
  2396 
  2397   /*
  2398   ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
  2399   **
  2400   ** One is tempted to try to add a and b to combine the limits.  But this
  2401   ** does not work if either limit is negative.
  2402   */
  2403   if( pSub->pLimit ){
  2404     p->pLimit = pSub->pLimit;
  2405     pSub->pLimit = 0;
  2406   }
  2407 
  2408   /* Finially, delete what is left of the subquery and return
  2409   ** success.
  2410   */
  2411   sqlite3SelectDelete(pSub);
  2412   return 1;
  2413 }
  2414 #endif /* SQLITE_OMIT_VIEW */
  2415 
  2416 /*
  2417 ** Analyze the SELECT statement passed in as an argument to see if it
  2418 ** is a simple min() or max() query.  If it is and this query can be
  2419 ** satisfied using a single seek to the beginning or end of an index,
  2420 ** then generate the code for this SELECT and return 1.  If this is not a 
  2421 ** simple min() or max() query, then return 0;
  2422 **
  2423 ** A simply min() or max() query looks like this:
  2424 **
  2425 **    SELECT min(a) FROM table;
  2426 **    SELECT max(a) FROM table;
  2427 **
  2428 ** The query may have only a single table in its FROM argument.  There
  2429 ** can be no GROUP BY or HAVING or WHERE clauses.  The result set must
  2430 ** be the min() or max() of a single column of the table.  The column
  2431 ** in the min() or max() function must be indexed.
  2432 **
  2433 ** The parameters to this routine are the same as for sqlite3Select().
  2434 ** See the header comment on that routine for additional information.
  2435 */
  2436 static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){
  2437   Expr *pExpr;
  2438   int iCol;
  2439   Table *pTab;
  2440   Index *pIdx;
  2441   int base;
  2442   Vdbe *v;
  2443   int seekOp;
  2444   ExprList *pEList, *pList, eList;
  2445   struct ExprList_item eListItem;
  2446   SrcList *pSrc;
  2447   int brk;
  2448   int iDb;
  2449 
  2450   /* Check to see if this query is a simple min() or max() query.  Return
  2451   ** zero if it is  not.
  2452   */
  2453   if( p->pGroupBy || p->pHaving || p->pWhere ) return 0;
  2454   pSrc = p->pSrc;
  2455   if( pSrc->nSrc!=1 ) return 0;
  2456   pEList = p->pEList;
  2457   if( pEList->nExpr!=1 ) return 0;
  2458   pExpr = pEList->a[0].pExpr;
  2459   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
  2460   pList = pExpr->pList;
  2461   if( pList==0 || pList->nExpr!=1 ) return 0;
  2462   if( pExpr->token.n!=3 ) return 0;
  2463   if( sqlite3StrNICmp((char*)pExpr->token.z,"min",3)==0 ){
  2464     seekOp = OP_Rewind;
  2465   }else if( sqlite3StrNICmp((char*)pExpr->token.z,"max",3)==0 ){
  2466     seekOp = OP_Last;
  2467   }else{
  2468     return 0;
  2469   }
  2470   pExpr = pList->a[0].pExpr;
  2471   if( pExpr->op!=TK_COLUMN ) return 0;
  2472   iCol = pExpr->iColumn;
  2473   pTab = pSrc->a[0].pTab;
  2474 
  2475   /* This optimization cannot be used with virtual tables. */
  2476   if( IsVirtual(pTab) ) return 0;
  2477 
  2478   /* If we get to here, it means the query is of the correct form.
  2479   ** Check to make sure we have an index and make pIdx point to the
  2480   ** appropriate index.  If the min() or max() is on an INTEGER PRIMARY
  2481   ** key column, no index is necessary so set pIdx to NULL.  If no
  2482   ** usable index is found, return 0.
  2483   */
  2484   if( iCol<0 ){
  2485     pIdx = 0;
  2486   }else{
  2487     CollSeq *pColl = sqlite3ExprCollSeq(pParse, pExpr);
  2488     if( pColl==0 ) return 0;
  2489     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
  2490       assert( pIdx->nColumn>=1 );
  2491       if( pIdx->aiColumn[0]==iCol && 
  2492           0==sqlite3StrICmp(pIdx->azColl[0], pColl->zName) ){
  2493         break;
  2494       }
  2495     }
  2496     if( pIdx==0 ) return 0;
  2497   }
  2498 
  2499   /* Identify column types if we will be using the callback.  This
  2500   ** step is skipped if the output is going to a table or a memory cell.
  2501   ** The column names have already been generated in the calling function.
  2502   */
  2503   v = sqlite3GetVdbe(pParse);
  2504   if( v==0 ) return 0;
  2505 
  2506   /* If the output is destined for a temporary table, open that table.
  2507   */
  2508   if( eDest==SRT_EphemTab ){
  2509     sqlite3VdbeAddOp(v, OP_OpenEphemeral, iParm, 1);
  2510   }
  2511 
  2512   /* Generating code to find the min or the max.  Basically all we have
  2513   ** to do is find the first or the last entry in the chosen index.  If
  2514   ** the min() or max() is on the INTEGER PRIMARY KEY, then find the first
  2515   ** or last entry in the main table.
  2516   */
  2517   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
  2518   assert( iDb>=0 || pTab->isEphem );
  2519   sqlite3CodeVerifySchema(pParse, iDb);
  2520   sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
  2521   base = pSrc->a[0].iCursor;
  2522   brk = sqlite3VdbeMakeLabel(v);
  2523   computeLimitRegisters(pParse, p, brk);
  2524   if( pSrc->a[0].pSelect==0 ){
  2525     sqlite3OpenTable(pParse, base, iDb, pTab, OP_OpenRead);
  2526   }
  2527   if( pIdx==0 ){
  2528     sqlite3VdbeAddOp(v, seekOp, base, 0);
  2529   }else{
  2530     /* Even though the cursor used to open the index here is closed
  2531     ** as soon as a single value has been read from it, allocate it
  2532     ** using (pParse->nTab++) to prevent the cursor id from being 
  2533     ** reused. This is important for statements of the form 
  2534     ** "INSERT INTO x SELECT max() FROM x".
  2535     */
  2536     int iIdx;
  2537     KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
  2538     iIdx = pParse->nTab++;
  2539     assert( pIdx->pSchema==pTab->pSchema );
  2540     sqlite3VdbeAddOp(v, OP_Integer, iDb, 0);
  2541     sqlite3VdbeOp3(v, OP_OpenRead, iIdx, pIdx->tnum, 
  2542         (char*)pKey, P3_KEYINFO_HANDOFF);
  2543     if( seekOp==OP_Rewind ){
  2544       sqlite3VdbeAddOp(v, OP_Null, 0, 0);
  2545       sqlite3VdbeAddOp(v, OP_MakeRecord, 1, 0);
  2546       seekOp = OP_MoveGt;
  2547     }
  2548     if( pIdx->aSortOrder[0]==SQLITE_SO_DESC ){
  2549       /* Ticket #2514: invert the seek operator if we are using
  2550       ** a descending index. */
  2551       if( seekOp==OP_Last ){
  2552         seekOp = OP_Rewind;
  2553       }else{
  2554         assert( seekOp==OP_MoveGt );
  2555         seekOp = OP_MoveLt;
  2556       }
  2557     }
  2558     sqlite3VdbeAddOp(v, seekOp, iIdx, 0);
  2559     sqlite3VdbeAddOp(v, OP_IdxRowid, iIdx, 0);
  2560     sqlite3VdbeAddOp(v, OP_Close, iIdx, 0);
  2561     sqlite3VdbeAddOp(v, OP_MoveGe, base, 0);
  2562   }
  2563   eList.nExpr = 1;
  2564   memset(&eListItem, 0, sizeof(eListItem));
  2565   eList.a = &eListItem;
  2566   eList.a[0].pExpr = pExpr;
  2567   selectInnerLoop(pParse, p, &eList, 0, 0, 0, -1, eDest, iParm, brk, brk, 0);
  2568   sqlite3VdbeResolveLabel(v, brk);
  2569   sqlite3VdbeAddOp(v, OP_Close, base, 0);
  2570   
  2571   return 1;
  2572 }
  2573 
  2574 /*
  2575 ** Analyze and ORDER BY or GROUP BY clause in a SELECT statement.  Return
  2576 ** the number of errors seen.
  2577 **
  2578 ** An ORDER BY or GROUP BY is a list of expressions.  If any expression
  2579 ** is an integer constant, then that expression is replaced by the
  2580 ** corresponding entry in the result set.
  2581 */
  2582 static int processOrderGroupBy(
  2583   NameContext *pNC,     /* Name context of the SELECT statement. */
  2584   ExprList *pOrderBy,   /* The ORDER BY or GROUP BY clause to be processed */
  2585   const char *zType     /* Either "ORDER" or "GROUP", as appropriate */
  2586 ){
  2587   int i;
  2588   ExprList *pEList = pNC->pEList;     /* The result set of the SELECT */
  2589   Parse *pParse = pNC->pParse;     /* The result set of the SELECT */
  2590   assert( pEList );
  2591 
  2592   if( pOrderBy==0 ) return 0;
  2593   if( pOrderBy->nExpr>SQLITE_MAX_COLUMN ){
  2594     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
  2595     return 1;
  2596   }
  2597   for(i=0; i<pOrderBy->nExpr; i++){
  2598     int iCol;
  2599     Expr *pE = pOrderBy->a[i].pExpr;
  2600     if( sqlite3ExprIsInteger(pE, &iCol) ){
  2601       if( iCol>0 && iCol<=pEList->nExpr ){
  2602         CollSeq *pColl = pE->pColl;
  2603         int flags = pE->flags & EP_ExpCollate;
  2604         sqlite3ExprDelete(pE);
  2605         pE = sqlite3ExprDup(pParse->db, pEList->a[iCol-1].pExpr);
  2606         pOrderBy->a[i].pExpr = pE;
  2607         if( pColl && flags ){
  2608           pE->pColl = pColl;
  2609           pE->flags |= flags;
  2610         }
  2611       }else{
  2612         sqlite3ErrorMsg(pParse, 
  2613            "%s BY column number %d out of range - should be "
  2614            "between 1 and %d", zType, iCol, pEList->nExpr);
  2615         return 1;
  2616       }
  2617     }
  2618     if( sqlite3ExprResolveNames(pNC, pE) ){
  2619       return 1;
  2620     }
  2621   }
  2622   return 0;
  2623 }
  2624 
  2625 /*
  2626 ** This routine resolves any names used in the result set of the
  2627 ** supplied SELECT statement. If the SELECT statement being resolved
  2628 ** is a sub-select, then pOuterNC is a pointer to the NameContext 
  2629 ** of the parent SELECT.
  2630 */
  2631 int sqlite3SelectResolve(
  2632   Parse *pParse,         /* The parser context */
  2633   Select *p,             /* The SELECT statement being coded. */
  2634   NameContext *pOuterNC  /* The outer name context. May be NULL. */
  2635 ){
  2636   ExprList *pEList;          /* Result set. */
  2637   int i;                     /* For-loop variable used in multiple places */
  2638   NameContext sNC;           /* Local name-context */
  2639   ExprList *pGroupBy;        /* The group by clause */
  2640 
  2641   /* If this routine has run before, return immediately. */
  2642   if( p->isResolved ){
  2643     assert( !pOuterNC );
  2644     return SQLITE_OK;
  2645   }
  2646   p->isResolved = 1;
  2647 
  2648   /* If there have already been errors, do nothing. */
  2649   if( pParse->nErr>0 ){
  2650     return SQLITE_ERROR;
  2651   }
  2652 
  2653   /* Prepare the select statement. This call will allocate all cursors
  2654   ** required to handle the tables and subqueries in the FROM clause.
  2655   */
  2656   if( prepSelectStmt(pParse, p) ){
  2657     return SQLITE_ERROR;
  2658   }
  2659 
  2660   /* Resolve the expressions in the LIMIT and OFFSET clauses. These
  2661   ** are not allowed to refer to any names, so pass an empty NameContext.
  2662   */
  2663   memset(&sNC, 0, sizeof(sNC));
  2664   sNC.pParse = pParse;
  2665   if( sqlite3ExprResolveNames(&sNC, p->pLimit) ||
  2666       sqlite3ExprResolveNames(&sNC, p->pOffset) ){
  2667     return SQLITE_ERROR;
  2668   }
  2669 
  2670   /* Set up the local name-context to pass to ExprResolveNames() to
  2671   ** resolve the expression-list.
  2672   */
  2673   sNC.allowAgg = 1;
  2674   sNC.pSrcList = p->pSrc;
  2675   sNC.pNext = pOuterNC;
  2676 
  2677   /* Resolve names in the result set. */
  2678   pEList = p->pEList;
  2679   if( !pEList ) return SQLITE_ERROR;
  2680   for(i=0; i<pEList->nExpr; i++){
  2681     Expr *pX = pEList->a[i].pExpr;
  2682     if( sqlite3ExprResolveNames(&sNC, pX) ){
  2683       return SQLITE_ERROR;
  2684     }
  2685   }
  2686 
  2687   /* If there are no aggregate functions in the result-set, and no GROUP BY 
  2688   ** expression, do not allow aggregates in any of the other expressions.
  2689   */
  2690   assert( !p->isAgg );
  2691   pGroupBy = p->pGroupBy;
  2692   if( pGroupBy || sNC.hasAgg ){
  2693     p->isAgg = 1;
  2694   }else{
  2695     sNC.allowAgg = 0;
  2696   }
  2697 
  2698   /* If a HAVING clause is present, then there must be a GROUP BY clause.
  2699   */
  2700   if( p->pHaving && !pGroupBy ){
  2701     sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
  2702     return SQLITE_ERROR;
  2703   }
  2704 
  2705   /* Add the expression list to the name-context before parsing the
  2706   ** other expressions in the SELECT statement. This is so that
  2707   ** expressions in the WHERE clause (etc.) can refer to expressions by
  2708   ** aliases in the result set.
  2709   **
  2710   ** Minor point: If this is the case, then the expression will be
  2711   ** re-evaluated for each reference to it.
  2712   */
  2713   sNC.pEList = p->pEList;
  2714   if( sqlite3ExprResolveNames(&sNC, p->pWhere) ||
  2715      sqlite3ExprResolveNames(&sNC, p->pHaving) ){
  2716     return SQLITE_ERROR;
  2717   }
  2718   if( p->pPrior==0 ){
  2719     if( processOrderGroupBy(&sNC, p->pOrderBy, "ORDER") ||
  2720         processOrderGroupBy(&sNC, pGroupBy, "GROUP") ){
  2721       return SQLITE_ERROR;
  2722     }
  2723   }
  2724 
  2725   if( pParse->db->mallocFailed ){
  2726     return SQLITE_NOMEM;
  2727   }
  2728 
  2729   /* Make sure the GROUP BY clause does not contain aggregate functions.
  2730   */
  2731   if( pGroupBy ){
  2732     struct ExprList_item *pItem;
  2733   
  2734     for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
  2735       if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
  2736         sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
  2737             "the GROUP BY clause");
  2738         return SQLITE_ERROR;
  2739       }
  2740     }
  2741   }
  2742 
  2743   /* If this is one SELECT of a compound, be sure to resolve names
  2744   ** in the other SELECTs.
  2745   */
  2746   if( p->pPrior ){
  2747     return sqlite3SelectResolve(pParse, p->pPrior, pOuterNC);
  2748   }else{
  2749     return SQLITE_OK;
  2750   }
  2751 }
  2752 
  2753 /*
  2754 ** Reset the aggregate accumulator.
  2755 **
  2756 ** The aggregate accumulator is a set of memory cells that hold
  2757 ** intermediate results while calculating an aggregate.  This
  2758 ** routine simply stores NULLs in all of those memory cells.
  2759 */
  2760 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
  2761   Vdbe *v = pParse->pVdbe;
  2762   int i;
  2763   struct AggInfo_func *pFunc;
  2764   if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
  2765     return;
  2766   }
  2767   for(i=0; i<pAggInfo->nColumn; i++){
  2768     sqlite3VdbeAddOp(v, OP_MemNull, pAggInfo->aCol[i].iMem, 0);
  2769   }
  2770   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
  2771     sqlite3VdbeAddOp(v, OP_MemNull, pFunc->iMem, 0);
  2772     if( pFunc->iDistinct>=0 ){
  2773       Expr *pE = pFunc->pExpr;
  2774       if( pE->pList==0 || pE->pList->nExpr!=1 ){
  2775         sqlite3ErrorMsg(pParse, "DISTINCT in aggregate must be followed "
  2776            "by an expression");
  2777         pFunc->iDistinct = -1;
  2778       }else{
  2779         KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->pList);
  2780         sqlite3VdbeOp3(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 
  2781                           (char*)pKeyInfo, P3_KEYINFO_HANDOFF);
  2782       }
  2783     }
  2784   }
  2785 }
  2786 
  2787 /*
  2788 ** Invoke the OP_AggFinalize opcode for every aggregate function
  2789 ** in the AggInfo structure.
  2790 */
  2791 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
  2792   Vdbe *v = pParse->pVdbe;
  2793   int i;
  2794   struct AggInfo_func *pF;
  2795   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
  2796     ExprList *pList = pF->pExpr->pList;
  2797     sqlite3VdbeOp3(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0,
  2798                       (void*)pF->pFunc, P3_FUNCDEF);
  2799   }
  2800 }
  2801 
  2802 /*
  2803 ** Update the accumulator memory cells for an aggregate based on
  2804 ** the current cursor position.
  2805 */
  2806 static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
  2807   Vdbe *v = pParse->pVdbe;
  2808   int i;
  2809   struct AggInfo_func *pF;
  2810   struct AggInfo_col *pC;
  2811 
  2812   pAggInfo->directMode = 1;
  2813   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
  2814     int nArg;
  2815     int addrNext = 0;
  2816     ExprList *pList = pF->pExpr->pList;
  2817     if( pList ){
  2818       nArg = pList->nExpr;
  2819       sqlite3ExprCodeExprList(pParse, pList);
  2820     }else{
  2821       nArg = 0;
  2822     }
  2823     if( pF->iDistinct>=0 ){
  2824       addrNext = sqlite3VdbeMakeLabel(v);
  2825       assert( nArg==1 );
  2826       codeDistinct(v, pF->iDistinct, addrNext, 1);
  2827     }
  2828     if( pF->pFunc->needCollSeq ){
  2829       CollSeq *pColl = 0;
  2830       struct ExprList_item *pItem;
  2831       int j;
  2832       assert( pList!=0 );  /* pList!=0 if pF->pFunc->needCollSeq is true */
  2833       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
  2834         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
  2835       }
  2836       if( !pColl ){
  2837         pColl = pParse->db->pDfltColl;
  2838       }
  2839       sqlite3VdbeOp3(v, OP_CollSeq, 0, 0, (char *)pColl, P3_COLLSEQ);
  2840     }
  2841     sqlite3VdbeOp3(v, OP_AggStep, pF->iMem, nArg, (void*)pF->pFunc, P3_FUNCDEF);
  2842     if( addrNext ){
  2843       sqlite3VdbeResolveLabel(v, addrNext);
  2844     }
  2845   }
  2846   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
  2847     sqlite3ExprCode(pParse, pC->pExpr);
  2848     sqlite3VdbeAddOp(v, OP_MemStore, pC->iMem, 1);
  2849   }
  2850   pAggInfo->directMode = 0;
  2851 }
  2852 
  2853 
  2854 /*
  2855 ** Generate code for the given SELECT statement.
  2856 **
  2857 ** The results are distributed in various ways depending on the
  2858 ** value of eDest and iParm.
  2859 **
  2860 **     eDest Value       Result
  2861 **     ------------    -------------------------------------------
  2862 **     SRT_Callback    Invoke the callback for each row of the result.
  2863 **
  2864 **     SRT_Mem         Store first result in memory cell iParm
  2865 **
  2866 **     SRT_Set         Store results as keys of table iParm.
  2867 **
  2868 **     SRT_Union       Store results as a key in a temporary table iParm
  2869 **
  2870 **     SRT_Except      Remove results from the temporary table iParm.
  2871 **
  2872 **     SRT_Table       Store results in temporary table iParm
  2873 **
  2874 ** The table above is incomplete.  Additional eDist value have be added
  2875 ** since this comment was written.  See the selectInnerLoop() function for
  2876 ** a complete listing of the allowed values of eDest and their meanings.
  2877 **
  2878 ** This routine returns the number of errors.  If any errors are
  2879 ** encountered, then an appropriate error message is left in
  2880 ** pParse->zErrMsg.
  2881 **
  2882 ** This routine does NOT free the Select structure passed in.  The
  2883 ** calling function needs to do that.
  2884 **
  2885 ** The pParent, parentTab, and *pParentAgg fields are filled in if this
  2886 ** SELECT is a subquery.  This routine may try to combine this SELECT
  2887 ** with its parent to form a single flat query.  In so doing, it might
  2888 ** change the parent query from a non-aggregate to an aggregate query.
  2889 ** For that reason, the pParentAgg flag is passed as a pointer, so it
  2890 ** can be changed.
  2891 **
  2892 ** Example 1:   The meaning of the pParent parameter.
  2893 **
  2894 **    SELECT * FROM t1 JOIN (SELECT x, count(*) FROM t2) JOIN t3;
  2895 **    \                      \_______ subquery _______/        /
  2896 **     \                                                      /
  2897 **      \____________________ outer query ___________________/
  2898 **
  2899 ** This routine is called for the outer query first.   For that call,
  2900 ** pParent will be NULL.  During the processing of the outer query, this 
  2901 ** routine is called recursively to handle the subquery.  For the recursive
  2902 ** call, pParent will point to the outer query.  Because the subquery is
  2903 ** the second element in a three-way join, the parentTab parameter will
  2904 ** be 1 (the 2nd value of a 0-indexed array.)
  2905 */
  2906 int sqlite3Select(
  2907   Parse *pParse,         /* The parser context */
  2908   Select *p,             /* The SELECT statement being coded. */
  2909   int eDest,             /* How to dispose of the results */
  2910   int iParm,             /* A parameter used by the eDest disposal method */
  2911   Select *pParent,       /* Another SELECT for which this is a sub-query */
  2912   int parentTab,         /* Index in pParent->pSrc of this query */
  2913   int *pParentAgg,       /* True if pParent uses aggregate functions */
  2914   char *aff              /* If eDest is SRT_Union, the affinity string */
  2915 ){
  2916   int i, j;              /* Loop counters */
  2917   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
  2918   Vdbe *v;               /* The virtual machine under construction */
  2919   int isAgg;             /* True for select lists like "count(*)" */
  2920   ExprList *pEList;      /* List of columns to extract. */
  2921   SrcList *pTabList;     /* List of tables to select from */
  2922   Expr *pWhere;          /* The WHERE clause.  May be NULL */
  2923   ExprList *pOrderBy;    /* The ORDER BY clause.  May be NULL */
  2924   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
  2925   Expr *pHaving;         /* The HAVING clause.  May be NULL */
  2926   int isDistinct;        /* True if the DISTINCT keyword is present */
  2927   int distinct;          /* Table to use for the distinct set */
  2928   int rc = 1;            /* Value to return from this function */
  2929   int addrSortIndex;     /* Address of an OP_OpenEphemeral instruction */
  2930   AggInfo sAggInfo;      /* Information used by aggregate queries */
  2931   int iEnd;              /* Address of the end of the query */
  2932   sqlite3 *db;           /* The database connection */
  2933 
  2934   db = pParse->db;
  2935   if( p==0 || db->mallocFailed || pParse->nErr ){
  2936     return 1;
  2937   }
  2938   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
  2939   memset(&sAggInfo, 0, sizeof(sAggInfo));
  2940 
  2941 #ifndef SQLITE_OMIT_COMPOUND_SELECT
  2942   /* If there is are a sequence of queries, do the earlier ones first.
  2943   */
  2944   if( p->pPrior ){
  2945     if( p->pRightmost==0 ){
  2946       Select *pLoop;
  2947       int cnt = 0;
  2948       for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
  2949         pLoop->pRightmost = p;
  2950       }
  2951       if( SQLITE_MAX_COMPOUND_SELECT>0 && cnt>SQLITE_MAX_COMPOUND_SELECT ){
  2952         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
  2953         return 1;
  2954       }
  2955     }
  2956     return multiSelect(pParse, p, eDest, iParm, aff);
  2957   }
  2958 #endif
  2959 
  2960   pOrderBy = p->pOrderBy;
  2961   if( IgnorableOrderby(eDest) ){
  2962     p->pOrderBy = 0;
  2963   }
  2964   if( sqlite3SelectResolve(pParse, p, 0) ){
  2965     goto select_end;
  2966   }
  2967   p->pOrderBy = pOrderBy;
  2968 
  2969   /* Make local copies of the parameters for this query.
  2970   */
  2971   pTabList = p->pSrc;
  2972   pWhere = p->pWhere;
  2973   pGroupBy = p->pGroupBy;
  2974   pHaving = p->pHaving;
  2975   isAgg = p->isAgg;
  2976   isDistinct = p->isDistinct;
  2977   pEList = p->pEList;
  2978   if( pEList==0 ) goto select_end;
  2979 
  2980   /* 
  2981   ** Do not even attempt to generate any code if we have already seen
  2982   ** errors before this routine starts.
  2983   */
  2984   if( pParse->nErr>0 ) goto select_end;
  2985 
  2986   /* If writing to memory or generating a set
  2987   ** only a single column may be output.
  2988   */
  2989 #ifndef SQLITE_OMIT_SUBQUERY
  2990   if( checkForMultiColumnSelectError(pParse, eDest, pEList->nExpr) ){
  2991     goto select_end;
  2992   }
  2993 #endif
  2994 
  2995   /* ORDER BY is ignored for some destinations.
  2996   */
  2997   if( IgnorableOrderby(eDest) ){
  2998     pOrderBy = 0;
  2999   }
  3000 
  3001   /* Begin generating code.
  3002   */
  3003   v = sqlite3GetVdbe(pParse);
  3004   if( v==0 ) goto select_end;
  3005 
  3006   /* Generate code for all sub-queries in the FROM clause
  3007   */
  3008 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
  3009   for(i=0; i<pTabList->nSrc; i++){
  3010     const char *zSavedAuthContext = 0;
  3011     int needRestoreContext;
  3012     struct SrcList_item *pItem = &pTabList->a[i];
  3013 
  3014     if( pItem->pSelect==0 || pItem->isPopulated ) continue;
  3015     if( pItem->zName!=0 ){
  3016       zSavedAuthContext = pParse->zAuthContext;
  3017       pParse->zAuthContext = pItem->zName;
  3018       needRestoreContext = 1;
  3019     }else{
  3020       needRestoreContext = 0;
  3021     }
  3022 #if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0
  3023     /* Increment Parse.nHeight by the height of the largest expression
  3024     ** tree refered to by this, the parent select. The child select
  3025     ** may contain expression trees of at most
  3026     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
  3027     ** more conservative than necessary, but much easier than enforcing
  3028     ** an exact limit.
  3029     */
  3030     pParse->nHeight += sqlite3SelectExprHeight(p);
  3031 #endif
  3032     sqlite3Select(pParse, pItem->pSelect, SRT_EphemTab, 
  3033                  pItem->iCursor, p, i, &isAgg, 0);
  3034 #if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0
  3035     pParse->nHeight -= sqlite3SelectExprHeight(p);
  3036 #endif
  3037     if( needRestoreContext ){
  3038       pParse->zAuthContext = zSavedAuthContext;
  3039     }
  3040     pTabList = p->pSrc;
  3041     pWhere = p->pWhere;
  3042     if( !IgnorableOrderby(eDest) ){
  3043       pOrderBy = p->pOrderBy;
  3044     }
  3045     pGroupBy = p->pGroupBy;
  3046     pHaving = p->pHaving;
  3047     isDistinct = p->isDistinct;
  3048   }
  3049 #endif
  3050 
  3051   /* Check for the special case of a min() or max() function by itself
  3052   ** in the result set.
  3053   */
  3054   if( simpleMinMaxQuery(pParse, p, eDest, iParm) ){
  3055     rc = 0;
  3056     goto select_end;
  3057   }
  3058 
  3059   /* Check to see if this is a subquery that can be "flattened" into its parent.
  3060   ** If flattening is a possiblity, do so and return immediately.  
  3061   */
  3062 #ifndef SQLITE_OMIT_VIEW
  3063   if( pParent && pParentAgg &&
  3064       flattenSubquery(db, pParent, parentTab, *pParentAgg, isAgg) ){
  3065     if( isAgg ) *pParentAgg = 1;
  3066     goto select_end;
  3067   }
  3068 #endif
  3069 
  3070   /* If there is an ORDER BY clause, then this sorting
  3071   ** index might end up being unused if the data can be 
  3072   ** extracted in pre-sorted order.  If that is the case, then the
  3073   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
  3074   ** we figure out that the sorting index is not needed.  The addrSortIndex
  3075   ** variable is used to facilitate that change.
  3076   */
  3077   if( pOrderBy ){
  3078     KeyInfo *pKeyInfo;
  3079     if( pParse->nErr ){
  3080       goto select_end;
  3081     }
  3082     pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
  3083     pOrderBy->iECursor = pParse->nTab++;
  3084     p->addrOpenEphm[2] = addrSortIndex =
  3085       sqlite3VdbeOp3(v, OP_OpenEphemeral, pOrderBy->iECursor, pOrderBy->nExpr+2,                     (char*)pKeyInfo, P3_KEYINFO_HANDOFF);
  3086   }else{
  3087     addrSortIndex = -1;
  3088   }
  3089 
  3090   /* If the output is destined for a temporary table, open that table.
  3091   */
  3092   if( eDest==SRT_EphemTab ){
  3093     sqlite3VdbeAddOp(v, OP_OpenEphemeral, iParm, pEList->nExpr);
  3094   }
  3095 
  3096   /* Set the limiter.
  3097   */
  3098   iEnd = sqlite3VdbeMakeLabel(v);
  3099   computeLimitRegisters(pParse, p, iEnd);
  3100 
  3101   /* Open a virtual index to use for the distinct set.
  3102   */
  3103   if( isDistinct ){
  3104     KeyInfo *pKeyInfo;
  3105     distinct = pParse->nTab++;
  3106     pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
  3107     sqlite3VdbeOp3(v, OP_OpenEphemeral, distinct, 0, 
  3108                         (char*)pKeyInfo, P3_KEYINFO_HANDOFF);
  3109   }else{
  3110     distinct = -1;
  3111   }
  3112 
  3113   /* Aggregate and non-aggregate queries are handled differently */
  3114   if( !isAgg && pGroupBy==0 ){
  3115     /* This case is for non-aggregate queries
  3116     ** Begin the database scan
  3117     */
  3118     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy);
  3119     if( pWInfo==0 ) goto select_end;
  3120 
  3121     /* If sorting index that was created by a prior OP_OpenEphemeral 
  3122     ** instruction ended up not being needed, then change the OP_OpenEphemeral
  3123     ** into an OP_Noop.
  3124     */
  3125     if( addrSortIndex>=0 && pOrderBy==0 ){
  3126       sqlite3VdbeChangeToNoop(v, addrSortIndex, 1);
  3127       p->addrOpenEphm[2] = -1;
  3128     }
  3129 
  3130     /* Use the standard inner loop
  3131     */
  3132     if( selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, eDest,
  3133                     iParm, pWInfo->iContinue, pWInfo->iBreak, aff) ){
  3134        goto select_end;
  3135     }
  3136 
  3137     /* End the database scan loop.
  3138     */
  3139     sqlite3WhereEnd(pWInfo);
  3140   }else{
  3141     /* This is the processing for aggregate queries */
  3142     NameContext sNC;    /* Name context for processing aggregate information */
  3143     int iAMem;          /* First Mem address for storing current GROUP BY */
  3144     int iBMem;          /* First Mem address for previous GROUP BY */
  3145     int iUseFlag;       /* Mem address holding flag indicating that at least
  3146                         ** one row of the input to the aggregator has been
  3147                         ** processed */
  3148     int iAbortFlag;     /* Mem address which causes query abort if positive */
  3149     int groupBySort;    /* Rows come from source in GROUP BY order */
  3150 
  3151 
  3152     /* The following variables hold addresses or labels for parts of the
  3153     ** virtual machine program we are putting together */
  3154     int addrOutputRow;      /* Start of subroutine that outputs a result row */
  3155     int addrSetAbort;       /* Set the abort flag and return */
  3156     int addrInitializeLoop; /* Start of code that initializes the input loop */
  3157     int addrTopOfLoop;      /* Top of the input loop */
  3158     int addrGroupByChange;  /* Code that runs when any GROUP BY term changes */
  3159     int addrProcessRow;     /* Code to process a single input row */
  3160     int addrEnd;            /* End of all processing */
  3161     int addrSortingIdx;     /* The OP_OpenEphemeral for the sorting index */
  3162     int addrReset;          /* Subroutine for resetting the accumulator */
  3163 
  3164     addrEnd = sqlite3VdbeMakeLabel(v);
  3165 
  3166     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
  3167     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
  3168     ** SELECT statement.
  3169     */
  3170     memset(&sNC, 0, sizeof(sNC));
  3171     sNC.pParse = pParse;
  3172     sNC.pSrcList = pTabList;
  3173     sNC.pAggInfo = &sAggInfo;
  3174     sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
  3175     sAggInfo.pGroupBy = pGroupBy;
  3176     if( sqlite3ExprAnalyzeAggList(&sNC, pEList) ){
  3177       goto select_end;
  3178     }
  3179     if( sqlite3ExprAnalyzeAggList(&sNC, pOrderBy) ){
  3180       goto select_end;
  3181     }
  3182     if( pHaving && sqlite3ExprAnalyzeAggregates(&sNC, pHaving) ){
  3183       goto select_end;
  3184     }
  3185     sAggInfo.nAccumulator = sAggInfo.nColumn;
  3186     for(i=0; i<sAggInfo.nFunc; i++){
  3187       if( sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->pList) ){
  3188         goto select_end;
  3189       }
  3190     }
  3191     if( db->mallocFailed ) goto select_end;
  3192 
  3193     /* Processing for aggregates with GROUP BY is very different and
  3194     ** much more complex tha aggregates without a GROUP BY.
  3195     */
  3196     if( pGroupBy ){
  3197       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
  3198 
  3199       /* Create labels that we will be needing
  3200       */
  3201      
  3202       addrInitializeLoop = sqlite3VdbeMakeLabel(v);
  3203       addrGroupByChange = sqlite3VdbeMakeLabel(v);
  3204       addrProcessRow = sqlite3VdbeMakeLabel(v);
  3205 
  3206       /* If there is a GROUP BY clause we might need a sorting index to
  3207       ** implement it.  Allocate that sorting index now.  If it turns out
  3208       ** that we do not need it after all, the OpenEphemeral instruction
  3209       ** will be converted into a Noop.  
  3210       */
  3211       sAggInfo.sortingIdx = pParse->nTab++;
  3212       pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
  3213       addrSortingIdx =
  3214           sqlite3VdbeOp3(v, OP_OpenEphemeral, sAggInfo.sortingIdx,
  3215                          sAggInfo.nSortingColumn,
  3216                          (char*)pKeyInfo, P3_KEYINFO_HANDOFF);
  3217 
  3218       /* Initialize memory locations used by GROUP BY aggregate processing
  3219       */
  3220       iUseFlag = pParse->nMem++;
  3221       iAbortFlag = pParse->nMem++;
  3222       iAMem = pParse->nMem;
  3223       pParse->nMem += pGroupBy->nExpr;
  3224       iBMem = pParse->nMem;
  3225       pParse->nMem += pGroupBy->nExpr;
  3226       sqlite3VdbeAddOp(v, OP_MemInt, 0, iAbortFlag);
  3227       VdbeComment((v, "# clear abort flag"));
  3228       sqlite3VdbeAddOp(v, OP_MemInt, 0, iUseFlag);
  3229       VdbeComment((v, "# indicate accumulator empty"));
  3230       sqlite3VdbeAddOp(v, OP_Goto, 0, addrInitializeLoop);
  3231 
  3232       /* Generate a subroutine that outputs a single row of the result
  3233       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
  3234       ** is less than or equal to zero, the subroutine is a no-op.  If
  3235       ** the processing calls for the query to abort, this subroutine
  3236       ** increments the iAbortFlag memory location before returning in
  3237       ** order to signal the caller to abort.
  3238       */
  3239       addrSetAbort = sqlite3VdbeCurrentAddr(v);
  3240       sqlite3VdbeAddOp(v, OP_MemInt, 1, iAbortFlag);
  3241       VdbeComment((v, "# set abort flag"));
  3242       sqlite3VdbeAddOp(v, OP_Return, 0, 0);
  3243       addrOutputRow = sqlite3VdbeCurrentAddr(v);
  3244       sqlite3VdbeAddOp(v, OP_IfMemPos, iUseFlag, addrOutputRow+2);
  3245       VdbeComment((v, "# Groupby result generator entry point"));
  3246       sqlite3VdbeAddOp(v, OP_Return, 0, 0);
  3247       finalizeAggFunctions(pParse, &sAggInfo);
  3248       if( pHaving ){
  3249         sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, 1);
  3250       }
  3251       rc = selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
  3252                            distinct, eDest, iParm, 
  3253                            addrOutputRow+1, addrSetAbort, aff);
  3254       if( rc ){
  3255         goto select_end;
  3256       }
  3257       sqlite3VdbeAddOp(v, OP_Return, 0, 0);
  3258       VdbeComment((v, "# end groupby result generator"));
  3259 
  3260       /* Generate a subroutine that will reset the group-by accumulator
  3261       */
  3262       addrReset = sqlite3VdbeCurrentAddr(v);
  3263       resetAccumulator(pParse, &sAggInfo);
  3264       sqlite3VdbeAddOp(v, OP_Return, 0, 0);
  3265 
  3266       /* Begin a loop that will extract all source rows in GROUP BY order.
  3267       ** This might involve two separate loops with an OP_Sort in between, or
  3268       ** it might be a single loop that uses an index to extract information
  3269       ** in the right order to begin with.
  3270       */
  3271       sqlite3VdbeResolveLabel(v, addrInitializeLoop);
  3272       sqlite3VdbeAddOp(v, OP_Gosub, 0, addrReset);
  3273       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy);
  3274       if( pWInfo==0 ) goto select_end;
  3275       if( pGroupBy==0 ){
  3276         /* The optimizer is able to deliver rows in group by order so
  3277         ** we do not have to sort.  The OP_OpenEphemeral table will be
  3278         ** cancelled later because we still need to use the pKeyInfo
  3279         */
  3280         pGroupBy = p->pGroupBy;
  3281         groupBySort = 0;
  3282       }else{
  3283         /* Rows are coming out in undetermined order.  We have to push
  3284         ** each row into a sorting index, terminate the first loop,
  3285         ** then loop over the sorting index in order to get the output
  3286         ** in sorted order
  3287         */
  3288         groupBySort = 1;
  3289         sqlite3ExprCodeExprList(pParse, pGroupBy);
  3290         sqlite3VdbeAddOp(v, OP_Sequence, sAggInfo.sortingIdx, 0);
  3291         j = pGroupBy->nExpr+1;
  3292         for(i=0; i<sAggInfo.nColumn; i++){
  3293           struct AggInfo_col *pCol = &sAggInfo.aCol[i];
  3294           if( pCol->iSorterColumn<j ) continue;
  3295           sqlite3ExprCodeGetColumn(v, pCol->pTab, pCol->iColumn, pCol->iTable);
  3296           j++;
  3297         }
  3298         sqlite3VdbeAddOp(v, OP_MakeRecord, j, 0);
  3299         sqlite3VdbeAddOp(v, OP_IdxInsert, sAggInfo.sortingIdx, 0);
  3300         sqlite3WhereEnd(pWInfo);
  3301         sqlite3VdbeAddOp(v, OP_Sort, sAggInfo.sortingIdx, addrEnd);
  3302         VdbeComment((v, "# GROUP BY sort"));
  3303         sAggInfo.useSortingIdx = 1;
  3304       }
  3305 
  3306       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
  3307       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
  3308       ** Then compare the current GROUP BY terms against the GROUP BY terms
  3309       ** from the previous row currently stored in a0, a1, a2...
  3310       */
  3311       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
  3312       for(j=0; j<pGroupBy->nExpr; j++){
  3313         if( groupBySort ){
  3314           sqlite3VdbeAddOp(v, OP_Column, sAggInfo.sortingIdx, j);
  3315         }else{
  3316           sAggInfo.directMode = 1;
  3317           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr);
  3318         }
  3319         sqlite3VdbeAddOp(v, OP_MemStore, iBMem+j, j<pGroupBy->nExpr-1);
  3320       }
  3321       for(j=pGroupBy->nExpr-1; j>=0; j--){
  3322         if( j<pGroupBy->nExpr-1 ){
  3323           sqlite3VdbeAddOp(v, OP_MemLoad, iBMem+j, 0);
  3324         }
  3325         sqlite3VdbeAddOp(v, OP_MemLoad, iAMem+j, 0);
  3326         if( j==0 ){
  3327           sqlite3VdbeAddOp(v, OP_Eq, 0x200, addrProcessRow);
  3328         }else{
  3329           sqlite3VdbeAddOp(v, OP_Ne, 0x200, addrGroupByChange);
  3330         }
  3331         sqlite3VdbeChangeP3(v, -1, (void*)pKeyInfo->aColl[j], P3_COLLSEQ);
  3332       }
  3333 
  3334       /* Generate code that runs whenever the GROUP BY changes.
  3335       ** Change in the GROUP BY are detected by the previous code
  3336       ** block.  If there were no changes, this block is skipped.
  3337       **
  3338       ** This code copies current group by terms in b0,b1,b2,...
  3339       ** over to a0,a1,a2.  It then calls the output subroutine
  3340       ** and resets the aggregate accumulator registers in preparation
  3341       ** for the next GROUP BY batch.
  3342       */
  3343       sqlite3VdbeResolveLabel(v, addrGroupByChange);
  3344       for(j=0; j<pGroupBy->nExpr; j++){
  3345         sqlite3VdbeAddOp(v, OP_MemMove, iAMem+j, iBMem+j);
  3346       }
  3347       sqlite3VdbeAddOp(v, OP_Gosub, 0, addrOutputRow);
  3348       VdbeComment((v, "# output one row"));
  3349       sqlite3VdbeAddOp(v, OP_IfMemPos, iAbortFlag, addrEnd);
  3350       VdbeComment((v, "# check abort flag"));
  3351       sqlite3VdbeAddOp(v, OP_Gosub, 0, addrReset);
  3352       VdbeComment((v, "# reset accumulator"));
  3353 
  3354       /* Update the aggregate accumulators based on the content of
  3355       ** the current row
  3356       */
  3357       sqlite3VdbeResolveLabel(v, addrProcessRow);
  3358       updateAccumulator(pParse, &sAggInfo);
  3359       sqlite3VdbeAddOp(v, OP_MemInt, 1, iUseFlag);
  3360       VdbeComment((v, "# indicate data in accumulator"));
  3361 
  3362       /* End of the loop
  3363       */
  3364       if( groupBySort ){
  3365         sqlite3VdbeAddOp(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop);
  3366       }else{
  3367         sqlite3WhereEnd(pWInfo);
  3368         sqlite3VdbeChangeToNoop(v, addrSortingIdx, 1);
  3369       }
  3370 
  3371       /* Output the final row of result
  3372       */
  3373       sqlite3VdbeAddOp(v, OP_Gosub, 0, addrOutputRow);
  3374       VdbeComment((v, "# output final row"));
  3375       
  3376     } /* endif pGroupBy */
  3377     else {
  3378       /* This case runs if the aggregate has no GROUP BY clause.  The
  3379       ** processing is much simpler since there is only a single row
  3380       ** of output.
  3381       */
  3382       resetAccumulator(pParse, &sAggInfo);
  3383       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0);
  3384       if( pWInfo==0 ) goto select_end;
  3385       updateAccumulator(pParse, &sAggInfo);
  3386       sqlite3WhereEnd(pWInfo);
  3387       finalizeAggFunctions(pParse, &sAggInfo);
  3388       pOrderBy = 0;
  3389       if( pHaving ){
  3390         sqlite3ExprIfFalse(pParse, pHaving, addrEnd, 1);
  3391       }
  3392       selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 
  3393                       eDest, iParm, addrEnd, addrEnd, aff);
  3394     }
  3395     sqlite3VdbeResolveLabel(v, addrEnd);
  3396     
  3397   } /* endif aggregate query */
  3398 
  3399   /* If there is an ORDER BY clause, then we need to sort the results
  3400   ** and send them to the callback one by one.
  3401   */
  3402   if( pOrderBy ){
  3403     generateSortTail(pParse, p, v, pEList->nExpr, eDest, iParm);
  3404   }
  3405 
  3406 #ifndef SQLITE_OMIT_SUBQUERY
  3407   /* If this was a subquery, we have now converted the subquery into a
  3408   ** temporary table.  So set the SrcList_item.isPopulated flag to prevent
  3409   ** this subquery from being evaluated again and to force the use of
  3410   ** the temporary table.
  3411   */
  3412   if( pParent ){
  3413     assert( pParent->pSrc->nSrc>parentTab );
  3414     assert( pParent->pSrc->a[parentTab].pSelect==p );
  3415     pParent->pSrc->a[parentTab].isPopulated = 1;
  3416   }
  3417 #endif
  3418 
  3419   /* Jump here to skip this query
  3420   */
  3421   sqlite3VdbeResolveLabel(v, iEnd);
  3422 
  3423   /* The SELECT was successfully coded.   Set the return code to 0
  3424   ** to indicate no errors.
  3425   */
  3426   rc = 0;
  3427 
  3428   /* Control jumps to here if an error is encountered above, or upon
  3429   ** successful coding of the SELECT.
  3430   */
  3431 select_end:
  3432 
  3433   /* Identify column names if we will be using them in a callback.  This
  3434   ** step is skipped if the output is going to some other destination.
  3435   */
  3436   if( rc==SQLITE_OK && eDest==SRT_Callback ){
  3437     generateColumnNames(pParse, pTabList, pEList);
  3438   }
  3439 
  3440   sqlite3_free(sAggInfo.aCol);
  3441   sqlite3_free(sAggInfo.aFunc);
  3442   return rc;
  3443 }
  3444 
  3445 #if defined(SQLITE_DEBUG)
  3446 /*
  3447 *******************************************************************************
  3448 ** The following code is used for testing and debugging only.  The code
  3449 ** that follows does not appear in normal builds.
  3450 **
  3451 ** These routines are used to print out the content of all or part of a 
  3452 ** parse structures such as Select or Expr.  Such printouts are useful
  3453 ** for helping to understand what is happening inside the code generator
  3454 ** during the execution of complex SELECT statements.
  3455 **
  3456 ** These routine are not called anywhere from within the normal
  3457 ** code base.  Then are intended to be called from within the debugger
  3458 ** or from temporary "printf" statements inserted for debugging.
  3459 */
  3460 void sqlite3PrintExpr(Expr *p){
  3461   if( p->token.z && p->token.n>0 ){
  3462     sqlite3DebugPrintf("(%.*s", p->token.n, p->token.z);
  3463   }else{
  3464     sqlite3DebugPrintf("(%d", p->op);
  3465   }
  3466   if( p->pLeft ){
  3467     sqlite3DebugPrintf(" ");
  3468     sqlite3PrintExpr(p->pLeft);
  3469   }
  3470   if( p->pRight ){
  3471     sqlite3DebugPrintf(" ");
  3472     sqlite3PrintExpr(p->pRight);
  3473   }
  3474   sqlite3DebugPrintf(")");
  3475 }
  3476 void sqlite3PrintExprList(ExprList *pList){
  3477   int i;
  3478   for(i=0; i<pList->nExpr; i++){
  3479     sqlite3PrintExpr(pList->a[i].pExpr);
  3480     if( i<pList->nExpr-1 ){
  3481       sqlite3DebugPrintf(", ");
  3482     }
  3483   }
  3484 }
  3485 void sqlite3PrintSelect(Select *p, int indent){
  3486   sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p);
  3487   sqlite3PrintExprList(p->pEList);
  3488   sqlite3DebugPrintf("\n");
  3489   if( p->pSrc ){
  3490     char *zPrefix;
  3491     int i;
  3492     zPrefix = "FROM";
  3493     for(i=0; i<p->pSrc->nSrc; i++){
  3494       struct SrcList_item *pItem = &p->pSrc->a[i];
  3495       sqlite3DebugPrintf("%*s ", indent+6, zPrefix);
  3496       zPrefix = "";
  3497       if( pItem->pSelect ){
  3498         sqlite3DebugPrintf("(\n");
  3499         sqlite3PrintSelect(pItem->pSelect, indent+10);
  3500         sqlite3DebugPrintf("%*s)", indent+8, "");
  3501       }else if( pItem->zName ){
  3502         sqlite3DebugPrintf("%s", pItem->zName);
  3503       }
  3504       if( pItem->pTab ){
  3505         sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName);
  3506       }
  3507       if( pItem->zAlias ){
  3508         sqlite3DebugPrintf(" AS %s", pItem->zAlias);
  3509       }
  3510       if( i<p->pSrc->nSrc-1 ){
  3511         sqlite3DebugPrintf(",");
  3512       }
  3513       sqlite3DebugPrintf("\n");
  3514     }
  3515   }
  3516   if( p->pWhere ){
  3517     sqlite3DebugPrintf("%*s WHERE ", indent, "");
  3518     sqlite3PrintExpr(p->pWhere);
  3519     sqlite3DebugPrintf("\n");
  3520   }
  3521   if( p->pGroupBy ){
  3522     sqlite3DebugPrintf("%*s GROUP BY ", indent, "");
  3523     sqlite3PrintExprList(p->pGroupBy);
  3524     sqlite3DebugPrintf("\n");
  3525   }
  3526   if( p->pHaving ){
  3527     sqlite3DebugPrintf("%*s HAVING ", indent, "");
  3528     sqlite3PrintExpr(p->pHaving);
  3529     sqlite3DebugPrintf("\n");
  3530   }
  3531   if( p->pOrderBy ){
  3532     sqlite3DebugPrintf("%*s ORDER BY ", indent, "");
  3533     sqlite3PrintExprList(p->pOrderBy);
  3534     sqlite3DebugPrintf("\n");
  3535   }
  3536 }
  3537 /* End of the structure debug printing code
  3538 *****************************************************************************/
  3539 #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */