select.c File Reference

Go to the source code of this file.

Functions

static void clearSelect (sqlite3 *db, Select *p)
void sqlite3SelectDestInit (SelectDest *pDest, int eDest, int iParm)
Selectsqlite3SelectNew (Parse *pParse, ExprList *pEList, SrcList *pSrc, Expr *pWhere, ExprList *pGroupBy, Expr *pHaving, ExprList *pOrderBy, int isDistinct, Expr *pLimit, Expr *pOffset)
void sqlite3SelectDelete (sqlite3 *db, Select *p)
int sqlite3JoinType (Parse *pParse, Token *pA, Token *pB, Token *pC)
static int columnIndex (Table *pTab, const char *zCol)
static void setToken (Token *p, const char *z)
static void setQuotedToken (Parse *pParse, Token *p, const char *z)
Exprsqlite3CreateIdExpr (Parse *pParse, const char *zName)
static void addWhereTerm (Parse *pParse, const char *zCol, const Table *pTab1, const char *zAlias1, const Table *pTab2, const char *zAlias2, int iRightJoinTable, Expr **ppExpr, int isOuterJoin)
static void setJoinExpr (Expr *p, int iTable)
static int sqliteProcessJoin (Parse *pParse, Select *p)
static void pushOntoSorter (Parse *pParse, ExprList *pOrderBy, Select *pSelect, int regData)
static void codeOffset (Vdbe *v, Select *p, int iContinue)
static void codeDistinct (Parse *pParse, int iTab, int addrRepeat, int N, int iMem)
static int checkForMultiColumnSelectError (Parse *pParse, SelectDest *pDest, int nExpr)
static void selectInnerLoop (Parse *pParse, Select *p, ExprList *pEList, int srcTab, int nColumn, ExprList *pOrderBy, int distinct, SelectDest *pDest, int iContinue, int iBreak)
static KeyInfokeyInfoFromExprList (Parse *pParse, ExprList *pList)
static void generateSortTail (Parse *pParse, Select *p, Vdbe *v, int nColumn, SelectDest *pDest)
static const char * columnType (NameContext *pNC, Expr *pExpr, const char **pzOriginDb, const char **pzOriginTab, const char **pzOriginCol)
static void generateColumnTypes (Parse *pParse, SrcList *pTabList, ExprList *pEList)
static void generateColumnNames (Parse *pParse, SrcList *pTabList, ExprList *pEList)
static const char * selectOpName (int id)
static int selectColumnsFromExprList (Parse *pParse, ExprList *pEList, int *pnCol, Column **paCol)
static void selectAddColumnTypeAndCollation (Parse *pParse, int nCol, Column *aCol, Select *pSelect)
Tablesqlite3ResultSetOfSelect (Parse *pParse, Select *pSelect)
Vdbesqlite3GetVdbe (Parse *pParse)
static void computeLimitRegisters (Parse *pParse, Select *p, int iBreak)
static CollSeqmultiSelectCollSeq (Parse *pParse, Select *p, int iCol)
static int multiSelectOrderBy (Parse *pParse, Select *p, SelectDest *pDest)
static int multiSelect (Parse *pParse, Select *p, SelectDest *pDest)
static int generateOutputSubroutine (Parse *pParse, Select *p, SelectDest *pIn, SelectDest *pDest, int regReturn, int regPrev, KeyInfo *pKeyInfo, int p4type, int iBreak)
static void substExprList (sqlite3 *, ExprList *, int, ExprList *)
static void substSelect (sqlite3 *, Select *, int, ExprList *)
static void substExpr (sqlite3 *db, Expr *pExpr, int iTable, ExprList *pEList)
static int flattenSubquery (Parse *pParse, Select *p, int iFrom, int isAgg, int subqueryIsAgg)
static int minMaxQuery (Parse *pParse, Select *p)
int sqlite3IndexedByLookup (Parse *pParse, struct SrcList_item *pFrom)
static int selectExpander (Walker *pWalker, Select *p)
static int exprWalkNoop (Walker *pWalker, Expr *pExpr)
static void sqlite3SelectExpand (Parse *pParse, Select *pSelect)
static int selectAddSubqueryTypeInfo (Walker *pWalker, Select *p)
static void sqlite3SelectAddTypeInfo (Parse *pParse, Select *pSelect)
void sqlite3SelectPrep (Parse *pParse, Select *p, NameContext *pOuterNC)
static void resetAccumulator (Parse *pParse, AggInfo *pAggInfo)
static void finalizeAggFunctions (Parse *pParse, AggInfo *pAggInfo)
static void updateAccumulator (Parse *pParse, AggInfo *pAggInfo)
int sqlite3Select (Parse *pParse, Select *p, SelectDest *pDest)

