← Back to Overview

src/backend/optimizer/plan/createplan.c

Coverage: 34/34 lines (100.0%)
Total Lines
34
modified
Covered
34
100.0%
Uncovered
0
0.0%
키보드 네비게이션
create_windowagg_plan() lines 2468-2583
Modified Lines Coverage: 31/31 lines (100.0%)
LineHitsSourceCommit
2468 - create_windowagg_plan(PlannerInfo *root, WindowAggPath *best_path) -
2469 - { -
2470 - WindowAgg *plan; -
2471 - WindowClause *wc = best_path->winclause; -
2472 - int numPart = list_length(wc->partitionClause); -
2473 - int numOrder = list_length(wc->orderClause); -
2474 - Plan *subplan; -
2475 - List *tlist; -
2476 - int partNumCols; -
2477 - AttrNumber *partColIdx; -
2478 - Oid *partOperators; -
2479 - Oid *partCollations; -
2480 - int ordNumCols; -
2481 - AttrNumber *ordColIdx; -
2482 - Oid *ordOperators; -
2483 - Oid *ordCollations; -
2484 - ListCell *lc; -
2485 - -
2486 - /* -
2487 - * Choice of tlist here is motivated by the fact that WindowAgg will be -
2488 - * storing the input rows of window frames in a tuplestore; it therefore -
2489 - * behooves us to request a small tlist to avoid wasting space. We do of -
2490 - * course need grouping columns to be available. -
2491 - */ -
2492 - subplan = create_plan_recurse(root, best_path->subpath, -
2493 - CP_LABEL_TLIST | CP_SMALL_TLIST); -
2494 - -
2495 - tlist = build_path_tlist(root, &best_path->path); -
2496 - -
2497 - /* -
2498 - * Convert SortGroupClause lists into arrays of attr indexes and equality -
2499 - * operators, as wanted by executor. -
2500 - */ -
2501 - partColIdx = palloc_array(AttrNumber, numPart); -
2502 - partOperators = palloc_array(Oid, numPart); -
2503 - partCollations = palloc_array(Oid, numPart); -
2504 - -
2505 - partNumCols = 0; -
2506 - foreach(lc, wc->partitionClause) -
2507 - { -
2508 - SortGroupClause *sgc = (SortGroupClause *) lfirst(lc); -
2509 - TargetEntry *tle = get_sortgroupclause_tle(sgc, subplan->targetlist); -
2510 - -
2511 - Assert(OidIsValid(sgc->eqop)); -
2512 - partColIdx[partNumCols] = tle->resno; -
2513 - partOperators[partNumCols] = sgc->eqop; -
2514 - partCollations[partNumCols] = exprCollation((Node *) tle->expr); -
2515 - partNumCols++; -
2516 - } -
2517 - -
2518 - ordColIdx = palloc_array(AttrNumber, numOrder); -
2519 - ordOperators = palloc_array(Oid, numOrder); -
2520 - ordCollations = palloc_array(Oid, numOrder); -
2521 - -
2522 - ordNumCols = 0; -
2523 - foreach(lc, wc->orderClause) -
2524 - { -
2525 - SortGroupClause *sgc = (SortGroupClause *) lfirst(lc); -
2526 - TargetEntry *tle = get_sortgroupclause_tle(sgc, subplan->targetlist); -
2527 - -
2528 - Assert(OidIsValid(sgc->eqop)); -
2529 - ordColIdx[ordNumCols] = tle->resno; -
2530 - ordOperators[ordNumCols] = sgc->eqop; -
2531 - ordCollations[ordNumCols] = exprCollation((Node *) tle->expr); -
2532 - ordNumCols++; -
2533 - } -
2534 - -
2535 - /* Build RPR pattern and filter defineClause */ ba2f29fRow pattern recognition patch (planner).
2536 - { ba2f29fRow pattern recognition patch (planner).
2537 462 List *defineVariableList = NIL; ba2f29fRow pattern recognition patch (planner).
2538 462 List *filteredDefineClause = NIL; ba2f29fRow pattern recognition patch (planner).
2539 462 RPRPattern *compiledPattern = NULL; ba2f29fRow pattern recognition patch (planner).
2540 - ba2f29fRow pattern recognition patch (planner).
2541 462 if (wc->rpPattern) ba2f29fRow pattern recognition patch (planner).
2542 - { ba2f29fRow pattern recognition patch (planner).
2543 462 List *patternVars; ba2f29fRow pattern recognition patch (planner).
2544 - ba2f29fRow pattern recognition patch (planner).
2545 - /* ba2f29fRow pattern recognition patch (planner).
2546 - * Filter defineClause to include only variables used in PATTERN. ba2f29fRow pattern recognition patch (planner).
2547 - * This eliminates unnecessary DEFINE evaluations at runtime. ba2f29fRow pattern recognition patch (planner).
2548 - */ ba2f29fRow pattern recognition patch (planner).
2549 462 patternVars = collectPatternVariables(wc->rpPattern); ba2f29fRow pattern recognition patch (planner).
2550 924 filteredDefineClause = filterDefineClause(wc->defineClause, ba2f29fRow pattern recognition patch (planner).
2551 462 patternVars, ba2f29fRow pattern recognition patch (planner).
2552 - &defineVariableList); ba2f29fRow pattern recognition patch (planner).
2553 - ba2f29fRow pattern recognition patch (planner).
2554 924 compiledPattern = buildRPRPattern(wc->rpPattern, ba2f29fRow pattern recognition patch (planner).
2555 462 defineVariableList, ba2f29fRow pattern recognition patch (planner).
2556 462 wc->rpSkipTo, ba2f29fRow pattern recognition patch (planner).
2557 462 wc->frameOptions); ba2f29fRow pattern recognition patch (planner).
2558 462 } ba2f29fRow pattern recognition patch (planner).
2559 - ba2f29fRow pattern recognition patch (planner).
2560 - /* And finally we can make the WindowAgg node */ ba2f29fRow pattern recognition patch (planner).
2561 924 plan = make_windowagg(tlist, ba2f29fRow pattern recognition patch (planner).
2562 462 wc, ba2f29fRow pattern recognition patch (planner).
2563 462 partNumCols, ba2f29fRow pattern recognition patch (planner).
2564 462 partColIdx, ba2f29fRow pattern recognition patch (planner).
2565 462 partOperators, ba2f29fRow pattern recognition patch (planner).
2566 462 partCollations, ba2f29fRow pattern recognition patch (planner).
2567 462 ordNumCols, ba2f29fRow pattern recognition patch (planner).
2568 462 ordColIdx, ba2f29fRow pattern recognition patch (planner).
2569 462 ordOperators, ba2f29fRow pattern recognition patch (planner).
2570 462 ordCollations, ba2f29fRow pattern recognition patch (planner).
2571 462 best_path->runCondition, ba2f29fRow pattern recognition patch (planner).
2572 462 wc->rpSkipTo, ba2f29fRow pattern recognition patch (planner).
2573 462 compiledPattern, ba2f29fRow pattern recognition patch (planner).
2574 462 filteredDefineClause, ba2f29fRow pattern recognition patch (planner).
2575 462 best_path->qual, ba2f29fRow pattern recognition patch (planner).
2576 462 best_path->topwindow, ba2f29fRow pattern recognition patch (planner).
2577 462 subplan); ba2f29fRow pattern recognition patch (planner).
2578 462 } ba2f29fRow pattern recognition patch (planner).
2579 - -
2580 - copy_generic_path_info(&plan->plan, (Path *) best_path); -
2581 - -
2582 - return plan; -
2583 - } -
make_windowagg() lines 6646-6692
Modified Lines Coverage: 3/3 lines (100.0%)
LineHitsSourceCommit
6646 - make_windowagg(List *tlist, WindowClause *wc, -
6647 - int partNumCols, AttrNumber *partColIdx, Oid *partOperators, Oid *partCollations, -
6648 - int ordNumCols, AttrNumber *ordColIdx, Oid *ordOperators, Oid *ordCollations, -
6649 - List *runCondition, RPSkipTo rpSkipTo, ba2f29fRow pattern recognition patch (planner).
6650 - RPRPattern *compiledPattern, ba2f29fRow pattern recognition patch (planner).
6651 - List *defineClause, ba2f29fRow pattern recognition patch (planner).
6652 - List *qual, bool topWindow, Plan *lefttree) ba2f29fRow pattern recognition patch (planner).
6653 - { -
6654 - WindowAgg *node = makeNode(WindowAgg); -
6655 - Plan *plan = &node->plan; -
6656 - -
6657 - node->winname = wc->name; -
6658 - node->winref = wc->winref; -
6659 - node->partNumCols = partNumCols; -
6660 - node->partColIdx = partColIdx; -
6661 - node->partOperators = partOperators; -
6662 - node->partCollations = partCollations; -
6663 - node->ordNumCols = ordNumCols; -
6664 - node->ordColIdx = ordColIdx; -
6665 - node->ordOperators = ordOperators; -
6666 - node->ordCollations = ordCollations; -
6667 - node->frameOptions = wc->frameOptions; -
6668 - node->startOffset = wc->startOffset; -
6669 - node->endOffset = wc->endOffset; -
6670 - node->runCondition = runCondition; -
6671 - /* a duplicate of the above for EXPLAIN */ -
6672 - node->runConditionOrig = runCondition; -
6673 - node->startInRangeFunc = wc->startInRangeFunc; -
6674 - node->endInRangeFunc = wc->endInRangeFunc; -
6675 - node->inRangeColl = wc->inRangeColl; -
6676 - node->inRangeAsc = wc->inRangeAsc; -
6677 - node->inRangeNullsFirst = wc->inRangeNullsFirst; -
6678 - node->topWindow = topWindow; -
6679 461 node->rpSkipTo = rpSkipTo; ba2f29fRow pattern recognition patch (planner).
6680 - ba2f29fRow pattern recognition patch (planner).
6681 - /* Store compiled pattern for NFA execution */ ba2f29fRow pattern recognition patch (planner).
6682 461 node->rpPattern = compiledPattern; ba2f29fRow pattern recognition patch (planner).
6683 - ba2f29fRow pattern recognition patch (planner).
6684 461 node->defineClause = defineClause; ba2f29fRow pattern recognition patch (planner).
6685 - -
6686 - plan->targetlist = tlist; -
6687 - plan->lefttree = lefttree; -
6688 - plan->righttree = NULL; -
6689 - plan->qual = qual; -
6690 - -
6691 - return node; -
6692 - } -