From c4d1fab1046b2f1d5c60ac71c0e139f0bc5eabce Mon Sep 17 00:00:00 2001 From: Henson Choi Date: Sat, 2 May 2026 00:46:05 +0900 Subject: [PATCH 35/40] Use Max()/Min() macros for RPR extremum accumulation The RPR planner and executor accumulated extremum values (max backward reach, min forward offset, NFA state/context high-water marks, length statistics) with hand-written "if (X > current) current = X" idioms. Replace these with the existing Max()/Min() macros from c.h, matching the convention used elsewhere in the codebase. Six Max() sites and five Min() sites are converted across createplan.c (nav_offset_walker), nodeWindowAgg.c (eval_nav_max_offset_walker, eval_nav_first_offset_walker, ExecWindowAgg navmark update), and execRPR.c (NFA state/context allocators and length stats updater). Behavior is unchanged; all operands are simple struct members or local variables, so the macro's double-evaluation caveat does not apply. --- src/backend/executor/execRPR.c | 14 ++++++-------- src/backend/executor/nodeWindowAgg.c | 9 +++------ src/backend/optimizer/plan/createplan.c | 16 ++++------------ 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/backend/executor/execRPR.c b/src/backend/executor/execRPR.c index 7ba7b6fb672..84f09093b4b 100644 --- a/src/backend/executor/execRPR.c +++ b/src/backend/executor/execRPR.c @@ -1789,8 +1789,8 @@ nfa_state_alloc(WindowAggState *winstate) /* Update statistics */ winstate->nfaStatesActive++; winstate->nfaStatesTotalCreated++; - if (winstate->nfaStatesActive > winstate->nfaStatesMax) - winstate->nfaStatesMax = winstate->nfaStatesActive; + winstate->nfaStatesMax = Max(winstate->nfaStatesMax, + winstate->nfaStatesActive); return state; } @@ -2001,8 +2001,8 @@ nfa_context_alloc(WindowAggState *winstate) /* Update statistics */ winstate->nfaContextsActive++; winstate->nfaContextsTotalCreated++; - if (winstate->nfaContextsActive > winstate->nfaContextsMax) - winstate->nfaContextsMax = winstate->nfaContextsActive; + winstate->nfaContextsMax = Max(winstate->nfaContextsMax, + winstate->nfaContextsActive); return ctx; } @@ -2046,10 +2046,8 @@ nfa_update_length_stats(int64 count, NFALengthStats *stats, int64 newLen) } else { - if (newLen < stats->min) - stats->min = newLen; - if (newLen > stats->max) - stats->max = newLen; + stats->min = Min(stats->min, newLen); + stats->max = Max(stats->max, newLen); } stats->total += newLen; } diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c index 02f17e5472c..89e66c73735 100644 --- a/src/backend/executor/nodeWindowAgg.c +++ b/src/backend/executor/nodeWindowAgg.c @@ -2536,8 +2536,7 @@ ExecWindowAgg(PlanState *pstate) + winstate->navFirstOffset; else firstreach = 0; - if (firstreach < navmarkpos) - navmarkpos = firstreach; + navmarkpos = Min(navmarkpos, firstreach); } if (navmarkpos > winstate->nav_winobj->markpos) @@ -4007,8 +4006,7 @@ eval_nav_max_offset_walker(Node *node, void *ctx) reach = (inner > outer) ? inner - outer : 0; } - if (reach > context->maxOffset) - context->maxOffset = reach; + context->maxOffset = Max(context->maxOffset, reach); return false; /* don't walk into children */ } @@ -4118,8 +4116,7 @@ eval_nav_first_offset_walker(Node *node, void *ctx) } } - if (combined < context->minOffset) - context->minOffset = combined; + context->minOffset = Min(context->minOffset, combined); return false; } diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 50668f3b7ab..d7adf17a242 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -2551,10 +2551,7 @@ nav_offset_walker(Node *node, void *ctx) int64 offset; if (extract_const_offset(nav->offset_arg, 1, &offset)) - { - if (offset > context->maxOffset) - context->maxOffset = offset; - } + context->maxOffset = Max(context->maxOffset, offset); else context->maxNeedsEval = true; } @@ -2573,10 +2570,7 @@ nav_offset_walker(Node *node, void *ctx) int64 offset; if (extract_const_offset(nav->offset_arg, 0, &offset)) - { - if (offset < context->firstOffset) - context->firstOffset = offset; - } + context->firstOffset = Min(context->firstOffset, offset); else context->firstNeedsEval = true; } @@ -2610,8 +2604,7 @@ nav_offset_walker(Node *node, void *ctx) else combined = (inner > outer) ? inner - outer : 0; - if (combined > context->maxOffset) - context->maxOffset = combined; + context->maxOffset = Max(context->maxOffset, combined); } else context->maxNeedsEval = true; @@ -2659,8 +2652,7 @@ nav_offset_walker(Node *node, void *ctx) combined = INT64_MAX; } - if (combined < context->firstOffset) - context->firstOffset = combined; + context->firstOffset = Min(context->firstOffset, combined); } else context->firstNeedsEval = true; -- 2.50.1 (Apple Git-155)