mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-16991 Rounding vs truncation for TIME, DATETIME, TIMESTAMP
This commit is contained in:
@ -479,14 +479,24 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table)
|
||||
uint not_used;
|
||||
if (!starts_null)
|
||||
{
|
||||
table->field[ET_FIELD_STARTS]->get_date(&time, TIME_NO_ZERO_DATE);
|
||||
/*
|
||||
The expected data type for these columns in mysql.events:
|
||||
starts, ends, execute_at, last_executed
|
||||
is DATETIME. No nanosecond truncation should normally be needed,
|
||||
unless the DBA changes them, e.g. to VARCHAR, DECIMAL, etc.
|
||||
For this unexpected case let's use the default round mode,
|
||||
according to the current session settings.
|
||||
*/
|
||||
table->field[ET_FIELD_STARTS]->get_date(&time, TIME_NO_ZERO_DATE |
|
||||
thd->temporal_round_mode());
|
||||
starts= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used);
|
||||
}
|
||||
|
||||
ends_null= table->field[ET_FIELD_ENDS]->is_null();
|
||||
if (!ends_null)
|
||||
{
|
||||
table->field[ET_FIELD_ENDS]->get_date(&time, TIME_NO_ZERO_DATE);
|
||||
table->field[ET_FIELD_ENDS]->get_date(&time, TIME_NO_ZERO_DATE |
|
||||
thd->temporal_round_mode());
|
||||
ends= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used);
|
||||
}
|
||||
|
||||
@ -502,8 +512,8 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table)
|
||||
DBUG_ASSERT(!(starts_null && ends_null && !expression && execute_at_null));
|
||||
if (!expression && !execute_at_null)
|
||||
{
|
||||
if (table->field[ET_FIELD_EXECUTE_AT]->get_date(&time,
|
||||
TIME_NO_ZERO_DATE))
|
||||
if (table->field[ET_FIELD_EXECUTE_AT]->get_date(&time, TIME_NO_ZERO_DATE |
|
||||
thd->temporal_round_mode()))
|
||||
DBUG_RETURN(TRUE);
|
||||
execute_at= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used);
|
||||
}
|
||||
@ -535,8 +545,8 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table)
|
||||
|
||||
if (!table->field[ET_FIELD_LAST_EXECUTED]->is_null())
|
||||
{
|
||||
table->field[ET_FIELD_LAST_EXECUTED]->get_date(&time,
|
||||
TIME_NO_ZERO_DATE);
|
||||
table->field[ET_FIELD_LAST_EXECUTED]->get_date(&time, TIME_NO_ZERO_DATE |
|
||||
thd->temporal_round_mode());
|
||||
last_executed= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user