77 elog(
ERROR,
"can't negate an empty subexpression");
103 newopexpr->
opno = negator;
111 return (
Node *) newopexpr;
128 newopexpr->
opno = negator;
134 return (
Node *) newopexpr;
164 foreach(lc, expr->
args)
177 foreach(lc, expr->
args)
217 return (
Node *) newexpr;
248 elog(
ERROR,
"unrecognized booltesttype: %d",
253 return (
Node *) newexpr;
327 foreach(arg, andlist)
335 out_list =
lappend(out_list, subexpr);
361 out_list =
lappend(out_list, subexpr);
486 andlist =
lappend(andlist, arg);
519 int num_subclauses = 0;
538 foreach(temp, orlist)
547 if (reference ==
NIL || nclauses < num_subclauses)
549 reference = subclauses;
550 num_subclauses = nclauses;
570 foreach(temp, reference)
576 foreach(temp2, orlist)
590 if (!
equal(refclause, clause))
599 winners =
lappend(winners, refclause);
619 foreach(temp, orlist)
628 if (subclauses !=
NIL)
644 neworlist =
lappend(neworlist, clause);
659 if (neworlist !=
NIL)
Expr * make_notclause(Expr *notclause)
static List * pull_ands(List *andlist)
#define IsA(nodeptr, _type_)
Node * negate_clause(Node *node)
bool equal(const void *a, const void *b)
static bool is_orclause(const void *clause)
static bool is_andclause(const void *clause)
List * list_concat(List *list1, const List *list2)
List * list_union(const List *list1, const List *list2)
Expr * make_orclause(List *orclauses)
static Expr * find_duplicate_ors(Expr *qual, bool is_check)
bool list_member(const List *list, const void *datum)
Node * makeBoolConst(bool value, bool isnull)
Expr * make_andclause(List *andclauses)
Expr * canonicalize_qual(Expr *qual, bool is_check)
List * lappend(List *list, void *datum)
BoolTestType booltesttype
NullTestType nulltesttype
#define Assert(condition)
static int list_length(const List *l)
static List * pull_ors(List *orlist)
List * list_difference(const List *list1, const List *list2)
static Expr * process_duplicate_ors(List *orlist)
Oid get_negator(Oid opno)