On 2019-07-05 10:59:31 +0200, Thomas Kellerer wrote: > Gianni Ceccarelli schrieb am 05.07.2019 um 10:00: > >> strict functions with sql null inputs yield sql null output without > >> even executing the function > > > > So when the SQL-level executor sees a call to any function declared > > strict with some NULL parameters, it doesn't call the function at > > all. `whatever_my_function('a string',1234,NULL)` is always `NULL` > > > > Ah, I see. Thanks for the clarification > > Then I would question if declaring jsonb_set as "strict" makes sense I think it does but I raise the same question for to_jsonb. It's defined on anyelement and the documentation says: | Returns the value as json or jsonb. Arrays and composites are converted | (recursively) to arrays and objects; otherwise, if there is a cast from | the type to json, the cast function will be used to perform the | conversion; otherwise, a scalar value is produced. For any scalar type | other than a number, a Boolean, or a null value, the text representation | will be used, in such a fashion that it is a valid json or jsonb value. The documentation explicitely singles out "a number, a Boolean, or a null value", but doesn't specify how they are treated. I would expect that they are treated equivalently, though: An SQL number is converted to a JSON number, an SQL boolean is converted to JSON true or false and an SQL null is converted to JSON null. Returning SQL null instead of a JSON null breaks that expectation for no discernible reason. It also isn't consistent, since an SQL null in an array or composite is converted to a JSON null, as I would expect. hp -- _ | Peter J. Holzer | we build much bigger, better disasters now |_|_) | | because we have much more sophisticated | | | hjp@xxxxxx | management tools. __/ | http://www.hjp.at/ | -- Ross Anderson <https://www.edge.org/>
Attachment:
signature.asc
Description: PGP signature