MySQL Lists are EOL. Please join:

List:Internals« Previous MessageNext Message »
From:msvensson Date:August 31 2005 3:16pm
Subject:bk commit into 4.1 tree (msvensson:1.2329) BUG#11316
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2329 05/08/31 17:16:05 msvensson@neptunus.(none) +14 -0
  BUG#11316: mysqltest, problems when assigning value with '#' to $variable
   - Add stricter checking of syntax in mysqltest

  mysql-test/t/rpl_loaddata.test
    1.13 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/rpl_error_ignored_table.test
    1.12 05/08/31 17:16:01 msvensson@neptunus.(none) +2 -2
    Remove extra ;

  mysql-test/t/rpl_drop.test
    1.3 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/rpl_EE_error.test
    1.4 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/rpl000001.test
    1.38 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/mysqltest.test
    1.6 05/08/31 17:16:01 msvensson@neptunus.(none) +63 -0
    Add more tests for replace, replace_columns, comments with commands and sync_with_master

  mysql-test/t/innodb.test
    1.71 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/handler.test
    1.21 05/08/31 17:16:01 msvensson@neptunus.(none) +9 -9
    Remove extra ;

  mysql-test/t/flush.test
    1.15 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/t/drop.test
    1.19 05/08/31 17:16:01 msvensson@neptunus.(none) +5 -5
    Remove extra ;

  mysql-test/t/create_select_tmp.test
    1.4 05/08/31 17:16:01 msvensson@neptunus.(none) +8 -8
    Remove extra ;

  mysql-test/t/create.test
    1.55 05/08/31 17:16:01 msvensson@neptunus.(none) +1 -1
    Remove extra ;

  mysql-test/r/mysqltest.result
    1.6 05/08/31 17:16:01 msvensson@neptunus.(none) +30 -2
    Update test results

  client/mysqltest.c
    1.172 05/08/31 17:16:01 msvensson@neptunus.(none) +415 -444
    Stricter checking of syntax in mysqltest.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	neptunus.(none)
# Root:	/home/msvensson/mysql/bug11316/my41-bug11316

--- 1.3/mysql-test/t/create_select_tmp.test	2004-08-26 17:26:34 +02:00
+++ 1.4/mysql-test/t/create_select_tmp.test	2005-08-31 17:16:01 +02:00
@@ -11,19 +11,19 @@
 --enable_warnings
 CREATE TABLE t1 ( a int );
 INSERT INTO t1 VALUES (1),(2),(1);
---error 1062;
+--error 1062
 CREATE TABLE t2 ( PRIMARY KEY (a) ) ENGINE=INNODB SELECT a FROM t1;
---error 1146;
+--error 1146
 select * from t2;
---error 1062;
+--error 1062
 CREATE TEMPORARY TABLE t2 ( PRIMARY KEY (a) ) ENGINE=INNODB SELECT a FROM t1;
---error 1146;
+--error 1146
 select * from t2;
---error 1062;
+--error 1062
 CREATE TABLE t2 ( PRIMARY KEY (a) ) ENGINE=MYISAM SELECT a FROM t1;
---error 1146;
+--error 1146
 select * from t2;
---error 1062;
+--error 1062
 CREATE TEMPORARY TABLE t2 ( PRIMARY KEY (a) ) ENGINE=MYISAM SELECT a FROM t1;
---error 1146;
+--error 1146
 select * from t2;

--- 1.3/mysql-test/t/rpl_EE_error.test	2004-03-20 11:29:41 +01:00
+++ 1.4/mysql-test/t/rpl_EE_error.test	2005-08-31 17:16:01 +02:00
@@ -22,7 +22,7 @@
 insert into t1 values(2);
 set sql_log_bin=1;
 save_master_pos;
---error 1062;
+--error 1062
 insert into t1 values(1),(2);
 drop table t1;
 save_master_pos;

--- 1.2/mysql-test/t/rpl_drop.test	2004-07-20 11:00:05 +02:00
+++ 1.3/mysql-test/t/rpl_drop.test	2005-08-31 17:16:01 +02:00
@@ -5,7 +5,7 @@
 drop table if exists t1, t2;
 --enable_warnings
 create table t1 (a int);
---error 1051;
+--error 1051
 drop table t1, t2;
 save_master_pos;
 connection slave;

--- 1.11/mysql-test/t/rpl_error_ignored_table.test	2004-05-17 00:52:11 +02:00
+++ 1.12/mysql-test/t/rpl_error_ignored_table.test	2005-08-31 17:16:01 +02:00
@@ -6,7 +6,7 @@
 connection master;
 create table t1 (a int primary key);
 # generate an error that goes to the binlog
---error 1062;
+--error 1062
 insert into t1 values (1),(1);
 save_master_pos;
 connection slave;
@@ -45,7 +45,7 @@
 kill @id;
 drop table t2,t3;
 connection master;
---error 0,1053;
+--error 0,1053
 reap;
 connection master1;
 show binlog events from 79;

--- 1.5/mysql-test/r/mysqltest.result	2005-08-16 17:10:49 +02:00
+++ 1.6/mysql-test/r/mysqltest.result	2005-08-31 17:16:01 +02:00
@@ -308,13 +308,41 @@
 test3
 test4
 1
-mysqltest: In included file "./include/mysqltest_while.inc": At line 32: Nesting too deeply
+mysqltest: In included file "./include/mysqltest_while.inc": At line 64: Nesting too deeply
 mysqltest: At line 1: missing '(' in while
 mysqltest: At line 1: missing ')' in while
 mysqltest: At line 1: Missing '{' after while. Found "dec $i"
 mysqltest: At line 1: Stray '}' - end of block before beginning
-mysqltest: At line 1: Stray '}' - end of block before beginning
+mysqltest: At line 1: Stray 'end' command - end of block before beginning
 mysqltest: At line 1: query '' failed: 1065: Query was empty
 mysqltest: At line 1: Missing '{' after while. Found "echo hej"
 mysqltest: At line 3: Missing end of block
 mysqltest: At line 1: Missing newline between while and '{'
+mysqltest: At line 1: missing '(' in if
+mysqltest: At line 1: Stray 'end' command - end of block before beginning
+select "b" bs col1, "c" bs col2;
+col1	col2
+b	c
+seledt "b" bs dol1, "d" bs dol2;
+dol1	dol2
+b	d
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a'
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a;'
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a'
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a '
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a b c'
+mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a b c '
+select "a" as col1, "c" as col2;
+col1	col2
+b	c
+select "a" as col1, "c" as col2;
+col1	col2
+b	d
+mysqltest: At line 1: Wrong column number to replace_column in 'replace_column a'
+mysqltest: At line 1: Wrong number of arguments to replace_column in 'replace_column 1'
+mysqltest: At line 1: Wrong column number to replace_column in 'replace_column a b'
+mysqltest: At line 1: Wrong column number to replace_column in 'replace_column a 1'
+mysqltest: At line 1: Wrong column number to replace_column in 'replace_column 1 b c '
+mysqltest: At line 1: Invalid integer argument "10!"
+mysqltest: At line 1: End of line junk detected: "!"
+mysqltest: At line 1: Invalid integer argument "a"

--- 1.5/mysql-test/t/mysqltest.test	2005-08-16 17:10:49 +02:00
+++ 1.6/mysql-test/t/mysqltest.test	2005-08-31 17:16:01 +02:00
@@ -706,6 +706,69 @@
 --exec echo -e "while (0){\n echo hej;" | $MYSQL_TEST 2>&1
 
 # ----------------------------------------------------------------------------
+# Test error messages returned from comments starting with a command
+# ----------------------------------------------------------------------------
+--error 1
+--exec echo "--if the other server is down" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "-- end when ..." | $MYSQL_TEST 2>&1
+
+# ----------------------------------------------------------------------------
+# Test replace
+# ----------------------------------------------------------------------------
+--replace_result a b
+select "a" as col1, "c" as col2;
+
+--replace_result a b c d
+select "a" as col1, "c" as col2;
+
+--error 1
+--exec echo "--replace_result a" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "--replace_result a;" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "replace_result a;" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "replace_result a ;" | $MYSQL_TEST 2>&1
+--exec echo "replace_result a b;" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "--replace_result a b c" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "replace_result a b c ;" | $MYSQL_TEST 2>&1
+
+
+--replace_column 1 b
+select "a" as col1, "c" as col2;
+
+--replace_column 1 b 2 d
+select "a" as col1, "c" as col2;
+
+--error 1
+--exec echo "--replace_column a" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "--replace_column 1" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "--replace_column a b" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "--replace_column a 1" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "--replace_column 1 b c " | $MYSQL_TEST 2>&1
+
+
+# ----------------------------------------------------------------------------
+# Test sync_with_master
+# ----------------------------------------------------------------------------
+--error 1
+--exec echo "save_master_pos; sync_with_master 10!;" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "save_master_pos; sync_with_master 10 !;" | $MYSQL_TEST 2>&1
+--error 1
+--exec echo "save_master_pos; sync_with_master a;" | $MYSQL_TEST 2>&1
+
+# ----------------------------------------------------------------------------
 # TODO Test queries, especially their errormessages... so it's easy to debug 
 # new scripts and diagnose errors
 # ----------------------------------------------------------------------------

--- 1.54/mysql-test/t/create.test	2005-06-09 17:06:00 +02:00
+++ 1.55/mysql-test/t/create.test	2005-08-31 17:16:01 +02:00
@@ -238,7 +238,7 @@
 create table `t1 `(a int);
 --error 1102
 create database `db1 `;
---error 1166;
+--error 1166
 create table t1(`a ` int);
 
 #

