nocfbot-0007-ereport-outer-parens.txt

text/plain

Filename: nocfbot-0007-ereport-outer-parens.txt
Type: text/plain
Part: 6
Message: Re: Row pattern recognition
From 37cb8a6e9d36ac98b7cd10bb81a9a4f70720d016 Mon Sep 17 00:00:00 2001
From: Henson Choi <assam258@gmail.com>
Date: Tue, 5 May 2026 17:27:51 +0900
Subject: [PATCH 07/11] Remove optional outer parentheses from ereport() calls
 in RPR files

Per project coding style, the outer parentheses wrapping errcode/
errmsg/etc. arguments in ereport() are optional and should be omitted.
Applies to parse_rpr.c, optimizer/plan/rpr.c, and gram.y.
---
 src/backend/optimizer/plan/rpr.c |  16 ++--
 src/backend/parser/gram.y        |  72 ++++++++--------
 src/backend/parser/parse_rpr.c   | 140 +++++++++++++++----------------
 3 files changed, 114 insertions(+), 114 deletions(-)

diff --git a/src/backend/optimizer/plan/rpr.c b/src/backend/optimizer/plan/rpr.c
index a817eb4a63f..ed8b6c3414c 100644
--- a/src/backend/optimizer/plan/rpr.c
+++ b/src/backend/optimizer/plan/rpr.c
@@ -1027,10 +1027,10 @@ scanRPRPatternRecursive(RPRPatternNode *node, char **varNames, int *numVars,
 	/* Check recursion depth limit before overflow occurs */
 	if (depth >= RPR_DEPTH_MAX)
 		ereport(ERROR,
-				(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
-				 errmsg("pattern nesting too deep"),
-				 errdetail("Pattern nesting depth %d exceeds maximum %d.",
-						   depth, RPR_DEPTH_MAX - 1)));
+				errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+				errmsg("pattern nesting too deep"),
+				errdetail("Pattern nesting depth %d exceeds maximum %d.",
+						  depth, RPR_DEPTH_MAX - 1));
 
 	/* Track maximum depth */
 	if (depth > *maxDepth)
@@ -1120,10 +1120,10 @@ scanRPRPattern(RPRPatternNode *node, char **varNames, int *numVars,
 
 	if (*numElements > RPR_ELEMIDX_MAX)
 		ereport(ERROR,
-				(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
-				 errmsg("pattern too complex"),
-				 errdetail("Pattern has %d elements, maximum is %d.",
-						   *numElements, RPR_ELEMIDX_MAX)));
+				errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+				errmsg("pattern too complex"),
+				errdetail("Pattern has %d elements, maximum is %d.",
+						  *numElements, RPR_ELEMIDX_MAX));
 }
 
 /*
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index f3cedfbbb18..aa587e6aced 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -17610,10 +17610,10 @@ opt_row_pattern_initial_or_seek:
 			| SEEK
 				{
 					ereport(ERROR,
-							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-							 errmsg("SEEK is not supported"),
-							 errhint("Use INITIAL instead."),
-							 parser_errposition(@1)));
+							errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+							errmsg("SEEK is not supported"),
+							errhint("Use INITIAL instead."),
+							parser_errposition(@1));
 				}
 			| /*EMPTY*/		{ $$ = true; }
 		;
