1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-03 14:33:32 +03:00
Files
mariadb/mysql-test/r
Alexander Barkov aef530bb69 MDEV-15340 Wrong result HOUR(case_expression_with_time_and_datetime)
The problem was that Item_func_hybrid_field_type::get_date() did not
convert the result to the correct data type, so MYSQL_TIME::time_type
of the get_date() result could be not in sync with field_type().

Changes:
1. Adding two new classes Datetime and Date to store MYSQL_TIMESTAMP_DATETIME
   and MYSQL_TIMESTAMP_DATE values respectively
   (in addition to earlier added class Time, for MYSQL_TIMESTAMP_TIME values).
2. Adding Item_func_hybrid_field_type::time_op().
   It performs the operation using TIME representation,
   and always returns a MYSQL_TIME value with time_type=MYSQL_TIMESTAMP_TIME.
   Implementing time_op() for all affected children classes.
3. Fixing all implementations of date_op() to perform the operation
   using strictly DATETIME representation. Now they always return a MYSQL_TIME
   value with time_type=MYSQL_TIMESTAMP_{DATE|DATETIME},
   according to the result data type.
4. Removing assignment of ltime.time_type to mysql_timestamp_type()
   from all val_xxx_from_date_op(), because now date_op() makes sure
   to return a proper MYSQL_TIME value with a good time_type (and other member)
5. Adding Item_func_hybrid_field_type::val_xxx_from_time_op().
6. Overriding Type_handler_time_common::Item_func_hybrid_field_type_val_xxx()
   to call val_xxx_from_time_op() instead of val_xxx_from_date_op().
7. Modified Item_func::get_arg0_date() to return strictly a TIME value
   if TIME_TIME_ONLY is passed, or return strictly a DATETIME value otherwise.
   If args[0] returned a value of a different temporal type,
   (for example a TIME value when TIME_TIME_ONLY was not passed,
    or a DATETIME value when TIME_TIME_ONLY was passed), the conversion
   is automatically applied.
   Earlier, get_arg0_date() did not guarantee a result in
   accordance to TIME_TIME_ONLY flag.
2018-02-19 23:41:01 +04:00
..
2018-01-24 12:11:29 +04:00
2017-09-17 11:05:33 +03:00
2017-09-17 11:05:33 +03:00
2017-09-17 11:05:33 +03:00
2017-09-17 11:05:33 +03:00
2017-10-24 14:53:18 +02:00
2017-09-17 11:05:33 +03:00
2017-09-17 11:05:33 +03:00
2017-12-14 09:53:19 +02:00
2017-09-17 11:05:33 +03:00
2017-12-14 08:40:01 +02:00
2017-09-14 08:09:44 +03:00
2018-02-08 13:53:21 +02:00
2017-05-09 13:24:52 +02:00
2017-06-19 16:56:13 +03:00
2017-09-20 17:47:49 +03:00
2017-12-14 09:53:19 +02:00
2017-06-08 12:45:08 +03:00
2017-09-22 02:27:00 +02:00
2017-05-09 13:24:52 +02:00
2017-06-19 16:46:34 +03:00
2017-07-05 17:15:57 +02:00
2017-06-30 13:28:39 +02:00
2017-07-05 19:08:55 +02:00
2018-01-02 02:03:12 +02:00
2017-10-24 14:53:18 +02:00
2017-10-24 14:53:18 +02:00
2017-06-08 12:45:08 +03:00
2018-01-11 18:00:31 +02:00
2017-09-19 12:43:02 +03:00
2017-11-08 13:12:11 +02:00
2017-10-22 13:03:41 +02:00