mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Add support for Case exprs to fix_indxqual_references,
so that Case works in WHERE join clauses. Temporary patch --- this routine is one of many that ought to be changed to use centralized expression-tree- walking logic.
This commit is contained in:
		@@ -7,7 +7,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.64 1999/07/27 03:51:03 tgl Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.65 1999/07/29 02:48:05 tgl Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
@@ -740,6 +740,37 @@ fix_indxqual_references(Node *clause, Path *index_path)
 | 
			
		||||
 | 
			
		||||
		return (Node *) newnode;
 | 
			
		||||
	}
 | 
			
		||||
	else if (IsA(clause, CaseExpr))
 | 
			
		||||
	{
 | 
			
		||||
		CaseExpr   *oldnode = (CaseExpr *) clause;
 | 
			
		||||
		CaseExpr   *newnode = makeNode(CaseExpr);
 | 
			
		||||
 | 
			
		||||
		newnode->casetype = oldnode->casetype;
 | 
			
		||||
		newnode->arg = oldnode->arg;	/* XXX should always be null
 | 
			
		||||
										 * anyway ... */
 | 
			
		||||
		newnode->args = (List *)
 | 
			
		||||
			fix_indxqual_references((Node *) oldnode->args,
 | 
			
		||||
									index_path);
 | 
			
		||||
		newnode->defresult =
 | 
			
		||||
			fix_indxqual_references(oldnode->defresult,
 | 
			
		||||
									index_path);
 | 
			
		||||
 | 
			
		||||
		return (Node *) newnode;
 | 
			
		||||
	}
 | 
			
		||||
	else if (IsA(clause, CaseWhen))
 | 
			
		||||
	{
 | 
			
		||||
		CaseWhen   *oldnode = (CaseWhen *) clause;
 | 
			
		||||
		CaseWhen   *newnode = makeNode(CaseWhen);
 | 
			
		||||
 | 
			
		||||
		newnode->expr =
 | 
			
		||||
			fix_indxqual_references(oldnode->expr,
 | 
			
		||||
									index_path);
 | 
			
		||||
		newnode->result =
 | 
			
		||||
			fix_indxqual_references(oldnode->result,
 | 
			
		||||
									index_path);
 | 
			
		||||
 | 
			
		||||
		return (Node *) newnode;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		elog(ERROR, "fix_indxqual_references: Cannot handle node type %d",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user