Commit dba7e1e8 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.1 into 10.2

parents 838a1046 c43a6666
...@@ -406,8 +406,8 @@ static int register_service() ...@@ -406,8 +406,8 @@ static int register_service()
static void clean_directory(const char *dir) static void clean_directory(const char *dir)
{ {
char dir2[MAX_PATH+2]; char dir2[MAX_PATH + 4]= {};
*(strmake_buf(dir2, dir)+1)= 0; snprintf(dir2, MAX_PATH+2, "%s\\*", dir);
SHFILEOPSTRUCT fileop; SHFILEOPSTRUCT fileop;
fileop.hwnd= NULL; /* no status display */ fileop.hwnd= NULL; /* no status display */
...@@ -558,7 +558,7 @@ static int create_db_instance() ...@@ -558,7 +558,7 @@ static int create_db_instance()
DWORD cwd_len= MAX_PATH; DWORD cwd_len= MAX_PATH;
char cmdline[3*MAX_PATH]; char cmdline[3*MAX_PATH];
FILE *in; FILE *in;
bool cleanup_datadir= true; bool created_datadir= false;
DWORD last_error; DWORD last_error;
verbose("Running bootstrap"); verbose("Running bootstrap");
...@@ -567,7 +567,11 @@ static int create_db_instance() ...@@ -567,7 +567,11 @@ static int create_db_instance()
/* Create datadir and datadir/mysql, if they do not already exist. */ /* Create datadir and datadir/mysql, if they do not already exist. */
if (!CreateDirectory(opt_datadir, NULL) && (GetLastError() != ERROR_ALREADY_EXISTS)) if (CreateDirectory(opt_datadir, NULL))
{
created_datadir= true;
}
else if (GetLastError() != ERROR_ALREADY_EXISTS)
{ {
last_error = GetLastError(); last_error = GetLastError();
switch(last_error) switch(last_error)
...@@ -604,9 +608,11 @@ static int create_db_instance() ...@@ -604,9 +608,11 @@ static int create_db_instance()
} }
} }
if (PathIsDirectoryEmpty(opt_datadir)) if (!PathIsDirectoryEmpty(opt_datadir))
{ {
cleanup_datadir= false; fprintf(stderr,"ERROR : Data directory %s is not empty."
" Only new or empty existing directories are accepted for --datadir\n",opt_datadir);
exit(1);
} }
if (!CreateDirectory("mysql",NULL)) if (!CreateDirectory("mysql",NULL))
...@@ -735,10 +741,12 @@ static int create_db_instance() ...@@ -735,10 +741,12 @@ static int create_db_instance()
} }
end: end:
if (ret && cleanup_datadir) if (ret)
{ {
SetCurrentDirectory(cwd); SetCurrentDirectory(cwd);
clean_directory(opt_datadir); clean_directory(opt_datadir);
if (created_datadir)
RemoveDirectory(opt_datadir);
} }
return ret; return ret;
} }
...@@ -3610,7 +3610,11 @@ class THD :public Statement, ...@@ -3610,7 +3610,11 @@ class THD :public Statement,
bool is_bulk_op() const { return MY_TEST(bulk_param); } bool is_bulk_op() const { return MY_TEST(bulk_param); }
/// Returns Diagnostics-area for the current statement. /// Returns Diagnostics-area for the current statement.
Diagnostics_area *get_stmt_da() const Diagnostics_area *get_stmt_da()
{ return m_stmt_da; }
/// Returns Diagnostics-area for the current statement.
const Diagnostics_area *get_stmt_da() const
{ return m_stmt_da; } { return m_stmt_da; }
/// Sets Diagnostics-area for the current statement. /// Sets Diagnostics-area for the current statement.
......
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. /* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, MariaDB Copyright (c) 2009, 2020, MariaDB
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -5088,16 +5088,16 @@ bool store_schema_shemata(THD* thd, TABLE *table, LEX_STRING *db_name, ...@@ -5088,16 +5088,16 @@ bool store_schema_shemata(THD* thd, TABLE *table, LEX_STRING *db_name,
*/ */
static bool verify_database_directory_exists(const LEX_STRING &dbname) static bool verify_database_directory_exists(const LEX_STRING &dbname)
{ {
DBUG_ENTER("verity_database_exists"); DBUG_ENTER("verify_database_directory_exists");
char path[FN_REFLEN + 16]; char path[FN_REFLEN + 16];
uint path_len; uint path_len;
MY_STAT stat_info; MY_STAT stat_info;
if (!dbname.str[0]) if (!dbname.str[0])
DBUG_RETURN(true); // Empty database name: does not exits. DBUG_RETURN(true); // Empty database name: does not exist.
path_len= build_table_filename(path, sizeof(path) - 1, dbname.str, "", "", 0); path_len= build_table_filename(path, sizeof(path) - 1, dbname.str, "", "", 0);
path[path_len - 1]= 0; path[path_len - 1]= 0;
if (!mysql_file_stat(key_file_misc, path, &stat_info, MYF(0))) if (!mysql_file_stat(key_file_misc, path, &stat_info, MYF(0)))
DBUG_RETURN(true); // The database directory was not found: does not exists. DBUG_RETURN(true); // The database directory was not found: does not exist.
DBUG_RETURN(false); // The database directory was found. DBUG_RETURN(false); // The database directory was found.
} }
......
...@@ -150,10 +150,7 @@ int get_mysql_service_properties(const wchar_t *bin_path, ...@@ -150,10 +150,7 @@ int get_mysql_service_properties(const wchar_t *bin_path,
There are rare cases where service config does not have There are rare cases where service config does not have
--defaults-filein the binary parth . There services were registered with --defaults-filein the binary parth . There services were registered with
plain mysqld --install, the data directory is next to "bin" in this case. plain mysqld --install, the data directory is next to "bin" in this case.
Service name (second parameter) must be MySQL.
*/ */
if(wcscmp(args[1], L"MySQL") != 0)
goto end;
have_inifile= FALSE; have_inifile= FALSE;
} }
else if(numargs == 3) else if(numargs == 3)
...@@ -211,7 +208,7 @@ int get_mysql_service_properties(const wchar_t *bin_path, ...@@ -211,7 +208,7 @@ int get_mysql_service_properties(const wchar_t *bin_path,
} }
} }
if(!have_inifile) if(!have_inifile || props->datadir[0] == 0)
{ {
/* /*
Hard, although a rare case, we're guessing datadir and defaults-file. Hard, although a rare case, we're guessing datadir and defaults-file.
...@@ -235,22 +232,25 @@ int get_mysql_service_properties(const wchar_t *bin_path, ...@@ -235,22 +232,25 @@ int get_mysql_service_properties(const wchar_t *bin_path,
*p= 0; *p= 0;
} }
/* Look for my.ini, my.cnf in the install root */ if (!have_inifile)
sprintf_s(props->inifile, MAX_PATH, "%s\\my.ini", install_root);
if (GetFileAttributes(props->inifile) == INVALID_FILE_ATTRIBUTES)
{
sprintf_s(props->inifile, MAX_PATH, "%s\\my.cnf", install_root);
}
if (GetFileAttributes(props->inifile) != INVALID_FILE_ATTRIBUTES)
{
/* Ini file found, get datadir from there */
GetPrivateProfileString("mysqld", "datadir", NULL, props->datadir,
MAX_PATH, props->inifile);
}
else
{ {
/* No ini file */ /* Look for my.ini, my.cnf in the install root */
props->inifile[0]= 0; sprintf_s(props->inifile, MAX_PATH, "%s\\my.ini", install_root);
if (GetFileAttributes(props->inifile) == INVALID_FILE_ATTRIBUTES)
{
sprintf_s(props->inifile, MAX_PATH, "%s\\my.cnf", install_root);
}
if (GetFileAttributes(props->inifile) != INVALID_FILE_ATTRIBUTES)
{
/* Ini file found, get datadir from there */
GetPrivateProfileString("mysqld", "datadir", NULL, props->datadir,
MAX_PATH, props->inifile);
}
else
{
/* No ini file */
props->inifile[0]= 0;
}
} }
/* Try datadir in install directory.*/ /* Try datadir in install directory.*/
......
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