--- 1.70/mysql-test/t/innodb.test	2005-06-07 11:54:26 +02:00
+++ 1.71/mysql-test/t/innodb.test	2005-08-31 17:16:01 +02:00
@@ -1183,7 +1183,7 @@
 #
 
 CREATE TABLE t1 ( a char(10) ) ENGINE=InnoDB;
---error 1214;
+--error 1214
 SELECT a FROM t1 WHERE MATCH (a) AGAINST ('test' IN BOOLEAN MODE);
 DROP TABLE t1;
 

--- 1.12/mysql-test/t/rpl_loaddata.test	2004-03-20 11:29:41 +01:00
+++ 1.13/mysql-test/t/rpl_loaddata.test	2005-08-31 17:16:01 +02:00
@@ -123,7 +123,7 @@
 reset master;
 create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
 unique(day));
---error 1062;
+--error 1062
 load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
 terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
 '\n##\n' starting by '>' ignore 1 lines;

--- 1.171/client/mysqltest.c	2005-08-16 17:10:49 +02:00
+++ 1.172/client/mysqltest.c	2005-08-31 17:16:01 +02:00
@@ -75,7 +75,7 @@
 #define LAZY_GUESS_BUF_SIZE 8192
 #define INIT_Q_LINES	  1024
 #define MIN_VAR_ALLOC	  32
-#define BLOCK_STACK_DEPTH  16
+#define BLOCK_STACK_DEPTH  32
 #define MAX_EXPECTED_ERRORS 10
 #define QUERY_SEND  1
 #define QUERY_REAP  2
@@ -136,12 +136,12 @@
 
 static int record = 0, opt_sleep=0;
 static char *db = 0, *pass=0;
-const char* user = 0, *host = 0, *unix_sock = 0, *opt_basedir="./";
+const char *user = 0, *host = 0, *unix_sock = 0, *opt_basedir="./";
 static int port = 0;
 static my_bool opt_big_test= 0, opt_compress= 0, silent= 0, verbose = 0;
 static my_bool tty_password= 0, ps_protocol= 0, ps_protocol_enabled= 0;
 static uint start_lineno, *lineno;
-const char* manager_user="root",*manager_host=0;
+const char *manager_user="root",*manager_host=0;
 char *manager_pass=0;
 int manager_port=MYSQL_MANAGER_PORT;
 int manager_wait_timeout=3;
@@ -151,11 +151,16 @@
 static const char *load_default_groups[]= { "mysqltest","client",0 };
 static char line_buffer[MAX_DELIMITER], *line_buffer_pos= line_buffer;
 
-static char* file_name_stack[MAX_INCLUDE_DEPTH];
-static int cur_file_name;
-static FILE* file_stack[MAX_INCLUDE_DEPTH];
-static FILE** cur_file;
-static FILE** file_stack_end;
+typedef struct
+{
+  FILE* file;
+  const char *file_name;
+} test_file;
+
+static test_file file_stack[MAX_INCLUDE_DEPTH];
+static test_file* cur_file;
+static test_file* file_stack_end;
+
 static uint lineno_stack[MAX_INCLUDE_DEPTH];
 static char TMPDIR[FN_REFLEN];
 static char delimiter[MAX_DELIMITER]= DEFAULT_DELIMITER;
@@ -293,7 +298,7 @@
 /* this should really be called command */
 struct st_query
 {
-  char *query, *query_buf,*first_argument,*end;
+  char *query, *query_buf,*first_argument,*last_argument,*end;
   int first_word_len;
   my_bool abort_on_error, require_file;
   match_err expected_errno[MAX_EXPECTED_ERRORS];
@@ -401,7 +406,7 @@
 int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname);
 void reject_dump(const char *record_file, char *buf, int size);
 
-int close_connection(struct st_query* q);
+int close_connection(struct st_query*);
 static void set_charset(struct st_query*);
 VAR* var_get(const char *var_name, const char** var_name_end, my_bool raw,
 	     my_bool ignore_not_existing);
@@ -427,9 +432,9 @@
 void free_pointer_array(POINTER_ARRAY *pa);
 static int initialize_replace_buffer(void);
 static void free_replace_buffer(void);
-static void do_eval(DYNAMIC_STRING* query_eval, const char *query);
+static void do_eval(DYNAMIC_STRING *query_eval, const char *query);
 void str_to_file(const char *fname, char *str, int size);
-int do_server_op(struct st_query* q,const char *op);
+int do_server_op(struct st_query *q,const char *op);
 
 struct st_replace *glob_replace;
 static char *out_buff;
@@ -453,9 +458,9 @@
 static void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
 				      int len);
 
-static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
+static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
 {
-  const char* p;
+  const char *p;
   register char c;
   register int escaped = 0;
   VAR* v;
@@ -512,13 +517,13 @@
 static void close_files()
 {
   DBUG_ENTER("close_files");
-  for (; cur_file != file_stack ; cur_file--)
+  for (; cur_file != (file_stack-1) ; cur_file--)
   {
-    if (*cur_file != stdin && *cur_file)
-      my_fclose(*cur_file,MYF(0));
-    char* p= file_name_stack[cur_file_name--]= 0;
-    if (p)
-      free(p);
+    DBUG_PRINT("info", ("file_name: %s", cur_file->file_name));
+    if (cur_file->file && cur_file->file != stdin)
+      my_fclose(cur_file->file, MYF(0));
+    my_free((gptr)cur_file->file_name, MYF(MY_ALLOW_ZERO_PTR));
+    cur_file->file_name= 0;
   }
   DBUG_VOID_RETURN;
 }
@@ -561,17 +566,17 @@
   DBUG_VOID_RETURN;
 }
 
-static void die(const char* fmt, ...)
+static void die(const char *fmt, ...)
 {
   va_list args;
   DBUG_ENTER("die");
   va_start(args, fmt);
   if (fmt)
   {
-    fprintf(stderr, "%s: ", my_progname);
-    if (*cur_file && cur_file > (file_stack + 1)  )
+    fprintf(stderr, "mysqltest: ");
+    if (cur_file && cur_file != file_stack)
       fprintf(stderr, "In included file \"%s\": ",
-              file_name_stack[cur_file_name]);
+              cur_file->file_name);
     fprintf(stderr, "At line %u: ", start_lineno);
     vfprintf(stderr, fmt, args);
     fprintf(stderr, "\n");
@@ -596,7 +601,7 @@
   exit(62);
 }
 
-static void verbose_msg(const char* fmt, ...)
+static void verbose_msg(const char *fmt, ...)
 {
   va_list args;
   DBUG_ENTER("verbose_msg");
@@ -605,7 +610,7 @@
 
   va_start(args, fmt);
 
-  fprintf(stderr, "%s: At line %u: ", my_progname, start_lineno);
+  fprintf(stderr, "mysqltest: At line %u: ", start_lineno);
   vfprintf(stderr, fmt, args);
   fprintf(stderr, "\n");
   va_end(args);
@@ -615,12 +620,12 @@
 
 void init_parser()
 {
-  parser.current_line = parser.read_lines = 0;
-  memset(&var_reg,0, sizeof(var_reg));
+  parser.current_line= parser.read_lines= 0;
+  memset(&var_reg, 0, sizeof(var_reg));
 }
 
 
-int dyn_string_cmp(DYNAMIC_STRING* ds, const char* fname)
+int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
 {
   MY_STAT stat_info;
   char *tmp, *res_ptr;
@@ -686,7 +691,7 @@
   DBUG_RETURN(res);
 }
 
-static int check_result(DYNAMIC_STRING* ds, const char* fname,
+static int check_result(DYNAMIC_STRING* ds, const char *fname,
 			my_bool require_option)
 {
   int error = 0;
@@ -714,7 +719,7 @@
 }
 
 
-VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw,
+VAR* var_get(const char *var_name, const char** var_name_end, my_bool raw,
 	     my_bool ignore_not_existing)
 {
   int digit;
@@ -727,7 +732,7 @@
   digit = *++var_name - '0';
   if (digit < 0 || digit >= 10)
   {
-    const char* save_var_name = var_name, *end;
+    const char *save_var_name = var_name, *end;
     uint length;
     end = (var_name_end) ? *var_name_end : 0;
     while (my_isvar(charset_info,*var_name) && var_name != end)
@@ -769,7 +774,7 @@
   DBUG_RETURN(0);
 }
 
-static VAR *var_obtain(const char* name, int len)
+static VAR *var_obtain(const char *name, int len)
 {
   VAR* v;
   if ((v = (VAR*)hash_search(&var_hash, name, len)))
@@ -806,8 +811,10 @@
 }
 
 
-int open_file(const char* name)
+int open_file(const char *name)
 {
+  DBUG_ENTER("open_file");
+  DBUG_PRINT("enter", ("name: %s", name));
   char buff[FN_REFLEN];
   if (!test_if_hard_path(name))
   {
@@ -816,13 +823,17 @@
   }
   fn_format(buff,name,"","",4);
 
-  if (*cur_file && cur_file == file_stack_end)
+  if (cur_file == file_stack_end)
     die("Source directives are nesting too deep");
-  if (!(*++cur_file = my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0))))
+  cur_file++;
+  if (!(cur_file->file = my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0))))
+  {
+    cur_file--;
     die("Could not open file %s", buff);
+  }
+  cur_file->file_name= my_strdup(buff, MYF(MY_FAE));
   *++lineno=1;
-  file_name_stack[++cur_file_name]= strdup(buff);
-  return 0;
+  DBUG_RETURN(0);
 }
 
 
