From 57839602acdaf93eb4d5076c94f75ce15deb46b8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 21:45:13 +0100 Subject: [PATCH 1/8] Use grep instead of egrep Use system inestad of exec mysql-test/t/trigger-grant.test: Use "system" instead of exec for system admin tasks No need to use "egrep", changing to "grep" --- mysql-test/t/trigger-grant.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/t/trigger-grant.test b/mysql-test/t/trigger-grant.test index 297aa445322..7a3f7a9fa94 100644 --- a/mysql-test/t/trigger-grant.test +++ b/mysql-test/t/trigger-grant.test @@ -232,9 +232,9 @@ CREATE TRIGGER trg5 BEFORE DELETE ON t1 FOR EACH ROW SET @a = 5; ---exec egrep -v '^definers=' $MYSQLTEST_VARDIR/master-data/mysqltest_db1/t1.TRG > $MYSQLTEST_VARDIR/tmp/t1.TRG ---exec echo "definers='' '@' '@abc@def@@' '@hostname' '@abcdef@@@hostname'" >> $MYSQLTEST_VARDIR/tmp/t1.TRG ---exec mv $MYSQLTEST_VARDIR/tmp/t1.TRG $MYSQLTEST_VARDIR/master-data/mysqltest_db1/t1.TRG +--system grep -v '^definers=' $MYSQLTEST_VARDIR/master-data/mysqltest_db1/t1.TRG > $MYSQLTEST_VARDIR/tmp/t1.TRG +--system echo "definers='' '@' '@abc@def@@' '@hostname' '@abcdef@@@hostname'" >> $MYSQLTEST_VARDIR/tmp/t1.TRG +--system mv $MYSQLTEST_VARDIR/tmp/t1.TRG $MYSQLTEST_VARDIR/master-data/mysqltest_db1/t1.TRG --echo From 4a311f0a50a7e8a18a046def80cae1928164dc19 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 22:05:39 +0100 Subject: [PATCH 2/8] Win fixes - Use tmp sh file both in system and popen client/mysqltest.c: Introduce common functions to handle unix emulation on windows using a temporary sh file. Use it both in my_popen and my_system. mysql-test/r/mysqltest.result: Update test result mysql-test/t/mysqltest.test: Fix "windows paths" in three places that doesn't automatically get fixed Uset the output file mysqltest.sql instead of con.sql as con is not an allowed filename on Windows Use system for util functions --- client/mysqltest.c | 43 +++++++++++++++++++++++------ mysql-test/r/mysqltest.result | 6 ++-- mysql-test/t/mysqltest.test | 52 +++++++++++++++++++---------------- 3 files changed, 66 insertions(+), 35 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 5836a109b6e..2486aab4c65 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -455,6 +455,7 @@ static void do_eval(DYNAMIC_STRING *query_eval, const char *query, static void str_to_file(const char *fname, char *str, int size); #ifdef __WIN__ +static void free_tmp_sh_file(); static void free_win_path_patterns(); #endif @@ -604,6 +605,7 @@ static void free_used_memory() mysql_server_end(); free_re(); #ifdef __WIN__ + free_tmp_sh_file(); free_win_path_patterns(); #endif DBUG_VOID_RETURN; @@ -1046,6 +1048,35 @@ int do_source(struct st_query *query) return open_file(name); } +//#ifdef __WIN__ +/* Variables used for temuprary sh files used for emulating Unix on Windows */ +char tmp_sh_name[64], tmp_sh_cmd[70]; + +static void init_tmp_sh_file() +{ + /* Format a name for the tmp sh file that is unique for this process */ + my_snprintf(tmp_sh_name, sizeof(tmp_sh_name), "tmp_%d.sh", getpid()); + /* Format the command to execute in order to run the script */ + my_snprintf(tmp_sh_cmd, sizeof(tmp_sh_cmd), "sh %s", tmp_sh_name); +} + +static void free_tmp_sh_file() +{ + my_delete(tmp_sh_name, MYF(0)); +} + + +FILE* my_popen(DYNAMIC_STRING* ds_cmd, const char* mode) +{ +#ifdef __WIN__ + /* Dump the command into a sh script file and execute with popen */ + str_to_file(tmp_sh_name, ds_cmd->str, ds_cmd->length); + return popen(tmp_sh_cmd, mode); +#else + return popen(ds_cmd->str, mode); +#endif +} + /* Execute given command. @@ -1092,7 +1123,7 @@ static void do_exec(struct st_query *query) DBUG_PRINT("info", ("Executing '%s' as '%s'", query->first_argument, cmd)); - if (!(res_file= popen(cmd, "r")) && query->abort_on_error) + if (!(res_file= my_popen(&ds_cmd, "r")) && query->abort_on_error) die("popen(\"%s\", \"r\") failed", query->first_argument); while (fgets(buf, sizeof(buf), res_file)) @@ -1365,15 +1396,9 @@ int do_modify_var(struct st_query *query, const char *name, int my_system(DYNAMIC_STRING* ds_cmd) { #ifdef __WIN__ - /* Dump the command into a sh script file and execute with "sh" */ - int err; - char tmp_sh_name[64], tmp_sh_cmd[70]; - my_snprintf(tmp_sh_name, sizeof(tmp_sh_name), "tmp_%d.sh", getpid()); - my_snprintf(tmp_sh_cmd, sizeof(tmp_sh_cmd), "sh %s", tmp_sh_name); + /* Dump the command into a sh script file and execute with system */ str_to_file(tmp_sh_name, ds_cmd->str, ds_cmd->length); - err= system(tmp_sh_cmd); - my_delete(tmp_sh_name, MYF(0)); - return err; + return system(tmp_sh_cmd); #else return system(ds_cmd->str); #endif diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 9512a99e35e..d6b635ce6da 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -379,9 +379,9 @@ mysqltest: At line 1: Could not open connection 'con2': 1049 Unknown database 'i mysqltest: At line 1: Illegal argument for port: 'illegal_port' mysqltest: At line 1: Illegal option to connect: SMTP OK -mysqltest: In included file "MYSQLTEST_VARDIR/tmp/con.sql": At line 7: Connection limit exhausted - increase MAX_CONS in mysqltest.c -mysqltest: In included file "MYSQLTEST_VARDIR/tmp/con.sql": At line 3: connection 'test_con1' not found in connection pool -mysqltest: In included file "MYSQLTEST_VARDIR/tmp/con.sql": At line 2: Connection test_con1 already exists +mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 7: Connection limit exhausted - increase MAX_CONS in mysqltest.c +mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool +mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists connect(localhost,root,,test,MASTER_PORT,MASTER_SOCKET); Output from mysqltest-x.inc Output from mysqltest-x.inc diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index f28df916ca1..a93aa24e812 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -599,6 +599,8 @@ echo $var3_var3; --error 1 --exec echo "source ;" | $MYSQL_TEST 2>&1 +# Fix win paths +--replace_result \\ / --error 1 --exec echo "source non_existingFile;" | $MYSQL_TEST 2>&1 @@ -806,6 +808,8 @@ while (!$i) } # Exceed max nesting level +# Fix win path +--replace_result \\ / --error 1 --exec echo "source include/mysqltest_while.inc;" | $MYSQL_TEST 2>&1 --error 1 @@ -925,41 +929,41 @@ select "a" as col1, "c" as col2; --exec echo "connect (con1,localhost,root,,,,,SMTP POP);" | $MYSQL_TEST 2>&1 # Repeat connect/disconnect ---exec echo "let \$i=100;" > $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "while (\$i)" >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "{" >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " connect (test_con1,localhost,root,,); " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " dec \$i; " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "}" >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "source $MYSQLTEST_VARDIR/tmp/con.sql; echo OK;" | $MYSQL_TEST 2>&1 +--system echo "let \$i=100;" > $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "while (\$i)" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "{" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " connect (test_con1,localhost,root,,); " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " dec \$i; " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "}" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK;" | $MYSQL_TEST 2>&1 # Repeat connect/disconnect, exceed max number of connections ---exec echo "let \$i=200;" > $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "while (\$i)" >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "{" >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " connect (test_con1,localhost,root,,); " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo " dec \$i; " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "}" >> $MYSQLTEST_VARDIR/tmp/con.sql +--system echo "let \$i=200;" > $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "while (\$i)" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "{" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " connect (test_con1,localhost,root,,); " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo " dec \$i; " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "}" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 ---exec echo "source $MYSQLTEST_VARDIR/tmp/con.sql;" | $MYSQL_TEST 2>&1 +--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 # Select disconnected connection ---exec echo "connect (test_con1,localhost,root,,);" > $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "connection test_con1;" >> $MYSQLTEST_VARDIR/tmp/con.sql +--system echo "connect (test_con1,localhost,root,,);" > $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "disconnect test_con1; " >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "connection test_con1;" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 ---exec echo "source $MYSQLTEST_VARDIR/tmp/con.sql;" | $MYSQL_TEST 2>&1 +--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 # Connection name already used ---exec echo "connect (test_con1,localhost,root,,);" > $MYSQLTEST_VARDIR/tmp/con.sql ---exec echo "connect (test_con1,localhost,root,,);" >> $MYSQLTEST_VARDIR/tmp/con.sql +--system echo "connect (test_con1,localhost,root,,);" > $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--system echo "connect (test_con1,localhost,root,,);" >> $MYSQLTEST_VARDIR/tmp/mysqltest.sql --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error 1 ---exec echo "source $MYSQLTEST_VARDIR/tmp/con.sql;" | $MYSQL_TEST 2>&1 +--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 # connect when "disable_abort_on_error" caused "connection not found" --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT @@ -977,6 +981,8 @@ connection con1; --exec $MYSQL_TEST < $MYSQL_TEST_DIR/include/mysqltest-x.inc --exec $MYSQL_TEST -x $MYSQL_TEST_DIR/include/mysqltest-x.inc --exec $MYSQL_TEST --test_file=$MYSQL_TEST_DIR/include/mysqltest-x.inc +# Fix Win paths +--replace_result \\ / --error 1 --exec $MYSQL_TEST -x non_existing_file.inc 2>&1 From 187f89a443d25312d8d83c719dfbe9612827abf6 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 22:08:34 +0100 Subject: [PATCH 3/8] Remove unused var Reduce code client/mysqltest.c: Remove the "cmd" variable in do_sleep, left unintentionaly after merge Implement the same elegeant solution to fund the command name in do_modify_ar --- client/mysqltest.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 2486aab4c65..d37f60959d0 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1346,7 +1346,6 @@ enum enum_operator SYNOPSIS do_modify_var() query called command - name human readable name of operator operator operation to perform on the var DESCRIPTION @@ -1355,15 +1354,16 @@ enum enum_operator */ -int do_modify_var(struct st_query *query, const char *name, +int do_modify_var(struct st_query *query, enum enum_operator operator) { const char *p= query->first_argument; VAR* v; if (!*p) - die("Missing arguments to %s", name); + die("Missing argument to %.*s", query->first_word_len, query->query); if (*p != '$') - die("First argument to %s must be a variable (start with $)", name); + die("First argument to %.*s must be a variable (start with $)", + query->first_word_len, query->query); v= var_get(p, &p, 1, 0); switch (operator) { case DO_DEC: @@ -1697,7 +1697,6 @@ int do_sleep(struct st_query *query, my_bool real_sleep) char *p= query->first_argument; char *sleep_start, *sleep_end= query->end; double sleep_val; - const char *cmd = (real_sleep ? "real_sleep" : "sleep"); while (my_isspace(charset_info, *p)) p++; @@ -4617,8 +4616,8 @@ int main(int argc, char **argv) case Q_SERVER_START: do_server_start(q); break; case Q_SERVER_STOP: do_server_stop(q); break; #endif - case Q_INC: do_modify_var(q, "inc", DO_INC); break; - case Q_DEC: do_modify_var(q, "dec", DO_DEC); break; + case Q_INC: do_modify_var(q, DO_INC); break; + case Q_DEC: do_modify_var(q, DO_DEC); break; case Q_ECHO: do_echo(q); query_executed= 1; break; case Q_SYSTEM: do_system(q); break; case Q_DELIMITER: From e33e0bfc938c7cc7c7c5e836109ad7302f4d5940 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 22:14:06 +0100 Subject: [PATCH 4/8] Revert mysql-test/lib/mtr_misc.pl: Revert change to outpout exe path and name in win format --- mysql-test/lib/mtr_misc.pl | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index 1f7ebdde457..a76f1b2d7b1 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -96,16 +96,7 @@ sub mtr_exe_exists (@) { map {$_.= ".exe"} @path if $::glob_win32; foreach my $path ( @path ) { - if ( -x $path ) - { - if ( $::glob_cygwin_perl ) - { - $path= `cygpath -w $path`; - # Chop off the \n that cygpath adds - $path=~ s/\n//; - } - return $path; - } + return $path if -x $path; } if ( @path == 1 ) { From 01a35c19cb81aa31934af62d4217bfcfe2bb6dd1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Mar 2006 22:18:04 +0100 Subject: [PATCH 5/8] Fix typo client/mysqltest.c: Fix typo, add extra "s" --- client/mysqltest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index d37f60959d0..09072d430f9 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1360,7 +1360,7 @@ int do_modify_var(struct st_query *query, const char *p= query->first_argument; VAR* v; if (!*p) - die("Missing argument to %.*s", query->first_word_len, query->query); + die("Missing arguments to %.*s", query->first_word_len, query->query); if (*p != '$') die("First argument to %.*s must be a variable (start with $)", query->first_word_len, query->query); From 60ee2bbecb795abba4e19aca3908a3ea01932025 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Mar 2006 07:50:04 +0100 Subject: [PATCH 6/8] Improve error message for faulty usage of "inc" and "dec" client/mysqltest.c: Improve error messages for "inc" and "dec" mysql-test/r/mysqltest.result: Update test result --- client/mysqltest.c | 6 +++--- mysql-test/r/mysqltest.result | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 09072d430f9..05304c1dd6d 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1360,9 +1360,9 @@ int do_modify_var(struct st_query *query, const char *p= query->first_argument; VAR* v; if (!*p) - die("Missing arguments to %.*s", query->first_word_len, query->query); + die("Missing argument to %.*s", query->first_word_len, query->query); if (*p != '$') - die("First argument to %.*s must be a variable (start with $)", + die("The argument to %.*s must be a variable (start with $)", query->first_word_len, query->query); v= var_get(p, &p, 1, 0); switch (operator) { @@ -1373,7 +1373,7 @@ int do_modify_var(struct st_query *query, v->int_val++; break; default: - die("Invalid operator to do_operator"); + die("Invalid operator to do_modify_var"); break; } v->int_dirty= 1; diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index d6b635ce6da..8055a33ec7d 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -305,8 +305,8 @@ mysqltest: At line 1: Invalid argument to real_sleep "abc" 101 hej 1 -mysqltest: At line 1: Missing arguments to inc -mysqltest: At line 1: First argument to inc must be a variable (start with $) +mysqltest: At line 1: Missing argument to inc +mysqltest: At line 1: The argument to inc must be a variable (start with $) mysqltest: At line 1: End of line junk detected: "1000" 4 4 @@ -315,8 +315,8 @@ mysqltest: At line 1: End of line junk detected: "1000" 99 hej -1 -mysqltest: At line 1: Missing arguments to dec -mysqltest: At line 1: First argument to dec must be a variable (start with $) +mysqltest: At line 1: Missing argument to dec +mysqltest: At line 1: The argument to dec must be a variable (start with $) mysqltest: At line 1: End of line junk detected: "1000" mysqltest: At line 1: Missing arguments to system, nothing to do! mysqltest: At line 1: Missing arguments to system, nothing to do! From 07d36fb99a4b9419f60d4c09efc7e6c3fde0051c Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Mar 2006 08:57:57 +0100 Subject: [PATCH 7/8] Enable ifdef for windows specific functions --- client/mysqltest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index 05304c1dd6d..770ca7e2d2a 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1048,7 +1048,7 @@ int do_source(struct st_query *query) return open_file(name); } -//#ifdef __WIN__ +#ifdef __WIN__ /* Variables used for temuprary sh files used for emulating Unix on Windows */ char tmp_sh_name[64], tmp_sh_cmd[70]; @@ -1064,7 +1064,7 @@ static void free_tmp_sh_file() { my_delete(tmp_sh_name, MYF(0)); } - +#endif FILE* my_popen(DYNAMIC_STRING* ds_cmd, const char* mode) { From f4c81a219a8842f9bb46fa79e5e5ff652b244850 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Mar 2006 14:34:20 +0100 Subject: [PATCH 8/8] Fix missing call to init_tmp_sh_file client/mysqltest.c: Add call to init_tmp_sh_file --- client/mysqltest.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/mysqltest.c b/client/mysqltest.c index 770ca7e2d2a..468b75c927f 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -4563,6 +4563,7 @@ int main(int argc, char **argv) init_var_hash(&cur_con->mysql); #ifdef __WIN__ + init_tmp_sh_file(); init_win_path_patterns(); #endif