diff options
author | unknown <serg@infomag.ape.relarn.ru> | 2000-08-30 21:40:59 +0400 |
---|---|---|
committer | unknown <serg@infomag.ape.relarn.ru> | 2000-08-30 21:40:59 +0400 |
commit | 15b5793f884940796ce1d009488f3321711627ac (patch) | |
tree | e423899b253e7f79551463e31e65aa430074a367 /client | |
parent | d90673502df3dcb6cfd52c5b2d355c75a6bc0bd9 (diff) | |
download | mariadb-git-15b5793f884940796ce1d009488f3321711627ac.tar.gz |
mysqldump.c use SHOW CREATE
lex.h MRG_MyISAM == MERGE (for SHOW CREATE to work)
sql/lex.h:
MRG_MyISAM == MERGE (for SHOW CREATE to work)
client/mysqldump.c:
use SHOW CREATE
Diffstat (limited to 'client')
-rw-r--r-- | client/mysqldump.c | 178 |
1 files changed, 38 insertions, 140 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c index c2ef4a96dc0..60191d2916b 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -37,7 +37,7 @@ ** Tõnu Samuel <tonu@please.do.not.remove.this.spam.ee> **/ -#define DUMP_VERSION "8.8" +#define DUMP_VERSION "8.9" #include <global.h> #include <my_sys.h> @@ -470,7 +470,7 @@ static int get_options(int *argc,char ***argv) static void DBerror(MYSQL *mysql, const char *when) { DBUG_ENTER("DBerror"); - my_printf_error(0,"Got error: %d: %s %s", MYF(0), + my_printf_error(0,"Got error: %d: %s %s", MYF(0), mysql_errno(mysql), mysql_error(mysql), when); safe_exit(EX_MYSQLERR); DBUG_VOID_RETURN; @@ -600,34 +600,10 @@ static uint getTableStructure(char *table, char* db) { fprintf(stderr, "%s: Can't get info about table: '%s'\nerror: %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); } - /* Make an sql-file, if path was given iow. option -T was given */ - if (!tFlag) - { - 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); - fprintf(sql_file, "CREATE TABLE %s (\n", table_name); - } if (cFlag) sprintf(insert_pat, "INSERT %sINTO %s (", delayed, table_name); else @@ -643,134 +619,56 @@ static uint getTableStructure(char *table, char* db) ulong *lengths=mysql_fetch_lengths(tableRes); if (init) { - 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]); - } + } + if (cFlag) + { + strpos=strmov(strpos,") VALUES "); + if (!extended_insert) + strpos=strmov(strpos,"("); } numFields = (uint) mysql_num_rows(tableRes); mysql_free_result(tableRes); if (!tFlag) { + /* 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); + + sprintf(buff,"show create table %s",table_name); if (mysql_query(sock, buff)) { - fprintf(stderr, "%s: Can't get keys for table '%s' (%s)\n", + fprintf(stderr, "%s: Can't get CREATE TABLE 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); } - tableRes=mysql_store_result(sock); - /* Find first which key is primary key */ - keynr=0; - primary_key=INT_MAX; - while ((row=mysql_fetch_row(tableRes))) - { - 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; - } - } - } - mysql_data_seek(tableRes,0); - keynr=0; - while ((row=mysql_fetch_row(tableRes))) + if (path) { - if (atoi(row[3]) == 1) + 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 */ { - 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)); + safe_exit(EX_MYSQLERR); + DBUG_RETURN(0); } - else - putc(',', sql_file); - fputs(quote_name(row[4],name_buff), sql_file); - if (row[7]) - fprintf(sql_file, "(%s)",row[7]); /* Sub key */ + write_heder(sql_file, db); } - if (keynr) - putc(')', sql_file); - fputs("\n)",sql_file); + 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); - /* Get MySQL specific create options */ - if (create_options) - { - 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 */ - } - fputs(";\n", sql_file); - } - if (cFlag) - { - strpos=strmov(strpos,") VALUES "); - if (!extended_insert) - strpos=strmov(strpos,"("); + tableRes=mysql_store_result(sock); + row=mysql_fetch_row(tableRes); + fprintf(sql_file, "%s;\n", row[1]); } DBUG_RETURN(numFields); } /* getTableStructure */ @@ -951,7 +849,7 @@ static void dumpTable(uint numFields, char *table) safe_exit(EX_EOM); } dynstr_append(&extended_row,"\'"); - extended_row.length += + extended_row.length += mysql_real_escape_string(&mysql_connection, &extended_row.str[extended_row.length],row[i],length); extended_row.str[extended_row.length]='\0'; @@ -1047,7 +945,7 @@ static char *getTableName(int reset) } if ((row = mysql_fetch_row(res))) return((char*) row[0]); - + if (reset) mysql_data_seek(res,0); /* We want to read again */ else @@ -1135,14 +1033,14 @@ static int dump_all_tables_in_db(char *database) dynstr_append(&query, " READ /*!32311 LOCAL */,"); } if (numrows && mysql_real_query(sock, query.str, query.length-1)) - DBerror(sock, "when using LOCK TABLES"); + DBerror(sock, "when using LOCK TABLES"); /* We shall continue here, if --force was given */ dynstr_free(&query); } if (flush_logs) { if (mysql_refresh(sock, REFRESH_LOG)) - DBerror(sock, "when doing refresh"); + DBerror(sock, "when doing refresh"); /* We shall continue here, if --force was given */ } while ((table = getTableName(0))) @@ -1176,14 +1074,14 @@ static int dump_selected_tables(char *db, char **table_names, int tables) dynstr_append(&query, " READ /*!32311 LOCAL */,"); } if (mysql_real_query(sock, query.str, query.length-1)) - DBerror(sock, "when doing LOCK TABLES"); + DBerror(sock, "when doing LOCK TABLES"); /* We shall countinue here, if --force was given */ dynstr_free(&query); } if (flush_logs) { if (mysql_refresh(sock, REFRESH_LOG)) - DBerror(sock, "when doing refresh"); + DBerror(sock, "when doing refresh"); /* We shall countinue here, if --force was given */ } for (; tables > 0 ; tables-- , table_names++) @@ -1259,7 +1157,7 @@ int main(int argc, char **argv) else if (argc > 1 && !opt_databases) dump_selected_tables(*argv, (argv + 1), (argc - 1)); /* One or more databases, all tables */ - else + else dump_databases(argv); if (opt_first_slave) |