Re: Row pattern recognition
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
Attachments:
v12-0001-Row-pattern-recognition-patch-for-raw-parser.patchtext/x-patch; charset=us-asciiDownload+273-15
v12-0002-Row-pattern-recognition-patch-parse-analysis.patchtext/x-patch; charset=us-asciiDownload+291-2
v12-0003-Row-pattern-recognition-patch-planner.patchtext/x-patch; charset=us-asciiDownload+67-7
v12-0004-Row-pattern-recognition-patch-executor.patchtext/x-patch; charset=us-asciiDownload+1490-15
v12-0005-Row-pattern-recognition-patch-docs.patchtext/x-patch; charset=us-asciiDownload+170-3
v12-0006-Row-pattern-recognition-patch-tests.patchtext/x-patch; charset=us-asciiDownload+1214-2
v12-0007-Allow-to-print-raw-parse-tree.patchtext/x-patch; charset=us-asciiDownload+4-1
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?