nocfbot-0061-Assert-that-row-pattern-nesting-depth-never-alias.txt
text/plain
Filename: nocfbot-0061-Assert-that-row-pattern-nesting-depth-never-alias.txt
Type: text/plain
Part: 60
Message:
Re: Row pattern recognition
From 8d43d10030a6fad989e2ed8bbde1d6b036d348ce Mon Sep 17 00:00:00 2001
From: Henson Choi <assam258@gmail.com>
Date: Mon, 8 Jun 2026 12:22:21 +0900
Subject: [PATCH 61/68] Assert that row pattern nesting depth never aliases the
RPR_DEPTH_NONE sentinel
allocateRPRPattern stores maxDepth + 1, and scanRPRPatternRecursive rejects
nesting at or above RPR_DEPTH_MAX, so the stored value stays <= RPR_DEPTH_MAX
and never reaches the RPR_DEPTH_NONE sentinel (UINT8_MAX). Assert that bound
so raising RPR_DEPTH_MAX or the depth limit trips immediately. Also note in
compute_define_metadata that its default offset (1) serves only PREV; the
guarded LAST sub-case never uses it.
---
src/backend/optimizer/plan/createplan.c | 3 +++
src/backend/optimizer/plan/rpr.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index c8ecaeea7cf..c5b0857ff20 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -2581,6 +2581,9 @@ visit_nav_plan(NavTraversal *t, RPRNavExpr *nav)
{
int64 offset;
+ /*
+ * default 1 is for PREV; the guarded LAST sub-case never uses it.
+ */
if (extract_const_offset(nav->offset_arg, 1, &offset))
context->maxOffset = Max(context->maxOffset, offset);
else
diff --git a/src/backend/optimizer/plan/rpr.c b/src/backend/optimizer/plan/rpr.c
index 43114088c3f..e7276c42ca6 100644
--- a/src/backend/optimizer/plan/rpr.c
+++ b/src/backend/optimizer/plan/rpr.c
@@ -1157,6 +1157,9 @@ allocateRPRPattern(int numVars, int numElements, RPRDepth maxDepth,
result = makeNode(RPRPattern);
result->numVars = numVars;
+
+ /* depth < RPR_DEPTH_MAX, so maxDepth+1 never aliases RPR_DEPTH_NONE. */
+ Assert(maxDepth < RPR_DEPTH_MAX);
result->maxDepth = maxDepth + 1; /* +1: depth is 0-based */
result->numElements = numElements;
--
2.50.1 (Apple Git-155)