diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-10-30 06:08:10 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-10-30 06:08:10 +0000 |
commit | 69c7f25bed1a3dc1a8343b60411d8d9884cfc956 (patch) | |
tree | 16290a2df854c8be1a36651b51f79ed17755594d /src/backend/access/common/indexvalid.c | |
parent | 6ada9dfdce546a59ffdc9ab0104c2d2b6b8c5275 (diff) | |
download | postgresql-69c7f25bed1a3dc1a8343b60411d8d9884cfc956.tar.gz postgresql-69c7f25bed1a3dc1a8343b60411d8d9884cfc956.zip |
Fixes:
I found another bug in btree index. Looking at the code it seems that NULL
keys are never used to build or scan a btree index (see the explain commands
in the example). However this is not the case when a null key is retrieved
in an outer loop of a join select and used in an index scan of an inner loop.
This bug causes at least three kinds of problems:
1) the backend crashes when it tries to compare a text string with a null.
2) it is not possible to find tuples with null keys in a join.
3) null is considered equal to 0 when the datum is passed by value, see
the last query.
Submitted by: Massimo Dal Zotto <dz@cs.unitn.it>
Diffstat (limited to 'src/backend/access/common/indexvalid.c')
-rw-r--r-- | src/backend/access/common/indexvalid.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/access/common/indexvalid.c b/src/backend/access/common/indexvalid.c index b5854db5697..23b3437460f 100644 --- a/src/backend/access/common/indexvalid.c +++ b/src/backend/access/common/indexvalid.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/Attic/indexvalid.c,v 1.6 1996/10/21 11:49:38 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/Attic/indexvalid.c,v 1.7 1996/10/30 06:07:55 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -68,6 +68,10 @@ index_keytest(IndexTuple tuple, return (false); } + if (key[0].sk_flags & SK_ISNULL) { + return (false); + } + if (key[0].sk_flags & SK_COMMUTE) { test = (int) (*(key[0].sk_func)) (DatumGetPointer(key[0].sk_argument), |