]> granicus.if.org Git - postgresql/commitdiff
|From: Dan McGuirk <mcguirk@indirect.com>
authorMarc G. Fournier <scrappy@hub.org>
Mon, 19 Aug 1996 01:52:36 +0000 (01:52 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Mon, 19 Aug 1996 01:52:36 +0000 (01:52 +0000)
|
|This patch fixes a backend crash that happens sometimes when you try to
|join on a field that contains NULL in some rows.  Postgres tries to
|compute a hash value of the field you're joining on, but when the field
|is NULL, the pointer it thinks is pointing to the data is really just
|pointing to random memory.  This forces the hash value of NULL to be 0.
|
|It seems that nothing matches NULL on joins, even other NULL's (with or
|without this patch).  Is that what's supposed to happen?
|

src/backend/executor/nodeHash.c

index 9ea00ed2371c857cf70b41bb4a92edf5524d9bab..6a476bac59ee56c5d5557aab37e64ca001e9341e 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.3 1996/07/26 20:03:21 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.4 1996/08/19 01:52:36 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -527,6 +527,16 @@ ExecHashGetBucket(HashJoinTable hashtable,
      */
     keyval = ExecEvalVar(hashkey, econtext, &isNull);
     
+    /*
+     * keyval could be null, so we better point it to something
+     * valid before trying to run hashFunc on it. --djm 8/17/96
+     */
+    if(isNull) {
+       execConstByVal = 0;
+       execConstLen = 0;
+       keyval = (Datum)"";
+    }
+
     /* ------------------
      *  compute the hash function
      * ------------------