mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-16991 Rounding vs truncation for TIME, DATETIME, TIMESTAMP
This commit is contained in:
@ -158,6 +158,7 @@ enum enum_binlog_row_image {
|
||||
#define MODE_PAD_CHAR_TO_FULL_LENGTH (1ULL << 31)
|
||||
#define MODE_EMPTY_STRING_IS_NULL (1ULL << 32)
|
||||
#define MODE_SIMULTANEOUS_ASSIGNMENT (1ULL << 33)
|
||||
#define MODE_TIME_ROUND_FRACTIONAL (1ULL << 34)
|
||||
|
||||
/* Bits for different old style modes */
|
||||
#define OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE (1 << 0)
|
||||
@ -3419,6 +3420,11 @@ public:
|
||||
{
|
||||
return Timeval(query_start(), query_start_sec_part());
|
||||
}
|
||||
time_round_mode_t temporal_round_mode() const
|
||||
{
|
||||
return variables.sql_mode & MODE_TIME_ROUND_FRACTIONAL ?
|
||||
TIME_FRAC_ROUND : TIME_FRAC_TRUNCATE;
|
||||
}
|
||||
|
||||
private:
|
||||
struct {
|
||||
@ -4957,13 +4963,17 @@ my_eof(THD *thd)
|
||||
(A)->variables.sql_log_bin_off= 0;}
|
||||
|
||||
|
||||
inline date_mode_t sql_mode_for_dates(THD *thd)
|
||||
inline date_conv_mode_t sql_mode_for_dates(THD *thd)
|
||||
{
|
||||
static_assert((date_conv_mode_t::KNOWN_MODES &
|
||||
time_round_mode_t::KNOWN_MODES) == 0,
|
||||
"date_conv_mode_t and time_round_mode_t must use different "
|
||||
"bit values");
|
||||
static_assert(MODE_NO_ZERO_DATE == date_mode_t::NO_ZERO_DATE &&
|
||||
MODE_NO_ZERO_IN_DATE == date_mode_t::NO_ZERO_IN_DATE &&
|
||||
MODE_INVALID_DATES == date_mode_t::INVALID_DATES,
|
||||
"sql_mode_t and date_mode_t values must be equal");
|
||||
return date_mode_t(thd->variables.sql_mode &
|
||||
return date_conv_mode_t(thd->variables.sql_mode &
|
||||
(MODE_NO_ZERO_DATE | MODE_NO_ZERO_IN_DATE | MODE_INVALID_DATES));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user