MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Bjorn Munch Date:May 25 2009 3:21pm
Subject:bzr commit into mysql-5.1-mtr branch (Bjorn.Munch:2794) Bug#44922
View as plain text  
#At file:///home/bm136801/my/qgv-51/

 2794 Bjorn Munch	2009-05-25
      Bug #44922 mysqltest's query_get_value function can't work with queries containing ','
      check_command_args() always looks for the first , (or whatever)
      Extended check_command_args() to let arguments be quoted
      Added test in mysqltest.test
      modified:
        client/mysqltest.cc
        mysql-test/r/mysqltest.result
        mysql-test/t/connect.test
        mysql-test/t/mysqltest.test

=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc	2009-04-09 09:24:36 +0000
+++ b/client/mysqltest.cc	2009-05-25 15:19:20 +0000
@@ -966,6 +966,7 @@ void check_command_args(struct st_comman
   for (i= 0; i < num_args; i++)
   {
     const struct command_arg *arg= &args[i];
+    char delimiter;
 
     switch (arg->type) {
       /* A string */
@@ -974,8 +975,15 @@ void check_command_args(struct st_comman
       while (*ptr && *ptr == ' ')
         ptr++;
       start= ptr;
-      /* Find end of arg, terminated by "delimiter_arg" */
-      while (*ptr && *ptr != delimiter_arg)
+      delimiter = delimiter_arg;
+      /* If start of arg is ' ` or " search to matching quote end instead */
+      if (*ptr && strchr ("'`\"", *ptr))
+      {
+	delimiter= *ptr;
+	start= ++ptr;
+      }
+      /* Find end of arg, terminated by "delimiter" */
+      while (*ptr && *ptr != delimiter)
         ptr++;
       if (ptr > start)
       {
@@ -987,6 +995,11 @@ void check_command_args(struct st_comman
         /* Empty string */
         init_dynamic_string(arg->ds, "", 0, 0);
       }
+      /* Find real end of arg, terminated by "delimiter_arg" */
+      /* This will do nothing if arg was not closed by quotes */
+      while (*ptr && *ptr != delimiter_arg)
+        ptr++;      
+
       command->last_argument= (char*)ptr;
 
       /* Step past the delimiter */

=== modified file 'mysql-test/r/mysqltest.result'
--- a/mysql-test/r/mysqltest.result	2009-03-06 14:56:17 +0000
+++ b/mysql-test/r/mysqltest.result	2009-05-25 15:19:20 +0000
@@ -697,6 +697,7 @@ statement="SHOW COLUMNS FROM t1" row_num
 statement=SHOW COLUMNS FROM t1 row_number=1, column_name=Default, Value=NULL
 value= ->A B<-
 value= 1
+value= 2
 mysqltest: At line 1: query_get_value - argument list started with '(' must be ended with ')'
 mysqltest: At line 1: Missing required argument 'query' to command 'query_get_value'
 mysqltest: At line 1: Missing required argument 'column name' to command 'query_get_value'

=== modified file 'mysql-test/t/connect.test'
--- a/mysql-test/t/connect.test	2009-03-06 14:56:17 +0000
+++ b/mysql-test/t/connect.test	2009-05-25 15:19:20 +0000
@@ -55,7 +55,8 @@ disconnect con4;
 connect (fail_con,localhost,test,,test2);
 --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 --error ER_ACCESS_DENIED_ERROR
-connect (fail_con,localhost,test,,"");
+# Need to protect "" within '' so it's interpreted literally
+connect (fail_con,localhost,test,,'""');
 --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
 --error ER_ACCESS_DENIED_ERROR
 connect (fail_con,localhost,test,zorro,test2);

=== modified file 'mysql-test/t/mysqltest.test'
--- a/mysql-test/t/mysqltest.test	2009-03-06 14:56:17 +0000
+++ b/mysql-test/t/mysqltest.test	2009-05-25 15:19:20 +0000
@@ -2037,6 +2037,10 @@ let $value= query_get_value(SELECT 'A B'
 let $value= query_get_value(SELECT 1 AS "My Column", My Column, 1);
 --echo value= $value
 #
+# 4.1 Query containing , protected by quotes, quotes also on column
+let $value= query_get_value('SELECT 1 as a, 2 as b', "b", 1);
+--echo value= $value
+#
 #------------ Negative tests ------------
 # 5. Incomplete statement including missing parameters
 # 5.1 incomplete statement

Thread
bzr commit into mysql-5.1-mtr branch (Bjorn.Munch:2794) Bug#44922Bjorn Munch25 May