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

Commit39909d1

Browse files
committed
Add array_to_json and row_to_json functions.
Also move the escape_json function from explain.c to json.c where itseems to belong.Andrew Dunstan, Reviewd by Abhijit Menon-Sen.
1 parent69e9768 commit39909d1

File tree

7 files changed

+579
-48
lines changed

7 files changed

+579
-48
lines changed

‎doc/src/sgml/func.sgml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9617,6 +9617,65 @@ table2-mapping
96179617
</sect2>
96189618
</sect1>
96199619

9620+
<sect1 id="functions-json">
9621+
<title>JSON functions</title>
9622+
9623+
<indexterm zone="datatype-json">
9624+
<primary>JSON</primary>
9625+
<secondary>Functions and operators</secondary>
9626+
</indexterm>
9627+
9628+
<para>
9629+
This section descripbes the functions that are available for creating
9630+
JSON (see <xref linkend="datatype-json">) data.
9631+
</para>
9632+
9633+
<table id="functions-json-table">
9634+
<title>JSON Support Functions</title>
9635+
<tgroup cols="4">
9636+
<thead>
9637+
<row>
9638+
<entry>Function</entry>
9639+
<entry>Description</entry>
9640+
<entry>Example</entry>
9641+
<entry>Example Result</entry>
9642+
</row>
9643+
</thead>
9644+
<tbody>
9645+
<row>
9646+
<entry>
9647+
<indexterm>
9648+
<primary>array_to_json</primary>
9649+
</indexterm>
9650+
<literal>array_to_json(anyarray [, pretty_bool])</literal>
9651+
</entry>
9652+
<entry>
9653+
Returns the array as JSON. A Postgres multi-dimensional array
9654+
becomes a JSON array of arrays. Line feeds will be added between
9655+
dimension 1 elements if pretty_bool is true.
9656+
</entry>
9657+
<entry><literal>array_to_json('{{1,5},{99,100}}'::int[])</literal></entry>
9658+
<entry><literal>[[1,5],[99,100]]</literal></entry>
9659+
</row>
9660+
<row>
9661+
<entry>
9662+
<indexterm>
9663+
<primary>row_to_json</primary>
9664+
</indexterm>
9665+
<literal>row_to_json(record [, pretty_bool])</literal>
9666+
</entry>
9667+
<entry>
9668+
Returns the row as JSON. Line feeds will be added between level
9669+
1 elements if pretty_bool is true.
9670+
</entry>
9671+
<entry><literal>row_to_json(row(1,'foo'))</literal></entry>
9672+
<entry><literal>{"f1":1,"f2":"foo"}</literal></entry>
9673+
</row>
9674+
</tbody>
9675+
</tgroup>
9676+
</table>
9677+
9678+
</sect1>
96209679

96219680
<sect1 id="functions-sequence">
96229681
<title>Sequence Manipulation Functions</title>

‎src/backend/commands/explain.c

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include"rewrite/rewriteHandler.h"
2525
#include"tcop/tcopprot.h"
2626
#include"utils/builtins.h"
27+
#include"utils/json.h"
2728
#include"utils/lsyscache.h"
2829
#include"utils/rel.h"
2930
#include"utils/snapmgr.h"
@@ -99,7 +100,6 @@ static void ExplainDummyGroup(const char *objtype, const char *labelname,
99100
staticvoidExplainXMLTag(constchar*tagname,intflags,ExplainState*es);
100101
staticvoidExplainJSONLineEnding(ExplainState*es);
101102
staticvoidExplainYAMLLineStarting(ExplainState*es);
102-
staticvoidescape_json(StringInfobuf,constchar*str);
103103
staticvoidescape_yaml(StringInfobuf,constchar*str);
104104

105105

@@ -2318,51 +2318,6 @@ ExplainYAMLLineStarting(ExplainState *es)
23182318
}
23192319
}
23202320

2321-
/*
2322-
* Produce a JSON string literal, properly escaping characters in the text.
2323-
*/
2324-
staticvoid
2325-
escape_json(StringInfobuf,constchar*str)
2326-
{
2327-
constchar*p;
2328-
2329-
appendStringInfoCharMacro(buf,'\"');
2330-
for (p=str;*p;p++)
2331-
{
2332-
switch (*p)
2333-
{
2334-
case'\b':
2335-
appendStringInfoString(buf,"\\b");
2336-
break;
2337-
case'\f':
2338-
appendStringInfoString(buf,"\\f");
2339-
break;
2340-
case'\n':
2341-
appendStringInfoString(buf,"\\n");
2342-
break;
2343-
case'\r':
2344-
appendStringInfoString(buf,"\\r");
2345-
break;
2346-
case'\t':
2347-
appendStringInfoString(buf,"\\t");
2348-
break;
2349-
case'"':
2350-
appendStringInfoString(buf,"\\\"");
2351-
break;
2352-
case'\\':
2353-
appendStringInfoString(buf,"\\\\");
2354-
break;
2355-
default:
2356-
if ((unsignedchar)*p<' ')
2357-
appendStringInfo(buf,"\\u%04x", (int)*p);
2358-
else
2359-
appendStringInfoCharMacro(buf,*p);
2360-
break;
2361-
}
2362-
}
2363-
appendStringInfoCharMacro(buf,'\"');
2364-
}
2365-
23662321
/*
23672322
* YAML is a superset of JSON; unfortuantely, the YAML quoting rules are
23682323
* ridiculously complicated -- as documented in sections 5.3 and 7.3.3 of

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp