Thread
-
Re: Row pattern recognition
Tatsuo Ishii <ishii@sraoss.co.jp> — 2023-12-04T11:40:48Z
Attached is the v12 patch. Below are the summary of the changes from previous version. - Rebase. CFbot says v11 patch needs rebase since Nov 30, 2023. - Apply preprocess_expression() to DEFINE clause in the planning phase. This is necessary to simply const expressions like: DEFINE A price < (99 + 1) to: DEFINE A price < 100 - Re-allow to use WinSetMarkPosition() in eval_windowaggregates(). - FYI here is the list to explain what were changed in each patch file. 0001-Row-pattern-recognition-patch-for-raw-parser.patch - Fix conflict. 0002-Row-pattern-recognition-patch-parse-analysis.patch - Same as before. 0003-Row-pattern-recognition-patch-planner.patch - Call preprocess_expression() for DEFINE clause in subquery_planner(). 0004-Row-pattern-recognition-patch-executor.patch - Re-allow to use WinSetMarkPosition() in eval_windowaggregates(). 0005-Row-pattern-recognition-patch-docs.patch - Same as before. 0006-Row-pattern-recognition-patch-tests.patch - Same as before. 0007-Allow-to-print-raw-parse-tree.patch - Same as before. Best reagards, -- Tatsuo Ishii SRA OSS LLC English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp -
Re: Row pattern recognition
Peter Eisentraut <peter@eisentraut.org> — 2023-12-06T11:05:33Z
On 04.12.23 12:40, Tatsuo Ishii wrote: > diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y > index d631ac89a9..5a77fca17f 100644 > --- a/src/backend/parser/gram.y > +++ b/src/backend/parser/gram.y > @@ -251,6 +251,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); > DefElem *defelt; > SortBy *sortby; > WindowDef *windef; > + RPCommonSyntax *rpcom; > + RPSubsetItem *rpsubset; > JoinExpr *jexpr; > IndexElem *ielem; > StatsElem *selem; > @@ -278,6 +280,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); > MergeWhenClause *mergewhen; > struct KeyActions *keyactions; > struct KeyAction *keyaction; > + RPSkipTo skipto; > } > > %type <node> stmt toplevel_stmt schema_stmt routine_body_stmt It is usually not the style to add an entry for every node type to the %union. Otherwise, we'd have hundreds of entries in there. > @@ -866,6 +878,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); > %nonassoc UNBOUNDED /* ideally would have same precedence as IDENT */ > %nonassoc IDENT PARTITION RANGE ROWS GROUPS PRECEDING FOLLOWING CUBE ROLLUP > SET KEYS OBJECT_P SCALAR VALUE_P WITH WITHOUT > +%nonassoc MEASURES AFTER INITIAL SEEK PATTERN_P > %left Op OPERATOR /* multi-character ops and user-defined operators */ > %left '+' '-' > %left '*' '/' '%' It was recently discussed that these %nonassoc should ideally all have the same precedence. Did you consider that here?