mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#17280 mysqltest, --echo sometimes does not expand $variables
- Evaluate all variables in the text before printing it to result file client/mysqltest.c: Update echo command to vvaluate all variables in the string before printing, allow for variable names to be escaped using \ mysql-test/r/mysqltest.result: Update results for echo mysql-test/t/mysqltest.test: Add more advanced tests for echo of strings with several variables and/or text plus variables. Also test that variables can be escaped
This commit is contained in:
@ -1384,38 +1384,40 @@ int do_system(struct st_query *q)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Print the content between echo and <delimiter> to result file.
|
Print the content between echo and <delimiter> to result file.
|
||||||
If content is a variable, the variable value will be retrieved
|
Evaluate all variables in the string before printing, allow
|
||||||
|
for variable names to be escaped using \
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
do_echo()
|
do_echo()
|
||||||
q called command
|
q called command
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Usage 1:
|
|
||||||
echo text
|
echo text
|
||||||
Print the text after echo until end of command to result file
|
Print the text after echo until end of command to result file
|
||||||
|
|
||||||
Usage 2:
|
|
||||||
echo $<var_name>
|
echo $<var_name>
|
||||||
Print the content of the variable <var_name> to result file
|
Print the content of the variable <var_name> to result file
|
||||||
|
|
||||||
|
echo Some text $<var_name>
|
||||||
|
Print "Some text" plus the content of the variable <var_name> to
|
||||||
|
result file
|
||||||
|
|
||||||
|
echo Some text \$<var_name>
|
||||||
|
Print "Some text" plus $<var_name> to result file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int do_echo(struct st_query *q)
|
int do_echo(struct st_query *command)
|
||||||
{
|
{
|
||||||
char *p= q->first_argument;
|
DYNAMIC_STRING *ds, ds_echo;
|
||||||
DYNAMIC_STRING *ds;
|
|
||||||
VAR v;
|
|
||||||
var_init(&v,0,0,0,0);
|
|
||||||
|
|
||||||
ds= &ds_res;
|
ds= &ds_res;
|
||||||
|
|
||||||
eval_expr(&v, p, 0); /* NULL terminated */
|
init_dynamic_string(&ds_echo, "", 256, 256);
|
||||||
if (v.str_val_len)
|
do_eval(&ds_echo, command->first_argument);
|
||||||
dynstr_append_mem(ds, v.str_val, v.str_val_len);
|
dynstr_append_mem(ds, ds_echo.str, ds_echo.length);
|
||||||
dynstr_append_mem(ds, "\n", 1);
|
dynstr_append_mem(ds, "\n", 1);
|
||||||
var_free(&v);
|
dynstr_free(&ds_echo);
|
||||||
q->last_argument= q->end;
|
command->last_argument= command->end;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,8 +201,14 @@ source database
|
|||||||
- world''s most
|
- world''s most
|
||||||
-- popular open
|
-- popular open
|
||||||
# source database
|
# source database
|
||||||
'$message'
|
'# MySQL: The
|
||||||
"$message"
|
- world''s most
|
||||||
|
-- popular open
|
||||||
|
# source database'
|
||||||
|
"# MySQL: The
|
||||||
|
- world''s most
|
||||||
|
-- popular open
|
||||||
|
# source database"
|
||||||
hej
|
hej
|
||||||
hej
|
hej
|
||||||
hej
|
hej
|
||||||
@ -222,6 +228,15 @@ mysqltest: At line 1: Missing arguments to let
|
|||||||
mysqltest: At line 1: Missing variable name in let
|
mysqltest: At line 1: Missing variable name in let
|
||||||
mysqltest: At line 1: Variable name in =hi does not start with '$'
|
mysqltest: At line 1: Variable name in =hi does not start with '$'
|
||||||
mysqltest: At line 1: Missing assignment operator in let
|
mysqltest: At line 1: Missing assignment operator in let
|
||||||
|
# Execute: --echo # <whatever> success: $success
|
||||||
|
# <whatever> success: 1
|
||||||
|
# Execute: echo # <whatever> success: $success ;
|
||||||
|
# <whatever> success: 1
|
||||||
|
# The next two variants work fine and expand the content of $success
|
||||||
|
# Execute: --echo $success
|
||||||
|
1
|
||||||
|
# Execute: echo $success ;
|
||||||
|
1
|
||||||
mysqltest: At line 1: Missing file name in source
|
mysqltest: At line 1: Missing file name in source
|
||||||
mysqltest: At line 1: Could not open file ./non_existingFile
|
mysqltest: At line 1: Could not open file ./non_existingFile
|
||||||
mysqltest: In included file "./var/tmp/recursive.sql": At line 1: Source directives are nesting too deep
|
mysqltest: In included file "./var/tmp/recursive.sql": At line 1: Source directives are nesting too deep
|
||||||
|
@ -539,6 +539,19 @@ echo $novar1;
|
|||||||
--error 1
|
--error 1
|
||||||
--exec echo "let hi;" | $MYSQL_TEST 2>&1
|
--exec echo "let hi;" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
|
# More advanced test for bug#17280
|
||||||
|
let $success= 1;
|
||||||
|
--echo # Execute: --echo # <whatever> success: \$success
|
||||||
|
--echo # <whatever> success: $success
|
||||||
|
--echo # Execute: echo # <whatever> success: \$success ;
|
||||||
|
echo # <whatever> success: $success ;
|
||||||
|
|
||||||
|
--echo # The next two variants work fine and expand the content of \$success
|
||||||
|
--echo # Execute: --echo \$success
|
||||||
|
--echo $success
|
||||||
|
--echo # Execute: echo \$success ;
|
||||||
|
echo $success ;
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Test to assign let from query
|
# Test to assign let from query
|
||||||
# let $<var_name>=`<query>`;
|
# let $<var_name>=`<query>`;
|
||||||
|
Reference in New Issue
Block a user