diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index fb768ad52c..41da670f15 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -153,7 +153,7 @@ transform_MERGE_to_join(Query *parse) { RangeTblEntry *joinrte; JoinExpr *joinexpr; - bool have_action[3]; + bool have_action[NUM_MERGE_MATCH_KINDS]; JoinType jointype; int joinrti; List *vars; diff --git a/src/backend/parser/parse_merge.c b/src/backend/parser/parse_merge.c index bce11d5956..87df79027d 100644 --- a/src/backend/parser/parse_merge.c +++ b/src/backend/parser/parse_merge.c @@ -109,7 +109,7 @@ transformMergeStmt(ParseState *pstate, MergeStmt *stmt) Query *qry = makeNode(Query); ListCell *l; AclMode targetPerms = ACL_NO_RIGHTS; - bool is_terminal[3]; + bool is_terminal[NUM_MERGE_MATCH_KINDS]; Index sourceRTI; List *mergeActionList; ParseNamespaceItem *nsitem; diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index fa2f70b7a4..c1a65bad2a 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -545,7 +545,7 @@ typedef struct ResultRelInfo OnConflictSetState *ri_onConflict; /* for MERGE, lists of MergeActionState (one per MergeMatchKind) */ - List *ri_MergeActions[3]; + List *ri_MergeActions[NUM_MERGE_MATCH_KINDS]; /* for MERGE, expr state for checking the join condition */ ExprState *ri_MergeJoinCondition; diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index 719c4b7b61..247cecb4b4 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -1970,6 +1970,8 @@ typedef enum MergeMatchKind MERGE_WHEN_NOT_MATCHED_BY_TARGET } MergeMatchKind; +#define NUM_MERGE_MATCH_KINDS (MERGE_WHEN_NOT_MATCHED_BY_TARGET + 1) + typedef struct MergeAction { NodeTag type;