diff options
Diffstat (limited to 'storage/xtradb/include/dict0load.h')
-rw-r--r-- | storage/xtradb/include/dict0load.h | 155 |
1 files changed, 116 insertions, 39 deletions
diff --git a/storage/xtradb/include/dict0load.h b/storage/xtradb/include/dict0load.h index 5bb015346ac..030190b1a8e 100644 --- a/storage/xtradb/include/dict0load.h +++ b/storage/xtradb/include/dict0load.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2013, 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 @@ -11,8 +11,8 @@ 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 +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -29,38 +29,46 @@ Created 4/24/1996 Heikki Tuuri #include "univ.i" #include "dict0types.h" +#include "trx0types.h" #include "ut0byte.h" #include "mem0mem.h" #include "btr0types.h" -/** enum that defines all 6 system table IDs */ -enum dict_system_table_id { +/** enum that defines all system table IDs. @see SYSTEM_TABLE_NAME[] */ +enum dict_system_id_t { SYS_TABLES = 0, SYS_INDEXES, SYS_COLUMNS, SYS_FIELDS, SYS_FOREIGN, SYS_FOREIGN_COLS, - SYS_STATS, + SYS_TABLESPACES, + SYS_DATAFILES, /* This must be last item. Defines the number of system tables. */ SYS_NUM_SYSTEM_TABLES }; -typedef enum dict_system_table_id dict_system_id_t; - -/** Status bit for dict_process_sys_tables_rec() */ -enum dict_table_info { +/** Status bit for dict_process_sys_tables_rec_and_mtr_commit() */ +enum dict_table_info_t { DICT_TABLE_LOAD_FROM_RECORD = 0,/*!< Directly populate a dict_table_t structure with information from a SYS_TABLES record */ - DICT_TABLE_LOAD_FROM_CACHE = 1, /*!< Check first whether dict_table_t + DICT_TABLE_LOAD_FROM_CACHE = 1 /*!< Check first whether dict_table_t is in the cache, if so, return it */ - DICT_TABLE_UPDATE_STATS = 2 /*!< whether to update statistics - when loading SYS_TABLES information. */ }; -typedef enum dict_table_info dict_table_info_t; +/** Check type for dict_check_tablespaces_and_store_max_id() */ +enum dict_check_t { + /** No user tablespaces have been opened + (no crash recovery, no transactions recovered). */ + DICT_CHECK_NONE_LOADED = 0, + /** Some user tablespaces may have been opened + (no crash recovery; recovered table locks for transactions). */ + DICT_CHECK_SOME_LOADED, + /** All user tablespaces have been opened (crash recovery). */ + DICT_CHECK_ALL_LOADED +}; /********************************************************************//** In a crash recovery we already have all the tablespace objects created. @@ -74,7 +82,7 @@ UNIV_INTERN void dict_check_tablespaces_and_store_max_id( /*====================================*/ - ibool in_crash_recovery); /*!< in: are we doing a crash recovery */ + dict_check_t dict_check); /*!< in: how to check */ /********************************************************************//** Finds the first table name in the given database. @return own: table name, NULL if does not exist; the caller must free @@ -156,12 +164,28 @@ dict_load_field_low( byte* last_index_id, /*!< in: last index id */ mem_heap_t* heap, /*!< in/out: memory heap for temporary storage */ - const rec_t* rec, /*!< in: SYS_FIELDS record */ - char* addition_err_str,/*!< out: additional error message - that requires information to be - filled, or NULL */ - ulint err_str_len); /*!< in: length of addition_err_str - in bytes */ + const rec_t* rec); /*!< in: SYS_FIELDS record */ +/********************************************************************//** +Using the table->heap, copy the null-terminated filepath into +table->data_dir_path and put a null byte before the extension. +This allows SHOW CREATE TABLE to return the correct DATA DIRECTORY path. +Make this data directory path only if it has not yet been saved. */ +UNIV_INTERN +void +dict_save_data_dir_path( +/*====================*/ + dict_table_t* table, /*!< in/out: table */ + char* filepath); /*!< in: filepath of tablespace */ +/*****************************************************************//** +Make sure the data_file_name is saved in dict_table_t if needed. Try to +read it from the file dictionary first, then from SYS_DATAFILES. */ +UNIV_INTERN +void +dict_get_and_save_data_dir_path( +/*============================*/ + dict_table_t* table, /*!< in/out: table */ + bool dict_mutex_own); /*!< in: true if dict_sys->mutex + is owned already */ /********************************************************************//** Loads a table definition and also all its index definitions, and also the cluster definition if the table is a member in a cluster. Also loads @@ -187,7 +211,9 @@ UNIV_INTERN dict_table_t* dict_load_table_on_id( /*==================*/ - table_id_t table_id); /*!< in: table id */ + table_id_t table_id, /*!< in: table id */ + dict_err_ignore_t ignore_err); /*!< in: errors to ignore + when loading the table */ /********************************************************************//** This function is called when the database is booted. Loads system table index definitions except for the clustered index which @@ -205,16 +231,19 @@ cache already contains all constraints where the other relevant table is already in the dictionary cache. @return DB_SUCCESS or error code */ UNIV_INTERN -ulint +dberr_t dict_load_foreigns( /*===============*/ const char* table_name, /*!< in: table name */ - ibool check_recursive,/*!< in: Whether to check + const char** col_names, /*!< in: column names, or NULL + to use table->col_names */ + bool check_recursive,/*!< in: Whether to check recursive load of tables chained by FK */ - ibool check_charsets, /*!< in: TRUE=check charsets - compatibility */ - dict_err_ignore_t ignore_err); /*!< in: error to be ignored */ + bool check_charsets, /*!< in: whether to check + charset compatibility */ + dict_err_ignore_t ignore_err) /*!< in: error to be ignored */ + __attribute__((nonnull(1), warn_unused_result)); /********************************************************************//** Prints to the standard output information on all tables found in the data dictionary system table. */ @@ -251,15 +280,17 @@ both monitor table output and information schema innodb_sys_tables output. @return error message, or NULL on success */ UNIV_INTERN const char* -dict_process_sys_tables_rec( -/*========================*/ +dict_process_sys_tables_rec_and_mtr_commit( +/*=======================================*/ mem_heap_t* heap, /*!< in: temporary memory heap */ const rec_t* rec, /*!< in: SYS_TABLES record */ dict_table_t** table, /*!< out: dict_table_t to fill */ - dict_table_info_t status); /*!< in: status bit controls + dict_table_info_t status, /*!< in: status bit controls options such as whether we shall look for dict_table_t from cache first */ + mtr_t* mtr); /*!< in/out: mini-transaction, + will be committed */ /********************************************************************//** This function parses a SYS_INDEXES record and populate a dict_index_t structure with the information from the record. For detail information @@ -331,19 +362,65 @@ dict_process_sys_foreign_col_rec( in referenced table */ ulint* pos); /*!< out: column position */ /********************************************************************//** -This function parses a SYS_STATS record and extract necessary -information from the record and return to caller. +This function parses a SYS_TABLESPACES record, extracts necessary +information from the record and returns to caller. @return error message, or NULL on success */ UNIV_INTERN const char* -dict_process_sys_stats_rec( -/*=============================*/ +dict_process_sys_tablespaces( +/*=========================*/ mem_heap_t* heap, /*!< in/out: heap memory */ - const rec_t* rec, /*!< in: current SYS_STATS rec */ - index_id_t* index_id, /*!< out: INDEX_ID */ - ulint* key_cols, /*!< out: KEY_COLS */ - ib_uint64_t* diff_vals, /*!< out: DIFF_VALS */ - ib_uint64_t* non_null_vals); /*!< out: NON_NULL_VALS */ + const rec_t* rec, /*!< in: current SYS_TABLESPACES rec */ + ulint* space, /*!< out: pace id */ + const char** name, /*!< out: tablespace name */ + ulint* flags); /*!< out: tablespace flags */ +/********************************************************************//** +This function parses a SYS_DATAFILES record, extracts necessary +information from the record and returns to caller. +@return error message, or NULL on success */ +UNIV_INTERN +const char* +dict_process_sys_datafiles( +/*=======================*/ + mem_heap_t* heap, /*!< in/out: heap memory */ + const rec_t* rec, /*!< in: current SYS_DATAFILES rec */ + ulint* space, /*!< out: pace id */ + const char** path); /*!< out: datafile path */ +/********************************************************************//** +Get the filepath for a spaceid from SYS_DATAFILES. This function provides +a temporary heap which is used for the table lookup, but not for the path. +The caller must free the memory for the path returned. This function can +return NULL if the space ID is not found in SYS_DATAFILES, then the caller +will assume that the ibd file is in the normal datadir. +@return own: A copy of the first datafile found in SYS_DATAFILES.PATH for +the given space ID. NULL if space ID is zero or not found. */ +UNIV_INTERN +char* +dict_get_first_path( +/*================*/ + ulint space, /*!< in: space id */ + const char* name); /*!< in: tablespace name */ +/********************************************************************//** +Update the record for space_id in SYS_TABLESPACES to this filepath. +@return DB_SUCCESS if OK, dberr_t if the insert failed */ +UNIV_INTERN +dberr_t +dict_update_filepath( +/*=================*/ + ulint space_id, /*!< in: space id */ + const char* filepath); /*!< in: filepath */ +/********************************************************************//** +Insert records into SYS_TABLESPACES and SYS_DATAFILES. +@return DB_SUCCESS if OK, dberr_t if the insert failed */ +UNIV_INTERN +dberr_t +dict_insert_tablespace_and_filepath( +/*================================*/ + ulint space, /*!< in: space id */ + const char* name, /*!< in: talespace name */ + const char* filepath, /*!< in: filepath */ + ulint fsp_flags); /*!< in: tablespace flags */ + #ifndef UNIV_NONINL #include "dict0load.ic" #endif |