diff options
author | Sergei Golubchik <sergii@pisem.net> | 2013-12-22 17:06:50 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2013-12-22 17:06:50 +0100 |
commit | ffa8c4cfcc41d4f160e3bdfca5cfd4b01a7d6e63 (patch) | |
tree | 728585c36f22a5db3cea796430883d0ebc5c05eb /storage/xtradb/include/row0row.h | |
parent | e27c34f9e4ca15c797fcd3191ee5679c2f237a09 (diff) | |
parent | 52c26f7a1f675185d2ef1a28aca7f9bcc67c6414 (diff) | |
download | mariadb-git-ffa8c4cfcc41d4f160e3bdfca5cfd4b01a7d6e63.tar.gz |
Percona-Server-5.6.14-rel62.0 merge
support ha_innodb.so as a dynamic plugin.
* remove obsolete *,innodb_plugin.rdiff files
* s/--plugin-load=/--plugin-load-add=/
* MYSQL_PLUGIN_IMPORT glob_hostname[]
* use my_error instead of push_warning_printf(ER_DEFAULT)
* don't use tdc_size and tc_size in a module
update test cases (XtraDB is 5.6.14, InnoDB is 5.6.10)
* copy new tests over
* disable some tests for (old) InnoDB
* delete XtraDB tests that no longer apply
small compatibility changes:
* s/HTON_EXTENDED_KEYS/HTON_SUPPORTS_EXTENDED_KEYS/
* revert unnecessary InnoDB changes to make it a bit closer to the upstream
fix XtraDB to compile on Windows (both as a static and a dynamic plugin)
disable XtraDB on Windows (deadlocks) and where no atomic ops are available (e.g. CentOS 5)
storage/innobase/handler/ha_innodb.cc:
revert few unnecessary changes to make it a bit closer to the original InnoDB
storage/innobase/include/univ.i:
correct the version to match what it was merged from
Diffstat (limited to 'storage/xtradb/include/row0row.h')
-rw-r--r-- | storage/xtradb/include/row0row.h | 101 |
1 files changed, 59 insertions, 42 deletions
diff --git a/storage/xtradb/include/row0row.h b/storage/xtradb/include/row0row.h index bf135217bd0..a4e5e0dd2fa 100644 --- a/storage/xtradb/include/row0row.h +++ b/storage/xtradb/include/row0row.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, 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 *****************************************************************************/ @@ -73,20 +73,41 @@ row_get_rec_roll_ptr( /*****************************************************************//** When an insert or purge to a table is performed, this function builds the entry to be inserted into or purged from an index on the table. +@return index entry which should be inserted or purged +@retval NULL if the externally stored columns in the clustered index record +are unavailable and ext != NULL, or row is missing some needed columns. */ +UNIV_INTERN +dtuple_t* +row_build_index_entry_low( +/*======================*/ + const dtuple_t* row, /*!< in: row which should be + inserted or purged */ + const row_ext_t* ext, /*!< in: externally stored column + prefixes, or NULL */ + dict_index_t* index, /*!< in: index on the table */ + mem_heap_t* heap) /*!< in: memory heap from which + the memory for the index entry + is allocated */ + __attribute__((warn_unused_result, nonnull(1,3,4))); +/*****************************************************************//** +When an insert or purge to a table is performed, this function builds +the entry to be inserted into or purged from an index on the table. @return index entry which should be inserted or purged, or NULL if the externally stored columns in the clustered index record are unavailable and ext != NULL */ -UNIV_INTERN +UNIV_INLINE dtuple_t* row_build_index_entry( /*==================*/ - const dtuple_t* row, /*!< in: row which should be - inserted or purged */ - row_ext_t* ext, /*!< in: externally stored column prefixes, - or NULL */ - dict_index_t* index, /*!< in: index on the table */ - mem_heap_t* heap); /*!< in: memory heap from which the memory for - the index entry is allocated */ + const dtuple_t* row, /*!< in: row which should be + inserted or purged */ + const row_ext_t* ext, /*!< in: externally stored column + prefixes, or NULL */ + dict_index_t* index, /*!< in: index on the table */ + mem_heap_t* heap) /*!< in: memory heap from which + the memory for the index entry + is allocated */ + __attribute__((warn_unused_result, nonnull(1,3,4))); /*******************************************************************//** An inverse function to row_build_index_entry. Builds a row from a record in a clustered index. @@ -124,11 +145,17 @@ row_build( consulted instead; the user columns in this table should be the same columns as in index->table */ + const dtuple_t* add_cols, + /*!< in: default values of + added columns, or NULL */ + const ulint* col_map,/*!< in: mapping of old column + numbers to new ones, or NULL */ row_ext_t** ext, /*!< out, own: cache of externally stored column prefixes, or NULL */ - mem_heap_t* heap); /*!< in: memory heap from which + mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ + __attribute__((nonnull(2,3,9))); /*******************************************************************//** Converts an index record to a typed data tuple. @return index entry built; does not set info_bits, and the data fields @@ -142,37 +169,25 @@ row_rec_to_index_entry_low( const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint* n_ext, /*!< out: number of externally stored columns */ - mem_heap_t* heap); /*!< in: memory heap from which + mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ + __attribute__((nonnull, warn_unused_result)); /*******************************************************************//** Converts an index record to a typed data tuple. NOTE that externally stored (often big) fields are NOT copied to heap. -@return own: index entry built; see the NOTE below! */ +@return own: index entry built */ UNIV_INTERN dtuple_t* row_rec_to_index_entry( /*===================*/ - ulint type, /*!< in: ROW_COPY_DATA, or - ROW_COPY_POINTERS: the former - copies also the data fields to - heap as the latter only places - pointers to data fields on the - index page */ - const rec_t* rec, /*!< in: record in the index; - NOTE: in the case - ROW_COPY_POINTERS the data - fields in the row will point - directly into this record, - therefore, the buffer page of - this record must be at least - s-latched and the latch held - as long as the dtuple is used! */ + const rec_t* rec, /*!< in: record in the index */ const dict_index_t* index, /*!< in: index */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec) */ + const ulint* offsets,/*!< in/out: rec_get_offsets(rec) */ ulint* n_ext, /*!< out: number of externally stored columns */ - mem_heap_t* heap); /*!< in: memory heap from which + mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ + __attribute__((nonnull, warn_unused_result)); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. @@ -193,8 +208,9 @@ row_build_row_ref( the buffer page of this record must be at least s-latched and the latch held as long as the row reference is used! */ - mem_heap_t* heap); /*!< in: memory heap from which the memory + mem_heap_t* heap) /*!< in: memory heap from which the memory needed is allocated */ + __attribute__((nonnull, warn_unused_result)); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. */ @@ -215,7 +231,8 @@ row_build_row_ref_in_tuple( const dict_index_t* index, /*!< in: secondary index */ ulint* offsets,/*!< in: rec_get_offsets(rec, index) or NULL */ - trx_t* trx); /*!< in: transaction */ + trx_t* trx) /*!< in: transaction or NULL */ + __attribute__((nonnull(1,2,3))); /*******************************************************************//** Builds from a secondary index record a row reference with which we can search the clustered index record. */ @@ -245,7 +262,8 @@ row_search_on_row_ref( ulint mode, /*!< in: BTR_MODIFY_LEAF, ... */ const dict_table_t* table, /*!< in: table */ const dtuple_t* ref, /*!< in: row reference */ - mtr_t* mtr); /*!< in/out: mtr */ + mtr_t* mtr) /*!< in/out: mtr */ + __attribute__((nonnull, warn_unused_result)); /*********************************************************************//** Fetches the clustered index record for a secondary index record. The latches on the secondary index record are preserved. @@ -258,7 +276,8 @@ row_get_clust_rec( const rec_t* rec, /*!< in: record in a secondary index */ dict_index_t* index, /*!< in: secondary index */ dict_index_t** clust_index,/*!< out: clustered index */ - mtr_t* mtr); /*!< in: mtr */ + mtr_t* mtr) /*!< in: mtr */ + __attribute__((nonnull, warn_unused_result)); /** Result of row_search_index_entry */ enum row_search_result { @@ -285,8 +304,8 @@ row_search_index_entry( ulint mode, /*!< in: BTR_MODIFY_LEAF, ... */ btr_pcur_t* pcur, /*!< in/out: persistent cursor, which must be closed by the caller */ - mtr_t* mtr); /*!< in: mtr */ - + mtr_t* mtr) /*!< in: mtr */ + __attribute__((nonnull, warn_unused_result)); #define ROW_COPY_DATA 1 #define ROW_COPY_POINTERS 2 @@ -294,10 +313,7 @@ row_search_index_entry( /* The allowed latching order of index records is the following: (1) a secondary index record -> (2) the clustered index record -> -(3) rollback segment data for the clustered index record. - -No new latches may be obtained while the kernel mutex is reserved. -However, the kernel mutex can be reserved while latches are owned. */ +(3) rollback segment data for the clustered index record. */ /*******************************************************************//** Formats the raw data in "data" (in InnoDB on-disk format) using @@ -316,8 +332,9 @@ row_raw_format( in bytes */ const dict_field_t* dict_field, /*!< in: index field */ char* buf, /*!< out: output buffer */ - ulint buf_size); /*!< in: output buffer size + ulint buf_size) /*!< in: output buffer size in bytes */ + __attribute__((nonnull, warn_unused_result)); #ifndef UNIV_NONINL #include "row0row.ic" |