BUG #13485: JSONB To recordset not working with CamelCase

Started by Roberto Morellialmost 11 years ago3 messagesbugs
Jump to latest
#1Roberto Morelli
roberto.morelli@oneoverzero.net

The following bug has been logged on the website:

Bug reference: 13485
Logged by: Roberto Morelli
Email address: roberto.morelli@oneoverzero.net
PostgreSQL version: 9.4.4
Operating system: MacOSX
Description:

Hello,

I have encountered a problem with the jsonb type and the procedure
jsonb_populate_recordset.

If I have a type defined as:

CREATE TYPE nsp.confidence_enum AS
ENUM ('probably', 'conclusively', 'reliabily');

CREATE TYPE nsp.direction_enum AS
ENUM ('true', 'false');

CREATE TYPE nsp.TraitInfluence AS
(
traitId uuid,
direction nsp.direction_enum,
confidence nsp.confidence_enum
);

Note the camel case in traitId of nsp.TraitInfluence. If I try to populate a
recordset with the jsonb in the following way:

select jsonb_populate_recordset(null::nsp.TraitInfluence, '[{"traitId":
"c7fd7224-3f09-4a0a-941d-7a6a96d655b5", "direction": "true", "confidence":
"probably"}]'::jsonb)

I get the following result:

"(,true,probably)"

That is the traitId value is missing. I cannot change the camel case in the
json payload because it is a third party data.

How can I overcome this problem? The correct result should be:

"(c7fd7224-3f09-4a0a-941d-7a6a96d655b5,true,probably)"

Thank you very much for your help
Best Regards
Roberto

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Roberto Morelli (#1)
Re: BUG #13485: JSONB To recordset not working with CamelCase

On Friday, July 3, 2015, <roberto.morelli@oneoverzero.net> wrote:

The following bug has been logged on the website:

Bug reference: 13485
Logged by: Roberto Morelli
Email address: roberto.morelli@oneoverzero.net <javascript:;>
PostgreSQL version: 9.4.4
Operating system: MacOSX
Description:

Hello,

I have encountered a problem with the jsonb type and the procedure
jsonb_populate_recordset.

If I have a type defined as:

CREATE TYPE nsp.confidence_enum AS
ENUM ('probably', 'conclusively', 'reliabily');

CREATE TYPE nsp.direction_enum AS
ENUM ('true', 'false');

CREATE TYPE nsp.TraitInfluence AS
(
traitId uuid,
direction nsp.direction_enum,
confidence nsp.confidence_enum
);

Note the camel case in traitId of nsp.TraitInfluence. If I try to populate
a
recordset with the jsonb in the following way:

select jsonb_populate_recordset(null::nsp.TraitInfluence, '[{"traitId":
"c7fd7224-3f09-4a0a-941d-7a6a96d655b5", "direction": "true", "confidence":
"probably"}]'::jsonb)

I get the following result:

"(,true,probably)"

That is the traitId value is missing. I cannot change the camel case in the
json payload because it is a third party data.

How can I overcome this problem? The correct result should be:

"(c7fd7224-3f09-4a0a-941d-7a6a96d655b5,true,probably)"

Double-quote the field name in the create type statement.

David J.

#3Roberto Morelli
roberto.morelli@oneoverzero.net
In reply to: David G. Johnston (#2)
Re: BUG #13485: JSONB To recordset not working with CamelCase

Hello David,

yes, it works, thank you!!!

CREATE TYPE nsp.TraitInfluence AS
(
"traitId" uuid,
"direction" nsp.direction_enum,
"confidence" nsp.confidence_enum
);

Best regards
Roberto

Show quoted text

On 03 Jul 2015, at 20:53, David G. Johnston <david.g.johnston@gmail.com> wrote:

On Friday, July 3, 2015, <roberto.morelli@oneoverzero.net <mailto:roberto.morelli@oneoverzero.net>> wrote:
The following bug has been logged on the website:

Bug reference: 13485
Logged by: Roberto Morelli
Email address: roberto.morelli@oneoverzero.net <javascript:;>
PostgreSQL version: 9.4.4
Operating system: MacOSX
Description:

Hello,

I have encountered a problem with the jsonb type and the procedure
jsonb_populate_recordset.

If I have a type defined as:

CREATE TYPE nsp.confidence_enum AS
ENUM ('probably', 'conclusively', 'reliabily');

CREATE TYPE nsp.direction_enum AS
ENUM ('true', 'false');

CREATE TYPE nsp.TraitInfluence AS
(
traitId uuid,
direction nsp.direction_enum,
confidence nsp.confidence_enum
);

Note the camel case in traitId of nsp.TraitInfluence. If I try to populate a
recordset with the jsonb in the following way:

select jsonb_populate_recordset(null::nsp.TraitInfluence, '[{"traitId":
"c7fd7224-3f09-4a0a-941d-7a6a96d655b5", "direction": "true", "confidence":
"probably"}]'::jsonb)

I get the following result:

"(,true,probably)"

That is the traitId value is missing. I cannot change the camel case in the
json payload because it is a third party data.

How can I overcome this problem? The correct result should be:

"(c7fd7224-3f09-4a0a-941d-7a6a96d655b5,true,probably)"

Double-quote the field name in the create type statement.

David J.