summaryrefslogtreecommitdiff
path: root/src/include/executor/execPartition.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/executor/execPartition.h')
-rw-r--r--src/include/executor/execPartition.h47
1 files changed, 38 insertions, 9 deletions
diff --git a/src/include/executor/execPartition.h b/src/include/executor/execPartition.h
index f0998cb82fb..b5df357acdf 100644
--- a/src/include/executor/execPartition.h
+++ b/src/include/executor/execPartition.h
@@ -49,18 +49,47 @@ typedef struct PartitionDispatchData
typedef struct PartitionDispatchData *PartitionDispatch;
-extern void ExecSetupPartitionTupleRouting(ModifyTableState *mtstate,
- Relation rel,
- Index resultRTindex,
- EState *estate,
- PartitionDispatch **pd,
- ResultRelInfo ***partitions,
- TupleConversionMap ***tup_conv_maps,
- TupleTableSlot **partition_tuple_slot,
- int *num_parted, int *num_partitions);
+/*-----------------------
+ * PartitionTupleRouting - Encapsulates all information required to execute
+ * tuple-routing between partitions.
+ *
+ * partition_dispatch_info Array of PartitionDispatch objects with one
+ * entry for every partitioned table in the
+ * partition tree.
+ * num_dispatch number of partitioned tables in the partition
+ * tree (= length of partition_dispatch_info[])
+ * partitions Array of ResultRelInfo* objects with one entry
+ * for every leaf partition in the partition tree.
+ * num_partitions Number of leaf partitions in the partition tree
+ * (= 'partitions' array length)
+ * partition_tupconv_maps Array of TupleConversionMap objects with one
+ * entry for every leaf partition (required to
+ * convert input tuple based on the root table's
+ * rowtype to a leaf partition's rowtype after
+ * tuple routing is done)
+ * partition_tuple_slot TupleTableSlot to be used to manipulate any
+ * given leaf partition's rowtype after that
+ * partition is chosen for insertion by
+ * tuple-routing.
+ *-----------------------
+ */
+typedef struct PartitionTupleRouting
+{
+ PartitionDispatch *partition_dispatch_info;
+ int num_dispatch;
+ ResultRelInfo **partitions;
+ int num_partitions;
+ TupleConversionMap **partition_tupconv_maps;
+ TupleTableSlot *partition_tuple_slot;
+} 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);
#endif /* EXECPARTITION_H */