8000 Improve documentation of struct ParseState. · postgrespro/postgres@3c40594 · GitHub
[go: up one dir, main page]

Skip to content
  • Commit 3c40594

    Browse files
    committed
    Improve documentation of struct ParseState.
    I got annoyed about how some fields of ParseState were documented in the struct's block comment and some weren't; not all of the latter are trivial. Fix that. Also reorder a couple of fields that seem to have been placed rather randomly, or maybe with an idea of avoiding padding space; but there are never so many ParseStates in existence at one time that we ought to value pad space over readability.
    1 parent 9b815a8 commit 3c40594

    File tree

    1 file changed

    +39
    -5
    lines changed

    1 file changed

    +39
    -5
    lines changed

    src/include/parser/parse_node.h

    Lines changed: 39 additions & 5 deletions
    Original file line numberDiff line numberDiff line change
    @@ -65,7 +65,7 @@ typedef enum ParseExprKind
    6565
    EXPR_KIND_EXECUTE_PARAMETER, /* parameter value in EXECUTE */
    6666
    EXPR_KIND_TRIGGER_WHEN, /* WHEN condition in CREATE TRIGGER */
    6767
    EXPR_KIND_POLICY, /* USING or WITH CHECK expr in policy */
    68-
    EXPR_KIND_PARTITION_EXPRESSION /* PARTITION BY expression */
    68+
    EXPR_KIND_PARTITION_EXPRESSION /* PARTITION BY expression */
    6969
    } ParseExprKind;
    7070

    7171

    @@ -123,11 +123,42 @@ typedef Node *(*CoerceParamHook) (ParseState *pstate, Param *param,
    123123
    * p_parent_cte: CommonTableExpr that immediately contains the current query,
    124124
    * if any.
    125125
    *
    126+
    * p_target_relation: target relation, if query is INSERT, UPDATE, or DELETE.
    127+
    *
    128+
    * p_target_rangetblentry: target relation's entry in the rtable list.
    129+
    *
    130+
    * p_is_insert: true to process assignment expressions like INSERT, false
    131+
    * to process them like UPDATE. (Note this can change intra-statement, for
    132+
    * cases like INSERT ON CONFLICT UPDATE.)
    133+
    *
    126134
    * p_windowdefs: list of WindowDefs representing WINDOW and OVER clauses.
    127135
    * We collect these while transforming expressions and then transform them
    128136
    * afterwards (so that any resjunk tlist items needed for the sort/group
    129137
    * clauses end up at the end of the query tlist). A WindowDef's location in
    130138
    * this list, counting from 1, is the winref number to use to reference it.
    139+
    *
    140+
    * p_expr_kind: kind of expression we're currently parsing, as per enum above;
    141+
    * EXPR_KIND_NONE when not in an expression.
    142+
    *
    143+
    * p_next_resno: next TargetEntry.resno to assign, starting from 1.
    144+
    *
    145+
    * p_multiassign_exprs: partially-processed MultiAssignRef source expressions.
    146+
    *
    147+
    * p_locking_clause: query's FOR UPDATE/FOR SHARE clause, if any.
    148+
    *
    149+
    * p_locked_from_parent: true if parent query level applies FOR UPDATE/SHARE
    150+
    * to this subquery as a whole.
    151+
    *
    152+
    * p_value_substitute: replacement for VALUE references, if we're parsing
    153+
    * a domain CHECK constraint.
    154+
    *
    155+
    * p_hasAggs, p_hasWindowFuncs, etc: true if we've found any of the indicated
    156+
    * constructs in the query.
    157+
    *
    158+
    * p_pre_columnref_hook, etc: optional parser hook functions for modifying the
    159+
    * interpretation of ColumnRefs and ParamRefs.
    160+
    *
    161+
    * p_ref_hook_state: passthrough state for the parser hook functions.
    131162
    */
    132163
    struct ParseState
    133164
    {
    @@ -143,21 +174,24 @@ struct ParseState
    143174
    List *p_ctenamespace; /* current namespace for common table exprs */
    144175
    List *p_future_ctes; /* common table exprs not yet in namespace */
    145176
    CommonTableExpr *p_parent_cte; /* this query's containing CTE */
    177+
    Relation p_target_relation; /* INSERT/UPDATE/DELETE target rel */
    178+
    RangeTblEntry *p_target_rangetblentry; /* target rel's RTE */
    179+
    bool p_is_insert; /* process assignment like INSERT not UPDATE */
    146180
    List *p_windowdefs; /* raw representations of window clauses */
    147181
    ParseExprKind p_expr_kind; /* what kind of expression we're parsing */
    148182
    int p_next_resno; /* next targetlist resno to assign */
    149183
    List *p_multiassign_exprs; /* junk tlist entries for multiassign */
    150184
    List *p_locking_clause; /* raw FOR UPDATE/FOR SHARE info */
    185+
    bool p_locked_from_parent; /* parent has marked this subquery
    186+
    * with FOR UPDATE/FOR SHARE */
    151187
    Node *p_value_substitute; /* what to replace VALUE with, if any */
    188+
    189+
    /* Flags telling about things found in the query: */
    152190
    bool p_hasAggs;
    153191
    bool p_hasWindowFuncs;
    154192
    bool p_hasTargetSRFs;
    155193
    bool p_hasSubLinks;
    156194
    bool p_hasModifyingCTE;
    157-
    bool p_is_insert;
    158-
    bool p_locked_from_parent;
    159-
    Relation p_target_relation;
    160-
    RangeTblEntry *p_target_rangetblentry;
    161195

    162196
    /*
    163197
    * Optional hook functions for parser callbacks. These are null unless

    0 commit comments

    Comments
     (0)
    0