Re: Row pattern recognition - Mailing list pgsql-hackers

From Tatsuo Ishii
Subject Re: Row pattern recognition
Date
Msg-id 20260213.204650.823915400821412238.ishii@postgresql.org
Whole thread Raw
In response to Re: Row pattern recognition  (Tatsuo Ishii <ishii@postgresql.org>)
Responses Re: Row pattern recognition
List pgsql-hackers
> Hi Henson,
> 
> In my understanding RANGE/GROUPS are not allowed when RPR is defined.
> (See ISO/IEC 19075-5 section 6.10.2 "ROWS BETWEEN CURRENT ROW AND").
> So proper fix would be to error out at the parse/analyze phase if
> RANGE/GROUPS are used when RPR is defined.

Attached is a patch to disallow RANGE/GROUPS when RPR is used. On top
of your last patches.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp
diff --git a/src/backend/parser/parse_rpr.c b/src/backend/parser/parse_rpr.c
index 048e84bd7bd..cc693b36208 100644
--- a/src/backend/parser/parse_rpr.c
+++ b/src/backend/parser/parse_rpr.c
@@ -68,6 +68,25 @@ transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef,
         return;
 
     /* Check Frame options */
+
+    /* Frame type must be "ROW" */
+    if (wc->frameOptions & FRAMEOPTION_GROUPS)
+        ereport(ERROR,
+                (errcode(ERRCODE_SYNTAX_ERROR),
+                 errmsg("FRAME option GROUP is not permitted when row pattern recognition is used"),
+                 errhint("Use: ROWS insted"),
+                 parser_errposition(pstate,
+                                    windef->frameLocation >= 0 ?
+                                    windef->frameLocation : windef->location)));
+    if (wc->frameOptions & FRAMEOPTION_RANGE)
+        ereport(ERROR,
+                (errcode(ERRCODE_SYNTAX_ERROR),
+                 errmsg("FRAME option RANGE is not permitted when row pattern recognition is used"),
+                 errhint("Use: ROWS insted"),
+                 parser_errposition(pstate,
+                                    windef->frameLocation >= 0 ?
+                                    windef->frameLocation : windef->location)));
+
     /* Frame must start at current row */
     if ((wc->frameOptions & FRAMEOPTION_START_CURRENT_ROW) == 0)
     {

pgsql-hackers by date:

Previous
From: Nazir Bilal Yavuz
Date:
Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD
Next
From: Ashutosh Bapat
Date:
Subject: Better shared data structure management and resizable shared data structures