@@ -17740,40 +17740,40 @@ row_pattern_quantifier_opt:
 						$$ = (Node *) makeRPRQuantifier(0, 1, @1 + 1, @1, yyscanner);
 					else
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("unsupported quantifier \"%s\"", $1),
-								 errhint("Valid quantifiers are: *, +, ?, *?, +?, ??, {n}, {n,}, {,m}, {n,m} and their reluctant versions."),
-								 parser_errposition(@1)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("unsupported quantifier \"%s\"", $1),
+								errhint("Valid quantifiers are: *, +, ?, *?, +?, ??, {n}, {n,}, {,m}, {n,m} and their reluctant versions."),
+								parser_errposition(@1));
 				}
 			/* RELUCTANT quantifiers (when lexer separates tokens) */
 			| '*' Op
 				{
 					if (strcmp($2, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after \"*\" quantifier"),
-								 errhint("Did you mean \"*?\" for reluctant quantifier?"),
-								 parser_errposition(@2)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after \"*\" quantifier"),
+								errhint("Did you mean \"*?\" for reluctant quantifier?"),
+								parser_errposition(@2));
 					$$ = (Node *) makeRPRQuantifier(0, INT_MAX, @2, @1, yyscanner);
 				}
 			| '+' Op
 				{
 					if (strcmp($2, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after \"+\" quantifier"),
-								 errhint("Did you mean \"+?\" for reluctant quantifier?"),
-								 parser_errposition(@2)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after \"+\" quantifier"),
+								errhint("Did you mean \"+?\" for reluctant quantifier?"),
+								parser_errposition(@2));
 					$$ = (Node *) makeRPRQuantifier(1, INT_MAX, @2, @1, yyscanner);
 				}
 			| Op Op
 				{
 					if (strcmp($1, "?") != 0 || strcmp($2, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid quantifier combination"),
-								 errhint("Did you mean \"??\" for reluctant quantifier?"),
-								 parser_errposition(@1)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid quantifier combination"),
+								errhint("Did you mean \"??\" for reluctant quantifier?"),
+								parser_errposition(@1));
 					$$ = (Node *) makeRPRQuantifier(0, 1, @2, @1, yyscanner);
 				}
 			/* {n}, {n,}, {,m}, {n,m} quantifiers */
@@ -17823,10 +17823,10 @@ row_pattern_quantifier_opt:
 				{
 					if (strcmp($4, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after range quantifier"),
-								 errhint("Only \"?\" is allowed after {n} to make it reluctant."),
-								 parser_errposition(@4)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after range quantifier"),
+								errhint("Only \"?\" is allowed after {n} to make it reluctant."),
+								parser_errposition(@4));
 					if ($2 <= 0 || $2 >= INT_MAX)
 						ereport(ERROR,
 								errcode(ERRCODE_SYNTAX_ERROR),
@@ -17838,10 +17838,10 @@ row_pattern_quantifier_opt:
 				{
 					if (strcmp($5, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after range quantifier"),
-								 errhint("Only \"?\" is allowed after {n,} or {,m} to make it reluctant."),
-								 parser_errposition(@5)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after range quantifier"),
+								errhint("Only \"?\" is allowed after {n,} or {,m} to make it reluctant."),
+								parser_errposition(@5));
 					if ($2 < 0 || $2 >= INT_MAX)
 						ereport(ERROR,
 								errcode(ERRCODE_SYNTAX_ERROR),
@@ -17853,10 +17853,10 @@ row_pattern_quantifier_opt:
 				{
 					if (strcmp($5, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after range quantifier"),
-								 errhint("Only \"?\" is allowed after {n,} or {,m} to make it reluctant."),
-								 parser_errposition(@5)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after range quantifier"),
+								errhint("Only \"?\" is allowed after {n,} or {,m} to make it reluctant."),
+								parser_errposition(@5));
 					if ($3 <= 0 || $3 >= INT_MAX)
 						ereport(ERROR,
 								errcode(ERRCODE_SYNTAX_ERROR),
@@ -17868,10 +17868,10 @@ row_pattern_quantifier_opt:
 				{
 					if (strcmp($6, "?") != 0)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("invalid token after range quantifier"),
-								 errhint("Only \"?\" is allowed after {n,m} to make it reluctant."),
-								 parser_errposition(@6)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("invalid token after range quantifier"),
+								errhint("Only \"?\" is allowed after {n,m} to make it reluctant."),
+								parser_errposition(@6));
 					if ($2 < 0 || $4 <= 0 || $2 >= INT_MAX || $4 >= INT_MAX)
 						ereport(ERROR,
 								errcode(ERRCODE_SYNTAX_ERROR),
diff --git a/src/backend/parser/parse_rpr.c b/src/backend/parser/parse_rpr.c
index 2c6fccebd47..bba887f17ce 100644
--- a/src/backend/parser/parse_rpr.c
+++ b/src/backend/parser/parse_rpr.c
@@ -95,20 +95,20 @@ transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef,
 	/* Frame type must be "ROW" */
 	if (wc->frameOptions & FRAMEOPTION_GROUPS)
 		ereport(ERROR,
-				(errcode(ERRCODE_WINDOWING_ERROR),
-				 errmsg("cannot use FRAME option GROUPS with row pattern recognition"),
-				 errhint("Use ROWS instead."),
-				 parser_errposition(pstate,
-									windef->frameLocation >= 0 ?
-									windef->frameLocation : windef->location)));
+				errcode(ERRCODE_WINDOWING_ERROR),
+				errmsg("cannot use FRAME option GROUPS with row pattern recognition"),
+				errhint("Use ROWS instead."),
+				parser_errposition(pstate,
+								   windef->frameLocation >= 0 ?
+								   windef->frameLocation : windef->location));
 	if (wc->frameOptions & FRAMEOPTION_RANGE)
 		ereport(ERROR,
-				(errcode(ERRCODE_WINDOWING_ERROR),
-				 errmsg("cannot use FRAME option RANGE with row pattern recognition"),
-				 errhint("Use ROWS instead."),
-				 parser_errposition(pstate,
-									windef->frameLocation >= 0 ?
-									windef->frameLocation : windef->location)));
+				errcode(ERRCODE_WINDOWING_ERROR),
+				errmsg("cannot use FRAME option RANGE with row pattern recognition"),
+				errhint("Use ROWS instead."),
+				parser_errposition(pstate,
+								   windef->frameLocation >= 0 ?
+								   windef->frameLocation : windef->location));
 
 	/* Frame must start at current row */
 	if ((wc->frameOptions & FRAMEOPTION_START_CURRENT_ROW) == 0)
@@ -130,11 +130,11 @@ transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef,
 			   (wc->frameOptions & FRAMEOPTION_START_OFFSET_FOLLOWING));
 
 		ereport(ERROR,
-				(errcode(ERRCODE_WINDOWING_ERROR),
-				 errmsg("FRAME must start at CURRENT ROW when using row pattern recognition"),
-				 errdetail("Current frame starts with %s.", startBound),
-				 errhint("Use: %s BETWEEN CURRENT ROW AND ...", frameType),
-				 parser_errposition(pstate, windef->frameLocation >= 0 ? windef->frameLocation : windef->location)));
+				errcode(ERRCODE_WINDOWING_ERROR),
+				errmsg("FRAME must start at CURRENT ROW when using row pattern recognition"),
+				errdetail("Current frame starts with %s.", startBound),
+				errhint("Use: %s BETWEEN CURRENT ROW AND ...", frameType),
+				parser_errposition(pstate, windef->frameLocation >= 0 ? windef->frameLocation : windef->location));
 	}
 
 	/* EXCLUDE options are not permitted */
@@ -156,11 +156,11 @@ transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef,
 			   (wc->frameOptions & FRAMEOPTION_EXCLUDE_TIES));
 
 		ereport(ERROR,
-				(errcode(ERRCODE_WINDOWING_ERROR),
-				 errmsg("cannot use EXCLUDE options with row pattern recognition"),
-				 errdetail("Frame definition includes %s.", excludeType),
-				 errhint("Remove the EXCLUDE clause from the window definition."),
-				 parser_errposition(pstate, windef->excludeLocation >= 0 ? windef->excludeLocation : windef->location)));
+				errcode(ERRCODE_WINDOWING_ERROR),
+				errmsg("cannot use EXCLUDE options with row pattern recognition"),
+				errdetail("Frame definition includes %s.", excludeType),
+				errhint("Remove the EXCLUDE clause from the window definition."),
+				parser_errposition(pstate, windef->excludeLocation >= 0 ? windef->excludeLocation : windef->location));
 	}
 
 	/* Transform AFTER MATCH SKIP TO clause */
@@ -220,11 +220,11 @@ validateRPRPatternVarCount(ParseState *pstate, RPRPatternNode *node,
 					/* Check against RPR_VARID_MAX before adding */
 					if (list_length(*varNames) >= RPR_VARID_MAX)
 						ereport(ERROR,
-								(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
-								 errmsg("too many pattern variables"),
-								 errdetail("Maximum is %d.", RPR_VARID_MAX),
-								 parser_errposition(pstate,
-													exprLocation((Node *) node))));
+								errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+								errmsg("too many pattern variables"),
+								errdetail("Maximum is %d.", RPR_VARID_MAX),
+								parser_errposition(pstate,
+												   exprLocation((Node *) node)));
 
 					*varNames = lappend(*varNames, makeString(pstrdup(node->varName)));
 				}
@@ -267,10 +267,10 @@ validateRPRPatternVarCount(ParseState *pstate, RPRPatternNode *node,
 			}
 			if (!found)
 				ereport(ERROR,
-						(errcode(ERRCODE_SYNTAX_ERROR),
-						 errmsg("DEFINE variable \"%s\" is not used in PATTERN",
-								rt->name),
-						 parser_errposition(pstate, rt->location)));
+						errcode(ERRCODE_SYNTAX_ERROR),
+						errmsg("DEFINE variable \"%s\" is not used in PATTERN",
+							   rt->name),
+						parser_errposition(pstate, rt->location));
 		}
 	}
 }