Function Documentation

static void addWhereTerm ( Parse pParse,
const char *  zCol,
const Table pTab1,
const char *  zAlias1,
const Table pTab2,
const char *  zAlias2,
int  iRightJoinTable,
Expr **  ppExpr,
int  isOuterJoin 
) [static]
static int checkForMultiColumnSelectError ( Parse pParse,
SelectDest pDest,
int  nExpr 
) [static]

Definition at line 501 of file select.c.

References SelectDest::eDest, sqlite3ErrorMsg(), SRT_Mem, and SRT_Set.

Referenced by selectInnerLoop(), and sqlite3Select().

static void clearSelect ( sqlite3 db,
Select p 
) [static]
static void codeDistinct ( Parse pParse,
int  iTab,
int  addrRepeat,
int  N,
int  iMem 
) [static]
static void codeOffset ( Vdbe v,
Select p,
int  iContinue 
) [static]
static int columnIndex ( Table pTab,
const char *  zCol 
) [static]

Definition at line 181 of file select.c.

References Table::aCol, Table::nCol, sqlite3StrICmp(), and Column::zName.

Referenced by selectExpander(), and sqliteProcessJoin().

static const char* columnType ( NameContext pNC,
Expr pExpr,
const char **  pzOriginDb,
const char **  pzOriginTab,
const char **  pzOriginCol 
) [static]
static void computeLimitRegisters ( Parse pParse,
Select p,
int  iBreak 
) [static]
static int exprWalkNoop ( Walker pWalker,
Expr pExpr 
) [static]

Definition at line 3224 of file select.c.

References WRC_Continue.

Referenced by sqlite3SelectAddTypeInfo(), and sqlite3SelectExpand().

static void finalizeAggFunctions ( Parse pParse,
AggInfo pAggInfo 
) [static]

Definition at line 3376 of file select.c.

References AggInfo::aFunc, ExprList::nExpr, OP_AggFinal, P4_FUNCDEF, Parse::pVdbe, and sqlite3VdbeAddOp4().

Referenced by sqlite3Select().

static int flattenSubquery ( Parse pParse,
Select p,
int  iFrom,
int  isAgg,
int  subqueryIsAgg 
) [static]
static void generateColumnNames ( Parse pParse,
SrcList pTabList,
ExprList pEList 
) [static]
static void generateColumnTypes ( Parse pParse,
SrcList pTabList,
ExprList pEList 
) [static]
static int generateOutputSubroutine ( Parse pParse,
Select p,
SelectDest pIn,
SelectDest pDest,
int  regReturn,
int  regPrev,
KeyInfo pKeyInfo,
int  p4type,
int  iBreak 
) [static]
static void generateSortTail ( Parse pParse,
Select p,
Vdbe v,
int  nColumn,
SelectDest pDest 
) [static]
static KeyInfo* keyInfoFromExprList ( Parse pParse,
ExprList pList 
) [static]
static int minMaxQuery ( Parse pParse,
Select p 
) [static]
static int multiSelect ( Parse pParse,
Select p,
SelectDest pDest 
) [static]
static CollSeq* multiSelectCollSeq ( Parse pParse,
Select p,
int  iCol 
) [static]
static int multiSelectOrderBy ( Parse pParse,
Select p,
SelectDest pDest 
) [static]
static void pushOntoSorter ( Parse pParse,
ExprList pOrderBy,
Select pSelect,
int  regData 
) [static]
static void resetAccumulator ( Parse pParse,
AggInfo pAggInfo 
) [static]
static void selectAddColumnTypeAndCollation ( Parse pParse,
int  nCol,
Column aCol,
Select pSelect 
) [static]
static int selectAddSubqueryTypeInfo ( Walker pWalker,
Select p 
) [static]
static int selectColumnsFromExprList ( Parse pParse,
ExprList pEList,
int *  pnCol,
Column **  paCol 
) [static]
static int selectExpander ( Walker pWalker,
Select p 
) [static]
static void selectInnerLoop ( Parse pParse,
Select p,
ExprList pEList,
int  srcTab,
int  nColumn,
ExprList pOrderBy,
int  distinct,
SelectDest pDest,
int  iContinue,
int  iBreak 
) [static]
static const char* selectOpName ( int  id  )  [static]

