Lines Matching refs:winstate

64 	WindowAggState *winstate;	/* parent WindowAggState */  member
161 static void initialize_windowaggregate(WindowAggState *winstate,
164 static void advance_windowaggregate(WindowAggState *winstate,
167 static bool advance_windowaggregate_base(WindowAggState *winstate,
170 static void finalize_windowaggregate(WindowAggState *winstate,
175 static void eval_windowaggregates(WindowAggState *winstate);
176 static void eval_windowfunction(WindowAggState *winstate,
180 static void begin_partition(WindowAggState *winstate);
181 static void spool_tuples(WindowAggState *winstate, int64 pos);
182 static void release_partition(WindowAggState *winstate);
184 static int row_is_in_frame(WindowAggState *winstate, int64 pos,
186 static void update_frameheadpos(WindowAggState *winstate);
187 static void update_frametailpos(WindowAggState *winstate);
188 static void update_grouptailpos(WindowAggState *winstate);
190 static WindowStatePerAggData *initialize_peragg(WindowAggState *winstate,
195 static bool are_peers(WindowAggState *winstate, TupleTableSlot *slot1,
206 initialize_windowaggregate(WindowAggState *winstate, in initialize_windowaggregate() argument
217 if (peraggstate->aggcontext != winstate->aggcontext) in initialize_windowaggregate()
241 advance_windowaggregate(WindowAggState *winstate, in advance_windowaggregate() argument
252 ExprContext *econtext = winstate->tmpcontext; in advance_windowaggregate()
341 (void *) winstate, NULL); in advance_windowaggregate()
344 winstate->curaggcontext = peraggstate->aggcontext; in advance_windowaggregate()
346 winstate->curaggcontext = NULL; in advance_windowaggregate()
417 advance_windowaggregate_base(WindowAggState *winstate, in advance_windowaggregate_base() argument
428 ExprContext *econtext = winstate->tmpcontext; in advance_windowaggregate_base()
497 initialize_windowaggregate(winstate, in advance_windowaggregate_base()
498 &winstate->perfunc[peraggstate->wfuncno], in advance_windowaggregate_base()
511 (void *) winstate, NULL); in advance_windowaggregate_base()
514 winstate->curaggcontext = peraggstate->aggcontext; in advance_windowaggregate_base()
516 winstate->curaggcontext = NULL; in advance_windowaggregate_base()
579 finalize_windowaggregate(WindowAggState *winstate, in finalize_windowaggregate() argument
586 oldContext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_tuple_memory); in finalize_windowaggregate()
601 (void *) winstate, NULL); in finalize_windowaggregate()
625 winstate->curaggcontext = peraggstate->aggcontext; in finalize_windowaggregate()
627 winstate->curaggcontext = NULL; in finalize_windowaggregate()
662 eval_windowaggregates(WindowAggState *winstate) in eval_windowaggregates() argument
676 numaggs = winstate->numaggs; in eval_windowaggregates()
681 econtext = winstate->ss.ps.ps_ExprContext; in eval_windowaggregates()
682 agg_winobj = winstate->agg_winobj; in eval_windowaggregates()
683 agg_row_slot = winstate->agg_row_slot; in eval_windowaggregates()
684 temp_slot = winstate->temp_slot_1; in eval_windowaggregates()
735 update_frameheadpos(winstate); in eval_windowaggregates()
736 if (winstate->frameheadpos < winstate->aggregatedbase) in eval_windowaggregates()
750 if (winstate->aggregatedbase == winstate->frameheadpos && in eval_windowaggregates()
751 (winstate->frameOptions & (FRAMEOPTION_END_UNBOUNDED_FOLLOWING | in eval_windowaggregates()
753 !(winstate->frameOptions & FRAMEOPTION_EXCLUSION) && in eval_windowaggregates()
754 winstate->aggregatedbase <= winstate->currentpos && in eval_windowaggregates()
755 winstate->aggregatedupto > winstate->currentpos) in eval_windowaggregates()
759 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
785 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
786 if (winstate->currentpos == 0 || in eval_windowaggregates()
787 (winstate->aggregatedbase != winstate->frameheadpos && in eval_windowaggregates()
789 (winstate->frameOptions & FRAMEOPTION_EXCLUSION) || in eval_windowaggregates()
790 winstate->aggregatedupto <= winstate->frameheadpos) in eval_windowaggregates()
807 winstate->aggregatedbase < winstate->frameheadpos) in eval_windowaggregates()
813 if (!window_gettupleslot(agg_winobj, winstate->aggregatedbase, in eval_windowaggregates()
818 winstate->tmpcontext->ecxt_outertuple = temp_slot; in eval_windowaggregates()
828 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
833 ok = advance_windowaggregate_base(winstate, in eval_windowaggregates()
834 &winstate->perfunc[wfuncno], in eval_windowaggregates()
845 ResetExprContext(winstate->tmpcontext); in eval_windowaggregates()
848 winstate->aggregatedbase++; in eval_windowaggregates()
857 winstate->aggregatedbase = winstate->frameheadpos; in eval_windowaggregates()
864 WinSetMarkPosition(agg_winobj, winstate->frameheadpos); in eval_windowaggregates()
877 MemoryContextResetAndDeleteChildren(winstate->aggcontext); in eval_windowaggregates()
880 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
883 Assert(peraggstate->aggcontext != winstate->aggcontext || in eval_windowaggregates()
890 initialize_windowaggregate(winstate, in eval_windowaggregates()
891 &winstate->perfunc[wfuncno], in eval_windowaggregates()
913 aggregatedupto_nonrestarted = winstate->aggregatedupto; in eval_windowaggregates()
915 winstate->aggregatedupto != winstate->frameheadpos) in eval_windowaggregates()
917 winstate->aggregatedupto = winstate->frameheadpos; in eval_windowaggregates()
935 if (!window_gettupleslot(agg_winobj, winstate->aggregatedupto, in eval_windowaggregates()
944 ret = row_is_in_frame(winstate, winstate->aggregatedupto, agg_row_slot); in eval_windowaggregates()
951 winstate->tmpcontext->ecxt_outertuple = agg_row_slot; in eval_windowaggregates()
956 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
960 winstate->aggregatedupto < aggregatedupto_nonrestarted) in eval_windowaggregates()
964 advance_windowaggregate(winstate, in eval_windowaggregates()
965 &winstate->perfunc[wfuncno], in eval_windowaggregates()
971 ResetExprContext(winstate->tmpcontext); in eval_windowaggregates()
974 winstate->aggregatedupto++; in eval_windowaggregates()
979 Assert(aggregatedupto_nonrestarted <= winstate->aggregatedupto); in eval_windowaggregates()
989 peraggstate = &winstate->peragg[i]; in eval_windowaggregates()
993 finalize_windowaggregate(winstate, in eval_windowaggregates()
994 &winstate->perfunc[wfuncno], in eval_windowaggregates()
1032 eval_windowfunction(WindowAggState *winstate, WindowStatePerFunc perfuncstate, in eval_windowfunction() argument
1038 oldContext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_tuple_memory); in eval_windowfunction()
1054 winstate->curaggcontext = NULL; in eval_windowfunction()
1079 begin_partition(WindowAggState *winstate) in begin_partition() argument
1081 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in begin_partition()
1082 PlanState *outerPlan = outerPlanState(winstate); in begin_partition()
1083 int frameOptions = winstate->frameOptions; in begin_partition()
1084 int numfuncs = winstate->numfuncs; in begin_partition()
1087 winstate->partition_spooled = false; in begin_partition()
1088 winstate->framehead_valid = false; in begin_partition()
1089 winstate->frametail_valid = false; in begin_partition()
1090 winstate->grouptail_valid = false; in begin_partition()
1091 winstate->spooled_rows = 0; in begin_partition()
1092 winstate->currentpos = 0; in begin_partition()
1093 winstate->frameheadpos = 0; in begin_partition()
1094 winstate->frametailpos = 0; in begin_partition()
1095 winstate->currentgroup = 0; in begin_partition()
1096 winstate->frameheadgroup = 0; in begin_partition()
1097 winstate->frametailgroup = 0; in begin_partition()
1098 winstate->groupheadpos = 0; in begin_partition()
1099 winstate->grouptailpos = -1; /* see update_grouptailpos */ in begin_partition()
1100 ExecClearTuple(winstate->agg_row_slot); in begin_partition()
1101 if (winstate->framehead_slot) in begin_partition()
1102 ExecClearTuple(winstate->framehead_slot); in begin_partition()
1103 if (winstate->frametail_slot) in begin_partition()
1104 ExecClearTuple(winstate->frametail_slot); in begin_partition()
1110 if (TupIsNull(winstate->first_part_slot)) in begin_partition()
1115 ExecCopySlot(winstate->first_part_slot, outerslot); in begin_partition()
1119 winstate->partition_spooled = true; in begin_partition()
1120 winstate->more_partitions = false; in begin_partition()
1126 winstate->buffer = tuplestore_begin_heap(false, false, work_mem); in begin_partition()
1133 winstate->current_ptr = 0; /* read pointer 0 is pre-allocated */ in begin_partition()
1136 tuplestore_set_eflags(winstate->buffer, 0); in begin_partition()
1139 if (winstate->numaggs > 0) in begin_partition()
1141 WindowObject agg_winobj = winstate->agg_winobj; in begin_partition()
1152 agg_winobj->markptr = tuplestore_alloc_read_pointer(winstate->buffer, 0); in begin_partition()
1157 agg_winobj->readptr = tuplestore_alloc_read_pointer(winstate->buffer, in begin_partition()
1163 winstate->aggregatedbase = 0; in begin_partition()
1164 winstate->aggregatedupto = 0; in begin_partition()
1170 WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]); in begin_partition()
1176 winobj->markptr = tuplestore_alloc_read_pointer(winstate->buffer, in begin_partition()
1178 winobj->readptr = tuplestore_alloc_read_pointer(winstate->buffer, in begin_partition()
1193 winstate->framehead_ptr = winstate->frametail_ptr = -1; /* if not used */ in begin_partition()
1200 winstate->framehead_ptr = in begin_partition()
1201 tuplestore_alloc_read_pointer(winstate->buffer, 0); in begin_partition()
1205 winstate->frametail_ptr = in begin_partition()
1206 tuplestore_alloc_read_pointer(winstate->buffer, 0); in begin_partition()
1216 winstate->grouptail_ptr = -1; in begin_partition()
1222 winstate->grouptail_ptr = in begin_partition()
1223 tuplestore_alloc_read_pointer(winstate->buffer, 0); in begin_partition()
1230 tuplestore_puttupleslot(winstate->buffer, winstate->first_part_slot); in begin_partition()
1231 winstate->spooled_rows++; in begin_partition()
1239 spool_tuples(WindowAggState *winstate, int64 pos) in spool_tuples() argument
1241 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in spool_tuples()
1246 if (!winstate->buffer) in spool_tuples()
1248 if (winstate->partition_spooled) in spool_tuples()
1259 if (!tuplestore_in_memory(winstate->buffer)) in spool_tuples()
1262 outerPlan = outerPlanState(winstate); in spool_tuples()
1265 oldcontext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_query_memory); in spool_tuples()
1267 while (winstate->spooled_rows <= pos || pos == -1) in spool_tuples()
1273 winstate->partition_spooled = true; in spool_tuples()
1274 winstate->more_partitions = false; in spool_tuples()
1280 ExprContext *econtext = winstate->tmpcontext; in spool_tuples()
1282 econtext->ecxt_innertuple = winstate->first_part_slot; in spool_tuples()
1286 if (!ExecQualAndReset(winstate->partEqfunction, econtext)) in spool_tuples()
1291 ExecCopySlot(winstate->first_part_slot, outerslot); in spool_tuples()
1292 winstate->partition_spooled = true; in spool_tuples()
1293 winstate->more_partitions = true; in spool_tuples()
1299 tuplestore_puttupleslot(winstate->buffer, outerslot); in spool_tuples()
1300 winstate->spooled_rows++; in spool_tuples()
1312 release_partition(WindowAggState *winstate) in release_partition() argument
1316 for (i = 0; i < winstate->numfuncs; i++) in release_partition()
1318 WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]); in release_partition()
1331 MemoryContextResetAndDeleteChildren(winstate->partcontext); in release_partition()
1332 MemoryContextResetAndDeleteChildren(winstate->aggcontext); in release_partition()
1333 for (i = 0; i < winstate->numaggs; i++) in release_partition()
1335 if (winstate->peragg[i].aggcontext != winstate->aggcontext) in release_partition()
1336 MemoryContextResetAndDeleteChildren(winstate->peragg[i].aggcontext); in release_partition()
1339 if (winstate->buffer) in release_partition()
1340 tuplestore_end(winstate->buffer); in release_partition()
1341 winstate->buffer = NULL; in release_partition()
1342 winstate->partition_spooled = false; in release_partition()
1362 row_is_in_frame(WindowAggState *winstate, int64 pos, TupleTableSlot *slot) in row_is_in_frame() argument
1364 int frameOptions = winstate->frameOptions; in row_is_in_frame()
1372 update_frameheadpos(winstate); in row_is_in_frame()
1373 if (pos < winstate->frameheadpos) in row_is_in_frame()
1386 if (pos > winstate->currentpos) in row_is_in_frame()
1392 if (pos > winstate->currentpos && in row_is_in_frame()
1393 !are_peers(winstate, slot, winstate->ss.ss_ScanTupleSlot)) in row_is_in_frame()
1403 int64 offset = DatumGetInt64(winstate->endOffsetValue); in row_is_in_frame()
1409 if (pos > winstate->currentpos + offset) in row_is_in_frame()
1415 update_frametailpos(winstate); in row_is_in_frame()
1416 if (pos >= winstate->frametailpos) in row_is_in_frame()
1426 if (pos == winstate->currentpos) in row_is_in_frame()
1431 pos != winstate->currentpos)) in row_is_in_frame()
1433 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in row_is_in_frame()
1439 if (pos >= winstate->groupheadpos) in row_is_in_frame()
1441 update_grouptailpos(winstate); in row_is_in_frame()
1442 if (pos < winstate->grouptailpos) in row_is_in_frame()
1462 update_frameheadpos(WindowAggState *winstate) in update_frameheadpos() argument
1464 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in update_frameheadpos()
1465 int frameOptions = winstate->frameOptions; in update_frameheadpos()
1468 if (winstate->framehead_valid) in update_frameheadpos()
1472 oldcontext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_query_memory); in update_frameheadpos()
1477 winstate->frameheadpos = 0; in update_frameheadpos()
1478 winstate->framehead_valid = true; in update_frameheadpos()
1485 winstate->frameheadpos = winstate->currentpos; in update_frameheadpos()
1486 winstate->framehead_valid = true; in update_frameheadpos()
1493 winstate->frameheadpos = 0; in update_frameheadpos()
1494 winstate->framehead_valid = true; in update_frameheadpos()
1506 tuplestore_select_read_pointer(winstate->buffer, in update_frameheadpos()
1507 winstate->framehead_ptr); in update_frameheadpos()
1508 if (winstate->frameheadpos == 0 && in update_frameheadpos()
1509 TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1512 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1513 winstate->framehead_slot)) in update_frameheadpos()
1517 while (!TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1519 if (are_peers(winstate, winstate->framehead_slot, in update_frameheadpos()
1520 winstate->ss.ss_ScanTupleSlot)) in update_frameheadpos()
1523 winstate->frameheadpos++; in update_frameheadpos()
1524 spool_tuples(winstate, winstate->frameheadpos); in update_frameheadpos()
1525 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1526 winstate->framehead_slot)) in update_frameheadpos()
1529 winstate->framehead_valid = true; in update_frameheadpos()
1539 int64 offset = DatumGetInt64(winstate->startOffsetValue); in update_frameheadpos()
1544 winstate->frameheadpos = winstate->currentpos + offset; in update_frameheadpos()
1546 if (winstate->frameheadpos < 0) in update_frameheadpos()
1547 winstate->frameheadpos = 0; in update_frameheadpos()
1548 else if (winstate->frameheadpos > winstate->currentpos + 1) in update_frameheadpos()
1551 spool_tuples(winstate, winstate->frameheadpos - 1); in update_frameheadpos()
1552 if (winstate->frameheadpos > winstate->spooled_rows) in update_frameheadpos()
1553 winstate->frameheadpos = winstate->spooled_rows; in update_frameheadpos()
1555 winstate->framehead_valid = true; in update_frameheadpos()
1581 if (!winstate->inRangeAsc) in update_frameheadpos()
1587 tuplestore_select_read_pointer(winstate->buffer, in update_frameheadpos()
1588 winstate->framehead_ptr); in update_frameheadpos()
1589 if (winstate->frameheadpos == 0 && in update_frameheadpos()
1590 TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1593 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1594 winstate->framehead_slot)) in update_frameheadpos()
1598 while (!TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1605 headval = slot_getattr(winstate->framehead_slot, sortCol, in update_frameheadpos()
1607 currval = slot_getattr(winstate->ss.ss_ScanTupleSlot, sortCol, in update_frameheadpos()
1612 if (winstate->inRangeNullsFirst) in update_frameheadpos()
1627 if (DatumGetBool(FunctionCall5Coll(&winstate->startInRangeFunc, in update_frameheadpos()
1628 winstate->inRangeColl, in update_frameheadpos()
1631 winstate->startOffsetValue, in update_frameheadpos()
1637 winstate->frameheadpos++; in update_frameheadpos()
1638 spool_tuples(winstate, winstate->frameheadpos); in update_frameheadpos()
1639 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1640 winstate->framehead_slot)) in update_frameheadpos()
1643 winstate->framehead_valid = true; in update_frameheadpos()
1655 int64 offset = DatumGetInt64(winstate->startOffsetValue); in update_frameheadpos()
1659 minheadgroup = winstate->currentgroup - offset; in update_frameheadpos()
1661 minheadgroup = winstate->currentgroup + offset; in update_frameheadpos()
1663 tuplestore_select_read_pointer(winstate->buffer, in update_frameheadpos()
1664 winstate->framehead_ptr); in update_frameheadpos()
1665 if (winstate->frameheadpos == 0 && in update_frameheadpos()
1666 TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1669 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1670 winstate->framehead_slot)) in update_frameheadpos()
1674 while (!TupIsNull(winstate->framehead_slot)) in update_frameheadpos()
1676 if (winstate->frameheadgroup >= minheadgroup) in update_frameheadpos()
1678 ExecCopySlot(winstate->temp_slot_2, winstate->framehead_slot); in update_frameheadpos()
1680 winstate->frameheadpos++; in update_frameheadpos()
1681 spool_tuples(winstate, winstate->frameheadpos); in update_frameheadpos()
1682 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frameheadpos()
1683 winstate->framehead_slot)) in update_frameheadpos()
1685 if (!are_peers(winstate, winstate->temp_slot_2, in update_frameheadpos()
1686 winstate->framehead_slot)) in update_frameheadpos()
1687 winstate->frameheadgroup++; in update_frameheadpos()
1689 ExecClearTuple(winstate->temp_slot_2); in update_frameheadpos()
1690 winstate->framehead_valid = true; in update_frameheadpos()
1712 update_frametailpos(WindowAggState *winstate) in update_frametailpos() argument
1714 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in update_frametailpos()
1715 int frameOptions = winstate->frameOptions; in update_frametailpos()
1718 if (winstate->frametail_valid) in update_frametailpos()
1722 oldcontext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_query_memory); in update_frametailpos()
1727 spool_tuples(winstate, -1); in update_frametailpos()
1728 winstate->frametailpos = winstate->spooled_rows; in update_frametailpos()
1729 winstate->frametail_valid = true; in update_frametailpos()
1736 winstate->frametailpos = winstate->currentpos + 1; in update_frametailpos()
1737 winstate->frametail_valid = true; in update_frametailpos()
1744 spool_tuples(winstate, -1); in update_frametailpos()
1745 winstate->frametailpos = winstate->spooled_rows; in update_frametailpos()
1746 winstate->frametail_valid = true; in update_frametailpos()
1759 tuplestore_select_read_pointer(winstate->buffer, in update_frametailpos()
1760 winstate->frametail_ptr); in update_frametailpos()
1761 if (winstate->frametailpos == 0 && in update_frametailpos()
1762 TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1765 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1766 winstate->frametail_slot)) in update_frametailpos()
1770 while (!TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1772 if (winstate->frametailpos > winstate->currentpos && in update_frametailpos()
1773 !are_peers(winstate, winstate->frametail_slot, in update_frametailpos()
1774 winstate->ss.ss_ScanTupleSlot)) in update_frametailpos()
1777 winstate->frametailpos++; in update_frametailpos()
1778 spool_tuples(winstate, winstate->frametailpos); in update_frametailpos()
1779 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1780 winstate->frametail_slot)) in update_frametailpos()
1783 winstate->frametail_valid = true; in update_frametailpos()
1793 int64 offset = DatumGetInt64(winstate->endOffsetValue); in update_frametailpos()
1798 winstate->frametailpos = winstate->currentpos + offset + 1; in update_frametailpos()
1800 if (winstate->frametailpos < 0) in update_frametailpos()
1801 winstate->frametailpos = 0; in update_frametailpos()
1802 else if (winstate->frametailpos > winstate->currentpos + 1) in update_frametailpos()
1805 spool_tuples(winstate, winstate->frametailpos - 1); in update_frametailpos()
1806 if (winstate->frametailpos > winstate->spooled_rows) in update_frametailpos()
1807 winstate->frametailpos = winstate->spooled_rows; in update_frametailpos()
1809 winstate->frametail_valid = true; in update_frametailpos()
1835 if (!winstate->inRangeAsc) in update_frametailpos()
1841 tuplestore_select_read_pointer(winstate->buffer, in update_frametailpos()
1842 winstate->frametail_ptr); in update_frametailpos()
1843 if (winstate->frametailpos == 0 && in update_frametailpos()
1844 TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1847 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1848 winstate->frametail_slot)) in update_frametailpos()
1852 while (!TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1859 tailval = slot_getattr(winstate->frametail_slot, sortCol, in update_frametailpos()
1861 currval = slot_getattr(winstate->ss.ss_ScanTupleSlot, sortCol, in update_frametailpos()
1866 if (winstate->inRangeNullsFirst) in update_frametailpos()
1881 if (!DatumGetBool(FunctionCall5Coll(&winstate->endInRangeFunc, in update_frametailpos()
1882 winstate->inRangeColl, in update_frametailpos()
1885 winstate->endOffsetValue, in update_frametailpos()
1891 winstate->frametailpos++; in update_frametailpos()
1892 spool_tuples(winstate, winstate->frametailpos); in update_frametailpos()
1893 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1894 winstate->frametail_slot)) in update_frametailpos()
1897 winstate->frametail_valid = true; in update_frametailpos()
1909 int64 offset = DatumGetInt64(winstate->endOffsetValue); in update_frametailpos()
1913 maxtailgroup = winstate->currentgroup - offset; in update_frametailpos()
1915 maxtailgroup = winstate->currentgroup + offset; in update_frametailpos()
1917 tuplestore_select_read_pointer(winstate->buffer, in update_frametailpos()
1918 winstate->frametail_ptr); in update_frametailpos()
1919 if (winstate->frametailpos == 0 && in update_frametailpos()
1920 TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1923 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1924 winstate->frametail_slot)) in update_frametailpos()
1928 while (!TupIsNull(winstate->frametail_slot)) in update_frametailpos()
1930 if (winstate->frametailgroup > maxtailgroup) in update_frametailpos()
1932 ExecCopySlot(winstate->temp_slot_2, winstate->frametail_slot); in update_frametailpos()
1934 winstate->frametailpos++; in update_frametailpos()
1935 spool_tuples(winstate, winstate->frametailpos); in update_frametailpos()
1936 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_frametailpos()
1937 winstate->frametail_slot)) in update_frametailpos()
1939 if (!are_peers(winstate, winstate->temp_slot_2, in update_frametailpos()
1940 winstate->frametail_slot)) in update_frametailpos()
1941 winstate->frametailgroup++; in update_frametailpos()
1943 ExecClearTuple(winstate->temp_slot_2); in update_frametailpos()
1944 winstate->frametail_valid = true; in update_frametailpos()
1962 update_grouptailpos(WindowAggState *winstate) in update_grouptailpos() argument
1964 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in update_grouptailpos()
1967 if (winstate->grouptail_valid) in update_grouptailpos()
1971 oldcontext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_query_memory); in update_grouptailpos()
1976 spool_tuples(winstate, -1); in update_grouptailpos()
1977 winstate->grouptailpos = winstate->spooled_rows; in update_grouptailpos()
1978 winstate->grouptail_valid = true; in update_grouptailpos()
1990 Assert(winstate->grouptailpos <= winstate->currentpos); in update_grouptailpos()
1991 tuplestore_select_read_pointer(winstate->buffer, in update_grouptailpos()
1992 winstate->grouptail_ptr); in update_grouptailpos()
1996 winstate->grouptailpos++; in update_grouptailpos()
1997 spool_tuples(winstate, winstate->grouptailpos); in update_grouptailpos()
1998 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in update_grouptailpos()
1999 winstate->temp_slot_2)) in update_grouptailpos()
2001 if (winstate->grouptailpos > winstate->currentpos && in update_grouptailpos()
2002 !are_peers(winstate, winstate->temp_slot_2, in update_grouptailpos()
2003 winstate->ss.ss_ScanTupleSlot)) in update_grouptailpos()
2006 ExecClearTuple(winstate->temp_slot_2); in update_grouptailpos()
2007 winstate->grouptail_valid = true; in update_grouptailpos()
2025 WindowAggState *winstate = castNode(WindowAggState, pstate); in ExecWindowAgg() local
2032 if (winstate->all_done) in ExecWindowAgg()
2040 if (winstate->all_first) in ExecWindowAgg()
2042 int frameOptions = winstate->frameOptions; in ExecWindowAgg()
2043 ExprContext *econtext = winstate->ss.ps.ps_ExprContext; in ExecWindowAgg()
2051 Assert(winstate->startOffset != NULL); in ExecWindowAgg()
2052 value = ExecEvalExprSwitchContext(winstate->startOffset, in ExecWindowAgg()
2060 get_typlenbyval(exprType((Node *) winstate->startOffset->expr), in ExecWindowAgg()
2062 winstate->startOffsetValue = datumCopy(value, byval, len); in ExecWindowAgg()
2076 Assert(winstate->endOffset != NULL); in ExecWindowAgg()
2077 value = ExecEvalExprSwitchContext(winstate->endOffset, in ExecWindowAgg()
2085 get_typlenbyval(exprType((Node *) winstate->endOffset->expr), in ExecWindowAgg()
2087 winstate->endOffsetValue = datumCopy(value, byval, len); in ExecWindowAgg()
2099 winstate->all_first = false; in ExecWindowAgg()
2102 if (winstate->buffer == NULL) in ExecWindowAgg()
2105 begin_partition(winstate); in ExecWindowAgg()
2111 winstate->currentpos++; in ExecWindowAgg()
2113 winstate->framehead_valid = false; in ExecWindowAgg()
2114 winstate->frametail_valid = false; in ExecWindowAgg()
2122 spool_tuples(winstate, winstate->currentpos); in ExecWindowAgg()
2125 if (winstate->partition_spooled && in ExecWindowAgg()
2126 winstate->currentpos >= winstate->spooled_rows) in ExecWindowAgg()
2128 release_partition(winstate); in ExecWindowAgg()
2130 if (winstate->more_partitions) in ExecWindowAgg()
2132 begin_partition(winstate); in ExecWindowAgg()
2133 Assert(winstate->spooled_rows > 0); in ExecWindowAgg()
2137 winstate->all_done = true; in ExecWindowAgg()
2143 econtext = winstate->ss.ps.ps_ExprContext; in ExecWindowAgg()
2162 tuplestore_select_read_pointer(winstate->buffer, winstate->current_ptr); in ExecWindowAgg()
2163 if ((winstate->frameOptions & (FRAMEOPTION_GROUPS | in ExecWindowAgg()
2166 winstate->currentpos > 0) in ExecWindowAgg()
2168 ExecCopySlot(winstate->temp_slot_2, winstate->ss.ss_ScanTupleSlot); in ExecWindowAgg()
2169 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in ExecWindowAgg()
2170 winstate->ss.ss_ScanTupleSlot)) in ExecWindowAgg()
2172 if (!are_peers(winstate, winstate->temp_slot_2, in ExecWindowAgg()
2173 winstate->ss.ss_ScanTupleSlot)) in ExecWindowAgg()
2175 winstate->currentgroup++; in ExecWindowAgg()
2176 winstate->groupheadpos = winstate->currentpos; in ExecWindowAgg()
2177 winstate->grouptail_valid = false; in ExecWindowAgg()
2179 ExecClearTuple(winstate->temp_slot_2); in ExecWindowAgg()
2183 if (!tuplestore_gettupleslot(winstate->buffer, true, true, in ExecWindowAgg()
2184 winstate->ss.ss_ScanTupleSlot)) in ExecWindowAgg()
2191 numfuncs = winstate->numfuncs; in ExecWindowAgg()
2194 WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]); in ExecWindowAgg()
2198 eval_windowfunction(winstate, perfuncstate, in ExecWindowAgg()
2206 if (winstate->numaggs > 0) in ExecWindowAgg()
2207 eval_windowaggregates(winstate); in ExecWindowAgg()
2219 if (winstate->framehead_ptr >= 0) in ExecWindowAgg()
2220 update_frameheadpos(winstate); in ExecWindowAgg()
2221 if (winstate->frametail_ptr >= 0) in ExecWindowAgg()
2222 update_frametailpos(winstate); in ExecWindowAgg()
2223 if (winstate->grouptail_ptr >= 0) in ExecWindowAgg()
2224 update_grouptailpos(winstate); in ExecWindowAgg()
2229 tuplestore_trim(winstate->buffer); in ExecWindowAgg()
2236 econtext->ecxt_outertuple = winstate->ss.ss_ScanTupleSlot; in ExecWindowAgg()
2238 return ExecProject(winstate->ss.ps.ps_ProjInfo); in ExecWindowAgg()
2251 WindowAggState *winstate; in ExecInitWindowAgg() local
2271 winstate = makeNode(WindowAggState); in ExecInitWindowAgg()
2272 winstate->ss.ps.plan = (Plan *) node; in ExecInitWindowAgg()
2273 winstate->ss.ps.state = estate; in ExecInitWindowAgg()
2274 winstate->ss.ps.ExecProcNode = ExecWindowAgg; in ExecInitWindowAgg()
2281 ExecAssignExprContext(estate, &winstate->ss.ps); in ExecInitWindowAgg()
2282 tmpcontext = winstate->ss.ps.ps_ExprContext; in ExecInitWindowAgg()
2283 winstate->tmpcontext = tmpcontext; in ExecInitWindowAgg()
2284 ExecAssignExprContext(estate, &winstate->ss.ps); in ExecInitWindowAgg()
2287 winstate->partcontext = in ExecInitWindowAgg()
2298 winstate->aggcontext = in ExecInitWindowAgg()
2308 winstate->ss.ps.qual = NULL; in ExecInitWindowAgg()
2314 outerPlanState(winstate) = ExecInitNode(outerPlan, estate, eflags); in ExecInitWindowAgg()
2320 ExecCreateScanSlotFromOuterPlan(estate, &winstate->ss, &TTSOpsMinimalTuple); in ExecInitWindowAgg()
2321 scanDesc = winstate->ss.ss_ScanTupleSlot->tts_tupleDescriptor; in ExecInitWindowAgg()
2324 winstate->ss.ps.outeropsset = true; in ExecInitWindowAgg()
2325 winstate->ss.ps.outerops = &TTSOpsMinimalTuple; in ExecInitWindowAgg()
2326 winstate->ss.ps.outeropsfixed = true; in ExecInitWindowAgg()
2331 winstate->first_part_slot = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2333 winstate->agg_row_slot = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2335 winstate->temp_slot_1 = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2337 winstate->temp_slot_2 = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2345 winstate->framehead_slot = winstate->frametail_slot = NULL; in ExecInitWindowAgg()
2352 winstate->framehead_slot = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2357 winstate->frametail_slot = ExecInitExtraTupleSlot(estate, scanDesc, in ExecInitWindowAgg()
2364 ExecInitResultTupleSlotTL(&winstate->ss.ps, &TTSOpsVirtual); in ExecInitWindowAgg()
2365 ExecAssignProjectionInfo(&winstate->ss.ps, NULL); in ExecInitWindowAgg()
2369 winstate->partEqfunction = in ExecInitWindowAgg()
2375 &winstate->ss.ps); in ExecInitWindowAgg()
2378 winstate->ordEqfunction = in ExecInitWindowAgg()
2384 &winstate->ss.ps); in ExecInitWindowAgg()
2389 numfuncs = winstate->numfuncs; in ExecInitWindowAgg()
2390 numaggs = winstate->numaggs; in ExecInitWindowAgg()
2391 econtext = winstate->ss.ps.ps_ExprContext; in ExecInitWindowAgg()
2400 winstate->perfunc = perfunc; in ExecInitWindowAgg()
2401 winstate->peragg = peragg; in ExecInitWindowAgg()
2405 foreach(l, winstate->funcs) in ExecInitWindowAgg()
2465 peraggstate = &winstate->peragg[aggno]; in ExecInitWindowAgg()
2466 initialize_peragg(winstate, wfunc, peraggstate); in ExecInitWindowAgg()
2473 winobj->winstate = winstate; in ExecInitWindowAgg()
2486 winstate->numfuncs = wfuncno + 1; in ExecInitWindowAgg()
2487 winstate->numaggs = aggno + 1; in ExecInitWindowAgg()
2490 if (winstate->numaggs > 0) in ExecInitWindowAgg()
2494 agg_winobj->winstate = winstate; in ExecInitWindowAgg()
2500 winstate->agg_winobj = agg_winobj; in ExecInitWindowAgg()
2504 winstate->frameOptions = frameOptions; in ExecInitWindowAgg()
2507 winstate->startOffset = ExecInitExpr((Expr *) node->startOffset, in ExecInitWindowAgg()
2508 (PlanState *) winstate); in ExecInitWindowAgg()
2509 winstate->endOffset = ExecInitExpr((Expr *) node->endOffset, in ExecInitWindowAgg()
2510 (PlanState *) winstate); in ExecInitWindowAgg()
2514 fmgr_info(node->startInRangeFunc, &winstate->startInRangeFunc); in ExecInitWindowAgg()
2516 fmgr_info(node->endInRangeFunc, &winstate->endInRangeFunc); in ExecInitWindowAgg()
2517 winstate->inRangeColl = node->inRangeColl; in ExecInitWindowAgg()
2518 winstate->inRangeAsc = node->inRangeAsc; in ExecInitWindowAgg()
2519 winstate->inRangeNullsFirst = node->inRangeNullsFirst; in ExecInitWindowAgg()
2521 winstate->all_first = true; in ExecInitWindowAgg()
2522 winstate->partition_spooled = false; in ExecInitWindowAgg()
2523 winstate->more_partitions = false; in ExecInitWindowAgg()
2525 return winstate; in ExecInitWindowAgg()
2617 initialize_peragg(WindowAggState *winstate, WindowFunc *wfunc, in initialize_peragg() argument
2671 else if (winstate->frameOptions & FRAMEOPTION_START_UNBOUNDED_PRECEDING) in initialize_peragg()
2874 peraggstate->aggcontext = winstate->aggcontext; in initialize_peragg()
2904 are_peers(WindowAggState *winstate, TupleTableSlot *slot1, in are_peers() argument
2907 WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan; in are_peers()
2908 ExprContext *econtext = winstate->tmpcontext; in are_peers()
2916 return ExecQualAndReset(winstate->ordEqfunction, econtext); in are_peers()
2929 WindowAggState *winstate = winobj->winstate; in window_gettupleslot() local
2940 spool_tuples(winstate, pos); in window_gettupleslot()
2942 if (pos >= winstate->spooled_rows) in window_gettupleslot()
2948 oldcontext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_query_memory); in window_gettupleslot()
2950 tuplestore_select_read_pointer(winstate->buffer, winobj->readptr); in window_gettupleslot()
2957 if (!tuplestore_skiptuples(winstate->buffer, in window_gettupleslot()
2965 if (!tuplestore_skiptuples(winstate->buffer, in window_gettupleslot()
2980 tuplestore_advance(winstate->buffer, true); in window_gettupleslot()
2990 if (!tuplestore_gettupleslot(winstate->buffer, false, true, slot)) in window_gettupleslot()
2996 if (!tuplestore_gettupleslot(winstate->buffer, true, true, slot)) in window_gettupleslot()
3032 MemoryContextAllocZero(winobj->winstate->partcontext, sz); in WinGetPartitionLocalMemory()
3045 return winobj->winstate->currentpos; in WinGetCurrentPosition()
3060 spool_tuples(winobj->winstate, -1); in WinGetPartitionRowCount()
3061 return winobj->winstate->spooled_rows; in WinGetPartitionRowCount()
3077 WindowAggState *winstate; in WinSetMarkPosition() local
3080 winstate = winobj->winstate; in WinSetMarkPosition()
3084 tuplestore_select_read_pointer(winstate->buffer, winobj->markptr); in WinSetMarkPosition()
3087 tuplestore_skiptuples(winstate->buffer, in WinSetMarkPosition()
3092 tuplestore_select_read_pointer(winstate->buffer, winobj->readptr); in WinSetMarkPosition()
3095 tuplestore_skiptuples(winstate->buffer, in WinSetMarkPosition()
3112 WindowAggState *winstate; in WinRowsArePeers() local
3119 winstate = winobj->winstate; in WinRowsArePeers()
3120 node = (WindowAgg *) winstate->ss.ps.plan; in WinRowsArePeers()
3130 slot1 = winstate->temp_slot_1; in WinRowsArePeers()
3131 slot2 = winstate->temp_slot_2; in WinRowsArePeers()
3140 res = are_peers(winstate, slot1, slot2); in WinRowsArePeers()
3171 WindowAggState *winstate; in WinGetFuncArgInPartition() local
3178 winstate = winobj->winstate; in WinGetFuncArgInPartition()
3179 econtext = winstate->ss.ps.ps_ExprContext; in WinGetFuncArgInPartition()
3180 slot = winstate->temp_slot_1; in WinGetFuncArgInPartition()
3185 abs_pos = winstate->currentpos + relpos; in WinGetFuncArgInPartition()
3191 spool_tuples(winstate, -1); in WinGetFuncArgInPartition()
3192 abs_pos = winstate->spooled_rows - 1 + relpos; in WinGetFuncArgInPartition()
3259 WindowAggState *winstate; in WinGetFuncArgInFrame() local
3266 winstate = winobj->winstate; in WinGetFuncArgInFrame()
3267 econtext = winstate->ss.ps.ps_ExprContext; in WinGetFuncArgInFrame()
3268 slot = winstate->temp_slot_1; in WinGetFuncArgInFrame()
3280 update_frameheadpos(winstate); in WinGetFuncArgInFrame()
3281 abs_pos = winstate->frameheadpos + relpos; in WinGetFuncArgInFrame()
3296 switch (winstate->frameOptions & FRAMEOPTION_EXCLUSION) in WinGetFuncArgInFrame()
3302 if (abs_pos >= winstate->currentpos && in WinGetFuncArgInFrame()
3303 winstate->currentpos >= winstate->frameheadpos) in WinGetFuncArgInFrame()
3307 update_grouptailpos(winstate); in WinGetFuncArgInFrame()
3308 if (abs_pos >= winstate->groupheadpos && in WinGetFuncArgInFrame()
3309 winstate->grouptailpos > winstate->frameheadpos) in WinGetFuncArgInFrame()
3311 int64 overlapstart = Max(winstate->groupheadpos, in WinGetFuncArgInFrame()
3312 winstate->frameheadpos); in WinGetFuncArgInFrame()
3314 abs_pos += winstate->grouptailpos - overlapstart; in WinGetFuncArgInFrame()
3318 update_grouptailpos(winstate); in WinGetFuncArgInFrame()
3319 if (abs_pos >= winstate->groupheadpos && in WinGetFuncArgInFrame()
3320 winstate->grouptailpos > winstate->frameheadpos) in WinGetFuncArgInFrame()
3322 int64 overlapstart = Max(winstate->groupheadpos, in WinGetFuncArgInFrame()
3323 winstate->frameheadpos); in WinGetFuncArgInFrame()
3326 abs_pos = winstate->currentpos; in WinGetFuncArgInFrame()
3328 abs_pos += winstate->grouptailpos - overlapstart - 1; in WinGetFuncArgInFrame()
3333 winstate->frameOptions); in WinGetFuncArgInFrame()
3341 update_frametailpos(winstate); in WinGetFuncArgInFrame()
3342 abs_pos = winstate->frametailpos - 1 + relpos; in WinGetFuncArgInFrame()
3353 switch (winstate->frameOptions & FRAMEOPTION_EXCLUSION) in WinGetFuncArgInFrame()
3360 if (abs_pos <= winstate->currentpos && in WinGetFuncArgInFrame()
3361 winstate->currentpos < winstate->frametailpos) in WinGetFuncArgInFrame()
3363 update_frameheadpos(winstate); in WinGetFuncArgInFrame()
3364 if (abs_pos < winstate->frameheadpos) in WinGetFuncArgInFrame()
3366 mark_pos = winstate->frameheadpos; in WinGetFuncArgInFrame()
3369 update_grouptailpos(winstate); in WinGetFuncArgInFrame()
3370 if (abs_pos < winstate->grouptailpos && in WinGetFuncArgInFrame()
3371 winstate->groupheadpos < winstate->frametailpos) in WinGetFuncArgInFrame()
3373 int64 overlapend = Min(winstate->grouptailpos, in WinGetFuncArgInFrame()
3374 winstate->frametailpos); in WinGetFuncArgInFrame()
3376 abs_pos -= overlapend - winstate->groupheadpos; in WinGetFuncArgInFrame()
3378 update_frameheadpos(winstate); in WinGetFuncArgInFrame()
3379 if (abs_pos < winstate->frameheadpos) in WinGetFuncArgInFrame()
3381 mark_pos = winstate->frameheadpos; in WinGetFuncArgInFrame()
3384 update_grouptailpos(winstate); in WinGetFuncArgInFrame()
3385 if (abs_pos < winstate->grouptailpos && in WinGetFuncArgInFrame()
3386 winstate->groupheadpos < winstate->frametailpos) in WinGetFuncArgInFrame()
3388 int64 overlapend = Min(winstate->grouptailpos, in WinGetFuncArgInFrame()
3389 winstate->frametailpos); in WinGetFuncArgInFrame()
3392 abs_pos = winstate->currentpos; in WinGetFuncArgInFrame()
3394 abs_pos -= overlapend - 1 - winstate->groupheadpos; in WinGetFuncArgInFrame()
3396 update_frameheadpos(winstate); in WinGetFuncArgInFrame()
3397 if (abs_pos < winstate->frameheadpos) in WinGetFuncArgInFrame()
3399 mark_pos = winstate->frameheadpos; in WinGetFuncArgInFrame()
3403 winstate->frameOptions); in WinGetFuncArgInFrame()
3418 if (row_is_in_frame(winstate, abs_pos, slot) <= 0) in WinGetFuncArgInFrame()
3452 WindowAggState *winstate; in WinGetFuncArgCurrent() local
3456 winstate = winobj->winstate; in WinGetFuncArgCurrent()
3458 econtext = winstate->ss.ps.ps_ExprContext; in WinGetFuncArgCurrent()
3460 econtext->ecxt_outertuple = winstate->ss.ss_ScanTupleSlot; in WinGetFuncArgCurrent()