aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/util/clauses.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/util/clauses.c')
-rw-r--r--src/backend/optimizer/util/clauses.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 322aeba1ce3..f9906cffc04 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.45 1999/08/10 03:00:15 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.46 1999/08/12 04:32:54 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -666,38 +666,39 @@ get_rels_atts(Node *clause,
*--------------------
*/
void
-CommuteClause(Node *clause)
+CommuteClause(Expr *clause)
{
- Node *temp;
- Oper *commu;
- Form_pg_operator commuTup;
HeapTuple heapTup;
+ Form_pg_operator commuTup;
+ Oper *commu;
+ Node *temp;
- if (!is_opclause(clause))
- elog(ERROR, "CommuteClause: applied to non-operator clause");
+ if (!is_opclause((Node *) clause) ||
+ length(clause->args) != 2)
+ elog(ERROR, "CommuteClause: applied to non-binary-operator clause");
heapTup = (HeapTuple)
- get_operator_tuple(get_commutator(((Oper *) ((Expr *) clause)->oper)->opno));
+ get_operator_tuple(get_commutator(((Oper *) clause->oper)->opno));
if (heapTup == (HeapTuple) NULL)
elog(ERROR, "CommuteClause: no commutator for operator %u",
- ((Oper *) ((Expr *) clause)->oper)->opno);
+ ((Oper *) clause->oper)->opno);
commuTup = (Form_pg_operator) GETSTRUCT(heapTup);
commu = makeOper(heapTup->t_data->t_oid,
commuTup->oprcode,
commuTup->oprresult,
- ((Oper *) ((Expr *) clause)->oper)->opsize,
+ ((Oper *) clause->oper)->opsize,
NULL);
/*
* re-form the clause in-place!
*/
- ((Expr *) clause)->oper = (Node *) commu;
- temp = lfirst(((Expr *) clause)->args);
- lfirst(((Expr *) clause)->args) = lsecond(((Expr *) clause)->args);
- lsecond(((Expr *) clause)->args) = temp;
+ clause->oper = (Node *) commu;
+ temp = lfirst(clause->args);
+ lfirst(clause->args) = lsecond(clause->args);
+ lsecond(clause->args) = temp;
}