Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 905e9b7

Browse files
author
Nikita Glukhov
committed
Fix jsonpath timestamptz encoding in json
1 parent b505bca commit 905e9b7

File tree

3 files changed

+54
-24
lines changed

3 files changed

+54
-24
lines changed

src/backend/utils/adt/json.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2985,7 +2985,8 @@ JsonEncodeJsonbValue(StringInfo buf, JsonbValue *jbv)
29852985

29862986
JsonEncodeDateTime(dtbuf,
29872987
jbv->val.datetime.value,
2988-
jbv->val.datetime.typid);
2988+
jbv->val.datetime.typid,
2989+
&jbv->val.datetime.tz);
29892990

29902991
escape_json(buf, dtbuf);
29912992

src/test/regress/expected/json_jsonpath.out

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,33 +1270,49 @@ select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI")';
12701270
(1 row)
12711271

12721272
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
1273+
ERROR: Invalid argument for SQL/JSON datetime function
1274+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+00")';
12731275
?column?
12741276
-----------------------------
12751277
"2017-03-10T12:34:00+00:00"
12761278
(1 row)
12771279

1280+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+00:12")';
1281+
?column?
1282+
-----------------------------
1283+
"2017-03-10T12:34:00+00:12"
1284+
(1 row)
1285+
1286+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "-00:12:34")';
1287+
?column?
1288+
--------------------------------
1289+
"2017-03-10T12:34:00-00:12:34"
1290+
(1 row)
1291+
1292+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "UTC")';
1293+
ERROR: Invalid argument for SQL/JSON datetime function
12781294
select json '"10-03-2017 12:34 +05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
12791295
?column?
12801296
-----------------------------
1281-
"2017-03-10T07:34:00+00:00"
1297+
"2017-03-10T12:34:00+05:00"
12821298
(1 row)
12831299

12841300
select json '"10-03-2017 12:34 -05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
12851301
?column?
12861302
-----------------------------
1287-
"2017-03-10T17:34:00+00:00"
1303+
"2017-03-10T12:34:00-05:00"
12881304
(1 row)
12891305

12901306
select json '"10-03-2017 12:34 +05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
12911307
?column?
12921308
-----------------------------
1293-
"2017-03-10T07:14:00+00:00"
1309+
"2017-03-10T12:34:00+05:20"
12941310
(1 row)
12951311

12961312
select json '"10-03-2017 12:34 -05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
12971313
?column?
12981314
-----------------------------
1299-
"2017-03-10T17:54:00+00:00"
1315+
"2017-03-10T12:34:00-05:20"
13001316
(1 row)
13011317

13021318
select json '"12:34"' @* '$.datetime("HH24:MI")';
@@ -1306,6 +1322,8 @@ select json '"12:34"' @* '$.datetime("HH24:MI")';
13061322
(1 row)
13071323

13081324
select json '"12:34"' @* '$.datetime("HH24:MI TZH")';
1325+
ERROR: Invalid argument for SQL/JSON datetime function
1326+
select json '"12:34"' @* '$.datetime("HH24:MI TZH", "+00")';
13091327
?column?
13101328
------------------
13111329
"12:34:00+00:00"
@@ -1343,6 +1361,8 @@ select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI")';
13431361
(1 row)
13441362

13451363
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
1364+
ERROR: Invalid argument for SQL/JSON datetime function
1365+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+10")';
13461366
?column?
13471367
-----------------------------
13481368
"2017-03-10T12:34:00+10:00"
@@ -1351,25 +1371,25 @@ select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")
13511371
select json '"10-03-2017 12:34 +05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
13521372
?column?
13531373
-----------------------------
1354-
"2017-03-10T17:34:00+10:00"
1374+
"2017-03-10T12:34:00+05:00"
13551375
(1 row)
13561376

13571377
select json '"10-03-2017 12:34 -05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
13581378
?column?
13591379
-----------------------------
1360-
"2017-03-11T03:34:00+10:00"
1380+
"2017-03-10T12:34:00-05:00"
13611381
(1 row)
13621382

13631383
select json '"10-03-2017 12:34 +05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
13641384
?column?
13651385
-----------------------------
1366-
"2017-03-10T17:14:00+10:00"
1386+
"2017-03-10T12:34:00+05:20"
13671387
(1 row)
13681388

13691389
select json '"10-03-2017 12:34 -05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
13701390
?column?
13711391
-----------------------------
1372-
"2017-03-11T03:54:00+10:00"
1392+
"2017-03-10T12:34:00-05:20"
13731393
(1 row)
13741394

13751395
select json '"12:34"' @* '$.datetime("HH24:MI")';
@@ -1379,6 +1399,8 @@ select json '"12:34"' @* '$.datetime("HH24:MI")';
13791399
(1 row)
13801400

13811401
select json '"12:34"' @* '$.datetime("HH24:MI TZH")';
1402+
ERROR: Invalid argument for SQL/JSON datetime function
1403+
select json '"12:34"' @* '$.datetime("HH24:MI TZH", "+10")';
13821404
?column?
13831405
------------------
13841406
"12:34:00+10:00"
@@ -1442,7 +1464,7 @@ select json '"2017-03-10 12:34:56 +3"' @* '$.datetime().type()';
14421464
select json '"2017-03-10 12:34:56 +3"' @* '$.datetime()';
14431465
?column?
14441466
-----------------------------
1445-
"2017-03-10T01:34:56-08:00"
1467+
"2017-03-10T12:34:56+03:00"
14461468
(1 row)
14471469

14481470
select json '"2017-03-10 12:34:56 +3:10"' @* '$.datetime().type()';
@@ -1454,7 +1476,7 @@ select json '"2017-03-10 12:34:56 +3:10"' @* '$.datetime().type()';
14541476
select json '"2017-03-10 12:34:56 +3:10"' @* '$.datetime()';
14551477
?column?
14561478
-----------------------------
1457-
"2017-03-10T01:24:56-08:00"
1479+
"2017-03-10T12:34:56+03:10"
14581480
(1 row)
14591481

14601482
select json '"12:34:56"' @* '$.datetime().type()';
@@ -1501,7 +1523,7 @@ select json '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03 +0
15011523
-----------------------------
15021524
"2017-03-10"
15031525
"2017-03-10T00:00:00"
1504-
"2017-03-10T00:00:00+00:00"
1526+
"2017-03-10T03:00:00+03:00"
15051527
(3 rows)
15061528

15071529
select json '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03 +04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03 +04", "2017-03-10 03:00:00 +03"]'
@@ -1512,15 +1534,15 @@ select json '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03 +0
15121534
"2017-03-11"
15131535
"2017-03-10T00:00:00"
15141536
"2017-03-10T12:34:56"
1515-
"2017-03-10T00:00:00+00:00"
1537+
"2017-03-10T03:00:00+03:00"
15161538
(5 rows)
15171539

15181540
select json '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03 +04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03 +04", "2017-03-10 03:00:00 +03"]'
15191541
@* '$[*].datetime() ? (@ < "10.03.2017".datetime("dd.mm.yyyy"))';
15201542
?column?
15211543
-----------------------------
15221544
"2017-03-09"
1523-
"2017-03-09T21:02:03+00:00"
1545+
"2017-03-10T01:02:03+04:00"
15241546
(2 rows)
15251547

15261548
-- time comparison
@@ -1584,7 +1606,7 @@ select json '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00
15841606
?column?
15851607
-----------------------------
15861608
"2017-03-10T12:35:00"
1587-
"2017-03-10T12:35:00+00:00"
1609+
"2017-03-10T13:35:00+01:00"
15881610
(2 rows)
15891611

15901612
select json '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00 +01", "2017-03-10 13:35:00 +01", "2017-03-10 12:35:00 -01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56 +01"]'
@@ -1593,8 +1615,8 @@ select json '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00
15931615
-----------------------------
15941616
"2017-03-10T12:35:00"
15951617
"2017-03-10T12:36:00"
1596-
"2017-03-10T12:35:00+00:00"
1597-
"2017-03-10T13:35:00+00:00"
1618+
"2017-03-10T13:35:00+01:00"
1619+
"2017-03-10T12:35:00-01:00"
15981620
"2017-03-11"
15991621
(5 rows)
16001622

@@ -1603,7 +1625,7 @@ select json '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00
16031625
?column?
16041626
-----------------------------
16051627
"2017-03-10T12:34:00"
1606-
"2017-03-10T11:35:00+00:00"
1628+
"2017-03-10T12:35:00+01:00"
16071629
"2017-03-10"
16081630
(3 rows)
16091631

@@ -1612,17 +1634,17 @@ select json '["2017-03-10 12:34:00 +01", "2017-03-10 12:35:00 +01", "2017-03-10
16121634
@* '$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))';
16131635
?column?
16141636
-----------------------------
1615-
"2017-03-10T11:35:00+00:00"
1637+
"2017-03-10T12:35:00+01:00"
16161638
"2017-03-10T11:35:00"
16171639
(2 rows)
16181640

16191641
select json '["2017-03-10 12:34:00 +01", "2017-03-10 12:35:00 +01", "2017-03-10 12:36:00 +01", "2017-03-10 12:35:00 +02", "2017-03-10 12:35:00 -02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56 +01"]'
16201642
@* '$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))';
16211643
?column?
16221644
-----------------------------
1623-
"2017-03-10T11:35:00+00:00"
1624-
"2017-03-10T11:36:00+00:00"
1625-
"2017-03-10T14:35:00+00:00"
1645+
"2017-03-10T12:35:00+01:00"
1646+
"2017-03-10T12:36:00+01:00"
1647+
"2017-03-10T12:35:00-02:00"
16261648
"2017-03-10T11:35:00"
16271649
"2017-03-10T12:35:00"
16281650
"2017-03-11"
@@ -1632,8 +1654,8 @@ select json '["2017-03-10 12:34:00 +01", "2017-03-10 12:35:00 +01", "2017-03-10
16321654
@* '$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))';
16331655
?column?
16341656
-----------------------------
1635-
"2017-03-10T11:34:00+00:00"
1636-
"2017-03-10T10:35:00+00:00"
1657+
"2017-03-10T12:34:00+01:00"
1658+
"2017-03-10T12:35:00+02:00"
16371659
"2017-03-10T10:35:00"
16381660
"2017-03-10"
16391661
(4 rows)

src/test/regress/sql/json_jsonpath.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,17 @@ set time zone '+00';
267267

268268
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI")';
269269
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
270+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+00")';
271+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+00:12")';
272+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "-00:12:34")';
273+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "UTC")';
270274
select json '"10-03-2017 12:34 +05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
271275
select json '"10-03-2017 12:34 -05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
272276
select json '"10-03-2017 12:34 +05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
273277
select json '"10-03-2017 12:34 -05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
274278
select json '"12:34"' @* '$.datetime("HH24:MI")';
275279
select json '"12:34"' @* '$.datetime("HH24:MI TZH")';
280+
select json '"12:34"' @* '$.datetime("HH24:MI TZH", "+00")';
276281
select json '"12:34 +05"' @* '$.datetime("HH24:MI TZH")';
277282
select json '"12:34 -05"' @* '$.datetime("HH24:MI TZH")';
278283
select json '"12:34 +05:20"' @* '$.datetime("HH24:MI TZH:TZM")';
@@ -282,12 +287,14 @@ set time zone '+10';
282287

283288
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI")';
284289
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
290+
select json '"10-03-2017 12:34"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH", "+10")';
285291
select json '"10-03-2017 12:34 +05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
286292
select json '"10-03-2017 12:34 -05"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH")';
287293
select json '"10-03-2017 12:34 +05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
288294
select json '"10-03-2017 12:34 -05:20"' @* '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")';
289295
select json '"12:34"' @* '$.datetime("HH24:MI")';
290296
select json '"12:34"' @* '$.datetime("HH24:MI TZH")';
297+
select json '"12:34"' @* '$.datetime("HH24:MI TZH", "+10")';
291298
select json '"12:34 +05"' @* '$.datetime("HH24:MI TZH")';
292299
select json '"12:34 -05"' @* '$.datetime("HH24:MI TZH")';
293300
select json '"12:34 +05:20"' @* '$.datetime("HH24:MI TZH:TZM")';

0 commit comments

Comments
 (0)