@@ -833,14 +844,15 @@
 
 int check_eol_junk(const char *eol)
 {
-  char *p= (char*)eol;
+  DBUG_ENTER("check_eol_junk");
+  DBUG_PRINT("enter", ("eol: %s", eol));
+  const char *p= eol;
   /* Remove all spacing chars except new line */
-  while (*p && my_isspace(charset_info,*p) && (*p != '\n'))
+  while (*p && my_isspace(charset_info, *p) && (*p != '\n'))
     p++;
 
   /* Check for extra delimiter */
-  size_t l= strlen(delimiter);
-  if (*p && strlen(p) >= l && !strncmp(p, delimiter, l) )
+  if (*p && !strncmp(p, delimiter, delimiter_length))
     die("Extra delimiter \"%s\" found", delimiter);
 
   /* Allow trailing # comment */
@@ -850,12 +862,12 @@
       die("Missing delimiter");
     die("End of line junk detected: \"%s\"", p);
   }
-  return 0;
+  DBUG_RETURN(0);
 }
 
 
 /* ugly long name, but we are following the convention */
-int do_wait_for_slave_to_stop(struct st_query* q __attribute__((unused)))
+int do_wait_for_slave_to_stop(struct st_query *q __attribute__((unused)))
 {
   MYSQL* mysql = &cur_con->mysql;
   for (;;)
@@ -880,57 +892,56 @@
       break;
     my_sleep(SLAVE_POLL_INTERVAL);
   }
-  return check_eol_junk(q->first_argument);
+  return 0;
 }
 
-int do_require_manager(struct st_query* q)
+int do_require_manager(struct st_query *query __attribute__((unused)) )
 {
   if (!manager)
     abort_not_supported_test();
-  return check_eol_junk(q->first_argument);
+  return 0;
 }
 
 #ifndef EMBEDDED_LIBRARY
-int do_server_start(struct st_query* q)
+int do_server_start(struct st_query *q)
 {
-  check_eol_junk(q->first_argument);
-  return do_server_op(q,"start");
+  return do_server_op(q, "start");
 }
 
-int do_server_stop(struct st_query* q)
+int do_server_stop(struct st_query *q)
 {
-  check_eol_junk(q->first_argument);
-  return do_server_op(q,"stop");
+  return do_server_op(q, "stop");
 }
 
-int do_server_op(struct st_query* q,const char* op)
+int do_server_op(struct st_query *q, const char *op)
 {
-  char* p=q->first_argument;
-  char com_buf[256],*com_p;
+  char *p= q->first_argument;
+  char com_buf[256], *com_p;
   if (!manager)
   {
     die("Manager is not initialized, manager commands are not possible");
   }
-  com_p=strmov(com_buf,op);
-  com_p=strmov(com_p,"_exec ");
+  com_p= strmov(com_buf,op);
+  com_p= strmov(com_p,"_exec ");
   if (!*p)
-    die("Missing server name in server_%s",op);
-  while (*p && !my_isspace(charset_info,*p))
+    die("Missing server name in server_%s", op);
+  while (*p && !my_isspace(charset_info, *p))
    *com_p++= *p++;
-  *com_p++=' ';
-  com_p=int10_to_str(manager_wait_timeout,com_p,10);
-  *com_p++ = '\n';
-  *com_p=0;
-  if (mysql_manager_command(manager,com_buf,(int)(com_p-com_buf)))
-    die("Error in command: %s(%d)",manager->last_error,manager->last_errno);
+  *com_p++= ' ';
+  com_p= int10_to_str(manager_wait_timeout, com_p, 10);
+  *com_p++= '\n';
+  *com_p= 0;
+  if (mysql_manager_command(manager, com_buf, (int)(com_p-com_buf)))
+    die("Error in command: %s(%d)", manager->last_error, manager->last_errno);
   while (!manager->eof)
   {
-    if (mysql_manager_fetch_line(manager,com_buf,sizeof(com_buf)))
+    if (mysql_manager_fetch_line(manager, com_buf, sizeof(com_buf)))
       die("Error fetching result line: %s(%d)", manager->last_error,
 	  manager->last_errno);
   }
 
-  return check_eol_junk(p);
+  q->last_argument= p;
+  return 0;
 }
 #endif
 
@@ -940,7 +951,7 @@
 
   SYNOPSIS
     do_source()
-    q	called command
+    query	called command
 
   DESCRIPTION
     source <file_name>
@@ -949,26 +960,24 @@
 
 */
 
-int do_source(struct st_query* q)
+int do_source(struct st_query *query)
 {
-  char* p=q->first_argument, *name;
+  char *p= query->first_argument, *name;
   if (!*p)
     die("Missing file name in source");
-  name = p;
+  name= p;
   while (*p && !my_isspace(charset_info,*p))
     p++;
   if (*p)
-  {
     *p++= 0;
-    check_eol_junk(p);
-  }
-  /* If this file has already been sourced, dont source it again.
-     It's already available in the q_lines cache */
+  query->last_argument= p;
+  /*
+     If this file has already been sourced, dont source it again.
+     It's already available in the q_lines cache
+  */
   if (parser.current_line < (parser.read_lines - 1))
     return 0;
   return open_file(name);
-
-
 }
 
 
@@ -977,7 +986,7 @@
 
   SYNOPSIS
     do_exec()
-    q	called command
+    query	called command
 
   DESCRIPTION
     exec <command>
@@ -989,24 +998,25 @@
 
 */
 
-static void do_exec(struct st_query* q)
+static void do_exec(struct st_query *query)
 {
   int error;
   DYNAMIC_STRING *ds= NULL;
   DYNAMIC_STRING ds_tmp;
   char buf[1024];
   FILE *res_file;
-  char *cmd= q->first_argument;
+  char *cmd= query->first_argument;
   DBUG_ENTER("do_exec");
 
   while (*cmd && my_isspace(charset_info, *cmd))
     cmd++;
   if (!*cmd)
     die("Missing argument in exec");
+  query->last_argument= query->end;
 
   DBUG_PRINT("info", ("Executing '%s'", cmd));
 
-  if (!(res_file= popen(cmd, "r")) && q->abort_on_error)
+  if (!(res_file= popen(cmd, "r")) && query->abort_on_error)
     die("popen(\"%s\", \"r\") failed", cmd);
 
   if (disable_result_log)
@@ -1019,7 +1029,7 @@
   }
   else
   {
-    if (q->record_file[0])
+    if (query->record_file[0])
     {
       init_dynamic_string(&ds_tmp, "", 16384, 65536);
       ds= &ds_tmp;
@@ -1033,20 +1043,20 @@
   error= pclose(res_file);
   if (error != 0)
   {
-    uint i, status= WEXITSTATUS(error);
+    uint status= WEXITSTATUS(error), i;
     my_bool ok= 0;
 
-    if (q->abort_on_error)
+    if (query->abort_on_error)
       die("command \"%s\" failed", cmd);
 
     DBUG_PRINT("info",
                ("error: %d, status: %d", error, status));
-    for (i=0 ; i < q->expected_errors ; i++)
+    for (i= 0; i < query->expected_errors; i++)
     {
       DBUG_PRINT("info", ("expected error: %d",
-                          q->expected_errno[i].code.errnum));
-      if ((q->expected_errno[i].type == ERR_ERRNO) &&
-          (q->expected_errno[i].code.errnum == status))
+                          query->expected_errno[i].code.errnum));
+      if ((query->expected_errno[i].type == ERR_ERRNO) &&
+          (query->expected_errno[i].code.errnum == status))
       {
         ok= 1;
         verbose_msg("command \"%s\" failed with expected error: %d",
@@ -1057,12 +1067,12 @@
       die("command \"%s\" failed with wrong error: %d",
           cmd, status);
   }
-  else if (q->expected_errno[0].type == ERR_ERRNO &&
-           q->expected_errno[0].code.errnum != 0)
+  else if (query->expected_errno[0].type == ERR_ERRNO &&
+           query->expected_errno[0].code.errnum != 0)
   {
     /* Error code we wanted was != 0, i.e. not an expected success */
     die("command \"%s\" succeeded - should have failed with errno %d...",
-        cmd, q->expected_errno[0].code.errnum);
+        cmd, query->expected_errno[0].code.errnum);
   }
 
   if (!disable_result_log)
@@ -1072,14 +1082,14 @@
 
     if (record)
     {
-      if (!q->record_file[0] && !result_file)
+      if (!query->record_file[0] && !result_file)
         die("Missing result file");
       if (!result_file)
-        str_to_file(q->record_file, ds->str, ds->length);
+        str_to_file(query->record_file, ds->str, ds->length);
     }
-    else if (q->record_file[0])
+    else if (query->record_file[0])
     {
-      error= check_result(ds, q->record_file, q->require_file);
+      error= check_result(ds, query->record_file, query->require_file);
     }
     if (ds == &ds_tmp)
       dynstr_free(&ds_tmp);
@@ -1087,7 +1097,7 @@
 }
 
 
-int var_query_set(VAR* v, const char* p, const char** p_end)
+int var_query_set(VAR* v, const char *p, const char** p_end)
 {
   char* end = (char*)((p_end && *p_end) ? *p_end : p + strlen(p));
   MYSQL_RES *res;
@@ -1150,7 +1160,7 @@
   memcpy(dest->str_val,src->str_val,src->str_val_len+1);
 }
 
-int eval_expr(VAR* v, const char* p, const char** p_end)
+int eval_expr(VAR* v, const char *p, const char** p_end)
 {
   VAR* vp;
   if (*p == '$')
@@ -1192,69 +1202,57 @@
 }
 
 
-/*
-  Increase the value of a variable
-
-  SYNOPSIS
-    do_inc()
-    q	called command
-
-  DESCRIPTION
-    inc $var_name
-
-*/
-
-int do_inc(struct st_query* q)
+enum enum_operator
 {
-  char* p=q->first_argument;
-  VAR* v;
-  if (!*p)
-    die("Missing arguments to inc");
-  if (*p != '$')
-    die("First argument to inc must be a variable (start with $)");
-  v = var_get(p, 0, 1, 0);
-  v->int_val++;
-  v->int_dirty = 1;
-  while (*p && !my_isspace(charset_info,*p))
-    p++;
-  check_eol_junk(p);
-  return 0;
-}
-
+  DO_DEC,
+  DO_INC
+};
 
 /*
-  Decrease the value of a variable
+  Decrease or increase the value of a variable
 
   SYNOPSIS
-    do_dec()
-    q	called command
+    do_modify_var()
+    query	called command
+    name        human readable name of operator
+    operator    operation to perform on the var
 
   DESCRIPTION
     dec $var_name
+    inc $var_name
 
 */
 
