Lines Matching refs:pWin

17771     Window *pWin;          /* EP_WinFunc: Window/Filter defn for a function */  member
17886 ExprHasProperty((p), EP_WinFunc) && p->y.pWin->eFrmType!=TK_FILTER \
18222 Window *pWin; /* List of window functions */ member
19100 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin);
30455 if( p->pWin ) n++;
30464 if( p->pWin ){
30468 for(pX=p->pWin; pX; pX=pX->pNextWin){
30571 SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
30573 if( pWin->pFilter ){
30575 sqlite3TreeViewExpr(pView, pWin->pFilter, 0);
30579 if( pWin->zName ){
30580 sqlite3TreeViewLine(pView, "OVER %s (%p)", pWin->zName, pWin);
30582 sqlite3TreeViewLine(pView, "OVER (%p)", pWin);
30584 if( pWin->zBase ) nElement++;
30585 if( pWin->pOrderBy ) nElement++;
30586 if( pWin->eFrmType ) nElement++;
30587 if( pWin->eExclude ) nElement++;
30588 if( pWin->zBase ){
30590 sqlite3TreeViewLine(pView, "window: %s", pWin->zBase);
30593 if( pWin->pPartition ){
30594 sqlite3TreeViewExprList(pView, pWin->pPartition, nElement>0,"PARTITION-BY");
30596 if( pWin->pOrderBy ){
30597 sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY");
30599 if( pWin->eFrmType ){
30602 if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE";
30603 if( pWin->eFrmType==TK_GROUPS ) zFrmType = "GROUPS";
30605 pWin->bImplicitFrame ? " (implied)" : "");
30607 sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1);
30608 sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0);
30611 if( pWin->eExclude ){
30614 switch( pWin->eExclude ){
30620 sqlite3_snprintf(sizeof(zBuf),zBuf,"invalid(%d)", pWin->eExclude);
30636 SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){
30639 pWin->pFunc->zName, pWin->pFunc->nArg);
30640 sqlite3TreeViewWindow(pView, pWin, 0);
30831 Window *pWin;
30834 pWin = 0;
30839 pWin = ExprHasProperty(pExpr, EP_WinFunc) ? pExpr->y.pWin : 0;
30841 pWin = 0;
30865 sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0);
30868 if( pWin ){
30869 sqlite3TreeViewWindow(pView, pWin, 0);
99353 Window *pWin;
99354 for(pWin=pList; pWin; pWin=pWin->pNextWin){
99356 rc = sqlite3WalkExprList(pWalker, pWin->pOrderBy);
99358 rc = sqlite3WalkExprList(pWalker, pWin->pPartition);
99360 rc = sqlite3WalkExpr(pWalker, pWin->pFilter);
99362 rc = sqlite3WalkExpr(pWalker, pWin->pStart);
99364 rc = sqlite3WalkExpr(pWalker, pWin->pEnd);
99414 if( walkWindowList(pWalker, pExpr->y.pWin, 1) ) return WRC_Abort;
99697 if( ALWAYS(pExpr->y.pWin!=0) ){
99698 pExpr->y.pWin->pOwner = pExpr;
100503 Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0);
100600 if( pDef && pDef->xValue==0 && pWin ){
100607 || (is_agg && (pDef->funcFlags&SQLITE_FUNC_WINDOW) && !pWin)
100608 || (is_agg && pWin && (pNC->ncFlags & NC_AllowWin)==0)
100611 if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pWin ){
100653 pNC->ncFlags &= ~(NC_AllowWin | (!pWin ? NC_AllowAgg : 0));
100667 if( pWin ){
100669 assert( pWin==0 || (ExprUseYWin(pExpr) && pWin==pExpr->y.pWin) );
100671 sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef);
100674 sqlite3WalkExprList(pWalker, pWin->pPartition);
100675 sqlite3WalkExprList(pWalker, pWin->pOrderBy);
100676 sqlite3WalkExpr(pWalker, pWin->pFilter);
100677 sqlite3WindowLink(pSel, pWin);
100687 sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter);
101082 Window *pWin = pExpr->y.pWin;
101083 sqlite3WindowUnlinkFromSelect(pWin);
101093 if( pSelect->pWin ){
101335 Window *pWin;
101336 for(pWin=p->pWinDefn; pWin; pWin=pWin->pNextWin){
101337 if( sqlite3ResolveExprListNames(&sNC, pWin->pOrderBy)
101338 || sqlite3ResolveExprListNames(&sNC, pWin->pPartition)
102847 assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
102871 sqlite3WindowDelete(db, p->y.pWin);
103113 pNew->y.pWin = sqlite3WindowDup(db, pNew, p->y.pWin);
103173 Window *pWin = pExpr->y.pWin;
103174 assert( pWin );
103176 assert( pWin->ppThis==0 );
103177 sqlite3WindowLink(pSelect, pWin);
103368 pNew->pWin = 0;
103370 if( p->pWin && db->mallocFailed==0 ) gatherSelectWindows(pNew);
105981 return pExpr->y.pWin->regResult;
107121 if( sqlite3WindowCompare(pParse, pA->y.pWin, pB->y.pWin, 1)!=0 ){
107631 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
133349 while( p->pWin ){
133350 assert( p->pWin->ppThis==&p->pWin );
133351 sqlite3WindowUnlinkFromSelect(p->pWin);
133419 pNew->pWin = 0;
135730 if( p->pWin ){
135895 if( p->pWin ) return -1;
136961 Window *pWin = pExpr->y.pWin;
136962 pWin->pFilter = substExpr(pSubst, pWin->pFilter);
136963 substExprList(pSubst, pWin->pPartition);
136964 substExprList(pSubst, pWin->pOrderBy);
137326 if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */
137420 || pSub1->pWin /* (17e) */
137984 assert( pSubq->pWin->pPartition );
137987 return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition);
138077 if( pSel->pWin ) return 0; /* restriction (6b) */
138080 if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
138128 if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){
139235 Expr *pFilter = pF->pFExpr->y.pWin->pFilter;
139662 if( p->pWin && (sqlite3SelectTrace & 0x108)!=0 ){
140045 && p->pWin==0
140123 Window *pWin = p->pWin; /* Main window object (or NULL) */
140124 if( pWin ){
140161 if( pWin ){
140302 sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter);
150380 && pExpr->x.pSelect->pWin==0
150549 assert( p->y.pWin!=0 );
150550 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition);
150551 mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy);
150552 mask |= sqlite3WhereExprUsage(pMaskSet, p->y.pWin->pFilter);
157019 Window *pWin, /* Window frame to update */
157022 if( pWin->zName && pWin->eFrmType==0 ){
157023 Window *p = windowFind(pParse, pList, pWin->zName);
157025 pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0);
157026 pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0);
157027 pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0);
157028 pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0);
157029 pWin->eStart = p->eStart;
157030 pWin->eEnd = p->eEnd;
157031 pWin->eFrmType = p->eFrmType;
157032 pWin->eExclude = p->eExclude;
157034 sqlite3WindowChain(pParse, pWin, pList);
157036 if( (pWin->eFrmType==TK_RANGE)
157037 && (pWin->pStart || pWin->pEnd)
157038 && (pWin->pOrderBy==0 || pWin->pOrderBy->nExpr!=1)
157046 if( pWin->pFilter ){
157069 sqlite3ExprDelete(db, pWin->pStart);
157070 sqlite3ExprDelete(db, pWin->pEnd);
157071 pWin->pEnd = pWin->pStart = 0;
157072 pWin->eFrmType = aUp[i].eFrmType;
157073 pWin->eStart = aUp[i].eStart;
157074 pWin->eEnd = aUp[i].eEnd;
157075 pWin->eExclude = 0;
157076 if( pWin->eStart==TK_FOLLOWING ){
157077 pWin->pStart = sqlite3Expr(db, TK_INTEGER, "1");
157084 pWin->pFunc = pFunc;
157093 Window *pWin;
157109 assert( p->pWin!=0 );
157135 Window *pWin;
157136 for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){
157137 if( pExpr->y.pWin==pWin ){
157138 assert( pWin->pOwner==pExpr );
157173 pExpr->iTable = p->pWin->iEphCsr;
157216 Window *pWin,
157225 assert( pWin!=0 );
157230 sRewrite.pWin = pWin;
157317 if( p->pWin && p->pPrior==0 && ALWAYS((p->selFlags & SF_WinRewrite)==0) ){
157328 Window *pMWin = p->pWin; /* Main window object */
157329 Window *pWin; /* Window object iterator */
157389 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
157391 assert( ExprUseXList(pWin->pOwner) );
157392 pArgs = pWin->pOwner->x.pList;
157393 if( pWin->pFunc->funcFlags & SQLITE_FUNC_SUBTYPE ){
157395 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
157396 pWin->bExprArgs = 1;
157398 pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
157401 if( pWin->pFilter ){
157402 Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0);
157405 pWin->regAccum = ++pParse->nMem;
157406 pWin->regResult = ++pParse->nMem;
157407 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
157543 Window *pWin = 0;
157581 pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
157582 if( pWin==0 ) goto windowAllocErr;
157583 pWin->eFrmType = eType;
157584 pWin->eStart = eStart;
157585 pWin->eEnd = eEnd;
157589 pWin->eExclude = eExclude;
157590 pWin->bImplicitFrame = bImplicitFrame;
157591 pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd);
157592 pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart);
157593 return pWin;
157608 Window *pWin,
157613 if( pWin ){
157614 pWin->pPartition = pPartition;
157615 pWin->pOrderBy = pOrderBy;
157617 pWin->zBase = sqlite3DbStrNDup(pParse->db, pBase->z, pBase->n);
157623 return pWin;
157633 SQLITE_PRIVATE void sqlite3WindowChain(Parse *pParse, Window *pWin, Window *pList){
157634 if( pWin->zBase ){
157636 Window *pExist = windowFind(pParse, pList, pWin->zBase);
157640 if( pWin->pPartition ){
157642 }else if( pExist->pOrderBy && pWin->pOrderBy ){
157649 "cannot override %s of window: %s", zErr, pWin->zBase
157652 pWin->pPartition = sqlite3ExprListDup(db, pExist->pPartition, 0);
157654 assert( pWin->pOrderBy==0 );
157655 pWin->pOrderBy = sqlite3ExprListDup(db, pExist->pOrderBy, 0);
157657 sqlite3DbFree(db, pWin->zBase);
157658 pWin->zBase = 0;
157667 SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
157670 assert( pWin );
157671 p->y.pWin = pWin;
157673 pWin->pOwner = p;
157674 if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){
157680 sqlite3WindowDelete(pParse->db, pWin);
157690 SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin){
157692 if( 0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0) ){
157693 pWin->pNextWin = pSel->pWin;
157694 if( pSel->pWin ){
157695 pSel->pWin->ppThis = &pWin->pNextWin;
157697 pSel->pWin = pWin;
157698 pWin->ppThis = &pSel->pWin;
157700 if( sqlite3ExprListCompare(pWin->pPartition, pSel->pWin->pPartition,-1) ){
157748 Window *pMWin = pSelect->pWin;
157749 Window *pWin;
157779 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
157780 FuncDef *p = pWin->pFunc;
157781 if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){
157791 assert( ExprUseXList(pWin->pOwner) );
157792 pList = pWin->pOwner->x.pList;
157794 pWin->csrApp = pParse->nTab++;
157795 pWin->regApp = pParse->nMem+1;
157797 if( pKeyInfo && pWin->pFunc->zName[1]=='i' ){
157801 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2);
157803 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
157808 pWin->regApp = pParse->nMem+1;
157809 pWin->csrApp = pParse->nTab++;
157811 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
157814 pWin->csrApp = pParse->nTab++;
157815 sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
157880 static int windowArgCount(Window *pWin){
157882 assert( ExprUseXList(pWin->pOwner) );
157883 pList = pWin->pOwner->x.pList;
158018 Window *pWin;
158019 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158020 FuncDef *pFunc = pWin->pFunc;
158022 int nArg = pWin->bExprArgs ? 0 : windowArgCount(pWin);
158025 assert( bInverse==0 || pWin->eStart!=TK_UNBOUNDED );
158029 assert( pWin==pMWin || sqlite3WindowCompare(pParse,pWin,pMWin,0)!=1 );
158033 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i);
158035 sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+i, reg+i);
158042 && (pWin->eStart!=TK_UNBOUNDED)
158047 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1);
158048 sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp);
158049 sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2);
158050 sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2);
158052 sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1);
158054 sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp);
158058 }else if( pWin->regApp ){
158063 sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1);
158066 if( pWin->pFilter ){
158068 assert( ExprUseXList(pWin->pOwner) );
158069 assert( pWin->bExprArgs || !nArg ||nArg==pWin->pOwner->x.pList->nExpr );
158070 assert( pWin->bExprArgs || nArg ||pWin->pOwner->x.pList==0 );
158072 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp);
158078 if( pWin->bExprArgs ){
158082 assert( ExprUseXList(pWin->pOwner) );
158083 nArg = pWin->pOwner->x.pList->nExpr;
158085 sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0);
158089 if( pOp->opcode==OP_Column && pOp->p1==pWin->iEphCsr ){
158097 assert( ExprUseXList(pWin->pOwner) );
158098 pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr);
158102 bInverse, regArg, pWin->regAccum);
158105 if( pWin->bExprArgs ){
158130 Window *pWin;
158132 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158134 && (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX)
158135 && (pWin->eStart!=TK_UNBOUNDED)
158137 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
158138 sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp);
158140 sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult);
158142 }else if( pWin->regApp ){
158145 int nArg = windowArgCount(pWin);
158147 sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, nArg);
158148 sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
158149 sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult);
158150 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
158152 sqlite3VdbeAddOp3(v, OP_AggValue,pWin->regAccum,nArg,pWin->regResult);
158153 sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
158166 Window *pWin;
158201 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158202 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
158279 Window *pWin;
158281 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158282 FuncDef *pFunc = pWin->pFunc;
158283 assert( ExprUseXList(pWin->pOwner) );
158287 int csr = pWin->csrApp;
158290 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
158293 sqlite3VdbeAddOp3(v, OP_Column,pMWin->iEphCsr,pWin->iArgCol+1,tmpReg);
158298 sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
158299 sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
158303 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
158308 int nArg = pWin->pOwner->x.pList->nExpr;
158309 int csr = pWin->csrApp;
158315 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
158317 sqlite3VdbeAddOp3(v, OP_Column, iEph,pWin->iArgCol+2,pWin->regResult);
158326 sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2);
158333 sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
158352 Window *pWin;
158353 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158354 FuncDef *pFunc = pWin->pFunc;
158355 assert( pWin->regAccum );
158356 sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
158357 nArg = MAX(nArg, windowArgCount(pWin));
158360 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
158361 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
158364 if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){
158365 assert( pWin->eStart!=TK_UNBOUNDED );
158366 sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
158367 sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
158381 Window *pWin;
158383 for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
158384 FuncDef *pFunc = pWin->pFunc;
158768 Window *pWin;
158772 for(pWin=p; pWin; pWin=pWin->pNextWin){
158773 *pp = sqlite3WindowDup(db, 0, pWin);
159143 Window *pMWin = p->pWin;