77 elog(
ERROR,
"can't negate an empty subexpression");
103 newopexpr->
opno = negator;
105 newopexpr->opresulttype = opexpr->opresulttype;
106 newopexpr->opretset = opexpr->opretset;
107 newopexpr->opcollid = opexpr->opcollid;
108 newopexpr->inputcollid = opexpr->inputcollid;
111 return (
Node *) newopexpr;
115 case T_ScalarArrayOpExpr:
128 newopexpr->
opno = negator;
133 newopexpr->inputcollid = saopexpr->inputcollid;
136 return (
Node *) newopexpr;
166 foreach(lc, expr->
args)
179 foreach(lc, expr->
args)
217 newexpr->argisrow = expr->argisrow;
219 return (
Node *) newexpr;
250 elog(
ERROR,
"unrecognized booltesttype: %d",
255 return (
Node *) newexpr;
329 foreach(
arg, andlist)
337 out_list =
lappend(out_list, subexpr);
363 out_list =
lappend(out_list, subexpr);
429 if (!carg->constisnull && !
DatumGetBool(carg->constvalue))
437 if (carg->constisnull || !
DatumGetBool(carg->constvalue))
473 if (carg->constisnull ||
DatumGetBool(carg->constvalue))
481 if (!carg->constisnull &&
DatumGetBool(carg->constvalue))
521 int num_subclauses = 0;
540 foreach(temp, orlist)
549 if (reference ==
NIL || nclauses < num_subclauses)
551 reference = subclauses;
552 num_subclauses = nclauses;
572 foreach(temp, reference)
578 foreach(temp2, orlist)
592 if (!
equal(refclause, clause))
601 winners =
lappend(winners, refclause);
621 foreach(temp, orlist)
630 if (subclauses !=
NIL)
646 neworlist =
lappend(neworlist, clause);
661 if (neworlist !=
NIL)
elog(ERROR, "%s: %s", p2, msg)
bool equal(const void *a, const void *b)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * list_union(const List *list1, const List *list2)
List * lappend(List *list, void *datum)
List * list_concat(List *list1, const List *list2)
bool list_member(const List *list, const void *datum)
List * list_difference(const List *list1, const List *list2)
Oid get_negator(Oid opno)
Expr * make_notclause(Expr *notclause)
Expr * make_andclause(List *andclauses)
Node * makeBoolConst(bool value, bool isnull)
Expr * make_orclause(List *orclauses)
static bool is_andclause(const void *clause)
static bool is_orclause(const void *clause)
#define IsA(nodeptr, _type_)
static int list_length(const List *l)
static bool DatumGetBool(Datum X)
static Expr * process_duplicate_ors(List *orlist)
static List * pull_ors(List *orlist)
Node * negate_clause(Node *node)
static List * pull_ands(List *andlist)
static Expr * find_duplicate_ors(Expr *qual, bool is_check)
Expr * canonicalize_qual(Expr *qual, bool is_check)
BoolTestType booltesttype
NullTestType nulltesttype