diff options
author | unknown <monty@mysql.com> | 2004-03-16 22:41:30 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2004-03-16 22:41:30 +0200 |
commit | a8aacf87648f64e7489220dab7d8729c5c01e13d (patch) | |
tree | af285d8080c003d1ecb1479ec43c9b6996fd567f /innobase/row | |
parent | 17f8d3d725f4b465a8a0dc8e96b04cd973c47fd5 (diff) | |
parent | 277cf702da7e6f0642742eb10582cfc382e537ec (diff) | |
download | mariadb-git-a8aacf87648f64e7489220dab7d8729c5c01e13d.tar.gz |
merge with 4.0
BitKeeper/etc/logging_ok:
auto-union
VC++Files/innobase/innobase.dsp:
Auto merged
VC++Files/libmysql/libmysql.dsp:
Auto merged
acinclude.m4:
Auto merged
configure.in:
Auto merged
BitKeeper/deleted/.del-com0shm.c~6a16f0c3d81de1f:
Auto merged
BitKeeper/deleted/.del-mysql_fix_privilege_tables.sql:
Auto merged
extra/replace.c:
Auto merged
include/my_sys.h:
Auto merged
innobase/btr/btr0btr.c:
Auto merged
innobase/btr/btr0cur.c:
Auto merged
innobase/btr/btr0pcur.c:
Auto merged
innobase/btr/btr0sea.c:
Auto merged
innobase/configure.in:
Auto merged
innobase/data/data0data.c:
Auto merged
innobase/dict/dict0boot.c:
Auto merged
innobase/dict/dict0crea.c:
Auto merged
innobase/dict/dict0dict.c:
Auto merged
innobase/dict/dict0load.c:
Auto merged
innobase/dict/dict0mem.c:
Auto merged
innobase/ha/ha0ha.c:
Auto merged
innobase/ha/hash0hash.c:
Auto merged
innobase/include/btr0btr.ic:
Auto merged
innobase/include/data0type.ic:
Auto merged
innobase/include/dict0mem.h:
Auto merged
innobase/include/log0log.ic:
Auto merged
innobase/include/mach0data.ic:
Auto merged
innobase/include/mtr0log.h:
Auto merged
innobase/include/mtr0mtr.h:
Auto merged
innobase/include/os0file.h:
Auto merged
innobase/include/row0upd.ic:
Auto merged
innobase/include/srv0srv.h:
Auto merged
innobase/include/sync0sync.h:
Auto merged
innobase/include/trx0rseg.ic:
Auto merged
innobase/lock/lock0lock.c:
Auto merged
innobase/log/log0recv.c:
Auto merged
innobase/mem/mem0dbg.c:
Auto merged
innobase/mtr/mtr0log.c:
Auto merged
innobase/mtr/mtr0mtr.c:
Auto merged
innobase/os/os0file.c:
Auto merged
innobase/page/page0cur.c:
Auto merged
innobase/page/page0page.c:
Auto merged
innobase/pars/lexyy.c:
Auto merged
innobase/read/read0read.c:
Auto merged
innobase/rem/rem0cmp.c:
Auto merged
innobase/rem/rem0rec.c:
Auto merged
innobase/row/row0ins.c:
Auto merged
innobase/row/row0mysql.c:
Auto merged
innobase/row/row0purge.c:
Auto merged
innobase/row/row0sel.c:
Auto merged
innobase/row/row0undo.c:
Auto merged
innobase/row/row0upd.c:
Auto merged
innobase/srv/srv0srv.c:
Auto merged
innobase/srv/srv0start.c:
Auto merged
innobase/sync/sync0rw.c:
Auto merged
innobase/thr/thr0loc.c:
Auto merged
innobase/trx/trx0purge.c:
Auto merged
innobase/trx/trx0rec.c:
Auto merged
innobase/trx/trx0roll.c:
Auto merged
innobase/trx/trx0trx.c:
Auto merged
innobase/trx/trx0undo.c:
Auto merged
myisam/mi_check.c:
Auto merged
myisam/myisamchk.c:
Auto merged
mysql-test/r/multi_update.result:
Auto merged
mysql-test/r/mysqlbinlog.result:
Auto merged
mysql-test/r/rpl_error_ignored_table.result:
Auto merged
mysql-test/t/multi_update.test:
Auto merged
mysql-test/t/rpl_error_ignored_table.test:
Auto merged
mysys/mf_iocache.c:
Auto merged
mysys/mf_pack.c:
Auto merged
mysys/my_getopt.c:
Auto merged
sql/ha_berkeley.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/lock.cc:
Auto merged
sql/log.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/set_var.h:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_cache.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_handler.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_list.h:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
tests/thread_test.c:
Auto merged
client/mysqldump.c:
Keep original indentation
mysql-test/r/merge.result:
keep old file
scripts/mysql_fix_privilege_tables.sh:
Keep old structure in merge with 4.0
sql/table.cc:
merge with 4.0 + simple optimizations
Diffstat (limited to 'innobase/row')
-rw-r--r-- | innobase/row/row0ins.c | 16 | ||||
-rw-r--r-- | innobase/row/row0mysql.c | 38 | ||||
-rw-r--r-- | innobase/row/row0purge.c | 6 | ||||
-rw-r--r-- | innobase/row/row0row.c | 4 | ||||
-rw-r--r-- | innobase/row/row0sel.c | 8 | ||||
-rw-r--r-- | innobase/row/row0undo.c | 2 | ||||
-rw-r--r-- | innobase/row/row0upd.c | 23 | ||||
-rw-r--r-- | innobase/row/row0vers.c | 8 |
8 files changed, 67 insertions, 38 deletions
diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c index 5fef07683af..fc1f7a19d53 100644 --- a/innobase/row/row0ins.c +++ b/innobase/row/row0ins.c @@ -80,9 +80,9 @@ ins_node_create( node->trx_id = ut_dulint_zero; node->entry_sys_heap = mem_heap_create(128); - - node->magic_n = INS_NODE_MAGIC_N; - +#ifdef UNIV_DEBUG + node->magic_n = INS_NODE_MAGIC_N; +#endif /* UNIV_DEBUG */ return(node); } @@ -194,6 +194,7 @@ ins_node_set_new_row( ins_node_t* node, /* in: insert node */ dtuple_t* row) /* in: new row (or first row) for the node */ { + ut_ad(node->magic_n == INS_NODE_MAGIC_N); node->state = INS_NODE_SET_IX_LOCK; node->index = NULL; node->entry = NULL; @@ -855,7 +856,7 @@ row_ins_foreign_check_on_constraint( "InnoDB: Make a detailed bug report and send it\n"); fprintf(stderr, "InnoDB: to mysql@lists.mysql.com\n"); - ut_a(0); + ut_error; */ err = DB_SUCCESS; @@ -1031,8 +1032,10 @@ row_ins_check_foreign_constraint( mtr_t mtr; run_again: +#ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_SHARED)); - +#endif /* UNIV_SYNC_DEBUG */ + err = DB_SUCCESS; if (thr_get_trx(thr)->check_foreigns == FALSE) { @@ -2040,6 +2043,7 @@ row_ins( ulint err; ut_ad(node && thr); + ut_ad(node->magic_n == INS_NODE_MAGIC_N); if (node->state == INS_NODE_ALLOC_ROW_ID) { @@ -2104,7 +2108,7 @@ row_ins_step( trx_start_if_not_started(trx); node = thr->run_node; - + ut_ad(node->magic_n == INS_NODE_MAGIC_N); ut_ad(que_node_get_type(node) == QUE_NODE_INSERT); parent = que_node_get_parent(node); diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c index 626382398b7..efcca623a76 100644 --- a/innobase/row/row0mysql.c +++ b/innobase/row/row0mysql.c @@ -287,7 +287,7 @@ handle_new_error: } else { fprintf(stderr, "InnoDB: unknown error code %lu\n", (ulong) err); - ut_a(0); + ut_error; } if (trx->error_state != DB_SUCCESS) { @@ -402,7 +402,7 @@ row_prebuilt_free( mem_analyze_corruption((byte*)prebuilt); - ut_a(0); + ut_error; } prebuilt->magic_n = ROW_PREBUILT_FREED; @@ -450,7 +450,7 @@ row_prebuilt_free( mem_analyze_corruption( prebuilt->fetch_cache[i]); - ut_a(0); + ut_error; } mem_free((prebuilt->fetch_cache[i]) - 4); @@ -482,7 +482,7 @@ row_update_prebuilt_trx( mem_analyze_corruption((byte*)trx); - ut_a(0); + ut_error; } if (prebuilt->magic_n != ROW_PREBUILT_ALLOCATED) { @@ -493,7 +493,7 @@ row_update_prebuilt_trx( mem_analyze_corruption((byte*)prebuilt); - ut_a(0); + ut_error; } prebuilt->trx = trx; @@ -720,7 +720,7 @@ row_insert_for_mysql( mem_analyze_corruption((byte*)prebuilt); - ut_a(0); + ut_error; } if (srv_created_new_raw || srv_force_recovery) { @@ -936,7 +936,7 @@ row_update_for_mysql( mem_analyze_corruption((byte*)prebuilt); - ut_a(0); + ut_error; } if (srv_created_new_raw || srv_force_recovery) { @@ -1289,9 +1289,11 @@ row_create_table_for_mysql( ulint err; ut_ad(trx->mysql_thread_id == os_thread_get_curr_id()); +#ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); - ut_ad(trx->dict_operation_lock_mode == RW_X_LATCH); ut_ad(mutex_own(&(dict_sys->mutex))); +#endif /* UNIV_SYNC_DEBUG */ + ut_ad(trx->dict_operation_lock_mode == RW_X_LATCH); if (srv_created_new_raw) { fprintf(stderr, @@ -1424,8 +1426,7 @@ row_create_table_for_mysql( thr = pars_complete_graph_for_exec(node, trx, heap); - ut_a(thr == que_fork_start_command(que_node_get_parent(thr), - SESS_COMM_EXECUTE, 0)); + ut_a(thr == que_fork_start_command(que_node_get_parent(thr))); que_run_threads(thr); err = trx->error_state; @@ -1496,8 +1497,10 @@ row_create_index_for_mysql( ulint err; ulint i, j; +#ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); ut_ad(mutex_own(&(dict_sys->mutex))); +#endif /* UNIV_SYNC_DEBUG */ ut_ad(trx->mysql_thread_id == os_thread_get_curr_id()); trx->op_info = (char *) "creating index"; @@ -1552,8 +1555,7 @@ row_create_index_for_mysql( thr = pars_complete_graph_for_exec(node, trx, heap); - ut_a(thr == que_fork_start_command(que_node_get_parent(thr), - SESS_COMM_EXECUTE, 0)); + ut_a(thr == que_fork_start_command(que_node_get_parent(thr))); que_run_threads(thr); err = trx->error_state; @@ -1604,8 +1606,10 @@ row_table_add_foreign_constraints( ulint keywordlen; ulint err; +#ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(dict_sys->mutex))); ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ ut_a(sql_string); trx->op_info = (char *) "adding foreign keys"; @@ -1776,7 +1780,9 @@ row_get_background_drop_list_len_low(void) /*======================================*/ /* out: how many tables in list */ { +#ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&kernel_mutex)); +#endif /* UNIV_SYNC_DEBUG */ if (!row_mysql_drop_list_inited) { @@ -2255,8 +2261,10 @@ row_drop_table_for_mysql( locked_dictionary = TRUE; } +#ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&(dict_sys->mutex))); ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ graph = pars_sql(buf); @@ -2356,7 +2364,7 @@ row_drop_table_for_mysql( trx->dict_operation = TRUE; trx->table_id = table->id; - ut_a(thr = que_fork_start_command(graph, SESS_COMM_EXECUTE, 0)); + ut_a(thr = que_fork_start_command(graph)); que_run_threads(thr); @@ -2369,7 +2377,7 @@ row_drop_table_for_mysql( row_mysql_handle_errors(&err, trx, thr, NULL); - ut_a(0); + ut_error; } else { space_id = table->space; dict_table_remove_from_cache(table); @@ -2786,7 +2794,7 @@ row_rename_table_for_mysql( graph->fork_type = QUE_FORK_MYSQL_INTERFACE; - ut_a(thr = que_fork_start_command(graph, SESS_COMM_EXECUTE, 0)); + ut_a(thr = que_fork_start_command(graph)); que_run_threads(thr); diff --git a/innobase/row/row0purge.c b/innobase/row/row0purge.c index d5895f20461..a409b64f8e4 100644 --- a/innobase/row/row0purge.c +++ b/innobase/row/row0purge.c @@ -140,7 +140,7 @@ row_purge_remove_clust_if_poss_low( } else if (err == DB_OUT_OF_FILE_SPACE) { success = FALSE; } else { - ut_a(0); + ut_error; } } @@ -266,7 +266,7 @@ row_purge_remove_sec_if_poss_low( } else if (err == DB_OUT_OF_FILE_SPACE) { success = FALSE; } else { - ut_a(0); + ut_error; } } } @@ -447,8 +447,10 @@ skip_secondaries: data_field = buf_page_get(0, page_no, RW_X_LATCH, &mtr) + offset + internal_offset; +#ifdef UNIV_SYNC_DEBUG buf_page_dbg_add_level(buf_frame_align(data_field), SYNC_TRX_UNDO_PAGE); +#endif /* UNIV_SYNC_DEBUG */ data_field_len = ufield->new_val.len; diff --git a/innobase/row/row0row.c b/innobase/row/row0row.c index b5d676a936a..6820cb5bccd 100644 --- a/innobase/row/row0row.c +++ b/innobase/row/row0row.c @@ -406,7 +406,7 @@ row_build_row_ref_in_tuple( if (!table) { fprintf(stderr, "InnoDB: table %s for index %s not found\n", index->table_name, index->name); - ut_a(0); + ut_error; } clust_index = dict_table_get_first_index(table); @@ -415,7 +415,7 @@ row_build_row_ref_in_tuple( fprintf(stderr, "InnoDB: clust index for table %s for index %s not found\n", index->table_name, index->name); - ut_a(0); + ut_error; } ref_len = dict_index_get_n_unique(clust_index); diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index b32f0b204b3..4f70cea2058 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -930,7 +930,9 @@ row_sel_try_search_shortcut( ut_ad(node->read_view); ut_ad(plan->unique_search); ut_ad(!plan->must_get_clust); +#ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ row_sel_open_pcur(node, plan, TRUE, mtr); @@ -2080,7 +2082,7 @@ row_sel_store_row_id_to_prebuilt( (ulong) len, index->table_name, index->name, (ulong) dict_index_get_sys_col_pos(index, DATA_ROW_ID), err_buf); - ut_a(0); + ut_error; } ut_memcpy(prebuilt->row_id, data, len); @@ -2770,7 +2772,7 @@ row_search_for_mysql( mem_analyze_corruption((byte*)prebuilt); - ut_a(0); + ut_error; } if (trx->n_mysql_tables_in_use == 0) { @@ -2831,7 +2833,7 @@ row_search_for_mysql( if (direction != prebuilt->fetch_direction) { if (prebuilt->n_fetch_cached > 0) { - ut_a(0); + ut_error; /* TODO: scrollable cursor: restore cursor to the place of the latest returned row, or better: prevent caching for a scroll diff --git a/innobase/row/row0undo.c b/innobase/row/row0undo.c index f223bb5eed5..613d0a3b890 100644 --- a/innobase/row/row0undo.c +++ b/innobase/row/row0undo.c @@ -334,7 +334,7 @@ row_undo_step( exit(1); } - ut_a(0); + ut_error; return(NULL); } diff --git a/innobase/row/row0upd.c b/innobase/row/row0upd.c index b9e9b8c15c9..f8739b65c2f 100644 --- a/innobase/row/row0upd.c +++ b/innobase/row/row0upd.c @@ -77,8 +77,8 @@ index record. This is only used in foreign key checks and we can assume that index does not contain column prefixes. */ static ibool -row_upd_changes_first_fields( -/*=========================*/ +row_upd_changes_first_fields_binary( +/*================================*/ /* out: TRUE if changes */ dtuple_t* entry, /* in: old value of index entry */ dict_index_t* index, /* in: index of entry */ @@ -196,7 +196,7 @@ row_upd_check_references_constraints( if (foreign->referenced_index == index && (node->is_delete - || row_upd_changes_first_fields(entry, index, + || row_upd_changes_first_fields_binary(entry, index, node->update, foreign->n_fields))) { if (foreign->foreign_table == NULL) { @@ -287,7 +287,9 @@ upd_node_create( node->select = NULL; node->heap = mem_heap_create(128); - node->magic_n = UPD_NODE_MAGIC_N; +#ifdef UNIV_DEBUG + node->magic_n = UPD_NODE_MAGIC_N; +#endif /* UNIV_DEBUG */ node->cmpl_info = 0; @@ -1048,8 +1050,8 @@ index record. This is only used in foreign key checks and we can assume that index does not contain column prefixes. */ static ibool -row_upd_changes_first_fields( -/*=========================*/ +row_upd_changes_first_fields_binary( +/*================================*/ /* out: TRUE if changes */ dtuple_t* entry, /* in: index entry */ dict_index_t* index, /* in: index of entry */ @@ -1074,15 +1076,16 @@ row_upd_changes_first_fields( col = dict_field_get_col(ind_field); col_pos = dict_col_get_clust_pos(col); + ut_a(ind_field->prefix_len == 0); + for (j = 0; j < n_upd_fields; j++) { upd_field = upd_get_nth_field(update, j); if (col_pos == upd_field->field_no - && (ind_field->prefix_len > 0 - || 0 != cmp_dfield_dfield( + && !dfield_datas_are_binary_equal( dtuple_get_nth_field(entry, i), - &(upd_field->new_val)))) { + &(upd_field->new_val))) { return(TRUE); } } @@ -1804,6 +1807,7 @@ row_upd_step( trx_start_if_not_started(trx); node = thr->run_node; + ut_ad(node->magic_n == UPD_NODE_MAGIC_N); sel_node = node->select; @@ -1923,6 +1927,7 @@ row_upd_in_place_in_select( node = que_node_get_parent(sel_node); + ut_ad(node->magic_n == UPD_NODE_MAGIC_N); ut_ad(que_node_get_type(node) == QUE_NODE_UPDATE); pcur = node->pcur; diff --git a/innobase/row/row0vers.c b/innobase/row/row0vers.c index fca56389e45..bc17ede89e3 100644 --- a/innobase/row/row0vers.c +++ b/innobase/row/row0vers.c @@ -60,8 +60,10 @@ row_vers_impl_x_locked_off_kernel( ulint err; mtr_t mtr; +#ifdef UNIV_SYNC_DEBUG ut_ad(mutex_own(&kernel_mutex)); ut_ad(!rw_lock_own(&(purge_sys->latch), RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ mutex_exit(&kernel_mutex); @@ -254,7 +256,9 @@ row_vers_must_preserve_del_marked( mtr_t* mtr) /* in: mtr holding the latch on the clustered index record; it will also hold the latch on purge_view */ { +#ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(&(purge_sys->latch), RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ mtr_s_lock(&(purge_sys->latch), mtr); @@ -302,7 +306,9 @@ row_vers_old_has_index_entry( ut_ad(mtr_memo_contains(mtr, buf_block_align(rec), MTR_MEMO_PAGE_X_FIX) || mtr_memo_contains(mtr, buf_block_align(rec), MTR_MEMO_PAGE_S_FIX)); +#ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(&(purge_sys->latch), RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ mtr_s_lock(&(purge_sys->latch), mtr); clust_index = dict_table_get_first_index(index->table); @@ -411,7 +417,9 @@ row_vers_build_for_consistent_read( ut_ad(mtr_memo_contains(mtr, buf_block_align(rec), MTR_MEMO_PAGE_X_FIX) || mtr_memo_contains(mtr, buf_block_align(rec), MTR_MEMO_PAGE_S_FIX)); +#ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(&(purge_sys->latch), RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ ut_ad(!read_view_sees_trx_id(view, row_get_rec_trx_id(rec, index))); rw_lock_s_lock(&(purge_sys->latch)); |