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 */