summaryrefslogtreecommitdiff
path: root/sql/handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/handler.cc')
-rw-r--r--sql/handler.cc62
1 files changed, 34 insertions, 28 deletions
diff --git a/sql/handler.cc b/sql/handler.cc
index f60cd67edae..12674a19a52 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -1419,7 +1419,7 @@ int ha_commit_trans(THD *thd, bool all)
#if 1 // FIXME: This should be done in ha_prepare().
if (rw_trans || (thd->lex->sql_command == SQLCOM_ALTER_TABLE &&
- thd->lex->alter_info.flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING))
+ thd->lex->alter_info.flags & ALTER_ADD_SYSTEM_VERSIONING))
{
ulonglong trx_start_id= 0, trx_end_id= 0;
for (Ha_trx_info *ha_info= trans->ha_list; ha_info; ha_info= ha_info->next())
@@ -4423,21 +4423,26 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table,
if (altered_table->versioned(VERS_TIMESTAMP))
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
- Alter_inplace_info::HA_ALTER_FLAGS inplace_offline_operations=
- 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_PARTITIONED |
- Alter_inplace_info::ALTER_VIRTUAL_GCOL_EXPR |
- Alter_inplace_info::ALTER_RENAME;
+ alter_table_operations inplace_offline_operations=
+ ALTER_COLUMN_EQUAL_PACK_LENGTH |
+ ALTER_COLUMN_NAME |
+ ALTER_RENAME_COLUMN |
+ ALTER_CHANGE_COLUMN_DEFAULT |
+ ALTER_COLUMN_DEFAULT |
+ ALTER_COLUMN_OPTION |
+ ALTER_CHANGE_CREATE_OPTION |
+ ALTER_DROP_CHECK_CONSTRAINT |
+ ALTER_PARTITIONED |
+ ALTER_VIRTUAL_GCOL_EXPR |
+ ALTER_RENAME;
/* Is there at least one operation that requires copy algorithm? */
if (ha_alter_info->handler_flags & ~inplace_offline_operations)
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
/*
+ The following checks for changes related to ALTER_OPTIONS
+
ALTER TABLE tbl_name CONVERT TO CHARACTER SET .. and
ALTER TABLE table_name DEFAULT CHARSET = .. most likely
change column charsets and so not supported in-place through
@@ -4449,12 +4454,13 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table,
if (create_info->used_fields & (HA_CREATE_USED_CHARSET |
HA_CREATE_USED_DEFAULT_CHARSET |
HA_CREATE_USED_PACK_KEYS |
+ HA_CREATE_USED_CHECKSUM |
HA_CREATE_USED_MAX_ROWS) ||
(table->s->row_type != create_info->row_type))
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
uint table_changes= (ha_alter_info->handler_flags &
- Alter_inplace_info::ALTER_COLUMN_EQUAL_PACK_LENGTH) ?
+ ALTER_COLUMN_EQUAL_PACK_LENGTH) ?
IS_EQUAL_PACK_LENGTH : IS_EQUAL_YES;
if (table->file->check_if_incompatible_data(create_info, table_changes)
== COMPATIBLE_DATA_YES)
@@ -6872,7 +6878,7 @@ static bool vers_create_sys_field(THD *thd, const char *field_name,
if (!f)
return true;
- alter_info->flags|= Alter_info::ALTER_ADD_COLUMN;
+ alter_info->flags|= ALTER_PARSER_ADD_COLUMN;
alter_info->create_list.push_back(f);
return false;
@@ -6887,7 +6893,7 @@ bool Vers_parse_info::fix_implicit(THD *thd, Alter_info *alter_info, int *added)
if (*this)
return false;
- alter_info->flags|= Alter_info::ALTER_ADD_COLUMN;
+ alter_info->flags|= ALTER_PARSER_ADD_COLUMN;
system_time= start_end_t(default_start, default_end);
as_row= system_time;
@@ -6933,7 +6939,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
List<Item> *items,
bool *versioned_write)
{
- DBUG_ASSERT(!(alter_info->flags & Alter_info::ALTER_DROP_SYSTEM_VERSIONING));
+ DBUG_ASSERT(!(alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING));
int vers_tables= 0;
if (select_tables)
@@ -6946,11 +6952,11 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
}
DBUG_EXECUTE_IF("sysvers_force", if (!tmp_table()) {
- alter_info->flags|= Alter_info::ALTER_ADD_SYSTEM_VERSIONING;
+ alter_info->flags|= ALTER_ADD_SYSTEM_VERSIONING;
options|= HA_VERSIONED_TABLE; });
// Possibly override default storage engine to match one used in source table.
- if (vers_tables && alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING &&
+ if (vers_tables && alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING &&
!(used_fields & HA_CREATE_USED_ENGINE))
{
List_iterator_fast<Create_field> it(alter_info->create_list);
@@ -6971,14 +6977,14 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
return false;
if (!vers_info.versioned_fields && vers_info.unversioned_fields &&
- !(alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING))
+ !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING))
{
// All is correct but this table is not versioned.
options&= ~HA_VERSIONED_TABLE;
return false;
}
- if (!(alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING) && vers_info)
+ if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && vers_info)
{
my_error(ER_MISSING, MYF(0), create_table.table_name.str,
"WITH SYSTEM VERSIONING");
@@ -6997,7 +7003,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
while (Create_field *f= it++)
{
if ((f->versioning == Column_definition::VERSIONING_NOT_SET &&
- !(alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING)) ||
+ !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) ||
f->versioning == Column_definition::WITHOUT_VERSIONING)
{
f->flags|= VERS_UPDATE_UNVERSIONED_FLAG;
@@ -7129,14 +7135,14 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
return true;
}
- if (alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING &&
+ if (alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING &&
table->versioned())
{
my_error(ER_VERS_ALREADY_VERSIONED, MYF(0), table_name);
return true;
}
- if (alter_info->flags & Alter_info::ALTER_DROP_SYSTEM_VERSIONING)
+ if (alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING)
{
if (!share->versioned)
{
@@ -7167,7 +7173,7 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
}
}
- if ((alter_info->flags & Alter_info::ALTER_DROP_PERIOD ||
+ if ((alter_info->flags & ALTER_DROP_PERIOD ||
versioned_fields || unversioned_fields) && !share->versioned)
{
my_error(ER_VERS_NOT_VERSIONED, MYF(0), table_name);
@@ -7176,7 +7182,7 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
if (share->versioned)
{
- if (alter_info->flags & Alter_info::ALTER_ADD_PERIOD)
+ if (alter_info->flags & ALTER_ADD_PERIOD)
{
my_error(ER_VERS_ALREADY_VERSIONED, MYF(0), table_name);
return true;
@@ -7215,7 +7221,7 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
if (fix_implicit(thd, alter_info))
return true;
- if (alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING)
+ if (alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)
{
if (check_with_conditions(table_name))
return true;
@@ -7288,10 +7294,10 @@ Vers_parse_info::fix_create_like(Alter_info &alter_info, HA_CREATE_INFO &create_
bool Vers_parse_info::need_check(const Alter_info *alter_info) const
{
return versioned_fields || unversioned_fields ||
- alter_info->flags & Alter_info::ALTER_ADD_PERIOD ||
- alter_info->flags & Alter_info::ALTER_DROP_PERIOD ||
- alter_info->flags & Alter_info::ALTER_ADD_SYSTEM_VERSIONING ||
- alter_info->flags & Alter_info::ALTER_DROP_SYSTEM_VERSIONING || *this;
+ alter_info->flags & ALTER_ADD_PERIOD ||
+ alter_info->flags & ALTER_DROP_PERIOD ||
+ alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING ||
+ alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING || *this;
}
bool Vers_parse_info::check_with_conditions(const char *table_name) const