185 return static_cast<int64_t
>(
246 (
is_negative() ? (0xFFFFFFU - fraction) : fraction);
257 int64_t signed_micro =
261 bool negative = signed_micro < 0;
262 uint64_t micro = negative ? -signed_micro : signed_micro;
286 uint32_t
second, uint32_t microsec) {
303 static constexpr uint64_t
BITS_HOUR = 0x00007FF000000000;
304 static constexpr uint64_t
BITS_SIGN = 0x0000800000000000;
356 uint32_t hour_arg, uint32_t minute_arg, uint32_t second_arg,
357 uint32_t micro_arg) {
370 uint32_t hour_arg, uint32_t minute_arg, uint32_t second_arg,
371 uint32_t micro_arg, int32_t time_zone_displacement_arg) {
383 Datetime_val(uint32_t year_arg, uint32_t month_arg, uint32_t day_arg) {
571 return (
year % 4) == 0 && ((
year % 100) != 0 || (
year % 400) == 0) &&
Date_val is a temporal type that represents dates within the range 0000-01-01 and 9999-12-31.
Definition: my_temporal.h:421
uint32_t year() const
Definition: my_temporal.h:443
uint32_t m_value
A DATE value is stored in bit coded fields in a 32 bit unsigned value.
Definition: my_temporal.h:610
static constexpr const uint32_t DATE_BITS_DAY
Definition: my_temporal.h:593
double to_double() const
Definition: my_temporal.h:533
Date_val(uint32_t year, uint32_t month, uint32_t day)
Definition: my_temporal.h:425
static constexpr const uint32_t DATE_BITS_MONTH
Definition: my_temporal.h:592
int32_t for_comparison() const
Definition: my_temporal.h:461
uint32_t day() const
Definition: my_temporal.h:449
Date_val(uint32_t day_number)
Definition: my_temporal.h:435
static constexpr const int DATE_SHIFT_YEAR
Definition: my_temporal.h:594
bool operator==(const Date_val rhs) const
Definition: my_temporal.h:487
static constexpr const uint32_t DATE_LAST_DAY
Definition: my_temporal.h:597
static constexpr const uint32_t DATE_DAYS_IN_LEAP
Definition: my_temporal.h:589
static uint32_t last_day_number()
Definition: my_temporal.h:482
void store_date(uint8_t *ptr) const
Convert server date value to storage engine interface format.
Definition: my_temporal.h:540
static bool is_leap_year(uint32_t year)
Definition: my_temporal.h:570
void set_zero()
Set zero date.
Definition: my_temporal.h:485
Date_val(const MYSQL_TIME &mtime)
Definition: my_temporal.h:430
bool is_zero_date() const
Definition: my_temporal.h:452
static constexpr const uint32_t DATE_MAX_MONTH
Definition: my_temporal.h:586
static void load_date(const uint8_t *ptr, Date_val *date)
Convert from storage engine interface date format to server date value.
Definition: my_temporal.h:548
static constexpr const uint32_t DATE_MAX_DAY
Definition: my_temporal.h:587
bool operator<(const Date_val rhs) const
Definition: my_temporal.h:489
uint32_t month() const
Definition: my_temporal.h:446
bool is_valid() const
Internal date validity check. Zero date, invalid calendar dates are OK.
Definition: my_temporal.h:559
int compare(const Date_val arg) const
Definition: my_temporal.h:457
static constexpr const uint32_t DATE_MAX_YEAR
Definition: my_temporal.h:585
static constexpr const int DATE_SHIFT_MONTH
Definition: my_temporal.h:595
static constexpr const uint32_t DATE_BITS_YEAR
Definition: my_temporal.h:591
static constexpr const uint32_t DATE_DAYS_IN_YEAR
Definition: my_temporal.h:588
Definition: my_temporal.h:341
Datetime_val(const MYSQL_TIME &mtime)
Definition: my_temporal.h:395
Datetime_val(uint32_t year_arg, uint32_t month_arg, uint32_t day_arg, uint32_t hour_arg, uint32_t minute_arg, uint32_t second_arg, uint32_t micro_arg, int32_t time_zone_displacement_arg)
Definition: my_temporal.h:369
Datetime_val()
Definition: my_temporal.h:343
Datetime_val(uint32_t year_arg, uint32_t month_arg, uint32_t day_arg)
Definition: my_temporal.h:383
Datetime_val(uint32_t year_arg, uint32_t month_arg, uint32_t day_arg, uint32_t hour_arg, uint32_t minute_arg, uint32_t second_arg, uint32_t micro_arg)
Definition: my_temporal.h:355
Time_val is a temporal type that represents only time.
Definition: my_temporal.h:57
uint32_t minute() const
Definition: my_temporal.h:97
uint32_t second() const
Definition: my_temporal.h:101
static constexpr int TIME_SHIFT_MINUTE
Definition: my_temporal.h:306
static constexpr int TIME_SHIFT_SECOND
Definition: my_temporal.h:305
Time_val(bool negative, uint32_t second, uint32_t microsecond)
Definition: my_temporal.h:81
void set_zero()
Set zero time.
Definition: my_temporal.h:126
static constexpr const uint32_t TIME_MAX_SECOND
Definition: my_temporal.h:293
bool is_extreme_value(bool positive) const
Check against extreme values.
Definition: my_temporal.h:121
Time_val(const MYSQL_TIME &mtime)
Definition: my_temporal.h:86
bool add_nanoseconds_round(const int64_t nanoseconds)
Definition: my_temporal.h:214
static constexpr uint64_t TIME_MULT_MINUTE
Definition: my_temporal.h:297
uint32_t microsecond() const
Definition: my_temporal.h:105
bool operator==(const Time_val rhs) const
Definition: my_temporal.h:133
int64_t for_comparison() const
Definition: my_temporal.h:118
static uint32_t unsigned_seconds(uint32_t hour, uint32_t minute, uint32_t second)
Definition: my_temporal.h:280
static constexpr uint64_t TIME_MULT_SECOND
Definition: my_temporal.h:296
Time_val(bool negative, uint32_t hour, uint32_t minute, uint32_t second, uint32_t microsecond)
Definition: my_temporal.h:61
static bool make_time(bool negative, uint32_t hour, uint32_t minute, uint32_t second, uint32_t microsecond, Time_val *time)
Static functions for creation.
Definition: my_temporal.h:162
static constexpr int TIME_SHIFT_HOUR
Definition: my_temporal.h:307
bool add_seconds(int32_t seconds)
Definition: my_temporal.h:249
bool add_microseconds(int64_t mu)
Definition: my_temporal.h:256
static constexpr uint64_t MAX_TIME_MICROSEC
Definition: my_temporal.h:320
static constexpr uint64_t MAX_TIME_VALUE
Definition: my_temporal.h:309
uint32_t hour() const
Definition: my_temporal.h:93
uint64_t m_value
A TIME value is stored in bit coded fields in a 64 bit unsigned value.
Definition: my_temporal.h:338
static constexpr uint64_t BITS_MINUTE
Definition: my_temporal.h:302
int compare(const Time_val arg) const
Definition: my_temporal.h:114
static constexpr uint64_t TIME_MULT_HOUR
Definition: my_temporal.h:298
Time_val(int64_t val)
Definition: my_temporal.h:241
static uint64_t unsigned_microsec(uint32_t hour, uint32_t minute, uint32_t second, uint32_t microsec)
Definition: my_temporal.h:285
void set_extreme_value(bool negative)
Set extreme value.
Definition: my_temporal.h:129
static constexpr uint64_t MIN_TIME_VALUE
Definition: my_temporal.h:314
void set_microsecond(uint32_t fraction)
Set microsecond part of time value.
Definition: my_temporal.h:244
int64_t to_microseconds() const
Definition: my_temporal.h:184
static constexpr const uint32_t TIME_MAX_MICROSEC
Definition: my_temporal.h:294
static constexpr uint64_t BITS_SIGN
Definition: my_temporal.h:304
static constexpr uint64_t BITS_SECOND
Definition: my_temporal.h:301
static constexpr uint64_t BITS_MICROSEC
Definition: my_temporal.h:300
static constexpr uint64_t BITS_HOUR
Definition: my_temporal.h:303
static constexpr const uint32_t TIME_MAX_HOUR
Definition: my_temporal.h:291
bool operator<(const Time_val rhs) const
Definition: my_temporal.h:135
bool is_negative() const
Definition: my_temporal.h:92
bool is_valid() const
Definition: my_temporal.h:273
int32_t to_seconds() const
Definition: my_temporal.h:179
static constexpr const uint32_t TIME_MAX_MINUTE
Definition: my_temporal.h:292
static const std::string dec("DECRYPTION")
static int make_date(uint32_t year, uint32_t month, uint32_t day, my_time_flags_t flags, Date_val *date)
Make date from year, month and day components, according to validation flags.
Definition: my_temporal.cc:310
std::string to_string() const
Definition: my_temporal.cc:468
void adjust_fraction(uint32_t decimals, bool round)
Definition: my_temporal.cc:66
static void day_number_to_date(uint32_t daynr, uint32_t *year, uint32_t *month, uint32_t *day)
Convert day number to date.
Definition: my_temporal.cc:346
bool add(Time_val tv, bool subtract)
Add a time value to another time value, or subtract it.
Definition: my_temporal.cc:96
static Time_val strip_date(const MYSQL_TIME &mt)
Creates a Time_val from a date_time by extracting only the time fields.
Definition: my_temporal.cc:166
static Date_val strip_time(const MYSQL_TIME &mtime)
Creates a Date_val from a date_time by extracting only the date fields.
Definition: my_temporal.cc:435
bool add(Interval &iv, bool subtract)
Add an interval to a date value, or subtract it.
Definition: my_temporal.cc:376
int64_t to_int_truncated() const
base100 representation without microsecond, '-12:34:56.999999' is returned as -123456
Definition: my_temporal.cc:276
int check_date(my_time_flags_t flags) const
Check date for validity, according to calendar and validation flags.
Definition: my_temporal.cc:320
int32_t to_int() const
Definition: my_temporal.cc:452
void set_last_day_of_month()
Adjust date to have last day of month.
Definition: my_temporal.cc:427
double to_double() const
base100 representation with microseconds, returned as double precision float
Definition: my_temporal.cc:281
void store_time(uint8_t *ptr, uint32_t dec) const
Convert server time value to storage engine interface format.
Definition: my_temporal.cc:186
uint32_t day_number() const
Definition: my_temporal.cc:456
uint32_t actual_decimals() const
Definition: my_temporal.cc:58
std::string to_string() const
Definition: my_temporal.cc:304
int64_t to_int_rounded() const
base100 representation without microsecond, but rounded '-12:34:56.999999' is returned as -123457
Definition: my_temporal.cc:269
static void load_time(const uint8_t *ptr, uint32_t dec, Time_val *time)
Convert from storage engine interface time format to server time value.
Definition: my_temporal.cc:228
bool is_adjusted(uint32_t decimals) const
Definition: my_temporal.cc:53
static int flags[50]
Definition: hp_test1.cc:40
@ MYSQL_TIMESTAMP_TIME
Stores hour, minute, second and microsecond.
Definition: mysql_time.h:60
@ MYSQL_TIMESTAMP_DATETIME_TZ
A temporary type for DATETIME or TIMESTAMP types equipped with time zone information.
Definition: mysql_time.h:67
@ MYSQL_TIMESTAMP_DATETIME
Stores all date and time components.
Definition: mysql_time.h:57
@ MYSQL_TIMESTAMP_DATE
Stores year, month and day components.
Definition: mysql_time.h:50
struct MYSQL_TIME MYSQL_TIME
Functions for reading and storing in machine-independent format.
void int3store(char *pT, uint A)
Definition: my_byteorder.h:176
uint32 uint3korr(const char *pT)
Definition: my_byteorder.h:144
Interface for low level time utilities.
constexpr const int MINS_PER_HOUR
Definition: my_time.h:149
unsigned int my_time_flags_t
Flags to str_to_datetime and int_to_datetime.
Definition: my_time.h:87
constexpr const int SECS_PER_MIN
Definition: my_time.h:148
constexpr const int SECS_PER_HOUR
Definition: my_time.h:154
Storing of values in high byte first order.
std::chrono::seconds seconds
Definition: authorize_manager.cc:70
ValueType abs(const ValueType v1, const ValueType v2)
Definition: gtid.h:75
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
Struct representing a duration.
Definition: my_time.h:231
Definition: mysql_time.h:82
int time_zone_displacement
The time zone displacement, specified in seconds.
Definition: mysql_time.h:88
unsigned long second_part
microseconds
Definition: mysql_time.h:84
unsigned int second
Definition: mysql_time.h:83
enum enum_mysql_timestamp_type time_type
Definition: mysql_time.h:86
unsigned int hour
Definition: mysql_time.h:83
unsigned int minute
Definition: mysql_time.h:83
unsigned int month
Definition: mysql_time.h:83
unsigned int day
Definition: mysql_time.h:83
bool neg
Definition: mysql_time.h:85
unsigned int year
Definition: mysql_time.h:83