nocfbot-0031-Rename-the-AST-level-prefix-suffix-rewrite-from-a.txt
text/plain
Filename: nocfbot-0031-Rename-the-AST-level-prefix-suffix-rewrite-from-a.txt
Type: text/plain
Part: 30
Message:
Re: Row pattern recognition
From d676ea7256f61b6693438e4d2e39a6d9a45d4942 Mon Sep 17 00:00:00 2001
From: Henson Choi <assam258@gmail.com>
Date: Mon, 1 Jun 2026 12:08:50 +0900
Subject: [PATCH 31/38] Rename the AST-level prefix/suffix rewrite from
"absorption" to "merging"
"absorption" now refers only to the runtime context-equivalence collapse.
The Phase-1 AST rewrite in mergeGroupPrefixSuffix is renamed "prefix/suffix
merging" to match the sibling "consecutive variable / group / ALT merging"
rewrites. Per the naming discussion with Tatsuo Ishii.
---
src/backend/executor/README.rpr | 2 +-
src/backend/optimizer/plan/rpr.c | 17 ++++++++---------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/backend/executor/README.rpr b/src/backend/executor/README.rpr
index 26c1a1ea236..449bf051153 100644
--- a/src/backend/executor/README.rpr
+++ b/src/backend/executor/README.rpr
@@ -221,7 +221,7 @@ applied:
(d) Consecutive ALT merging: Merge repeated identical ALT nodes
(A | B) (A | B) (A | B) -> (A | B){3}
- (e) Prefix/suffix absorption: Absorb identical sequences before/after
+ (e) Prefix/suffix merging: Merge identical sequences before/after
a group
A B (A B)+ -> (A B){2,INF}
diff --git a/src/backend/optimizer/plan/rpr.c b/src/backend/optimizer/plan/rpr.c
index c65681463b3..2a1d665c7ee 100644
--- a/src/backend/optimizer/plan/rpr.c
+++ b/src/backend/optimizer/plan/rpr.c
@@ -480,7 +480,7 @@ mergeConsecutiveAlts(List *children)
* Merge sequence prefix/suffix into GROUP with matching children.
*
* When a GROUP's children appear as a prefix before and/or suffix after
- * the GROUP in a SEQ, absorb them by incrementing the GROUP's quantifier.
+ * the GROUP in a SEQ, merge them by incrementing the GROUP's quantifier.
* This runs iteratively: A B A B (A B)+ A B -> (A B){5,}.
*
* Algorithm:
@@ -503,15 +503,15 @@ mergeGroupPrefixSuffix(List *children)
List *result = NIL;
int numChildren = list_length(children);
int i;
- int skipUntil = -1; /* skip suffix elements already absorbed */
+ int skipUntil = -1; /* skip suffix elements already merged */
for (i = 0; i < numChildren; i++)
{
RPRPatternNode *child = (RPRPatternNode *) list_nth(children, i);
/*
- * The suffix absorption logic below adjusts i to skip absorbed
- * elements, ensuring we never revisit them. Verify this invariant.
+ * The suffix merge logic below adjusts i to skip merged elements,
+ * ensuring we never revisit them. Verify this invariant.
*/
Assert(i >= skipUntil);
@@ -543,7 +543,7 @@ mergeGroupPrefixSuffix(List *children)
groupChildCount = list_length(groupContent);
/*
- * PREFIX MERGE: Check if preceding elements match. Keep absorbing
+ * PREFIX MERGE: Check if preceding elements match. Keep merging
* as long as we have matching prefixes.
*/
while (prefixLen >= groupChildCount && groupChildCount > 0)
@@ -592,7 +592,7 @@ mergeGroupPrefixSuffix(List *children)
}
/*
- * SUFFIX MERGE: Check if following elements match. Keep absorbing
+ * SUFFIX MERGE: Check if following elements match. Keep merging
* as long as we have matching suffixes.
*/
while (i + groupChildCount < numChildren && groupChildCount > 0)
@@ -623,7 +623,7 @@ mergeGroupPrefixSuffix(List *children)
child->max < RPR_QUANTITY_INF - 1))
{
/*
- * Match! Absorb suffix by incrementing quantifier and
+ * Match! Merge suffix by incrementing quantifier and
* skipping.
*/
child->min += 1;
@@ -632,8 +632,7 @@ mergeGroupPrefixSuffix(List *children)
skipUntil = suffixStart + groupChildCount;
/*
- * Update i to continue suffix check after absorbed
- * elements
+ * Update i to continue suffix check after merged elements
*/
i = skipUntil - 1;
}
--
2.50.1 (Apple Git-155)