Add fastpaths for when no objects are found
authorDaniel Gustafsson <[email protected]>
Wed, 2 Oct 2024 11:08:55 +0000 (13:08 +0200)
committerDaniel Gustafsson <[email protected]>
Wed, 2 Oct 2024 11:08:55 +0000 (13:08 +0200)
If there are no objects found, there is no reason to inspect the
result columns and mallocing a zero-sized  (which will be 1 byte
in reality) heap buffer for it.  Add a fast-path for immediately
returning like how other object inspection functions are already
doing it.

Reviewed-by: Ranier Vilela <[email protected]>
Discussion: https://postgr.es/m/C2F05B3C-1414-45DD-AE09-6FEE4D0F89BD@yesql.se

src/bin/pg_dump/pg_dump.c

index c29a2030af30e9c915492ef90a9a54f3f375db9e..4dfb7d1abe4dbeeaf40d83f65d537e29bd542db7 100644 (file)
@@ -4314,6 +4314,9 @@ getPublications(Archive *fout)
 
    ntups = PQntuples(res);
 
+   if (ntups == 0)
+       goto cleanup;
+
    i_tableoid = PQfnumber(res, "tableoid");
    i_oid = PQfnumber(res, "oid");
    i_pubname = PQfnumber(res, "pubname");
@@ -4352,6 +4355,8 @@ getPublications(Archive *fout)
        /* Decide whether we want to dump it */
        selectDumpableObject(&(pubinfo[i].dobj), fout);
    }
+
+cleanup:
    PQclear(res);
 
    destroyPQExpBuffer(query);
@@ -5817,7 +5822,7 @@ getExtensions(Archive *fout, int *numExtensions)
    int         ntups;
    int         i;
    PQExpBuffer query;
-   ExtensionInfo *extinfo;
+   ExtensionInfo *extinfo = NULL;
    int         i_tableoid;
    int         i_oid;
    int         i_extname;
@@ -5837,6 +5842,8 @@ getExtensions(Archive *fout, int *numExtensions)
    res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
 
    ntups = PQntuples(res);
+   if (ntups == 0)
+       goto cleanup;
 
    extinfo = (ExtensionInfo *) pg_malloc(ntups * sizeof(ExtensionInfo));
 
@@ -5866,6 +5873,7 @@ getExtensions(Archive *fout, int *numExtensions)
        selectDumpableExtension(&(extinfo[i]), dopt);
    }
 
+cleanup:
    PQclear(res);
    destroyPQExpBuffer(query);