diff options
Diffstat (limited to 'storage/innobase/include/row0upd.ic')
-rw-r--r-- | storage/innobase/include/row0upd.ic | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/storage/innobase/include/row0upd.ic b/storage/innobase/include/row0upd.ic index d054662c080..618a77fa4bf 100644 --- a/storage/innobase/include/row0upd.ic +++ b/storage/innobase/include/row0upd.ic @@ -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 @@ -46,7 +46,6 @@ upd_create( update = (upd_t*) mem_heap_zalloc(heap, sizeof(upd_t)); - update->info_bits = 0; update->n_fields = n; update->fields = (upd_field_t*) mem_heap_zalloc(heap, sizeof(upd_field_t) * n); @@ -111,6 +110,7 @@ upd_field_set_field_no( fprintf(stderr, "\n" "InnoDB: but index only has %lu fields\n", (ulong) dict_index_get_n_fields(index)); + ut_ad(0); } dict_col_copy_type(dict_index_get_nth_col(index, field_no), @@ -152,8 +152,9 @@ row_upd_rec_sys_fields( uncompressed part will be updated, or NULL */ dict_index_t* index, /*!< in: clustered index */ const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ - trx_t* trx, /*!< in: transaction */ - roll_ptr_t roll_ptr)/*!< in: roll ptr of the undo log record */ + const trx_t* trx, /*!< in: transaction */ + roll_ptr_t roll_ptr)/*!< in: roll ptr of the undo log record, + can be 0 during IMPORT */ { ut_ad(dict_index_is_clust(index)); ut_ad(rec_offs_validate(rec, index, offsets)); @@ -172,8 +173,14 @@ row_upd_rec_sys_fields( #if DATA_TRX_ID + 1 != DATA_ROLL_PTR # error "DATA_TRX_ID + 1 != DATA_ROLL_PTR" #endif - ut_ad(lock_check_trx_id_sanity(trx_read_trx_id(rec + offset), - rec, index, offsets)); + /* During IMPORT the trx id in the record can be in the + future, if the .ibd file is being imported from another + instance. During IMPORT roll_ptr will be 0. */ + ut_ad(roll_ptr == 0 + || lock_check_trx_id_sanity( + trx_read_trx_id(rec + offset), + rec, index, offsets)); + trx_write_trx_id(rec + offset, trx->id); trx_write_roll_ptr(rec + offset + DATA_TRX_ID_LEN, roll_ptr); } |