Loading BUILD/FINISH.sh +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ path=`dirname $0` if [ -z "$just_clean" ] then commands="$commands CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \ CC=\"$CC\" CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \ $configure" fi Loading BUILD/SETUP.sh +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ else make=make fi if test -z "$CC" ; then CC=gcc fi if test -z "$CXX" ; then CXX=gcc fi Loading client/mysql.cc +49 −27 Original line number Diff line number Diff line Loading @@ -1113,6 +1113,8 @@ static COMMANDS *find_command (char *name,char cmd_char) { uint len; char *end; DBUG_ENTER("find_command"); DBUG_PRINT("enter",("name: '%s' char: %d", name ? name : "NULL", cmd_char)); if (!name) { Loading @@ -1124,12 +1126,16 @@ static COMMANDS *find_command (char *name,char cmd_char) while (my_isspace(charset_info,*name)) name++; /* As special case we allow row that starts with word delimiter to be able to change delimiter if someone has delimiter 'delimiter'. If there is an \\g in the row or if the row has a delimiter but this is not a delimiter command, let add_line() take care of parsing the row and calling find_command() */ if (strstr(name, "\\g") || (strstr(name, delimiter) && strncmp(name, "delimiter", 9))) return ((COMMANDS *) 0); strlen(name) >= 9 && my_strnncoll(charset_info,(uchar*) name, 9, (const uchar*) "delimiter", 9))) DBUG_RETURN((COMMANDS *) 0); if ((end=strcont(name," \t"))) { len=(uint) (end - name); Loading @@ -1151,9 +1157,12 @@ static COMMANDS *find_command (char *name,char cmd_char) !commands[i].name[len] && (!end || (end && commands[i].takes_params))) || !name && commands[i].cmd_char == cmd_char)) return (&commands[i]); { DBUG_PRINT("exit",("found command: %s", commands[i].name)); DBUG_RETURN(&commands[i]); } } return ((COMMANDS *) 0); DBUG_RETURN((COMMANDS *) 0); } Loading @@ -1164,15 +1173,16 @@ static bool add_line(String &buffer,char *line,char *in_string, char buff[80], *pos, *out; COMMANDS *com; bool need_space= 0; DBUG_ENTER("add_line"); if (!line[0] && buffer.is_empty()) return 0; DBUG_RETURN(0); #ifdef HAVE_READLINE if (status.add_to_history && line[0] && not_in_history(line)) add_history(line); #endif #ifdef USE_MB char *strend=line+(uint) strlen(line); char *end_of_line=line+(uint) strlen(line); #endif for (pos=out=line ; (inchar= (uchar) *pos) ; pos++) Loading @@ -1181,10 +1191,11 @@ static bool add_line(String &buffer,char *line,char *in_string, buffer.is_empty()) continue; #ifdef USE_MB int l; int length; if (use_mb(charset_info) && (l = my_ismbchar(charset_info, pos, strend))) { while (l--) (length= my_ismbchar(charset_info, pos, end_of_line))) { while (length--) *out++ = *pos++; pos--; continue; Loading @@ -1207,7 +1218,7 @@ static bool add_line(String &buffer,char *line,char *in_string, const String tmp(line,(uint) (out-line), charset_info); buffer.append(tmp); if ((*com->func)(&buffer,pos-1) > 0) return 1; // Quit DBUG_RETURN(1); // Quit if (com->takes_params) { for (pos++ ; Loading @@ -1225,29 +1236,40 @@ static bool add_line(String &buffer,char *line,char *in_string, { sprintf(buff,"Unknown command '\\%c'.",inchar); if (put_info(buff,INFO_ERROR) > 0) return 1; DBUG_RETURN(1); *out++='\\'; *out++=(char) inchar; continue; } } else if (!*ml_comment && (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1)) && !*in_string) else if (!*ml_comment && !*in_string && (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1) || buffer.length() == 0 && (out - line) >= 9 && !my_strcasecmp(charset_info, line, "delimiter"))) { uint old_delimiter_length= delimiter_length; if (out != line) buffer.append(line, (uint) (out - line)); // Add this line if ((com= find_command(buffer.c_ptr(), 0))) { if (com->func == com_delimiter) { /* Delimiter wants the get rest of the given line as argument to allow one to change ';' to ';;' and back */ char *end= strend(pos); buffer.append(pos, (uint) (end - pos)); /* Ensure pos will point at \0 after the pos+= below */ pos= end - old_delimiter_length + 1; } if ((*com->func)(&buffer, buffer.c_ptr()) > 0) return 1; // Quit DBUG_RETURN(1); // Quit } else { if (com_go(&buffer, 0) > 0) // < 0 is not fatal return 1; DBUG_RETURN(1); } buffer.length(0); out= line; Loading Loading @@ -1299,9 +1321,9 @@ static bool add_line(String &buffer,char *line,char *in_string, if (buffer.length() + length >= buffer.alloced_length()) buffer.realloc(buffer.length()+length+IO_SIZE); if (!(*ml_comment) && buffer.append(line,length)) return 1; DBUG_RETURN(1); } return 0; DBUG_RETURN(0); } /***************************************************************** Loading client/mysqldump.c +69 −61 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ ** master/autocommit code by Brian Aker <brian@tangent.org> ** SSL by ** Andrei Errapart <andreie@no.spam.ee> ** Tõnu Samuel <tonu@please.do.not.remove.this.spam.ee> ** Tõnu Samuel <tonu@please.do.not.remove.this.spam.ee> ** XML by Gary Huntress <ghuntress@mediaone.net> 10/10/01, cleaned up ** and adapted to mysqldump 05/11/01 by Jani Tolonen ** Added --single-transaction option 06/06/2002 by Peter Zaitsev Loading Loading @@ -1172,23 +1172,25 @@ static void print_xml_row(FILE *xml_file, const char *row_name, This function has logic to print the appropriate syntax depending on whether this is a procedure or functions RETURN 0 succes, 1 if error RETURN 0 Success 1 Error */ static uint dump_routines_for_db(char *db) { char query_buff[512]; const char *routine_type[]= {"FUNCTION", "PROCEDURE"}; char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3], *routine_name; char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3]; char *routine_name; int i; FILE *sql_file= md_result_file; MYSQL_RES *routine_res, *routine_list_res; MYSQL_ROW row, routine_list_row; DBUG_ENTER("dump_routines_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); mysql_real_escape_string(sock, db_name_buff, db, strlen(db)); DBUG_PRINT("enter", ("db: '%s'", db_name_buff)); /* nice comments */ if (opt_comments) Loading @@ -1201,7 +1203,7 @@ static uint dump_routines_for_db (char *db) if (lock_tables) mysql_query(sock, "LOCK TABLES mysql.proc READ"); fprintf(sql_file, "DELIMITER //\n"); fprintf(sql_file, "DELIMITER ;;\n"); /* 0, retrieve and dump functions, 1, procedures */ for (i= 0; i <= 1; i++) Loading Loading @@ -1238,16 +1240,18 @@ static uint dump_routines_for_db (char *db) if (strlen(row[2])) { if (opt_drop) fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */ //\n", fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;;\n", routine_type[i], routine_name); /* we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name */; fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/ //\n", fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n", row[1] /* sql_mode */); fprintf(sql_file, "/*!50003 %s */ //\n", row[2]); fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/ //\n"); fprintf(sql_file, "/*!50003 %s */;;\n", row[2]); fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/" ";;\n"); } } /* end of routine printing */ } /* end of list of routines */ Loading Loading @@ -1283,7 +1287,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, { MYSQL_RES *tableRes; MYSQL_ROW row; my_bool init=0; my_bool init=0, delayed, write_data, complete_insert; uint num_fields; char *result_table, *opt_quoted_table; const char *insert_option; Loading @@ -1292,31 +1296,33 @@ static uint get_table_structure(char *table, char *db, char *table_type, char query_buff[512]; FILE *sql_file = md_result_file; int len; DBUG_ENTER("get_table_structure"); DBUG_PRINT("enter", ("db: %s, table: %s", db, table)); DBUG_PRINT("enter", ("db: %s table: %s", db, table)); *ignore_flag= check_if_ignore_table(table, table_type); if (opt_delayed && (*ignore_flag & IGNORE_INSERT_DELAYED)) delayed= opt_delayed; if (delayed && (*ignore_flag & IGNORE_INSERT_DELAYED)) { delayed= 0; if (verbose) fprintf(stderr, "-- Unable to use delayed inserts for table '%s' because it's of\ type %s\n", table, table_type); "-- Warning: Unable to use delayed inserts for table '%s' " "because it's of type %s\n", table, table_type); } if (!(*ignore_flag & IGNORE_DATA)) complete_insert= 0; if ((write_data= !(*ignore_flag & IGNORE_DATA))) { complete_insert= opt_complete_insert; if (!insert_pat_inited) insert_pat_inited= init_dynamic_string(&insert_pat, "", 1024, 1024); else dynstr_set(&insert_pat, ""); } insert_option= ((opt_delayed && opt_ignore && !(*ignore_flag & IGNORE_INSERT_DELAYED)) ? " DELAYED IGNORE " : opt_delayed && !(*ignore_flag & IGNORE_INSERT_DELAYED) ? " DELAYED " : opt_ignore ? " IGNORE " : ""); insert_option= ((delayed && opt_ignore) ? " DELAYED IGNORE " : delayed ? " DELAYED " : opt_ignore ? " IGNORE " : ""); if (verbose) fprintf(stderr, "-- Retrieving table structure for table %s...\n", table); Loading Loading @@ -1448,17 +1454,18 @@ static uint get_table_structure(char *table, char *db, char *table_type, } /* if *ignore_flag & IGNORE_DATA is true, then we don't build up insert statements for the table's data. Note: in subsequent lines of code, this test will have to be performed each time we are appending to insert_pat. If write_data is true, then we build up insert statements for the table's data. Note: in subsequent lines of code, this test will have to be performed each time we are appending to insert_pat. */ if (!(*ignore_flag & IGNORE_DATA)) if (write_data) { dynstr_append_mem(&insert_pat, "INSERT ", 7); dynstr_append(&insert_pat, insert_option); dynstr_append_mem(&insert_pat, "INTO ", 5); dynstr_append(&insert_pat, opt_quoted_table); if (opt_complete_insert) if (complete_insert) { dynstr_append_mem(&insert_pat, " (", 2); } Loading @@ -1471,17 +1478,18 @@ static uint get_table_structure(char *table, char *db, char *table_type, } while ((row=mysql_fetch_row(tableRes))) { if (complete_insert) { if (init) { if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) dynstr_append_mem(&insert_pat, ", ", 2); } init=1; if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) dynstr_append(&insert_pat, quote_name(row[SHOW_FIELDNAME], name_buff, 0)); } } num_fields= (uint) mysql_num_rows(tableRes); mysql_free_result(tableRes); } Loading Loading @@ -1528,7 +1536,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, check_io(sql_file); } if (!(*ignore_flag & IGNORE_DATA)) if (write_data) { dynstr_append_mem(&insert_pat, "INSERT ", 7); dynstr_append(&insert_pat, insert_option); Loading @@ -1554,11 +1562,11 @@ static uint get_table_structure(char *table, char *db, char *table_type, fputs(",\n",sql_file); check_io(sql_file); } if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (complete_insert) dynstr_append_mem(&insert_pat, ", ", 2); } init=1; if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (opt_complete_insert) dynstr_append(&insert_pat, quote_name(row[SHOW_FIELDNAME], name_buff, 0)); if (!tFlag) Loading Loading @@ -1719,7 +1727,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, check_io(sql_file); } } if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (opt_complete_insert) { dynstr_append_mem(&insert_pat, ") VALUES ", 9); if (!extended_insert) Loading Loading @@ -1753,7 +1761,6 @@ static void dump_triggers_for_table (char *table, char *db) char name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3]; char query_buff[512]; FILE *sql_file = md_result_file; DBUG_ENTER("dump_triggers_for_table"); DBUG_PRINT("enter", ("db: %s, table: %s", db, table)); result_table= quote_name(table, table_buff, 1); Loading @@ -1771,11 +1778,11 @@ static void dump_triggers_for_table (char *table, char *db) } if (mysql_num_rows(result)) fprintf(sql_file, "\n/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;\n\ DELIMITER //;\n"); DELIMITER ;;\n"); while ((row=mysql_fetch_row(result))) { fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */ //\n\ /*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */ //\n\n", fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\ /*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */;;\n\n", row[6], /* sql_mode */ quote_name(row[0], name_buff, 0), /* Trigger */ row[4], /* Timing */ Loading @@ -1785,8 +1792,8 @@ DELIMITER //;\n"); } if (mysql_num_rows(result)) fprintf(sql_file, "DELIMITER ;//\n\ /*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;"); "DELIMITER ;\n" "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;\n"); mysql_free_result(result); DBUG_VOID_RETURN; } Loading @@ -1812,10 +1819,10 @@ static char *add_load_option(char *ptr,const char *object, /* ** Allow the user to specify field terminator strings like: ** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline) ** This is done by doubleing ' and add a end -\ if needed to avoid ** syntax errors from the SQL parser. Allow the user to specify field terminator strings like: "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline) This is done by doubling ' and add a end -\ if needed to avoid syntax errors from the SQL parser. */ static char *field_escape(char *to,const char *from,uint length) Loading Loading @@ -1889,7 +1896,7 @@ static void dump_table(char *table, char *db) Make sure you get the create table info before the following check for --no-data flag below. Otherwise, the create table info won't be printed. */ num_fields= get_table_structure(table, db, (char *)&table_type, &ignore_flag); num_fields= get_table_structure(table, db, table_type, &ignore_flag); /* Check --no-data flag */ if (dFlag) Loading @@ -1901,7 +1908,9 @@ static void dump_table(char *table, char *db) DBUG_VOID_RETURN; } DBUG_PRINT("info", ("ignore_flag %x num_fields %d", ignore_flag, num_fields)); DBUG_PRINT("info", ("ignore_flag: %x num_fields: %d", (int) ignore_flag, num_fields)); /* If the table type is a merge table or any type that has to be _completely_ ignored and no data dumped Loading @@ -1910,7 +1919,7 @@ static void dump_table(char *table, char *db) { if (verbose) fprintf(stderr, "-- Skipping data for table '%s' because it's of type %s\n", "-- Warning: Skipping data for table '%s' because it's of type %s\n", table, table_type); DBUG_VOID_RETURN; } Loading @@ -1927,7 +1936,6 @@ static void dump_table(char *table, char *db) result_table= quote_name(table,table_buff, 1); opt_quoted_table= quote_name(table, table_buff2, 0); if (verbose) fprintf(stderr, "-- Sending SELECT query...\n"); if (path) Loading client/mysqltest.c +7 −9 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ typedef struct long code; } st_error; static st_error global_error[] = { static st_error global_error[] = { #include <mysqld_ername.h> { 0, 0 } }; Loading Loading @@ -218,7 +219,8 @@ static int ps_match_re(char *); static char *ps_eprint(int); static void ps_free_reg(void); static const char *embedded_server_groups[] = { static const char *embedded_server_groups[]= { "server", "embedded", "mysqltest_SERVER", Loading Loading @@ -735,9 +737,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) static int check_result(DYNAMIC_STRING* ds, const char *fname, my_bool require_option) { int error= RESULT_OK; int res= dyn_string_cmp(ds, fname); DBUG_ENTER("check_result"); if (res && require_option) Loading @@ -747,18 +747,16 @@ static int check_result(DYNAMIC_STRING* ds, const char *fname, break; /* ok */ case RESULT_LENGTH_MISMATCH: verbose_msg("Result length mismatch"); error= RESULT_LENGTH_MISMATCH; break; case RESULT_CONTENT_MISMATCH: verbose_msg("Result content mismatch"); error= RESULT_CONTENT_MISMATCH; break; default: /* impossible */ die("Unknown error code from dyn_string_cmp()"); } if (error) if (res != RESULT_OK) reject_dump(fname, ds->str, ds->length); DBUG_RETURN(error); DBUG_RETURN(res); } Loading Loading
BUILD/FINISH.sh +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ path=`dirname $0` if [ -z "$just_clean" ] then commands="$commands CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \ CC=\"$CC\" CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \ $configure" fi Loading
BUILD/SETUP.sh +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ else make=make fi if test -z "$CC" ; then CC=gcc fi if test -z "$CXX" ; then CXX=gcc fi Loading
client/mysql.cc +49 −27 Original line number Diff line number Diff line Loading @@ -1113,6 +1113,8 @@ static COMMANDS *find_command (char *name,char cmd_char) { uint len; char *end; DBUG_ENTER("find_command"); DBUG_PRINT("enter",("name: '%s' char: %d", name ? name : "NULL", cmd_char)); if (!name) { Loading @@ -1124,12 +1126,16 @@ static COMMANDS *find_command (char *name,char cmd_char) while (my_isspace(charset_info,*name)) name++; /* As special case we allow row that starts with word delimiter to be able to change delimiter if someone has delimiter 'delimiter'. If there is an \\g in the row or if the row has a delimiter but this is not a delimiter command, let add_line() take care of parsing the row and calling find_command() */ if (strstr(name, "\\g") || (strstr(name, delimiter) && strncmp(name, "delimiter", 9))) return ((COMMANDS *) 0); strlen(name) >= 9 && my_strnncoll(charset_info,(uchar*) name, 9, (const uchar*) "delimiter", 9))) DBUG_RETURN((COMMANDS *) 0); if ((end=strcont(name," \t"))) { len=(uint) (end - name); Loading @@ -1151,9 +1157,12 @@ static COMMANDS *find_command (char *name,char cmd_char) !commands[i].name[len] && (!end || (end && commands[i].takes_params))) || !name && commands[i].cmd_char == cmd_char)) return (&commands[i]); { DBUG_PRINT("exit",("found command: %s", commands[i].name)); DBUG_RETURN(&commands[i]); } } return ((COMMANDS *) 0); DBUG_RETURN((COMMANDS *) 0); } Loading @@ -1164,15 +1173,16 @@ static bool add_line(String &buffer,char *line,char *in_string, char buff[80], *pos, *out; COMMANDS *com; bool need_space= 0; DBUG_ENTER("add_line"); if (!line[0] && buffer.is_empty()) return 0; DBUG_RETURN(0); #ifdef HAVE_READLINE if (status.add_to_history && line[0] && not_in_history(line)) add_history(line); #endif #ifdef USE_MB char *strend=line+(uint) strlen(line); char *end_of_line=line+(uint) strlen(line); #endif for (pos=out=line ; (inchar= (uchar) *pos) ; pos++) Loading @@ -1181,10 +1191,11 @@ static bool add_line(String &buffer,char *line,char *in_string, buffer.is_empty()) continue; #ifdef USE_MB int l; int length; if (use_mb(charset_info) && (l = my_ismbchar(charset_info, pos, strend))) { while (l--) (length= my_ismbchar(charset_info, pos, end_of_line))) { while (length--) *out++ = *pos++; pos--; continue; Loading @@ -1207,7 +1218,7 @@ static bool add_line(String &buffer,char *line,char *in_string, const String tmp(line,(uint) (out-line), charset_info); buffer.append(tmp); if ((*com->func)(&buffer,pos-1) > 0) return 1; // Quit DBUG_RETURN(1); // Quit if (com->takes_params) { for (pos++ ; Loading @@ -1225,29 +1236,40 @@ static bool add_line(String &buffer,char *line,char *in_string, { sprintf(buff,"Unknown command '\\%c'.",inchar); if (put_info(buff,INFO_ERROR) > 0) return 1; DBUG_RETURN(1); *out++='\\'; *out++=(char) inchar; continue; } } else if (!*ml_comment && (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1)) && !*in_string) else if (!*ml_comment && !*in_string && (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1) || buffer.length() == 0 && (out - line) >= 9 && !my_strcasecmp(charset_info, line, "delimiter"))) { uint old_delimiter_length= delimiter_length; if (out != line) buffer.append(line, (uint) (out - line)); // Add this line if ((com= find_command(buffer.c_ptr(), 0))) { if (com->func == com_delimiter) { /* Delimiter wants the get rest of the given line as argument to allow one to change ';' to ';;' and back */ char *end= strend(pos); buffer.append(pos, (uint) (end - pos)); /* Ensure pos will point at \0 after the pos+= below */ pos= end - old_delimiter_length + 1; } if ((*com->func)(&buffer, buffer.c_ptr()) > 0) return 1; // Quit DBUG_RETURN(1); // Quit } else { if (com_go(&buffer, 0) > 0) // < 0 is not fatal return 1; DBUG_RETURN(1); } buffer.length(0); out= line; Loading Loading @@ -1299,9 +1321,9 @@ static bool add_line(String &buffer,char *line,char *in_string, if (buffer.length() + length >= buffer.alloced_length()) buffer.realloc(buffer.length()+length+IO_SIZE); if (!(*ml_comment) && buffer.append(line,length)) return 1; DBUG_RETURN(1); } return 0; DBUG_RETURN(0); } /***************************************************************** Loading
client/mysqldump.c +69 −61 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ ** master/autocommit code by Brian Aker <brian@tangent.org> ** SSL by ** Andrei Errapart <andreie@no.spam.ee> ** Tõnu Samuel <tonu@please.do.not.remove.this.spam.ee> ** Tõnu Samuel <tonu@please.do.not.remove.this.spam.ee> ** XML by Gary Huntress <ghuntress@mediaone.net> 10/10/01, cleaned up ** and adapted to mysqldump 05/11/01 by Jani Tolonen ** Added --single-transaction option 06/06/2002 by Peter Zaitsev Loading Loading @@ -1172,23 +1172,25 @@ static void print_xml_row(FILE *xml_file, const char *row_name, This function has logic to print the appropriate syntax depending on whether this is a procedure or functions RETURN 0 succes, 1 if error RETURN 0 Success 1 Error */ static uint dump_routines_for_db(char *db) { char query_buff[512]; const char *routine_type[]= {"FUNCTION", "PROCEDURE"}; char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3], *routine_name; char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3]; char *routine_name; int i; FILE *sql_file= md_result_file; MYSQL_RES *routine_res, *routine_list_res; MYSQL_ROW row, routine_list_row; DBUG_ENTER("dump_routines_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); mysql_real_escape_string(sock, db_name_buff, db, strlen(db)); DBUG_PRINT("enter", ("db: '%s'", db_name_buff)); /* nice comments */ if (opt_comments) Loading @@ -1201,7 +1203,7 @@ static uint dump_routines_for_db (char *db) if (lock_tables) mysql_query(sock, "LOCK TABLES mysql.proc READ"); fprintf(sql_file, "DELIMITER //\n"); fprintf(sql_file, "DELIMITER ;;\n"); /* 0, retrieve and dump functions, 1, procedures */ for (i= 0; i <= 1; i++) Loading Loading @@ -1238,16 +1240,18 @@ static uint dump_routines_for_db (char *db) if (strlen(row[2])) { if (opt_drop) fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */ //\n", fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;;\n", routine_type[i], routine_name); /* we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name */; fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/ //\n", fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n", row[1] /* sql_mode */); fprintf(sql_file, "/*!50003 %s */ //\n", row[2]); fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/ //\n"); fprintf(sql_file, "/*!50003 %s */;;\n", row[2]); fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/" ";;\n"); } } /* end of routine printing */ } /* end of list of routines */ Loading Loading @@ -1283,7 +1287,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, { MYSQL_RES *tableRes; MYSQL_ROW row; my_bool init=0; my_bool init=0, delayed, write_data, complete_insert; uint num_fields; char *result_table, *opt_quoted_table; const char *insert_option; Loading @@ -1292,31 +1296,33 @@ static uint get_table_structure(char *table, char *db, char *table_type, char query_buff[512]; FILE *sql_file = md_result_file; int len; DBUG_ENTER("get_table_structure"); DBUG_PRINT("enter", ("db: %s, table: %s", db, table)); DBUG_PRINT("enter", ("db: %s table: %s", db, table)); *ignore_flag= check_if_ignore_table(table, table_type); if (opt_delayed && (*ignore_flag & IGNORE_INSERT_DELAYED)) delayed= opt_delayed; if (delayed && (*ignore_flag & IGNORE_INSERT_DELAYED)) { delayed= 0; if (verbose) fprintf(stderr, "-- Unable to use delayed inserts for table '%s' because it's of\ type %s\n", table, table_type); "-- Warning: Unable to use delayed inserts for table '%s' " "because it's of type %s\n", table, table_type); } if (!(*ignore_flag & IGNORE_DATA)) complete_insert= 0; if ((write_data= !(*ignore_flag & IGNORE_DATA))) { complete_insert= opt_complete_insert; if (!insert_pat_inited) insert_pat_inited= init_dynamic_string(&insert_pat, "", 1024, 1024); else dynstr_set(&insert_pat, ""); } insert_option= ((opt_delayed && opt_ignore && !(*ignore_flag & IGNORE_INSERT_DELAYED)) ? " DELAYED IGNORE " : opt_delayed && !(*ignore_flag & IGNORE_INSERT_DELAYED) ? " DELAYED " : opt_ignore ? " IGNORE " : ""); insert_option= ((delayed && opt_ignore) ? " DELAYED IGNORE " : delayed ? " DELAYED " : opt_ignore ? " IGNORE " : ""); if (verbose) fprintf(stderr, "-- Retrieving table structure for table %s...\n", table); Loading Loading @@ -1448,17 +1454,18 @@ static uint get_table_structure(char *table, char *db, char *table_type, } /* if *ignore_flag & IGNORE_DATA is true, then we don't build up insert statements for the table's data. Note: in subsequent lines of code, this test will have to be performed each time we are appending to insert_pat. If write_data is true, then we build up insert statements for the table's data. Note: in subsequent lines of code, this test will have to be performed each time we are appending to insert_pat. */ if (!(*ignore_flag & IGNORE_DATA)) if (write_data) { dynstr_append_mem(&insert_pat, "INSERT ", 7); dynstr_append(&insert_pat, insert_option); dynstr_append_mem(&insert_pat, "INTO ", 5); dynstr_append(&insert_pat, opt_quoted_table); if (opt_complete_insert) if (complete_insert) { dynstr_append_mem(&insert_pat, " (", 2); } Loading @@ -1471,17 +1478,18 @@ static uint get_table_structure(char *table, char *db, char *table_type, } while ((row=mysql_fetch_row(tableRes))) { if (complete_insert) { if (init) { if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) dynstr_append_mem(&insert_pat, ", ", 2); } init=1; if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) dynstr_append(&insert_pat, quote_name(row[SHOW_FIELDNAME], name_buff, 0)); } } num_fields= (uint) mysql_num_rows(tableRes); mysql_free_result(tableRes); } Loading Loading @@ -1528,7 +1536,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, check_io(sql_file); } if (!(*ignore_flag & IGNORE_DATA)) if (write_data) { dynstr_append_mem(&insert_pat, "INSERT ", 7); dynstr_append(&insert_pat, insert_option); Loading @@ -1554,11 +1562,11 @@ static uint get_table_structure(char *table, char *db, char *table_type, fputs(",\n",sql_file); check_io(sql_file); } if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (complete_insert) dynstr_append_mem(&insert_pat, ", ", 2); } init=1; if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (opt_complete_insert) dynstr_append(&insert_pat, quote_name(row[SHOW_FIELDNAME], name_buff, 0)); if (!tFlag) Loading Loading @@ -1719,7 +1727,7 @@ static uint get_table_structure(char *table, char *db, char *table_type, check_io(sql_file); } } if (opt_complete_insert && !(*ignore_flag & IGNORE_DATA)) if (opt_complete_insert) { dynstr_append_mem(&insert_pat, ") VALUES ", 9); if (!extended_insert) Loading Loading @@ -1753,7 +1761,6 @@ static void dump_triggers_for_table (char *table, char *db) char name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3]; char query_buff[512]; FILE *sql_file = md_result_file; DBUG_ENTER("dump_triggers_for_table"); DBUG_PRINT("enter", ("db: %s, table: %s", db, table)); result_table= quote_name(table, table_buff, 1); Loading @@ -1771,11 +1778,11 @@ static void dump_triggers_for_table (char *table, char *db) } if (mysql_num_rows(result)) fprintf(sql_file, "\n/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;\n\ DELIMITER //;\n"); DELIMITER ;;\n"); while ((row=mysql_fetch_row(result))) { fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */ //\n\ /*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */ //\n\n", fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\ /*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */;;\n\n", row[6], /* sql_mode */ quote_name(row[0], name_buff, 0), /* Trigger */ row[4], /* Timing */ Loading @@ -1785,8 +1792,8 @@ DELIMITER //;\n"); } if (mysql_num_rows(result)) fprintf(sql_file, "DELIMITER ;//\n\ /*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;"); "DELIMITER ;\n" "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;\n"); mysql_free_result(result); DBUG_VOID_RETURN; } Loading @@ -1812,10 +1819,10 @@ static char *add_load_option(char *ptr,const char *object, /* ** Allow the user to specify field terminator strings like: ** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline) ** This is done by doubleing ' and add a end -\ if needed to avoid ** syntax errors from the SQL parser. Allow the user to specify field terminator strings like: "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline) This is done by doubling ' and add a end -\ if needed to avoid syntax errors from the SQL parser. */ static char *field_escape(char *to,const char *from,uint length) Loading Loading @@ -1889,7 +1896,7 @@ static void dump_table(char *table, char *db) Make sure you get the create table info before the following check for --no-data flag below. Otherwise, the create table info won't be printed. */ num_fields= get_table_structure(table, db, (char *)&table_type, &ignore_flag); num_fields= get_table_structure(table, db, table_type, &ignore_flag); /* Check --no-data flag */ if (dFlag) Loading @@ -1901,7 +1908,9 @@ static void dump_table(char *table, char *db) DBUG_VOID_RETURN; } DBUG_PRINT("info", ("ignore_flag %x num_fields %d", ignore_flag, num_fields)); DBUG_PRINT("info", ("ignore_flag: %x num_fields: %d", (int) ignore_flag, num_fields)); /* If the table type is a merge table or any type that has to be _completely_ ignored and no data dumped Loading @@ -1910,7 +1919,7 @@ static void dump_table(char *table, char *db) { if (verbose) fprintf(stderr, "-- Skipping data for table '%s' because it's of type %s\n", "-- Warning: Skipping data for table '%s' because it's of type %s\n", table, table_type); DBUG_VOID_RETURN; } Loading @@ -1927,7 +1936,6 @@ static void dump_table(char *table, char *db) result_table= quote_name(table,table_buff, 1); opt_quoted_table= quote_name(table, table_buff2, 0); if (verbose) fprintf(stderr, "-- Sending SELECT query...\n"); if (path) Loading
client/mysqltest.c +7 −9 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ typedef struct long code; } st_error; static st_error global_error[] = { static st_error global_error[] = { #include <mysqld_ername.h> { 0, 0 } }; Loading Loading @@ -218,7 +219,8 @@ static int ps_match_re(char *); static char *ps_eprint(int); static void ps_free_reg(void); static const char *embedded_server_groups[] = { static const char *embedded_server_groups[]= { "server", "embedded", "mysqltest_SERVER", Loading Loading @@ -735,9 +737,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) static int check_result(DYNAMIC_STRING* ds, const char *fname, my_bool require_option) { int error= RESULT_OK; int res= dyn_string_cmp(ds, fname); DBUG_ENTER("check_result"); if (res && require_option) Loading @@ -747,18 +747,16 @@ static int check_result(DYNAMIC_STRING* ds, const char *fname, break; /* ok */ case RESULT_LENGTH_MISMATCH: verbose_msg("Result length mismatch"); error= RESULT_LENGTH_MISMATCH; break; case RESULT_CONTENT_MISMATCH: verbose_msg("Result content mismatch"); error= RESULT_CONTENT_MISMATCH; break; default: /* impossible */ die("Unknown error code from dyn_string_cmp()"); } if (error) if (res != RESULT_OK) reject_dump(fname, ds->str, ds->length); DBUG_RETURN(error); DBUG_RETURN(res); } Loading