Definition at line 1122 of file select.c.

References TK_ALL, TK_EXCEPT, and TK_INTERSECT.

Referenced by multiSelect().

static void setJoinExpr ( Expr p,
int  iTable 
) [static]

Definition at line 308 of file select.c.

References EP_FromJoin, ExprSetProperty, Expr::iRightJoinTable, Expr::pLeft, and Expr::pRight.

Referenced by sqliteProcessJoin().

static void setQuotedToken ( Parse pParse,
Token p,
const char *  z 
) [static]

Definition at line 204 of file select.c.

References Parse::db, Token::dyn, Token::n, sqlite3MPrintf(), and Token::z.

Referenced by selectExpander().

static void setToken ( Token p,
const char *  z 
) [static]

Definition at line 192 of file select.c.

References Token::dyn, Token::n, and Token::z.

Referenced by selectExpander(), and sqlite3CreateIdExpr().

Expr* sqlite3CreateIdExpr ( Parse pParse,
const char *  zName 
)

Definition at line 237 of file select.c.

References setToken(), sqlite3PExpr(), and TK_ID.

Referenced by addWhereTerm(), and updateVirtualTable().

Vdbe* sqlite3GetVdbe ( Parse pParse  ) 
int sqlite3IndexedByLookup ( Parse pParse,
struct SrcList_item *  pFrom 
)
int sqlite3JoinType ( Parse pParse,
Token pA,
Token pB,
Token pC 
)
Table* sqlite3ResultSetOfSelect ( Parse pParse,
Select pSelect 
)
int sqlite3Select ( Parse pParse,
Select p,
SelectDest pDest 
)

Definition at line 3498 of file select.c.

