/* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. 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-1301 USA */ #ifndef SQL_SHOW_H #define SQL_SHOW_H #include "my_global.h" #include "handler.h" // enum_schema_tables #include "table.h" // enum_schema_table_state #include "set_var.h" // enum_var_type /* Forward declarations */ class JOIN; class sp_name; typedef class st_select_lex SELECT_LEX; typedef struct system_status_var STATUS_VAR; // TODO: allocator based on my_malloc. typedef std::vector Status_var_array; enum find_files_result { FIND_FILES_OK, FIND_FILES_OOM, FIND_FILES_DIR }; /* Define fields' indexes for COLUMNS table of I_S tables */ #define IS_COLUMNS_TABLE_CATALOG 0 #define IS_COLUMNS_TABLE_SCHEMA 1 #define IS_COLUMNS_TABLE_NAME 2 #define IS_COLUMNS_COLUMN_NAME 3 #define IS_COLUMNS_ORDINAL_POSITION 4 #define IS_COLUMNS_COLUMN_DEFAULT 5 #define IS_COLUMNS_IS_NULLABLE 6 #define IS_COLUMNS_DATA_TYPE 7 #define IS_COLUMNS_CHARACTER_MAXIMUM_LENGTH 8 #define IS_COLUMNS_CHARACTER_OCTET_LENGTH 9 #define IS_COLUMNS_NUMERIC_PRECISION 10 #define IS_COLUMNS_NUMERIC_SCALE 11 #define IS_COLUMNS_DATETIME_PRECISION 12 #define IS_COLUMNS_CHARACTER_SET_NAME 13 #define IS_COLUMNS_COLLATION_NAME 14 #define IS_COLUMNS_COLUMN_TYPE 15 #define IS_COLUMNS_COLUMN_KEY 16 #define IS_COLUMNS_EXTRA 17 #define IS_COLUMNS_PRIVILEGES 18 #define IS_COLUMNS_COLUMN_COMMENT 19 #define IS_COLUMNS_GENERATION_EXPRESSION 20 /* Define fields' indexes for ROUTINES table of I_S tables */ #define IS_ROUTINES_SPECIFIC_NAME 0 #define IS_ROUTINES_ROUTINE_CATALOG 1 #define IS_ROUTINES_ROUTINE_SCHEMA 2 #define IS_ROUTINES_ROUTINE_NAME 3 #define IS_ROUTINES_ROUTINE_TYPE 4 #define IS_ROUTINES_DATA_TYPE 5 #define IS_ROUTINES_CHARACTER_MAXIMUM_LENGTH 6 #define IS_ROUTINES_CHARACTER_OCTET_LENGTH 7 #define IS_ROUTINES_NUMERIC_PRECISION 8 #define IS_ROUTINES_NUMERIC_SCALE 9 #define IS_ROUTINES_DATETIME_PRECISION 10 #define IS_ROUTINES_CHARACTER_SET_NAME 11 #define IS_ROUTINES_COLLATION_NAME 12 #define IS_ROUTINES_DTD_IDENTIFIER 13 #define IS_ROUTINES_ROUTINE_BODY 14 #define IS_ROUTINES_ROUTINE_DEFINITION 15 #define IS_ROUTINES_EXTERNAL_NAME 16 #define IS_ROUTINES_EXTERNAL_LANGUAGE 17 #define IS_ROUTINES_PARAMETER_STYLE 18 #define IS_ROUTINES_IS_DETERMINISTIC 19 #define IS_ROUTINES_SQL_DATA_ACCESS 20 #define IS_ROUTINES_SQL_PATH 21 #define IS_ROUTINES_SECURITY_TYPE 22 #define IS_ROUTINES_CREATED 23 #define IS_ROUTINES_LAST_ALTERED 24 #define IS_ROUTINES_SQL_MODE 25 #define IS_ROUTINES_ROUTINE_COMMENT 26 #define IS_ROUTINES_DEFINER 27 #define IS_ROUTINES_CHARACTER_SET_CLIENT 28 #define IS_ROUTINES_COLLATION_CONNECTION 29 #define IS_ROUTINES_DATABASE_COLLATION 30 /* Define fields' indexes for PARAMETERS table of I_S tables */ #define IS_PARAMETERS_SPECIFIC_CATALOG 0 #define IS_PARAMETERS_SPECIFIC_SCHEMA 1 #define IS_PARAMETERS_SPECIFIC_NAME 2 #define IS_PARAMETERS_ORDINAL_POSITION 3 #define IS_PARAMETERS_PARAMETER_MODE 4 #define IS_PARAMETERS_PARAMETER_NAME 5 #define IS_PARAMETERS_DATA_TYPE 6 #define IS_PARAMETERS_CHARACTER_MAXIMUM_LENGTH 7 #define IS_PARAMETERS_CHARACTER_OCTET_LENGTH 8 #define IS_PARAMETERS_NUMERIC_PRECISION 9 #define IS_PARAMETERS_NUMERIC_SCALE 10 #define IS_PARAMETERS_DATETIME_PRECISION 11 #define IS_PARAMETERS_CHARACTER_SET_NAME 12 #define IS_PARAMETERS_COLLATION_NAME 13 #define IS_PARAMETERS_DTD_IDENTIFIER 14 #define IS_PARAMETERS_ROUTINE_TYPE 15 /* Used by handlers to store things in schema tables */ #define IS_FILES_FILE_ID 0 #define IS_FILES_FILE_NAME 1 #define IS_FILES_FILE_TYPE 2 #define IS_FILES_TABLESPACE_NAME 3 #define IS_FILES_TABLE_CATALOG 4 #define IS_FILES_TABLE_SCHEMA 5 #define IS_FILES_TABLE_NAME 6 #define IS_FILES_LOGFILE_GROUP_NAME 7 #define IS_FILES_LOGFILE_GROUP_NUMBER 8 #define IS_FILES_ENGINE 9 #define IS_FILES_FULLTEXT_KEYS 10 #define IS_FILES_DELETED_ROWS 11 #define IS_FILES_UPDATE_COUNT 12 #define IS_FILES_FREE_EXTENTS 13 #define IS_FILES_TOTAL_EXTENTS 14 #define IS_FILES_EXTENT_SIZE 15 #define IS_FILES_INITIAL_SIZE 16 #define IS_FILES_MAXIMUM_SIZE 17 #define IS_FILES_AUTOEXTEND_SIZE 18 #define IS_FILES_CREATION_TIME 19 #define IS_FILES_LAST_UPDATE_TIME 20 #define IS_FILES_LAST_ACCESS_TIME 21 #define IS_FILES_RECOVER_TIME 22 #define IS_FILES_TRANSACTION_COUNTER 23 #define IS_FILES_VERSION 24 #define IS_FILES_ROW_FORMAT 25 #define IS_FILES_TABLE_ROWS 26 #define IS_FILES_AVG_ROW_LENGTH 27 #define IS_FILES_DATA_LENGTH 28 #define IS_FILES_MAX_DATA_LENGTH 29 #define IS_FILES_INDEX_LENGTH 30 #define IS_FILES_DATA_FREE 31 #define IS_FILES_CREATE_TIME 32 #define IS_FILES_UPDATE_TIME 33 #define IS_FILES_CHECK_TIME 34 #define IS_FILES_CHECKSUM 35 #define IS_FILES_STATUS 36 #define IS_FILES_EXTRA 37 find_files_result find_files(THD *thd, List *files, const char *db, const char *path, const char *wild, bool dir, MEM_ROOT *tmp_mem_root); int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, HA_CREATE_INFO *create_info_arg, bool show_database); int view_store_create_info(THD *thd, TABLE_LIST *table, String *buff); int copy_event_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table); void append_identifier(THD *thd, String *packet, const char *name, size_t length, const CHARSET_INFO *from_cs, const CHARSET_INFO *to_cs); inline void append_identifier(THD *thd, String *packet, const char *name, size_t length) { append_identifier(thd, packet, name, length, NULL, NULL); } inline void append_identifier(THD *thd, String *packet, Simple_cstring str) { append_identifier(thd, packet, str.ptr(), str.length()); } void mysqld_list_fields(THD *thd,TABLE_LIST *table, const char *wild); bool mysqld_show_create(THD *thd, TABLE_LIST *table_list); bool mysqld_show_create_db(THD *thd, char *dbname, HA_CREATE_INFO *create); void mysqld_list_processes(THD *thd,const char *user,bool verbose); int mysqld_show_status(THD *thd); int mysqld_show_variables(THD *thd,const char *wild); bool mysqld_show_storage_engines(THD *thd); bool mysqld_show_privileges(THD *thd); char *make_backup_log_name(char *buff, const char *name, const char* log_ext); void calc_sum_of_all_status(STATUS_VAR *to); void append_definer(THD *thd, String *buffer, const LEX_CSTRING &definer_user, const LEX_CSTRING &definer_host); int add_status_vars(const SHOW_VAR *list); DYNAMIC_ARRAY *get_status_vars(); void remove_status_vars(SHOW_VAR *list); void init_status_vars(); void free_status_vars(); bool get_status_var(THD *thd, SHOW_VAR *list, const char *name, char * const buff, enum_var_type var_type, size_t *length); void reset_status_vars(); ulonglong get_status_vars_version(void); bool show_create_trigger(THD *thd, const sp_name *trg_name); void view_store_options(THD *thd, TABLE_LIST *table, String *buff); void init_fill_schema_files_row(TABLE* table); bool schema_table_store_record(THD *thd, TABLE *table); /** Store record to I_S table, convert HEAP table to InnoDB table if necessary. @param[in] thd thread handler @param[in] table Information schema table to be updated @param[in] make_ondisk if true, convert heap table to on disk table. default value is true. @return 0 on success @return error code on failure. */ int schema_table_store_record2(THD *thd, TABLE *table, bool make_ondisk); /** Convert HEAP table to InnoDB table if necessary @param[in] thd thread handler @param[in] table Information schema table to be converted. @param[in] error the error code returned previously. @return false on success, true on error. */ bool convert_heap_table_to_ondisk(THD *thd, TABLE *table, int error); void initialize_information_schema_acl(); ST_SCHEMA_TABLE *find_schema_table(THD *thd, const char* table_name); ST_SCHEMA_TABLE *get_schema_table(enum enum_schema_tables schema_table_idx); int make_schema_select(THD *thd, SELECT_LEX *sel, enum enum_schema_tables schema_table_idx); int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list); bool get_schema_tables_result(JOIN *join, enum enum_schema_table_state executed_place); enum enum_schema_tables get_schema_table_idx(ST_SCHEMA_TABLE *schema_table); const char* get_one_variable(THD *thd, const SHOW_VAR *variable, enum_var_type value_type, SHOW_TYPE show_type, system_status_var *status_var, const CHARSET_INFO **charset, char *buff, size_t *length); const char* get_one_variable_ext(THD *running_thd, THD *target_thd, const SHOW_VAR *variable, enum_var_type value_type, SHOW_TYPE show_type, system_status_var *status_var, const CHARSET_INFO **charset, char *buff, size_t *length); /* These functions were under INNODB_COMPATIBILITY_HOOKS */ int get_quote_char_for_identifier(THD *thd, const char *name, size_t length); /* Handle the ignored database directories list for SHOW/I_S/initialize. */ void ignore_db_dirs_init(); void ignore_db_dirs_free(); void ignore_db_dirs_reset(); bool ignore_db_dirs_process_additions(); bool push_ignored_db_dir(char *path); extern char *opt_ignore_db_dirs; bool is_in_ignore_db_dirs_list(const char *directory); #endif /* SQL_SHOW_H */