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++)
|
for (i= 0; i < num_args; i++)
|
||||||
{
|
{
|
||||||
const struct command_arg *arg= &args[i];
|
const struct command_arg *arg= &args[i];
|
||||||
|
char delimiter;
|
||||||
|
|
||||||
switch (arg->type) {
|
switch (arg->type) {
|
||||||
/* A string */
|
/* A string */
|
||||||
@ -974,8 +975,15 @@ void check_command_args(struct st_command *command,
|
|||||||
while (*ptr && *ptr == ' ')
|
while (*ptr && *ptr == ' ')
|
||||||
ptr++;
|
ptr++;
|
||||||
start= ptr;
|
start= ptr;
|
||||||
/* Find end of arg, terminated by "delimiter_arg" */
|
delimiter = delimiter_arg;
|
||||||
while (*ptr && *ptr != 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++;
|
ptr++;
|
||||||
if (ptr > start)
|
if (ptr > start)
|
||||||
{
|
{
|
||||||
@ -987,6 +995,11 @@ void check_command_args(struct st_command *command,
|
|||||||
/* Empty string */
|
/* Empty string */
|
||||||
init_dynamic_string(arg->ds, "", 0, 0);
|
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;
|
command->last_argument= (char*)ptr;
|
||||||
|
|
||||||
/* Step past the delimiter */
|
/* 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
|
statement=SHOW COLUMNS FROM t1 row_number=1, column_name=Default, Value=NULL
|
||||||
value= ->A B<-
|
value= ->A B<-
|
||||||
value= 1
|
value= 1
|
||||||
|
value= 2
|
||||||
mysqltest: At line 1: query_get_value - argument list started with '(' must be ended with ')'
|
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 'query' to command 'query_get_value'
|
||||||
mysqltest: At line 1: Missing required argument 'column name' 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);
|
connect (fail_con,localhost,test,,test2);
|
||||||
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--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
|
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_ACCESS_DENIED_ERROR
|
||||||
connect (fail_con,localhost,test,zorro,test2);
|
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);
|
let $value= query_get_value(SELECT 1 AS "My Column", My Column, 1);
|
||||||
--echo value= $value
|
--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 ------------
|
#------------ Negative tests ------------
|
||||||
# 5. Incomplete statement including missing parameters
|
# 5. Incomplete statement including missing parameters
|
||||||
# 5.1 incomplete statement
|
# 5.1 incomplete statement
|
||||||
|
Loading…
x
Reference in New Issue
Block a user