@@ -347,10 +347,10 @@ transformDefineClause(ParseState *pstate, WindowClause *wc, WindowDef *windef,
 
 			if (!strcmp(n, name))
 				ereport(ERROR,
-						(errcode(ERRCODE_SYNTAX_ERROR),
-						 errmsg("DEFINE variable \"%s\" appears more than once",
-								name),
-						 parser_errposition(pstate, exprLocation((Node *) r))));
+						errcode(ERRCODE_SYNTAX_ERROR),
+						errmsg("DEFINE variable \"%s\" appears more than once",
+							   name),
+						parser_errposition(pstate, exprLocation((Node *) r)));
 		}
 
 		restargets = lappend(restargets, restarget);
@@ -529,14 +529,14 @@ define_walker(Node *node, void *context)
 	 */
 	if (check_functions_in_node(node, nav_volatile_func_checker, NULL))
 		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-				 errmsg("volatile functions are not allowed in DEFINE clause"),
-				 parser_errposition(ctx->pstate, exprLocation(node))));
+				errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				errmsg("volatile functions are not allowed in DEFINE clause"),
+				parser_errposition(ctx->pstate, exprLocation(node)));
 	if (IsA(node, NextValueExpr))
 		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-				 errmsg("sequence operations are not allowed in DEFINE clause"),
