diff options
author | unknown <serg@serg.mysql.com> | 2000-10-29 13:49:42 +0100 |
---|---|---|
committer | unknown <serg@serg.mysql.com> | 2000-10-29 13:49:42 +0100 |
commit | 76a0983151a5d5f050ee99d14b55abffd9364873 (patch) | |
tree | cc1feefc45a70b241661f771d6e4037e03401bff /client | |
parent | 293d7c8313ba8faa41f39d06617a542e337d8883 (diff) | |
download | mariadb-git-76a0983151a5d5f050ee99d14b55abffd9364873.tar.gz |
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.
Diffstat (limited to 'client')
-rw-r--r-- | client/mysqldump.c | 344 |
1 files changed, 213 insertions, 131 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c index 5ec559c5227..b1c77b209aa 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -594,176 +594,258 @@ 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); - 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); - } - /* Make an sql-file, if path was given iow. option -T was given */ - if (!tFlag) + if (mysql_query(sock,insert_pat)) { - if (path) + /* using SHOW CREATE statement */ + if (!tFlag) { - 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 */ + /* 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)) { - safe_exit(EX_MYSQLERR); - DBUG_RETURN(0); + 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); } - 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); - fprintf(sql_file, "CREATE TABLE %s (\n", table_name); - } - 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 (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))) { - if (!tFlag) - fputs(",\n",sql_file); - if (cFlag) - strpos=strmov(strpos,", "); + 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); } - init=1; + if (cFlag) - strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME],name_buff)); - if (!tFlag) + sprintf(insert_pat, "INSERT %sINTO %s (", delayed, table_name); + else { - if (opt_keywords) - fprintf(sql_file, " %s.%s %s", table_name, - quote_name(row[SHOW_FIELDNAME],name_buff), row[SHOW_TYPE]); - else - fprintf(sql_file, " %s %s", quote_name(row[SHOW_FIELDNAME],name_buff), - row[SHOW_TYPE]); - if (row[SHOW_DEFAULT]) + 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) { - fputs(" DEFAULT ", sql_file); - unescape(sql_file,row[SHOW_DEFAULT],lengths[SHOW_DEFAULT]); + if (cFlag) + strpos=strmov(strpos,", "); } - if (!row[SHOW_NULL][0]) - fputs(" NOT NULL", sql_file); - if (row[SHOW_EXTRA][0]) - fprintf(sql_file, " %s",row[SHOW_EXTRA]); + init=1; + if (cFlag) + strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME],name_buff)); } + numFields = (uint) mysql_num_rows(tableRes); + mysql_free_result(tableRes); } - numFields = (uint) mysql_num_rows(tableRes); - mysql_free_result(tableRes); - if (!tFlag) + else { - /* Make an sql-file, if path was given iow. option -T was given */ - char buff[20+FN_REFLEN]; - uint keynr,primary_key; - sprintf(buff,"show keys from %s",table_name); - if (mysql_query(sock, buff)) + /* 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))) { - fprintf(stderr, "%s: Can't get keys for table '%s' (%s)\n", - my_progname, table, mysql_error(sock)); - if (sql_file != stdout) - my_fclose(sql_file, MYF(MY_WME)); + 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); } - tableRes=mysql_store_result(sock); - /* Find first which key is primary key */ - keynr=0; - primary_key=INT_MAX; - while ((row=mysql_fetch_row(tableRes))) + /* Make an sql-file, if path was given iow. option -T was given */ + if (!tFlag) { - if (atoi(row[3]) == 1) + if (path) { - keynr++; -#ifdef FORCE_PRIMARY_KEY - if (atoi(row[1]) == 0 && primary_key == INT_MAX) - primary_key=keynr; -#endif - if (!strcmp(row[2],"PRIMARY")) - { - primary_key=keynr; - break; - } + 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); + fprintf(sql_file, "CREATE TABLE %s (\n", table_name); + } + 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,"("); } - mysql_data_seek(tableRes,0); - keynr=0; + + strpos=strend(insert_pat); while ((row=mysql_fetch_row(tableRes))) { - if (atoi(row[3]) == 1) + ulong *lengths=mysql_fetch_lengths(tableRes); + if (init) { - if (keynr++) - putc(')', sql_file); - if (atoi(row[1])) /* Test if duplicate key */ - /* Duplicate allowed */ - fprintf(sql_file, ",\n KEY %s (",quote_name(row[2],name_buff)); - else if (keynr == primary_key) - fputs(",\n PRIMARY KEY (",sql_file); /* First UNIQUE is primary */ - else - fprintf(sql_file, ",\n UNIQUE %s (",quote_name(row[2],name_buff)); + if (!tFlag) + fputs(",\n",sql_file); + if (cFlag) + strpos=strmov(strpos,", "); + } + init=1; + if (cFlag) + strpos=strmov(strpos,quote_name(row[SHOW_FIELDNAME],name_buff)); + if (!tFlag) + { + if (opt_keywords) + fprintf(sql_file, " %s.%s %s", table_name, + quote_name(row[SHOW_FIELDNAME],name_buff), row[SHOW_TYPE]); + else + fprintf(sql_file, " %s %s", quote_name(row[SHOW_FIELDNAME],name_buff), + row[SHOW_TYPE]); + if (row[SHOW_DEFAULT]) + { + fputs(" DEFAULT ", sql_file); + unescape(sql_file,row[SHOW_DEFAULT],lengths[SHOW_DEFAULT]); + } + if (!row[SHOW_NULL][0]) + fputs(" NOT NULL", sql_file); + if (row[SHOW_EXTRA][0]) + fprintf(sql_file, " %s",row[SHOW_EXTRA]); } - else - putc(',', sql_file); - fputs(quote_name(row[4],name_buff), sql_file); - if (row[7]) - fprintf(sql_file, "(%s)",row[7]); /* Sub key */ } - if (keynr) - putc(')', sql_file); - fputs("\n)",sql_file); - - /* Get MySQL specific create options */ - if (create_options) + numFields = (uint) mysql_num_rows(tableRes); + mysql_free_result(tableRes); + if (!tFlag) { - sprintf(buff,"show table status like '%s'",table); + /* Make an sql-file, if path was given iow. option -T was given */ + char buff[20+FN_REFLEN]; + uint keynr,primary_key; + sprintf(buff,"show keys from %s",table_name); if (mysql_query(sock, buff)) { - if (mysql_errno(sock) != ER_PARSE_ERROR) - { /* If old MySQL version */ - if (verbose) - fprintf(stderr, - "# Warning: Couldn't get status information for table '%s' (%s)\n", - table,mysql_error(sock)); - } + fprintf(stderr, "%s: Can't get keys for table '%s' (%s)\n", + my_progname, table, mysql_error(sock)); + if (sql_file != stdout) + my_fclose(sql_file, MYF(MY_WME)); + safe_exit(EX_MYSQLERR); + DBUG_RETURN(0); } - else if (!(tableRes=mysql_store_result(sock)) || - !(row=mysql_fetch_row(tableRes))) + + tableRes=mysql_store_result(sock); + /* Find first which key is primary key */ + keynr=0; + primary_key=INT_MAX; + while ((row=mysql_fetch_row(tableRes))) { - fprintf(stderr, - "Error: Couldn't read status information for table '%s' (%s)\n", - table,mysql_error(sock)); + if (atoi(row[3]) == 1) + { + keynr++; + #ifdef FORCE_PRIMARY_KEY + if (atoi(row[1]) == 0 && primary_key == INT_MAX) + primary_key=keynr; + #endif + if (!strcmp(row[2],"PRIMARY")) + { + primary_key=keynr; + break; + } + } } - else + mysql_data_seek(tableRes,0); + keynr=0; + while ((row=mysql_fetch_row(tableRes))) + { + if (atoi(row[3]) == 1) + { + if (keynr++) + putc(')', sql_file); + if (atoi(row[1])) /* Test if duplicate key */ + /* Duplicate allowed */ + fprintf(sql_file, ",\n KEY %s (",quote_name(row[2],name_buff)); + else if (keynr == primary_key) + fputs(",\n PRIMARY KEY (",sql_file); /* First UNIQUE is primary */ + else + fprintf(sql_file, ",\n UNIQUE %s (",quote_name(row[2],name_buff)); + } + else + putc(',', sql_file); + fputs(quote_name(row[4],name_buff), sql_file); + if (row[7]) + fprintf(sql_file, "(%s)",row[7]); /* Sub key */ + } + if (keynr) + putc(')', sql_file); + fputs("\n)",sql_file); + + /* Get MySQL specific create options */ + if (create_options) { - fputs("/*!",sql_file); - print_value(sql_file,tableRes,row,"type=","Type",0); - print_value(sql_file,tableRes,row,"","Create_options",0); - print_value(sql_file,tableRes,row,"comment=","Comment",1); - fputs(" */",sql_file); + sprintf(buff,"show table status like '%s'",table); + if (mysql_query(sock, buff)) + { + if (mysql_errno(sock) != ER_PARSE_ERROR) + { /* If old MySQL version */ + if (verbose) + fprintf(stderr, + "# Warning: Couldn't get status information for table '%s' (%s)\n", + table,mysql_error(sock)); + } + } + else if (!(tableRes=mysql_store_result(sock)) || + !(row=mysql_fetch_row(tableRes))) + { + fprintf(stderr, + "Error: Couldn't read status information for table '%s' (%s)\n", + table,mysql_error(sock)); + } + else + { + fputs("/*!",sql_file); + print_value(sql_file,tableRes,row,"type=","Type",0); + print_value(sql_file,tableRes,row,"","Create_options",0); + print_value(sql_file,tableRes,row,"comment=","Comment",1); + fputs(" */",sql_file); + } + mysql_free_result(tableRes); /* Is always safe to free */ } - mysql_free_result(tableRes); /* Is always safe to free */ + fputs(";\n", sql_file); } - fputs(";\n", sql_file); } if (cFlag) { |