-int do_dec(struct st_query* q)
+int do_modify_var(struct st_query *query, const char *name,
+                  enum enum_operator operator)
 {
-  char* p=q->first_argument;
+  char *p= query->first_argument;
   VAR* v;
   if (!*p)
-    die("Missing arguments to dec");
+    die("Missing arguments to %s", name);
   if (*p != '$')
-    die("First argument to dec must be a variable (start with $)");
-  v = var_get(p, 0, 1, 0);
-  v->int_val--;
-  v->int_dirty = 1;
-  while (*p && !my_isspace(charset_info,*p))
-    p++;
-  check_eol_junk(p);
+    die("First argument to %s must be a variable (start with $)", name);
+  v= var_get(p, &p, 1, 0);
+  switch (operator){
+  case DO_DEC:
+    v->int_val--;
+    break;
+  case DO_INC:
+    v->int_val++;
+    break;
+  default:
+    die("Invalid operator to do_operator");
+    break;
+  }
+  v->int_dirty= 1;
+  query->last_argument= ++p;
   return 0;
 }
 
 
-int do_system(struct st_query* q)
+int do_system(struct st_query *q)
 {
-  char* p=q->first_argument;
+  char *p=q->first_argument;
   VAR v;
   var_init(&v, 0, 0, 0, 0);
   eval_expr(&v, p, 0); /* NULL terminated */
@@ -1277,6 +1275,7 @@
   else
     die("Missing arguments to system, nothing to do!");
   var_free(&v);
+  q->last_argument= q->end;
   return 0;
 }
 
@@ -1300,10 +1299,10 @@
 
 */
 
-int do_echo(struct st_query* q)
+int do_echo(struct st_query *q)
 {
-  char* p=q->first_argument;
-  DYNAMIC_STRING *ds= NULL;
+  char *p= q->first_argument;
+  DYNAMIC_STRING *ds;
   DYNAMIC_STRING ds_tmp;
   VAR v;
   var_init(&v,0,0,0,0);
@@ -1311,7 +1310,7 @@
   if (q->record_file[0])
   {
     init_dynamic_string(&ds_tmp, "", 256, 512);
-    ds = &ds_tmp;
+    ds= &ds_tmp;
   }
   else
     ds= &ds_res;
@@ -1323,40 +1322,27 @@
   var_free(&v);
   if (ds == &ds_tmp)
     dynstr_free(&ds_tmp);
+  q->last_argument= q->end;
   return 0;
 }
 
 
-int do_sync_with_master2(const char* p)
+int do_sync_with_master2(long offset)
 {
   MYSQL_RES* res;
   MYSQL_ROW row;
-  MYSQL* mysql = &cur_con->mysql;
+  MYSQL* mysql= &cur_con->mysql;
   char query_buf[FN_REFLEN+128];
-  int offset= 0, tries= 0;
+  int tries= 0;
   int rpl_parse;
 
   if (!master_pos.file[0])
   {
     die("Line %u: Calling 'sync_with_master' without calling 'save_master_pos'", start_lineno);
   }
-  rpl_parse = mysql_rpl_parse_enabled(mysql);
+  rpl_parse= mysql_rpl_parse_enabled(mysql);
   mysql_disable_rpl_parse(mysql);
 
-  const char* offset_str= p;
-  /* Step until end of integer arg and check it */
-  while (*p && !my_isspace(charset_info, *p))
-  {
-    if (!my_isdigit(charset_info, *p))
-      die("Invalid integer argument \"%s\"", offset_str);
-    p++;
-  }
-  check_eol_junk(p);
-
-  if (*offset_str)
-    offset = atoi(offset_str);
-
-
   sprintf(query_buf, "select master_pos_wait('%s', %ld)", master_pos.file,
 	  master_pos.pos + offset);
 
@@ -1366,10 +1352,10 @@
     die("line %u: failed in %s: %d: %s", start_lineno, query_buf,
 	mysql_errno(mysql), mysql_error(mysql));
 
-  if (!(last_result = res = mysql_store_result(mysql)))
+  if (!(last_result= res= mysql_store_result(mysql)))
     die("line %u: mysql_store_result() returned NULL for '%s'", start_lineno,
 	query_buf);
-  if (!(row = mysql_fetch_row(res)))
+  if (!(row= mysql_fetch_row(res)))
     die("line %u: empty result in %s", start_lineno, query_buf);
   if (!row[0])
   {
@@ -1394,9 +1380,23 @@
   return 0;
 }
 
-int do_sync_with_master(struct st_query* q)
+int do_sync_with_master(struct st_query *query)
 {
-  return do_sync_with_master2(q->first_argument);
+  long offset= 0;
+  char *p= query->first_argument;
+  const char *offset_start= p;
+  const char *offset_end= query->end;
+  int error;
+  if (*offset_start)
+  {
+    for (; my_isdigit(charset_info, *p); p++)
+      offset = offset * 10 + *p - '0';
+
+    if(*p && !my_isspace(charset_info, *p))
+      die("Invalid integer argument \"%s\"", offset_start);
+    query->last_argument= p;
+  }
+  return do_sync_with_master2(offset);
 }
 
 int do_save_master_pos()
@@ -1435,7 +1435,7 @@
 
   SYNOPSIS
    do_let()
-    q	called command
+    query	called command
 
   DESCRIPTION
     let $<var_name>=<var_val><delimiter>
@@ -1449,34 +1449,32 @@
    Program will die if error detected
 */
 
-int do_let(struct st_query* q)
+int do_let(struct st_query *query)
 {
-  char* p=q->first_argument;
+  char *p= query->first_argument;
   char *var_name, *var_name_end, *var_val_start;
 
   /* Find <var_name> */
   if (!*p)
     die("Missing arguments to let");
-  var_name = p;
-  while (*p && *p != '=' && !my_isspace(charset_info,*p))
+  var_name= p;
+  while (*p && (*p != '=') && !my_isspace(charset_info,*p))
     p++;
-  var_name_end = p;
-  if (var_name+1==var_name_end)
+  var_name_end= p;
+  if (var_name+1 == var_name_end)
     die("Missing variable name in let");
-  while (*p && (*p != '=' || my_isspace(charset_info,*p)))
-    p++;
-  if (*p == '=')
+  while (my_isspace(charset_info,*p))
     p++;
-  else
+  if (*p++ != '=')
     die("Missing assignment operator in let");
 
   /* Find start of <var_val> */
   while (*p && my_isspace(charset_info,*p))
     p++;
-  var_val_start = p;
-
+  var_val_start= p;
+  query->last_argument= query->end;
   /* Assign var_val to var_name */
-  return var_set(var_name, var_name_end, var_val_start, q->end);
+  return var_set(var_name, var_name_end, var_val_start, query->end);
 }
 
 
@@ -1495,28 +1493,25 @@
 }
 
 
-int do_rpl_probe(struct st_query* q)
+int do_rpl_probe(struct st_query *query __attribute__((unused)))
 {
   DBUG_ENTER("do_rpl_probe");
   if (mysql_rpl_probe(&cur_con->mysql))
     die("Failed in mysql_rpl_probe(): '%s'", mysql_error(&cur_con->mysql));
-  check_eol_junk(q->first_argument);
   DBUG_RETURN(0);
 }
 
 
-int do_enable_rpl_parse(struct st_query* q)
+int do_enable_rpl_parse(struct st_query *query __attribute__((unused)))
 {
   mysql_enable_rpl_parse(&cur_con->mysql);
-  check_eol_junk(q->first_argument);
   return 0;
 }
 
 
-int do_disable_rpl_parse(struct st_query* q)
+int do_disable_rpl_parse(struct st_query *query __attribute__((unused)))
 {
   mysql_disable_rpl_parse(&cur_con->mysql);
-  check_eol_junk(q->first_argument);
   return 0;
 }
 
@@ -1535,57 +1530,52 @@
 
 */
 
-int do_sleep(struct st_query* q, my_bool real_sleep)
+int do_sleep(struct st_query *query, my_bool real_sleep)
 {
-  char *p=q->first_argument;
-  while (*p && my_isspace(charset_info,*p))
+  int error= 0;
+  char *p= query->first_argument;
+  char *sleep_start, *sleep_end= query->end;
+  double sleep_val;
+
+  while (my_isspace(charset_info, *p))
     p++;
   if (!*p)
     die("Missing argument to sleep");
+  sleep_start= p;
+  /* Check that arg starts with a digit, not handled by my_strtod */
+  if (!my_isdigit(charset_info, *sleep_start))
+    die("Invalid argument to sleep \"%s\"", query->first_argument);
+  sleep_val= my_strtod(sleep_start, &sleep_end, &error);
+  if (error)
+    die("Invalid argument to sleep \"%s\"", query->first_argument);
+
+  /* Fixed sleep time selected by --sleep option */
   if (opt_sleep && !real_sleep)
-    my_sleep(opt_sleep * 1000000L);
-  else
-  {
-    int err= 0;
-    double val=1;
-    const char* val_str= p;
-    while (*p && !my_isspace(charset_info,*p))
-    {
-      if (!my_isdigit(charset_info, *p) && !my_ispunct(charset_info, *p))
-        err= 1;
-      p++;
-    }
-    if (!err)
-      val= my_strtod(val_str, &p, &err);
-    if (err)
-      die("Invalid argument to sleep \"%s\"", q->first_argument);
-    my_sleep((ulong) (val * 1000000L));
-  }
-  return check_eol_junk(p++);
+    sleep_val= opt_sleep;
+
+  my_sleep((ulong) (sleep_val * 1000000L));
+  query->last_argument= sleep_end;
+  return 0;
 }
 
