On Thu, Jun 20, 2024 at 5:46 PM Amit Langote <amitlangot...@gmail.com> wrote: > > On Thu, Jun 20, 2024 at 1:03 AM David G. Johnston > <david.g.johns...@gmail.com> wrote: > > On Wed, Jun 19, 2024 at 8:29 AM jian he <jian.universal...@gmail.com> wrote: > >> > >> On Mon, Jun 17, 2024 at 9:05 PM Chapman Flack <jcfl...@acm.org> wrote: > >> > > >> > Hi, > >> > > >> > On 06/17/24 02:43, Amit Langote wrote: > >> > > <replaceable>context_item</replaceable> expression can be a value of > >> > > any type that can be cast to <type>jsonb</type>. This includes types > >> > > such as <type>char</type>, <type>text</type>, <type>bpchar</type>, > >> > > <type>character varying</type>, and <type>bytea</type> (with > >> > > <code>ENCODING UTF8</code>), as well as any domains over these types. > >> > > >> > Reading this message in conjunction with [0] makes me think that we are > >> > really talking about a function that takes a first parameter of type > >> > jsonb, > >> > and behaves exactly that way (so any cast required is applied by the > >> > system > >> > ahead of the call). Under those conditions, this seems like an unusual > >> > sentence to add in the docs, at least until we have also documented that > >> > tan's argument can be of any type that can be cast to double precision. > >> > > >> > >> I guess it would be fine to add an unusual sentence to the docs. > >> > >> imagine a function: array_avg(anyarray) returns anyelement. > >> array_avg calculate an array's elements's avg. like > >> array('{1,2,3}'::int[]) returns 2. > >> but array_avg won't make sense if the input argument is a date array. > >> so mentioning in the doc: array_avg can accept anyarray, but anyarray > >> cannot date array. > >> seems ok. > > > > > > There is existing wording for this: > > > > "The expression can be of any JSON type, any character string type, or > > bytea in UTF8 encoding." > > > > If you add this sentence to the paragraph the link that already exists, > > which simply points the reader to this sentence, becomes redundant and > > should be removed. > > I've just posted a patch in the other thread [1] to restrict > context_item to be of jsonb type, which users would need to ensure by > adding an explicit cast if needed. I think that makes this > clarification unnecessary. > > > As for table 9.16.3 - it is unwieldy already. Lets try and make the core > > syntax shorter, not longer. We already have precedence in the subsequent > > json_table section - give each major clause item a name then below the > > table define the syntax and meaning for those names. Unlike in that > > section - which probably should be modified too - context_item should have > > its own description line. > > I had posted a patch a little while ago at [1] to render the syntax a > bit differently with each function getting its own syntax synopsis. > Resending it here; have addressed Jian He's comments. > > --
@@ -18746,6 +18752,7 @@ ERROR: jsonpath array subscript is out of bounds <literal>PASSING</literal> <replaceable>value</replaceable>s. </para> <para> + Returns the result of applying the SQL/JSON If the path expression returns multiple SQL/JSON items, it might be necessary to wrap the result using the <literal>WITH WRAPPER</literal> clause to make it a valid JSON string. If the wrapper is + Returns the result of applying the SQL/JSON is redundant? playing around with it. found some minor issues: json_exists allow: DEFAULT expression ON ERROR, which is not mentioned in the doc. for example: select JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'strict $.a[5]' default true ON ERROR); select JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'strict $.a[5]' default 0 ON ERROR); select JSON_EXISTS(jsonb '{"a": [1,2,3]}', 'strict $.a[5]' default 11 ON ERROR); JSON_VALUE on error, on empty semantics should be the same as json_query. like: [ { ERROR | NULL | EMPTY { [ ARRAY ] | OBJECT } | DEFAULT expression } ON EMPTY ] [ { ERROR | NULL | EMPTY { [ ARRAY ] | OBJECT } | DEFAULT expression } ON ERROR ]) examples: select JSON_value(jsonb '[]' , '$' empty array on error); select JSON_value(jsonb '[]' , '$' empty object on error);