Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit324385d

Browse files
committed
Add YAML to list of EXPLAIN formats. Greg Sabino Mullane, reviewed by Takahiro Itagaki.
1 parentdb73861 commit324385d

File tree

6 files changed

+115
-12
lines changed

6 files changed

+115
-12
lines changed

‎contrib/auto_explain/auto_explain.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Copyright (c) 2008-2009, PostgreSQL Global Development Group
77
*
88
* IDENTIFICATION
9-
* $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.7 2009/08/10 05:46:49 tgl Exp $
9+
* $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.8 2009/12/11 01:33:35 adunstan Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -29,6 +29,7 @@ static const struct config_enum_entry format_options[] = {
2929
{"text",EXPLAIN_FORMAT_TEXT, false},
3030
{"xml",EXPLAIN_FORMAT_XML, false},
3131
{"json",EXPLAIN_FORMAT_JSON, false},
32+
{"yaml",EXPLAIN_FORMAT_YAML, false},
3233
{NULL,0, false}
3334
};
3435

‎doc/src/sgml/auto-explain.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.4 2009/08/10 05:46:50 tgl Exp $ -->
1+
<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.5 2009/12/11 01:33:35 adunstan Exp $ -->
22

33
<sect1 id="auto-explain">
44
<title>auto_explain</title>
@@ -114,7 +114,7 @@ LOAD 'auto_explain';
114114
<varname>auto_explain.log_format</varname> selects the
115115
<command>EXPLAIN</> output format to be used.
116116
The allowed values are <literal>text</literal>, <literal>xml</literal>,
117-
and <literal>json</literal>. The default is text.
117+
<literal>json</literal>,and <literal>yaml</literal>. The default is text.
118118
Only superusers can change this setting.
119119
</para>
120120
</listitem>

‎doc/src/sgml/ref/explain.sgml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/explain.sgml,v 1.46 2009/08/10 05:46:50 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/explain.sgml,v 1.47 2009/12/11 01:33:35 adunstan Exp $
33
PostgreSQL documentation
44
-->
55

@@ -31,7 +31,7 @@ PostgreSQL documentation
3131

3232
<refsynopsisdiv>
3333
<synopsis>
34-
EXPLAIN [ ( { ANALYZE <replaceable class="parameter">boolean</replaceable> | VERBOSE <replaceable class="parameter">boolean</replaceable> | COSTS <replaceable class="parameter">boolean</replaceable> | FORMAT { TEXT | XML | JSON } } [, ...] ) ] <replaceable class="parameter">statement</replaceable>
34+
EXPLAIN [ ( { ANALYZE <replaceable class="parameter">boolean</replaceable> | VERBOSE <replaceable class="parameter">boolean</replaceable> | COSTS <replaceable class="parameter">boolean</replaceable> | FORMAT { TEXT | XML | JSON| YAML} } [, ...] ) ] <replaceable class="parameter">statement</replaceable>
3535
EXPLAIN [ ANALYZE ] [ VERBOSE ] <replaceable class="parameter">statement</replaceable>
3636
</synopsis>
3737
</refsynopsisdiv>
@@ -143,8 +143,8 @@ ROLLBACK;
143143
<term><literal>FORMAT</literal></term>
144144
<listitem>
145145
<para>
146-
Specify the output format, which can be TEXT, XML, orJSON.
147-
XML or JSON output contains the same information as the text output
146+
Specify the output format, which can be TEXT, XML,JSON,orYAML.
147+
Non-text output contains the same information as the text output
148148
format, but is easier for programs to parse. This parameter defaults to
149149
<literal>TEXT</literal>.
150150
</para>

‎doc/src/sgml/release-8.5.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.5.sgml,v 1.8 2009/11/26 21:20:12 tgl Exp $ -->
1+
<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.5.sgml,v 1.9 2009/12/11 01:33:35 adunstan Exp $ -->
22

33
<sect1 id="release-8-5">
44
<title>Release 8.5alpha2</title>
@@ -176,7 +176,7 @@
176176
</listitem>
177177
<listitem>
178178
<para>
179-
EXPLAIN allows output of plans in XMLorJSON format for automated
179+
EXPLAIN allows output of plans in XML, JSON,orYAML format for automated
180180
processing of explain plans by analysis or visualization tools.
181181
</para>
182182
</listitem>

