Loading client/mysqltest.c +132 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,8 @@ enum enum_commands { Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP, Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES, Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, Q_LIST_FILES, Q_LIST_FILES_WRITE_FILE, Q_LIST_FILES_APPEND_FILE, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Loading Loading @@ -368,6 +369,9 @@ const char *command_names[]= "change_user", "mkdir", "rmdir", "list_files", "list_files_write_file", "list_files_append_file", 0 }; Loading Loading @@ -2836,6 +2840,126 @@ void do_rmdir(struct st_command *command) } /* SYNOPSIS get_list_files ds output ds_dirname dir to list ds_wild wild-card file pattern (can be empty) DESCRIPTION list all entries in directory (matching ds_wild if given) */ static int get_list_files(DYNAMIC_STRING *ds, const DYNAMIC_STRING *ds_dirname, const DYNAMIC_STRING *ds_wild) { uint i; MY_DIR *dir_info; FILEINFO *file; DBUG_ENTER("get_list_files"); DBUG_PRINT("info", ("listing directory: %s", ds_dirname->str)); /* Note that my_dir sorts the list if not given any flags */ if (!(dir_info= my_dir(ds_dirname->str, MYF(0)))) DBUG_RETURN(1); for (i= 0; i < (uint) dir_info->number_off_files; i++) { file= dir_info->dir_entry + i; if (file->name[0] == '.' && (file->name[1] == '\0' || (file->name[1] == '.' && file->name[2] == '\0'))) continue; /* . or .. */ if (ds_wild && ds_wild->length && wild_compare(file->name, ds_wild->str, 0)) continue; dynstr_append(ds, file->name); dynstr_append(ds, "\n"); } my_dirend(dir_info); DBUG_RETURN(0); } /* SYNOPSIS do_list_files command called command DESCRIPTION list_files <dir_name> [<file_name>] List files and directories in directory <dir_name> (like `ls`) [Matching <file_name>, where wild-cards are allowed] */ static void do_list_files(struct st_command *command) { int error; static DYNAMIC_STRING ds_dirname; static DYNAMIC_STRING ds_wild; const struct command_arg list_files_args[] = { {"dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to list"}, {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files"); check_command_args(command, command->first_argument, list_files_args, sizeof(list_files_args)/sizeof(struct command_arg), ' '); error= get_list_files(&ds_res, &ds_dirname, &ds_wild); handle_command_error(command, error); dynstr_free(&ds_dirname); dynstr_free(&ds_wild); DBUG_VOID_RETURN; } /* SYNOPSIS do_list_files_write_file_command command called command append append file, or create new DESCRIPTION list_files_{write|append}_file <filename> <dir_name> [<match_file>] List files and directories in directory <dir_name> (like `ls`) [Matching <match_file>, where wild-cards are allowed] Note: File will be truncated if exists and append is not true. */ static void do_list_files_write_file_command(struct st_command *command, my_bool append) { int error; static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_dirname; static DYNAMIC_STRING ds_wild; const struct command_arg list_files_args[] = { {"filename", ARG_STRING, TRUE, &ds_filename, "Filename for write"}, {"dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to list"}, {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files_write_file"); check_command_args(command, command->first_argument, list_files_args, sizeof(list_files_args)/sizeof(struct command_arg), ' '); init_dynamic_string(&ds_content, "", 1024, 1024); error= get_list_files(&ds_content, &ds_dirname, &ds_wild); handle_command_error(command, error); str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_dirname); dynstr_free(&ds_wild); DBUG_VOID_RETURN; } /* Read characters from line buffer or file. This is needed to allow my_ungetc() to buffer MAX_DELIMITER_LENGTH characters for a file Loading Loading @@ -7147,6 +7271,13 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_MKDIR: do_mkdir(command); break; case Q_RMDIR: do_rmdir(command); break; case Q_LIST_FILES: do_list_files(command); break; case Q_LIST_FILES_WRITE_FILE: do_list_files_write_file_command(command, FALSE); break; case Q_LIST_FILES_APPEND_FILE: do_list_files_write_file_command(command, TRUE); 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; Loading mysql-test/r/mysqltest.result +3 −0 Original line number Diff line number Diff line Loading @@ -725,6 +725,9 @@ drop table t1; mysqltest: At line 1: change user failed: Unknown database 'inexistent' mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO) mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES) file1.txt file1.txt file2.txt SELECT 'c:\\a.txt' AS col; col z Loading mysql-test/suite/parts/inc/partition_check_drop.inc +9 −11 Original line number Diff line number Diff line Loading @@ -11,9 +11,6 @@ #------------------------------------------------------------------------------# # Original Author: mleich # # Original Date: 2006-05-12 # # Change Author: # # Change Date: # # Change: # ################################################################################ if ($no_debug) Loading @@ -23,25 +20,26 @@ if ($no_debug) if ($do_file_tests) { let $ls_file= $MYSQLTEST_VARDIR/master-data/test/tmp2; # List the files belonging to the table t1 --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* > $MYSQLTEST_VARDIR/master-data/test/tmp2 || true --list_files_write_file $ls_file $MYSQLTEST_VARDIR/master-data/test t1* --chmod 0644 $ls_file if ($with_directories) { --exec ls $MYSQLTEST_VARDIR/tmp/t1* >> $MYSQLTEST_VARDIR/master-data/test/tmp2 || true --list_files_append_file $ls_file $MYSQLTEST_VARDIR/tmp t1* } eval SET @aux = CONCAT('load_file(''$MYSQLTEST_VARDIR','/master-data/test/tmp2'')'); let $file_list= `SELECT @aux`; eval SET @aux = load_file('$ls_file'); } if (!$do_file_tests) { let $file_list= '--- not determined ---'; SET @aux = '--- not determined ---'; } # UPDATE the current filelist of the table t1 within t0_definition # Note: This list should be empty, because the table t1 was dropped ! eval INSERT INTO t0_definition SET state = 'old', file_list = $file_list ON DUPLICATE KEY UPDATE file_list = $file_list; # eval UPDATE t0_definition SET file_list = $file_list WHERE state = 'old'; eval INSERT INTO t0_definition SET state = 'old', file_list = @aux ON DUPLICATE KEY UPDATE file_list = @aux; # eval UPDATE t0_definition SET file_list = @aux WHERE state = 'old'; # Check if filelist is empty. let $found_garbage= `SELECT file_list <> '' FROM t0_definition WHERE state = 'old'`; Loading mysql-test/suite/parts/inc/partition_layout.inc +1 −1 Original line number Diff line number Diff line Loading @@ -10,5 +10,5 @@ eval SHOW CREATE TABLE t1; if ($ls) { --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* --list_files $MYSQLTEST_VARDIR/master-data/test t1* } mysql-test/suite/parts/inc/partition_layout_check1.inc +4 −4 Original line number Diff line number Diff line Loading @@ -38,12 +38,12 @@ if ($do_file_tests) { # List the files belonging to the table t1 let $ls_file= $MYSQLTEST_VARDIR/master-data/test/tmp2; let $err_file= $MYSQLTEST_VARDIR/master-data/test/err2; --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* > $ls_file 2>$err_file || true --list_files_write_file $ls_file $MYSQLTEST_VARDIR/master-data/test t1* --chmod 0644 $ls_file if ($with_directories) { --exec ls $MYSQLTEST_VARDIR/mysql-test-data-dir/t1* >> $ls_file 2>>$err_file || true --exec ls $MYSQLTEST_VARDIR/mysql-test-idx-dir/t1* >> $ls_file 2>>$err_file || true --list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-data-dir t1* --list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-idx-dir t1* } eval SET @aux = load_file('$ls_file'); } Loading Loading
client/mysqltest.c +132 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,8 @@ enum enum_commands { Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP, Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES, Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, Q_LIST_FILES, Q_LIST_FILES_WRITE_FILE, Q_LIST_FILES_APPEND_FILE, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Loading Loading @@ -368,6 +369,9 @@ const char *command_names[]= "change_user", "mkdir", "rmdir", "list_files", "list_files_write_file", "list_files_append_file", 0 }; Loading Loading @@ -2836,6 +2840,126 @@ void do_rmdir(struct st_command *command) } /* SYNOPSIS get_list_files ds output ds_dirname dir to list ds_wild wild-card file pattern (can be empty) DESCRIPTION list all entries in directory (matching ds_wild if given) */ static int get_list_files(DYNAMIC_STRING *ds, const DYNAMIC_STRING *ds_dirname, const DYNAMIC_STRING *ds_wild) { uint i; MY_DIR *dir_info; FILEINFO *file; DBUG_ENTER("get_list_files"); DBUG_PRINT("info", ("listing directory: %s", ds_dirname->str)); /* Note that my_dir sorts the list if not given any flags */ if (!(dir_info= my_dir(ds_dirname->str, MYF(0)))) DBUG_RETURN(1); for (i= 0; i < (uint) dir_info->number_off_files; i++) { file= dir_info->dir_entry + i; if (file->name[0] == '.' && (file->name[1] == '\0' || (file->name[1] == '.' && file->name[2] == '\0'))) continue; /* . or .. */ if (ds_wild && ds_wild->length && wild_compare(file->name, ds_wild->str, 0)) continue; dynstr_append(ds, file->name); dynstr_append(ds, "\n"); } my_dirend(dir_info); DBUG_RETURN(0); } /* SYNOPSIS do_list_files command called command DESCRIPTION list_files <dir_name> [<file_name>] List files and directories in directory <dir_name> (like `ls`) [Matching <file_name>, where wild-cards are allowed] */ static void do_list_files(struct st_command *command) { int error; static DYNAMIC_STRING ds_dirname; static DYNAMIC_STRING ds_wild; const struct command_arg list_files_args[] = { {"dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to list"}, {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files"); check_command_args(command, command->first_argument, list_files_args, sizeof(list_files_args)/sizeof(struct command_arg), ' '); error= get_list_files(&ds_res, &ds_dirname, &ds_wild); handle_command_error(command, error); dynstr_free(&ds_dirname); dynstr_free(&ds_wild); DBUG_VOID_RETURN; } /* SYNOPSIS do_list_files_write_file_command command called command append append file, or create new DESCRIPTION list_files_{write|append}_file <filename> <dir_name> [<match_file>] List files and directories in directory <dir_name> (like `ls`) [Matching <match_file>, where wild-cards are allowed] Note: File will be truncated if exists and append is not true. */ static void do_list_files_write_file_command(struct st_command *command, my_bool append) { int error; static DYNAMIC_STRING ds_content; static DYNAMIC_STRING ds_filename; static DYNAMIC_STRING ds_dirname; static DYNAMIC_STRING ds_wild; const struct command_arg list_files_args[] = { {"filename", ARG_STRING, TRUE, &ds_filename, "Filename for write"}, {"dirname", ARG_STRING, TRUE, &ds_dirname, "Directory to list"}, {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files_write_file"); check_command_args(command, command->first_argument, list_files_args, sizeof(list_files_args)/sizeof(struct command_arg), ' '); init_dynamic_string(&ds_content, "", 1024, 1024); error= get_list_files(&ds_content, &ds_dirname, &ds_wild); handle_command_error(command, error); str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append); dynstr_free(&ds_content); dynstr_free(&ds_filename); dynstr_free(&ds_dirname); dynstr_free(&ds_wild); DBUG_VOID_RETURN; } /* Read characters from line buffer or file. This is needed to allow my_ungetc() to buffer MAX_DELIMITER_LENGTH characters for a file Loading Loading @@ -7147,6 +7271,13 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_MKDIR: do_mkdir(command); break; case Q_RMDIR: do_rmdir(command); break; case Q_LIST_FILES: do_list_files(command); break; case Q_LIST_FILES_WRITE_FILE: do_list_files_write_file_command(command, FALSE); break; case Q_LIST_FILES_APPEND_FILE: do_list_files_write_file_command(command, TRUE); 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; Loading
mysql-test/r/mysqltest.result +3 −0 Original line number Diff line number Diff line Loading @@ -725,6 +725,9 @@ drop table t1; mysqltest: At line 1: change user failed: Unknown database 'inexistent' mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO) mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES) file1.txt file1.txt file2.txt SELECT 'c:\\a.txt' AS col; col z Loading
mysql-test/suite/parts/inc/partition_check_drop.inc +9 −11 Original line number Diff line number Diff line Loading @@ -11,9 +11,6 @@ #------------------------------------------------------------------------------# # Original Author: mleich # # Original Date: 2006-05-12 # # Change Author: # # Change Date: # # Change: # ################################################################################ if ($no_debug) Loading @@ -23,25 +20,26 @@ if ($no_debug) if ($do_file_tests) { let $ls_file= $MYSQLTEST_VARDIR/master-data/test/tmp2; # List the files belonging to the table t1 --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* > $MYSQLTEST_VARDIR/master-data/test/tmp2 || true --list_files_write_file $ls_file $MYSQLTEST_VARDIR/master-data/test t1* --chmod 0644 $ls_file if ($with_directories) { --exec ls $MYSQLTEST_VARDIR/tmp/t1* >> $MYSQLTEST_VARDIR/master-data/test/tmp2 || true --list_files_append_file $ls_file $MYSQLTEST_VARDIR/tmp t1* } eval SET @aux = CONCAT('load_file(''$MYSQLTEST_VARDIR','/master-data/test/tmp2'')'); let $file_list= `SELECT @aux`; eval SET @aux = load_file('$ls_file'); } if (!$do_file_tests) { let $file_list= '--- not determined ---'; SET @aux = '--- not determined ---'; } # UPDATE the current filelist of the table t1 within t0_definition # Note: This list should be empty, because the table t1 was dropped ! eval INSERT INTO t0_definition SET state = 'old', file_list = $file_list ON DUPLICATE KEY UPDATE file_list = $file_list; # eval UPDATE t0_definition SET file_list = $file_list WHERE state = 'old'; eval INSERT INTO t0_definition SET state = 'old', file_list = @aux ON DUPLICATE KEY UPDATE file_list = @aux; # eval UPDATE t0_definition SET file_list = @aux WHERE state = 'old'; # Check if filelist is empty. let $found_garbage= `SELECT file_list <> '' FROM t0_definition WHERE state = 'old'`; Loading
mysql-test/suite/parts/inc/partition_layout.inc +1 −1 Original line number Diff line number Diff line Loading @@ -10,5 +10,5 @@ eval SHOW CREATE TABLE t1; if ($ls) { --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* --list_files $MYSQLTEST_VARDIR/master-data/test t1* }
mysql-test/suite/parts/inc/partition_layout_check1.inc +4 −4 Original line number Diff line number Diff line Loading @@ -38,12 +38,12 @@ if ($do_file_tests) { # List the files belonging to the table t1 let $ls_file= $MYSQLTEST_VARDIR/master-data/test/tmp2; let $err_file= $MYSQLTEST_VARDIR/master-data/test/err2; --exec ls $MYSQLTEST_VARDIR/master-data/test/t1* > $ls_file 2>$err_file || true --list_files_write_file $ls_file $MYSQLTEST_VARDIR/master-data/test t1* --chmod 0644 $ls_file if ($with_directories) { --exec ls $MYSQLTEST_VARDIR/mysql-test-data-dir/t1* >> $ls_file 2>>$err_file || true --exec ls $MYSQLTEST_VARDIR/mysql-test-idx-dir/t1* >> $ls_file 2>>$err_file || true --list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-data-dir t1* --list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-idx-dir t1* } eval SET @aux = load_file('$ls_file'); } Loading