From e7032368270b9ac58698e9249f766739b66c848a Mon Sep 17 00:00:00 2001
From: Pierre Forstmann <pierre.forstmann@gmail.com>
Date: Sat, 18 Jul 2026 17:33:33 +0200
Subject: [PATCH] bug#19558: Fix user-defined prefix operators '|' and '->'

---
 src/backend/parser/gram.y | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index ff4e138..331da79 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -15873,6 +15873,10 @@ a_expr:		c_expr									{ $$ = $1; }
 				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, $2, @1); }
 			| '-' a_expr					%prec UMINUS
 				{ $$ = doNegate($2, @1); }
+			| '|' a_expr                  %prec UMINUS 
+				 { $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "|", NULL , $2, @1); }
+			| RIGHT_ARROW a_expr                  %prec UMINUS 
+				 { $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "->", NULL , $2, @1); }
 			| a_expr '+' a_expr
 				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", $1, $3, @2); }
 			| a_expr '-' a_expr
@@ -15902,6 +15906,7 @@ a_expr:		c_expr									{ $$ = $1; }
 			| a_expr '|' a_expr
 				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "|", $1, $3, @2); }
 
+
 			| a_expr qual_Op a_expr				%prec Op
 				{ $$ = (Node *) makeA_Expr(AEXPR_OP, $2, $1, $3, @2); }
 			| qual_Op a_expr					%prec Op
@@ -16355,6 +16360,10 @@ b_expr:		c_expr
 				{ $$ = makeTypeCast($1, $3, @2); }
 			| '+' b_expr					%prec UMINUS
 				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, $2, @1); }
+			| '|' b_expr					%prec UMINUS
+				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "|", NULL, $2, @1); }
+			| RIGHT_ARROW b_expr					%prec UMINUS
+				{ $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "->", NULL, $2, @1); }
 			| '-' b_expr					%prec UMINUS
 				{ $$ = doNegate($2, @1); }
 			| b_expr '+' b_expr
-- 
2.52.0

