aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2019-10-21 23:03:55 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2019-10-21 23:07:07 +0300
commita6888fde7f0dbe865559b31ba2ce01ac1150debe (patch)
treee746b17a4f3c0a26380a87b0670525e52846a015
parentdb477b691dc4e80bc8379d976ef53a0aa0afe4c0 (diff)
downloadpostgresql-a6888fde7f0dbe865559b31ba2ce01ac1150debe.tar.gz
postgresql-a6888fde7f0dbe865559b31ba2ce01ac1150debe.zip
Refactor timestamp2timestamptz_opt_error()
While casting from timestamp to timestamptz we do timestamp2tm() then tm2timestamp(). This commit eliminates call to tm2timestamp(). Instead, it directly applies timezone offset to the original timestamp value. That makes upcoming datetime overflow handling in jsonpath easier. That should also save us some CPU cycles. Discussion: https://postgr.es/m/CAPpHfdvRPRh_mTGar5WmDeRZ%3DU5dOXHdxspYYD%3D76m3knNGjXA%40mail.gmail.com Author: Alexander Korotkov Reviewed-by: Tom Lane
-rw-r--r--src/backend/utils/adt/timestamp.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 84bc97d40c3..90ebb50e1f5 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -5210,8 +5210,17 @@ timestamp2timestamptz_opt_error(Timestamp timestamp, bool *have_error)
{
tz = DetermineTimeZoneOffset(tm, session_timezone);
- if (!tm2timestamp(tm, fsec, &tz, &result))
+ result = dt2local(timestamp, -tz);
+
+ if (IS_VALID_TIMESTAMP(result))
+ {
return result;
+ }
+ else if (have_error)
+ {
+ *have_error = true;
+ return (TimestampTz) 0;
+ }
}
if (have_error)