summaryrefslogtreecommitdiff
path: root/storage/innobase/row
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-04-05 10:49:38 +0200
committerSergei Golubchik <sergii@pisem.net>2012-04-05 10:49:38 +0200
commitd4b30a7a84742ae03774fe25af2cbad144ba2d5d (patch)
treed65a66f9f2f9378a1f4ca014e18952ae514f4cb1 /storage/innobase/row
parentd993ce1bbf8413a0aaf5a524a11334359234c5f4 (diff)
parentcea2c5d28ead6ae4191aea164df9b80b41a743ad (diff)
downloadmariadb-git-mariadb-5.1.62.tar.gz
mysql-5.1.62 mergemariadb-5.1.62
Diffstat (limited to 'storage/innobase/row')
-rw-r--r--storage/innobase/row/row0ins.c11
-rw-r--r--storage/innobase/row/row0mysql.c12
-rw-r--r--storage/innobase/row/row0sel.c4
-rw-r--r--storage/innobase/row/row0upd.c10
4 files changed, 35 insertions, 2 deletions
diff --git a/storage/innobase/row/row0ins.c b/storage/innobase/row/row0ins.c
index db134ca7a41..bb5c95a572b 100644
--- a/storage/innobase/row/row0ins.c
+++ b/storage/innobase/row/row0ins.c
@@ -6,6 +6,9 @@ Insert into a table
Created 4/20/1996 Heikki Tuuri
*******************************************************/
+#include "my_global.h" /* HAVE_* */
+#include "m_string.h" /* for my_sys.h */
+#include "my_sys.h" /* DEBUG_SYNC_C */
#include "row0ins.h"
#ifdef UNIV_NONINL
@@ -2121,16 +2124,24 @@ function_exit:
if (big_rec) {
rec_t* rec;
+
+ DBUG_EXECUTE_IF(
+ "row_ins_extern_checkpoint",
+ log_make_checkpoint_at(ut_dulint_max, TRUE););
+
mtr_start(&mtr);
+ DEBUG_SYNC_C("before_row_ins_extern_latch");
btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
BTR_MODIFY_TREE, &cursor, 0, &mtr);
rec = btr_cur_get_rec(&cursor);
offsets = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &heap);
+ DEBUG_SYNC_C("before_row_ins_upd_extern");
err = btr_store_big_rec_extern_fields(index, rec,
offsets, big_rec, &mtr);
+ DEBUG_SYNC_C("after_row_ins_upd_extern");
if (modify) {
dtuple_big_rec_free(big_rec);
diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
index cee97871470..6148b01af9d 100644
--- a/storage/innobase/row/row0mysql.c
+++ b/storage/innobase/row/row0mysql.c
@@ -1948,6 +1948,18 @@ row_create_table_for_mysql(
FALSE);
}
+ } else if (err == DB_TOO_MANY_CONCURRENT_TRXS) {
+ /* We already have .ibd file here. it should be deleted. */
+ if (table->space
+ && !fil_delete_tablespace(table->space)) {
+ ut_print_timestamp(stderr);
+ fprintf(stderr,
+ " InnoDB: Error: not able to"
+ " delete tablespace %lu of table ",
+ (ulong) table->space);
+ ut_print_name(stderr, trx, TRUE, table->name);
+ fputs("!\n", stderr);
+ }
} else if (err == DB_DUPLICATE_KEY) {
ut_print_timestamp(stderr);
diff --git a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
index 9ab6424a012..915cc8339d4 100644
--- a/storage/innobase/row/row0sel.c
+++ b/storage/innobase/row/row0sel.c
@@ -4208,7 +4208,9 @@ no_gap_lock:
applicable to unique secondary indexes. Current behaviour is
to widen the scope of a lock on an already delete marked record
if the same record is deleted twice by the same transaction */
- if (index == clust_index && unique_search) {
+ if (index == clust_index && unique_search
+ && !prebuilt->used_in_HANDLER) {
+
err = DB_RECORD_NOT_FOUND;
goto normal_return;
diff --git a/storage/innobase/row/row0upd.c b/storage/innobase/row/row0upd.c
index 0790cfe02e2..d3ed71089a8 100644
--- a/storage/innobase/row/row0upd.c
+++ b/storage/innobase/row/row0upd.c
@@ -6,6 +6,9 @@ Update of a row
Created 12/27/1996 Heikki Tuuri
*******************************************************/
+#include "my_global.h" /* HAVE_* */
+#include "m_string.h" /* for my_sys.h */
+#include "my_sys.h" /* DEBUG_SYNC_C */
#include "row0upd.h"
#ifdef UNIV_NONINL
@@ -1591,15 +1594,20 @@ row_upd_clust_rec(
rec_t* rec;
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
- mtr_start(mtr);
+ DBUG_EXECUTE_IF(
+ "row_upd_extern_checkpoint",
+ log_make_checkpoint_at(ut_dulint_max, TRUE););
+ mtr_start(mtr);
ut_a(btr_pcur_restore_position(BTR_MODIFY_TREE, pcur, mtr));
rec = btr_cur_get_rec(btr_cur);
+ DEBUG_SYNC_C("before_row_upd_extern");
err = btr_store_big_rec_extern_fields(
index, rec,
rec_get_offsets(rec, index, offsets_,
ULINT_UNDEFINED, &heap),
big_rec, mtr);
+ DEBUG_SYNC_C("after_row_upd_extern");
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}