mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
mysqldump.c Dumping via SHOW CREATE added.
Autofallback to the old behaviour for pre-3.23.26 servers. client/mysqldump.c: Dumping via SHOW CREATE added. Autofallback to the old behaviour for pre-3.23.26 servers.
This commit is contained in:
@ -594,7 +594,88 @@ static uint getTableStructure(char *table, char* db)
|
||||
if (verbose)
|
||||
fprintf(stderr, "# Retrieving table structure for table %s...\n", table);
|
||||
|
||||
sprintf(insert_pat,"SET OPTION SQL_QUOTE_SHOW_CREATE=%d", opt_quoted);
|
||||
table_name=quote_name(table,table_buff);
|
||||
|
||||
if (mysql_query(sock,insert_pat))
|
||||
{
|
||||
/* using SHOW CREATE statement */
|
||||
if (!tFlag)
|
||||
{
|
||||
/* Make an sql-file, if path was given iow. option -T was given */
|
||||
char buff[20+FN_REFLEN];
|
||||
|
||||
sprintf(buff,"show create table %s",table_name);
|
||||
if (mysql_query(sock, buff))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get CREATE TABLE for table '%s' (%s)\n",
|
||||
my_progname, table, mysql_error(sock));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (path)
|
||||
{
|
||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||
strmov(tmp_path,path);
|
||||
convert_dirname(tmp_path);
|
||||
sql_file= my_fopen(fn_format(filename, table, tmp_path, ".sql", 4),
|
||||
O_WRONLY, MYF(MY_WME));
|
||||
if (!sql_file) /* If file couldn't be opened */
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
write_heder(sql_file, db);
|
||||
}
|
||||
fprintf(sql_file, "\n#\n# Table structure for table '%s'\n#\n\n", table);
|
||||
if (opt_drop)
|
||||
fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n",table_name);
|
||||
|
||||
tableRes=mysql_store_result(sock);
|
||||
row=mysql_fetch_row(tableRes);
|
||||
fprintf(sql_file, "%s;\n", row[1]);
|
||||
mysql_free_result(tableRes);
|
||||
}
|
||||
sprintf(insert_pat,"show fields from %s",table_name);
|
||||
if (mysql_query(sock,insert_pat) || !(tableRes=mysql_store_result(sock)))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get info about table: '%s'\nerror: %s\n",
|
||||
my_progname, table, mysql_error(sock));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (cFlag)
|
||||
sprintf(insert_pat, "INSERT %sINTO %s (", delayed, table_name);
|
||||
else
|
||||
{
|
||||
sprintf(insert_pat, "INSERT %sINTO %s VALUES ", delayed, table_name);
|
||||
if (!extended_insert)
|
||||
strcat(insert_pat,"(");
|
||||
}
|
||||
|
||||
strpos=strend(insert_pat);
|
||||
while ((row=mysql_fetch_row(tableRes)))
|
||||
{
|
||||
ulong *lengths=mysql_fetch_lengths(tableRes);
|
||||
if (init)
|
||||
{
|
||||
if (cFlag)
|
||||
strpos=strmov(strpos,", ");
|
||||
}
|
||||
init=1;
|
||||
if (cFlag)
|
||||
strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME],name_buff));
|
||||
}
|
||||
numFields = (uint) mysql_num_rows(tableRes);
|
||||
mysql_free_result(tableRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* fprintf(stderr, "%s: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
|
||||
my_progname, mysql_error(sock)); */
|
||||
|
||||
sprintf(insert_pat,"show fields from %s",table_name);
|
||||
if (mysql_query(sock,insert_pat) || !(tableRes=mysql_store_result(sock)))
|
||||
{
|
||||
@ -765,6 +846,7 @@ static uint getTableStructure(char *table, char* db)
|
||||
}
|
||||
fputs(";\n", sql_file);
|
||||
}
|
||||
}
|
||||
if (cFlag)
|
||||
{
|
||||
strpos=strmov(strpos,") VALUES ");
|
||||
|
Reference in New Issue
Block a user