Re: recently added jsonpath method change jsonb_path_query, jsonb_path_query_first immutability
Jeevan Chalke <jeevan.chalke@enterprisedb.com>
From: Jeevan Chalke <jeevan.chalke@enterprisedb.com>
To: Andrew Dunstan <andrew@dunslane.net>
Cc: jian he <jian.universality@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2024-02-07T11:36:08Z
Lists: pgsql-hackers
Attachments
- preserve-immutability.patch (application/octet-stream)
On Tue, Feb 6, 2024 at 5:25 PM Andrew Dunstan <andrew@dunslane.net> wrote: > > On 2024-02-05 Mo 22:06, jian he wrote: > > > Hi. > this commit [0] changes immutability of jsonb_path_query, jsonb_path_query_first? > If so, it may change other functions also. > > Thanks for reporting Jian. Added checkTimezoneIsUsedForCast() check where ever we are casting timezoned to non-timezoned types and vice-versa. Thanks > > demo: > > begin; > SET LOCAL TIME ZONE 10.5; > with cte(s) as (select jsonb '"2023-08-15 12:34:56 +05:30"') > > select jsonb_path_query(s, > '$.timestamp_tz()')::text,'+10.5'::text,'timestamp_tz'::text from cte > union all > select jsonb_path_query(s, '$.time()')::text,'+10.5'::text, 'time'::text > from cte > union all > select jsonb_path_query(s, > '$.timestamp()')::text,'+10.5'::text,'timestamp'::text from cte > union all > select jsonb_path_query(s, '$.date()')::text,'+10.5'::text, 'date'::text > from cte > union all > select jsonb_path_query(s, '$.time_tz()')::text,'+10.5'::text, > 'time_tz'::text from cte; > > SET LOCAL TIME ZONE -8; > with cte(s) as (select jsonb '"2023-08-15 12:34:56 +05:30"') > select jsonb_path_query(s, > '$.timestamp_tz()')::text,'-8'::text,'timestamp_tz'::text from cte > union all > select jsonb_path_query(s, '$.time()')::text,'-8'::text, 'time'::text from > cte > union all > select jsonb_path_query(s, > '$.timestamp()')::text,'-8'::text,'timestamp'::text from cte > union all > select jsonb_path_query(s, '$.date()')::text,'-8'::text, 'date'::text from > cte > union all > select jsonb_path_query(s, '$.time_tz()')::text,'-8'::text, > 'time_tz'::text from cte; > commit; > > > [0] > https://git.postgresql.org/cgit/postgresql.git/commit/?id=66ea94e8e606529bb334515f388c62314956739e > > > ouch. Good catch. Clearly we need to filter these like we do for the > .datetime() method. > > > cheers > > > andrew > > -- > Andrew Dunstan > EDB: https://www.enterprisedb.com > > -- Jeevan Chalke *Principal, ManagerProduct Development* edbpostgres.com