‎src/backend/commands/explain.c

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994-5, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.193 2009/11/04 22:26:04 tgl Exp $
10+
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.194 2009/12/11 01:33:35 adunstan Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -95,7 +95,9 @@ static void ExplainBeginOutput(ExplainState *es);
9595
staticvoidExplainEndOutput(ExplainState*es);
9696
staticvoidExplainXMLTag(constchar*tagname,intflags,ExplainState*es);
9797
staticvoidExplainJSONLineEnding(ExplainState*es);
98+
staticvoidExplainYAMLLineStarting(ExplainState*es);
9899
staticvoidescape_json(StringInfobuf,constchar*str);
100+
staticvoidescape_yaml(StringInfobuf,constchar*str);
99101

100102

101103
/*
@@ -135,6 +137,8 @@ ExplainQuery(ExplainStmt *stmt, const char *queryString,
135137
es.format=EXPLAIN_FORMAT_XML;
136138
elseif (strcmp(p,"json")==0)
137139
es.format=EXPLAIN_FORMAT_JSON;
140+
elseif (strcmp(p,"yaml")==0)
141+
es.format=EXPLAIN_FORMAT_YAML;
138142
else
139143
ereport(ERROR,
140144
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -1537,6 +1541,19 @@ ExplainPropertyList(const char *qlabel, List *data, ExplainState *es)
15371541
}
15381542
appendStringInfoChar(es->str,']');
15391543
break;
1544+
1545+
caseEXPLAIN_FORMAT_YAML:
1546+
ExplainYAMLLineStarting(es);
1547+
escape_yaml(es->str,qlabel);
1548+
appendStringInfoChar(es->str,':');
1549+
foreach(lc,data)
1550+
{
1551+
appendStringInfoChar(es->str,'\n');
1552+
appendStringInfoSpaces(es->str,es->indent*2+2);
1553+
appendStringInfoString(es->str,"- ");
1554+
escape_yaml(es->str, (constchar*)lfirst(lc));
1555+
}
1556+
break;
15401557
}
15411558
}
15421559

@@ -1584,6 +1601,15 @@ ExplainProperty(const char *qlabel, const char *value, bool numeric,
15841601
else
15851602
escape_json(es->str,value);
15861603
break;
1604+
1605+
caseEXPLAIN_FORMAT_YAML:
1606+
ExplainYAMLLineStarting(es);
1607+
appendStringInfo(es->str,"%s: ",qlabel);
1608+
if (numeric)
1609+
appendStringInfoString(es->str,value);
1610+
else
1611+
escape_yaml(es->str,value);
1612+
break;
15871613
}
15881614
}
15891615

@@ -1668,6 +1694,21 @@ ExplainOpenGroup(const char *objtype, const char *labelname,
16681694
es->grouping_stack=lcons_int(0,es->grouping_stack);
16691695
es->indent++;
16701696
break;
1697+
1698+
caseEXPLAIN_FORMAT_YAML:
1699+
ExplainYAMLLineStarting(es);
1700+
if (labelname)
1701+
{
1702+
appendStringInfo(es->str,"%s:",labelname);
1703+
es->grouping_stack=lcons_int(1,es->grouping_stack);
1704+
}
1705+
else
1706+
{
1707+
appendStringInfoChar(es->str,'-');
1708+
es->grouping_stack=lcons_int(0,es->grouping_stack);
1709+
}
1710+
es->indent++;
1711+
break;
16711712
}
16721713
}
16731714

@@ -1697,6 +1738,11 @@ ExplainCloseGroup(const char *objtype, const char *labelname,
16971738
appendStringInfoChar(es->str,labeled ?'}' :']');
16981739
es->grouping_stack=list_delete_first(es->grouping_stack);
16991740
break;
1741+
1742+
caseEXPLAIN_FORMAT_YAML:
1743+
es->indent--;
1744+
es->grouping_stack=list_delete_first(es->grouping_stack);
1745+
break;
17001746
}
17011747
}
17021748

@@ -1729,6 +1775,13 @@ ExplainDummyGroup(const char *objtype, const char *labelname, ExplainState *es)
17291775
}
17301776
escape_json(es->str,objtype);
17311777
break;
1778+
1779+
caseEXPLAIN_FORMAT_YAML:
1780+
ExplainYAMLLineStarting(es);
1781+
if (labelname)
1782+
appendStringInfo(es->str,"%s:",labelname);
1783+
appendStringInfoString(es->str,objtype);
1784+
break;
17321785
}
17331786
}
17341787

@@ -1759,6 +1812,10 @@ ExplainBeginOutput(ExplainState *es)
17591812
es->grouping_stack=lcons_int(0,es->grouping_stack);
17601813
es->indent++;
17611814
break;
1815+
1816+
caseEXPLAIN_FORMAT_YAML:
1817+
es->grouping_stack=lcons_int(0,es->grouping_stack);
1818+
break;
17621819
}
17631820
}
17641821

@@ -1784,6 +1841,10 @@ ExplainEndOutput(ExplainState *es)
17841841
appendStringInfoString(es->str,"\n]");
17851842
es->grouping_stack=list_delete_first(es->grouping_stack);
17861843
break;
1844+
1845+
caseEXPLAIN_FORMAT_YAML:
1846+
es->grouping_stack=list_delete_first(es->grouping_stack);
1847+
break;
17871848
}
17881849
}
17891850

@@ -1796,6 +1857,7 @@ ExplainSeparatePlans(ExplainState *es)
17961857
switch (es->format)
17971858
{
17981859
caseEXPLAIN_FORMAT_TEXT:
1860+
caseEXPLAIN_FORMAT_YAML:
17991861
/* add a blank line */
18001862
appendStringInfoChar(es->str,'\n');
18011863
break;
@@ -1858,6 +1920,25 @@ ExplainJSONLineEnding(ExplainState *es)
18581920
appendStringInfoChar(es->str,'\n');
18591921
}
18601922

