Skip to content

Commit 5ec517b

Browse files
committed
Add support for NOT Var
1 parent bf8f92b commit 5ec517b

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/query.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ void extractClauseFromScalarArrayOpExpr(
3636

3737
void extractClauseFromBooleanTest(Relids base_relids, BooleanTest *node, List **quals);
3838

39+
void extractClauseFromBoolExpr(
40+
#if PG_VERSION_NUM >= 140000
41+
PlannerInfo *root,
42+
#endif
43+
Relids base_relids, BoolExpr *node, List **quals);
44+
3945
void extractClauseFromVar(
4046
#if PG_VERSION_NUM >= 140000
4147
PlannerInfo *root,
@@ -340,6 +346,13 @@ extractRestrictions(
340346
base_relids, (Var *) node, quals);
341347
break;
342348

349+
case T_BoolExpr:
350+
extractClauseFromBoolExpr(
351+
#if PG_VERSION_NUM >= 140000
352+
root,
353+
#endif
354+
base_relids, (BoolExpr *) node, quals);
355+
break;
343356
default:
344357
{
345358
ereport(WARNING,
@@ -548,6 +561,35 @@ void extractClauseFromVar(
548561
*quals = lappend(*quals, result);
549562
}
550563

564+
void extractClauseFromBoolExpr(
565+
#if PG_VERSION_NUM >= 140000
566+
PlannerInfo *root,
567+
#endif
568+
Relids base_relids, BoolExpr *bexpr, List **quals)
569+
{
570+
if (!bms_is_subset(pull_varnos(
571+
#if PG_VERSION_NUM >= 140000
572+
root,
573+
#endif
574+
(Node *) bexpr), base_relids)) {
575+
return;
576+
}
577+
578+
if (bexpr->boolop == NOT_EXPR &&
579+
list_length(bexpr->args) == 1 &&
580+
IsA(linitial(bexpr->args), Var)) {
581+
582+
Var *var = (Var *) linitial(bexpr->args);
583+
Expr *true_expr = (Expr *) makeConst(
584+
BOOLOID, -1, InvalidOid, sizeof(bool),
585+
BoolGetDatum(true), false, true);
586+
587+
MulticornBaseQual *result = makeQual(
588+
var->varattno, "<>", true_expr, false, false);
589+
590+
*quals = lappend(*quals, result);
591+
}}
592+
551593
/*
552594
* Returns a "Value" node containing the string name of the column from a var.
553595
*/

0 commit comments

Comments
 (0)