diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2016-09-06 09:43:16 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2016-09-08 15:49:03 +0300 |
commit | fec844aca88e1c6b9c36bb0b811e92d9d023ffb9 (patch) | |
tree | 3e8602113e591b163bf23fffe95c8908cac88ea3 /storage/innobase/include/row0merge.h | |
parent | 2e814d4702d71a04388386a9f591d14a35980bfe (diff) | |
download | mariadb-git-fec844aca88e1c6b9c36bb0b811e92d9d023ffb9.tar.gz |
Merge InnoDB 5.7 from mysql-5.7.14.
Contains also:
MDEV-10549 mysqld: sql/handler.cc:2692: int handler::ha_index_first(uchar*): Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed. (branch bb-10.2-jan)
Unlike MySQL, InnoDB still uses THR_LOCK in MariaDB
MDEV-10548 Some of the debug sync waits do not work with InnoDB 5.7 (branch bb-10.2-jan)
enable tests that were fixed in MDEV-10549
MDEV-10548 Some of the debug sync waits do not work with InnoDB 5.7 (branch bb-10.2-jan)
fix main.innodb_mysql_sync - re-enable online alter for partitioned innodb tables
Diffstat (limited to 'storage/innobase/include/row0merge.h')
-rw-r--r-- | storage/innobase/include/row0merge.h | 86 |
1 files changed, 58 insertions, 28 deletions
diff --git a/storage/innobase/include/row0merge.h b/storage/innobase/include/row0merge.h index 4493df5e0bd..f3b5860910c 100644 --- a/storage/innobase/include/row0merge.h +++ b/storage/innobase/include/row0merge.h @@ -152,6 +152,7 @@ row_merge_dup_report( row_merge_dup_t* dup, /*!< in/out: for reporting duplicates */ const dfield_t* entry) /*!< in: duplicate index entry */ MY_ATTRIBUTE((nonnull)); + /*********************************************************************//** Sets an exclusive lock on a table, for the duration of creating indexes. @return error code or DB_SUCCESS */ @@ -161,7 +162,8 @@ row_merge_lock_table( trx_t* trx, /*!< in/out: transaction */ dict_table_t* table, /*!< in: table to lock */ enum lock_mode mode) /*!< in: LOCK_X or LOCK_S */ - MY_ATTRIBUTE((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull(1,2), warn_unused_result)); + /*********************************************************************//** Drop indexes that were created before an error occurred. The data dictionary must have been locked exclusively by the caller, @@ -172,6 +174,7 @@ row_merge_drop_indexes_dict( trx_t* trx, /*!< in/out: dictionary transaction */ table_id_t table_id)/*!< in: table identifier */ MY_ATTRIBUTE((nonnull)); + /*********************************************************************//** Drop those indexes which were created before an error occurred. The data dictionary must have been locked exclusively by the caller, @@ -184,6 +187,7 @@ row_merge_drop_indexes( ibool locked) /*!< in: TRUE=table locked, FALSE=may need to do a lazy drop */ MY_ATTRIBUTE((nonnull)); + /*********************************************************************//** Drop all partially created indexes during crash recovery. */ void @@ -195,7 +199,8 @@ UNIV_PFS_IO defined, register the file descriptor with Performance Schema. @param[in] path location for creating temporary merge files. @return File descriptor */ int -row_merge_file_create_low(void) +row_merge_file_create_low( + const char* path) MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** Destroy a merge file. And de-register the file from Performance Schema @@ -214,7 +219,9 @@ char* row_make_new_pathname( /*==================*/ dict_table_t* table, /*!< in: table to be renamed */ - const char* new_name); /*!< in: new name */ + const char* new_name) /*!< in: new name */ + MY_ATTRIBUTE((nonnull, warn_unused_result)); + /*********************************************************************//** Rename the tables in the data dictionary. The data dictionary must have been locked exclusively by the caller, because the transaction @@ -242,7 +249,8 @@ row_merge_rename_index_to_add( trx_t* trx, /*!< in/out: transaction */ table_id_t table_id, /*!< in: table identifier */ index_id_t index_id) /*!< in: index identifier */ - MY_ATTRIBUTE((nonnull)); + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); + /*********************************************************************//** Rename an index in the dictionary that is to be dropped. The data dictionary must have been locked exclusively by the caller, because @@ -254,7 +262,8 @@ row_merge_rename_index_to_drop( trx_t* trx, /*!< in/out: transaction */ table_id_t table_id, /*!< in: table identifier */ index_id_t index_id) /*!< in: index identifier */ - MY_ATTRIBUTE((nonnull)); + MY_ATTRIBUTE((nonnull(1), warn_unused_result)); + /** Create the index and load in to the dictionary. @param[in,out] trx trx (sets error_state) @param[in,out] table the index is on this table @@ -270,7 +279,9 @@ row_merge_create_index( dict_table_t* table, const index_def_t* index_def, const dict_add_v_col_t* add_v, - const char** col_names); + const char** col_names) + MY_ATTRIBUTE((warn_unused_result)); + /*********************************************************************//** Check if a transaction can use an index. @return TRUE if index can be used by the transaction else FALSE */ @@ -278,7 +289,9 @@ ibool row_merge_is_index_usable( /*======================*/ const trx_t* trx, /*!< in: transaction */ - const dict_index_t* index); /*!< in: index to check */ + const dict_index_t* index) /*!< in: index to check */ + MY_ATTRIBUTE((nonnull, warn_unused_result)); + /*********************************************************************//** Drop a table. The caller must have ensured that the background stats thread is not processing the table. This can be done by calling @@ -290,7 +303,7 @@ row_merge_drop_table( /*=================*/ trx_t* trx, /*!< in: transaction */ dict_table_t* table) /*!< in: table instance to drop */ - MY_ATTRIBUTE((nonnull)); + MY_ATTRIBUTE((nonnull, warn_unused_result)); /** Build indexes on a table by reading a clustered index, creating a temporary file containing index entries, merge sorting these index entries and inserting @@ -317,6 +330,8 @@ existing order ALTER TABLE. stage->begin_phase_read_pk() will be called at the beginning of this function and it will be passed to other functions for further accounting. @param[in] add_v new virtual columns added along with indexes +@param[in] eval_table mysql table used to evaluate virtual column + value, see innobase_get_computed_value(). @return DB_SUCCESS or error code */ dberr_t row_merge_build_indexes( @@ -334,8 +349,9 @@ row_merge_build_indexes( ib_sequence_t& sequence, bool skip_pk_sort, ut_stage_alter_t* stage, - const dict_add_v_col_t* add_v) -__attribute__((warn_unused_result)); + const dict_add_v_col_t* add_v, + struct TABLE* eval_table) + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Write a buffer to a block. */ @@ -346,6 +362,7 @@ row_merge_buf_write( const merge_file_t* of, /*!< in: output file */ row_merge_block_t* block) /*!< out: buffer for writing to file */ MY_ATTRIBUTE((nonnull)); + /********************************************************************//** Sort a buffer. */ void @@ -355,6 +372,7 @@ row_merge_buf_sort( row_merge_dup_t* dup) /*!< in/out: reporter of duplicates (NULL if non-unique index) */ MY_ATTRIBUTE((nonnull(1))); + /********************************************************************//** Write a merge block to the file system. @return TRUE if request was successful, FALSE if fail */ @@ -367,7 +385,8 @@ row_merge_write( const void* buf, /*!< in: data */ fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ void* crypt_buf, /*!< in: crypt buf or NULL */ - ulint space); /*!< in: space id */ + ulint space) /*!< in: space id */ + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Empty a sort buffer. @@ -384,7 +403,9 @@ row_merge_buf_empty( @return file descriptor, or -1 on failure */ int row_merge_file_create( - merge_file_t* merge_file); + merge_file_t* merge_file, + const char* path) + MY_ATTRIBUTE((warn_unused_result, nonnull)); /** Merge disk files. @param[in] trx transaction @@ -392,6 +413,12 @@ row_merge_file_create( @param[in,out] file file containing index entries @param[in,out] block 3 buffers @param[in,out] tmpfd temporary file handle +@param[in] update_progress true, if we should update progress status +@param[in] pct_progress total progress percent until now +@param[in] pct_ocst current progress percent +@param[in] crypt_data tale crypt data +@param[in] crypt_block crypt buf or NULL +@param[in] space space_id @param[in,out] stage performance schema accounting object, used by ALTER TABLE. If not NULL, stage->begin_phase_sort() will be called initially and then stage->inc() will be called for each record processed. @@ -399,21 +426,20 @@ and then stage->inc() will be called for each record processed. dberr_t row_merge_sort( /*===========*/ - trx_t* trx, /*!< in: transaction */ - const row_merge_dup_t* dup, /*!< in: descriptor of - index being created */ - merge_file_t* file, /*!< in/out: file containing - index entries */ - row_merge_block_t* block, /*!< in/out: 3 buffers */ - int* tmpfd, /*!< in/out: temporary file handle */ - const bool update_progress, /*!< in: update progress status variable or not */ - const float pct_progress, /*!< in: total progress percent until now */ - const float pct_cost, /*!< in: current progress percent */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ - row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space, /*!< in: space id */ + trx_t* trx, + const row_merge_dup_t* dup, + merge_file_t* file, + row_merge_block_t* block, + int* tmpfd, + const bool update_progress, + const float pct_progress, + const float pct_cost, + fil_space_crypt_t* crypt_data, + row_merge_block_t* crypt_block, + ulint space, ut_stage_alter_t* stage = NULL) - __attribute__((nonnull(1,2,3,4,5))); + MY_ATTRIBUTE((warn_unused_result)); + /*********************************************************************//** Allocate a sort buffer. @return own: sort buffer */ @@ -422,6 +448,7 @@ row_merge_buf_create( /*=================*/ dict_index_t* index) /*!< in: secondary index */ MY_ATTRIBUTE((warn_unused_result, nonnull, malloc)); + /*********************************************************************//** Deallocate a sort buffer. */ void @@ -429,6 +456,7 @@ row_merge_buf_free( /*===============*/ row_merge_buf_t* buf) /*!< in,own: sort buffer to be freed */ MY_ATTRIBUTE((nonnull)); + /*********************************************************************//** Destroy a merge file. */ void @@ -436,6 +464,7 @@ row_merge_file_destroy( /*===================*/ merge_file_t* merge_file) /*!< in/out: merge file structure */ MY_ATTRIBUTE((nonnull)); + /********************************************************************//** Read a merge block from the file system. @return TRUE if request was successful, FALSE if fail */ @@ -449,7 +478,8 @@ row_merge_read( row_merge_block_t* buf, /*!< out: data */ fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_buf, /*!< in: crypt buf or NULL */ - ulint space); /*!< in: space id */ + ulint space) /*!< in: space id */ + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Read a merge record. @@ -470,5 +500,5 @@ row_merge_read_rec( fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ - __attribute__((nonnull(1,2,3,4,6,7,8), warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); #endif /* row0merge.h */ |