-				 parser_errposition(ctx->pstate, exprLocation(node))));
+				errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				errmsg("sequence operations are not allowed in DEFINE clause"),
+				parser_errposition(ctx->pstate, exprLocation(node)));
 
 	/* Var sighting feeds the column-ref rule for the enclosing nav scope. */
 	if (IsA(node, Var) &&
@@ -600,17 +600,17 @@ define_walker(Node *node, void *context)
 					/* Reject triple-or-deeper nesting */
 					if (ctx->nav_count > 1)
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("cannot nest row pattern navigation more than two levels deep"),
-								 errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
-								 parser_errposition(ctx->pstate, nav->location)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("cannot nest row pattern navigation more than two levels deep"),
+								errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
+								parser_errposition(ctx->pstate, nav->location));
 
 					if (!IsA(nav->arg, RPRNavExpr))
 						ereport(ERROR,
-								(errcode(ERRCODE_SYNTAX_ERROR),
-								 errmsg("row pattern navigation operation must be a direct argument of the outer navigation"),
-								 errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
-								 parser_errposition(ctx->pstate, nav->location)));
+								errcode(ERRCODE_SYNTAX_ERROR),
+								errmsg("row pattern navigation operation must be a direct argument of the outer navigation"),
+								errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
+								parser_errposition(ctx->pstate, nav->location));
 
 					inner = (RPRNavExpr *) nav->arg;
 