References ExprList::a, SrcList::a, AggInfo::aCol, Select::addrOpenEphm, AggInfo::aFunc, sqlite3::aLimit, checkForMultiColumnSelectError(), computeLimitRegisters(), Parse::db, db, AggInfo::directMode, SelectDest::eDest, finalizeAggFunctions(), flattenSubquery(), generateColumnNames(), generateSortTail(), WhereInfo::iBreak, WhereInfo::iContinue, ExprList::iECursor, IgnorableOrderby, SelectDest::iParm, AggInfo::AggInfo_col::iSorterColumn, keyInfoFromExprList(), sqlite3::mallocFailed, minMaxQuery(), multiSelect(), AggInfo::nAccumulator, AggInfo::nColumn, Parse::nErr, ExprList::nExpr, AggInfo::nFunc, Parse::nHeight, Parse::nMem, AggInfo::nSortingColumn, SrcList::nSrc, Parse::nTab, Expr::op, OP_Column, OP_Compare, OP_Gosub, OP_Goto, OP_IdxInsert, OP_IfPos, OP_Integer, OP_Jump, OP_MakeRecord, OP_Next, OP_OpenEphemeral, OP_Return, OP_SCopy, OP_Sequence, OP_Sort, P4_KEYINFO, P4_KEYINFO_HANDOFF, NameContext::pAggInfo, Select::pEList, ExprList::ExprList_item::pExpr, AggInfo::AggInfo_func::pExpr, AggInfo::pGroupBy, Select::pGroupBy, Select::pHaving, Expr::pList, Select::pNext, Select::pOrderBy, NameContext::pParse, Select::pPrior, Select::pRightmost, SrcList::SrcList_item::pSelect, Select::pSrc, NameContext::pSrcList, Select::pWhere, resetAccumulator(), selectInnerLoop(), Select::selFlags, SF_Aggregate, SF_Distinct, AggInfo::sortingIdx, ExprList::ExprList_item::sortOrder, sqlite3AuthCheck(), sqlite3DbFree(), sqlite3ErrorMsg(), sqlite3ExprAnalyzeAggList(), sqlite3ExprAnalyzeAggregates(), sqlite3ExprCode(), sqlite3ExprCodeExprList(), sqlite3ExprCodeGetColumn(), sqlite3ExprCodeMove(), sqlite3ExprIfFalse(), sqlite3ExprListDelete(), sqlite3ExprListDup(), sqlite3GetTempRange(), sqlite3GetTempReg(), sqlite3GetVdbe(), sqlite3ReleaseTempRange(), sqlite3ReleaseTempReg(), sqlite3Select(), sqlite3SelectDestInit(), sqlite3SelectExprHeight, sqlite3SelectPrep(), sqlite3VdbeAddOp1(), sqlite3VdbeAddOp2(), sqlite3VdbeAddOp3(), sqlite3VdbeAddOp4(), sqlite3VdbeChangeToNoop(), sqlite3VdbeCurrentAddr(), sqlite3VdbeJumpHere(), sqlite3VdbeMakeLabel(), sqlite3VdbeResolveLabel(), sqlite3WhereBegin(), sqlite3WhereEnd(), SQLITE_JUMPIFNULL, SQLITE_LIMIT_COMPOUND_SELECT, SQLITE_OK, SQLITE_SELECT, SRT_Discard, SRT_EphemTab, SRT_Except, SRT_Exists, SRT_Output, SRT_Union, TK_COLUMN, updateAccumulator(), AggInfo::useSortingIdx, VdbeComment, and WHERE_ORDERBY_MIN.

Referenced by codeTriggerProgram(), multiSelect(), multiSelectOrderBy(), sqlite3CodeSubselect(), sqlite3EndTable(), sqlite3Insert(), sqlite3MaterializeView(), sqlite3Select(), updateVirtualTable(), and yy_reduce().

static void sqlite3SelectAddTypeInfo ( Parse pParse,
Select pSelect 
) [static]
void sqlite3SelectDelete ( sqlite3 db,
Select p 
)
void sqlite3SelectDestInit ( SelectDest pDest,
int  eDest,
int  iParm 
)
static void sqlite3SelectExpand ( Parse pParse,
Select pSelect 
) [static]
Select* sqlite3SelectNew ( Parse pParse,
ExprList pEList,
SrcList pSrc,
Expr pWhere,
ExprList pGroupBy,
Expr pHaving,
ExprList pOrderBy,
int  isDistinct,
Expr pLimit,
Expr pOffset 
)
void sqlite3SelectPrep ( Parse pParse,
Select p,
NameContext pOuterNC 
)
static int sqliteProcessJoin ( Parse pParse,
Select p 
) [static]
static void substExpr ( sqlite3 db,
Expr pExpr,
int  iTable,
ExprList pEList 
) [static]
static void substExprList ( sqlite3 db,
ExprList pList,
int  iTable,
ExprList pEList 
) [static]
static void substSelect ( sqlite3 db,
Select p,
int  iTable,
ExprList pEList 
) [static]
static void updateAccumulator ( Parse pParse,
AggInfo pAggInfo 
) [static]

ContextLogger2—ContextLogger2 Logger Daemon Internals—Generated on Mon May 2 13:50:01 2011 by Doxygen 1.6.1