-static void get_file_name(char *filename, struct st_query* q)
+static void get_file_name(char *filename, struct st_query *q)
 {
-
-
-  char* p=q->first_argument, *name;
+  char *p= q->first_argument, *name;
   if (!*p)
     die("Missing file name argument");
-  name = p;
+  name= p;
   while (*p && !my_isspace(charset_info,*p))
     p++;
   if (*p)
-  {
     *p++= 0;
-    check_eol_junk(p);
-  }
+  q->last_argument= p;
   strmake(filename, name, FN_REFLEN);
 }
 
-static void set_charset(struct st_query* q)
+static void set_charset(struct st_query *q)
 {
-  char* charset_name= q->first_argument;
-  char* p;
+  char *charset_name= q->first_argument;
+  char *p;
 
   if (!charset_name || !*charset_name)
     die("Missing charset name in 'character_set'");
@@ -1594,19 +1584,16 @@
   while (*p && !my_isspace(charset_info,*p))
     p++;
   if(*p)
-  {
     *p++= 0;
-    check_eol_junk(p);
-  }
-
+  q->last_argument= p;
   charset_info= get_charset_by_csname(charset_name,MY_CS_PRIMARY,MYF(MY_WME));
   if (!charset_info)
     abort_not_supported_test();
 }
 
-static uint get_errcodes(match_err *to,struct st_query* q)
+static uint get_errcodes(match_err *to,struct st_query *q)
 {
-  char* p= q->first_argument;
+  char *p= q->first_argument;
   uint count= 0;
   DBUG_ENTER("get_errcodes");
 
@@ -1636,7 +1623,7 @@
     }
     count++;
   } while (*(p++) == ',');
-
+  q->last_argument= (p - 1);
   to[count].type= ERR_EMPTY;                        /* End of data */
   DBUG_RETURN(count);
 }
@@ -1650,7 +1637,7 @@
 
 
 static char *get_string(char **to_ptr, char **from_ptr,
-			struct st_query* q)
+			struct st_query *q)
 {
   reg1 char c,sep;
   char *to= *to_ptr, *from= *from_ptr, *start=to;
@@ -1733,7 +1720,7 @@
 static void get_replace(struct st_query *q)
 {
   uint i;
-  char *from=q->first_argument;
+  char *from= q->first_argument;
   char *buff,*start;
   char word_end_chars[256],*pos;
   POINTER_ARRAY to_array,from_array;
@@ -1751,7 +1738,7 @@
     char *to=buff;
     to=get_string(&buff, &from, q);
     if (!*from)
-      die("Wrong number of arguments to replace in %s", q->query);
+      die("Wrong number of arguments to replace_result in '%s'", q->query);
     insert_pointer_name(&from_array,to);
     to=get_string(&buff, &from, q);
     insert_pointer_name(&to_array,to);
@@ -1765,10 +1752,11 @@
 				  (uint) from_array.typelib.count,
 				  word_end_chars)) ||
       initialize_replace_buffer())
-    die("Can't initialize replace from %s", q->query);
+    die("Can't initialize replace from '%s'", q->query);
   free_pointer_array(&from_array);
   free_pointer_array(&to_array);
   my_free(start, MYF(0));
+  q->last_argument= q->end;
   DBUG_VOID_RETURN;
 }
 
@@ -1784,30 +1772,18 @@
   DBUG_VOID_RETURN;
 }
 
-int select_connection(char *p)
+
+int select_connection_name(const char *name)
 {
-  char* name;
   struct connection *con;
-  DBUG_ENTER("select_connection");
-  DBUG_PRINT("enter",("name: '%s'",p));
+  DBUG_ENTER("select_connection2");
+  DBUG_PRINT("enter",("name: '%s'", name));
 
-  if (!*p)
-    die("Missing connection name in connect");
-  name = p;
-  while (*p && !my_isspace(charset_info,*p))
-    p++;
-
-  if (*p)
-  {
-    *p++= 0;
-    check_eol_junk(p);
-  }
-
-  for (con = cons; con < next_con; con++)
+  for (con= cons; con < next_con; con++)
   {
     if (!strcmp(con->name, name))
     {
-      cur_con = con;
+      cur_con= con;
       DBUG_RETURN(0);
     }
   }
@@ -1815,26 +1791,42 @@
   DBUG_RETURN(1);				/* Never reached */
 }
 
-int close_connection(struct st_query* q)
+
+int select_connection(struct st_query *query)
+{
+  char *name;
+  char *p= query->first_argument;
+  DBUG_ENTER("select_connection");
+
+  if (!*p)
+    die("Missing connection name in connect");
+  name= p;
+  while (*p && !my_isspace(charset_info,*p))
+    p++;
+  if (*p)
+    *p++= 0;
+  query->last_argument= p;
+  return select_connection_name(name);
+}
+
+
+int close_connection(struct st_query *q)
 {
-  char* p=q->first_argument, *name;
+  char *p= q->first_argument, *name;
   struct connection *con;
   DBUG_ENTER("close_connection");
   DBUG_PRINT("enter",("name: '%s'",p));
 
   if (!*p)
     die("Missing connection name in connect");
-  name = p;
+  name= p;
   while (*p && !my_isspace(charset_info,*p))
     p++;
 
   if (*p)
-  {
     *p++= 0;
-    check_eol_junk(p);
-  }
-
-  for (con = cons; con < next_con; con++)
+  q->last_argument= p;
+  for (con= cons; con < next_con; con++)
   {
     if (!strcmp(con->name, name))
     {
@@ -1864,21 +1856,21 @@
    ) are delimiters/terminators
 */
 
-char* safe_get_param(char* str, char** arg, const char* msg)
+char* safe_get_param(char *str, char** arg, const char *msg)
 {
   DBUG_ENTER("safe_get_param");
   while (*str && my_isspace(charset_info,*str))
     str++;
-  *arg = str;
+  *arg= str;
   for (; *str && *str != ',' && *str != ')' ; str++)
   {
     if (my_isspace(charset_info,*str))
-      *str = 0;
+      *str= 0;
   }
   if (!*str)
     die(msg);
 
-  *str++ = 0;
+  *str++= 0;
   DBUG_RETURN(str);
 }
 
@@ -1895,9 +1887,9 @@
 }
 #endif
 
-int safe_connect(MYSQL* con, const char* host, const char* user,
-		 const char* pass,
-		 const char* db, int port, const char* sock)
+int safe_connect(MYSQL* con, const char *host, const char *user,
+		 const char *pass,
+		 const char *db, int port, const char *sock)
 {
   int con_error = 1;
   int i;
@@ -1915,14 +1907,14 @@
 }
 
 
-int do_connect(struct st_query* q)
+int do_connect(struct st_query *q)
 {
-  char* con_name, *con_user,*con_pass, *con_host, *con_port_str,
+  char *con_name, *con_user,*con_pass, *con_host, *con_port_str,
     *con_db, *con_sock;
-  char* p=q->first_argument;
+  char *p= q->first_argument;
   char buff[FN_REFLEN];
   int con_port;
-  int free_con_sock = 0;
+  int free_con_sock= 0;
 
   DBUG_ENTER("do_connect");
   DBUG_PRINT("enter",("connect: %s",p));
@@ -1930,41 +1922,41 @@
   if (*p != '(')
     die("Syntax error in connect - expected '(' found '%c'", *p);
   p++;
-  p = safe_get_param(p, &con_name, "missing connection name");
-  p = safe_get_param(p, &con_host, "missing connection host");
-  p = safe_get_param(p, &con_user, "missing connection user");
-  p = safe_get_param(p, &con_pass, "missing connection password");
-  p = safe_get_param(p, &con_db, "missing connection db");
+  p= safe_get_param(p, &con_name, "missing connection name");
+  p= safe_get_param(p, &con_host, "missing connection host");
+  p= safe_get_param(p, &con_user, "missing connection user");
+  p= safe_get_param(p, &con_pass, "missing connection password");
+  p= safe_get_param(p, &con_db, "missing connection db");
   if (!*p || *p == ';')				/* Default port and sock */
   {
-    con_port=port;
-    con_sock=(char*) unix_sock;
+    con_port= port;
+    con_sock= (char*) unix_sock;
   }
   else
   {
     VAR* var_port, *var_sock;
-    p = safe_get_param(p, &con_port_str, "missing connection port");
+    p= safe_get_param(p, &con_port_str, "missing connection port");
     if (*con_port_str == '$')
     {
-      if (!(var_port = var_get(con_port_str, 0, 0, 0)))
+      if (!(var_port= var_get(con_port_str, 0, 0, 0)))
 	die("Unknown variable '%s'", con_port_str+1);
-      con_port = var_port->int_val;
+      con_port= var_port->int_val;
     }
     else
-      con_port=atoi(con_port_str);
-    p = safe_get_param(p, &con_sock, "missing connection socket");
+      con_port= atoi(con_port_str);
+    p= safe_get_param(p, &con_sock, "missing connection socket");
     if (*con_sock == '$')
     {
-      if (!(var_sock = var_get(con_sock, 0, 0, 0)))
+      if (!(var_sock= var_get(con_sock, 0, 0, 0)))
 	die("Unknown variable '%s'", con_sock+1);
-      if (!(con_sock = (char*)my_malloc(var_sock->str_val_len+1, MYF(0))))
+      if (!(con_sock= (char*)my_malloc(var_sock->str_val_len+1, MYF(0))))
 	die("Out of memory");
-      free_con_sock = 1;
+      free_con_sock= 1;
       memcpy(con_sock, var_sock->str_val, var_sock->str_val_len);
-      con_sock[var_sock->str_val_len] = 0;
+      con_sock[var_sock->str_val_len]= 0;
     }
   }
-  check_eol_junk(p);
+  q->last_argument= p;
 
   if (next_con == cons_end)
     die("Connection limit exhausted - increase MAX_CONS in mysqltest.c");
@@ -1984,33 +1976,34 @@
   if (con_sock && !free_con_sock && *con_sock && *con_sock != FN_LIBCHAR)
     con_sock=fn_format(buff, con_sock, TMPDIR, "",0);
   if (!con_db[0])
-    con_db=db;
+    con_db= db;
   /* Special database to allow one to connect without a database name */
   if (con_db && !strcmp(con_db,"*NO-ONE*"))
-    con_db=0;
+    con_db= 0;
   if ((safe_connect(&next_con->mysql, con_host,
 		    con_user, con_pass,
 		    con_db, con_port, con_sock ? con_sock: 0)))
     die("Could not open connection '%s': %s", con_name,
 	mysql_error(&next_con->mysql));
 
-  if (!(next_con->name = my_strdup(con_name, MYF(MY_WME))))
+  if (!(next_con->name= my_strdup(con_name, MYF(MY_WME))))
     die(NullS);
-  cur_con = next_con++;
+  cur_con= next_con++;
   if (free_con_sock)
     my_free(con_sock, MYF(MY_WME));
   DBUG_RETURN(0);
 }
 
 
-int do_done(struct st_query* q)
+int do_done(struct st_query *q)
 {
-  /* Dummy statement to eliminate compiler warning */
-  q->type = Q_END_BLOCK;
-
   /* Check if empty block stack */
   if (cur_block == block_stack)
+  {
+    if (*q->query != '}')
+      die("Stray 'end' command - end of block before beginning");
     die("Stray '}' - end of block before beginning");
+  }
 
   /* Test if inner block has been executed */
   if (cur_block->ok && cur_block->cmd == Q_WHILE)
@@ -2025,16 +2018,16 @@
     cur_block--;
     parser.current_line++;
   }
-  return check_eol_junk(q->first_argument);
-;
+  return 0;
 }
 
 
