[MDEV-19612] Split ALTER related data type specific code in sql_table.cc to Type_handler Created: 2019-05-28  Updated: 2019-05-28  Resolved: 2019-05-28

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

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

Issue Links:
Blocks
blocks MDEV-4912 Data type plugin API version 1 Closed

 Description   

Some code in sql_table.cc is not friendly to pluggable data types:

In mysql_prepare_alter_table():

    if ((def->real_field_type() == MYSQL_TYPE_DATE ||
         def->real_field_type() == MYSQL_TYPE_NEWDATE ||
         def->real_field_type() == MYSQL_TYPE_DATETIME ||
         def->real_field_type() == MYSQL_TYPE_DATETIME2) &&
         !alter_ctx->datetime_field &&
         !(~def->flags & (NO_DEFAULT_VALUE_FLAG | NOT_NULL_FLAG)) &&
         thd->variables.sql_mode & MODE_NO_ZERO_DATE)
    {
        alter_ctx->datetime_field= def;
        alter_ctx->error_if_not_empty= TRUE;
    }

In mysql_alter_table():

    switch (alter_ctx.datetime_field->real_field_type())
    {
      case MYSQL_TYPE_DATE:
      case MYSQL_TYPE_NEWDATE:
        f_val= "0000-00-00";
        t_type= MYSQL_TIMESTAMP_DATE;
        break;
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_DATETIME2:
        f_val= "0000-00-00 00:00:00";
        t_type= MYSQL_TIMESTAMP_DATETIME;
        break;
      default:
        /* Shouldn't get here. */
        DBUG_ASSERT(0);
    }

Let's split this code into two new virtual methods in Type_handler:

virtual const Name default_value() const;
virtual bool validate_implicit_default_value(THD *thd,
                                             const Column_definition &def)
                                             const;


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