/* Copyright (c) 2006, 2014, Oracle and/or its affiliates.
Copyright ( c ) 2011 , 2017 , MariaDB Corporation .
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; version 2 of the License .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
#ifndef SQL_TABLE_INCLUDED
#define SQL_TABLE_INCLUDED
#include <my_sys.h> // pthread_mutex_t
#include "m_string.h" // LEX_CUSTRING
#include "lex_charset.h"
#include "lex_ident.h"
#define ERROR_INJECT(code) \
((DBUG_IF("crash_" code) && (DBUG_SUICIDE(), 0 )) || \
(DBUG_IF("fail_" code) && (my_error(ER_UNKNOWN_ERROR, MYF(0 )), 1 )))
class Alter_info;
class Alter_table_ctx;
class Column_definition;
class Create_field;
struct TABLE_LIST;
class THD;
struct TABLE;
struct handlerton;
class handler;
class String;
typedef struct st_ha_check_opt HA_CHECK_OPT;
struct HA_CREATE_INFO;
struct Table_specification_st;
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;
typedef struct st_ddl_log_state DDL_LOG_STATE;
extern LEX_CSTRING generated_by_server;
enum enum_explain_filename_mode
{
EXPLAIN_ALL_VERBOSE= 0 ,
EXPLAIN_PARTITIONS_VERBOSE,
EXPLAIN_PARTITIONS_AS_COMMENT
};
/* depends on errmsg.txt Database `db`, Table `t` ... */
#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63
/* See mysql_write_frm function comment for explanations of these flags */
#define WFRM_WRITE_SHADOW 1
#define WFRM_INSTALL_SHADOW 2
#define WFRM_KEEP_SHARE 4
#define WFRM_WRITE_CONVERTED_TO 8
#define WFRM_BACKUP_ORIGINAL 16
#define WFRM_ALTER_INFO_PREPARED 32
/* Flags for conversion functions. */
static constexpr uint FN_FROM_IS_TMP= 1 << 0 ;
static constexpr uint FN_TO_IS_TMP= 1 << 1 ;
static constexpr uint FN_IS_TMP= FN_FROM_IS_TMP | FN_TO_IS_TMP;
/* Remove .frm table metadata. */
static constexpr uint QRMT_FRM= 1 << 2 ;
/* Remove .par partitioning metadata. */
static constexpr uint QRMT_PAR= 1 << 3 ;
/* Remove handler files and high-level indexes. */
static constexpr uint QRMT_HANDLER= 1 << 4 ;
/* Default behaviour is to drop .FRM and handler, but not .par. */
static constexpr uint QRMT_DEFAULT= QRMT_FRM | QRMT_HANDLER;
/** Don't resolve MySQL's fake "foo.sym" symbolic directory names. */
static constexpr uint SKIP_SYMDIR_ACCESS= 1 << 5 ;
/** Don't check foreign key constraints while renaming table */
static constexpr uint NO_FK_CHECKS= 1 << 6 ;
uint filename_to_tablename(const char *from, char *to, size_t to_length,
bool stay_quiet = false );
uint tablename_to_filename(const char *from, char *to, size_t to_length);
uint check_n_cut_mysql50_prefix(const char *from, char *to, size_t to_length);
bool check_mysql50_prefix(const char *name);
bool error_if_mysql50_prefix(const char *name, uint error);
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,
bool backup= false );
void build_lower_case_table_filename(char *buff, size_t bufflen,
const LEX_CSTRING *db,
const LEX_CSTRING *table,
uint flags);
uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen);
void make_tmp_table_name(THD *thd, LEX_STRING *to, const char *prefix);
bool add_keyword_to_query(THD *thd, String *result, const LEX_CSTRING *keyword,
const LEX_CSTRING *add);
/*
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_ORDINARY_CREATE 0
#define C_ASSISTED_DISCOVERY -1
#define C_ALTER_TABLE -2
#define C_ALTER_TABLE_FRM_ONLY -3
int mysql_create_table_no_lock(THD *thd,
DDL_LOG_STATE *ddl_log_state,
DDL_LOG_STATE *ddl_log_state_rm,
Table_specification_st *create_info,
Alter_info *alter_info, bool *is_trans,
int create_table_mode, TABLE_LIST *table);
handler *mysql_create_frm_image(THD *thd, HA_CREATE_INFO *create_info,
Alter_info *alter_info, int create_table_mode,
KEY **key_info, uint *key_count,
LEX_CUSTRING *frm);
int mysql_discard_or_import_tablespace(THD *thd, TABLE_LIST *table_list,
bool discard);
bool mysql_prepare_alter_table(THD *thd, TABLE *table,
Table_specification_st *create_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, const LEX_CSTRING *new_db,
const LEX_CSTRING *new_name,
Table_specification_st *create_info,
TABLE_LIST *table_list,
class Recreate_info *recreate_info,
Alter_info *alter_info,
uint order_num, ORDER *order, bool ignore,
bool if_exists);
bool mysql_compare_tables(TABLE *table,
Alter_info *alter_info,
HA_CREATE_INFO *create_info,
bool *metadata_equal);
bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list,
class Recreate_info *recreate_info,
bool table_copy);
bool mysql_rename_table(handlerton *base, const LEX_CSTRING *old_db,
const LEX_CSTRING *old_name, const LEX_CSTRING *new_db,
const LEX_CSTRING *new_name, const LEX_CUSTRING *id,
uint flags);
bool mysql_backup_table(THD* thd, TABLE_LIST* table_list);
bool mysql_restore_table(THD* thd, TABLE_LIST* table_list);
template <typename T> class List;
void fill_checksum_table_metadata_fields(THD *thd, List<Item> *fields);
bool mysql_checksum_table(THD* thd, TABLE_LIST* table_list,
HA_CHECK_OPT* check_opt);
bool mysql_rm_table(THD *thd,TABLE_LIST *tables, bool if_exists,
bool drop_temporary, bool drop_sequence,
bool dont_log_query);
int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables,
const LEX_CSTRING *db,
DDL_LOG_STATE *ddl_log_state,
bool if_exists,
bool drop_temporary, bool drop_view,
bool drop_sequence,
bool dont_log_query, bool dont_free_locks);
bool log_drop_table(THD *thd, const LEX_CSTRING *db_name,
const LEX_CSTRING *table_name, const LEX_CSTRING *handler,
bool partitioned, const LEX_CUSTRING *id,
bool temporary_table);
int get_hlindex_keys_by_open(THD *thd, const LEX_CSTRING *db,
const LEX_CSTRING *table_name, const char *path,
uint *keys, uint *total_keys);
bool quick_rm_table(THD *thd, handlerton *base, const LEX_CSTRING *db,
const LEX_CSTRING *table_name, uint flags,
const char *table_path=0 );
void close_cached_table(THD *thd, TABLE *table);
bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags);
int write_bin_log(THD *thd, bool clear_error,
char const *query, ulong query_length,
bool is_trans= FALSE );
int write_bin_log_with_if_exists(THD *thd, bool clear_error,
bool is_trans, bool add_if_exists,
bool commit_alter= false );
void promote_first_timestamp_column(List<Create_field> *column_definitions);
/*
These prototypes where under INNODB_COMPATIBILITY_HOOKS .
*/
uint explain_filename(THD* thd, const char *from, char *to, uint to_length,
enum_explain_filename_mode explain_mode);
extern MYSQL_PLUGIN_IMPORT const Lex_ident_column primary_key_name;
bool check_engine(THD *, const char *, const char *, HA_CREATE_INFO *);
#endif /* SQL_TABLE_INCLUDED */
Messung V0.5 in Prozent C=94 H=100 G=96
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland