Re: Document DateStyle effect on jsonpath string() - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Document DateStyle effect on jsonpath string()
Date
Msg-id 3835867.1726072002@sss.pgh.pa.us
Whole thread Raw
In response to Re: Document DateStyle effect on jsonpath string()  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Document DateStyle effect on jsonpath string()
List pgsql-hackers
I wrote:
> I think I'd be content to have string() duplicate that behavior
> --- in fact, it seems like it'd be odd if it doesn't match.

Building on that thought, maybe we could fix it as attached?
This changes the just-committed test cases of course, and I did
not look at whether there are documentation changes to make.

            regards, tom lane

diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c
index e3ee0093d4..b9c2443b65 100644
--- a/src/backend/utils/adt/jsonpath_exec.c
+++ b/src/backend/utils/adt/jsonpath_exec.c
@@ -72,6 +72,7 @@
 #include "utils/datetime.h"
 #include "utils/float.h"
 #include "utils/formatting.h"
+#include "utils/json.h"
 #include "utils/jsonpath.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
@@ -1629,32 +1630,13 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
                         break;
                     case jbvDatetime:
                         {
-                            switch (jb->val.datetime.typid)
-                            {
-                                case DATEOID:
-                                    tmp = DatumGetCString(DirectFunctionCall1(date_out,
-                                                                              jb->val.datetime.value));
-                                    break;
-                                case TIMEOID:
-                                    tmp = DatumGetCString(DirectFunctionCall1(time_out,
-                                                                              jb->val.datetime.value));
-                                    break;
-                                case TIMETZOID:
-                                    tmp = DatumGetCString(DirectFunctionCall1(timetz_out,
-                                                                              jb->val.datetime.value));
-                                    break;
-                                case TIMESTAMPOID:
-                                    tmp = DatumGetCString(DirectFunctionCall1(timestamp_out,
-                                                                              jb->val.datetime.value));
-                                    break;
-                                case TIMESTAMPTZOID:
-                                    tmp = DatumGetCString(DirectFunctionCall1(timestamptz_out,
-                                                                              jb->val.datetime.value));
-                                    break;
-                                default:
-                                    elog(ERROR, "unrecognized SQL/JSON datetime type oid: %u",
-                                         jb->val.datetime.typid);
-                            }
+                            char        buf[MAXDATELEN + 1];
+
+                            JsonEncodeDateTime(buf,
+                                               jb->val.datetime.value,
+                                               jb->val.datetime.typid,
+                                               &jb->val.datetime.tz);
+                            tmp = pstrdup(buf);
                         }
                         break;
                     case jbvNull:

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Document DateStyle effect on jsonpath string()
Next
From: vignesh C
Date:
Subject: Re: Invalid Assert while validating REPLICA IDENTITY?