mirror of
https://github.com/postgres/postgres.git
synced 2025-11-04 20:11:56 +03:00
Make jsonpath .string() be immutable for datetimes.
Discussion of commited055d249revealed that we don't actually want jsonpath's .string() method to depend on DateStyle, nor TimeZone either, because the non-"_tz" jsonpath functions are supposed to be immutable. Potentially we could allow a TimeZone dependency in the "_tz" variants, but it seems better to just uniformly define this method as returning the same string that jsonb text output would do. That's easier to implement too, saving a couple dozen lines. Patch by me, per complaint from Peter Eisentraut. Back-patch to v17 where this feature came in (in66ea94e8e). Also back-patched055d249to provide test cases. Discussion: https://postgr.es/m/5e8879d0-a3c8-4be2-950f-d83aa2af953a@eisentraut.org
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user