1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Changed static const in Alter_info and Alter_online_info to defines

Main reason was to make it easier to print the above structures in
a debugger. Additional benefits is that I was able to use same
defines for both structures, which simplifes some code.

Most of the code is just removing Alter_info:: and Alter_inplace_info::
from alter table flags.

Following renames was done:
HA_ALTER_FLAGS        -> alter_table_operations
CHANGE_CREATE_OPTION  -> ALTER_CHANGE_CREATE_OPTION
Alter_info::ADD_INDEX -> ALTER_ADD_INDEX
DROP_INDEX            -> ALTER_DROP_INDEX
ADD_UNIQUE_INDEX      -> ALTER_ADD_UNIQUE_INDEX
DROP_UNIQUE_INDEx     -> ALTER_DROP_UNIQUE_INDEX
ADD_PK_INDEX          -> ALTER_ADD_PK_INDEX
DROP_PK_INDEX         -> ALTER_DROP_PK_INDEX
Alter_info:ALTER_ADD_COLUMN    -> ALTER_PARSE_ADD_COLUMN
Alter_info:ALTER_DROP_COLUMN   -> ALTER_PARSE_DROP_COLUMN
Alter_inplace_info::ADD_INDEX  -> ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX
Alter_inplace_info::DROP_INDEX -> ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX

Other things:
- Added typedef alter_table_operatons for alter table flags
- DROP CHECK CONSTRAINT can now be done online
- Added checks for Aria tables in alter_table_online.test
- alter_table_flags now takes an ulonglong as argument.
- Don't support online operations if checksum option is used.
- sql_lex.cc doesn't add ALTER_ADD_INDEX if index is not created
This commit is contained in:
Monty
2018-02-16 10:56:03 +02:00
parent 0631f20ff7
commit 2dbeebdb16
28 changed files with 840 additions and 845 deletions

View File

@ -567,6 +567,177 @@ given at all. */
/* Create a sequence */
#define HA_CREATE_USED_SEQUENCE (1UL << 25)
typedef ulonglong alter_table_operations;
/*
These flags are set by the parser and describes the type of
operation(s) specified by the ALTER TABLE statement.
*/
// Set by parser for ADD [COLUMN]
#define ALTER_PARSER_ADD_COLUMN (1ULL << 0)
// Set by parser for DROP [COLUMN]
#define ALTER_PARSER_DROP_COLUMN (1ULL << 1)
// Set for CHANGE [COLUMN] | MODIFY [CHANGE] & mysql_recreate_table
#define ALTER_CHANGE_COLUMN (1ULL << 2)
// Set for ADD INDEX | ADD KEY | ADD PRIMARY KEY | ADD UNIQUE KEY |
// ADD UNIQUE INDEX | ALTER ADD [COLUMN]
#define ALTER_ADD_INDEX (1ULL << 3)
// Set for DROP PRIMARY KEY | DROP FOREIGN KEY | DROP KEY | DROP INDEX
#define ALTER_DROP_INDEX (1ULL << 4)
// Set for RENAME [TO]
#define ALTER_RENAME (1ULL << 5)
// Set for ORDER BY
#define ALTER_ORDER (1ULL << 6)
// Set for table_options, like table comment
#define ALTER_OPTIONS (1ULL << 7)
// Set for ALTER [COLUMN] ... SET DEFAULT ... | DROP DEFAULT
#define ALTER_CHANGE_COLUMN_DEFAULT (1ULL << 8)
// Set for DISABLE KEYS | ENABLE KEYS
#define ALTER_KEYS_ONOFF (1ULL << 9)
// Set for FORCE, ENGINE(same engine), by mysql_recreate_table()
#define ALTER_RECREATE (1ULL << 10)
// Set for ADD PARTITION
#define ALTER_ADD_PARTITION (1ULL << 11)
// Set for DROP PARTITION
#define ALTER_DROP_PARTITION (1ULL << 12)
// Set for COALESCE PARTITION
#define ALTER_COALESCE_PARTITION (1ULL << 13)
// Set for REORGANIZE PARTITION ... INTO
#define ALTER_REORGANIZE_PARTITION (1ULL << 14)
// Set for partition_options
#define ALTER_PARTITION (1ULL << 15)
// Set for LOAD INDEX INTO CACHE ... PARTITION
// Set for CACHE INDEX ... PARTITION
#define ALTER_ADMIN_PARTITION (1ULL << 16)
// Set for REORGANIZE PARTITION
#define ALTER_TABLE_REORG (1ULL << 17)
// Set for REBUILD PARTITION
#define ALTER_REBUILD_PARTITION (1ULL << 18)
// Set for partitioning operations specifying ALL keyword
#define ALTER_ALL_PARTITION (1ULL << 19)
// Set for REMOVE PARTITIONING
#define ALTER_REMOVE_PARTITIONING (1ULL << 20)
// Set for ADD FOREIGN KEY
#define ALTER_ADD_FOREIGN_KEY (1ULL << 21)
// Set for DROP FOREIGN KEY
#define ALTER_DROP_FOREIGN_KEY (1ULL << 22)
// Set for EXCHANGE PARITION
#define ALTER_EXCHANGE_PARTITION (1ULL << 23)
// Set by Sql_cmd_alter_table_truncate_partition::execute()
#define ALTER_TRUNCATE_PARTITION (1ULL << 24)
// Set for ADD [COLUMN] FIRST | AFTER
#define ALTER_COLUMN_ORDER (1ULL << 25)
#define ALTER_ADD_CHECK_CONSTRAINT (1ULL << 27)
#define ALTER_DROP_CHECK_CONSTRAINT (1ULL << 28)
#define ALTER_RENAME_COLUMN (1ULL << 29)
#define ALTER_COLUMN_UNVERSIONED (1ULL << 30)
#define ALTER_ADD_SYSTEM_VERSIONING (1ULL << 31)
#define ALTER_DROP_SYSTEM_VERSIONING (1ULL << 32)
#define ALTER_ADD_PERIOD (1ULL << 33)
#define ALTER_DROP_PERIOD (1ULL << 34)
/*
Following defines are used by ALTER_INPLACE_TABLE
They do describe in more detail the type operation(s) to be executed
by the storage engine. For example, which type of type of index to be
added/dropped. These are set by fill_alter_inplace_info().
*/
#define ALTER_RECREATE_TABLE ALTER_RECREATE
#define ALTER_CHANGE_CREATE_OPTION ALTER_OPTIONS
#define ALTER_ADD_COLUMN (ALTER_ADD_VIRTUAL_COLUMN | \
ALTER_ADD_STORED_BASE_COLUMN | \
ALTER_ADD_STORED_GENERATED_COLUMN)
#define ALTER_DROP_COLUMN (ALTER_DROP_VIRTUAL_COLUMN | \
ALTER_DROP_STORED_COLUMN)
#define ALTER_COLUMN_DEFAULT ALTER_CHANGE_COLUMN_DEFAULT
#define ALTER_DROP_HISTORICAL (1ULL << 35)
// Add non-unique, non-primary index
#define ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX (1ULL << 36)
// Drop non-unique, non-primary index
#define ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX (1ULL << 37)
// Add unique, non-primary index
#define ALTER_ADD_UNIQUE_INDEX (1ULL << 38)
// Drop unique, non-primary index
#define ALTER_DROP_UNIQUE_INDEX (1ULL << 39)
// Add primary index
#define ALTER_ADD_PK_INDEX (1ULL << 40)
// Drop primary index
#define ALTER_DROP_PK_INDEX (1ULL << 41)
// Virtual generated column
#define ALTER_ADD_VIRTUAL_COLUMN (1ULL << 42)
// Stored base (non-generated) column
#define ALTER_ADD_STORED_BASE_COLUMN (1ULL << 43)
// Stored generated column
#define ALTER_ADD_STORED_GENERATED_COLUMN (1ULL << 44)
// Drop column
#define ALTER_DROP_VIRTUAL_COLUMN (1ULL << 45)
#define ALTER_DROP_STORED_COLUMN (1ULL << 46)
// Rename column (verified; ALTER_RENAME_COLUMN may use original name)
#define ALTER_COLUMN_NAME (1ULL << 47)
// Change column datatype
#define ALTER_VIRTUAL_COLUMN_TYPE (1ULL << 48)
#define ALTER_STORED_COLUMN_TYPE (1ULL << 49)
/**
Change column datatype in such way that new type has compatible
packed representation with old type, so it is theoretically
possible to perform change by only updating data dictionary
without changing table rows.
*/
#define ALTER_COLUMN_EQUAL_PACK_LENGTH (1ULL << 50)
// Reorder column
#define ALTER_STORED_COLUMN_ORDER (1ULL << 51)
// Reorder column
#define ALTER_VIRTUAL_COLUMN_ORDER (1ULL << 52)
// Change column from NOT NULL to NULL
#define ALTER_COLUMN_NULLABLE (1ULL << 53)
// Change column from NULL to NOT NULL
#define ALTER_COLUMN_NOT_NULLABLE (1ULL << 54)
// Change column generation expression
#define ALTER_VIRTUAL_GCOL_EXPR (1ULL << 56)
#define ALTER_STORED_GCOL_EXPR (1ULL << 57)
// column's engine options changed, something in field->option_struct
#define ALTER_COLUMN_OPTION (1ULL << 59)
// MySQL alias for the same thing:
#define ALTER_COLUMN_STORAGE_TYPE (1ULL << 60)
// Change the column format of column
#define ALTER_COLUMN_COLUMN_FORMAT (1ULL << 61)
/**
Changes in generated columns that affect storage,
for example, when a vcol type or expression changes
and this vcol is indexed or used in a partitioning expression
*/
#define ALTER_COLUMN_VCOL (1ULL << 62)
/**
ALTER TABLE for a partitioned table. The engine needs to commit
online alter of all partitions atomically (using group_commit_ctx)
*/
#define ALTER_PARTITIONED (1ULL << 63)
/*
This is master database for most of system tables. However there
can be other databases which can hold system tables. Respective
@ -1249,7 +1420,7 @@ struct handlerton
bool (*flush_logs)(handlerton *hton);
bool (*show_status)(handlerton *hton, THD *thd, stat_print_fn *print, enum ha_stat_type stat);
uint (*partition_flags)();
ulonglong (*alter_table_flags)(ulonglong flags);
alter_table_operations (*alter_table_flags)(alter_table_operations flags);
int (*alter_tablespace)(handlerton *hton, THD *thd, st_alter_tablespace *ts_info);
int (*fill_is_table)(handlerton *hton, THD *thd, TABLE_LIST *tables,
class Item *cond,
@ -2025,166 +2196,6 @@ public:
class Alter_inplace_info
{
public:
/**
Bits to show in detail what operations the storage engine is
to execute.
All these operations are supported as in-place operations by the
SQL layer. This means that operations that by their nature must
be performed by copying the table to a temporary table, will not
have their own flags here.
We generally try to specify handler flags only if there are real
changes. But in cases when it is cumbersome to determine if some
attribute has really changed we might choose to set flag
pessimistically, for example, relying on parser output only.
*/
typedef ulonglong HA_ALTER_FLAGS;
// Add non-unique, non-primary index
static const HA_ALTER_FLAGS ADD_INDEX = 1ULL << 0;
// Drop non-unique, non-primary index
static const HA_ALTER_FLAGS DROP_INDEX = 1ULL << 1;
// Add unique, non-primary index
static const HA_ALTER_FLAGS ADD_UNIQUE_INDEX = 1ULL << 2;
// Drop unique, non-primary index
static const HA_ALTER_FLAGS DROP_UNIQUE_INDEX = 1ULL << 3;
// Add primary index
static const HA_ALTER_FLAGS ADD_PK_INDEX = 1ULL << 4;
// Drop primary index
static const HA_ALTER_FLAGS DROP_PK_INDEX = 1ULL << 5;
// Virtual generated column
static const HA_ALTER_FLAGS ADD_VIRTUAL_COLUMN = 1ULL << 6;
// Stored base (non-generated) column
static const HA_ALTER_FLAGS ADD_STORED_BASE_COLUMN = 1ULL << 7;
// Stored generated column
static const HA_ALTER_FLAGS ADD_STORED_GENERATED_COLUMN= 1ULL << 8;
// Add generic column (convience constant).
static const HA_ALTER_FLAGS ADD_COLUMN= ADD_VIRTUAL_COLUMN |
ADD_STORED_BASE_COLUMN |
ADD_STORED_GENERATED_COLUMN;
// Drop column
static const HA_ALTER_FLAGS DROP_VIRTUAL_COLUMN = 1ULL << 9;
static const HA_ALTER_FLAGS DROP_STORED_COLUMN = 1ULL << 10;
static const HA_ALTER_FLAGS DROP_COLUMN= DROP_VIRTUAL_COLUMN |
DROP_STORED_COLUMN;
// Rename column
static const HA_ALTER_FLAGS ALTER_COLUMN_NAME = 1ULL << 11;
// Change column datatype
static const HA_ALTER_FLAGS ALTER_VIRTUAL_COLUMN_TYPE = 1ULL << 12;
static const HA_ALTER_FLAGS ALTER_STORED_COLUMN_TYPE = 1ULL << 13;
/**
Change column datatype in such way that new type has compatible
packed representation with old type, so it is theoretically
possible to perform change by only updating data dictionary
without changing table rows.
*/
static const HA_ALTER_FLAGS ALTER_COLUMN_EQUAL_PACK_LENGTH = 1ULL << 14;
// Reorder column
static const HA_ALTER_FLAGS ALTER_STORED_COLUMN_ORDER = 1ULL << 15;
// Reorder column
static const HA_ALTER_FLAGS ALTER_VIRTUAL_COLUMN_ORDER = 1ULL << 16;
// Change column from NOT NULL to NULL
static const HA_ALTER_FLAGS ALTER_COLUMN_NULLABLE = 1ULL << 17;
// Change column from NULL to NOT NULL
static const HA_ALTER_FLAGS ALTER_COLUMN_NOT_NULLABLE = 1ULL << 18;
// Set or remove default column value
static const HA_ALTER_FLAGS ALTER_COLUMN_DEFAULT = 1ULL << 19;
// Change column generation expression
static const HA_ALTER_FLAGS ALTER_VIRTUAL_GCOL_EXPR = 1ULL << 20;
static const HA_ALTER_FLAGS ALTER_STORED_GCOL_EXPR = 1ULL << 21;
//
// Add foreign key
static const HA_ALTER_FLAGS ADD_FOREIGN_KEY = 1ULL << 22;
// Drop foreign key
static const HA_ALTER_FLAGS DROP_FOREIGN_KEY = 1ULL << 23;
// table_options changed, see HA_CREATE_INFO::used_fields for details.
static const HA_ALTER_FLAGS CHANGE_CREATE_OPTION = 1ULL << 24;
// Table is renamed
static const HA_ALTER_FLAGS ALTER_RENAME = 1ULL << 25;
// column's engine options changed, something in field->option_struct
static const HA_ALTER_FLAGS ALTER_COLUMN_OPTION = 1ULL << 26;
// MySQL alias for the same thing:
static const HA_ALTER_FLAGS ALTER_COLUMN_STORAGE_TYPE = 1ULL << 26;
// Change the column format of column
static const HA_ALTER_FLAGS ALTER_COLUMN_COLUMN_FORMAT = 1ULL << 27;
// Add partition
static const HA_ALTER_FLAGS ADD_PARTITION = 1ULL << 28;
// Drop partition
static const HA_ALTER_FLAGS DROP_PARTITION = 1ULL << 29;
// Changing partition options
static const HA_ALTER_FLAGS ALTER_PARTITION = 1ULL << 30;
// Coalesce partition
static const HA_ALTER_FLAGS COALESCE_PARTITION = 1ULL << 31;
// Reorganize partition ... into
static const HA_ALTER_FLAGS REORGANIZE_PARTITION = 1ULL << 32;
// Reorganize partition
static const HA_ALTER_FLAGS ALTER_TABLE_REORG = 1ULL << 33;
// Remove partitioning
static const HA_ALTER_FLAGS ALTER_REMOVE_PARTITIONING = 1ULL << 34;
// Partition operation with ALL keyword
static const HA_ALTER_FLAGS ALTER_ALL_PARTITION = 1ULL << 35;
/**
Recreate the table for ALTER TABLE FORCE, ALTER TABLE ENGINE
and OPTIMIZE TABLE operations.
*/
static const HA_ALTER_FLAGS RECREATE_TABLE = 1ULL << 36;
/**
Changes in generated columns that affect storage,
for example, when a vcol type or expression changes
and this vcol is indexed or used in a partitioning expression
*/
static const HA_ALTER_FLAGS ALTER_COLUMN_VCOL = 1ULL << 37;
/**
ALTER TABLE for a partitioned table. The engine needs to commit
online alter of all partitions atomically (using group_commit_ctx)
*/
static const HA_ALTER_FLAGS ALTER_PARTITIONED = 1ULL << 38;
static const HA_ALTER_FLAGS ALTER_ADD_CHECK_CONSTRAINT = 1ULL << 39;
static const HA_ALTER_FLAGS ALTER_DROP_CHECK_CONSTRAINT= 1ULL << 40;
static const HA_ALTER_FLAGS ALTER_DROP_HISTORICAL = 1ULL << 41;
static const HA_ALTER_FLAGS ALTER_COLUMN_UNVERSIONED = 1ULL << 42;
static const HA_ALTER_FLAGS ALTER_ADD_SYSTEM_VERSIONING= 1ULL << 43;
static const HA_ALTER_FLAGS ALTER_DROP_SYSTEM_VERSIONING= 1ULL << 44;
/**
Create options (like MAX_ROWS) for the new version of table.
@ -2269,9 +2280,10 @@ public:
inplace_alter_handler_ctx **group_commit_ctx;
/**
Flags describing in detail which operations the storage engine is to execute.
Flags describing in detail which operations the storage engine is to
execute. Flags are defined in sql_alter.h
*/
HA_ALTER_FLAGS handler_flags;
alter_table_operations handler_flags;
/**
Partition_info taking into account the partition changes to be performed.
@ -4269,7 +4281,7 @@ public:
but we don't have a primary key
*/
virtual void use_hidden_primary_key();
virtual ulonglong alter_table_flags(ulonglong flags)
virtual alter_table_operations alter_table_flags(alter_table_operations flags)
{
if (ht->alter_table_flags)
return ht->alter_table_flags(flags);