*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.251 2007/11/15 21:14:36 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.252 2007/11/22 19:09:23 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
{
OpExpr *expr = (OpExpr *) node;
- if (op_volatile(expr->opno) != PROVOLATILE_IMMUTABLE)
+ set_opfuncid(expr);
+ if (func_volatile(expr->opfuncid) != PROVOLATILE_IMMUTABLE)
return true;
/* else fall through to check args */
}
{
DistinctExpr *expr = (DistinctExpr *) node;
- if (op_volatile(expr->opno) != PROVOLATILE_IMMUTABLE)
+ set_opfuncid((OpExpr *) expr); /* rely on struct equivalence */
+ if (func_volatile(expr->opfuncid) != PROVOLATILE_IMMUTABLE)
return true;
/* else fall through to check args */
}
{
ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) node;
- if (op_volatile(expr->opno) != PROVOLATILE_IMMUTABLE)
+ set_sa_opfuncid(expr);
+ if (func_volatile(expr->opfuncid) != PROVOLATILE_IMMUTABLE)
return true;
/* else fall through to check args */
}
{
NullIfExpr *expr = (NullIfExpr *) node;
- if (op_volatile(expr->opno) != PROVOLATILE_IMMUTABLE)
+ set_opfuncid((OpExpr *) expr); /* rely on struct equivalence */
+ if (func_volatile(expr->opfuncid) != PROVOLATILE_IMMUTABLE)
return true;
/* else fall through to check args */
}
{
OpExpr *expr = (OpExpr *) node;
- if (op_volatile(expr->opno) == PROVOLATILE_VOLATILE)
+ set_opfuncid(expr);
+ if (func_volatile(expr->opfuncid) == PROVOLATILE_VOLATILE)
return true;
/* else fall through to check args */
}
{
DistinctExpr *expr = (DistinctExpr *) node;
- if (op_volatile(expr->opno) == PROVOLATILE_VOLATILE)
+ set_opfuncid((OpExpr *) expr); /* rely on struct equivalence */
+ if (func_volatile(expr->opfuncid) == PROVOLATILE_VOLATILE)
return true;
/* else fall through to check args */
}
{
ScalarArrayOpExpr *expr = (ScalarArrayOpExpr *) node;
- if (op_volatile(expr->opno) == PROVOLATILE_VOLATILE)
+ set_sa_opfuncid(expr);
+ if (func_volatile(expr->opfuncid) == PROVOLATILE_VOLATILE)
return true;
/* else fall through to check args */
}
{
NullIfExpr *expr = (NullIfExpr *) node;
- if (op_volatile(expr->opno) == PROVOLATILE_VOLATILE)
+ set_opfuncid((OpExpr *) expr); /* rely on struct equivalence */
+ if (func_volatile(expr->opfuncid) == PROVOLATILE_VOLATILE)
return true;
/* else fall through to check args */
}
{
OpExpr *expr = (OpExpr *) node;
- if (!op_strict(expr->opno))
+ set_opfuncid(expr);
+ if (!func_strict(expr->opfuncid))
return true;
/* else fall through to check args */
}
{
OpExpr *expr = (OpExpr *) node;
- if (op_strict(expr->opno))
+ set_opfuncid(expr);
+ if (func_strict(expr->opfuncid))
result = find_nonnullable_rels_walker((Node *) expr->args, false);
}
else if (IsA(node, ScalarArrayOpExpr))
Node *rightop;
/* The contained operator must be strict. */
- if (!op_strict(expr->opno))
+ set_sa_opfuncid(expr);
+ if (!func_strict(expr->opfuncid))
return false;
/* If ANY and falseOK, that's all we need to check. */
if (expr->useOr && falseOK)