Thread: BUG #16636: Upper case issue in JSONB type

BUG #16636: Upper case issue in JSONB type

From
PG Bug reporting form
Date:
The following bug has been logged on the website:

Bug reference:      16636
Logged by:          ChandraKumar Ovanan
Email address:      osaimar19@gmail.com
PostgreSQL version: 11.0
Operating system:   Windows 10
Description:

Hi All,
Below example which I was execute query in postgres.
The problem statement here, when I use upper case function by converting
JSONB object has Null value,
Then I getting below error.
Please could fix it defect or why this behavior on postures,required
clarification 



Error message:
SQL Error [22P02]: ERROR: invalid input syntax for type json
  Detail: Token "NULL" is invalid.
  Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"}, {"DATE":
NULL...




CREATE TABLE logs(id serial, data JSONB); 
INSERT INTO logs VALUES
 (1,
'[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),
 (2,
'[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');

 SELECT * FROM logs WHERE data @> '[{"date":null}]';
 SELECT * FROM logs WHERE data @> '[{"date":"2018-01-10"}]';
 SELECT * FROM logs WHERE data @> '[{"date":"2018-01-11"}]';
 SELECT * FROM logs WHERE data @> '[{"name":"test4"}]';
 SELECT * FROM logs WHERE lower(data::text)::jsonb @>
lower('[{"date":"2018-01-10"}]')::jsonb ; --working
 SELECT * FROM logs WHERE upper(data::text)::jsonb @>
upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working


Re: BUG #16636: Upper case issue in JSONB type

From
"David G. Johnston"
Date:
On Fri, Sep 25, 2020 at 8:13 AM PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      16636
Logged by:          ChandraKumar Ovanan
Email address:      osaimar19@gmail.com
PostgreSQL version: 11.0
Operating system:   Windows 10
Description:       

Hi All,
Below example which I was execute query in postgres.
The problem statement here, when I use upper case function by converting
JSONB object has Null value,
Then I getting below error.
Please could fix it defect or why this behavior on postures,required
clarification

Error message:
SQL Error [22P02]: ERROR: invalid input syntax for type json
  Detail: Token "NULL" is invalid.
  Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"}, {"DATE":
NULL...

CREATE TABLE logs(id serial, data JSONB);
INSERT INTO logs VALUES
 (1,
'[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),
 (2,
'[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');

 SELECT * FROM logs WHERE data @> '[{"date":null}]';
 SELECT * FROM logs WHERE upper(data::text)::jsonb @>
upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working


The error and the example queries don't seem to match...

When you upper('{"date":null}'::text) you get the literal text: {"date":NULL}, which is not valid json; a JSON null "value" must be written in lowercase.  You would find the same problem had you chosen a boolean field and written true/false as documented on the json data type page [1], Table 8.23, and the json standard [2]

David J.

Re: BUG #16636: Upper case issue in JSONB type

From
ChandraKumar Ovanan
Date:
Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more clearled. 🙂

Just a suggestion: 
The JSON primitive type is null, The document is not cleared such as lowercase or uppercase.

Please update the document  

pql table.PNG

Regards
Chandrakumar





On Fri, Sep 25, 2020 at 9:08 PM David G. Johnston <david.g.johnston@gmail.com> wrote:
>
> On Fri, Sep 25, 2020 at 8:13 AM PG Bug reporting form <noreply@postgresql.org> wrote:
>>
>> The following bug has been logged on the website:
>>
>> Bug reference:      16636
>> Logged by:          ChandraKumar Ovanan
>> Email address:      osaimar19@gmail.com
>> PostgreSQL version: 11.0
>> Operating system:   Windows 10
>> Description:      
>>
>> Hi All,
>> Below example which I was execute query in postgres.
>> The problem statement here, when I use upper case function by converting
>> JSONB object has Null value,
>> Then I getting below error.
>> Please could fix it defect or why this behavior on postures,required
>> clarification
>>
>> Error message:
>> SQL Error [22P02]: ERROR: invalid input syntax for type json
>>   Detail: Token "NULL" is invalid.
>>   Where: JSON data, line 1: ...E": "2018-01-10", "NAME": "TEST3"}, {"DATE":
>> NULL...
>>
>> CREATE TABLE logs(id serial, data JSONB);
>> INSERT INTO logs VALUES
>>  (1,
>> '[{"name":"test1","date":"2020-11-11"},{"name":"test2","date":"2018-01-10"}]'),
>>  (2,
>> '[{"name":"test3","date":"2020-05-18"},{"name":"test4","date":"null"}]');
>>
>>  SELECT * FROM logs WHERE data @> '[{"date":null}]';
>>  SELECT * FROM logs WHERE upper(data::text)::jsonb @>
>> upper('[{"date":"2018-01-10"}]')::jsonb ; --Not working
>>
>
> The error and the example queries don't seem to match...
>
> When you upper('{"date":null}'::text) you get the literal text: {"date":NULL}, which is not valid json; a JSON null "value" must be written in lowercase.  You would find the same problem had you chosen a boolean field and written true/false as documented on the json data type page [1], Table 8.23, and the json standard [2]
>
> David J.
>
> 1. https://www.postgresql.org/docs/13/datatype-json.html
> 2. https://www.json.org/json-en.html
>


--
Thanks & Regards,
Chandra Kumar O
07639078641
Attachment

Re: BUG #16636: Upper case issue in JSONB type

From
"David G. Johnston"
Date:
On Fri, Sep 25, 2020 at 11:25 PM ChandraKumar Ovanan <osaimar19@gmail.com> wrote:
Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more clearled. 🙂

Just a suggestion: 
The JSON primitive type is null, The document is not cleared such as lowercase or uppercase.

Please update the document  

pql table.PNG

FWIW, I've proposed a patch [1] but I'm 70-30 whether to cover this material as our documentation doesn't intend to document what is already covered in the RFC and the idea that the value of the null type is spelled (null) is part of the standard.  We document the boolean part because in PostgreSQL inputs for booleans are considerably more liberal.  That all said it doesn't eat up much space and was easy enough to do without being annoying (IMO) so I did it.

David J.


Attachment

Re: BUG #16636: Upper case issue in JSONB type

From
ChandraKumar Ovanan
Date:
Ok, thanks. 

On Wed 30 Sep, 2020, 8:27 AM David G. Johnston, <david.g.johnston@gmail.com> wrote:
On Fri, Sep 25, 2020 at 11:25 PM ChandraKumar Ovanan <osaimar19@gmail.com> wrote:
Hello David,

Thanks a lot, you cleared my question.and it seems fine to me.

You mention boolean type, also the same problem but the document is more clearled. 🙂

Just a suggestion: 
The JSON primitive type is null, The document is not cleared such as lowercase or uppercase.

Please update the document  

pql table.PNG

FWIW, I've proposed a patch [1] but I'm 70-30 whether to cover this material as our documentation doesn't intend to document what is already covered in the RFC and the idea that the value of the null type is spelled (null) is part of the standard.  We document the boolean part because in PostgreSQL inputs for booleans are considerably more liberal.  That all said it doesn't eat up much space and was easy enough to do without being annoying (IMO) so I did it.

David J.


Attachment