Thread

  1. 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
    
  2. 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?