mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix possible crash in partition-wise join.
The previous code assumed that we'd always succeed in creating child-joins for a joinrel for which partition-wise join was considered, but that's not guaranteed, at least in the case where dummy rels are involved. Ashutosh Bapat, with some wordsmithing by me. Discussion: http://postgr.es/m/CAFjFpRf8=uyMYYfeTBjWDMs1tR5t--FgOe2vKZPULxxdYQ4RNw@mail.gmail.com
This commit is contained in:
		@@ -666,13 +666,17 @@ typedef struct RelOptInfo
 | 
			
		||||
/*
 | 
			
		||||
 * Is given relation partitioned?
 | 
			
		||||
 *
 | 
			
		||||
 * A join between two partitioned relations with same partitioning scheme
 | 
			
		||||
 * without any matching partitions will not have any partition in it but will
 | 
			
		||||
 * have partition scheme set. So a relation is deemed to be partitioned if it
 | 
			
		||||
 * has a partitioning scheme, bounds and positive number of partitions.
 | 
			
		||||
 * It's not enough to test whether rel->part_scheme is set, because it might
 | 
			
		||||
 * be that the basic partitioning properties of the input relations matched
 | 
			
		||||
 * but the partition bounds did not.
 | 
			
		||||
 *
 | 
			
		||||
 * We treat dummy relations as unpartitioned.  We could alternatively
 | 
			
		||||
 * treat them as partitioned, but it's not clear whether that's a useful thing
 | 
			
		||||
 * to do.
 | 
			
		||||
 */
 | 
			
		||||
#define IS_PARTITIONED_REL(rel) \
 | 
			
		||||
	((rel)->part_scheme && (rel)->boundinfo && (rel)->nparts > 0)
 | 
			
		||||
	((rel)->part_scheme && (rel)->boundinfo && (rel)->nparts > 0 && \
 | 
			
		||||
	 (rel)->part_rels && !(IS_DUMMY_REL(rel)))
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Convenience macro to make sure that a partitioned relation has all the
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user