Lines Matching defs:pWin
19025 Window *pWin; /* EP_WinFunc: Window/Filter defn for a function */
19063 #define EP_WinFunc 0x1000000 /* TK_FUNCTION with Expr.y.pWin set */
19143 ExprHasProperty((p), EP_WinFunc) && p->y.pWin->eFrmType!=TK_FILTER \
19518 Window *pWin; /* List of window functions */
20432 ** the Expr.y.pWin field for each window function in an expression tree.
20437 ** attached to Select.pWin. The Window.pFunc and Window.pExpr
20444 ** of this object is stored in Expr.y.pWin with eFrmType set to
20462 Window **ppThis; /* Pointer to this object in Select.pWin list */
20491 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin);
32880 if( p->pWin ) n++;
32889 if( p->pWin ){
32893 for(pX=p->pWin; pX; pX=pX->pNextWin){
32996 SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
32998 if( pWin==0 ) return;
32999 if( pWin->pFilter ){
33001 sqlite3TreeViewExpr(pView, pWin->pFilter, 0);
33003 if( pWin->eFrmType==TK_FILTER ) return;
33006 if( pWin->zName ){
33007 sqlite3TreeViewLine(pView, "OVER %s (%p)", pWin->zName, pWin);
33009 sqlite3TreeViewLine(pView, "OVER (%p)", pWin);
33011 if( pWin->zBase ) nElement++;
33012 if( pWin->pOrderBy ) nElement++;
33013 if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ) nElement++;
33014 if( pWin->eExclude ) nElement++;
33015 if( pWin->zBase ){
33017 sqlite3TreeViewLine(pView, "window: %s", pWin->zBase);
33020 if( pWin->pPartition ){
33021 sqlite3TreeViewExprList(pView, pWin->pPartition, nElement>0,"PARTITION-BY");
33023 if( pWin->pOrderBy ){
33024 sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY");
33026 if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ){
33029 if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE";
33030 if( pWin->eFrmType==TK_GROUPS ) zFrmType = "GROUPS";
33032 pWin->bImplicitFrame ? " (implied)" : "");
33034 sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1);
33035 sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0);
33038 if( pWin->eExclude ){
33041 switch( pWin->eExclude ){
33047 sqlite3_snprintf(sizeof(zBuf),zBuf,"invalid(%d)", pWin->eExclude);
33063 SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){
33064 if( pWin==0 ) return;
33067 pWin->pWFunc->zName, pWin->pWFunc->nArg);
33068 sqlite3TreeViewWindow(pView, pWin, 0);
33266 Window *pWin;
33269 pWin = 0;
33274 pWin = IsWindowFunc(pExpr) ? pExpr->y.pWin : 0;
33276 pWin = 0;
33300 sqlite3TreeViewExprList(pView, pFarg, pWin!=0 || pExpr->pLeft, 0);
33305 sqlite3TreeViewExprList(pView, pOB->x.pList, pWin!=0, "ORDERBY");
33309 if( pWin ){
33310 sqlite3TreeViewWindow(pView, pWin, 0);
106488 Window *pWin;
106489 for(pWin=pList; pWin; pWin=pWin->pNextWin){
106491 rc = sqlite3WalkExprList(pWalker, pWin->pOrderBy);
106493 rc = sqlite3WalkExprList(pWalker, pWin->pPartition);
106495 rc = sqlite3WalkExpr(pWalker, pWin->pFilter);
106497 rc = sqlite3WalkExpr(pWalker, pWin->pStart);
106499 rc = sqlite3WalkExpr(pWalker, pWin->pEnd);
106551 if( walkWindowList(pWalker, pExpr->y.pWin, 1) ) return WRC_Abort;
106824 if( ALWAYS(pExpr->y.pWin!=0) ){
106825 pExpr->y.pWin->pOwner = pExpr;
107852 Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0);
107949 if( pDef && pDef->xValue==0 && pWin ){
107956 || (is_agg && (pDef->funcFlags&SQLITE_FUNC_WINDOW) && !pWin)
107957 || (is_agg && pWin && (pNC->ncFlags & NC_AllowWin)==0)
107960 if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pWin ){
108006 pNC->ncFlags &= ~(NC_AllowWin | (!pWin ? NC_AllowAgg : 0));
108023 if( pWin ){
108025 assert( pWin==0 || (ExprUseYWin(pExpr) && pWin==pExpr->y.pWin) );
108027 sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef);
108030 sqlite3WalkExprList(pWalker, pWin->pPartition);
108031 sqlite3WalkExprList(pWalker, pWin->pOrderBy);
108032 sqlite3WalkExpr(pWalker, pWin->pFilter);
108033 sqlite3WindowLink(pSel, pWin);
108043 sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter);
108445 Window *pWin = pExpr->y.pWin;
108446 sqlite3WindowUnlinkFromSelect(pWin);
108453 ** Select.pWin list of Select object pSelect.
108456 if( pSelect->pWin ){
108537 ** objects belonging to the expression from the Select.pWin list. */
108704 Window *pWin;
108705 for(pWin=p->pWinDefn; pWin; pWin=pWin->pNextWin){
108706 if( sqlite3ResolveExprListNames(&sNC, pWin->pOrderBy)
108707 || sqlite3ResolveExprListNames(&sNC, pWin->pPartition)
110385 assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
110408 sqlite3WindowDelete(db, p->y.pWin);
110564 ** substructure such as Expr.x.pList, Expr.x.pSelect, and Expr.y.pWin.
110705 pNew->y.pWin = sqlite3WindowDup(db, pNew, p->y.pWin);
110774 ** objects found there, assembling them onto the linked list at Select->pWin.
110779 Window *pWin = pExpr->y.pWin;
110780 assert( pWin );
110782 assert( pWin->ppThis==0 );
110783 sqlite3WindowLink(pSelect, pWin);
110971 pNew->pWin = 0;
110973 if( p->pWin && db->mallocFailed==0 ) gatherSelectWindows(pNew);
113916 return pExpr->y.pWin->regResult;
115099 if( sqlite3WindowCompare(pParse, pA->y.pWin, pB->y.pWin, 1)!=0 ){
115657 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
142989 while( p->pWin ){
142990 assert( p->pWin->ppThis==&p->pWin );
142991 sqlite3WindowUnlinkFromSelect(p->pWin);
143059 pNew->pWin = 0;
145539 if( p->pWin ){
145704 if( p->pWin ) return -1;
146829 Window *pWin = pExpr->y.pWin;
146830 pWin->pFilter = substExpr(pSubst, pWin->pFilter);
146831 substExprList(pSubst, pWin->pPartition);
146832 substExprList(pSubst, pWin->pOrderBy);
147253 if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */
147342 || pSub1->pWin /* (17e) */
147935 assert( pSubq->pWin->pPartition );
147938 return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition);
148081 if( pSel->pWin ) return 0; /* restriction (6b) */
148102 if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
148185 if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){
148241 if( pX->pWin ){
149434 sqlite3ExprAnalyzeAggregates(pNC, pExpr->y.pWin->pFilter);
149724 Expr *pFilter = pF->pFExpr->y.pWin->pFilter;
150305 if( p->pWin && (sqlite3TreeTrace & 0x40)!=0 ){
150742 && p->pWin==0
150833 Window *pWin = p->pWin; /* Main window object (or NULL) */
150834 if( pWin ){
150871 if( pWin ){
161688 && pExpr->x.pSelect->pWin==0
162012 assert( p->y.pWin!=0 );
162013 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition);
162014 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy);
162015 mask |= sqlite3WhereExprUsage(pMaskSet, p->y.pWin->pFilter);
169993 ** Argument pFunc is the function definition just resolved and pWin
169995 ** function updates the contents of pWin as follows:
169998 ** search list pList for a matching WINDOW definition, and update pWin
170004 ** of this file), pWin is updated here.
170009 Window *pWin, /* Window frame to update */
170012 if( pWin->zName && pWin->eFrmType==0 ){
170013 Window *p = windowFind(pParse, pList, pWin->zName);
170015 pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0);
170016 pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0);
170017 pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0);
170018 pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0);
170019 pWin->eStart = p->eStart;
170020 pWin->eEnd = p->eEnd;
170021 pWin->eFrmType = p->eFrmType;
170022 pWin->eExclude = p->eExclude;
170024 sqlite3WindowChain(pParse, pWin, pList);
170026 if( (pWin->eFrmType==TK_RANGE)
170027 && (pWin->pStart || pWin->pEnd)
170028 && (pWin->pOrderBy==0 || pWin->pOrderBy->nExpr!=1)
170036 if( pWin->pFilter ){
170059 sqlite3ExprDelete(db, pWin->pStart);
170060 sqlite3ExprDelete(db, pWin->pEnd);
170061 pWin->pEnd = pWin->pStart = 0;
170062 pWin->eFrmType = aUp[i].eFrmType;
170063 pWin->eStart = aUp[i].eStart;
170064 pWin->eEnd = aUp[i].eEnd;
170065 pWin->eExclude = 0;
170066 if( pWin->eStart==TK_FOLLOWING ){
170067 pWin->pStart = sqlite3Expr(db, TK_INTEGER, "1");
170074 pWin->pWFunc = pFunc;
170083 Window *pWin;
170099 assert( p->pWin!=0 );
170125 Window *pWin;
170126 for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){
170127 if( pExpr->y.pWin==pWin ){
170128 assert( pWin->pOwner==pExpr );
170164 pExpr->iTable = p->pWin->iEphCsr;
170198 ** Window list passed as the second argument (pWin).
170202 ** pWin->iEphCsr, where N is the number of elements in (*ppSub) after
170207 Window *pWin,
170216 assert( pWin!=0 );
170221 sRewrite.pWin = pWin;
170307 if( p->pWin
170322 Window *pMWin = p->pWin; /* Main window object */
170323 Window *pWin; /* Window object iterator */
170383 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
170385 assert( ExprUseXList(pWin->pOwner) );
170386 assert( pWin->pWFunc!=0 );
170387 pArgs = pWin->pOwner->x.pList;
170388 if( pWin->pWFunc->funcFlags & SQLITE_SUBTYPE ){
170390 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
170391 pWin->bExprArgs = 1;
170393 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
170396 if( pWin->pFilter ){
170397 Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0);
170400 pWin->regAccum = ++pParse->nMem;
170401 pWin->regResult = ++pParse->nMem;
170402 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
170534 Window *pWin = 0;
170572 pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
170573 if( pWin==0 ) goto windowAllocErr;
170574 pWin->eFrmType = eType;
170575 pWin->eStart = eStart;
170576 pWin->eEnd = eEnd;
170580 pWin->eExclude = eExclude;
170581 pWin->bImplicitFrame = bImplicitFrame;
170582 pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd);
170583 pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart);
170584 return pWin;
170594 ** pWin. Also, if parameter pBase is not NULL, set pWin->zBase to the
170599 Window *pWin,
170604 if( pWin ){
170605 pWin->pPartition = pPartition;
170606 pWin->pOrderBy = pOrderBy;
170608 pWin->zBase = sqlite3DbStrNDup(pParse->db, pBase->z, pBase->n);
170614 return pWin;
170618 ** Window *pWin has just been created from a WINDOW clause. Token pBase
170620 ** stored in the linked list starting at pWin->pNextWin. This function
170621 ** either updates *pWin according to the base specification, or else
170624 SQLITE_PRIVATE void sqlite3WindowChain(Parse *pParse, Window *pWin, Window *pList){
170625 if( pWin->zBase ){
170627 Window *pExist = windowFind(pParse, pList, pWin->zBase);
170631 if( pWin->pPartition ){
170633 }else if( pExist->pOrderBy && pWin->pOrderBy ){
170640 "cannot override %s of window: %s", zErr, pWin->zBase
170643 pWin->pPartition = sqlite3ExprListDup(db, pExist->pPartition, 0);
170645 assert( pWin->pOrderBy==0 );
170646 pWin->pOrderBy = sqlite3ExprListDup(db, pExist->pOrderBy, 0);
170648 sqlite3DbFree(db, pWin->zBase);
170649 pWin->zBase = 0;
170656 ** Attach window object pWin to expression p.
170658 SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
170661 assert( pWin );
170663 p->y.pWin = pWin;
170665 pWin->pOwner = p;
170666 if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){
170672 sqlite3WindowDelete(pParse->db, pWin);
170677 ** Possibly link window pWin into the list at pSel->pWin (window functions
170682 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin){
170684 if( 0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0) ){
170685 pWin->pNextWin = pSel->pWin;
170686 if( pSel->pWin ){
170687 pSel->pWin->ppThis = &pWin->pNextWin;
170689 pSel->pWin = pWin;
170690 pWin->ppThis = &pSel->pWin;
170692 if( sqlite3ExprListCompare(pWin->pPartition, pSel->pWin->pPartition,-1) ){
170740 Window *pMWin = pSelect->pWin;
170741 Window *pWin;
170771 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
170772 FuncDef *p = pWin->pWFunc;
170773 if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){
170783 assert( ExprUseXList(pWin->pOwner) );
170784 pList = pWin->pOwner->x.pList;
170786 pWin->csrApp = pParse->nTab++;
170787 pWin->regApp = pParse->nMem+1;
170789 if( pKeyInfo && pWin->pWFunc->zName[1]=='i' ){
170793 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2);
170795 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
170798 /* Allocate two registers at pWin->regApp. These will be used to
170800 pWin->regApp = pParse->nMem+1;
170801 pWin->csrApp = pParse->nTab++;
170803 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
170806 pWin->csrApp = pParse->nTab++;
170807 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
170872 static int windowArgCount(Window *pWin){
170874 assert( ExprUseXList(pWin->pOwner) );
170875 pList = pWin->pOwner->x.pList;
171010 Window *pWin;
171011 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171012 FuncDef *pFunc = pWin->pWFunc;
171014 int nArg = pWin->bExprArgs ? 0 : windowArgCount(pWin);
171017 assert( bInverse==0 || pWin->eStart!=TK_UNBOUNDED );
171021 assert( pWin==pMWin || sqlite3WindowCompare(pParse,pWin,pMWin,0)!=1 );
171025 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i);
171027 sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+i, reg+i);
171034 && (pWin->eStart!=TK_UNBOUNDED)
171039 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1);
171040 sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp);
171041 sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2);
171042 sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2);
171044 sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1);
171046 sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp);
171050 }else if( pWin->regApp ){
171055 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1);
171058 if( pWin->pFilter ){
171060 assert( ExprUseXList(pWin->pOwner) );
171061 assert( pWin->bExprArgs || !nArg ||nArg==pWin->pOwner->x.pList->nExpr );
171062 assert( pWin->bExprArgs || nArg ||pWin->pOwner->x.pList==0 );
171064 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp);
171070 if( pWin->bExprArgs ){
171074 assert( ExprUseXList(pWin->pOwner) );
171075 nArg = pWin->pOwner->x.pList->nExpr;
171077 sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0);
171089 assert( ExprUseXList(pWin->pOwner) );
171090 pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr);
171094 bInverse, regArg, pWin->regAccum);
171097 if( pWin->bExprArgs ){
171122 Window *pWin;
171124 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171126 && (pWin->pWFunc->funcFlags & SQLITE_FUNC_MINMAX)
171127 && (pWin->eStart!=TK_UNBOUNDED)
171129 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
171130 sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp);
171132 sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult);
171134 }else if( pWin->regApp ){
171137 int nArg = windowArgCount(pWin);
171139 sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, nArg);
171140 sqlite3VdbeAppendP4(v, pWin->pWFunc, P4_FUNCDEF);
171141 sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult);
171142 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
171144 sqlite3VdbeAddOp3(v, OP_AggValue,pWin->regAccum,nArg,pWin->regResult);
171145 sqlite3VdbeAppendP4(v, pWin->pWFunc, P4_FUNCDEF);
171158 Window *pWin;
171193 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171194 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
171271 Window *pWin;
171273 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171274 FuncDef *pFunc = pWin->pWFunc;
171275 assert( ExprUseXList(pWin->pOwner) );
171279 int csr = pWin->csrApp;
171282 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
171285 sqlite3VdbeAddOp3(v, OP_Column,pMWin->iEphCsr,pWin->iArgCol+1,tmpReg);
171290 sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
171291 sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
171295 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
171300 int nArg = pWin->pOwner->x.pList->nExpr;
171301 int csr = pWin->csrApp;
171307 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
171309 sqlite3VdbeAddOp3(v, OP_Column, iEph,pWin->iArgCol+2,pWin->regResult);
171318 sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2);
171325 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
171344 Window *pWin;
171345 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171346 FuncDef *pFunc = pWin->pWFunc;
171347 assert( pWin->regAccum );
171348 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
171349 nArg = MAX(nArg, windowArgCount(pWin));
171352 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
171353 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
171356 if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){
171357 assert( pWin->eStart!=TK_UNBOUNDED );
171358 sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
171359 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
171373 Window *pWin;
171375 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
171376 FuncDef *pFunc = pWin->pWFunc;
171759 Window *pWin;
171763 for(pWin=p; pWin; pWin=pWin->pNextWin){
171764 *pp = sqlite3WindowDup(db, 0, pWin);
172134 Window *pMWin = p->pWin;