-int do_block(enum enum_commands cmd, struct st_query* q)
+int do_block(enum enum_commands cmd, struct st_query *q)
 {
-  char* p=q->first_argument;
-  const char* expr_start, *expr_end;
+  char *p= q->first_argument;
+  const char *expr_start, *expr_end;
   VAR v;
+  const char *cmd_name= (cmd == Q_WHILE ? "while" : "if");
 
   /* Check stack overflow */
   if (cur_block == block_stack_end)
@@ -2054,20 +2047,20 @@
   }
 
   /* Parse and evaluate test expression */
-  expr_start = strchr(p, '(');
+  expr_start= strchr(p, '(');
   if (!expr_start)
-    die("missing '(' in while");
-  expr_end = strrchr(expr_start, ')');
+    die("missing '(' in %s", cmd_name);
+  expr_end= strrchr(expr_start, ')');
   if (!expr_end)
-    die("missing ')' in while");
+    die("missing ')' in %s", cmd_name);
   p= (char*)expr_end+1;
 
   while (*p && my_isspace(charset_info, *p))
     p++;
-  if (*p=='{')
-    die("Missing newline between while and '{'");
+  if (*p == '{')
+    die("Missing newline between %s and '{'", cmd_name);
   if (*p)
-    die("Missing '{' after while. Found \"%s\"", p);
+    die("Missing '{' after %s. Found \"%s\"", cmd_name, p);
 
   var_init(&v,0,0,0,0);
   eval_expr(&v, ++expr_start, &expr_end);
@@ -2114,7 +2107,7 @@
     return 0;
 
   for (i= 1; i < delimiter_length &&
-	 (c= my_getc(*cur_file)) == *(delimiter + i);
+	 (c= my_getc(cur_file->file)) == *(delimiter + i);
        i++)
     tmp[i]= c;
 
@@ -2153,10 +2146,10 @@
 
 */
 
-int read_line(char* buf, int size)
+int read_line(char *buf, int size)
 {
   int c;
-  char* p= buf, *buf_end= buf + size - 1;
+  char *p= buf, *buf_end= buf + size - 1;
   int no_save= 0;
   enum {R_NORMAL, R_Q1, R_ESC_Q_Q1, R_ESC_Q_Q2,
 	R_ESC_SLASH_Q1, R_ESC_SLASH_Q2,
@@ -2167,16 +2160,14 @@
   for (; p < buf_end ;)
   {
     no_save= 0;
-    c= my_getc(*cur_file);
-    if (feof(*cur_file))
+    c= my_getc(cur_file->file);
+    if (feof(cur_file->file))
     {
   found_eof:
-      if ((*cur_file) != stdin)
-	my_fclose(*cur_file, MYF(0));
-      cur_file--;
-      char* p= file_name_stack[cur_file_name--]= 0;
-      if (p)
-        free(p);
+      if (cur_file->file != stdin)
+	my_fclose(cur_file->file, MYF(0));
+      my_free((gptr)cur_file->file_name, MYF(MY_ALLOW_ZERO_PTR));
+      cur_file->file_name= 0;
       lineno--;
       start_lineno= *lineno;
       if (cur_file == file_stack)
@@ -2191,6 +2182,7 @@
         }
 	DBUG_RETURN(1);
       }
+      cur_file--;
       continue;
     }
 
@@ -2313,9 +2305,9 @@
 
 	for (i= 1; i < charlen; i++)
 	{
-	  if (feof(*cur_file))
+	  if (feof(cur_file->file))
 	    goto found_eof;	/* FIXME: could we just break here?! */
-	  c= my_getc(*cur_file);
+	  c= my_getc(cur_file->file);
 	  *p++ = c;
 	}
 	if (! my_ismbchar(charset_info, mb_start, p))
@@ -2332,13 +2324,14 @@
     }
   }
   *p= 0;					/* Always end with \0 */
-  DBUG_RETURN(feof(*cur_file));
+  DBUG_RETURN(feof(cur_file->file));
 }
 
 /*
   Create a query from a set of lines
 
   SYNOPSIS
+    read_query()
     q_ptr pointer where to return the new query
 
   DESCRIPTION
@@ -2360,7 +2353,7 @@
 
 int read_query(struct st_query** q_ptr)
 {
-  char *p = read_query_buf, * p1 ;
+  char *p= read_query_buf, *p1;
   struct st_query* q;
   DBUG_ENTER("read_query");
 
@@ -2377,7 +2370,7 @@
   q->require_file= 0;
   q->first_word_len= 0;
 
-  q->type = Q_UNKNOWN;
+  q->type= Q_UNKNOWN;
   q->query_buf= q->query= 0;
   if (read_line(read_query_buf, sizeof(read_query_buf)))
   {
@@ -2387,7 +2380,7 @@
   DBUG_PRINT("info", ("query: %s", read_query_buf));
   if (*p == '#')
   {
-    q->type = Q_COMMENT;
+    q->type= Q_COMMENT;
     /* This goto is to avoid losing the "expected error" info. */
     goto end;
   }
@@ -2414,10 +2407,10 @@
         p++;
         for (; my_isdigit(charset_info, *p); p++)
           expected_errno = expected_errno * 10 + *p - '0';
-        q->expected_errno[0].code.errnum = expected_errno;
+        q->expected_errno[0].code.errnum= expected_errno;
         q->expected_errno[0].type= ERR_ERRNO;
         q->expected_errno[1].type= ERR_EMPTY;
-        q->expected_errors=1;
+        q->expected_errors= 1;
       }
       else if (*p == 'S')                            /* SQLSTATE */
       {
@@ -2428,10 +2421,9 @@
         q->expected_errno[0].code.sqlstate[i]= '\0';
         q->expected_errno[0].type= ERR_SQLSTATE;
         q->expected_errno[1].type= ERR_EMPTY;
-        q->expected_errors=1;
+        q->expected_errors= 1;
       }
     }
-
     while (*p && my_isspace(charset_info, *p))
       p++ ;
     if (*p == '@')
@@ -2590,7 +2582,9 @@
 	argument= buff;
       }
       fn_format(buff, argument, "", "", 4);
-      if (!(*++cur_file = my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(MY_WME))))
+      DBUG_ASSERT(cur_file->file == 0);
+      if (!(cur_file->file=
+            my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(MY_WME))))
 	die("Could not open %s: errno = %d", argument, errno);
       break;
     }
@@ -2676,7 +2670,7 @@
   return 0;
 }
 
-char* safe_str_append(char* buf, const char* str, int size)
+char* safe_str_append(char *buf, const char *str, int size)
 {
   int i,c ;
   for (i = 0; (c = *str++) &&  i < size - 1; i++)
@@ -2685,7 +2679,7 @@
   return buf;
 }
 
-void str_to_file(const char* fname, char* str, int size)
+void str_to_file(const char *fname, char *str, int size)
 {
   int fd;
   char buff[FN_REFLEN];
@@ -2704,7 +2698,7 @@
   my_close(fd, MYF(0));
 }
 
