diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-09-22 04:19:36 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-09-22 04:19:36 +0000 |
commit | e7046924a5220561bfb4c0335c4d3db7a55e858d (patch) | |
tree | 653cba94ba217d82087592833f59f771a9f46998 /src/backend/executor/execQual.c | |
parent | c2c26b6ff05153daf10b208668ec667adf847db0 (diff) | |
download | postgresql-e7046924a5220561bfb4c0335c4d3db7a55e858d.tar.gz postgresql-e7046924a5220561bfb4c0335c4d3db7a55e858d.zip |
Fix: Operand Order Affects OR.
where x <> 1 or x isnull
didn't return tuples with x NULL.
Diffstat (limited to 'src/backend/executor/execQual.c')
-rw-r--r-- | src/backend/executor/execQual.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 2f351276d4b..4d96bdb0ada 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.17 1997/09/12 04:07:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.18 1997/09/22 04:19:36 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -1044,7 +1044,22 @@ ExecEvalOr(Expr *orExpr, ExprContext *econtext, bool *isNull) * ---------------- */ if (*isNull) + { IsNull = *isNull; + /* + * Many functions don't (or can't!) check is an argument + * NULL or NOT_NULL and may return TRUE (1) with *isNull TRUE + * (an_int4_column <> 1: int4ne returns TRUE for NULLs). + * Not having time to fix function manager I want to fix + * OR: if we had 'x <> 1 OR x isnull' then TRUE, TRUE were + * returned by 'x <> 1' for NULL ... but ExecQualClause say + * that qualification *fails* if isnull is TRUE for all values + * returned by ExecEvalExpr. So, force this rule here: if isnull + * is TRUE then clause failed. Note: nullvalue() & nonnullvalue() + * always set isnull to FALSE for NULLs. - vadim 09/22/97 + */ + const_value = 0; + } /* ---------------- * if we have a true result, then we return it. |