Thread: Better formatting of functions in pg_dump

Better formatting of functions in pg_dump

From
Greg Sabino Mullane
Date:
Attached patch puts the "metadata" about a function, especially the
language name, at the top of the CREATE FUNCTION statement, above the
possibly long, multi-line function definition.

--
Greg Sabino Mullane


Attachment

Re: Better formatting of functions in pg_dump

From
Tom Lane
Date:
Greg Sabino Mullane <greg@turnstep.com> writes:
> Attached patch puts the "metadata" about a function, especially the
> language name, at the top of the CREATE FUNCTION statement, above the
> possibly long, multi-line function definition.

Why the random switching between newline-before and newline-after
styles?  Please be consistent.

            regards, tom lane

Re: Better formatting of functions in pg_dump

From
"Greg Sabino Mullane"
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160


>> Attached patch puts the "metadata" about a function, especially the
>> language name, at the top of the CREATE FUNCTION statement, above the
>> possibly long, multi-line function definition.

> Why the random switching between newline-before and newline-after
> styles?  Please be consistent.

I thought they were all "after". On second glance, they still seem
all after?

- --
Greg Sabino Mullane greg@turnstep.com
End Point Corporation
PGP Key: 0x14964AC8 200806122044
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAkhRww0ACgkQvJuQZxSWSshuQwCfYBjBLOVfJziHcyHRM4CNfCaY
gncAoK+CehREYJQdvAXfizZIPjZog4c6
=A+aR
-----END PGP SIGNATURE-----



Re: Better formatting of functions in pg_dump

From
Tom Lane
Date:
"Greg Sabino Mullane" <greg@turnstep.com> writes:
>> Why the random switching between newline-before and newline-after
>> styles?  Please be consistent.

> I thought they were all "after". On second glance, they still seem
> all after?

Oh, my mistake, I had failed to see that the patch was getting rid of
newline-before style in this function.  I think you might have gone
a bit overboard on adding whitespace, but the previous objection is
nonsense, sorry.

            regards, tom lane

Re: Better formatting of functions in pg_dump

From
"Heikki Linnakangas"
Date:
Tom Lane wrote:
> "Greg Sabino Mullane" <greg@turnstep.com> writes:
>>> Why the random switching between newline-before and newline-after
>>> styles?  Please be consistent.
>
>> I thought they were all "after". On second glance, they still seem
>> all after?
>
> Oh, my mistake, I had failed to see that the patch was getting rid of
> newline-before style in this function.  I think you might have gone
> a bit overboard on adding whitespace, but the previous objection is
> nonsense, sorry.

Yeah, I like idea of moving the "metadata" stuff before the function
body, but the whitespace is a bit too much. You can fit
"   LANGUAGE plpgsql IMMUTABLE STRICT SECURITY DEFINER COST 100000" in
on one line without wrapping on a 80 col terminal. And we don't try to
guarantee any specific width anyway, you can get very long lines if the
function has a lot of arguments, for example.

I applied this simpler patch that just moves the "metadata" stuff before
the function body, leaving the whitespace as is (in newline-before style).

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com
*** src/bin/pg_dump/pg_dump.c
--- src/bin/pg_dump/pg_dump.c
***************
*** 6775,6788 **** dumpFunc(Archive *fout, FuncInfo *finfo)
      rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);

      appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcsig);
!     appendPQExpBuffer(q, "RETURNS %s%s\n    %s\n    LANGUAGE %s",
                        (proretset[0] == 't') ? "SETOF " : "",
!                       rettypename,
!                       asPart->data,
!                       fmtId(lanname));
!
      free(rettypename);

      if (provolatile[0] != PROVOLATILE_VOLATILE)
      {
          if (provolatile[0] == PROVOLATILE_IMMUTABLE)
--- 6775,6786 ----
      rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);

      appendPQExpBuffer(q, "CREATE FUNCTION %s ", funcsig);
!     appendPQExpBuffer(q, "RETURNS %s%s",
                        (proretset[0] == 't') ? "SETOF " : "",
!                       rettypename);
      free(rettypename);

+     appendPQExpBuffer(q, "\n    LANGUAGE %s", fmtId(lanname));
      if (provolatile[0] != PROVOLATILE_VOLATILE)
      {
          if (provolatile[0] == PROVOLATILE_IMMUTABLE)
***************
*** 6850,6856 **** dumpFunc(Archive *fout, FuncInfo *finfo)
              appendStringLiteralAH(q, pos, fout);
      }

!     appendPQExpBuffer(q, ";\n");

      ArchiveEntry(fout, finfo->dobj.catId, finfo->dobj.dumpId,
                   funcsig_tag,
--- 6848,6854 ----
              appendStringLiteralAH(q, pos, fout);
      }

!     appendPQExpBuffer(q, "\n    %s;\n", asPart->data);

      ArchiveEntry(fout, finfo->dobj.catId, finfo->dobj.dumpId,
                   funcsig_tag,