From c05bbc58f7e994d21df210a16985911bc4954f50 Mon Sep 17 00:00:00 2001 From: amit Date: Tue, 19 Dec 2017 13:56:25 +0900 Subject: [PATCH v2 2/4] ExecFindPartition refactoring --- src/backend/commands/copy.c | 5 +---- src/backend/executor/execPartition.c | 15 +++++++-------- src/backend/executor/nodeModifyTable.c | 5 +---- src/include/executor/execPartition.h | 5 +---- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 242dc56d87..8c724b8695 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -2601,10 +2601,7 @@ CopyFrom(CopyState cstate) * will get us the ResultRelInfo and TupleConversionMap for the * partition, respectively. */ - leaf_part_index = ExecFindPartition(resultRelInfo, - proute->partition_dispatch_info, - slot, - estate); + leaf_part_index = ExecFindPartition(mtstate, slot); Assert(leaf_part_index >= 0 && leaf_part_index < proute->num_partitions); diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 8c0d2df63c..21d230881a 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -140,11 +140,7 @@ ExecSetupPartitionTupleRouting(ModifyTableState *mtstate, } /* - * ExecFindPartition -- Find a leaf partition in the partition tree rooted - * at parent, for the heap tuple contained in *slot - * - * estate must be non-NULL; we'll need it to compute any expressions in the - * partition key(s) + * ExecFindPartition -- Find a leaf partition for tuple contained in slot * * If no leaf partition is found, this routine errors out with the appropriate * error message, else it returns the leaf partition sequence number @@ -152,14 +148,17 @@ ExecSetupPartitionTupleRouting(ModifyTableState *mtstate, * the partition tree. */ int -ExecFindPartition(ResultRelInfo *resultRelInfo, PartitionDispatch *pd, - TupleTableSlot *slot, EState *estate) +ExecFindPartition(ModifyTableState *mtstate, TupleTableSlot *slot) { + EState *estate = mtstate->ps.state; int result; Datum values[PARTITION_MAX_KEYS]; bool isnull[PARTITION_MAX_KEYS]; Relation rel; - PartitionDispatch parent; + PartitionTupleRouting *proute = mtstate->mt_partition_tuple_routing; + PartitionDispatch *pd = proute->partition_dispatch_info, + parent; + ResultRelInfo *resultRelInfo = mtstate->resultRelInfo; ExprContext *ecxt = GetPerTupleExprContext(estate); TupleTableSlot *ecxt_scantuple_old = ecxt->ecxt_scantuple; diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index c5eca1bb74..9a8f667d72 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -292,10 +292,7 @@ ExecInsert(ModifyTableState *mtstate, * get us the ResultRelInfo and TupleConversionMap for the partition, * respectively. */ - leaf_part_index = ExecFindPartition(resultRelInfo, - proute->partition_dispatch_info, - slot, - estate); + leaf_part_index = ExecFindPartition(mtstate, slot); Assert(leaf_part_index >= 0 && leaf_part_index < proute->num_partitions); diff --git a/src/include/executor/execPartition.h b/src/include/executor/execPartition.h index b5df357acd..79dad58828 100644 --- a/src/include/executor/execPartition.h +++ b/src/include/executor/execPartition.h @@ -86,10 +86,7 @@ typedef struct PartitionTupleRouting extern PartitionTupleRouting *ExecSetupPartitionTupleRouting(ModifyTableState *mtstate, Relation rel, Index resultRTindex, EState *estate); -extern int ExecFindPartition(ResultRelInfo *resultRelInfo, - PartitionDispatch *pd, - TupleTableSlot *slot, - EState *estate); extern void ExecCleanupTupleRouting(PartitionTupleRouting *proute); +extern int ExecFindPartition(ModifyTableState *mtstate, TupleTableSlot *slot); #endif /* EXECPARTITION_H */ -- 2.11.0