[MDEV-20760] Add Type_handler::KEY_pack_flags() Created: 2019-10-05  Updated: 2022-10-11  Resolved: 2019-10-05

Status: Closed
Project: MariaDB Server
Component/s: Data types
Fix Version/s: 10.5.0, 10.4.27

Type: Task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-274 The data type for IPv6/IPv4 addresses... Closed
blocks MDEV-4912 Data type plugin API version 1 Closed
Problem/Incident
causes MDEV-28822 Table from older version requires tab... Closed
Relates
relates to MDEV-28822 Table from older version requires tab... Closed

 Description   

This code in mysql_prepare_create_table() is not friendly to data type plugins:

       /* Use packed keys for long strings on the first column */
       if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
           !((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) &&
           (key_part_length >= KEY_DEFAULT_PACK_LENGTH &&
            (sql_field->real_field_type() == MYSQL_TYPE_STRING ||
             sql_field->real_field_type() == MYSQL_TYPE_VARCHAR ||
             f_is_blob(sql_field->pack_flag))) && !is_hash_field_needed)
       {
         if ((column_nr == 0 && f_is_blob(sql_field->pack_flag)) ||
             sql_field->real_field_type() == MYSQL_TYPE_VARCHAR)
           key_info->flags|= HA_BINARY_PACK_KEY | HA_VAR_LENGTH_KEY;
         else
           key_info->flags|= HA_PACK_KEY;
       }

Let's add a new method in Type_handler:

virtual ulong KEY_pack_flags(uint column_nr) const { return 0; }

So the above code will change to:

       /* Use packed keys for long strings on the first column */
       if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
           !((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) &&
           (key_part_length >= KEY_DEFAULT_PACK_LENGTH) &&
           !is_hash_field_needed)
       {
         key_info->flags|= sql_field->type_handler()->KEY_pack_flags(column_nr);
       }

Data type plugins will be able to override this method.


Generated at Thu Feb 08 09:01:57 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.