Re: [PATCH] Add pretty-printed XML output option

Nikolay Samokhvalov <samokhvalov@gmail.com>

From: Nikolay Samokhvalov <samokhvalov@gmail.com>
To: Jim Jones <jim.jones@uni-muenster.de>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-02-17T22:24:13Z
Lists: pgsql-hackers
On Fri, Feb 17, 2023 at 1:14 AM Jim Jones <jim.jones@uni-muenster.de> wrote:

> After your comment I'm studying the possibility to extend the existing
> xmlserialize function to add the indentation feature. If so, how do you
> think it should look like? An extra parameter? e.g.
>
> SELECT xmlserialize(DOCUMENT '<foo><bar>42</bar></foo>'::XML AS text,
> true);
>
> .. or more or like Oracle does it
>
> SELECT XMLSERIALIZE(DOCUMENT xmltype('<foo><bar>42</bar></foo>') AS BLOB
> INDENT)
> FROM dual;
>

My idea was to follow the SQL standard (part 14, SQL/XML); unfortunately,
there is no free version, but there are drafts at
http://www.wiscorp.com/SQLStandards.html.

<XML character string serialization> ::=
  XMLSERIALIZE <left paren> [ <document or content> ]

      <XML value expression> AS <data type>
      [ <XML serialize bom> ]
      [ <XML serialize version> ]
      [ <XML declaration option> ]

      [ <XML serialize indent> ]
      <right paren>

<XML serialize indent> ::=
  [ NO ] INDENT


Oracle's extension SIZE=n also seems interesting (including a special case
SIZE=0, which means using new-line characters without spaces for each line).

Commits

  1. Fix memory leak in XMLSERIALIZE(... INDENT).

  2. doc: Move documentation of md5_password_warnings to a better place

  3. Support [NO] INDENT option in XMLSERIALIZE().

  4. Add an expected-file to match behavior of latest libxml2.