]> granicus.if.org Git - postgresql/commitdiff
Remove unnecessary members from ModifyTableState and ExecInsert
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Mar 2018 21:09:43 +0000 (18:09 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Mar 2018 21:09:43 +0000 (18:09 -0300)
These values can be obtained from the ModifyTable node which is already
a part of both the ModifyTableState and ExecInsert.

Author: Álvaro Herrera, Amit Langote
Reviewed-by: Peter Geoghegan
Discussion: https://postgr.es/m/20180316151303.rml2p5wffn3o6qy6@alvherre.pgsql

src/backend/executor/execPartition.c
src/backend/executor/nodeModifyTable.c
src/include/nodes/execnodes.h

index f6fe7cd61d9d1f72832b57993914c36dfa92550c..ce9a4e16cfbd419e95ec2f92651f7411f1e37d2c 100644 (file)
@@ -363,8 +363,8 @@ ExecInitPartitionInfo(ModifyTableState *mtstate,
        if (partrel->rd_rel->relhasindex &&
                leaf_part_rri->ri_IndexRelationDescs == NULL)
                ExecOpenIndices(leaf_part_rri,
-                                               (mtstate != NULL &&
-                                                mtstate->mt_onconflict != ONCONFLICT_NONE));
+                                               (node != NULL &&
+                                                node->onConflictAction != ONCONFLICT_NONE));
 
        /*
         * Build WITH CHECK OPTION constraints for the partition.  Note that we
index a7cfe104d09f4a35ea4b371b3b3d77355f381a03..4fa2d7265f03fb27132f9b23fdb44a74d9688a36 100644 (file)
@@ -263,8 +263,6 @@ static TupleTableSlot *
 ExecInsert(ModifyTableState *mtstate,
                   TupleTableSlot *slot,
                   TupleTableSlot *planSlot,
-                  List *arbiterIndexes,
-                  OnConflictAction onconflict,
                   EState *estate,
                   bool canSetTag)
 {
@@ -275,6 +273,8 @@ ExecInsert(ModifyTableState *mtstate,
        List       *recheckIndexes = NIL;
        TupleTableSlot *result = NULL;
        TransitionCaptureState *ar_insert_trig_tcs;
+       ModifyTable *node = (ModifyTable *) mtstate->ps.plan;
+       OnConflictAction onconflict = node->onConflictAction;
 
        /*
         * get the heap tuple out of the tuple table slot, making sure we have a
@@ -365,6 +365,7 @@ ExecInsert(ModifyTableState *mtstate,
        else
        {
                WCOKind         wco_kind;
+               bool            check_partition_constr;
 
                /*
                 * We always check the partition constraint, including when the tuple
@@ -373,8 +374,7 @@ ExecInsert(ModifyTableState *mtstate,
                 * trigger might modify the tuple such that the partition constraint
                 * is no longer satisfied, so we need to check in that case.
                 */
-               bool            check_partition_constr =
-               (resultRelInfo->ri_PartitionCheck != NIL);
+               check_partition_constr = (resultRelInfo->ri_PartitionCheck != NIL);
 
                /*
                 * Constraints might reference the tableoid column, so initialize
@@ -420,6 +420,9 @@ ExecInsert(ModifyTableState *mtstate,
                        uint32          specToken;
                        ItemPointerData conflictTid;
                        bool            specConflict;
+                       List       *arbiterIndexes;
+
+                       arbiterIndexes = node->arbiterIndexes;
 
                        /*
                         * Do a non-conclusive check for conflicts first.
@@ -537,7 +540,7 @@ ExecInsert(ModifyTableState *mtstate,
                        if (resultRelInfo->ri_NumIndices > 0)
                                recheckIndexes = ExecInsertIndexTuples(slot, &(tuple->t_self),
                                                                                                           estate, false, NULL,
-                                                                                                          arbiterIndexes);
+                                                                                                          NIL);
                }
        }
 
@@ -1124,8 +1127,8 @@ lreplace:;
                        slot = ExecPrepareTupleRouting(mtstate, estate, proute,
                                                                                   mtstate->rootResultRelInfo, slot);
 
-                       ret_slot = ExecInsert(mtstate, slot, planSlot, NULL,
-                                                                 ONCONFLICT_NONE, estate, canSetTag);
+                       ret_slot = ExecInsert(mtstate, slot, planSlot,
+                                                                 estate, canSetTag);
 
                        /* Revert ExecPrepareTupleRouting's node change. */
                        estate->es_result_relation_info = resultRelInfo;
@@ -1487,6 +1490,7 @@ ExecOnConflictUpdate(ModifyTableState *mtstate,
 static void
 fireBSTriggers(ModifyTableState *node)
 {
+       ModifyTable *plan = (ModifyTable *) node->ps.plan;
        ResultRelInfo *resultRelInfo = node->resultRelInfo;
 
        /*
@@ -1501,7 +1505,7 @@ fireBSTriggers(ModifyTableState *node)
        {
                case CMD_INSERT:
                        ExecBSInsertTriggers(node->ps.state, resultRelInfo);
-                       if (node->mt_onconflict == ONCONFLICT_UPDATE)
+                       if (plan->onConflictAction == ONCONFLICT_UPDATE)
                                ExecBSUpdateTriggers(node->ps.state,
                                                                         resultRelInfo);
                        break;
@@ -1545,12 +1549,13 @@ getTargetResultRelInfo(ModifyTableState *node)
 static void
 fireASTriggers(ModifyTableState *node)
 {
+       ModifyTable *plan = (ModifyTable *) node->ps.plan;
        ResultRelInfo *resultRelInfo = getTargetResultRelInfo(node);
 
        switch (node->operation)
        {
                case CMD_INSERT:
-                       if (node->mt_onconflict == ONCONFLICT_UPDATE)
+                       if (plan->onConflictAction == ONCONFLICT_UPDATE)
                                ExecASUpdateTriggers(node->ps.state,
                                                                         resultRelInfo,
                                                                         node->mt_oc_transition_capture);
@@ -1578,6 +1583,7 @@ fireASTriggers(ModifyTableState *node)
 static void
 ExecSetupTransitionCaptureState(ModifyTableState *mtstate, EState *estate)
 {
+       ModifyTable *plan = (ModifyTable *) mtstate->ps.plan;
        ResultRelInfo *targetRelInfo = getTargetResultRelInfo(mtstate);
 
        /* Check for transition tables on the directly targeted relation. */
@@ -1585,8 +1591,8 @@ ExecSetupTransitionCaptureState(ModifyTableState *mtstate, EState *estate)
                MakeTransitionCaptureState(targetRelInfo->ri_TrigDesc,
                                                                   RelationGetRelid(targetRelInfo->ri_RelationDesc),
                                                                   mtstate->operation);
-       if (mtstate->operation == CMD_INSERT &&
-               mtstate->mt_onconflict == ONCONFLICT_UPDATE)
+       if (plan->operation == CMD_INSERT &&
+               plan->onConflictAction == ONCONFLICT_UPDATE)
                mtstate->mt_oc_transition_capture =
                        MakeTransitionCaptureState(targetRelInfo->ri_TrigDesc,
                                                                           RelationGetRelid(targetRelInfo->ri_RelationDesc),
@@ -2064,7 +2070,6 @@ ExecModifyTable(PlanState *pstate)
                                        slot = ExecPrepareTupleRouting(node, estate, proute,
                                                                                                   resultRelInfo, slot);
                                slot = ExecInsert(node, slot, planSlot,
-                                                                 node->mt_arbiterindexes, node->mt_onconflict,
                                                                  estate, node->canSetTag);
                                /* Revert ExecPrepareTupleRouting's state change. */
                                if (proute)
@@ -2151,8 +2156,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
 
        mtstate->mt_arowmarks = (List **) palloc0(sizeof(List *) * nplans);
        mtstate->mt_nplans = nplans;
-       mtstate->mt_onconflict = node->onConflictAction;
-       mtstate->mt_arbiterindexes = node->arbiterIndexes;
 
        /* set up epqstate with dummy subplan data for the moment */
        EvalPlanQualInit(&mtstate->mt_epqstate, estate, NULL, NIL, node->epqParam);
@@ -2195,7 +2198,8 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
                if (resultRelInfo->ri_RelationDesc->rd_rel->relhasindex &&
                        operation != CMD_DELETE &&
                        resultRelInfo->ri_IndexRelationDescs == NULL)
-                       ExecOpenIndices(resultRelInfo, mtstate->mt_onconflict != ONCONFLICT_NONE);
+                       ExecOpenIndices(resultRelInfo,
+                                                       node->onConflictAction != ONCONFLICT_NONE);
 
                /*
                 * If this is an UPDATE and a BEFORE UPDATE trigger is present, the
index b119ef861b9902d1baf7e9ad5d7ece8345616ed1..d9e591802fefafa8291d2119088b540fc34ba8ae 100644 (file)
@@ -989,9 +989,6 @@ typedef struct ModifyTableState
        List      **mt_arowmarks;       /* per-subplan ExecAuxRowMark lists */
        EPQState        mt_epqstate;    /* for evaluating EvalPlanQual rechecks */
        bool            fireBSTriggers; /* do we need to fire stmt triggers? */
-       OnConflictAction mt_onconflict; /* ON CONFLICT type */
-       List       *mt_arbiterindexes;  /* unique index OIDs to arbitrate taking
-                                                                        * alt path */
        TupleTableSlot *mt_existing;    /* slot to store existing target tuple in */
        List       *mt_excludedtlist;   /* the excluded pseudo relation's tlist  */
        TupleTableSlot *mt_conflproj;   /* CONFLICT ... SET ... projection target */