Commit 32b7c750 authored by Bjorn Munch's avatar Bjorn Munch

upmerge 58087

parents ef4458af 92a1a112
...@@ -488,7 +488,7 @@ VAR* var_init(VAR* v, const char *name, int name_len, const char *val, ...@@ -488,7 +488,7 @@ VAR* var_init(VAR* v, const char *name, int name_len, const char *val,
VAR* var_get(const char *var_name, const char** var_name_end, VAR* var_get(const char *var_name, const char** var_name_end,
my_bool raw, my_bool ignore_not_existing); my_bool raw, my_bool ignore_not_existing);
void eval_expr(VAR* v, const char *p, const char** p_end, void eval_expr(VAR* v, const char *p, const char** p_end,
bool open_end=false); bool open_end=false, bool backtick=true);
my_bool match_delimiter(int c, const char *delim, uint length); my_bool match_delimiter(int c, const char *delim, uint length);
void dump_result_to_reject_file(char *buf, int size); void dump_result_to_reject_file(char *buf, int size);
void dump_warning_messages(); void dump_warning_messages();
...@@ -2338,7 +2338,8 @@ void var_query_set(VAR *var, const char *query, const char** query_end) ...@@ -2338,7 +2338,8 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
dynstr_append_mem(&result, "\t", 1); dynstr_append_mem(&result, "\t", 1);
} }
end= result.str + result.length-1; end= result.str + result.length-1;
eval_expr(var, result.str, (const char**) &end); /* Evaluation should not recurse via backtick */
eval_expr(var, result.str, (const char**) &end, false, false);
dynstr_free(&result); dynstr_free(&result);
} }
else else
...@@ -2548,7 +2549,8 @@ void var_copy(VAR *dest, VAR *src) ...@@ -2548,7 +2549,8 @@ void var_copy(VAR *dest, VAR *src)
} }
void eval_expr(VAR *v, const char *p, const char **p_end, bool open_end) void eval_expr(VAR *v, const char *p, const char **p_end,
bool open_end, bool backtick)
{ {
DBUG_ENTER("eval_expr"); DBUG_ENTER("eval_expr");
...@@ -2573,7 +2575,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end, bool open_end) ...@@ -2573,7 +2575,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end, bool open_end)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
if (*p == '`') if (*p == '`' && backtick)
{ {
var_query_set(v, p, p_end); var_query_set(v, p, p_end);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
......
...@@ -308,6 +308,10 @@ var3 two columns with same name ...@@ -308,6 +308,10 @@ var3 two columns with same name
var4 from query that returns NULL var4 from query that returns NULL
var5 from query that returns no row var5 from query that returns no row
failing query in let failing query in let
create table t1 (a varchar(100));
insert into t1 values ('`select 42`');
`select 42`
drop table t1;
mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1 mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1
mysqltest: At line 1: Missing required argument 'filename' to command 'source' mysqltest: At line 1: Missing required argument 'filename' to command 'source'
mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2 mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2
......
...@@ -854,6 +854,13 @@ let $var2= `failing query`; ...@@ -854,6 +854,13 @@ let $var2= `failing query`;
echo $var2; echo $var2;
EOF EOF
create table t1 (a varchar(100));
insert into t1 values ('`select 42`');
let $a= `select * from t1`;
# This should output `select 42`, not evaluate it again to 42
echo $a;
drop table t1;
--error 1 --error 1
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/let.sql 2>&1 --exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/let.sql 2>&1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment