summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter@mysql.com <>2002-11-06 12:51:07 +0300
committerpeter@mysql.com <>2002-11-06 12:51:07 +0300
commit21066bde1ba1116b8bb0ceed61550f4df0979357 (patch)
tree63bca565bf8c542ea1e8741ea111991620faf3eb
parent8bcace70434836acfe66a6ad5ff93c7a7afdd1eb (diff)
parent8229d282f7767efe4c88294acdb65507fef4079e (diff)
downloadmariadb-git-21066bde1ba1116b8bb0ceed61550f4df0979357.tar.gz
Merge mysql.com:/home/pz/mysql/mysql-4.1-root
into mysql.com:/home/pz/mysql/mysql-4.1
-rw-r--r--client/mysqldump.c2
-rw-r--r--sql/mysql_priv.h2
-rw-r--r--sql/sql_db.cc17
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_yacc.yy13
5 files changed, 25 insertions, 11 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 04232474944..9470786705d 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -1252,7 +1252,7 @@ static int init_dumping(char *database)
MYSQL_ROW row;
MYSQL_RES *dbinfo;
- sprintf(qbuf,"SHOW CREATE DATABASE %s",database);
+ sprintf(qbuf,"SHOW CREATE DATABASE IF NOT EXISTS %s",database);
if (mysql_query(sock, qbuf) || !(dbinfo = mysql_store_result(sock)))
{
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index c10a79be729..d41fedf8630 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -497,7 +497,7 @@ int mysqld_show_logs(THD *thd);
void mysqld_list_fields(THD *thd,TABLE_LIST *table, const char *wild);
int mysqld_dump_create_info(THD *thd, TABLE *table, int fd = -1);
int mysqld_show_create(THD *thd, TABLE_LIST *table_list);
-int mysqld_show_create_db(THD *thd, const char *dbname);
+int mysqld_show_create_db(THD *thd, const char *dbname, HA_CREATE_INFO *create);
void mysqld_list_processes(THD *thd,const char *user,bool verbose);
int mysqld_show_status(THD *thd);
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 25a69f7e51b..b80e25c9f40 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -597,7 +597,7 @@ bool mysql_change_db(THD *thd, const char *name)
}
-int mysqld_show_create_db(THD *thd, const char *dbname)
+int mysqld_show_create_db(THD *thd, const char *dbname, HA_CREATE_INFO *create_info)
{
int length;
char path[FN_REFLEN], *to;
@@ -605,6 +605,8 @@ int mysqld_show_create_db(THD *thd, const char *dbname)
bool found_libchar;
HA_CREATE_INFO create;
CONVERT *convert=thd->variables.convert_set;
+ uint create_options = create_info ? create_info->options : 0;
+
DBUG_ENTER("mysql_show_create_db");
if (check_db_name(dbname))
@@ -660,12 +662,17 @@ int mysqld_show_create_db(THD *thd, const char *dbname)
String *packet = &thd->packet;
packet->length(0);
net_store_data(packet, convert, dbname);
- to= strxmov(path, "CREATE DATABASE `", dbname, "`", NullS);
+ to= strxmov(path, "CREATE DATABASE ", NullS);
+ if (create_options & HA_LEX_CREATE_IF_NOT_EXISTS)
+ to= strxmov(to,"/*!32312 IF NOT EXISTS*/ ", NullS);
+ to=strxmov(to,"`",dbname,"`", NullS);
+
if (create.table_charset)
- to= strxmov(to," DEFAULT CHARACTER SET ", create.table_charset->name,
- NullS);
+ to= strxmov(to," /*!40100 DEFAULT CHARACTER SET ",
+ create.table_charset->name,"*/",NullS);
+
net_store_data(packet, convert, path, (uint) (to-path));
-
+
if (my_net_write(&thd->net,(char*) packet->ptr(), packet->length()))
DBUG_RETURN(1);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index e6ebc3abf4a..b3cc0ab29f5 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2465,7 +2465,7 @@ mysql_execute_command(THD *thd)
send_error(thd,ER_LOCK_OR_ACTIVE_TRANSACTION);
goto error;
}
- res=mysqld_show_create_db(thd,lex->name);
+ res=mysqld_show_create_db(thd,lex->name,&lex->create_info);
break;
}
case SQLCOM_CREATE_FUNCTION:
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 0fe6b864914..1740c4c668e 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2987,7 +2987,13 @@ opt_table_sym:
/* Show things */
-show: SHOW { Lex->wild=0;} show_param;
+show: SHOW
+ {
+ LEX *lex=Lex;
+ lex->wild=0;
+ bzero((char*) &lex->create_info,sizeof(lex->create_info));
+ }
+ show_param;
show_param:
DATABASES wild
@@ -3100,10 +3106,11 @@ show_param:
lex->grant_user=$3;
lex->grant_user->password.str=NullS;
}
- | CREATE DATABASE ident
+ | CREATE DATABASE opt_if_not_exists ident
{
Lex->sql_command=SQLCOM_SHOW_CREATE_DB;
- Lex->name=$3.str;
+ Lex->create_info.options=$3;
+ Lex->name=$4.str;
}
| CREATE TABLE_SYM table_ident
{