Skip to content

Commit bf8f92b

Browse files
committed
Add support for IS_UNKNOWN and IS_NOT_UNKNOWN; fix whitespace
1 parent bcb1e55 commit bf8f92b

File tree

1 file changed

+35
-28
lines changed

1 file changed

+35
-28
lines changed

src/query.c

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,29 @@
1616

1717
void extractClauseFromOpExpr(
1818
#if PG_VERSION_NUM >= 140000
19-
PlannerInfo *root,
19+
PlannerInfo *root,
2020
#endif
21-
Relids base_relids,
22-
OpExpr *node,
23-
List **quals);
21+
Relids base_relids,
22+
OpExpr *node,
23+
List **quals);
2424

2525
void extractClauseFromNullTest(Relids base_relids,
2626
NullTest *node,
2727
List **quals);
2828

2929
void extractClauseFromScalarArrayOpExpr(
3030
#if PG_VERSION_NUM >= 140000
31-
PlannerInfo *root,
31+
PlannerInfo *root,
3232
#endif
33-
Relids base_relids,
34-
ScalarArrayOpExpr *node,
35-
List **quals);
33+
Relids base_relids,
34+
ScalarArrayOpExpr *node,
35+
List **quals);
3636

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

3939
void extractClauseFromVar(
4040
#if PG_VERSION_NUM >= 140000
41-
PlannerInfo *root,
41+
PlannerInfo *root,
4242
#endif
4343
Relids base_relids, Var *node, List **quals);
4444

@@ -333,12 +333,12 @@ extractRestrictions(
333333
break;
334334

335335
case T_Var:
336-
extractClauseFromVar(
336+
extractClauseFromVar(
337337
#if PG_VERSION_NUM >= 140000
338338
(PlannerInfo *) root,
339339
#endif
340340
base_relids, (Var *) node, quals);
341-
break;
341+
break;
342342

343343
default:
344344
{
@@ -364,9 +364,9 @@ extractRestrictions(
364364
void
365365
extractClauseFromOpExpr(
366366
#if PG_VERSION_NUM >= 140000
367-
PlannerInfo *root,
367+
PlannerInfo *root,
368368
#endif
369-
Relids base_relids, OpExpr *op, List **quals)
369+
Relids base_relids, OpExpr *op, List **quals)
370370
{
371371
Var *left;
372372
Expr *right;
@@ -399,11 +399,11 @@ extractClauseFromOpExpr(
399399
void
400400
extractClauseFromScalarArrayOpExpr(
401401
#if PG_VERSION_NUM >= 140000
402-
PlannerInfo *root,
402+
PlannerInfo *root,
403403
#endif
404-
Relids base_relids,
405-
ScalarArrayOpExpr *op,
406-
List **quals)
404+
Relids base_relids,
405+
ScalarArrayOpExpr *op,
406+
List **quals)
407407
{
408408
Var *left;
409409
Expr *right;
@@ -417,9 +417,9 @@ extractClauseFromScalarArrayOpExpr(
417417
if (!(contain_volatile_functions((Node *) right) ||
418418
bms_is_subset(base_relids, pull_varnos(
419419
#if PG_VERSION_NUM >= 140000
420-
root,
420+
root,
421421
#endif
422-
(Node *) right))))
422+
(Node *) right))))
423423

424424
{
425425
*quals = lappend(*quals, makeQual(left->varattno,
@@ -468,7 +468,7 @@ extractClauseFromNullTest(Relids base_relids,
468468
}
469469

470470
/*
471-
* Convert a "BoolExpr" (IS TRUE, IS FALSE, IS NOT TRUE, IS NOT FALSE)
471+
* Convert a "BooleanTest" (IS TRUE, IS FALSE, IS NOT TRUE, IS NOT FALSE)
472472
* to the corresponding qualifier.
473473
*/
474474
void extractClauseFromBooleanTest(Relids base_relids, BooleanTest *node, List **quals)
@@ -503,8 +503,15 @@ void extractClauseFromBooleanTest(Relids base_relids, BooleanTest *node, List **
503503
opname = "IS NOT";
504504
val = (Expr *) makeConst(BOOLOID, -1, InvalidOid, sizeof(bool), BoolGetDatum(true), false, true);
505505
break;
506+
case IS_UNKNOWN:
507+
opname = "IS";
508+
val = (Expr *) makeConst(BOOLOID, -1, InvalidOid, sizeof(bool), (Datum)0, true, true);
509+
break;
510+
case IS_NOT_UNKNOWN:
511+
opname = "IS NOT";
512+
val = (Expr *) makeConst(BOOLOID, -1, InvalidOid, sizeof(bool), (Datum)0, true, true);
513+
break;
506514
default:
507-
/* IS UNKNOWN, IS NOT UNKNOWN */
508515
elog(ERROR, "unsupported boolean test type %d", node->booltesttype);
509516
}
510517
result = makeQual(var->varattno, opname,
@@ -515,18 +522,18 @@ void extractClauseFromBooleanTest(Relids base_relids, BooleanTest *node, List **
515522

516523
void extractClauseFromVar(
517524
#if PG_VERSION_NUM >= 140000
518-
PlannerInfo *root,
525+
PlannerInfo *root,
519526
#endif
520527
Relids base_relids, Var *var, List **quals)
521528
{
522529
MulticornBaseQual *result;
523530
Expr *true_expr;
524-
if (!bms_is_subset(pull_varnos(
531+
if (!bms_is_subset(pull_varnos(
525532
#if PG_VERSION_NUM >= 140000
526533
root,
527534
#endif
528535
(Node *) var), base_relids)) {
529-
return;
536+
return;
530537
}
531538

532539
true_expr = (Expr *) makeConst(BOOLOID, // Type OID for boolean
@@ -538,7 +545,7 @@ void extractClauseFromVar(
538545
true); // constbyval
539546

540547
result = makeQual(var->varattno, "=", true_expr, false, false);
541-
*quals = lappend(*quals, result);
548+
*quals = lappend(*quals, result);
542549
}
543550

544551
/*
@@ -577,21 +584,21 @@ makeQual(AttrNumber varattno, char *opname, Expr *value, bool isarray,
577584
switch (value->type)
578585
{
579586
case T_Const:
580-
elog(DEBUG3, "T_Const");
587+
elog(DEBUG3, "T_Const");
581588
qual = palloc0(sizeof(MulticornConstQual));
582589
qual->right_type = T_Const;
583590
qual->typeoid = ((Const *) value)->consttype;
584591
((MulticornConstQual *) qual)->value = ((Const *) value)->constvalue;
585592
((MulticornConstQual *) qual)->isnull = ((Const *) value)->constisnull;
586593
break;
587594
case T_Var:
588-
elog(DEBUG3, "T_Var");
595+
elog(DEBUG3, "T_Var");
589596
qual = palloc0(sizeof(MulticornVarQual));
590597
qual->right_type = T_Var;
591598
((MulticornVarQual *) qual)->rightvarattno = ((Var *) value)->varattno;
592599
break;
593600
default:
594-
elog(DEBUG3, "default");
601+
elog(DEBUG3, "default");
595602
qual = palloc0(sizeof(MulticornParamQual));
596603
qual->right_type = T_Param;
597604
((MulticornParamQual *) qual)->expr = value;

0 commit comments

Comments
 (0)