Lines Matching defs:pWin

18219     Window *pWin;          /* EP_WinFunc: Window/Filter defn for a function */
18258 #define EP_WinFunc 0x1000000 /* TK_FUNCTION with Expr.y.pWin set */
18327 ExprHasProperty((p), EP_WinFunc) && p->y.pWin->eFrmType!=TK_FILTER \
18650 Window *pWin; /* List of window functions */
19438 ** the Expr.y.pWin field for each window function in an expression tree.
19443 ** attached to Select.pWin. The Window.pFunc and Window.pExpr
19450 ** of this object is stored in Expr.y.pWin with eFrmType set to
19468 Window **ppThis; /* Pointer to this object in Select.pWin list */
19494 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin);
29958 if( p->pWin ) n++;
29967 if( p->pWin ){
29971 for(pX=p->pWin; pX; pX=pX->pNextWin){
30074 SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
30076 if( pWin->pFilter ){
30078 sqlite3TreeViewExpr(pView, pWin->pFilter, 0);
30082 if( pWin->zName ){
30083 sqlite3TreeViewLine(pView, "OVER %s (%p)", pWin->zName, pWin);
30085 sqlite3TreeViewLine(pView, "OVER (%p)", pWin);
30087 if( pWin->zBase ) nElement++;
30088 if( pWin->pOrderBy ) nElement++;
30089 if( pWin->eFrmType ) nElement++;
30090 if( pWin->eExclude ) nElement++;
30091 if( pWin->zBase ){
30093 sqlite3TreeViewLine(pView, "window: %s", pWin->zBase);
30096 if( pWin->pPartition ){
30097 sqlite3TreeViewExprList(pView, pWin->pPartition, nElement>0,"PARTITION-BY");
30099 if( pWin->pOrderBy ){
30100 sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY");
30102 if( pWin->eFrmType ){
30105 if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE";
30106 if( pWin->eFrmType==TK_GROUPS ) zFrmType = "GROUPS";
30108 pWin->bImplicitFrame ? " (implied)" : "");
30110 sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1);
30111 sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0);
30114 if( pWin->eExclude ){
30117 switch( pWin->eExclude ){
30123 sqlite3_snprintf(sizeof(zBuf),zBuf,"invalid(%d)", pWin->eExclude);
30139 SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){
30142 pWin->pFunc->zName, pWin->pFunc->nArg);
30143 sqlite3TreeViewWindow(pView, pWin, 0);
30325 Window *pWin;
30328 pWin = 0;
30332 pWin = ExprHasProperty(pExpr, EP_WinFunc) ? pExpr->y.pWin : 0;
30334 pWin = 0;
30357 sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0);
30360 if( pWin ){
30361 sqlite3TreeViewWindow(pView, pWin, 0);
98403 Window *pWin;
98404 for(pWin=pList; pWin; pWin=pWin->pNextWin){
98406 rc = sqlite3WalkExprList(pWalker, pWin->pOrderBy);
98408 rc = sqlite3WalkExprList(pWalker, pWin->pPartition);
98410 rc = sqlite3WalkExpr(pWalker, pWin->pFilter);
98417 rc = sqlite3WalkExpr(pWalker, pWin->pStart);
98419 rc = sqlite3WalkExpr(pWalker, pWin->pEnd);
98469 if( walkWindowList(pWalker, pExpr->y.pWin, 1) ) return WRC_Abort;
98733 if( pExpr->y.pWin!=0 ){
98734 pExpr->y.pWin->pOwner = pExpr;
99527 Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0);
99624 if( pDef && pDef->xValue==0 && pWin ){
99631 || (is_agg && (pDef->funcFlags&SQLITE_FUNC_WINDOW) && !pWin)
99632 || (is_agg && pWin && (pNC->ncFlags & NC_AllowWin)==0)
99635 if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pWin ){
99677 pNC->ncFlags &= ~(NC_AllowWin | (!pWin ? NC_AllowAgg : 0));
99691 if( pWin ){
99693 assert( pWin==pExpr->y.pWin );
99695 sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef);
99698 sqlite3WalkExprList(pWalker, pWin->pPartition);
99699 sqlite3WalkExprList(pWalker, pWin->pOrderBy);
99700 sqlite3WalkExpr(pWalker, pWin->pFilter);
99701 sqlite3WindowLink(pSel, pWin);
99711 sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter);
100100 Window *pWin = pExpr->y.pWin;
100101 sqlite3WindowUnlinkFromSelect(pWin);
100108 ** Select.pWin list of Select object pSelect.
100111 if( pSelect->pWin ){
100192 ** objects belonging to the expression from the Select.pWin list. */
100406 Window *pWin;
100407 for(pWin=p->pWinDefn; pWin; pWin=pWin->pNextWin){
100408 if( sqlite3ResolveExprListNames(&sNC, pWin->pOrderBy)
100409 || sqlite3ResolveExprListNames(&sNC, pWin->pPartition)
101773 assert( !ExprHasProperty(p, EP_WinFunc) || p->y.pWin!=0 || db->mallocFailed );
101775 || p->y.pWin==0 || ExprHasProperty(p, EP_WinFunc) );
101797 sqlite3WindowDelete(db, p->y.pWin);
102035 pNew->y.pWin = sqlite3WindowDup(db, pNew, p->y.pWin);
102090 ** objects found there, assembling them onto the linked list at Select->pWin.
102095 Window *pWin = pExpr->y.pWin;
102096 assert( pWin );
102098 assert( pWin->ppThis==0 );
102099 sqlite3WindowLink(pSelect, pWin);
102286 pNew->pWin = 0;
102288 if( p->pWin && db->mallocFailed==0 ) gatherSelectWindows(pNew);
104831 return pExpr->y.pWin->regResult;
105953 if( sqlite3WindowCompare(pParse, pA->y.pWin, pB->y.pWin, 1)!=0 ){
106418 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
131251 while( p->pWin ){
131252 assert( p->pWin->ppThis==&p->pWin );
131253 sqlite3WindowUnlinkFromSelect(p->pWin);
131321 pNew->pWin = 0;
133524 if( p->pWin ){
133690 if( p->pWin ) return -1;
134735 Window *pWin = pExpr->y.pWin;
134736 pWin->pFilter = substExpr(pSubst, pWin->pFilter);
134737 substExprList(pSubst, pWin->pPartition);
134738 substExprList(pSubst, pWin->pOrderBy);
135086 if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */
135180 || pSub1->pWin /* (17e) */
135675 assert( pSubq->pWin->pPartition );
135678 return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition);
135768 if( pSel->pWin ) return 0; /* restriction (6b) */
135771 if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
135819 if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){
136856 Expr *pFilter = pF->pFExpr->y.pWin->pFilter;
137264 if( p->pWin && (sqlite3SelectTrace & 0x108)!=0 ){
137623 && p->pWin==0
137701 Window *pWin = p->pWin; /* Main window object (or NULL) */
137702 if( pWin ){
137739 if( pWin ){
137880 sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter);
147620 if( pSel->pWin ) return;
148053 && pExpr->x.pSelect->pWin==0
148221 if( (p->op==TK_FUNCTION || p->op==TK_AGG_FUNCTION) && p->y.pWin ){
148222 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition);
148223 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy);
148224 mask |= sqlite3WhereExprUsage(pMaskSet, p->y.pWin->pFilter);
154583 ** Argument pFunc is the function definition just resolved and pWin
154585 ** function updates the contents of pWin as follows:
154588 ** search list pList for a matching WINDOW definition, and update pWin
154594 ** of this file), pWin is updated here.
154599 Window *pWin, /* Window frame to update */
154602 if( pWin->zName && pWin->eFrmType==0 ){
154603 Window *p = windowFind(pParse, pList, pWin->zName);
154605 pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0);
154606 pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0);
154607 pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0);
154608 pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0);
154609 pWin->eStart = p->eStart;
154610 pWin->eEnd = p->eEnd;
154611 pWin->eFrmType = p->eFrmType;
154612 pWin->eExclude = p->eExclude;
154614 sqlite3WindowChain(pParse, pWin, pList);
154616 if( (pWin->eFrmType==TK_RANGE)
154617 && (pWin->pStart || pWin->pEnd)
154618 && (pWin->pOrderBy==0 || pWin->pOrderBy->nExpr!=1)
154626 if( pWin->pFilter ){
154649 sqlite3ExprDelete(db, pWin->pStart);
154650 sqlite3ExprDelete(db, pWin->pEnd);
154651 pWin->pEnd = pWin->pStart = 0;
154652 pWin->eFrmType = aUp[i].eFrmType;
154653 pWin->eStart = aUp[i].eStart;
154654 pWin->eEnd = aUp[i].eEnd;
154655 pWin->eExclude = 0;
154656 if( pWin->eStart==TK_FOLLOWING ){
154657 pWin->pStart = sqlite3Expr(db, TK_INTEGER, "1");
154664 pWin->pFunc = pFunc;
154673 Window *pWin;
154689 assert( p->pWin!=0 );
154715 Window *pWin;
154716 for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){
154717 if( pExpr->y.pWin==pWin ){
154718 assert( pWin->pOwner==pExpr );
154752 pExpr->iTable = p->pWin->iEphCsr;
154786 ** Window list passed as the second argument (pWin).
154790 ** pWin->iEphCsr, where N is the number of elements in (*ppSub) after
154795 Window *pWin,
154804 assert( pWin!=0 );
154809 sRewrite.pWin = pWin;
154884 if( p->pWin && p->pPrior==0 && (p->selFlags & SF_WinRewrite)==0 ){
154895 Window *pMWin = p->pWin; /* Main window object */
154896 Window *pWin; /* Window object iterator */
154951 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
154952 ExprList *pArgs = pWin->pOwner->x.pList;
154953 if( pWin->pFunc->funcFlags & SQLITE_FUNC_SUBTYPE ){
154955 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
154956 pWin->bExprArgs = 1;
154958 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
154961 if( pWin->pFilter ){
154962 Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0);
154965 pWin->regAccum = ++pParse->nMem;
154966 pWin->regResult = ++pParse->nMem;
154967 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
155096 Window *pWin = 0;
155134 pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
155135 if( pWin==0 ) goto windowAllocErr;
155136 pWin->eFrmType = eType;
155137 pWin->eStart = eStart;
155138 pWin->eEnd = eEnd;
155142 pWin->eExclude = eExclude;
155143 pWin->bImplicitFrame = bImplicitFrame;
155144 pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd);
155145 pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart);
155146 return pWin;
155156 ** pWin. Also, if parameter pBase is not NULL, set pWin->zBase to the
155161 Window *pWin,
155166 if( pWin ){
155167 pWin->pPartition = pPartition;
155168 pWin->pOrderBy = pOrderBy;
155170 pWin->zBase = sqlite3DbStrNDup(pParse->db, pBase->z, pBase->n);
155176 return pWin;
155180 ** Window *pWin has just been created from a WINDOW clause. Tokne pBase
155182 ** stored in the linked list starting at pWin->pNextWin. This function
155183 ** either updates *pWin according to the base specification, or else
155186 SQLITE_PRIVATE void sqlite3WindowChain(Parse *pParse, Window *pWin, Window *pList){
155187 if( pWin->zBase ){
155189 Window *pExist = windowFind(pParse, pList, pWin->zBase);
155193 if( pWin->pPartition ){
155195 }else if( pExist->pOrderBy && pWin->pOrderBy ){
155202 "cannot override %s of window: %s", zErr, pWin->zBase
155205 pWin->pPartition = sqlite3ExprListDup(db, pExist->pPartition, 0);
155207 assert( pWin->pOrderBy==0 );
155208 pWin->pOrderBy = sqlite3ExprListDup(db, pExist->pOrderBy, 0);
155210 sqlite3DbFree(db, pWin->zBase);
155211 pWin->zBase = 0;
155218 ** Attach window object pWin to expression p.
155220 SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
155223 assert( pWin );
155224 p->y.pWin = pWin;
155226 pWin->pOwner = p;
155227 if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){
155233 sqlite3WindowDelete(pParse->db, pWin);
155238 ** Possibly link window pWin into the list at pSel->pWin (window functions
155243 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin){
155245 if( 0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0) ){
155246 pWin->pNextWin = pSel->pWin;
155247 if( pSel->pWin ){
155248 pSel->pWin->ppThis = &pWin->pNextWin;
155250 pSel->pWin = pWin;
155251 pWin->ppThis = &pSel->pWin;
155253 if( sqlite3ExprListCompare(pWin->pPartition, pSel->pWin->pPartition,-1) ){
155296 Window *pMWin = pSelect->pWin;
155297 Window *pWin;
155327 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155328 FuncDef *p = pWin->pFunc;
155329 if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){
155337 ExprList *pList = pWin->pOwner->x.pList;
155339 pWin->csrApp = pParse->nTab++;
155340 pWin->regApp = pParse->nMem+1;
155342 if( pKeyInfo && pWin->pFunc->zName[1]=='i' ){
155346 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2);
155348 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
155351 /* Allocate two registers at pWin->regApp. These will be used to
155353 pWin->regApp = pParse->nMem+1;
155354 pWin->csrApp = pParse->nTab++;
155356 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
155359 pWin->csrApp = pParse->nTab++;
155360 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
155425 static int windowArgCount(Window *pWin){
155426 ExprList *pList = pWin->pOwner->x.pList;
155560 Window *pWin;
155561 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155562 FuncDef *pFunc = pWin->pFunc;
155564 int nArg = pWin->bExprArgs ? 0 : windowArgCount(pWin);
155567 assert( bInverse==0 || pWin->eStart!=TK_UNBOUNDED );
155571 assert( pWin==pMWin || sqlite3WindowCompare(pParse,pWin,pMWin,0)!=1 );
155575 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i);
155577 sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+i, reg+i);
155584 && (pWin->eStart!=TK_UNBOUNDED)
155589 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1);
155590 sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp);
155591 sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2);
155592 sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2);
155594 sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1);
155596 sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp);
155600 }else if( pWin->regApp ){
155605 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1);
155608 if( pWin->pFilter ){
155610 assert( pWin->bExprArgs || !nArg ||nArg==pWin->pOwner->x.pList->nExpr );
155611 assert( pWin->bExprArgs || nArg ||pWin->pOwner->x.pList==0 );
155613 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp);
155619 if( pWin->bExprArgs ){
155623 nArg = pWin->pOwner->x.pList->nExpr;
155625 sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0);
155629 if( pOp->opcode==OP_Column && pOp->p1==pWin->iEphCsr ){
155637 pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr);
155641 bInverse, regArg, pWin->regAccum);
155644 if( pWin->bExprArgs ){
155669 Window *pWin;
155671 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155673 && (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX)
155674 && (pWin->eStart!=TK_UNBOUNDED)
155676 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
155677 sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp);
155679 sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult);
155681 }else if( pWin->regApp ){
155684 int nArg = windowArgCount(pWin);
155686 sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, nArg);
155687 sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
155688 sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult);
155689 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
155691 sqlite3VdbeAddOp3(v, OP_AggValue,pWin->regAccum,nArg,pWin->regResult);
155692 sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
155705 Window *pWin;
155740 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155741 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
155818 Window *pWin;
155820 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155821 FuncDef *pFunc = pWin->pFunc;
155825 int csr = pWin->csrApp;
155828 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
155831 sqlite3VdbeAddOp3(v, OP_Column,pMWin->iEphCsr,pWin->iArgCol+1,tmpReg);
155836 sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
155837 sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
155841 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
155846 int nArg = pWin->pOwner->x.pList->nExpr;
155847 int csr = pWin->csrApp;
155853 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
155855 sqlite3VdbeAddOp3(v, OP_Column, iEph,pWin->iArgCol+2,pWin->regResult);
155864 sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2);
155871 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
155890 Window *pWin;
155891 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155892 FuncDef *pFunc = pWin->pFunc;
155893 assert( pWin->regAccum );
155894 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
155895 nArg = MAX(nArg, windowArgCount(pWin));
155898 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
155899 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
155902 if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){
155903 assert( pWin->eStart!=TK_UNBOUNDED );
155904 sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
155905 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
155919 Window *pWin;
155921 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
155922 FuncDef *pFunc = pWin->pFunc;
156293 Window *pWin;
156297 for(pWin=p; pWin; pWin=pWin->pNextWin){
156298 *pp = sqlite3WindowDup(db, 0, pWin);
156668 Window *pMWin = p->pWin;