]> granicus.if.org Git - postgresql/commitdiff
When sorting functions in pg_dump, break ties (same name) by number of arguments
authorPeter Eisentraut <peter_e@gmx.net>
Mon, 15 Feb 2010 19:59:47 +0000 (19:59 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Mon, 15 Feb 2010 19:59:47 +0000 (19:59 +0000)
src/bin/pg_dump/pg_dump_sort.c

index 33d29ae1a2a1ca446e71fd20daec9ee06445c0bb..1551af3dbef6d741d54501947d073ee48416e8f8 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump_sort.c,v 1.27 2010/01/02 16:57:59 momjian Exp $
+ *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump_sort.c,v 1.28 2010/02/15 19:59:47 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -163,7 +163,18 @@ DOTypeNameCompare(const void *p1, const void *p2)
        if (cmpval != 0)
                return cmpval;
 
-       /* Probably shouldn't get here, but if we do, sort by OID */
+       /* To have a stable sort order, break ties for some object types */
+    if (obj1->objType == DO_FUNC || obj1->objType == DO_AGG)
+       {
+               FuncInfo *fobj1 = *(FuncInfo **) p1;
+               FuncInfo *fobj2 = *(FuncInfo **) p2;
+
+               cmpval = fobj1->nargs - fobj2->nargs;
+               if (cmpval != 0)
+                       return cmpval;
+       }
+
+       /* Usually shouldn't get here, but if we do, sort by OID */
        return oidcmp(obj1->catId.oid, obj2->catId.oid);
 }