Loading client/mysqltest.c +90 −30 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ Holyfoot */ #define MTEST_VERSION "3.1" #define MTEST_VERSION "3.2" #include <my_global.h> #include <mysql_embed.h> Loading Loading @@ -273,7 +273,7 @@ enum enum_commands { Q_DISABLE_PARSING, Q_ENABLE_PARSING, Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_CHMOD_FILE, Q_CHMOD_FILE, Q_APPEND_FILE, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Loading Loading @@ -357,6 +357,7 @@ const char *command_names[]= /* Don't execute any more commands, compare result */ "exit", "chmod", "append_file", 0 }; Loading Loading @@ -436,6 +437,7 @@ void dump_progress(); void do_eval(DYNAMIC_STRING *query_eval, const char *query, const char *query_end, my_bool pass_through_escape_chars); void str_to_file(const char *fname, char *str, int size); void str_to_file2(const char *fname, char *str, int size, my_bool append); #ifdef __WIN__ void free_tmp_sh_file(); Loading Loading @@ -2063,6 +2065,38 @@ void read_until_delimiter(DYNAMIC_STRING *ds, } void do_write_file_command(struct st_command *command, my_bool append) { static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_delimiter; const struct command_arg write_file_args[] = { "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" }; DBUG_ENTER("do_write_file"); check_command_args(command, command->first_argument, write_file_args, sizeof(write_file_args)/sizeof(struct command_arg), ' '); /* If no delimiter was provided, use EOF */ if (ds_delimiter.length == 0) dynstr_set(&ds_delimiter, "EOF"); init_dynamic_string(&ds_content, "", 1024, 1024); read_until_delimiter(&ds_content, &ds_delimiter); DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; } /* SYNOPSIS do_write_file Loading Loading @@ -2092,33 +2126,38 @@ void read_until_delimiter(DYNAMIC_STRING *ds, void do_write_file(struct st_command *command) { static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_delimiter; const struct command_arg write_file_args[] = { "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" }; DBUG_ENTER("do_write_file"); do_write_file_command(command, FALSE); } check_command_args(command, command->first_argument, write_file_args, sizeof(write_file_args)/sizeof(struct command_arg), ' '); /* If no delimiter was provided, use EOF */ if (ds_delimiter.length == 0) dynstr_set(&ds_delimiter, "EOF"); /* SYNOPSIS do_append_file command called command init_dynamic_string(&ds_content, "", 1024, 1024); read_until_delimiter(&ds_content, &ds_delimiter); DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); str_to_file(ds_filename.str, ds_content.str, ds_content.length); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; DESCRIPTION append_file <file_name> [<delimiter>]; <what to write line 1> <...> < what to write line n> EOF --append_file <file_name>; <what to write line 1> <...> < what to write line n> EOF Append everything between the "append_file" command and 'delimiter' to "file_name" Default <delimiter> is EOF */ void do_append_file(struct st_command *command) { do_write_file_command(command, TRUE); } Loading Loading @@ -4271,21 +4310,22 @@ int parse_args(int argc, char **argv) return 0; } /* Write the content of str into file SYNOPSIS str_to_file str_to_file2 fname - name of file to truncate/create and write to str - content to write to file size - size of content witten to file append - append to file instead of overwriting old file */ void str_to_file(const char *fname, char *str, int size) void str_to_file2(const char *fname, char *str, int size, my_bool append) { int fd; char buff[FN_REFLEN]; int flags= O_WRONLY | O_CREAT; if (!test_if_hard_path(fname)) { strxmov(buff, opt_basedir, fname, NullS); Loading @@ -4293,14 +4333,33 @@ void str_to_file(const char *fname, char *str, int size) } fn_format(buff, fname, "", "", MY_UNPACK_FILENAME); if ((fd= my_open(buff, O_WRONLY | O_CREAT | O_TRUNC, if (!append) flags|= O_TRUNC; if ((fd= my_open(buff, flags, MYF(MY_WME | MY_FFNF))) < 0) die("Could not open %s: errno = %d", buff, errno); if (append && my_seek(fd, 0, SEEK_END, MYF(0)) == MY_FILEPOS_ERROR) die("Could not find end of file %s: errno = %d", buff, errno); if (my_write(fd, (byte*)str, size, MYF(MY_WME|MY_FNABP))) die("write failed"); my_close(fd, MYF(0)); } /* Write the content of str into file SYNOPSIS str_to_file fname - name of file to truncate/create and write to str - content to write to file size - size of content witten to file */ void str_to_file(const char *fname, char *str, int size) { str_to_file2(fname, str, size, FALSE); } void dump_result_to_reject_file(char *buf, int size) { Loading Loading @@ -5867,6 +5926,7 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_FILE_EXIST: do_file_exist(command); break; case Q_WRITE_FILE: do_write_file(command); break; case Q_APPEND_FILE: do_append_file(command); break; case Q_COPY_FILE: do_copy_file(command); break; case Q_CHMOD_FILE: do_chmod_file(command); break; case Q_PERL: do_perl(command); break; Loading mysql-test/t/mysqltest.test +19 −0 Original line number Diff line number Diff line Loading @@ -1484,6 +1484,25 @@ END_DELIMITER file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; # ---------------------------------------------------------------------------- # test for append_file # ---------------------------------------------------------------------------- write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Content for test_file1 EOF file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Appended text EOF file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Appended text on nonexisting file EOF # ---------------------------------------------------------------------------- # test for file_exist # ---------------------------------------------------------------------------- Loading Loading
client/mysqltest.c +90 −30 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ Holyfoot */ #define MTEST_VERSION "3.1" #define MTEST_VERSION "3.2" #include <my_global.h> #include <mysql_embed.h> Loading Loading @@ -273,7 +273,7 @@ enum enum_commands { Q_DISABLE_PARSING, Q_ENABLE_PARSING, Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_CHMOD_FILE, Q_CHMOD_FILE, Q_APPEND_FILE, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Loading Loading @@ -357,6 +357,7 @@ const char *command_names[]= /* Don't execute any more commands, compare result */ "exit", "chmod", "append_file", 0 }; Loading Loading @@ -436,6 +437,7 @@ void dump_progress(); void do_eval(DYNAMIC_STRING *query_eval, const char *query, const char *query_end, my_bool pass_through_escape_chars); void str_to_file(const char *fname, char *str, int size); void str_to_file2(const char *fname, char *str, int size, my_bool append); #ifdef __WIN__ void free_tmp_sh_file(); Loading Loading @@ -2063,6 +2065,38 @@ void read_until_delimiter(DYNAMIC_STRING *ds, } void do_write_file_command(struct st_command *command, my_bool append) { static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_delimiter; const struct command_arg write_file_args[] = { "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" }; DBUG_ENTER("do_write_file"); check_command_args(command, command->first_argument, write_file_args, sizeof(write_file_args)/sizeof(struct command_arg), ' '); /* If no delimiter was provided, use EOF */ if (ds_delimiter.length == 0) dynstr_set(&ds_delimiter, "EOF"); init_dynamic_string(&ds_content, "", 1024, 1024); read_until_delimiter(&ds_content, &ds_delimiter); DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; } /* SYNOPSIS do_write_file Loading Loading @@ -2092,33 +2126,38 @@ void read_until_delimiter(DYNAMIC_STRING *ds, void do_write_file(struct st_command *command) { static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_delimiter; const struct command_arg write_file_args[] = { "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" }; DBUG_ENTER("do_write_file"); do_write_file_command(command, FALSE); } check_command_args(command, command->first_argument, write_file_args, sizeof(write_file_args)/sizeof(struct command_arg), ' '); /* If no delimiter was provided, use EOF */ if (ds_delimiter.length == 0) dynstr_set(&ds_delimiter, "EOF"); /* SYNOPSIS do_append_file command called command init_dynamic_string(&ds_content, "", 1024, 1024); read_until_delimiter(&ds_content, &ds_delimiter); DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); str_to_file(ds_filename.str, ds_content.str, ds_content.length); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; DESCRIPTION append_file <file_name> [<delimiter>]; <what to write line 1> <...> < what to write line n> EOF --append_file <file_name>; <what to write line 1> <...> < what to write line n> EOF Append everything between the "append_file" command and 'delimiter' to "file_name" Default <delimiter> is EOF */ void do_append_file(struct st_command *command) { do_write_file_command(command, TRUE); } Loading Loading @@ -4271,21 +4310,22 @@ int parse_args(int argc, char **argv) return 0; } /* Write the content of str into file SYNOPSIS str_to_file str_to_file2 fname - name of file to truncate/create and write to str - content to write to file size - size of content witten to file append - append to file instead of overwriting old file */ void str_to_file(const char *fname, char *str, int size) void str_to_file2(const char *fname, char *str, int size, my_bool append) { int fd; char buff[FN_REFLEN]; int flags= O_WRONLY | O_CREAT; if (!test_if_hard_path(fname)) { strxmov(buff, opt_basedir, fname, NullS); Loading @@ -4293,14 +4333,33 @@ void str_to_file(const char *fname, char *str, int size) } fn_format(buff, fname, "", "", MY_UNPACK_FILENAME); if ((fd= my_open(buff, O_WRONLY | O_CREAT | O_TRUNC, if (!append) flags|= O_TRUNC; if ((fd= my_open(buff, flags, MYF(MY_WME | MY_FFNF))) < 0) die("Could not open %s: errno = %d", buff, errno); if (append && my_seek(fd, 0, SEEK_END, MYF(0)) == MY_FILEPOS_ERROR) die("Could not find end of file %s: errno = %d", buff, errno); if (my_write(fd, (byte*)str, size, MYF(MY_WME|MY_FNABP))) die("write failed"); my_close(fd, MYF(0)); } /* Write the content of str into file SYNOPSIS str_to_file fname - name of file to truncate/create and write to str - content to write to file size - size of content witten to file */ void str_to_file(const char *fname, char *str, int size) { str_to_file2(fname, str, size, FALSE); } void dump_result_to_reject_file(char *buf, int size) { Loading Loading @@ -5867,6 +5926,7 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_FILE_EXIST: do_file_exist(command); break; case Q_WRITE_FILE: do_write_file(command); break; case Q_APPEND_FILE: do_append_file(command); break; case Q_COPY_FILE: do_copy_file(command); break; case Q_CHMOD_FILE: do_chmod_file(command); break; case Q_PERL: do_perl(command); break; Loading
mysql-test/t/mysqltest.test +19 −0 Original line number Diff line number Diff line Loading @@ -1484,6 +1484,25 @@ END_DELIMITER file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; # ---------------------------------------------------------------------------- # test for append_file # ---------------------------------------------------------------------------- write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Content for test_file1 EOF file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Appended text EOF file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Appended text on nonexisting file EOF # ---------------------------------------------------------------------------- # test for file_exist # ---------------------------------------------------------------------------- Loading