diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2019-10-21 23:03:55 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2019-10-21 23:07:07 +0300 |
commit | a6888fde7f0dbe865559b31ba2ce01ac1150debe (patch) | |
tree | e746b17a4f3c0a26380a87b0670525e52846a015 /src/backend/utils/adt/timestamp.c | |
parent | db477b691dc4e80bc8379d976ef53a0aa0afe4c0 (diff) | |
download | postgresql-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
Diffstat (limited to 'src/backend/utils/adt/timestamp.c')
-rw-r--r-- | src/backend/utils/adt/timestamp.c | 11 |
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) |