mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Simplify and encapsulate tuple routing support code.
Instead of having ExecSetupPartitionTupleRouting return multiple out parameters, have it return a pointer to a structure containing all of those different things. Also, provide and use a cleanup function, ExecCleanupTupleRouting, instead of cleaning up all of the resources allocated by ExecSetupPartitionTupleRouting individually. Amit Khandekar, reviewed by Amit Langote, David Rowley, and me Discussion: http://postgr.es/m/CAJ3gD9fWfxgKC+PfJZF3hkgAcNOy-LpfPxVYitDEXKHjeieWQQ@mail.gmail.com
This commit is contained in:
		| @@ -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 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user