1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Many files:

Merge InnoDB-3.23.50


innobase/btr/btr0btr.c:
  Merge InnoDB-3.23.50
innobase/btr/btr0cur.c:
  Merge InnoDB-3.23.50
innobase/btr/btr0sea.c:
  Merge InnoDB-3.23.50
innobase/buf/buf0buf.c:
  Merge InnoDB-3.23.50
innobase/buf/buf0flu.c:
  Merge InnoDB-3.23.50
innobase/dict/dict0dict.c:
  Merge InnoDB-3.23.50
innobase/dict/dict0load.c:
  Merge InnoDB-3.23.50
innobase/fil/fil0fil.c:
  Merge InnoDB-3.23.50
innobase/fsp/fsp0fsp.c:
  Merge InnoDB-3.23.50
innobase/include/buf0flu.h:
  Merge InnoDB-3.23.50
innobase/include/dict0dict.h:
  Merge InnoDB-3.23.50
innobase/include/fil0fil.h:
  Merge InnoDB-3.23.50
innobase/include/fsp0fsp.h:
  Merge InnoDB-3.23.50
innobase/include/log0log.h:
  Merge InnoDB-3.23.50
innobase/include/log0recv.h:
  Merge InnoDB-3.23.50
innobase/include/mem0mem.h:
  Merge InnoDB-3.23.50
innobase/include/os0file.h:
  Merge InnoDB-3.23.50
innobase/include/row0mysql.h:
  Merge InnoDB-3.23.50
innobase/include/srv0srv.h:
  Merge InnoDB-3.23.50
innobase/include/srv0start.h:
  Merge InnoDB-3.23.50
innobase/include/trx0sys.h:
  Merge InnoDB-3.23.50
innobase/include/ut0byte.h:
  Merge InnoDB-3.23.50
innobase/include/ut0rnd.h:
  Merge InnoDB-3.23.50
innobase/include/ut0ut.h:
  Merge InnoDB-3.23.50
innobase/log/log0log.c:
  Merge InnoDB-3.23.50
innobase/log/log0recv.c:
  Merge InnoDB-3.23.50
innobase/mem/mem0mem.c:
  Merge InnoDB-3.23.50
innobase/os/os0file.c:
  Merge InnoDB-3.23.50
innobase/rem/rem0cmp.c:
  Merge InnoDB-3.23.50
innobase/row/row0ins.c:
  Merge InnoDB-3.23.50
innobase/row/row0mysql.c:
  Merge InnoDB-3.23.50
innobase/row/row0sel.c:
  Merge InnoDB-3.23.50
innobase/row/row0upd.c:
  Merge InnoDB-3.23.50
innobase/srv/srv0srv.c:
  Merge InnoDB-3.23.50
innobase/srv/srv0start.c:
  Merge InnoDB-3.23.50
innobase/trx/trx0sys.c:
  Merge InnoDB-3.23.50
innobase/ut/ut0mem.c:
  Merge InnoDB-3.23.50
innobase/ut/ut0ut.c:
  Merge InnoDB-3.23.50
sql/ha_innobase.cc:
  Merge InnoDB-3.23.50
sql/ha_innobase.h:
  Merge InnoDB-3.23.50
This commit is contained in:
unknown
2002-03-21 18:03:09 +02:00
parent 838c6427b2
commit d3c0752b6a
40 changed files with 2561 additions and 660 deletions

View File

@ -1881,6 +1881,28 @@ loop:
return(err);
}
/*************************************************************************
Checks if a table name contains the string "/#sql" which denotes temporary
tables in MySQL. */
static
ibool
row_is_mysql_tmp_table_name(
/*========================*/
/* out: TRUE if temporary table */
char* name) /* in: table name in the form 'database/tablename' */
{
ulint i;
for (i = 0; i <= ut_strlen(name) - 5; i++) {
if (ut_memcmp(name + i, "/#sql", 5) == 0) {
return(TRUE);
}
}
return(FALSE);
}
/*************************************************************************
Renames a table for MySQL. */
@ -1944,16 +1966,27 @@ row_rename_table_for_mysql(
str2 =
"';\nold_table_name := '";
str3 =
"';\n"
"UPDATE SYS_TABLES SET NAME = new_table_name\n"
"WHERE NAME = old_table_name;\n"
"UPDATE SYS_FOREIGN SET FOR_NAME = new_table_name\n"
"WHERE FOR_NAME = old_table_name;\n"
"UPDATE SYS_FOREIGN SET REF_NAME = new_table_name\n"
"WHERE REF_NAME = old_table_name;\n"
"COMMIT WORK;\n"
"END;\n";
if (row_is_mysql_tmp_table_name(new_name)) {
/* We want to preserve the original foreign key
constraint definitions despite the name change */
str3 =
"';\n"
"UPDATE SYS_TABLES SET NAME = new_table_name\n"
"WHERE NAME = old_table_name;\n"
"END;\n";
} else {
str3 =
"';\n"
"UPDATE SYS_TABLES SET NAME = new_table_name\n"
"WHERE NAME = old_table_name;\n"
"UPDATE SYS_FOREIGN SET FOR_NAME = new_table_name\n"
"WHERE FOR_NAME = old_table_name;\n"
"UPDATE SYS_FOREIGN SET REF_NAME = new_table_name\n"
"WHERE REF_NAME = old_table_name;\n"
"END;\n";
}
len = ut_strlen(str1);
@ -2028,7 +2061,32 @@ row_rename_table_for_mysql(
trx_general_rollback_for_mysql(trx, FALSE, NULL);
trx->error_state = DB_SUCCESS;
} else {
ut_a(dict_table_rename_in_cache(table, new_name));
ut_a(dict_table_rename_in_cache(table, new_name,
!row_is_mysql_tmp_table_name(new_name)));
if (row_is_mysql_tmp_table_name(old_name)) {
err = dict_load_foreigns(new_name);
if (err != DB_SUCCESS) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: in ALTER TABLE table %s\n"
"InnoDB: has or is referenced in foreign key constraints\n"
"InnoDB: which are not compatible with the new table definition.\n",
new_name);
ut_a(dict_table_rename_in_cache(table,
old_name, FALSE));
trx->error_state = DB_SUCCESS;
trx_general_rollback_for_mysql(trx, FALSE,
NULL);
trx->error_state = DB_SUCCESS;
}
}
}
funct_exit:
mutex_exit(&(dict_sys->mutex));