From 051a5461cc253372e64727a55341bcc512b9e3eb Mon Sep 17 00:00:00 2001 From: "vva@eagle.mysql.r18.ru" <> Date: Thu, 8 Jul 2004 21:25:17 +0500 Subject: [PATCH 1/2] fixed Bug #4378 "create database IF NOT EXISTS thing" returns an error --- sql/sql_db.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 9db2198268a..e3f892891f1 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -171,6 +171,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, int error = 0; MY_STAT stat_info; uint create_options = create_info ? create_info->options : 0; + uint path_len; DBUG_ENTER("mysql_create_db"); VOID(pthread_mutex_lock(&LOCK_mysql_create_db)); @@ -184,7 +185,8 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, /* Check directory */ strxmov(path, mysql_data_home, "/", db, NullS); - unpack_dirname(path,path); // Convert if not unix + path_len= unpack_dirname(path,path); // Convert if not unix + path[path_len-1]= 0; // Remove last '/' from path if (my_stat(path,&stat_info,MYF(0))) { @@ -203,7 +205,6 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, my_error(EE_STAT, MYF(0),path,my_errno); goto exit; } - strend(path)[-1]=0; // Remove last '/' from path if (my_mkdir(path,0777,MYF(0)) < 0) { my_error(ER_CANT_CREATE_DB,MYF(0),db,my_errno); From 6782982254ebe3fa1c085a127bac3b1f36c87d41 Mon Sep 17 00:00:00 2001 From: "vva@eagle.mysql.r18.ru" <> Date: Fri, 9 Jul 2004 20:39:50 +0500 Subject: [PATCH 2/2] added an optimization in mysql_create_db (sql_db.cc) as after effect of fix for Bug #4378 '"create database IF NOT EXISTS thing" returns an error' (avoided an unpack_dirname and changed strcat into strmake) --- sql/sql_db.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_db.cc b/sql/sql_db.cc index e3f892891f1..ac8ba8611dc 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -213,8 +213,8 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, } } - unpack_dirname(path, path); - strcat(path,MY_DB_OPT_FILE); + path[path_len-1]= FN_LIBCHAR; + strmake(path+path_len, MY_DB_OPT_FILE, sizeof(path)-path_len-1); if (write_db_opt(thd, path, create_info)) { /*