diff options
-rw-r--r-- | src/backend/utils/adt/date.c | 10 | ||||
-rw-r--r-- | src/backend/utils/adt/timestamp.c | 10 | ||||
-rw-r--r-- | src/test/regress/expected/expressions.out | 31 | ||||
-rw-r--r-- | src/test/regress/sql/expressions.sql | 7 |
4 files changed, 40 insertions, 18 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 1cf7c7652d7..e70cf4bdcff 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -347,10 +347,7 @@ current_time(PG_FUNCTION_ARGS) int32 typmod = -1; if (!PG_ARGISNULL(0)) - { - typmod = PG_GETARG_INT32(0); - anytime_typmod_check(true, typmod); - } + typmod = anytime_typmod_check(true, PG_GETARG_INT32(0)); GetCurrentTimeUsec(tm, &fsec, &tz); @@ -375,10 +372,7 @@ sql_localtime(PG_FUNCTION_ARGS) int32 typmod = -1; if (!PG_ARGISNULL(0)) - { - typmod = PG_GETARG_INT32(0); - anytime_typmod_check(false, typmod); - } + typmod = anytime_typmod_check(false, PG_GETARG_INT32(0)); GetCurrentTimeUsec(tm, &fsec, &tz); diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 3f2508c0c4a..b23cce11362 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -1606,10 +1606,7 @@ current_timestamp(PG_FUNCTION_ARGS) int32 typmod = -1; if (!PG_ARGISNULL(0)) - { - typmod = PG_GETARG_INT32(0); - anytimestamp_typmod_check(true, typmod); - } + typmod = anytimestamp_typmod_check(true, PG_GETARG_INT32(0)); ts = GetCurrentTransactionStartTimestamp(); if (typmod >= 0) @@ -1627,10 +1624,7 @@ sql_localtimestamp(PG_FUNCTION_ARGS) int32 typmod = -1; if (!PG_ARGISNULL(0)) - { - typmod = PG_GETARG_INT32(0); - anytimestamp_typmod_check(false, typmod); - } + typmod = anytimestamp_typmod_check(false, PG_GETARG_INT32(0)); ts = timestamptz2timestamp(GetCurrentTransactionStartTimestamp()); if (typmod >= 0) diff --git a/src/test/regress/expected/expressions.out b/src/test/regress/expected/expressions.out index 28a20900f19..df432d4c927 100644 --- a/src/test/regress/expected/expressions.out +++ b/src/test/regress/expected/expressions.out @@ -36,7 +36,7 @@ SELECT now()::time(3)::text = localtime(3)::text; t (1 row) --- current_timestamp / localtimestamp (always matches because of transactional behaviour) +-- current_time[stamp]/ localtime[stamp] (always matches because of transactional behaviour) SELECT current_timestamp = NOW(); ?column? ---------- @@ -57,6 +57,35 @@ SELECT now()::timestamp::text = localtimestamp::text; t (1 row) +-- precision overflow +SELECT current_time = current_time(7); +WARNING: TIME(7) WITH TIME ZONE precision reduced to maximum allowed, 6 + ?column? +---------- + t +(1 row) + +SELECT current_timestamp = current_timestamp(7); +WARNING: TIMESTAMP(7) WITH TIME ZONE precision reduced to maximum allowed, 6 + ?column? +---------- + t +(1 row) + +SELECT localtime = localtime(7); +WARNING: TIME(7) precision reduced to maximum allowed, 6 + ?column? +---------- + t +(1 row) + +SELECT localtimestamp = localtimestamp(7); +WARNING: TIMESTAMP(7) precision reduced to maximum allowed, 6 + ?column? +---------- + t +(1 row) + -- current_role/user/user is tested in rolnames.sql -- current database / catalog SELECT current_catalog = current_database(); diff --git a/src/test/regress/sql/expressions.sql b/src/test/regress/sql/expressions.sql index f9a0299d17b..fea5358d252 100644 --- a/src/test/regress/sql/expressions.sql +++ b/src/test/regress/sql/expressions.sql @@ -17,12 +17,17 @@ SELECT now()::timetz(4)::text = current_time(4)::text; SELECT now()::time::text = localtime::text; SELECT now()::time(3)::text = localtime(3)::text; --- current_timestamp / localtimestamp (always matches because of transactional behaviour) +-- current_time[stamp]/ localtime[stamp] (always matches because of transactional behaviour) SELECT current_timestamp = NOW(); -- precision SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text); -- localtimestamp SELECT now()::timestamp::text = localtimestamp::text; +-- precision overflow +SELECT current_time = current_time(7); +SELECT current_timestamp = current_timestamp(7); +SELECT localtime = localtime(7); +SELECT localtimestamp = localtimestamp(7); -- current_role/user/user is tested in rolnames.sql |