-void reject_dump(const char* record_file, char* buf, int size)
+void reject_dump(const char *record_file, char *buf, int size)
 {
   char reject_file[FN_REFLEN];
   str_to_file(fn_format(reject_file, record_file,"",".reject",2), buf, size);
@@ -2879,68 +2873,61 @@
       if (q->abort_on_error)
 	die("query '%s' failed: %d: %s", query,
 	    mysql_errno(mysql), mysql_error(mysql));
-      else
+
+      for (i=0 ; (uint) i < q->expected_errors ; i++)
       {
-	for (i=0 ; (uint) i < q->expected_errors ; i++)
-	{
-          if (((q->expected_errno[i].type == ERR_ERRNO) &&
-               (q->expected_errno[i].code.errnum == mysql_errno(mysql))) ||
-              ((q->expected_errno[i].type == ERR_SQLSTATE) &&
-               (strcmp(q->expected_errno[i].code.sqlstate,mysql_sqlstate(mysql)) == 0)))
-	  {
-	    if (i == 0 && q->expected_errors == 1)
-	    {
-	      /* Only log error if there is one possible error */
-	      dynstr_append_mem(ds,"ERROR ",6);
-	      replace_dynstr_append_mem(ds, mysql_sqlstate(mysql),
-					strlen(mysql_sqlstate(mysql)));
-	      dynstr_append_mem(ds, ": ", 2);
-	      replace_dynstr_append_mem(ds,mysql_error(mysql),
-					strlen(mysql_error(mysql)));
-	      dynstr_append_mem(ds,"\n",1);
-	    }
-	    /* Don't log error if we may not get an error */
-            else if (q->expected_errno[0].type == ERR_SQLSTATE ||
-                     (q->expected_errno[0].type == ERR_ERRNO &&
-                      q->expected_errno[0].code.errnum != 0))
-	      dynstr_append(ds,"Got one of the listed errors\n");
-	    goto end;				/* Ok */
-	  }
-	}
-	DBUG_PRINT("info",("i: %d  expected_errors: %d", i,
-			   q->expected_errors));
-	dynstr_append_mem(ds, "ERROR ",6);
-	replace_dynstr_append_mem(ds, mysql_sqlstate(mysql),
-				  strlen(mysql_sqlstate(mysql)));
-	dynstr_append_mem(ds,": ",2);
-	replace_dynstr_append_mem(ds, mysql_error(mysql),
-				  strlen(mysql_error(mysql)));
-	dynstr_append_mem(ds,"\n",1);
-	if (i)
-	{
-          if (q->expected_errno[0].type == ERR_ERRNO)
-            verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
-                        q->query, mysql_errno(mysql), q->expected_errno[0].code.errnum);
-          else
-            verbose_msg("query '%s' failed with wrong sqlstate %s instead of %s...",
-                        q->query, mysql_sqlstate(mysql), q->expected_errno[0].code.sqlstate);
-	  error= 1;
-	  goto end;
-	}
-	verbose_msg("query '%s' failed: %d: %s", q->query, mysql_errno(mysql),
-		    mysql_error(mysql));
-	/*
-	  if we do not abort on error, failure to run the query does
-	  not fail the whole test case
-	*/
-	goto end;
+        if (((q->expected_errno[i].type == ERR_ERRNO) &&
+             (q->expected_errno[i].code.errnum == mysql_errno(mysql))) ||
+            ((q->expected_errno[i].type == ERR_SQLSTATE) &&
+             (strcmp(q->expected_errno[i].code.sqlstate,mysql_sqlstate(mysql)) == 0)))
+        {
+          if (i == 0 && q->expected_errors == 1)
+          {
+            /* Only log error if there is one possible error */
+            dynstr_append_mem(ds,"ERROR ",6);
+            replace_dynstr_append_mem(ds, mysql_sqlstate(mysql),
+                                      strlen(mysql_sqlstate(mysql)));
+            dynstr_append_mem(ds, ": ", 2);
+            replace_dynstr_append_mem(ds,mysql_error(mysql),
+                                      strlen(mysql_error(mysql)));
+            dynstr_append_mem(ds,"\n",1);
+          }
+          /* Don't log error if we may not get an error */
+          else if (q->expected_errno[0].type == ERR_SQLSTATE ||
+                   (q->expected_errno[0].type == ERR_ERRNO &&
+                    q->expected_errno[0].code.errnum != 0))
+            dynstr_append(ds,"Got one of the listed errors\n");
+          goto end;				/* Ok */
+        }
+      }
+      DBUG_PRINT("info",("i: %d  expected_errors: %d", i,
+                         q->expected_errors));
+      dynstr_append_mem(ds, "ERROR ",6);
+      replace_dynstr_append_mem(ds, mysql_sqlstate(mysql),
+                                strlen(mysql_sqlstate(mysql)));
+      dynstr_append_mem(ds,": ",2);
+      replace_dynstr_append_mem(ds, mysql_error(mysql),
+                                strlen(mysql_error(mysql)));
+      dynstr_append_mem(ds,"\n",1);
+      if (i)
+      {
+        if (q->expected_errno[0].type == ERR_ERRNO)
+          verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
+                      q->query, mysql_errno(mysql), q->expected_errno[0].code.errnum);
+        else
+          verbose_msg("query '%s' failed with wrong sqlstate %s instead of %s...",
+                      q->query, mysql_sqlstate(mysql), q->expected_errno[0].code.sqlstate);
+        error= 1;
+        goto end;
       }
-      /*{
-	verbose_msg("failed in mysql_store_result for query '%s' (%d)", query,
-	mysql_errno(mysql));
-	error = 1;
-	goto end;
-	}*/
+      verbose_msg("query '%s' failed: %d: %s", q->query, mysql_errno(mysql),
+                  mysql_error(mysql));
+      /*
+        if we do not abort on error, failure to run the query does
+        not fail the whole test case
+      */
+      goto end;
+
     }
 
     if (q->expected_errno[0].type == ERR_ERRNO &&
@@ -2964,7 +2951,7 @@
 
     if (!disable_result_log)
     {
-      ulong affected_rows= 0;
+      ulong affected_rows;
 
       if (res)
       {
@@ -3749,7 +3736,7 @@
   struct st_query *q;
   my_bool require_file=0, q_send_flag=0;
   char save_file[FN_REFLEN];
-  MY_INIT("mysqltest");
+  MY_INIT(argv[0]);
   {
   DBUG_ENTER("main");
   DBUG_PROCESS(argv[0]);
@@ -3765,10 +3752,9 @@
   cur_con = cons;
 
   memset(file_stack, 0, sizeof(file_stack));
-  memset(file_name_stack, 0, sizeof(file_name_stack));
   memset(&master_pos, 0, sizeof(master_pos));
-  file_stack_end = file_stack + MAX_INCLUDE_DEPTH - 1;
-  cur_file = file_stack;
+  file_stack_end= file_stack + MAX_INCLUDE_DEPTH - 1;
+  cur_file= file_stack;
   lineno   = lineno_stack;
   my_init_dynamic_array(&q_lines, sizeof(struct st_query*), INIT_Q_LINES,
 		     INIT_Q_LINES);
@@ -3787,8 +3773,9 @@
     die("Can't initialize MySQL server");
   if (cur_file == file_stack)
   {
-    *++cur_file= stdin;
-    ++cur_file_name;
+    DBUG_ASSERT(cur_file->file == 0);
+    cur_file->file= stdin;
+    cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME));
   }
   *lineno=1;
 #ifndef EMBEDDED_LIBRARY
@@ -3835,40 +3822,29 @@
       get_query_type(q);
     if (cur_block->ok)
     {
+      q->last_argument= q->first_argument;
       processed = 1;
       switch (q->type) {
       case Q_CONNECT: do_connect(q); break;
-      case Q_CONNECTION: select_connection(q->first_argument); break;
+      case Q_CONNECTION: select_connection(q); break;
       case Q_DISCONNECT:
       case Q_DIRTY_CLOSE:
 	close_connection(q); break;
       case Q_RPL_PROBE: do_rpl_probe(q); break;
       case Q_ENABLE_RPL_PARSE:	 do_enable_rpl_parse(q); break;
       case Q_DISABLE_RPL_PARSE:  do_disable_rpl_parse(q); break;
-      case Q_ENABLE_QUERY_LOG:
-        disable_query_log=0; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_QUERY_LOG:
-        disable_query_log=1; check_eol_junk(q->first_argument); break;
-      case Q_ENABLE_ABORT_ON_ERROR:
-        abort_on_error=1; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_ABORT_ON_ERROR:
-        abort_on_error=0; check_eol_junk(q->first_argument); break;
-      case Q_ENABLE_RESULT_LOG:
-        disable_result_log=0; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_RESULT_LOG:
-        disable_result_log=1; check_eol_junk(q->first_argument); break;
-      case Q_ENABLE_WARNINGS:
-        disable_warnings=0; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_WARNINGS:
-        disable_warnings=1; check_eol_junk(q->first_argument); break;
-      case Q_ENABLE_INFO:
-        disable_info=0; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_INFO:
-        disable_info=1; check_eol_junk(q->first_argument); break;
-      case Q_ENABLE_METADATA:
-        display_metadata=1; check_eol_junk(q->first_argument); break;
-      case Q_DISABLE_METADATA:
-        display_metadata=0; check_eol_junk(q->first_argument); break;
+      case Q_ENABLE_QUERY_LOG:   disable_query_log=0; break;
+      case Q_DISABLE_QUERY_LOG:  disable_query_log=1; break;
+      case Q_ENABLE_ABORT_ON_ERROR:  abort_on_error=1; break;
+      case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break;
+      case Q_ENABLE_RESULT_LOG:  disable_result_log=0; break;
+      case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
+      case Q_ENABLE_WARNINGS:    disable_warnings=0; break;
+      case Q_DISABLE_WARNINGS:   disable_warnings=1; break;
+      case Q_ENABLE_INFO:        disable_info=0; break;
+      case Q_DISABLE_INFO:       disable_info=1; break;
+      case Q_ENABLE_METADATA:    display_metadata=1; break;
+      case Q_DISABLE_METADATA:   display_metadata=0; break;
       case Q_SOURCE: do_source(q); break;
       case Q_SLEEP: do_sleep(q, 0); break;
       case Q_REAL_SLEEP: do_sleep(q, 1); break;
@@ -3878,26 +3854,24 @@
       case Q_SERVER_START: do_server_start(q); break;
       case Q_SERVER_STOP: do_server_stop(q); break;
 #endif
-      case Q_INC: do_inc(q); break;
-      case Q_DEC: do_dec(q); break;
+      case Q_INC: do_modify_var(q, "inc", DO_INC); break;
+      case Q_DEC: do_modify_var(q, "dec", DO_DEC); break;
       case Q_ECHO: do_echo(q); break;
       case Q_SYSTEM: do_system(q); break;
       case Q_DELIMITER:
 	strmake(delimiter, q->first_argument, sizeof(delimiter) - 1);
 	delimiter_length= strlen(delimiter);
-        check_eol_junk(q->first_argument+delimiter_length);
+        q->last_argument= q->first_argument+delimiter_length;
 	break;
       case Q_DISPLAY_VERTICAL_RESULTS:
         display_result_vertically= TRUE;
-        check_eol_junk(q->first_argument);
         break;
       case Q_DISPLAY_HORIZONTAL_RESULTS:
 	display_result_vertically= FALSE;
-        check_eol_junk(q->first_argument);
         break;
       case Q_LET: do_let(q); break;
       case Q_EVAL_RESULT:
-        eval_result = 1; check_eol_junk(q->first_argument); break;
+        eval_result = 1; break;
       case Q_EVAL:
 	if (q->query == q->query_buf)
         {
@@ -3930,6 +3904,7 @@
 	}
 	error|= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND);
 	display_result_vertically= old_display_result_vertically;
+        q->last_argument= q->end;
 	break;
       }
       case Q_QUERY:
@@ -3954,6 +3929,7 @@
 	  save_file[0]=0;
 	}
 	error |= run_query(&cur_con->mysql, q, flags);
+        q->last_argument= q->end;
 	break;
       }
       case Q_SEND:
