constraint-exclusion.patch

text/x-patch

Filename: constraint-exclusion.patch
Type: text/x-patch
Part: 0
Message: OK for ABI break of PlannerInfo in 8.4?

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: context
File+
src/backend/nodes/outfuncs.c 1 0
src/backend/optimizer/plan/planner.c 2 0
src/backend/optimizer/util/plancat.c 4 1
src/include/nodes/relation.h 2 0
Index: src/backend/nodes/outfuncs.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v
retrieving revision 1.384
diff -c -r1.384 outfuncs.c
*** src/backend/nodes/outfuncs.c	28 Mar 2010 22:59:32 -0000	1.384
--- src/backend/nodes/outfuncs.c	30 Mar 2010 15:18:27 -0000
***************
*** 1559,1564 ****
--- 1559,1565 ----
  	WRITE_NODE_FIELD(sort_pathkeys);
  	WRITE_FLOAT_FIELD(total_table_pages, "%.0f");
  	WRITE_FLOAT_FIELD(tuple_fraction, "%.4f");
+ 	WRITE_BOOL_FIELD(hasInheritedTarget);
  	WRITE_BOOL_FIELD(hasJoinRTEs);
  	WRITE_BOOL_FIELD(hasHavingQual);
  	WRITE_BOOL_FIELD(hasPseudoConstantQuals);
Index: src/backend/optimizer/plan/planner.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v
retrieving revision 1.266
diff -c -r1.266 planner.c
*** src/backend/optimizer/plan/planner.c	26 Feb 2010 02:00:45 -0000	1.266
--- src/backend/optimizer/plan/planner.c	30 Mar 2010 15:18:27 -0000
***************
*** 307,312 ****
--- 307,313 ----
  	root->eq_classes = NIL;
  	root->append_rel_list = NIL;
  	root->rowMarks = NIL;
+ 	root->hasInheritedTarget = false;
  
  	root->hasRecursion = hasRecursion;
  	if (hasRecursion)
***************
*** 749,754 ****
--- 750,756 ----
  			adjust_appendrel_attrs((Node *) parse,
  								   appinfo);
  		subroot.init_plans = NIL;
+ 		subroot.hasInheritedTarget = true;
  		/* We needn't modify the child's append_rel_list */
  		/* There shouldn't be any OJ info to translate, as yet */
  		Assert(subroot.join_info_list == NIL);
Index: src/backend/optimizer/util/plancat.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v
retrieving revision 1.162
diff -c -r1.162 plancat.c
*** src/backend/optimizer/util/plancat.c	5 Jan 2010 21:53:58 -0000	1.162
--- src/backend/optimizer/util/plancat.c	30 Mar 2010 15:18:27 -0000
***************
*** 580,586 ****
  	/* Skip the test if constraint exclusion is disabled for the rel */
  	if (constraint_exclusion == CONSTRAINT_EXCLUSION_OFF ||
  		(constraint_exclusion == CONSTRAINT_EXCLUSION_PARTITION &&
! 		 rel->reloptkind != RELOPT_OTHER_MEMBER_REL))
  		return false;
  
  	/*
--- 580,589 ----
  	/* Skip the test if constraint exclusion is disabled for the rel */
  	if (constraint_exclusion == CONSTRAINT_EXCLUSION_OFF ||
  		(constraint_exclusion == CONSTRAINT_EXCLUSION_PARTITION &&
! 		 !(rel->reloptkind == RELOPT_OTHER_MEMBER_REL ||
! 		   (root->hasInheritedTarget &&
! 			rel->reloptkind == RELOPT_BASEREL &&
! 			rel->relid == root->parse->resultRelation))))
  		return false;
  
  	/*
Index: src/include/nodes/relation.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/nodes/relation.h,v
retrieving revision 1.185
diff -c -r1.185 relation.h
*** src/include/nodes/relation.h	28 Mar 2010 22:59:33 -0000	1.185
--- src/include/nodes/relation.h	30 Mar 2010 15:18:27 -0000
***************
*** 197,202 ****
--- 197,204 ----
  
  	double		tuple_fraction; /* tuple_fraction passed to query_planner */
  
+ 	bool		hasInheritedTarget;	/* true if parse->resultRelation is an
+ 									 * inheritance child rel */
  	bool		hasJoinRTEs;	/* true if any RTEs are RTE_JOIN kind */
  	bool		hasHavingQual;	/* true if havingQual was non-null */
  	bool		hasPseudoConstantQuals; /* true if any RestrictInfo has