diff options
Diffstat (limited to 'src/backend/optimizer/util')
| -rw-r--r-- | src/backend/optimizer/util/clauses.c | 40 | 
1 files changed, 23 insertions, 17 deletions
| diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 65e71456360..22d93b26e7b 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.71 2000/08/13 02:50:10 tgl Exp $ + *	  $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.72 2000/08/21 17:22:34 tgl Exp $   *   * HISTORY   *	  AUTHOR			DATE			MAJOR EVENT @@ -353,7 +353,7 @@ make_ands_implicit(Expr *clause)  		return clause->args;  	else if (IsA(clause, Const) &&  			 !((Const *) clause)->constisnull && -			 DatumGetInt32(((Const *) clause)->constvalue)) +			 DatumGetBool(((Const *) clause)->constvalue))  		return NIL;				/* constant TRUE input -> NIL list */  	else  		return lcons(clause, NIL); @@ -1111,12 +1111,15 @@ eval_const_expressions_mutator(Node *node, void *context)  			case OR_EXPR:  				{ -					/* -					 * OR arguments are handled as follows: non constant: -					 * keep FALSE: drop (does not affect result) TRUE: -					 * force result to TRUE NULL: keep only one We keep -					 * one NULL input because ExecEvalOr returns NULL when -					 * no input is TRUE and at least one is NULL. +					/*---------- +					 * OR arguments are handled as follows: +					 *	non constant: keep +					 *	FALSE: drop (does not affect result) +					 *	TRUE: force result to TRUE +					 *	NULL: keep only one +					 * We keep one NULL input because ExecEvalOr returns NULL +					 * when no input is TRUE and at least one is NULL. +					 *----------  					 */  					List	   *newargs = NIL;  					List	   *arg; @@ -1133,7 +1136,7 @@ eval_const_expressions_mutator(Node *node, void *context)  						const_input = (Const *) lfirst(arg);  						if (const_input->constisnull)  							haveNull = true; -						else if (DatumGetInt32(const_input->constvalue)) +						else if (DatumGetBool(const_input->constvalue))  							forceTrue = true;  						/* otherwise, we can drop the constant-false input */  					} @@ -1161,12 +1164,15 @@ eval_const_expressions_mutator(Node *node, void *context)  			case AND_EXPR:  				{ -					/* -					 * AND arguments are handled as follows: non constant: -					 * keep TRUE: drop (does not affect result) FALSE: -					 * force result to FALSE NULL: keep only one We keep -					 * one NULL input because ExecEvalAnd returns NULL +					/*---------- +					 * AND arguments are handled as follows: +					 *	non constant: keep +					 *	TRUE: drop (does not affect result) +					 *	FALSE: force result to FALSE +					 *	NULL: keep only one +					 * We keep one NULL input because ExecEvalAnd returns NULL  					 * when no input is FALSE and at least one is NULL. +					 *----------  					 */  					List	   *newargs = NIL;  					List	   *arg; @@ -1183,7 +1189,7 @@ eval_const_expressions_mutator(Node *node, void *context)  						const_input = (Const *) lfirst(arg);  						if (const_input->constisnull)  							haveNull = true; -						else if (!DatumGetInt32(const_input->constvalue)) +						else if (!DatumGetBool(const_input->constvalue))  							forceFalse = true;  						/* otherwise, we can drop the constant-true input */  					} @@ -1217,7 +1223,7 @@ eval_const_expressions_mutator(Node *node, void *context)  				if (const_input->constisnull)  					return MAKEBOOLCONST(false, true);  				/* otherwise pretty easy */ -				return MAKEBOOLCONST(!DatumGetInt32(const_input->constvalue), +				return MAKEBOOLCONST(!DatumGetBool(const_input->constvalue),  									 false);  			case SUBPLAN_EXPR: @@ -1330,7 +1336,7 @@ eval_const_expressions_mutator(Node *node, void *context)  			}  			const_input = (Const *) casewhen->expr;  			if (const_input->constisnull || -				!DatumGetInt32(const_input->constvalue)) +				!DatumGetBool(const_input->constvalue))  				continue;		/* drop alternative with FALSE condition */  			/* | 
