]> granicus.if.org Git - postgresql/commitdiff
Tighten coding in samekeys(). Pretty braindead change,
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Feb 1999 04:20:50 +0000 (04:20 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Feb 1999 04:20:50 +0000 (04:20 +0000)
but it saves almost 10% of the runtime in Charles Hornberger's optimizer
example, so what the heck ...

src/backend/optimizer/util/keys.c

index 3e2372339d3f0bd1db7abf86a09f5e1bf7a800b0..685e01cbafdd4dd5ba5e21fe5a85f7803eda8e38 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.9 1998/09/01 04:30:07 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.10 1999/02/01 04:20:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -120,16 +120,20 @@ extract_subkey(JoinKey *jk, int which_subkey)
 bool
 samekeys(List *keys1, List *keys2)
 {
-       bool            allmember = true;
        List       *key1,
                           *key2;
 
        for (key1 = keys1, key2 = keys2; key1 != NIL && key2 != NIL;
                 key1 = lnext(key1), key2 = lnext(key2))
                if (!member(lfirst(key1), lfirst(key2)))
-                       allmember = false;
-
-       if ((length(keys2) >= length(keys1)) && allmember)
+                       return false;
+
+       /* Now the result should be true if list keys2 has at least as many
+        * entries as keys1, ie, we did not fall off the end of keys2 first.
+        * If key1 is now NIL then we hit the end of keys1 before or at the
+        * same time as the end of keys2.
+        */
+       if (key1 == NIL)
                return true;
        else
                return false;