]> granicus.if.org Git - postgresql/commitdiff
Fix for Hash and arrays
authorVadim B. Mikheev <vadim4o@yahoo.com>
Tue, 22 Apr 1997 03:32:38 +0000 (03:32 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Tue, 22 Apr 1997 03:32:38 +0000 (03:32 +0000)
src/backend/executor/execQual.c
src/backend/executor/nodeHash.c
src/backend/optimizer/plan/createplan.c

index 7e9d6f0bace535b0c6f7154c4ee1351bfcfbf7da..9d943368a34f069f72df25c1754f6100708b56ab 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.10 1997/01/10 20:17:31 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.11 1997/04/22 03:32:35 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -98,7 +98,6 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
     int        *lIndex;
     char *dataPtr;
     
-    execConstByVal = arrayRef->refelembyval;
     *isNull       =    false; 
     array_scanner =    (ArrayType*)ExecEvalExpr(arrayRef->refexpr,
                                             econtext,
@@ -138,6 +137,8 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
                                      assgnexpr, econtext,
                                      isNull, &dummy);
        if (*isNull) return (Datum)NULL;
+       execConstByVal = arrayRef->refelembyval;
+       execConstLen = arrayRef->refelemlength;
        if (lIndex == NULL)
            return (Datum) array_set(array_scanner, i, upper.indx, dataPtr, 
                                     arrayRef->refelembyval,
@@ -149,6 +150,8 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
                                   arrayRef->refelembyval,
                                   arrayRef->refelemlength, isNull);
     }
+    execConstByVal = arrayRef->refelembyval;
+    execConstLen = arrayRef->refelemlength;
     if (lIndex == NULL) 
        return (Datum) array_ref(array_scanner, i, upper.indx,
                                 arrayRef->refelembyval,
index e3b004c0a29bbad709136dadb485b2a9899dc061..c71c3a3f4400cbfa4f6fdd23a35c5ab41ec591d3 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.7 1996/11/06 06:47:40 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.8 1997/04/22 03:32:38 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -536,8 +536,10 @@ ExecHashGetBucket(HashJoinTable hashtable,
     /* ----------------
      * Get the join attribute value of the tuple
      * ----------------
+     * ...It's quick hack - use ExecEvalExpr instead of ExecEvalVar:
+     * hashkey may be T_ArrayRef, not just T_Var.      - vadim 04/22/97
      */
-    keyval = ExecEvalVar(hashkey, econtext, &isNull);
+    keyval = ExecEvalExpr((Node*)hashkey, econtext, &isNull, NULL);
     
     /*
      * keyval could be null, so we better point it to something
index 2783e3917f42523e1d864218c0f7d0d207cb75f2..c56cc61c80542cfa40e54db79f9800048b47762c 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.9 1997/03/18 18:40:05 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.10 1997/04/22 03:30:36 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -734,10 +734,16 @@ switch_outer(List *clauses)
     Expr *temp = NULL;
     List *i = NIL;
     Expr *clause;
+    Node *op;
 
     foreach(i,clauses) {
        clause = lfirst(i);
-       if(var_is_outer(get_rightop(clause))) {
+       op = (Node*)get_rightop(clause);
+       if ( IsA (op, ArrayRef) )
+           op = ((ArrayRef*)op)->refexpr;
+       Assert ( IsA (op, Var) );
+       if ( var_is_outer ((Var*)op) )
+       {
            temp = make_clause(clause->opType, clause->oper,
                               lcons(get_rightop(clause),
                                    lcons(get_leftop(clause),