@@ -630,29 +630,29 @@ define_walker(Node *node, void *context)
 				}
 				else if (!outer_phys && inner_phys)
 					ereport(ERROR,
-							(errcode(ERRCODE_SYNTAX_ERROR),
-							 errmsg("FIRST and LAST cannot contain PREV or NEXT"),
-							 errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
-							 parser_errposition(ctx->pstate, nav->location)));
+							errcode(ERRCODE_SYNTAX_ERROR),
+							errmsg("FIRST and LAST cannot contain PREV or NEXT"),
+							errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
+							parser_errposition(ctx->pstate, nav->location));
 				else if (outer_phys && inner_phys)
 					ereport(ERROR,
-							(errcode(ERRCODE_SYNTAX_ERROR),
-							 errmsg("PREV and NEXT cannot contain PREV or NEXT"),
-							 errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
-							 parser_errposition(ctx->pstate, nav->location)));
+							errcode(ERRCODE_SYNTAX_ERROR),
+							errmsg("PREV and NEXT cannot contain PREV or NEXT"),
+							errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
+							parser_errposition(ctx->pstate, nav->location));
 				else
 					ereport(ERROR,
-							(errcode(ERRCODE_SYNTAX_ERROR),
-							 errmsg("FIRST and LAST cannot contain FIRST or LAST"),
-							 errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
-							 parser_errposition(ctx->pstate, nav->location)));
+							errcode(ERRCODE_SYNTAX_ERROR),
+							errmsg("FIRST and LAST cannot contain FIRST or LAST"),
+							errhint("Only PREV(FIRST()), PREV(LAST()), NEXT(FIRST()), and NEXT(LAST()) compound forms are allowed."),
+							parser_errposition(ctx->pstate, nav->location));
 			}
 			else if (!ctx->has_column_ref)
 			{
 				ereport(ERROR,
-						(errcode(ERRCODE_SYNTAX_ERROR),
-						 errmsg("argument of row pattern navigation operation must include at least one column reference"),
-						 parser_errposition(ctx->pstate, nav->location)));
+						errcode(ERRCODE_SYNTAX_ERROR),
+						errmsg("argument of row pattern navigation operation must include at least one column reference"),
+						parser_errposition(ctx->pstate, nav->location));
 			}
 
 			/*
@@ -673,9 +673,9 @@ define_walker(Node *node, void *context)
 				(void) define_walker((Node *) nav->offset_arg, ctx);
 				if (ctx->has_column_ref)
 					ereport(ERROR,
-							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-							 errmsg("row pattern navigation offset must be a run-time constant"),
-							 parser_errposition(ctx->pstate, exprLocation((Node *) nav->offset_arg))));
+							errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+							errmsg("row pattern navigation offset must be a run-time constant"),
+							parser_errposition(ctx->pstate, exprLocation((Node *) nav->offset_arg)));
 			}
 			if (flattened && nav->compound_offset_arg != NULL)
 			{
@@ -683,9 +683,9 @@ define_walker(Node *node, void *context)
 				(void) define_walker((Node *) nav->compound_offset_arg, ctx);
 				if (ctx->has_column_ref)
 					ereport(ERROR,
-							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-							 errmsg("row pattern navigation offset must be a run-time constant"),
-							 parser_errposition(ctx->pstate, exprLocation((Node *) nav->compound_offset_arg))));
+							errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+							errmsg("row pattern navigation offset must be a run-time constant"),
+							parser_errposition(ctx->pstate, exprLocation((Node *) nav->compound_offset_arg)));
 			}
 
 			*ctx = saved;
-- 
2.50.1 (Apple Git-155)