1923+
/*
1924+
* Indent a YAML line.
1925+
*/
1926+
staticvoid
1927+
ExplainYAMLLineStarting(ExplainState*es)
1928+
{
1929+
Assert(es->format==EXPLAIN_FORMAT_YAML);
1930+
if (linitial_int(es->grouping_stack)==0)
1931+
{
1932+
appendStringInfoChar(es->str,' ');
1933+
linitial_int(es->grouping_stack)=1;
1934+
}
1935+
else
1936+
{
1937+
appendStringInfoChar(es->str,'\n');
1938+
appendStringInfoSpaces(es->str,es->indent*2);
1939+
}
1940+
}
1941+
18611942
/*
18621943
* Produce a JSON string literal, properly escaping characters in the text.
18631944
*/
@@ -1902,3 +1983,23 @@ escape_json(StringInfo buf, const char *str)
19021983
}
19031984
appendStringInfoCharMacro(buf,'\"');
19041985
}
1986+
1987+
/*
1988+
* YAML is a superset of JSON: if we find quotable characters, we call escape_json
1989+
*/
1990+
staticvoid
1991+
escape_yaml(StringInfobuf,constchar*str)
1992+
{
1993+
constchar*p;
1994+
1995+
for (p=str;*p;p++)
1996+
{
1997+
if ((unsignedchar)*p<' '||strchr("\"\\\b\f\n\r\t",*p))
1998+
{
1999+
escape_json(buf,str);
2000+
return;
2001+
}
2002+
}
2003+
2004+
appendStringInfo(buf,"%s",str);
2005+
}

‎src/include/commands/explain.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994-5, Regents of the University of California
88
*
9-
* $PostgreSQL: pgsql/src/include/commands/explain.h,v 1.41 2009/08/10 05:46:50 tgl Exp $
9+
* $PostgreSQL: pgsql/src/include/commands/explain.h,v 1.42 2009/12/11 01:33:35 adunstan Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -19,7 +19,8 @@ typedef enum ExplainFormat
1919
{
2020
EXPLAIN_FORMAT_TEXT,
2121
EXPLAIN_FORMAT_XML,
22-
EXPLAIN_FORMAT_JSON
22+
EXPLAIN_FORMAT_JSON,
23+
EXPLAIN_FORMAT_YAML
2324
}ExplainFormat;
2425

2526
typedefstructExplainState

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp