mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Applied all changes from Igor and Sanja
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include "my_sys.h" // pthread_mutex_t
|
||||
|
||||
class Alter_info;
|
||||
class Alter_table_ctx;
|
||||
class Create_field;
|
||||
struct TABLE_LIST;
|
||||
class THD;
|
||||
@@ -31,7 +32,6 @@ typedef struct st_key KEY;
|
||||
typedef struct st_key_cache KEY_CACHE;
|
||||
typedef struct st_lock_param_type ALTER_PARTITION_PARAM_TYPE;
|
||||
typedef struct st_order ORDER;
|
||||
class Alter_table_change_level;
|
||||
|
||||
enum ddl_log_entry_code
|
||||
{
|
||||
@@ -63,10 +63,19 @@ enum ddl_log_action_code
|
||||
DDL_LOG_REPLACE_ACTION:
|
||||
Rename an entity after removing the previous entry with the
|
||||
new name, that is replace this entry.
|
||||
DDL_LOG_EXCHANGE_ACTION:
|
||||
Exchange two entities by renaming them a -> tmp, b -> a, tmp -> b.
|
||||
*/
|
||||
DDL_LOG_DELETE_ACTION = 'd',
|
||||
DDL_LOG_RENAME_ACTION = 'r',
|
||||
DDL_LOG_REPLACE_ACTION = 's'
|
||||
DDL_LOG_REPLACE_ACTION = 's',
|
||||
DDL_LOG_EXCHANGE_ACTION = 'e'
|
||||
};
|
||||
|
||||
enum enum_ddl_log_exchange_phase {
|
||||
EXCH_PHASE_NAME_TO_TEMP= 0,
|
||||
EXCH_PHASE_FROM_TO_NAME= 1,
|
||||
EXCH_PHASE_TEMP_TO_FROM= 2
|
||||
};
|
||||
|
||||
|
||||
@@ -75,6 +84,7 @@ typedef struct st_ddl_log_entry
|
||||
const char *name;
|
||||
const char *from_name;
|
||||
const char *handler_name;
|
||||
const char *tmp_name;
|
||||
uint next_entry;
|
||||
uint entry_pos;
|
||||
enum ddl_log_entry_code entry_type;
|
||||
@@ -113,11 +123,15 @@ enum enum_explain_filename_mode
|
||||
#define WFRM_KEEP_SHARE 8
|
||||
|
||||
/* Flags for conversion functions. */
|
||||
#define FN_FROM_IS_TMP (1 << 0)
|
||||
#define FN_TO_IS_TMP (1 << 1)
|
||||
#define FN_IS_TMP (FN_FROM_IS_TMP | FN_TO_IS_TMP)
|
||||
#define NO_FRM_RENAME (1 << 2)
|
||||
#define FRM_ONLY (1 << 3)
|
||||
static const uint FN_FROM_IS_TMP= 1 << 0;
|
||||
static const uint FN_TO_IS_TMP= 1 << 1;
|
||||
static const uint FN_IS_TMP= FN_FROM_IS_TMP | FN_TO_IS_TMP;
|
||||
static const uint NO_FRM_RENAME= 1 << 2;
|
||||
static const uint FRM_ONLY= 1 << 3;
|
||||
/** Don't remove table in engine. Remove only .FRM and maybe .PAR files. */
|
||||
static const uint NO_HA_TABLE= 1 << 4;
|
||||
/** Don't resolve MySQL's fake "foo.sym" symbolic directory names. */
|
||||
static const uint SKIP_SYMDIR_ACCESS= 1 << 5;
|
||||
|
||||
uint filename_to_tablename(const char *from, char *to, uint to_length
|
||||
#ifndef DBUG_OFF
|
||||
@@ -131,38 +145,73 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db,
|
||||
const char *table, const char *ext, uint flags);
|
||||
uint build_table_shadow_filename(char *buff, size_t bufflen,
|
||||
ALTER_PARTITION_PARAM_TYPE *lpt);
|
||||
uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen);
|
||||
bool check_table_file_presence(char *old_path, char *path, const char *db,
|
||||
const char *table_name, const char *alias,
|
||||
bool issue_error);
|
||||
bool mysql_create_table(THD *thd, TABLE_LIST *create_table,
|
||||
HA_CREATE_INFO *create_info,
|
||||
Alter_info *alter_info);
|
||||
/*
|
||||
mysql_create_table_no_lock can be called in one of the following
|
||||
mutually exclusive situations:
|
||||
|
||||
- Just a normal ordinary CREATE TABLE statement that explicitly
|
||||
defines the table structure.
|
||||
|
||||
- CREATE TABLE ... SELECT. It is special, because only in this case,
|
||||
the list of fields is allowed to have duplicates, as long as one of the
|
||||
duplicates comes from the select list, and the other doesn't. For
|
||||
example in
|
||||
|
||||
CREATE TABLE t1 (a int(5) NOT NUL) SELECT b+10 as a FROM t2;
|
||||
|
||||
the list in alter_info->create_list will have two fields `a`.
|
||||
|
||||
- ALTER TABLE, that creates a temporary table #sql-xxx, which will be later
|
||||
renamed to replace the original table.
|
||||
|
||||
- ALTER TABLE as above, but which only modifies the frm file, it only
|
||||
creates an frm file for the #sql-xxx, the table in the engine is not
|
||||
created.
|
||||
|
||||
- Assisted discovery, CREATE TABLE statement without the table structure.
|
||||
|
||||
These situations are distinguished by the following "create table mode"
|
||||
values, where a CREATE ... SELECT is denoted by any non-negative number
|
||||
(which should be the number of fields in the SELECT ... part), and other
|
||||
cases use constants as defined below.
|
||||
*/
|
||||
#define C_CREATE_SELECT(X) ((X) > 0 ? (X) : 0)
|
||||
#define C_ORDINARY_CREATE 0
|
||||
#define C_ALTER_TABLE -1
|
||||
#define C_ALTER_TABLE_FRM_ONLY -2
|
||||
#define C_ASSISTED_DISCOVERY -3
|
||||
|
||||
bool mysql_create_table_no_lock(THD *thd, const char *db,
|
||||
const char *table_name,
|
||||
HA_CREATE_INFO *create_info,
|
||||
Alter_info *alter_info,
|
||||
bool tmp_table, uint select_field_count,
|
||||
bool *is_trans);
|
||||
Alter_info *alter_info, bool *is_trans,
|
||||
int create_table_mode);
|
||||
|
||||
int mysql_discard_or_import_tablespace(THD *thd,
|
||||
TABLE_LIST *table_list,
|
||||
bool discard);
|
||||
bool mysql_prepare_alter_table(THD *thd, TABLE *table,
|
||||
HA_CREATE_INFO *create_info,
|
||||
Alter_info *alter_info);
|
||||
Alter_info *alter_info,
|
||||
Alter_table_ctx *alter_ctx);
|
||||
bool mysql_trans_prepare_alter_copy_data(THD *thd);
|
||||
bool mysql_trans_commit_alter_copy_data(THD *thd);
|
||||
bool mysql_alter_table(THD *thd, char *new_db, char *new_name,
|
||||
HA_CREATE_INFO *create_info,
|
||||
TABLE_LIST *table_list,
|
||||
Alter_info *alter_info,
|
||||
uint order_num, ORDER *order, bool ignore,
|
||||
bool require_online);
|
||||
uint order_num, ORDER *order, bool ignore);
|
||||
bool mysql_compare_tables(TABLE *table,
|
||||
Alter_info *alter_info,
|
||||
HA_CREATE_INFO *create_info,
|
||||
uint order_num,
|
||||
Alter_table_change_level *need_copy_table,
|
||||
KEY **key_info_buffer,
|
||||
uint **index_drop_buffer, uint *index_drop_count,
|
||||
uint **index_add_buffer, uint *index_add_count,
|
||||
uint *candidate_key_count);
|
||||
bool *metadata_equal);
|
||||
bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list);
|
||||
bool mysql_create_like_table(THD *thd, TABLE_LIST *table,
|
||||
TABLE_LIST *src_table,
|
||||
@@ -181,7 +230,7 @@ bool mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists,
|
||||
int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
|
||||
bool drop_temporary, bool drop_view,
|
||||
bool log_query);
|
||||
bool quick_rm_table(handlerton *base,const char *db,
|
||||
bool quick_rm_table(THD *thd, handlerton *base, const char *db,
|
||||
const char *table_name, uint flags);
|
||||
void close_cached_table(THD *thd, TABLE *table);
|
||||
void sp_prepare_create_field(THD *thd, Create_field *sql_field);
|
||||
@@ -205,6 +254,9 @@ bool sync_ddl_log();
|
||||
void release_ddl_log();
|
||||
void execute_ddl_log_recovery();
|
||||
bool execute_ddl_log_entry(THD *thd, uint first_entry);
|
||||
bool validate_comment_length(THD *thd, const char *comment_str,
|
||||
size_t *comment_len, uint max_len,
|
||||
uint err_code, const char *comment_name);
|
||||
bool check_duplicate_warning(THD *thd, char *msg, ulong length);
|
||||
|
||||
template<typename T> class List;
|
||||
|
Reference in New Issue
Block a user