1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Bug#32430:'show innodb status' causes errors Invalid (old?) table

or database name in logs

Problem was that InnoDB used filenam_to_tablename,
which do not handle partitions (due to the '#' in
the filename).

Solution is to add a new function for explaining
what the filename means: explain_filename.
It expands the database, table, partition and subpartition
parts and uses errmsg.txt for localization.
It also converts from my_charset_filename to system_charset_info
(i.e. human readable form for non ascii characters).
  http://lists.mysql.com/commits/70370

2773 Mattias Jonsson	2009-03-25

It has three different output styles.

NOTE: This is the server side ONLY part (introducing the explain_filename
function). There will be a patch for InnoDB using this function to solve
the bug.

sql/mysql_priv.h:
  Bug#32430:'show innodb status' causes errors Invalid (old?) table
  or database name in logs
  
  Added EXPLAIN_FILENAME_MAX_EXTRA_LENGTH, enum_explain_filename_mode
  and explain_filename.
sql/share/errmsg.txt:
  Bug#32430:'show innodb status' causes errors Invalid (old?) table
  or database name in logs
  
  Added localization names for Database, Table, Partition, Subpartition
  Temporary and Renamed.
sql/sql_table.cc:
  Bug#32430:'show innodb status' causes errors Invalid (old?) table
  or database name in logs
  
  Added explain_filename function for giving better information
  to the user about a specific table/partitions file.
This commit is contained in:
Mattias Jonsson
2009-06-02 11:07:17 +02:00
parent 094ddf2266
commit 4fb78ee4c3
3 changed files with 259 additions and 0 deletions

View File

@ -2253,6 +2253,16 @@ char *fn_rext(char *name);
#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS
uint strconvert(CHARSET_INFO *from_cs, const char *from,
CHARSET_INFO *to_cs, char *to, uint to_length, uint *errors);
/* depends on errmsg.txt Database `db`, Table `t` ... */
#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63
enum enum_explain_filename_mode
{
EXPLAIN_ALL_VERBOSE= 0,
EXPLAIN_PARTITIONS_VERBOSE,
EXPLAIN_PARTITIONS_AS_COMMENT
};
uint explain_filename(const char *from, char *to, uint to_length,
enum_explain_filename_mode explain_mode);
uint filename_to_tablename(const char *from, char *to, uint to_length);
uint tablename_to_filename(const char *from, char *to, uint to_length);
uint check_n_cut_mysql50_prefix(const char *from, char *to, uint to_length);