diff options
Diffstat (limited to 'src/include/nodes/parsenodes.h')
-rw-r--r-- | src/include/nodes/parsenodes.h | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 699fa77bc70..06abb70e947 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1518,19 +1518,34 @@ typedef struct MergeStmt RangeVar *relation; /* target relation to merge into */ Node *source_relation; /* source relation */ Node *join_condition; /* join condition between source and target */ - List *mergeActionList; /* list of MergeAction(s) */ + List *mergeWhenClauses; /* list of MergeWhenClause(es) */ WithClause *withClause; /* WITH clause */ } MergeStmt; -typedef struct MergeAction +typedef struct MergeWhenClause { NodeTag type; bool matched; /* true=MATCHED, false=NOT MATCHED */ - Node *condition; /* WHEN AND conditions (raw parser) */ - Node *qual; /* transformed WHEN AND conditions */ CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */ - Node *stmt; /* T_UpdateStmt etc */ - List *targetList; /* the target list (of ResTarget) */ + Node *condition; /* WHEN AND conditions (raw parser) */ + List *targetList; /* INSERT/UPDATE targetlist */ + /* the following members are only useful for INSERT action */ + List *cols; /* optional: names of the target columns */ + List *values; /* VALUES to INSERT, or NULL */ + OverridingKind override; /* OVERRIDING clause */ +} MergeWhenClause; + +/* + * WHEN [NOT] MATCHED THEN action info + */ +typedef struct MergeAction +{ + NodeTag type; + bool matched; /* true=MATCHED, false=NOT MATCHED */ + OverridingKind override; /* OVERRIDING clause */ + Node *qual; /* transformed WHEN AND conditions */ + CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */ + List *targetList; /* the target list (of ResTarget) */ } MergeAction; /* ---------------------- |