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
This commit is contained in:
parent
ba9e3c4502
commit
a3c7d96742
@ -966,6 +966,7 @@ void check_command_args(struct st_command *command,
|
||||
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_command *command,
|
||||
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_command *command,
|
||||
/* 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 */
|
||||
|
@ -697,6 +697,7 @@ statement="SHOW COLUMNS FROM t1" row_number=1, column_name="Type", Value=int(11)
|
||||
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'
|
||||
|
@ -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);
|
||||
|
@ -2037,6 +2037,10 @@ let $value= query_get_value(SELECT 'A B' AS "MyColumn", MyColumn, 1);
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user