Re: Add YAML option to explain

Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp>

From: Itagaki Takahiro <itagaki.takahiro@oss.ntt.co.jp>
To: Greg Sabino Mullane <greg@turnstep.com>
Cc: pgsql-hackers@postgresql.org
Date: 2009-11-16T03:15:48Z
Lists: pgsql-hackers

Attachments

Greg Sabino Mullane <greg@turnstep.com> wrote:

> On 08/28/2009 02:16 PM, Greg Sabino Mullane wrote:
> > Attached patch adds YAML output option to explain:
> > explain (format YAML) select * from information_schema.columns;
> 
> Updated version of the patch attached, fixes two small errors.

I've reviewed your patch. I had a trouble on assertion failure.
Maybe es->indent-- in ExplainEndOutput() is wrong.

  TRAP: FailedAssertion("!(es.indent == 0)", File: "explain.c", Line: 198)
  LOG:  server process (PID 28750) was terminated by signal 6: Aborted

Second issue is a linebreak at the first line of yaml list.
Can we remove the linebreak between '-' and 'Plan' ?

  =# EXPLAIN (format yaml) SELECT * FROM pgbench_accounts;
               QUERY PLAN
  -------------------------------------
   -
     Plan:
       Node Type: Seq Scan
       Relation Name: pgbench_accounts
  ...

I tried to fix the above issues in the attached v3 patch. I also rewrite
grouping_stack field in ExplainState into a *real* stack variable using
ExplainStateStack struct. 

Other changes are only for minor cleanup:
 - Normalize "es->indent * 2" and "2 * es->indent".
 - Adjust posisions of '{' and '}'.
 - Rewrite if-expressions to strchr().

My rewrite is relatively large. Please reversely-review the patch.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center