diff options
Diffstat (limited to 'src/include/nodes')
-rw-r--r-- | src/include/nodes/execnodes.h | 65 | ||||
-rw-r--r-- | src/include/nodes/nodes.h | 6 | ||||
-rw-r--r-- | src/include/nodes/parsenodes.h | 37 | ||||
-rw-r--r-- | src/include/nodes/plannodes.h | 8 | ||||
-rw-r--r-- | src/include/nodes/relation.h | 7 |
5 files changed, 10 insertions, 113 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index ff63d179b2a..6070a42b6fe 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -360,17 +360,8 @@ typedef struct JunkFilter AttrNumber *jf_cleanMap; TupleTableSlot *jf_resultSlot; AttrNumber jf_junkAttNo; - AttrNumber jf_otherJunkAttNo; } JunkFilter; -typedef struct MergeState -{ - /* List of MERGE MATCHED action states */ - List *matchedActionStates; - /* List of MERGE NOT MATCHED action states */ - List *notMatchedActionStates; -} MergeState; - /* * OnConflictSetState * @@ -461,38 +452,8 @@ typedef struct ResultRelInfo /* relation descriptor for root partitioned table */ Relation ri_PartitionRoot; - - int ri_PartitionLeafIndex; - /* for running MERGE on this result relation */ - MergeState *ri_mergeState; - - /* - * While executing MERGE, the target relation is processed twice; once - * as a target relation and once to run a join between the target and the - * source. We generate two different RTEs for these two purposes, one with - * rte->inh set to false and other with rte->inh set to true. - * - * Since the plan re-evaluated by EvalPlanQual uses the join RTE, we must - * install the updated tuple in the scan corresponding to that RTE. The - * following member tracks the index of the second RTE for EvalPlanQual - * purposes. ri_mergeTargetRTI is non-zero only when MERGE is in-progress. - * We use ri_mergeTargetRTI to run EvalPlanQual for MERGE and - * ri_RangeTableIndex elsewhere. - */ - Index ri_mergeTargetRTI; } ResultRelInfo; -/* - * Get the Range table index for EvalPlanQual. - * - * We use the ri_mergeTargetRTI if set, otherwise use ri_RangeTableIndex. - * ri_mergeTargetRTI should really be ever set iff we're running MERGE. - */ -#define GetEPQRangeTableIndex(r) \ - (((r)->ri_mergeTargetRTI > 0) \ - ? (r)->ri_mergeTargetRTI \ - : (r)->ri_RangeTableIndex) - /* ---------------- * EState information * @@ -1005,11 +966,6 @@ typedef struct PlanState if (((PlanState *)(node))->instrument) \ ((PlanState *)(node))->instrument->nfiltered2 += (delta); \ } while(0) -#define InstrCountFiltered3(node, delta) \ - do { \ - if (((PlanState *)(node))->instrument) \ - ((PlanState *)(node))->instrument->nfiltered3 += (delta); \ - } while(0) /* * EPQState is state for executing an EvalPlanQual recheck on a candidate @@ -1057,27 +1013,13 @@ typedef struct ProjectSetState } ProjectSetState; /* ---------------- - * MergeActionState information - * ---------------- - */ -typedef struct MergeActionState -{ - NodeTag type; - bool matched; /* true=MATCHED, false=NOT MATCHED */ - ExprState *whenqual; /* WHEN AND conditions */ - CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */ - ProjectionInfo *proj; /* tuple projection info */ - TupleDesc tupDesc; /* tuple descriptor for projection */ -} MergeActionState; - -/* ---------------- * ModifyTableState information * ---------------- */ typedef struct ModifyTableState { PlanState ps; /* its first field is NodeTag */ - CmdType operation; /* INSERT, UPDATE, DELETE or MERGE */ + CmdType operation; /* INSERT, UPDATE, or DELETE */ bool canSetTag; /* do we set the command tag/es_processed? */ bool mt_done; /* are we done? */ PlanState **mt_plans; /* subplans (one per target rel) */ @@ -1093,8 +1035,6 @@ typedef struct ModifyTableState List *mt_excludedtlist; /* the excluded pseudo relation's tlist */ TupleTableSlot *mt_conflproj; /* CONFLICT ... SET ... projection target */ - TupleTableSlot *mt_mergeproj; /* MERGE action projection target */ - /* Tuple-routing support info */ struct PartitionTupleRouting *mt_partition_tuple_routing; @@ -1106,9 +1046,6 @@ typedef struct ModifyTableState /* Per plan map for tuple conversion from child to root */ TupleConversionMap **mt_per_subplan_tupconv_maps; - - /* Flags showing which subcommands are present INS/UPD/DEL/DO NOTHING */ - int mt_merge_subcommands; } ModifyTableState; /* ---------------- diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index fce48026b6d..443de227041 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -97,7 +97,6 @@ typedef enum NodeTag T_PlanState, T_ResultState, T_ProjectSetState, - T_MergeActionState, T_ModifyTableState, T_AppendState, T_MergeAppendState, @@ -309,8 +308,6 @@ typedef enum NodeTag T_InsertStmt, T_DeleteStmt, T_UpdateStmt, - T_MergeStmt, - T_MergeAction, T_SelectStmt, T_AlterTableStmt, T_AlterTableCmd, @@ -660,8 +657,7 @@ typedef enum CmdType CMD_SELECT, /* select stmt */ CMD_UPDATE, /* update stmt */ CMD_INSERT, /* insert stmt */ - CMD_DELETE, /* delete stmt */ - CMD_MERGE, /* merge stmt */ + CMD_DELETE, CMD_UTILITY, /* cmds like create, destroy, copy, vacuum, * etc. */ CMD_NOTHING /* dummy command for instead nothing rules diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index d005beeba82..92082b3a7a2 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -38,7 +38,7 @@ typedef enum OverridingKind typedef enum QuerySource { QSRC_ORIGINAL, /* original parsetree (explicit query) */ - QSRC_PARSER, /* added by parse analysis in MERGE */ + QSRC_PARSER, /* added by parse analysis (now unused) */ QSRC_INSTEAD_RULE, /* added by unconditional INSTEAD rule */ QSRC_QUAL_INSTEAD_RULE, /* added by conditional INSTEAD rule */ QSRC_NON_INSTEAD_RULE /* added by non-INSTEAD rule */ @@ -107,7 +107,7 @@ typedef struct Query { NodeTag type; - CmdType commandType; /* select|insert|update|delete|merge|utility */ + CmdType commandType; /* select|insert|update|delete|utility */ QuerySource querySource; /* where did I come from? */ @@ -118,7 +118,7 @@ typedef struct Query Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */ int resultRelation; /* rtable index of target relation for - * INSERT/UPDATE/DELETE/MERGE; 0 for SELECT */ + * INSERT/UPDATE/DELETE; 0 for SELECT */ bool hasAggs; /* has aggregates in tlist or havingQual */ bool hasWindowFuncs; /* has window functions in tlist */ @@ -169,9 +169,6 @@ typedef struct Query List *withCheckOptions; /* a list of WithCheckOption's, which are * only added during rewrite and therefore * are not written out as part of Query. */ - int mergeTarget_relation; - List *mergeSourceTargetList; - List *mergeActionList; /* list of actions for MERGE (only) */ /* * The following two fields identify the portion of the source text string @@ -1131,9 +1128,7 @@ typedef enum WCOKind WCO_VIEW_CHECK, /* WCO on an auto-updatable view */ WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */ WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */ - WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO UPDATE USING policy */ - WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */ - WCO_RLS_MERGE_DELETE_CHECK /* RLS MERGE DELETE USING policy */ + WCO_RLS_CONFLICT_CHECK /* RLS ON CONFLICT DO UPDATE USING policy */ } WCOKind; typedef struct WithCheckOption @@ -1509,30 +1504,6 @@ typedef struct UpdateStmt } UpdateStmt; /* ---------------------- - * Merge Statement - * ---------------------- - */ -typedef struct MergeStmt -{ - NodeTag type; - 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) */ -} MergeStmt; - -typedef struct MergeAction -{ - 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) */ -} MergeAction; - -/* ---------------------- * Select Statement * * A "simple" SELECT is represented in the output of gram.y by a single diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 0a797f0a052..c922216b7d1 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -18,7 +18,6 @@ #include "lib/stringinfo.h" #include "nodes/bitmapset.h" #include "nodes/lockoptions.h" -#include "nodes/parsenodes.h" #include "nodes/primnodes.h" @@ -43,7 +42,7 @@ typedef struct PlannedStmt { NodeTag type; - CmdType commandType; /* select|insert|update|delete|merge|utility */ + CmdType commandType; /* select|insert|update|delete|utility */ uint64 queryId; /* query identifier (copied from Query) */ @@ -217,14 +216,13 @@ typedef struct ProjectSet typedef struct ModifyTable { Plan plan; - CmdType operation; /* INSERT, UPDATE, DELETE or MERGE */ + CmdType operation; /* INSERT, UPDATE, or DELETE */ bool canSetTag; /* do we set the command tag/es_processed? */ Index nominalRelation; /* Parent RT index for use of EXPLAIN */ /* RT indexes of non-leaf tables in a partition tree */ List *partitioned_rels; bool partColsUpdated; /* some part key in hierarchy updated */ List *resultRelations; /* integer list of RT indexes */ - Index mergeTargetRelation; /* RT index of the merge target */ int resultRelIndex; /* index of first resultRel in plan's list */ int rootResultRelIndex; /* index of the partitioned table root */ List *plans; /* plan(s) producing source data */ @@ -240,8 +238,6 @@ typedef struct ModifyTable Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */ Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */ List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */ - List *mergeSourceTargetList; - List *mergeActionList; /* actions for MERGE */ } ModifyTable; /* ---------------- diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h index a2dde70de58..ea5251c6be2 100644 --- a/src/include/nodes/relation.h +++ b/src/include/nodes/relation.h @@ -1670,7 +1670,7 @@ typedef struct LockRowsPath } LockRowsPath; /* - * ModifyTablePath represents performing INSERT/UPDATE/DELETE/MERGE + * ModifyTablePath represents performing INSERT/UPDATE/DELETE modifications * * We represent most things that will be in the ModifyTable plan node * literally, except we have child Path(s) not Plan(s). But analysis of the @@ -1679,14 +1679,13 @@ typedef struct LockRowsPath typedef struct ModifyTablePath { Path path; - CmdType operation; /* INSERT, UPDATE, DELETE or MERGE */ + CmdType operation; /* INSERT, UPDATE, or DELETE */ bool canSetTag; /* do we set the command tag/es_processed? */ Index nominalRelation; /* Parent RT index for use of EXPLAIN */ /* RT indexes of non-leaf tables in a partition tree */ List *partitioned_rels; bool partColsUpdated; /* some part key in hierarchy updated */ List *resultRelations; /* integer list of RT indexes */ - Index mergeTargetRelation;/* RT index of merge target relation */ List *subpaths; /* Path(s) producing source data */ List *subroots; /* per-target-table PlannerInfos */ List *withCheckOptionLists; /* per-target-table WCO lists */ @@ -1694,8 +1693,6 @@ typedef struct ModifyTablePath List *rowMarks; /* PlanRowMarks (non-locking only) */ OnConflictExpr *onconflict; /* ON CONFLICT clause, or NULL */ int epqParam; /* ID of Param for EvalPlanQual re-eval */ - List *mergeSourceTargetList; - List *mergeActionList; /* actions for MERGE */ } ModifyTablePath; /* |