summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-03-02 15:02:13 +0100
committerSergei Golubchik <sergii@pisem.net>2014-03-02 15:02:13 +0100
commiteb9f422c43406172422eeaaa29dddeff742b6d14 (patch)
treec269e08c4cf12f100be8210eb08ac087d2f4be7d /sql
parent1b608b0b9c0eae7ddcd35d54a4e9112b3c1c4966 (diff)
downloadmariadb-git-eb9f422c43406172422eeaaa29dddeff742b6d14.tar.gz
MDEV-5667 online alter and changed field/index options
use the Alter_inplace_info::ALTER_COLUMN_OPTION flag if field/column flags were altered. change ha_example to use check_if_supported_inplace_alter() instead of obsolete check_if_incompatible_data()
Diffstat (limited to 'sql')
-rw-r--r--sql/handler.cc1
-rw-r--r--sql/handler.h9
-rw-r--r--sql/sql_table.cc12
3 files changed, 16 insertions, 6 deletions
diff --git a/sql/handler.cc b/sql/handler.cc
index 8aee24fbe03..50044cf3cab 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -4123,6 +4123,7 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table,
Alter_inplace_info::ALTER_COLUMN_EQUAL_PACK_LENGTH |
Alter_inplace_info::ALTER_COLUMN_NAME |
Alter_inplace_info::ALTER_COLUMN_DEFAULT |
+ Alter_inplace_info::ALTER_COLUMN_OPTION |
Alter_inplace_info::CHANGE_CREATE_OPTION |
Alter_inplace_info::ALTER_RENAME;
diff --git a/sql/handler.h b/sql/handler.h
index d255c0543a9..06bc1863bbe 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -1740,8 +1740,11 @@ public:
// Table is renamed
static const HA_ALTER_FLAGS ALTER_RENAME = 1L << 18;
- // Change the storage type of column
- static const HA_ALTER_FLAGS ALTER_COLUMN_STORAGE_TYPE = 1L << 19;
+ // column's engine options changed, something in field->option_struct
+ static const HA_ALTER_FLAGS ALTER_COLUMN_OPTION = 1L << 19;
+
+ // MySQL alias for the same thing:
+ static const HA_ALTER_FLAGS ALTER_COLUMN_STORAGE_TYPE = 1L << 19;
// Change the column format of column
static const HA_ALTER_FLAGS ALTER_COLUMN_COLUMN_FORMAT = 1L << 20;
@@ -1770,7 +1773,7 @@ public:
// Partition operation with ALL keyword
static const HA_ALTER_FLAGS ALTER_ALL_PARTITION = 1L << 28;
- // Partition operation with ALL keyword
+ // Virtual columns changed
static const HA_ALTER_FLAGS ALTER_COLUMN_VCOL = 1L << 29;
/**
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index c43ea8c453c..fdb902ee199 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -5894,9 +5894,6 @@ static bool fill_alter_inplace_info(THD *thd,
if (new_field)
{
- ha_alter_info->create_info->fields_option_struct[f_ptr - table->field]=
- new_field->option_struct;
-
/* Field is not dropped. Evaluate changes bitmap for it. */
/*
@@ -6008,6 +6005,15 @@ static bool fill_alter_inplace_info(THD *thd,
if (new_field->column_format() != field->column_format())
ha_alter_info->handler_flags|=
Alter_inplace_info::ALTER_COLUMN_COLUMN_FORMAT;
+
+ if (engine_options_differ(field->option_struct, new_field->option_struct,
+ table->file->ht->field_options))
+ {
+ ha_alter_info->handler_flags|= Alter_inplace_info::ALTER_COLUMN_OPTION;
+ ha_alter_info->create_info->fields_option_struct[f_ptr - table->field]=
+ new_field->option_struct;
+ }
+
}
else
{