Commit fc7ce5d1 authored by Satya B's avatar Satya B

Applying InnoDB Plugin 1.0.6 snapshot, part 8. Fixes BUG#48782

applied revisions: r6185, r6186, r6189, r6194

r6185 - only code changes incorporated, changesets which change
        innodb tests in the main mysql suite are discarded

r61889 - Fixes BUG#48782

Detailed revision comments:

r6185 | marko | 2009-11-17 16:44:20 +0200 (Tue, 17 Nov 2009) | 16 lines
branches/zip: Report duplicate table names
to the client connection, not to the error log.  This change will allow
innodb-index.test to be re-enabled.  It was previously disabled, because
mysql-test-run does not like output in the error log.

row_create_table_for_mysql(): Do not output anything to the error log
when reporting DB_DUPLICATE_KEY.  Let the caller report the error.
Add a TODO comment that the dict_table_t object is apparently not freed
when an error occurs.

create_table_def(): Convert InnoDB table names to the character set
of the client connection for reporting.  Use my_error(ER_WRONG_COLUMN_NAME)
for reporting reserved column names.  Report my_error(ER_TABLE_EXISTS_ERROR)
when row_create_table_for_mysql() returns DB_DUPLICATE_KEY.

rb://206
r6186 | vasil | 2009-11-17 16:48:14 +0200 (Tue, 17 Nov 2009) | 4 lines
branches/zip:

Add ChangeLog entry for r6185.

r6189 | marko | 2009-11-18 11:36:18 +0200 (Wed, 18 Nov 2009) | 5 lines
branches/zip: ha_innobase::add_index(): When creating the primary key
and the table is being locked by another transaction,
do not attempt to drop the table. (Bug #48782)

Approved by Sunny Bains over IM
r6194 | vasil | 2009-11-19 09:24:45 +0200 (Thu, 19 Nov 2009) | 5 lines
branches/zip:

Increment version number from 1.0.5 to 1.0.6 since 1.0.5 was just released
by MySQL and we will soon release 1.0.6.
parent a010cce8
......@@ -522,6 +522,8 @@ sub collect_one_suite($)
next if ($test->{'name'} eq 'main.innodb_bug46000');
# Fails with innodb plugin
next if ($test->{'name'} eq 'main.innodb-autoinc');
# Fails with innodb plugin: r6185 Testcases changes not included
next if ($test->{'name'} eq 'main.innodb_bug44369');
# Copy test options
my $new_test= My::Test->new();
while (my ($key, $value) = each(%$test))
......
2009-11-18 The InnoDB Team
* handler/handler0alter.cc:
Fix Bug#48782 On lock wait timeout, CREATE INDEX (creating primary key)
attempts DROP TABLE
2009-11-17 The InnoDB Team
* handler/ha_innodb.cc, mysql-test/innodb.result,
mysql-test/innodb.test, mysql-test/innodb_bug44369.result,
mysql-test/innodb_bug44369.test, mysql-test/patches/innodb-index.diff,
row/row0mysql.c:
Report duplicate table names to the client connection, not to the
error log.
2009-11-12 The InnoDB Team
* handler/ha_innodb.cc, include/db0err.h, row/row0merge.c,
......
......@@ -5731,17 +5731,8 @@ create_table_def(
/* First check whether the column to be added has a
system reserved name. */
if (dict_col_name_is_reserved(field->field_name)){
push_warning_printf(
(THD*) trx->mysql_thd,
MYSQL_ERROR::WARN_LEVEL_WARN,
ER_CANT_CREATE_TABLE,
"Error creating table '%s' with "
"column name '%s'. '%s' is a "
"reserved name. Please try to "
"re-create the table with a "
"different column name.",
table->name, (char*) field->field_name,
(char*) field->field_name);
my_error(ER_WRONG_COLUMN_NAME, MYF(0),
field->field_name);
dict_mem_table_free(table);
trx_commit_for_mysql(trx);
......@@ -5763,6 +5754,14 @@ create_table_def(
error = row_create_table_for_mysql(table, trx);
if (error == DB_DUPLICATE_KEY) {
char buf[100];
innobase_convert_identifier(buf, sizeof buf,
table_name, strlen(table_name),
trx->mysql_thd, TRUE);
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), buf);
}
error_ret:
error = convert_error_code_to_mysql(error, flags, NULL);
......
......@@ -882,7 +882,9 @@ ha_innobase::add_index(
/* fall through */
default:
if (new_primary) {
row_merge_drop_table(trx, indexed_table);
if (indexed_table != innodb_table) {
row_merge_drop_table(trx, indexed_table);
}
} else {
if (!dict_locked) {
row_mysql_lock_data_dictionary(trx);
......
......@@ -46,7 +46,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 1
#define INNODB_VERSION_MINOR 0
#define INNODB_VERSION_BUGFIX 5
#define INNODB_VERSION_BUGFIX 6
/* The following is the InnoDB version as shown in
SELECT plugin_version FROM information_schema.plugins;
......
......@@ -1880,6 +1880,8 @@ row_create_table_for_mysql(
if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
trx->error_state = DB_SUCCESS;
trx_general_rollback_for_mysql(trx, NULL);
/* TO DO: free table? The code below will dereference
table->name, though. */
}
switch (err) {
......@@ -1898,31 +1900,6 @@ row_create_table_for_mysql(
break;
case DB_DUPLICATE_KEY:
ut_print_timestamp(stderr);
fputs(" InnoDB: Error: table ", stderr);
ut_print_name(stderr, trx, TRUE, table->name);
fputs(" already exists in InnoDB internal\n"
"InnoDB: data dictionary. Have you deleted"
" the .frm file\n"
"InnoDB: and not used DROP TABLE?"
" Have you used DROP DATABASE\n"
"InnoDB: for InnoDB tables in"
" MySQL version <= 3.23.43?\n"
"InnoDB: See the Restrictions section"
" of the InnoDB manual.\n"
"InnoDB: You can drop the orphaned table"
" inside InnoDB by\n"
"InnoDB: creating an InnoDB table with"
" the same name in another\n"
"InnoDB: database and copying the .frm file"
" to the current database.\n"
"InnoDB: Then MySQL thinks the table exists,"
" and DROP TABLE will\n"
"InnoDB: succeed.\n"
"InnoDB: You can look for further help from\n"
"InnoDB: " REFMAN "innodb-troubleshooting.html\n",
stderr);
/* We may also get err == DB_ERROR if the .ibd file for the
table already exists */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment