diff options
author | peter@mysql.com <> | 2002-11-06 12:51:07 +0300 |
---|---|---|
committer | peter@mysql.com <> | 2002-11-06 12:51:07 +0300 |
commit | 21066bde1ba1116b8bb0ceed61550f4df0979357 (patch) | |
tree | 63bca565bf8c542ea1e8741ea111991620faf3eb | |
parent | 8bcace70434836acfe66a6ad5ff93c7a7afdd1eb (diff) | |
parent | 8229d282f7767efe4c88294acdb65507fef4079e (diff) | |
download | mariadb-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.c | 2 | ||||
-rw-r--r-- | sql/mysql_priv.h | 2 | ||||
-rw-r--r-- | sql/sql_db.cc | 17 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 13 |
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 { |