mirror of
https://github.com/MariaDB/server.git
synced 2025-12-10 19:44:09 +03:00
branches/zip: Merge revisions 634:713 from trunk.
This commit is contained in:
@@ -77,6 +77,7 @@ EXTRA_DIST = include/btr0btr.h include/btr0btr.ic include/btr0cur.h include/btr
|
|||||||
include/ut0byte.h include/ut0byte.ic include/ut0dbg.h include/ut0lst.h \
|
include/ut0byte.h include/ut0byte.ic include/ut0dbg.h include/ut0lst.h \
|
||||||
include/ut0mem.h include/ut0mem.ic include/ut0rnd.h include/ut0rnd.ic \
|
include/ut0mem.h include/ut0mem.ic include/ut0rnd.h include/ut0rnd.ic \
|
||||||
include/ut0sort.h include/ut0ut.h include/ut0ut.ic include/ut0vec.h include/ut0vec.ic include/ha_prototypes.h \
|
include/ut0sort.h include/ut0ut.h include/ut0ut.ic include/ut0vec.h include/ut0vec.ic include/ha_prototypes.h \
|
||||||
|
include/ut0list.h include/ut0list.ic include/ut0wqueue.h \
|
||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
|
|
||||||
noinst_LIBRARIES = libinnobase.a
|
noinst_LIBRARIES = libinnobase.a
|
||||||
|
|||||||
@@ -637,7 +637,7 @@ btr_page_get_father_for_rec(
|
|||||||
fputs(
|
fputs(
|
||||||
"InnoDB: You should dump + drop + reimport the table to fix the\n"
|
"InnoDB: You should dump + drop + reimport the table to fix the\n"
|
||||||
"InnoDB: corruption. If the crash happens at the database startup, see\n"
|
"InnoDB: corruption. If the crash happens at the database startup, see\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html about\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html about\n"
|
||||||
"InnoDB: forcing recovery. Then dump + drop + reimport.\n", stderr);
|
"InnoDB: forcing recovery. Then dump + drop + reimport.\n", stderr);
|
||||||
|
|
||||||
ut_error;
|
ut_error;
|
||||||
|
|||||||
@@ -326,7 +326,8 @@ buf_page_is_corrupted(
|
|||||||
"InnoDB: is in the future! Current system log sequence number %lu %lu.\n"
|
"InnoDB: is in the future! Current system log sequence number %lu %lu.\n"
|
||||||
"InnoDB: Your database may be corrupt or you may have copied the InnoDB\n"
|
"InnoDB: Your database may be corrupt or you may have copied the InnoDB\n"
|
||||||
"InnoDB: tablespace but not the InnoDB log files. See\n"
|
"InnoDB: tablespace but not the InnoDB log files. See\n"
|
||||||
"http://dev.mysql.com/doc/mysql/en/backing-up.html for more information.\n",
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
|
"InnoDB: for more information.\n",
|
||||||
(ulong) mach_read_from_4(read_buf + FIL_PAGE_OFFSET),
|
(ulong) mach_read_from_4(read_buf + FIL_PAGE_OFFSET),
|
||||||
(ulong) ut_dulint_get_high(
|
(ulong) ut_dulint_get_high(
|
||||||
mach_read_from_8(read_buf + FIL_PAGE_LSN)),
|
mach_read_from_8(read_buf + FIL_PAGE_LSN)),
|
||||||
@@ -2065,7 +2066,7 @@ corrupt:
|
|||||||
"InnoDB: the corrupt table. You can use CHECK\n"
|
"InnoDB: the corrupt table. You can use CHECK\n"
|
||||||
"InnoDB: TABLE to scan your table for corruption.\n"
|
"InnoDB: TABLE to scan your table for corruption.\n"
|
||||||
"InnoDB: See also "
|
"InnoDB: See also "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: about forcing recovery.\n", stderr);
|
"InnoDB: about forcing recovery.\n", stderr);
|
||||||
|
|
||||||
if (srv_force_recovery < SRV_FORCE_IGNORE_CORRUPT) {
|
if (srv_force_recovery < SRV_FORCE_IGNORE_CORRUPT) {
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ fi
|
|||||||
# If using gcc, add some extra warning flags.
|
# If using gcc, add some extra warning flags.
|
||||||
if test "$ac_cv_prog_gcc" = "yes"
|
if test "$ac_cv_prog_gcc" = "yes"
|
||||||
then
|
then
|
||||||
CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
|
CFLAGS="$CFLAGS -Werror-implicit-function-declaration -Wpointer-arith"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
|
|||||||
@@ -2217,8 +2217,8 @@ dict_foreign_error_report(
|
|||||||
if (fk->foreign_index) {
|
if (fk->foreign_index) {
|
||||||
fputs("The index in the foreign key in table is ", file);
|
fputs("The index in the foreign key in table is ", file);
|
||||||
ut_print_name(file, NULL, FALSE, fk->foreign_index->name);
|
ut_print_name(file, NULL, FALSE, fk->foreign_index->name);
|
||||||
fputs(
|
fputs("\n"
|
||||||
"\nSee http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
|
||||||
"for correct foreign key definition.\n",
|
"for correct foreign key definition.\n",
|
||||||
file);
|
file);
|
||||||
}
|
}
|
||||||
@@ -3121,7 +3121,7 @@ col_loop1:
|
|||||||
ut_print_name(ef, NULL, TRUE, name);
|
ut_print_name(ef, NULL, TRUE, name);
|
||||||
fprintf(ef, " where the columns appear\n"
|
fprintf(ef, " where the columns appear\n"
|
||||||
"as the first columns. Constraint:\n%s\n"
|
"as the first columns. Constraint:\n%s\n"
|
||||||
"See http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
|
||||||
"for correct foreign key definition.\n",
|
"for correct foreign key definition.\n",
|
||||||
start_of_latest_foreign);
|
start_of_latest_foreign);
|
||||||
mutex_exit(&dict_foreign_err_mutex);
|
mutex_exit(&dict_foreign_err_mutex);
|
||||||
@@ -3389,7 +3389,7 @@ try_find_index:
|
|||||||
"Note that the internal storage type of ENUM and SET changed in\n"
|
"Note that the internal storage type of ENUM and SET changed in\n"
|
||||||
"tables created with >= InnoDB-4.1.12, and such columns in old tables\n"
|
"tables created with >= InnoDB-4.1.12, and such columns in old tables\n"
|
||||||
"cannot be referenced by such columns in new tables.\n"
|
"cannot be referenced by such columns in new tables.\n"
|
||||||
"See http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
|
||||||
"for correct foreign key definition.\n",
|
"for correct foreign key definition.\n",
|
||||||
start_of_latest_foreign);
|
start_of_latest_foreign);
|
||||||
mutex_exit(&dict_foreign_err_mutex);
|
mutex_exit(&dict_foreign_err_mutex);
|
||||||
@@ -3962,8 +3962,7 @@ dict_update_statistics_low(
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" InnoDB: cannot calculate statistics for table %s\n"
|
" InnoDB: cannot calculate statistics for table %s\n"
|
||||||
"InnoDB: because the .ibd file is missing. For help, please refer to\n"
|
"InnoDB: because the .ibd file is missing. For help, please refer to\n"
|
||||||
"InnoDB: "
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n",
|
|
||||||
table->name);
|
table->name);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -253,9 +253,6 @@ struct fil_system_struct {
|
|||||||
initialized. */
|
initialized. */
|
||||||
fil_system_t* fil_system = NULL;
|
fil_system_t* fil_system = NULL;
|
||||||
|
|
||||||
/* The tablespace memory cache hash table size */
|
|
||||||
#define FIL_SYSTEM_HASH_SIZE 50 /* TODO: make bigger! */
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
NOTE: you must call fil_mutex_enter_and_prepare_for_io() first!
|
NOTE: you must call fil_mutex_enter_and_prepare_for_io() first!
|
||||||
@@ -1454,11 +1451,17 @@ fil_init(
|
|||||||
/*=====*/
|
/*=====*/
|
||||||
ulint max_n_open) /* in: max number of open files */
|
ulint max_n_open) /* in: max number of open files */
|
||||||
{
|
{
|
||||||
|
ulint hash_size;
|
||||||
|
|
||||||
ut_a(fil_system == NULL);
|
ut_a(fil_system == NULL);
|
||||||
|
|
||||||
/*printf("Initializing the tablespace cache with max %lu open files\n",
|
if (srv_file_per_table) {
|
||||||
max_n_open); */
|
hash_size = 50000;
|
||||||
fil_system = fil_system_create(FIL_SYSTEM_HASH_SIZE, max_n_open);
|
} else {
|
||||||
|
hash_size = 5000;
|
||||||
|
}
|
||||||
|
|
||||||
|
fil_system = fil_system_create(hash_size, max_n_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
@@ -2860,8 +2863,7 @@ fil_open_single_table_tablespace(
|
|||||||
"InnoDB: It is also possible that this is a temporary table #sql...,\n"
|
"InnoDB: It is also possible that this is a temporary table #sql...,\n"
|
||||||
"InnoDB: and MySQL removed the .ibd file for this.\n"
|
"InnoDB: and MySQL removed the .ibd file for this.\n"
|
||||||
"InnoDB: Please refer to\n"
|
"InnoDB: Please refer to\n"
|
||||||
"InnoDB:"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
|
||||||
"InnoDB: for how to resolve the issue.\n", stderr);
|
"InnoDB: for how to resolve the issue.\n", stderr);
|
||||||
|
|
||||||
mem_free(filepath);
|
mem_free(filepath);
|
||||||
@@ -2900,8 +2902,7 @@ fil_open_single_table_tablespace(
|
|||||||
"InnoDB: Have you moved InnoDB .ibd files around without using the\n"
|
"InnoDB: Have you moved InnoDB .ibd files around without using the\n"
|
||||||
"InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?\n"
|
"InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?\n"
|
||||||
"InnoDB: Please refer to\n"
|
"InnoDB: Please refer to\n"
|
||||||
"InnoDB:"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
|
||||||
"InnoDB: for how to resolve the issue.\n", (ulong) space_id, (ulong) id);
|
"InnoDB: for how to resolve the issue.\n", (ulong) space_id, (ulong) id);
|
||||||
|
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
@@ -3553,8 +3554,7 @@ fil_space_for_table_exists_in_mem(
|
|||||||
error_exit:
|
error_exit:
|
||||||
fputs(
|
fputs(
|
||||||
"InnoDB: Please refer to\n"
|
"InnoDB: Please refer to\n"
|
||||||
"InnoDB:"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
|
||||||
"InnoDB: for how to resolve the issue.\n", stderr);
|
"InnoDB: for how to resolve the issue.\n", stderr);
|
||||||
|
|
||||||
mem_free(path);
|
mem_free(path);
|
||||||
|
|||||||
@@ -3129,7 +3129,7 @@ fseg_free_page_low(
|
|||||||
crash:
|
crash:
|
||||||
fputs(
|
fputs(
|
||||||
"InnoDB: Please refer to\n"
|
"InnoDB: Please refer to\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: about forcing recovery.\n", stderr);
|
"InnoDB: about forcing recovery.\n", stderr);
|
||||||
ut_error;
|
ut_error;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ char* innobase_unix_file_flush_method = NULL;
|
|||||||
/* Below we have boolean-valued start-up parameters, and their default
|
/* Below we have boolean-valued start-up parameters, and their default
|
||||||
values */
|
values */
|
||||||
|
|
||||||
uint innobase_flush_log_at_trx_commit = 1;
|
|
||||||
ulong innobase_fast_shutdown = 1;
|
ulong innobase_fast_shutdown = 1;
|
||||||
my_bool innobase_log_archive = FALSE;/* unused */
|
my_bool innobase_log_archive = FALSE;/* unused */
|
||||||
my_bool innobase_use_doublewrite = TRUE;
|
my_bool innobase_use_doublewrite = TRUE;
|
||||||
@@ -1518,7 +1517,6 @@ innobase_init(void)
|
|||||||
srv_log_archive_on = (ulint) innobase_log_archive;
|
srv_log_archive_on = (ulint) innobase_log_archive;
|
||||||
#endif /* UNIV_LOG_ARCHIVE */
|
#endif /* UNIV_LOG_ARCHIVE */
|
||||||
srv_log_buffer_size = (ulint) innobase_log_buffer_size;
|
srv_log_buffer_size = (ulint) innobase_log_buffer_size;
|
||||||
srv_flush_log_at_trx_commit = (ulint) innobase_flush_log_at_trx_commit;
|
|
||||||
|
|
||||||
/* We set srv_pool_size here in units of 1 kB. InnoDB internally
|
/* We set srv_pool_size here in units of 1 kB. InnoDB internally
|
||||||
changes the value so that it becomes the number of database pages. */
|
changes the value so that it becomes the number of database pages. */
|
||||||
@@ -1975,7 +1973,7 @@ innobase_commit_complete(
|
|||||||
|
|
||||||
trx->active_trans = 0;
|
trx->active_trans = 0;
|
||||||
|
|
||||||
if (srv_flush_log_at_trx_commit == 0) {
|
if (UNIV_UNLIKELY(srv_flush_log_at_trx_commit == 0)) {
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -2367,8 +2365,7 @@ ha_innobase::open(
|
|||||||
"have forgotten\nto delete the corresponding "
|
"have forgotten\nto delete the corresponding "
|
||||||
".frm files of InnoDB tables, or you\n"
|
".frm files of InnoDB tables, or you\n"
|
||||||
"have moved .frm files to another database?\n"
|
"have moved .frm files to another database?\n"
|
||||||
"Look from section 15.1 of "
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"http://www.innodb.com/ibman.html\n"
|
|
||||||
"how you can resolve the problem.\n",
|
"how you can resolve the problem.\n",
|
||||||
norm_name);
|
norm_name);
|
||||||
free_share(share);
|
free_share(share);
|
||||||
@@ -2385,8 +2382,7 @@ ha_innobase::open(
|
|||||||
"Have you deleted the .ibd file from the "
|
"Have you deleted the .ibd file from the "
|
||||||
"database directory under\nthe MySQL datadir, "
|
"database directory under\nthe MySQL datadir, "
|
||||||
"or have you used DISCARD TABLESPACE?\n"
|
"or have you used DISCARD TABLESPACE?\n"
|
||||||
"Look from section 15.1 of "
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"http://www.innodb.com/ibman.html\n"
|
|
||||||
"how you can resolve the problem.\n",
|
"how you can resolve the problem.\n",
|
||||||
norm_name);
|
norm_name);
|
||||||
free_share(share);
|
free_share(share);
|
||||||
@@ -3667,7 +3663,7 @@ ha_innobase::update_row(
|
|||||||
|
|
||||||
DBUG_ENTER("ha_innobase::update_row");
|
DBUG_ENTER("ha_innobase::update_row");
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
|
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
|
||||||
@@ -3728,7 +3724,7 @@ ha_innobase::delete_row(
|
|||||||
|
|
||||||
DBUG_ENTER("ha_innobase::delete_row");
|
DBUG_ENTER("ha_innobase::delete_row");
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
if (last_query_id != user_thd->query_id) {
|
if (last_query_id != user_thd->query_id) {
|
||||||
@@ -3826,6 +3822,9 @@ ha_innobase::try_semi_consistent_read(bool yes)
|
|||||||
{
|
{
|
||||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
||||||
|
|
||||||
|
ut_a(prebuilt->trx ==
|
||||||
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
/* Row read type is set to semi consistent read if this was
|
/* Row read type is set to semi consistent read if this was
|
||||||
requested by the MySQL and either innodb_locks_unsafe_for_binlog
|
requested by the MySQL and either innodb_locks_unsafe_for_binlog
|
||||||
option is used or this session is using READ COMMITTED isolation
|
option is used or this session is using READ COMMITTED isolation
|
||||||
@@ -3990,7 +3989,7 @@ ha_innobase::index_read(
|
|||||||
|
|
||||||
DBUG_ENTER("index_read");
|
DBUG_ENTER("index_read");
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
statistic_increment(current_thd->status_var.ha_read_key_count,
|
statistic_increment(current_thd->status_var.ha_read_key_count,
|
||||||
@@ -4105,7 +4104,7 @@ ha_innobase::change_active_index(
|
|||||||
DBUG_ENTER("change_active_index");
|
DBUG_ENTER("change_active_index");
|
||||||
|
|
||||||
ut_ad(user_thd == current_thd);
|
ut_ad(user_thd == current_thd);
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
active_index = keynr;
|
active_index = keynr;
|
||||||
@@ -4195,7 +4194,7 @@ ha_innobase::general_fetch(
|
|||||||
|
|
||||||
DBUG_ENTER("general_fetch");
|
DBUG_ENTER("general_fetch");
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
||||||
@@ -4431,7 +4430,7 @@ ha_innobase::rnd_pos(
|
|||||||
statistic_increment(current_thd->status_var.ha_read_rnd_count,
|
statistic_increment(current_thd->status_var.ha_read_rnd_count,
|
||||||
&LOCK_status);
|
&LOCK_status);
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
if (prebuilt->clust_index_was_generated) {
|
if (prebuilt->clust_index_was_generated) {
|
||||||
@@ -4481,7 +4480,7 @@ ha_innobase::position(
|
|||||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
||||||
uint len;
|
uint len;
|
||||||
|
|
||||||
ut_ad(prebuilt->trx ==
|
ut_a(prebuilt->trx ==
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
if (prebuilt->clust_index_was_generated) {
|
if (prebuilt->clust_index_was_generated) {
|
||||||
@@ -5018,7 +5017,6 @@ ha_innobase::delete_all_rows(void)
|
|||||||
{
|
{
|
||||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
||||||
int error;
|
int error;
|
||||||
trx_t* trx;
|
|
||||||
THD* thd = current_thd;
|
THD* thd = current_thd;
|
||||||
|
|
||||||
DBUG_ENTER("ha_innobase::delete_all_rows");
|
DBUG_ENTER("ha_innobase::delete_all_rows");
|
||||||
@@ -5031,13 +5029,13 @@ ha_innobase::delete_all_rows(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get the transaction associated with the current thd, or create one
|
/* Get the transaction associated with the current thd, or create one
|
||||||
if not yet created */
|
if not yet created, and update prebuilt->trx */
|
||||||
|
|
||||||
trx = check_trx_exists(thd);
|
update_thd(thd);
|
||||||
|
|
||||||
/* Truncate the table in InnoDB */
|
/* Truncate the table in InnoDB */
|
||||||
|
|
||||||
error = row_truncate_table_for_mysql(prebuilt->table, trx);
|
error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx);
|
||||||
if (error == DB_ERROR) {
|
if (error == DB_ERROR) {
|
||||||
/* Cannot truncate; resort to ha_innobase::delete_row() */
|
/* Cannot truncate; resort to ha_innobase::delete_row() */
|
||||||
goto fallback;
|
goto fallback;
|
||||||
@@ -5320,6 +5318,9 @@ ha_innobase::records_in_range(
|
|||||||
|
|
||||||
DBUG_ENTER("records_in_range");
|
DBUG_ENTER("records_in_range");
|
||||||
|
|
||||||
|
ut_a(prebuilt->trx ==
|
||||||
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
prebuilt->trx->op_info = (char*)"estimating records in index range";
|
prebuilt->trx->op_info = (char*)"estimating records in index range";
|
||||||
|
|
||||||
/* In case MySQL calls this in the middle of a SELECT query, release
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
||||||
@@ -5616,13 +5617,14 @@ ha_innobase::info(
|
|||||||
for (i = 0; i < table->s->keys; i++) {
|
for (i = 0; i < table->s->keys; i++) {
|
||||||
if (index == NULL) {
|
if (index == NULL) {
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
sql_print_error("Table %s contains less "
|
sql_print_error("Table %s contains fewer "
|
||||||
"indexes inside InnoDB than "
|
"indexes inside InnoDB than "
|
||||||
"are defined in the MySQL "
|
"are defined in the MySQL "
|
||||||
".frm file. Have you mixed up "
|
".frm file. Have you mixed up "
|
||||||
".frm files from different "
|
".frm files from different "
|
||||||
"installations? See section "
|
"installations? See "
|
||||||
"15.1 at http://www.innodb.com/ibman.html",
|
"http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
|
|
||||||
ib_table->name);
|
ib_table->name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -5631,17 +5633,11 @@ ha_innobase::info(
|
|||||||
|
|
||||||
if (j + 1 > index->n_uniq) {
|
if (j + 1 > index->n_uniq) {
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
sql_print_error("Index %s of %s has "
|
sql_print_error(
|
||||||
"%lu columns unique "
|
"Index %s of %s has %lu columns unique inside InnoDB, but MySQL is asking "
|
||||||
"inside InnoDB, but "
|
"statistics for %lu columns. Have you mixed up .frm files from different "
|
||||||
"MySQL is asking "
|
"installations? "
|
||||||
"statistics for %lu "
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"columns. Have you "
|
|
||||||
"mixed up .frm files "
|
|
||||||
"from different "
|
|
||||||
"installations? See "
|
|
||||||
"section 15.1 at "
|
|
||||||
"http://www.innodb.com/ibman.html",
|
|
||||||
index->name,
|
index->name,
|
||||||
ib_table->name,
|
ib_table->name,
|
||||||
(unsigned long)
|
(unsigned long)
|
||||||
@@ -6047,6 +6043,10 @@ ha_innobase::can_switch_engines(void)
|
|||||||
bool can_switch;
|
bool can_switch;
|
||||||
|
|
||||||
DBUG_ENTER("ha_innobase::can_switch_engines");
|
DBUG_ENTER("ha_innobase::can_switch_engines");
|
||||||
|
|
||||||
|
ut_a(prebuilt->trx ==
|
||||||
|
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
||||||
|
|
||||||
prebuilt->trx->op_info =
|
prebuilt->trx->op_info =
|
||||||
"determining if there are foreign key constraints";
|
"determining if there are foreign key constraints";
|
||||||
row_mysql_lock_data_dictionary(prebuilt->trx);
|
row_mysql_lock_data_dictionary(prebuilt->trx);
|
||||||
@@ -6184,14 +6184,6 @@ ha_innobase::start_stmt(
|
|||||||
|
|
||||||
innobase_release_stat_resources(trx);
|
innobase_release_stat_resources(trx);
|
||||||
|
|
||||||
if (trx->isolation_level <= TRX_ISO_READ_COMMITTED
|
|
||||||
&& trx->global_read_view) {
|
|
||||||
/* At low transaction isolation levels we let
|
|
||||||
each consistent read set its own snapshot */
|
|
||||||
|
|
||||||
read_view_close_for_mysql(trx);
|
|
||||||
}
|
|
||||||
|
|
||||||
prebuilt->sql_stat_start = TRUE;
|
prebuilt->sql_stat_start = TRUE;
|
||||||
prebuilt->hint_need_to_fetch_extra_cols = 0;
|
prebuilt->hint_need_to_fetch_extra_cols = 0;
|
||||||
prebuilt->read_just_key = 0;
|
prebuilt->read_just_key = 0;
|
||||||
@@ -6450,7 +6442,7 @@ ha_innobase::transactional_table_lock(
|
|||||||
"table %s does not exist.\n"
|
"table %s does not exist.\n"
|
||||||
"Have you deleted the .ibd file from the database directory under\n"
|
"Have you deleted the .ibd file from the database directory under\n"
|
||||||
"the MySQL datadir?"
|
"the MySQL datadir?"
|
||||||
"Look from section 15.1 of http://www.innodb.com/ibman.html\n"
|
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"how you can resolve the problem.\n",
|
"how you can resolve the problem.\n",
|
||||||
prebuilt->table->name);
|
prebuilt->table->name);
|
||||||
DBUG_RETURN(HA_ERR_CRASHED);
|
DBUG_RETURN(HA_ERR_CRASHED);
|
||||||
@@ -6804,7 +6796,15 @@ ha_innobase::store_lock(
|
|||||||
TL_IGNORE */
|
TL_IGNORE */
|
||||||
{
|
{
|
||||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
||||||
trx_t* trx = prebuilt->trx;
|
trx_t* trx;
|
||||||
|
|
||||||
|
/* Call update_thd() to update prebuilt->trx to point to the trx
|
||||||
|
object of thd! Failure to do this caused a serious memory
|
||||||
|
corruption bug in 5.1.11. */
|
||||||
|
|
||||||
|
update_thd(thd);
|
||||||
|
|
||||||
|
trx = prebuilt->trx;
|
||||||
|
|
||||||
/* NOTE: MySQL can call this function with lock 'type' TL_IGNORE!
|
/* NOTE: MySQL can call this function with lock 'type' TL_IGNORE!
|
||||||
Be careful to ignore TL_IGNORE if we are going to do something with
|
Be careful to ignore TL_IGNORE if we are going to do something with
|
||||||
@@ -6989,10 +6989,11 @@ ha_innobase::innobase_read_and_init_auto_inc(
|
|||||||
int error;
|
int error;
|
||||||
|
|
||||||
ut_a(prebuilt);
|
ut_a(prebuilt);
|
||||||
ut_a(prebuilt->trx ==
|
|
||||||
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
|
|
||||||
ut_a(prebuilt->table);
|
ut_a(prebuilt->table);
|
||||||
|
|
||||||
|
/* Prepare prebuilt->trx in the table handle */
|
||||||
|
update_thd(current_thd);
|
||||||
|
|
||||||
if (prebuilt->trx->conc_state == TRX_NOT_STARTED) {
|
if (prebuilt->trx->conc_state == TRX_NOT_STARTED) {
|
||||||
trx_was_not_started = TRUE;
|
trx_was_not_started = TRUE;
|
||||||
}
|
}
|
||||||
@@ -7127,6 +7128,9 @@ void ha_innobase::get_auto_increment(
|
|||||||
longlong nr;
|
longlong nr;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
/* Prepare prebuilt->trx in the table handle */
|
||||||
|
update_thd(current_thd);
|
||||||
|
|
||||||
error = innobase_read_and_init_auto_inc(&nr);
|
error = innobase_read_and_init_auto_inc(&nr);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
@@ -7155,6 +7159,8 @@ ha_innobase::reset_auto_increment(ulonglong value)
|
|||||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
update_thd(current_thd);
|
||||||
|
|
||||||
error = row_lock_table_autoinc_for_mysql(prebuilt);
|
error = row_lock_table_autoinc_for_mysql(prebuilt);
|
||||||
|
|
||||||
if (error != DB_SUCCESS) {
|
if (error != DB_SUCCESS) {
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ class ha_innobase: public handler
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern SHOW_VAR innodb_status_variables[];
|
extern SHOW_VAR innodb_status_variables[];
|
||||||
extern uint innobase_flush_log_at_trx_commit;
|
|
||||||
extern ulong innobase_fast_shutdown;
|
extern ulong innobase_fast_shutdown;
|
||||||
extern ulong innobase_large_page_size;
|
extern ulong innobase_large_page_size;
|
||||||
extern long innobase_mirrored_log_groups, innobase_log_files_in_group;
|
extern long innobase_mirrored_log_groups, innobase_log_files_in_group;
|
||||||
@@ -243,6 +242,7 @@ extern ulong srv_n_free_tickets_to_enter;
|
|||||||
extern ulong srv_thread_sleep_delay;
|
extern ulong srv_thread_sleep_delay;
|
||||||
extern ulong srv_thread_concurrency;
|
extern ulong srv_thread_concurrency;
|
||||||
extern ulong srv_commit_concurrency;
|
extern ulong srv_commit_concurrency;
|
||||||
|
extern ulong srv_flush_log_at_trx_commit;
|
||||||
}
|
}
|
||||||
|
|
||||||
int innobase_init(void);
|
int innobase_init(void);
|
||||||
|
|||||||
@@ -373,7 +373,6 @@ ibuf_init_at_db_start(void)
|
|||||||
|
|
||||||
ibuf->max_size = buf_pool_get_curr_size() / UNIV_PAGE_SIZE
|
ibuf->max_size = buf_pool_get_curr_size() / UNIV_PAGE_SIZE
|
||||||
/ IBUF_POOL_SIZE_PER_MAX_SIZE;
|
/ IBUF_POOL_SIZE_PER_MAX_SIZE;
|
||||||
ibuf->meter = IBUF_THRESHOLD + 1;
|
|
||||||
|
|
||||||
UT_LIST_INIT(ibuf->data_list);
|
UT_LIST_INIT(ibuf->data_list);
|
||||||
|
|
||||||
@@ -3598,20 +3597,8 @@ ibuf_print(
|
|||||||
|
|
||||||
while (data) {
|
while (data) {
|
||||||
fprintf(file,
|
fprintf(file,
|
||||||
"Ibuf for space %lu: size %lu, free list len %lu, seg size %lu,",
|
"Ibuf: size %lu, free list len %lu, seg size %lu,\n"
|
||||||
(ulong) data->space, (ulong) data->size,
|
|
||||||
(ulong) data->free_list_len,
|
|
||||||
(ulong) data->seg_size);
|
|
||||||
|
|
||||||
if (data->empty) {
|
|
||||||
fputs(" is empty\n", file);
|
|
||||||
} else {
|
|
||||||
fputs(" is not empty\n", file);
|
|
||||||
}
|
|
||||||
fprintf(file,
|
|
||||||
"Ibuf for space %lu: size %lu, free list len %lu, seg size %lu,\n"
|
|
||||||
"%lu inserts, %lu merged recs, %lu merges\n",
|
"%lu inserts, %lu merged recs, %lu merges\n",
|
||||||
(ulong) data->space,
|
|
||||||
(ulong) data->size,
|
(ulong) data->size,
|
||||||
(ulong) data->free_list_len,
|
(ulong) data->free_list_len,
|
||||||
(ulong) data->seg_size,
|
(ulong) data->seg_size,
|
||||||
|
|||||||
@@ -234,8 +234,8 @@ buf_block_align(
|
|||||||
"InnoDB: Error: trying to access a stray pointer %p\n"
|
"InnoDB: Error: trying to access a stray pointer %p\n"
|
||||||
"InnoDB: buf pool start is at %p, end at %p\n"
|
"InnoDB: buf pool start is at %p, end at %p\n"
|
||||||
"InnoDB: Probable reason is database corruption or memory\n"
|
"InnoDB: Probable reason is database corruption or memory\n"
|
||||||
"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
|
"InnoDB: corruption. If this happens in an InnoDB database recovery, see\n"
|
||||||
"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: how to force recovery.\n",
|
"InnoDB: how to force recovery.\n",
|
||||||
ptr, frame_zero,
|
ptr, frame_zero,
|
||||||
buf_pool->high_end);
|
buf_pool->high_end);
|
||||||
@@ -270,8 +270,8 @@ buf_frame_align(
|
|||||||
"InnoDB: Error: trying to access a stray pointer %p\n"
|
"InnoDB: Error: trying to access a stray pointer %p\n"
|
||||||
"InnoDB: buf pool start is at %p, end at %p\n"
|
"InnoDB: buf pool start is at %p, end at %p\n"
|
||||||
"InnoDB: Probable reason is database corruption or memory\n"
|
"InnoDB: Probable reason is database corruption or memory\n"
|
||||||
"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
|
"InnoDB: corruption. If this happens in an InnoDB database recovery, see\n"
|
||||||
"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: how to force recovery.\n",
|
"InnoDB: how to force recovery.\n",
|
||||||
ptr, buf_pool->frame_zero,
|
ptr, buf_pool->frame_zero,
|
||||||
buf_pool->high_end);
|
buf_pool->high_end);
|
||||||
|
|||||||
@@ -39,19 +39,11 @@ struct ibuf_data_struct{
|
|||||||
ulint n_merged_recs;/* number of records merged */
|
ulint n_merged_recs;/* number of records merged */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* If the ibuf meter exceeds this value, then the suitable inserts are made to
|
|
||||||
the insert buffer instead of directly to the disk page */
|
|
||||||
#define IBUF_THRESHOLD 50
|
|
||||||
|
|
||||||
struct ibuf_struct{
|
struct ibuf_struct{
|
||||||
ulint size; /* current size of the ibuf index
|
ulint size; /* current size of the ibuf index
|
||||||
trees in pages */
|
trees in pages */
|
||||||
ulint max_size; /* recommended maximum size in pages
|
ulint max_size; /* recommended maximum size in pages
|
||||||
for the ibuf index tree */
|
for the ibuf index tree */
|
||||||
ulint meter; /* heuristic meter which measures
|
|
||||||
desirability of doing inserts to the
|
|
||||||
insert buffer instead of directly to
|
|
||||||
the disk page */
|
|
||||||
UT_LIST_BASE_NODE_T(ibuf_data_t) data_list;
|
UT_LIST_BASE_NODE_T(ibuf_data_t) data_list;
|
||||||
/* list of ibuf data structs for
|
/* list of ibuf data structs for
|
||||||
each tablespace */
|
each tablespace */
|
||||||
@@ -89,8 +81,7 @@ ibuf_should_try(
|
|||||||
{
|
{
|
||||||
if (!dict_index_is_clust(index)
|
if (!dict_index_is_clust(index)
|
||||||
&& !dict_table_zip_size(index->table)
|
&& !dict_table_zip_size(index->table)
|
||||||
&& (ignore_sec_unique || !(index->type & DICT_UNIQUE))
|
&& (ignore_sec_unique || !(index->type & DICT_UNIQUE))) {
|
||||||
&& ibuf->meter > IBUF_THRESHOLD) {
|
|
||||||
|
|
||||||
ibuf_flush_count++;
|
ibuf_flush_count++;
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ extern ulint srv_n_log_groups;
|
|||||||
extern ulint srv_n_log_files;
|
extern ulint srv_n_log_files;
|
||||||
extern ulint srv_log_file_size;
|
extern ulint srv_log_file_size;
|
||||||
extern ulint srv_log_buffer_size;
|
extern ulint srv_log_buffer_size;
|
||||||
extern ulint srv_flush_log_at_trx_commit;
|
extern ulong srv_flush_log_at_trx_commit;
|
||||||
|
|
||||||
extern byte srv_latin1_ordering[256];/* The sort order table of the latin1
|
extern byte srv_latin1_ordering[256];/* The sort order table of the latin1
|
||||||
character set */
|
character set */
|
||||||
|
|||||||
@@ -720,7 +720,7 @@ failure:
|
|||||||
"InnoDB: To get mysqld to start up, set innodb_thread_concurrency in my.cnf\n"
|
"InnoDB: To get mysqld to start up, set innodb_thread_concurrency in my.cnf\n"
|
||||||
"InnoDB: to a lower value, for example, to 8. After an ERROR-FREE shutdown\n"
|
"InnoDB: to a lower value, for example, to 8. After an ERROR-FREE shutdown\n"
|
||||||
"InnoDB: of mysqld you can adjust the size of ib_logfiles, as explained in\n"
|
"InnoDB: of mysqld you can adjust the size of ib_logfiles, as explained in\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Adding_and_removing.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/adding-and-removing.html\n"
|
||||||
"InnoDB: Cannot continue operation. Calling exit(1).\n",
|
"InnoDB: Cannot continue operation. Calling exit(1).\n",
|
||||||
(ulong)srv_thread_concurrency);
|
(ulong)srv_thread_concurrency);
|
||||||
|
|
||||||
|
|||||||
@@ -543,7 +543,7 @@ recv_find_max_checkpoint(
|
|||||||
"InnoDB: the problem may be that during an earlier attempt you managed\n"
|
"InnoDB: the problem may be that during an earlier attempt you managed\n"
|
||||||
"InnoDB: to create the InnoDB data files, but log file creation failed.\n"
|
"InnoDB: to create the InnoDB data files, but log file creation failed.\n"
|
||||||
"InnoDB: If that is the case, please refer to\n"
|
"InnoDB: If that is the case, please refer to\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html\n");
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/error-creating-innodb.html\n");
|
||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1997,7 +1997,7 @@ recv_report_corrupt_log(
|
|||||||
"InnoDB: far enough in recovery! Please run CHECK TABLE\n"
|
"InnoDB: far enough in recovery! Please run CHECK TABLE\n"
|
||||||
"InnoDB: on your InnoDB tables to check that they are ok!\n"
|
"InnoDB: on your InnoDB tables to check that they are ok!\n"
|
||||||
"InnoDB: If mysqld crashes after this recovery, look at\n"
|
"InnoDB: If mysqld crashes after this recovery, look at\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: about forcing recovery.\n", stderr);
|
"InnoDB: about forcing recovery.\n", stderr);
|
||||||
|
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ mem_heap_cat(
|
|||||||
void* res = mem_heap_alloc(heap, len1 + len2);
|
void* res = mem_heap_alloc(heap, len1 + len2);
|
||||||
|
|
||||||
memcpy(res, b1, len1);
|
memcpy(res, b1, len1);
|
||||||
memcpy(res + len1, b2, len2);
|
memcpy((char*)res + len1, b2, len2);
|
||||||
|
|
||||||
return(res);
|
return(res);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1465,8 +1465,8 @@ Error 1146 Table 'test.t4' doesn't exist
|
|||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
create table t1 (id int, name char(10) not null, name2 char(10) not null) engine=innodb;
|
create table t1 (id int, name char(10) not null, name2 char(10) not null) engine=innodb;
|
||||||
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
||||||
select name2 from t1 union all select name from t1 union all select id from t1;
|
select trim(name2) from t1 union all select trim(name) from t1 union all select trim(id) from t1;
|
||||||
name2
|
trim(name2)
|
||||||
fff
|
fff
|
||||||
sss
|
sss
|
||||||
ttt
|
ttt
|
||||||
@@ -1767,6 +1767,21 @@ select count(*) from t1 where x = 18446744073709551601;
|
|||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
show status like "Innodb_buffer_pool_pages_total";
|
||||||
|
Variable_name Value
|
||||||
|
Innodb_buffer_pool_pages_total 512
|
||||||
|
show status like "Innodb_page_size";
|
||||||
|
Variable_name Value
|
||||||
|
Innodb_page_size 16384
|
||||||
|
show status like "Innodb_rows_deleted";
|
||||||
|
Variable_name Value
|
||||||
|
Innodb_rows_deleted 2070
|
||||||
|
show status like "Innodb_rows_inserted";
|
||||||
|
Variable_name Value
|
||||||
|
Innodb_rows_inserted 31727
|
||||||
|
show status like "Innodb_rows_updated";
|
||||||
|
Variable_name Value
|
||||||
|
Innodb_rows_updated 29530
|
||||||
show status like "Innodb_row_lock_waits";
|
show status like "Innodb_row_lock_waits";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Innodb_row_lock_waits 0
|
Innodb_row_lock_waits 0
|
||||||
@@ -1799,7 +1814,7 @@ Variable_name Value
|
|||||||
innodb_sync_spin_loops 20
|
innodb_sync_spin_loops 20
|
||||||
show variables like "innodb_thread_concurrency";
|
show variables like "innodb_thread_concurrency";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
innodb_thread_concurrency 20
|
innodb_thread_concurrency 8
|
||||||
set global innodb_thread_concurrency=1001;
|
set global innodb_thread_concurrency=1001;
|
||||||
show variables like "innodb_thread_concurrency";
|
show variables like "innodb_thread_concurrency";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
@@ -1807,7 +1822,7 @@ innodb_thread_concurrency 1000
|
|||||||
set global innodb_thread_concurrency=0;
|
set global innodb_thread_concurrency=0;
|
||||||
show variables like "innodb_thread_concurrency";
|
show variables like "innodb_thread_concurrency";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
innodb_thread_concurrency 1
|
innodb_thread_concurrency 0
|
||||||
set global innodb_thread_concurrency=16;
|
set global innodb_thread_concurrency=16;
|
||||||
show variables like "innodb_thread_concurrency";
|
show variables like "innodb_thread_concurrency";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
@@ -3397,3 +3412,47 @@ commit;
|
|||||||
drop table t1, t2, t3, t5, t6, t8, t9;
|
drop table t1, t2, t3, t5, t6, t8, t9;
|
||||||
CREATE TABLE t1 (DB_ROW_ID int) engine=innodb;
|
CREATE TABLE t1 (DB_ROW_ID int) engine=innodb;
|
||||||
ERROR HY000: Can't create table 'test.t1' (errno: -1)
|
ERROR HY000: Can't create table 'test.t1' (errno: -1)
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BIGINT(20) NOT NULL,
|
||||||
|
PRIMARY KEY (a)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a BIGINT(20) NOT NULL,
|
||||||
|
b VARCHAR(128) NOT NULL,
|
||||||
|
c TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (a,b),
|
||||||
|
KEY idx_t2_b_c (b,c(200)),
|
||||||
|
CONSTRAINT t_fk FOREIGN KEY (a) REFERENCES t1 (a)
|
||||||
|
ON DELETE CASCADE
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
INSERT INTO t2 VALUES (1, 'bar', 'vbar');
|
||||||
|
INSERT INTO t2 VALUES (1, 'BAR2', 'VBAR');
|
||||||
|
INSERT INTO t2 VALUES (1, 'bar_bar', 'bibi');
|
||||||
|
INSERT INTO t2 VALUES (1, 'customer_over', '1');
|
||||||
|
SELECT * FROM t2 WHERE b = 'customer_over';
|
||||||
|
a b c
|
||||||
|
1 customer_over 1
|
||||||
|
SELECT * FROM t2 WHERE BINARY b = 'customer_over';
|
||||||
|
a b c
|
||||||
|
1 customer_over 1
|
||||||
|
SELECT DISTINCT p0.a FROM t2 p0 WHERE p0.b = 'customer_over';
|
||||||
|
a
|
||||||
|
1
|
||||||
|
/* Bang: Empty result set, above was expected: */
|
||||||
|
SELECT DISTINCT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
|
||||||
|
a
|
||||||
|
1
|
||||||
|
SELECT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
|
||||||
|
a
|
||||||
|
1
|
||||||
|
drop table t2, t1;
|
||||||
|
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
|
||||||
|
ERROR HY000: The used table type doesn't support SPATIAL indexes
|
||||||
|
CREATE TABLE t1 ( a int ) ENGINE=innodb;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
|||||||
@@ -1071,7 +1071,7 @@ drop table t1,t2,t3;
|
|||||||
#
|
#
|
||||||
create table t1 (id int, name char(10) not null, name2 char(10) not null) engine=innodb;
|
create table t1 (id int, name char(10) not null, name2 char(10) not null) engine=innodb;
|
||||||
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
|
||||||
select name2 from t1 union all select name from t1 union all select id from t1;
|
select trim(name2) from t1 union all select trim(name) from t1 union all select trim(id) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1295,6 +1295,15 @@ select * from t1 where x > -16;
|
|||||||
select count(*) from t1 where x = 18446744073709551601;
|
select count(*) from t1 where x = 18446744073709551601;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
# Test for testable InnoDB status variables. This test
|
||||||
|
# uses previous ones(pages_created, rows_deleted, ...).
|
||||||
|
show status like "Innodb_buffer_pool_pages_total";
|
||||||
|
show status like "Innodb_page_size";
|
||||||
|
show status like "Innodb_rows_deleted";
|
||||||
|
show status like "Innodb_rows_inserted";
|
||||||
|
show status like "Innodb_rows_updated";
|
||||||
|
|
||||||
# Test for row locks InnoDB status variables.
|
# Test for row locks InnoDB status variables.
|
||||||
show status like "Innodb_row_lock_waits";
|
show status like "Innodb_row_lock_waits";
|
||||||
show status like "Innodb_row_lock_current_waits";
|
show status like "Innodb_row_lock_current_waits";
|
||||||
@@ -2443,3 +2452,66 @@ drop table t1, t2, t3, t5, t6, t8, t9;
|
|||||||
# bug 18934, "InnoDB crashes when table uses column names like DB_ROW_ID"
|
# bug 18934, "InnoDB crashes when table uses column names like DB_ROW_ID"
|
||||||
--error 1005
|
--error 1005
|
||||||
CREATE TABLE t1 (DB_ROW_ID int) engine=innodb;
|
CREATE TABLE t1 (DB_ROW_ID int) engine=innodb;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #17152: Wrong result with BINARY comparison on aliased column
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a BIGINT(20) NOT NULL,
|
||||||
|
PRIMARY KEY (a)
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
|
||||||
|
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a BIGINT(20) NOT NULL,
|
||||||
|
b VARCHAR(128) NOT NULL,
|
||||||
|
c TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (a,b),
|
||||||
|
KEY idx_t2_b_c (b,c(200)),
|
||||||
|
CONSTRAINT t_fk FOREIGN KEY (a) REFERENCES t1 (a)
|
||||||
|
ON DELETE CASCADE
|
||||||
|
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
INSERT INTO t2 VALUES (1, 'bar', 'vbar');
|
||||||
|
INSERT INTO t2 VALUES (1, 'BAR2', 'VBAR');
|
||||||
|
INSERT INTO t2 VALUES (1, 'bar_bar', 'bibi');
|
||||||
|
INSERT INTO t2 VALUES (1, 'customer_over', '1');
|
||||||
|
|
||||||
|
SELECT * FROM t2 WHERE b = 'customer_over';
|
||||||
|
SELECT * FROM t2 WHERE BINARY b = 'customer_over';
|
||||||
|
SELECT DISTINCT p0.a FROM t2 p0 WHERE p0.b = 'customer_over';
|
||||||
|
/* Bang: Empty result set, above was expected: */
|
||||||
|
SELECT DISTINCT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
|
||||||
|
SELECT p0.a FROM t2 p0 WHERE BINARY p0.b = 'customer_over';
|
||||||
|
|
||||||
|
drop table t2, t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #15680 (SPATIAL key in innodb)
|
||||||
|
#
|
||||||
|
--error ER_TABLE_CANT_HANDLE_SPKEYS
|
||||||
|
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test optimize on table with open transaction
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( a int ) ENGINE=innodb;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
# #
|
||||||
|
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
|
||||||
|
# These files are to be modified ONLY BY INNOBASE guys. #
|
||||||
|
# #
|
||||||
|
# Use innodb_mysql.[test|result] files instead. #
|
||||||
|
# #
|
||||||
|
# If nevertheless you need to make some changes here, please, forward #
|
||||||
|
# your commit message To: dev@innodb.com Cc: dev-innodb@mysql.com #
|
||||||
|
# (otherwise your changes may be erased). #
|
||||||
|
# #
|
||||||
|
#######################################################################
|
||||||
|
|||||||
@@ -233,8 +233,8 @@ fid AsText(Envelope(g))
|
|||||||
120 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
120 POLYGON((0 0,10 0,10 10,0 10,0 0))
|
||||||
121 POLYGON((3 6,44 6,44 9,3 9,3 6))
|
121 POLYGON((3 6,44 6,44 9,3 9,3 6))
|
||||||
explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from gis_geometry;
|
explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from gis_geometry;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21
|
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select dimension(`test`.`gis_geometry`.`g`) AS `Dimension(g)`,geometrytype(`test`.`gis_geometry`.`g`) AS `GeometryType(g)`,isempty(`test`.`gis_geometry`.`g`) AS `IsEmpty(g)`,astext(envelope(`test`.`gis_geometry`.`g`)) AS `AsText(Envelope(g))` from `test`.`gis_geometry`
|
Note 1003 select dimension(`test`.`gis_geometry`.`g`) AS `Dimension(g)`,geometrytype(`test`.`gis_geometry`.`g`) AS `GeometryType(g)`,isempty(`test`.`gis_geometry`.`g`) AS `IsEmpty(g)`,astext(envelope(`test`.`gis_geometry`.`g`)) AS `AsText(Envelope(g))` from `test`.`gis_geometry`
|
||||||
SELECT fid, X(g) FROM gis_point ORDER by fid;
|
SELECT fid, X(g) FROM gis_point ORDER by fid;
|
||||||
@@ -250,8 +250,8 @@ fid Y(g)
|
|||||||
103 20
|
103 20
|
||||||
104 20
|
104 20
|
||||||
explain extended select X(g),Y(g) FROM gis_point;
|
explain extended select X(g),Y(g) FROM gis_point;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_point ALL NULL NULL NULL NULL 4
|
1 SIMPLE gis_point ALL NULL NULL NULL NULL 4 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select x(`test`.`gis_point`.`g`) AS `X(g)`,y(`test`.`gis_point`.`g`) AS `Y(g)` from `test`.`gis_point`
|
Note 1003 select x(`test`.`gis_point`.`g`) AS `X(g)`,y(`test`.`gis_point`.`g`) AS `Y(g)` from `test`.`gis_point`
|
||||||
SELECT fid, AsText(StartPoint(g)) FROM gis_line ORDER by fid;
|
SELECT fid, AsText(StartPoint(g)) FROM gis_line ORDER by fid;
|
||||||
@@ -285,8 +285,8 @@ fid IsClosed(g)
|
|||||||
106 1
|
106 1
|
||||||
107 0
|
107 0
|
||||||
explain extended select AsText(StartPoint(g)),AsText(EndPoint(g)),GLength(g),NumPoints(g),AsText(PointN(g, 2)),IsClosed(g) FROM gis_line;
|
explain extended select AsText(StartPoint(g)),AsText(EndPoint(g)),GLength(g),NumPoints(g),AsText(PointN(g, 2)),IsClosed(g) FROM gis_line;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_line ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_line ALL NULL NULL NULL NULL 3 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint(g))`,astext(endpoint(`test`.`gis_line`.`g`)) AS `AsText(EndPoint(g))`,glength(`test`.`gis_line`.`g`) AS `GLength(g)`,numpoints(`test`.`gis_line`.`g`) AS `NumPoints(g)`,astext(pointn(`test`.`gis_line`.`g`,2)) AS `AsText(PointN(g, 2))`,isclosed(`test`.`gis_line`.`g`) AS `IsClosed(g)` from `test`.`gis_line`
|
Note 1003 select astext(startpoint(`test`.`gis_line`.`g`)) AS `AsText(StartPoint(g))`,astext(endpoint(`test`.`gis_line`.`g`)) AS `AsText(EndPoint(g))`,glength(`test`.`gis_line`.`g`) AS `GLength(g)`,numpoints(`test`.`gis_line`.`g`) AS `NumPoints(g)`,astext(pointn(`test`.`gis_line`.`g`,2)) AS `AsText(PointN(g, 2))`,isclosed(`test`.`gis_line`.`g`) AS `IsClosed(g)` from `test`.`gis_line`
|
||||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
SELECT fid, AsText(Centroid(g)) FROM gis_polygon ORDER by fid;
|
||||||
@@ -315,8 +315,8 @@ fid AsText(InteriorRingN(g, 1))
|
|||||||
109 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
109 LINESTRING(10 10,20 10,20 20,10 20,10 10)
|
||||||
110 NULL
|
110 NULL
|
||||||
explain extended select AsText(Centroid(g)),Area(g),AsText(ExteriorRing(g)),NumInteriorRings(g),AsText(InteriorRingN(g, 1)) FROM gis_polygon;
|
explain extended select AsText(Centroid(g)),Area(g),AsText(ExteriorRing(g)),NumInteriorRings(g),AsText(InteriorRingN(g, 1)) FROM gis_polygon;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_polygon ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_polygon ALL NULL NULL NULL NULL 3 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select astext(centroid(`test`.`gis_polygon`.`g`)) AS `AsText(Centroid(g))`,area(`test`.`gis_polygon`.`g`) AS `Area(g)`,astext(exteriorring(`test`.`gis_polygon`.`g`)) AS `AsText(ExteriorRing(g))`,numinteriorrings(`test`.`gis_polygon`.`g`) AS `NumInteriorRings(g)`,astext(interiorringn(`test`.`gis_polygon`.`g`,1)) AS `AsText(InteriorRingN(g, 1))` from `test`.`gis_polygon`
|
Note 1003 select astext(centroid(`test`.`gis_polygon`.`g`)) AS `AsText(Centroid(g))`,area(`test`.`gis_polygon`.`g`) AS `Area(g)`,astext(exteriorring(`test`.`gis_polygon`.`g`)) AS `AsText(ExteriorRing(g))`,numinteriorrings(`test`.`gis_polygon`.`g`) AS `NumInteriorRings(g)`,astext(interiorringn(`test`.`gis_polygon`.`g`,1)) AS `AsText(InteriorRingN(g, 1))` from `test`.`gis_polygon`
|
||||||
SELECT fid, IsClosed(g) FROM gis_multi_line ORDER by fid;
|
SELECT fid, IsClosed(g) FROM gis_multi_line ORDER by fid;
|
||||||
@@ -354,8 +354,8 @@ fid NumGeometries(g)
|
|||||||
120 2
|
120 2
|
||||||
121 2
|
121 2
|
||||||
explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,numgeometries(`test`.`gis_multi_point`.`g`) AS `NumGeometries(g)` from `test`.`gis_multi_point`
|
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,numgeometries(`test`.`gis_multi_point`.`g`) AS `NumGeometries(g)` from `test`.`gis_multi_point`
|
||||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point ORDER by fid;
|
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point ORDER by fid;
|
||||||
@@ -382,8 +382,8 @@ fid AsText(GeometryN(g, 1))
|
|||||||
120 POINT(0 0)
|
120 POINT(0 0)
|
||||||
121 POINT(44 6)
|
121 POINT(44 6)
|
||||||
explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,astext(geometryn(`test`.`gis_multi_point`.`g`,2)) AS `AsText(GeometryN(g, 2))` from `test`.`gis_multi_point`
|
Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,astext(geometryn(`test`.`gis_multi_point`.`g`,2)) AS `AsText(GeometryN(g, 2))` from `test`.`gis_multi_point`
|
||||||
SELECT g1.fid as first, g2.fid as second,
|
SELECT g1.fid as first, g2.fid as second,
|
||||||
@@ -401,9 +401,9 @@ Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
|||||||
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||||
1 SIMPLE g2 ALL NULL NULL NULL NULL 2
|
1 SIMPLE g2 ALL NULL NULL NULL NULL 2 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,within(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,contains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,overlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,equals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,disjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,intersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
|
Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,within(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,contains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,overlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,equals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,disjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,intersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
|
||||||
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
|
drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
|
||||||
|
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||||
|
character set utf8 collate utf8_general_ci;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 765 bytes
|
||||||
|
insert into t1 values('aaa');
|
||||||
|
drop table t1;
|
||||||
create table t1 (
|
create table t1 (
|
||||||
c_id int(11) not null default '0',
|
c_id int(11) not null default '0',
|
||||||
org_id int(11) default null,
|
org_id int(11) default null,
|
||||||
@@ -54,6 +60,35 @@ c.c_id = 218 and expiredate is null;
|
|||||||
slai_id
|
slai_id
|
||||||
12
|
12
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
CREATE TABLE t1 (a int, b int, KEY b (b)) Engine=InnoDB;
|
||||||
|
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b)) Engine=InnoDB;
|
||||||
|
CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),
|
||||||
|
UNIQUE KEY b (b,c), KEY a (a,b,c)) Engine=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;
|
||||||
|
INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;
|
||||||
|
INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||||
|
INSERT INTO t2 SELECT a + 1, b FROM t2;
|
||||||
|
DELETE FROM t2 WHERE a = 1 AND b < 2;
|
||||||
|
INSERT INTO t3 VALUES (1,1,1),(2,1,2);
|
||||||
|
INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;
|
||||||
|
INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||||
|
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||||
|
ORDER BY t1.b LIMIT 2;
|
||||||
|
b a
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||||
|
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||||
|
ORDER BY t1.b LIMIT 5;
|
||||||
|
b a
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
2 2
|
||||||
|
3 3
|
||||||
|
3 3
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
create table t1m (a int) engine=myisam;
|
create table t1m (a int) engine=myisam;
|
||||||
create table t1i (a int) engine=innodb;
|
create table t1i (a int) engine=innodb;
|
||||||
create table t2m (a int) engine=myisam;
|
create table t2m (a int) engine=myisam;
|
||||||
@@ -326,3 +361,9 @@ ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|||||||
SELECT * from t2;
|
SELECT * from t2;
|
||||||
a b
|
a b
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||||
|
character set utf8 collate utf8_general_ci;
|
||||||
|
Warnings:
|
||||||
|
Warning 1071 Specified key was too long; max key length is 765 bytes
|
||||||
|
insert into t1 values('aaa');
|
||||||
|
drop table t1;
|
||||||
|
|||||||
@@ -4,6 +4,14 @@
|
|||||||
drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
|
drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#17530: Incorrect key truncation on table creation caused server crash.
|
||||||
|
#
|
||||||
|
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||||
|
character set utf8 collate utf8_general_ci;
|
||||||
|
insert into t1 values('aaa');
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# BUG#16798: Uninitialized row buffer reads in ref-or-null optimizer
|
# BUG#16798: Uninitialized row buffer reads in ref-or-null optimizer
|
||||||
# (repeatable only w/innodb).
|
# (repeatable only w/innodb).
|
||||||
create table t1 (
|
create table t1 (
|
||||||
@@ -58,6 +66,38 @@ where
|
|||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#17212: results not sorted correctly by ORDER BY when using index
|
||||||
|
# (repeatable only w/innodb because of index props)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int, b int, KEY b (b)) Engine=InnoDB;
|
||||||
|
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b)) Engine=InnoDB;
|
||||||
|
CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),
|
||||||
|
UNIQUE KEY b (b,c), KEY a (a,b,c)) Engine=InnoDB;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 1);
|
||||||
|
INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;
|
||||||
|
INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;
|
||||||
|
|
||||||
|
INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||||
|
INSERT INTO t2 SELECT a + 1, b FROM t2;
|
||||||
|
DELETE FROM t2 WHERE a = 1 AND b < 2;
|
||||||
|
|
||||||
|
INSERT INTO t3 VALUES (1,1,1),(2,1,2);
|
||||||
|
INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;
|
||||||
|
INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;
|
||||||
|
|
||||||
|
# demonstrate a problem when a must-use-sort table flag
|
||||||
|
# (sort_by_table=1) is being neglected.
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||||
|
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||||
|
ORDER BY t1.b LIMIT 2;
|
||||||
|
|
||||||
|
# demonstrate the problem described in the bug report
|
||||||
|
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||||
|
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||||
|
ORDER BY t1.b LIMIT 5;
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
#
|
#
|
||||||
# Bug #12882 min/max inconsistent on empty table
|
# Bug #12882 min/max inconsistent on empty table
|
||||||
#
|
#
|
||||||
@@ -272,3 +312,11 @@ TRUNCATE table t2;
|
|||||||
INSERT INTO t2 select * from t1;
|
INSERT INTO t2 select * from t1;
|
||||||
SELECT * from t2;
|
SELECT * from t2;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#17530: Incorrect key truncation on table creation caused server crash.
|
||||||
|
#
|
||||||
|
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||||
|
character set utf8 collate utf8_general_ci;
|
||||||
|
insert into t1 values('aaa');
|
||||||
|
drop table t1;
|
||||||
|
|||||||
12
os/os0file.c
12
os/os0file.c
@@ -248,7 +248,7 @@ os_file_get_last_error(
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Some operating system error numbers are described at\n"
|
"InnoDB: Some operating system error numbers are described at\n"
|
||||||
"InnoDB: "
|
"InnoDB: "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
|
"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +295,7 @@ os_file_get_last_error(
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Some operating system error numbers are described at\n"
|
"InnoDB: Some operating system error numbers are described at\n"
|
||||||
"InnoDB: "
|
"InnoDB: "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
|
"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -688,7 +688,7 @@ next_file:
|
|||||||
/* TODO: test Windows symlinks */
|
/* TODO: test Windows symlinks */
|
||||||
/* TODO: MySQL has apparently its own symlink implementation in Windows,
|
/* TODO: MySQL has apparently its own symlink implementation in Windows,
|
||||||
dbname.sym can redirect a database directory:
|
dbname.sym can redirect a database directory:
|
||||||
http://www.mysql.com/doc/en/Windows_symbolic_links.html */
|
http://dev.mysql.com/doc/refman/5.1/en/windows-symbolic-links.html */
|
||||||
info->type = OS_FILE_TYPE_LINK;
|
info->type = OS_FILE_TYPE_LINK;
|
||||||
} else if (lpFindFileData->dwFileAttributes
|
} else if (lpFindFileData->dwFileAttributes
|
||||||
& FILE_ATTRIBUTE_DIRECTORY) {
|
& FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
@@ -2343,7 +2343,7 @@ retry:
|
|||||||
"InnoDB: offset %lu %lu. Operating system error number %lu.\n"
|
"InnoDB: offset %lu %lu. Operating system error number %lu.\n"
|
||||||
"InnoDB: Some operating system error numbers are described at\n"
|
"InnoDB: Some operating system error numbers are described at\n"
|
||||||
"InnoDB: "
|
"InnoDB: "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n",
|
"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n",
|
||||||
name, (ulong) offset_high, (ulong) offset,
|
name, (ulong) offset_high, (ulong) offset,
|
||||||
(ulong) GetLastError());
|
(ulong) GetLastError());
|
||||||
|
|
||||||
@@ -2408,7 +2408,7 @@ retry:
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Some operating system error numbers are described at\n"
|
"InnoDB: Some operating system error numbers are described at\n"
|
||||||
"InnoDB: "
|
"InnoDB: "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
|
"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
|
||||||
|
|
||||||
os_has_said_disk_full = TRUE;
|
os_has_said_disk_full = TRUE;
|
||||||
}
|
}
|
||||||
@@ -2444,7 +2444,7 @@ retry:
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Some operating system error numbers are described at\n"
|
"InnoDB: Some operating system error numbers are described at\n"
|
||||||
"InnoDB: "
|
"InnoDB: "
|
||||||
"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
|
"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
|
||||||
|
|
||||||
os_has_said_disk_full = TRUE;
|
os_has_said_disk_full = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
125
row/row0mysql.c
125
row/row0mysql.c
@@ -54,27 +54,6 @@ static const char S_innodb_tablespace_monitor[] = "innodb_tablespace_monitor";
|
|||||||
static const char S_innodb_table_monitor[] = "innodb_table_monitor";
|
static const char S_innodb_table_monitor[] = "innodb_table_monitor";
|
||||||
static const char S_innodb_mem_validate[] = "innodb_mem_validate";
|
static const char S_innodb_mem_validate[] = "innodb_mem_validate";
|
||||||
|
|
||||||
/* Name suffix for recovered orphaned temporary tables */
|
|
||||||
static const char S_recover_innodb_tmp_table[] = "_recover_innodb_tmp_table";
|
|
||||||
/***********************************************************************
|
|
||||||
Determine if the given name ends in the suffix reserved for recovered
|
|
||||||
orphaned temporary tables. */
|
|
||||||
static
|
|
||||||
ibool
|
|
||||||
row_mysql_is_recovered_tmp_table(
|
|
||||||
/*=============================*/
|
|
||||||
/* out: TRUE if table name ends in
|
|
||||||
the reserved suffix */
|
|
||||||
const char* name)
|
|
||||||
{
|
|
||||||
ulint namelen = strlen(name) + 1;
|
|
||||||
return(namelen >= sizeof S_recover_innodb_tmp_table
|
|
||||||
&& !memcmp(name + namelen -
|
|
||||||
sizeof S_recover_innodb_tmp_table,
|
|
||||||
S_recover_innodb_tmp_table,
|
|
||||||
sizeof S_recover_innodb_tmp_table));
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
Determine if the given name is a name reserved for MySQL system tables. */
|
Determine if the given name is a name reserved for MySQL system tables. */
|
||||||
static
|
static
|
||||||
@@ -550,7 +529,7 @@ handle_new_error:
|
|||||||
"InnoDB: tables and recreate the whole InnoDB tablespace.\n"
|
"InnoDB: tables and recreate the whole InnoDB tablespace.\n"
|
||||||
"InnoDB: If the mysqld server crashes after the startup or when\n"
|
"InnoDB: If the mysqld server crashes after the startup or when\n"
|
||||||
"InnoDB: you dump the tables, look at\n"
|
"InnoDB: you dump the tables, look at\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html"
|
||||||
" for help.\n", stderr);
|
" for help.\n", stderr);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -1083,7 +1062,7 @@ row_insert_for_mysql(
|
|||||||
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
||||||
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
||||||
"InnoDB: Look from\n"
|
"InnoDB: Look from\n"
|
||||||
"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"InnoDB: how you can resolve the problem.\n",
|
"InnoDB: how you can resolve the problem.\n",
|
||||||
prebuilt->table->name);
|
prebuilt->table->name);
|
||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
@@ -1319,7 +1298,7 @@ row_update_for_mysql(
|
|||||||
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
||||||
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
||||||
"InnoDB: Look from\n"
|
"InnoDB: Look from\n"
|
||||||
"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"InnoDB: how you can resolve the problem.\n",
|
"InnoDB: how you can resolve the problem.\n",
|
||||||
prebuilt->table->name);
|
prebuilt->table->name);
|
||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
@@ -1659,48 +1638,6 @@ row_get_mysql_key_number_for_index(
|
|||||||
return(i);
|
return(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
Recovers an orphaned tmp table inside InnoDB by renaming it. In the table
|
|
||||||
name #sql becomes rsql, and "_recover_innodb_tmp_table" is catenated to
|
|
||||||
the end of name. table->name should be of the form
|
|
||||||
"dbname/rsql..._recover_innodb_tmp_table". This renames a table whose
|
|
||||||
name is "#sql..." */
|
|
||||||
static
|
|
||||||
int
|
|
||||||
row_mysql_recover_tmp_table(
|
|
||||||
/*========================*/
|
|
||||||
/* out: error code or DB_SUCCESS */
|
|
||||||
dict_table_t* table, /* in: table definition */
|
|
||||||
trx_t* trx) /* in: transaction handle */
|
|
||||||
{
|
|
||||||
const char* ptr = strstr(table->name, "/rsql");
|
|
||||||
|
|
||||||
if (!ptr) {
|
|
||||||
/* table name does not begin with "/rsql" */
|
|
||||||
dict_mem_table_free(table);
|
|
||||||
trx_commit_for_mysql(trx);
|
|
||||||
|
|
||||||
return(DB_ERROR);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int status;
|
|
||||||
int namelen = (int) strlen(table->name);
|
|
||||||
char* old_name = mem_strdupl(table->name, namelen);
|
|
||||||
/* replace "rsql" with "#sql" */
|
|
||||||
old_name[ptr - table->name + 1] = '#';
|
|
||||||
/* remove "_recover_innodb_tmp_table" suffix */
|
|
||||||
ut_ad(namelen > (int) sizeof S_recover_innodb_tmp_table);
|
|
||||||
ut_ad(!strcmp(old_name + namelen + 1 -
|
|
||||||
sizeof S_recover_innodb_tmp_table,
|
|
||||||
S_recover_innodb_tmp_table));
|
|
||||||
old_name[namelen + 1 - sizeof S_recover_innodb_tmp_table] = 0;
|
|
||||||
status = row_rename_table_for_mysql(old_name,
|
|
||||||
table->name, trx);
|
|
||||||
mem_free(old_name);
|
|
||||||
return(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Locks the data dictionary in shared mode from modifications, for performing
|
Locks the data dictionary in shared mode from modifications, for performing
|
||||||
foreign key check, rollback, or other operation invisible to MySQL. */
|
foreign key check, rollback, or other operation invisible to MySQL. */
|
||||||
@@ -1845,18 +1782,6 @@ row_create_table_for_mysql(
|
|||||||
|
|
||||||
trx_start_if_not_started(trx);
|
trx_start_if_not_started(trx);
|
||||||
|
|
||||||
if (row_mysql_is_recovered_tmp_table(table->name)) {
|
|
||||||
|
|
||||||
/* MySQL prevents accessing of tables whose name begins
|
|
||||||
with #sql, that is temporary tables. If mysqld crashes in
|
|
||||||
the middle of an ALTER TABLE, we may get an orphaned
|
|
||||||
#sql-table in the tablespace. We have here a special
|
|
||||||
mechanism to recover such tables by renaming them to
|
|
||||||
rsql... */
|
|
||||||
|
|
||||||
return(row_mysql_recover_tmp_table(table, trx));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The table name is prefixed with the database name and a '/'.
|
/* The table name is prefixed with the database name and a '/'.
|
||||||
Certain table names starting with 'innodb_' have their special
|
Certain table names starting with 'innodb_' have their special
|
||||||
meaning regardless of the database name. Thus, we need to
|
meaning regardless of the database name. Thus, we need to
|
||||||
@@ -1968,8 +1893,8 @@ row_create_table_for_mysql(
|
|||||||
"InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n"
|
"InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n"
|
||||||
"InnoDB: succeed.\n"
|
"InnoDB: succeed.\n"
|
||||||
"InnoDB: You can look for further help from\n"
|
"InnoDB: You can look for further help from\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"InnoDB_troubleshooting_datadict.html\n", stderr);
|
stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We may also get err == DB_ERROR if the .ibd file for the
|
/* We may also get err == DB_ERROR if the .ibd file for the
|
||||||
@@ -2063,11 +1988,6 @@ row_create_index_for_mysql(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row_mysql_is_recovered_tmp_table(index->table_name)) {
|
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
heap = mem_heap_create(512);
|
heap = mem_heap_create(512);
|
||||||
|
|
||||||
trx->dict_operation = TRUE;
|
trx->dict_operation = TRUE;
|
||||||
@@ -2142,11 +2062,6 @@ row_table_add_foreign_constraints(
|
|||||||
|
|
||||||
trx_start_if_not_started(trx);
|
trx_start_if_not_started(trx);
|
||||||
|
|
||||||
if (row_mysql_is_recovered_tmp_table(name)) {
|
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
trx->dict_operation = TRUE;
|
trx->dict_operation = TRUE;
|
||||||
|
|
||||||
err = dict_create_foreign_constraints(trx, sql_string, name,
|
err = dict_create_foreign_constraints(trx, sql_string, name,
|
||||||
@@ -3054,8 +2969,8 @@ row_drop_table_for_mysql(
|
|||||||
"InnoDB: Have you copied the .frm file of the table to the\n"
|
"InnoDB: Have you copied the .frm file of the table to the\n"
|
||||||
"InnoDB: MySQL database directory from another database?\n"
|
"InnoDB: MySQL database directory from another database?\n"
|
||||||
"InnoDB: You can look for further help from\n"
|
"InnoDB: You can look for further help from\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"InnoDB_troubleshooting_datadict.html\n", stderr);
|
stderr);
|
||||||
goto funct_exit;
|
goto funct_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3495,7 +3410,6 @@ row_rename_table_for_mysql(
|
|||||||
mem_heap_t* heap = NULL;
|
mem_heap_t* heap = NULL;
|
||||||
const char** constraints_to_drop = NULL;
|
const char** constraints_to_drop = NULL;
|
||||||
ulint n_constraints_to_drop = 0;
|
ulint n_constraints_to_drop = 0;
|
||||||
ibool recovering_temp_table = FALSE;
|
|
||||||
ibool old_is_tmp, new_is_tmp;
|
ibool old_is_tmp, new_is_tmp;
|
||||||
pars_info_t* info = NULL;
|
pars_info_t* info = NULL;
|
||||||
|
|
||||||
@@ -3533,15 +3447,10 @@ row_rename_table_for_mysql(
|
|||||||
old_is_tmp = row_is_mysql_tmp_table_name(old_name);
|
old_is_tmp = row_is_mysql_tmp_table_name(old_name);
|
||||||
new_is_tmp = row_is_mysql_tmp_table_name(new_name);
|
new_is_tmp = row_is_mysql_tmp_table_name(new_name);
|
||||||
|
|
||||||
if (row_mysql_is_recovered_tmp_table(new_name)) {
|
|
||||||
|
|
||||||
recovering_temp_table = TRUE;
|
|
||||||
} else {
|
|
||||||
/* Serialize data dictionary operations with dictionary mutex:
|
/* Serialize data dictionary operations with dictionary mutex:
|
||||||
no deadlocks can occur then in these operations */
|
no deadlocks can occur then in these operations */
|
||||||
|
|
||||||
row_mysql_lock_data_dictionary(trx);
|
row_mysql_lock_data_dictionary(trx);
|
||||||
}
|
|
||||||
|
|
||||||
table = dict_table_get_low(old_name);
|
table = dict_table_get_low(old_name);
|
||||||
|
|
||||||
@@ -3556,8 +3465,8 @@ row_rename_table_for_mysql(
|
|||||||
"InnoDB: Have you copied the .frm file of the table to the\n"
|
"InnoDB: Have you copied the .frm file of the table to the\n"
|
||||||
"InnoDB: MySQL database directory from another database?\n"
|
"InnoDB: MySQL database directory from another database?\n"
|
||||||
"InnoDB: You can look for further help from\n"
|
"InnoDB: You can look for further help from\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"InnoDB_troubleshooting_datadict.html\n", stderr);
|
stderr);
|
||||||
goto funct_exit;
|
goto funct_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3570,8 +3479,8 @@ row_rename_table_for_mysql(
|
|||||||
fputs(
|
fputs(
|
||||||
" does not have an .ibd file in the database directory.\n"
|
" does not have an .ibd file in the database directory.\n"
|
||||||
"InnoDB: You can look for further help from\n"
|
"InnoDB: You can look for further help from\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
|
||||||
"InnoDB_troubleshooting_datadict.html\n", stderr);
|
stderr);
|
||||||
goto funct_exit;
|
goto funct_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3719,8 +3628,7 @@ end:
|
|||||||
fputs(" to it.\n"
|
fputs(" to it.\n"
|
||||||
"InnoDB: Have you deleted the .frm file and not used DROP TABLE?\n"
|
"InnoDB: Have you deleted the .frm file and not used DROP TABLE?\n"
|
||||||
"InnoDB: You can look for further help from\n"
|
"InnoDB: You can look for further help from\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"InnoDB_troubleshooting_datadict.html\n"
|
|
||||||
"InnoDB: If table ", stderr);
|
"InnoDB: If table ", stderr);
|
||||||
ut_print_name(stderr, trx, TRUE, new_name);
|
ut_print_name(stderr, trx, TRUE, new_name);
|
||||||
fputs(
|
fputs(
|
||||||
@@ -3748,8 +3656,8 @@ end:
|
|||||||
trx_general_rollback_for_mysql(trx, FALSE, NULL);
|
trx_general_rollback_for_mysql(trx, FALSE, NULL);
|
||||||
trx->error_state = DB_SUCCESS;
|
trx->error_state = DB_SUCCESS;
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
fputs(" InnoDB: Error in table rename, cannot rename ",
|
fputs(
|
||||||
stderr);
|
" InnoDB: Error in table rename, cannot rename ", stderr);
|
||||||
ut_print_name(stderr, trx, TRUE, old_name);
|
ut_print_name(stderr, trx, TRUE, old_name);
|
||||||
fputs(" to ", stderr);
|
fputs(" to ", stderr);
|
||||||
ut_print_name(stderr, trx, TRUE, new_name);
|
ut_print_name(stderr, trx, TRUE, new_name);
|
||||||
@@ -3797,10 +3705,7 @@ end:
|
|||||||
|
|
||||||
funct_exit:
|
funct_exit:
|
||||||
trx_commit_for_mysql(trx);
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
if (!recovering_temp_table) {
|
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
}
|
|
||||||
|
|
||||||
if (UNIV_LIKELY_NULL(heap)) {
|
if (UNIV_LIKELY_NULL(heap)) {
|
||||||
mem_heap_free(heap);
|
mem_heap_free(heap);
|
||||||
@@ -3968,7 +3873,7 @@ row_check_table_for_mysql(
|
|||||||
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
||||||
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
||||||
"InnoDB: Look from\n"
|
"InnoDB: Look from\n"
|
||||||
"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"InnoDB: how you can resolve the problem.\n",
|
"InnoDB: how you can resolve the problem.\n",
|
||||||
prebuilt->table->name);
|
prebuilt->table->name);
|
||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
|
|||||||
@@ -3237,7 +3237,7 @@ row_search_for_mysql(
|
|||||||
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
"InnoDB: Have you deleted the .ibd file from the database directory under\n"
|
||||||
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
"InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
|
||||||
"InnoDB: Look from\n"
|
"InnoDB: Look from\n"
|
||||||
"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
|
||||||
"InnoDB: how you can resolve the problem.\n",
|
"InnoDB: how you can resolve the problem.\n",
|
||||||
prebuilt->table->name);
|
prebuilt->table->name);
|
||||||
|
|
||||||
|
|||||||
2
setup.sh
2
setup.sh
@@ -35,7 +35,7 @@ do
|
|||||||
ln -s ../../../innodb/"$dir"* .
|
ln -s ../../../innodb/"$dir"* .
|
||||||
cd ..
|
cd ..
|
||||||
done
|
done
|
||||||
for file in configure.in Makefile.am
|
for file in configure.in Makefile.am CMakeLists.txt
|
||||||
do
|
do
|
||||||
ln -s ../../innodb/"$file" .
|
ln -s ../../innodb/"$file" .
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ ulint srv_n_log_groups = ULINT_MAX;
|
|||||||
ulint srv_n_log_files = ULINT_MAX;
|
ulint srv_n_log_files = ULINT_MAX;
|
||||||
ulint srv_log_file_size = ULINT_MAX; /* size in database pages */
|
ulint srv_log_file_size = ULINT_MAX; /* size in database pages */
|
||||||
ulint srv_log_buffer_size = ULINT_MAX; /* size in database pages */
|
ulint srv_log_buffer_size = ULINT_MAX; /* size in database pages */
|
||||||
ulint srv_flush_log_at_trx_commit = 1;
|
ulong srv_flush_log_at_trx_commit = 1;
|
||||||
|
|
||||||
byte srv_latin1_ordering[256] /* The sort order table of the latin1
|
byte srv_latin1_ordering[256] /* The sort order table of the latin1
|
||||||
character set. The following table is
|
character set. The following table is
|
||||||
|
|||||||
@@ -1685,7 +1685,7 @@ NetWare. */
|
|||||||
"InnoDB: You have now successfully upgraded to the multiple tablespaces\n"
|
"InnoDB: You have now successfully upgraded to the multiple tablespaces\n"
|
||||||
"InnoDB: format. You should NOT DOWNGRADE to an earlier version of\n"
|
"InnoDB: format. You should NOT DOWNGRADE to an earlier version of\n"
|
||||||
"InnoDB: InnoDB! But if you absolutely need to downgrade, see\n"
|
"InnoDB: InnoDB! But if you absolutely need to downgrade, see\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Multiple_tablespaces.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/multiple-tablespaces.html\n"
|
||||||
"InnoDB: for instructions.\n");
|
"InnoDB: for instructions.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ ut_dbg_assertion_failed(
|
|||||||
"InnoDB: If you get repeated assertion failures or crashes, even\n"
|
"InnoDB: If you get repeated assertion failures or crashes, even\n"
|
||||||
"InnoDB: immediately after the mysqld startup, there may be\n"
|
"InnoDB: immediately after the mysqld startup, there may be\n"
|
||||||
"InnoDB: corruption in the InnoDB tablespace. Please refer to\n"
|
"InnoDB: corruption in the InnoDB tablespace. Please refer to\n"
|
||||||
"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
|
"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
|
||||||
"InnoDB: about forcing recovery.\n", stderr);
|
"InnoDB: about forcing recovery.\n", stderr);
|
||||||
#if defined(UNIV_SYNC_DEBUG) || !defined(UT_DBG_USE_ABORT)
|
#if defined(UNIV_SYNC_DEBUG) || !defined(UT_DBG_USE_ABORT)
|
||||||
ut_dbg_stop_threads = TRUE;
|
ut_dbg_stop_threads = TRUE;
|
||||||
|
|||||||
Reference in New Issue
Block a user