1
0
mirror of https://github.com/MariaDB/server.git synced 2025-09-02 09:41:40 +03:00

Merge branch '5.5' into 10.0

This commit is contained in:
Vicențiu Ciorbaru
2017-03-03 01:37:54 +02:00
154 changed files with 3475 additions and 1793 deletions

View File

@@ -1909,12 +1909,12 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
#endif
case SCH_COLUMNS:
case SCH_STATISTICS:
{
#ifdef DONT_ALLOW_SHOW_COMMANDS
my_message(ER_NOT_ALLOWED_COMMAND,
ER(ER_NOT_ALLOWED_COMMAND), MYF(0)); /* purecov: inspected */
DBUG_RETURN(1);
#else
{
DBUG_ASSERT(table_ident);
TABLE_LIST **query_tables_last= lex->query_tables_last;
schema_select_lex= new SELECT_LEX();
@@ -6487,7 +6487,7 @@ void mysql_init_multi_delete(LEX *lex)
/*
When you modify mysql_parse(), you may need to mofify
When you modify mysql_parse(), you may need to modify
mysql_test_parse_for_slave() in this same file.
*/
@@ -8465,48 +8465,24 @@ bool check_ident_length(LEX_STRING *ident)
}
C_MODE_START
/*
Check if path does not contain mysql data home directory
SYNOPSIS
test_if_data_home_dir()
dir directory
path_starts_from_data_home_dir()
dir directory, with all symlinks resolved
RETURN VALUES
0 ok
1 error ; Given path contains data directory
*/
extern "C" {
int test_if_data_home_dir(const char *dir)
int path_starts_from_data_home_dir(const char *path)
{
char path[FN_REFLEN];
int dir_len;
DBUG_ENTER("test_if_data_home_dir");
int dir_len= strlen(path);
DBUG_ENTER("path_starts_from_data_home_dir");
if (!dir)
DBUG_RETURN(0);
/*
data_file_name and index_file_name include the table name without
extension. Mostly this does not refer to an existing file. When
comparing data_file_name or index_file_name against the data
directory, we try to resolve all symbolic links. On some systems,
we use realpath(3) for the resolution. This returns ENOENT if the
resolved path does not refer to an existing file. my_realpath()
does then copy the requested path verbatim, without symlink
resolution. Thereafter the comparison can fail even if the
requested path is within the data directory. E.g. if symlinks to
another file system are used. To make realpath(3) return the
resolved path, we strip the table name and compare the directory
path only. If the directory doesn't exist either, table creation
will fail anyway.
*/
(void) fn_format(path, dir, "", "",
(MY_RETURN_REAL_PATH|MY_RESOLVE_SYMLINKS));
dir_len= strlen(path);
if (mysql_unpacked_real_data_home_len<= dir_len)
{
if (dir_len > mysql_unpacked_real_data_home_len &&
@@ -8534,7 +8510,31 @@ int test_if_data_home_dir(const char *dir)
DBUG_RETURN(0);
}
C_MODE_END
}
/*
Check if path does not contain mysql data home directory
SYNOPSIS
test_if_data_home_dir()
dir directory
RETURN VALUES
0 ok
1 error ; Given path contains data directory
*/
int test_if_data_home_dir(const char *dir)
{
char path[FN_REFLEN];
DBUG_ENTER("test_if_data_home_dir");
if (!dir)
DBUG_RETURN(0);
(void) fn_format(path, dir, "", "", MY_RETURN_REAL_PATH);
DBUG_RETURN(path_starts_from_data_home_dir(path));
}
int error_if_data_home_dir(const char *path, const char *what)