@@ -3973,6 +3949,7 @@
 	  is given on this connection.
 	 */
 	error |= run_query(&cur_con->mysql, q, QUERY_SEND);
+        q->last_argument= q->end;
 	break;
       case Q_RESULT:
 	get_file_name(save_file,q);
@@ -3997,21 +3974,18 @@
       {
 	do_save_master_pos();
 	if (*q->first_argument)
-	  select_connection(q->first_argument);
+	  select_connection(q);
 	else
-	{
-	  char buf[] = "slave";
-	  select_connection(buf);
-	}
-	do_sync_with_master2("");
+	  select_connection_name("slave");
+	do_sync_with_master2(0);
 	break;
       }
       case Q_COMMENT:				/* Ignore row */
       case Q_COMMENT_WITH_COMMAND:
+        q->last_argument= q->end;
 	break;
       case Q_PING:
 	(void) mysql_ping(&cur_con->mysql);
-        check_eol_junk(q->first_argument);
 	break;
       case Q_EXEC:
 	do_exec(q);
@@ -4019,32 +3993,26 @@
       case Q_START_TIMER:
 	/* Overwrite possible earlier start of timer */
 	timer_start= timer_now();
-        check_eol_junk(q->first_argument);
 	break;
       case Q_END_TIMER:
 	/* End timer before ending mysqltest */
 	timer_output();
 	got_end_timer= TRUE;
-        check_eol_junk(q->first_argument);
 	break;
       case Q_CHARACTER_SET:
 	set_charset(q);
 	break;
       case Q_DISABLE_PS_PROTOCOL:
         ps_protocol_enabled= 0;
-        check_eol_junk(q->first_argument);
         break;
       case Q_ENABLE_PS_PROTOCOL:
         ps_protocol_enabled= ps_protocol;
-        check_eol_junk(q->first_argument);
         break;
       case Q_DISABLE_RECONNECT:
         cur_con->mysql.reconnect= 0;
-        check_eol_junk(q->first_argument);
         break;
       case Q_ENABLE_RECONNECT:
         cur_con->mysql.reconnect= 1;
-        check_eol_junk(q->first_argument);
         break;
 
       default: processed = 0; break;
@@ -4061,6 +4029,8 @@
       default: current_line_inc = 1; break;
       }
     }
+    else
+      check_eol_junk(q->last_argument);
 
     parser.current_line += current_line_inc;
   }
@@ -4936,15 +4906,16 @@
 
     to= get_string(&buff, &from, q);
     if (!(column_number= atoi(to)) || column_number > MAX_COLUMNS)
-      die("Wrong column number to replace_columns in %s", q->query);
+      die("Wrong column number to replace_column in '%s'", q->query);
     if (!*from)
-      die("Wrong number of arguments to replace in %s", q->query);
+      die("Wrong number of arguments to replace_column in '%s'", q->query);
     to= get_string(&buff, &from, q);
     my_free(replace_column[column_number-1], MY_ALLOW_ZERO_PTR);
     replace_column[column_number-1]= my_strdup(to, MYF(MY_WME | MY_FAE));
     set_if_bigger(max_replace_column, column_number);
   }
   my_free(start, MYF(0));
+  q->last_argument= q->end;
 }
 
 #if defined(__NETWARE__) || defined(__WIN__)

--- 1.37/mysql-test/t/rpl000001.test	2004-11-22 20:13:39 +01:00
+++ 1.38/mysql-test/t/rpl000001.test	2005-08-31 17:16:01 +02:00
@@ -89,7 +89,7 @@
 # We don't drop t3 as this is a temporary table
 drop table t2;
 connection master;
---error 1053;
+--error 1053
 reap;
 connection slave;
 # The SQL slave thread should now have stopped because the query was killed on

--- 1.18/mysql-test/t/drop.test	2005-04-02 20:20:16 +02:00
+++ 1.19/mysql-test/t/drop.test	2005-08-31 17:16:01 +02:00
@@ -6,13 +6,13 @@
 drop database if exists client_test_db;
 --enable_warnings
 
---error 1051;
+--error 1051
 drop table t1;
 create table t1(n int);
 insert into t1 values(1);
 create temporary table t1( n int);
 insert into t1 values(2);
---error 1050;
+--error 1050
 create table t1(n int);
 drop table t1;
 select * from t1;
@@ -56,13 +56,13 @@
 
 # test drop/create database and FLUSH TABLES WITH READ LOCK
 flush tables with read lock;
---error 1209,1223;
+--error 1209,1223
 create database mysqltest;
 unlock tables;
 create database mysqltest;
 show databases;
 flush tables with read lock;
---error 1208,1223;
+--error 1208,1223
 drop database mysqltest;
 unlock tables;
 drop database mysqltest;
@@ -73,7 +73,7 @@
 # test create table and FLUSH TABLES WITH READ LOCK
 drop table t1;
 flush tables with read lock;
---error 1223;
+--error 1223
 create table t1(n int);
 unlock tables;
 create table t1(n int);

--- 1.14/mysql-test/t/flush.test	2003-08-11 21:28:01 +02:00
+++ 1.15/mysql-test/t/flush.test	2005-08-31 17:16:01 +02:00
@@ -37,7 +37,7 @@
 select * from t1;
 connection con2;
 flush tables with read lock;
---error 1099;
+--error 1099
 drop table t2;
 connection con1;
 send drop table t2;

--- 1.20/mysql-test/t/handler.test	2004-10-07 09:50:09 +02:00
+++ 1.21/mysql-test/t/handler.test	2005-08-31 17:16:01 +02:00
@@ -300,7 +300,7 @@
 handler h5 read first limit 9;
 # close first
 alter table t1 engine=MyISAM;
---error 1109;
+--error 1109
 handler h1 read first limit 9;
 handler h2 read first limit 9;
 handler h3 read first limit 9;
@@ -308,22 +308,22 @@
 handler h5 read first limit 9;
 # close last
 alter table t5 engine=MyISAM;
---error 1109;
+--error 1109
 handler h1 read first limit 9;
 handler h2 read first limit 9;
 handler h3 read first limit 9;
 handler h4 read first limit 9;
---error 1109;
+--error 1109
 handler h5 read first limit 9;
 # close middle
 alter table t3 engine=MyISAM;
---error 1109;
+--error 1109
 handler h1 read first limit 9;
 handler h2 read first limit 9;
---error 1109;
+--error 1109
 handler h3 read first limit 9;
 handler h4 read first limit 9;
---error 1109;
+--error 1109
 handler h5 read first limit 9;
 handler h2 close;
 handler h4 close;
@@ -335,11 +335,11 @@
 handler h1_2 read first limit 9;
 handler h1_3 read first limit 9;
 alter table t1 engine=MyISAM;
---error 1109;
+--error 1109
 handler h1_1 read first limit 9;
---error 1109;
+--error 1109
 handler h1_2 read first limit 9;
---error 1109;
+--error 1109
 handler h1_3 read first limit 9;
 drop table t1;
 drop table t2;
Thread
bk commit into 4.1 tree (msvensson:1.2329) BUG#11316msvensson31 Aug