8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 02:03:04 +01:00

Fixed problem with 'NOW' conversion to time/timestamp with/without time zones.

Problem reported by Vlad. Tracker unavailable to create ticket.
This commit is contained in:
Adriano dos Santos Fernandes 2020-09-12 15:19:06 -03:00
parent 583c0d9ae4
commit f385937ad8

View File

@ -683,17 +683,30 @@ void CVT_string_to_datetime(const dsc* desc,
} }
// fetch the current datetime // fetch the current datetime
*(ISC_TIMESTAMP*) date = Firebird::TimeStamp::getCurrentTimeStamp().value(); *date = TimeZoneUtil::getCurrentGmtTimeStamp();
date->time_zone = cb->getSessionTimeZone();
if (expect_type == expect_sql_time_tz || expect_type == expect_timestamp_tz) switch (expect_type)
date->time_zone = cb->getSessionTimeZone(); {
case expect_sql_time_tz:
date->utc_timestamp.timestamp_time =
TimeZoneUtil::timeStampTzToTimeTz(*date).utc_time;
break;
case expect_sql_date:
case expect_sql_time:
case expect_timestamp:
// Not really UTC.
date->utc_timestamp = TimeZoneUtil::timeStampTzToTimeStamp(
*date, cb->getSessionTimeZone());
break;
case expect_timestamp_tz:
break;
}
if (strcmp(temp, NOW) == 0) if (strcmp(temp, NOW) == 0)
{
if (expect_type == expect_sql_time_tz || expect_type == expect_timestamp_tz)
TimeZoneUtil::localTimeStampToUtc(*date);
return; return;
}
if (expect_type == expect_sql_time || expect_type == expect_sql_time_tz) if (expect_type == expect_sql_time || expect_type == expect_sql_time_tz)
{ {
@ -703,21 +716,18 @@ void CVT_string_to_datetime(const dsc* desc,
date->utc_timestamp.timestamp_time = 0; date->utc_timestamp.timestamp_time = 0;
if (expect_type == expect_sql_time_tz || expect_type == expect_timestamp_tz)
TimeZoneUtil::localTimeStampToUtc(*date);
if (strcmp(temp, TODAY) == 0) if (strcmp(temp, TODAY) == 0)
return; return;
if (strcmp(temp, TOMORROW) == 0) if (strcmp(temp, TOMORROW) == 0)
{ {
date->utc_timestamp.timestamp_date++; ++date->utc_timestamp.timestamp_date;
return; return;
} }
if (strcmp(temp, YESTERDAY) == 0) if (strcmp(temp, YESTERDAY) == 0)
{ {
date->utc_timestamp.timestamp_date--; --date->utc_timestamp.timestamp_date;
return; return;
} }