1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-30 05:23:50 +03:00
Files
mariadb/mysql-test/r
Alexander Barkov c17a06abf8 MDEV-15310 Range optimizer does not work well for "WHERE temporal_column NOT IN (const_list)"
There were two problems related to the bug report:
1. Item_datetime::get_date() was not implemented.
   So execution went through val_int() followed
   by int-to-datetime or int-to-time conversion.
   This was the reason why the optimizer did not
   work well on data with fractional seconds.
2. Item_datetime::set() did not have a TIME specific code
   to mix months and days to hours after unpack_time().
   This is why the optimizer did not work well with negative
   TIME values, as well as huge time values.

Changes:

1. Overriding Item_datetime::get_date(), to return ltime.
   This fixes the problem N1.
2. Cleanup: Moving pack_time() and unpack_time() from
   sql-common/my_time.c and include/my_time.h to
   sql/sql_time.cc and sql/sql_time.h, as they are not needed
   on the client side.
3. Adding a new "enum_mysql_timestamp_type ts_type" parameter
   to unpack_time() and moving the TIME specific code to mix
   months and days with hours inside unpack_time().
   Adding a new "ts_type" parameter to Item_datetime::set(),
   to pass it from the caller down to unpack_time().
   So now the TIME specific code is automatically called
   from Item_datetime::set(). This fixes the problem N2.
   This change also helped to get rid of duplicate TIME specific code
   from other three places, where mixing month/days to hours
   was done immediately after unpack_time().
   Moving the DATE specific code to zero hhmmssff
   from Item_func_min_max::get_date_native to inside unpack_time(),
   for symmetry.
4. Removing the virtual method in_vector::result_type(),
   adding in_vector::type_handler() instead.
   This helps to get result_type(), field_type(),
   mysql_timestamp_type() of an in_vector easier.
   Passing type_handler()->mysql_timestamp_type() as
   a new parameter to Item_datetime::set() inside
   in_temporal::value_to_item().
5. Cleaup: Removing separate implementations of in_datetime::get_value()
   and in_time::get_value(). Adding a single implementation
   in_temporal::get_value() instead.
   Passing type_handler()->field_type() to get_value_internal().
2018-02-14 22:58:34 +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-04-01 14:15:18 +03: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
2017-04-01 14:15:18 +03: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