mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge with 4.0.15
This commit is contained in:
@ -42,7 +42,7 @@
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#define MTEST_VERSION "1.29"
|
||||
#define MTEST_VERSION "1.30"
|
||||
|
||||
#include <my_global.h>
|
||||
#include <mysql_embed.h>
|
||||
@ -226,6 +226,13 @@ const char *command_names[]=
|
||||
"connection",
|
||||
"query",
|
||||
"connect",
|
||||
/* the difference between sleep and real_sleep is that sleep will use
|
||||
the delay from command line (--sleep) if there is one.
|
||||
real_sleep always uses delay from it's argument.
|
||||
the logic is that sometimes delays are cpu-dependent (and --sleep
|
||||
can be used to set this delay. real_sleep is used for cpu-independent
|
||||
delays
|
||||
*/
|
||||
"sleep",
|
||||
"real_sleep",
|
||||
"inc",
|
||||
@ -501,15 +508,6 @@ void init_parser()
|
||||
memset(&var_reg,0, sizeof(var_reg));
|
||||
}
|
||||
|
||||
int hex_val(int c)
|
||||
{
|
||||
if (my_isdigit(charset_info,c))
|
||||
return c - '0';
|
||||
else if ((c = my_tolower(charset_info,c)) >= 'a' && c <= 'f')
|
||||
return c - 'a' + 10;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
int dyn_string_cmp(DYNAMIC_STRING* ds, const char* fname)
|
||||
{
|
||||
@ -862,7 +860,28 @@ int var_query_set(VAR* v, const char* p, const char** p_end)
|
||||
}
|
||||
|
||||
if ((row = mysql_fetch_row(res)) && row[0])
|
||||
eval_expr(v, row[0], 0);
|
||||
{
|
||||
/*
|
||||
Concatenate all row results with tab in between to allow us to work
|
||||
with results from many columns (for example from SHOW VARIABLES)
|
||||
*/
|
||||
DYNAMIC_STRING result;
|
||||
uint i;
|
||||
ulong *lengths;
|
||||
char *end;
|
||||
|
||||
init_dynamic_string(&result, "", 16384, 65536);
|
||||
lengths= mysql_fetch_lengths(res);
|
||||
for (i=0; i < mysql_num_fields(res); i++)
|
||||
{
|
||||
if (row[0])
|
||||
dynstr_append_mem(&result, row[i], lengths[i]);
|
||||
dynstr_append_mem(&result, "\t", 1);
|
||||
}
|
||||
end= result.str + result.length-1;
|
||||
eval_expr(v, result.str, (const char**) &end);
|
||||
dynstr_free(&result);
|
||||
}
|
||||
else
|
||||
eval_expr(v, "", 0);
|
||||
|
||||
@ -919,8 +938,6 @@ int eval_expr(VAR* v, const char* p, const char** p_end)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (p_end)
|
||||
*p_end = 0;
|
||||
die("Invalid expr: %s", p);
|
||||
return 1;
|
||||
}
|
||||
@ -1217,7 +1234,7 @@ static char *get_string(char **to_ptr, char **from_ptr,
|
||||
VAR *var=var_get(start, &end, 0, 1);
|
||||
if (var && to == (char*) end+1)
|
||||
{
|
||||
DBUG_PRINT("info",("var: %s -> %s", start, var->str_val));
|
||||
DBUG_PRINT("info",("var: '%s' -> '%s'", start, var->str_val));
|
||||
DBUG_RETURN(var->str_val); /* return found variable value */
|
||||
}
|
||||
}
|
||||
@ -1547,56 +1564,6 @@ int do_while(struct st_query* q)
|
||||
}
|
||||
|
||||
|
||||
int safe_copy_unescape(char* dest, char* src, int size)
|
||||
{
|
||||
register char* p_dest = dest, *p_src = src;
|
||||
register int c, val;
|
||||
enum { ST_NORMAL, ST_ESCAPED, ST_HEX2} state = ST_NORMAL ;
|
||||
|
||||
size--; /* just to make life easier */
|
||||
|
||||
for (; p_dest - size < dest && p_src - size < src &&
|
||||
(c = *p_src) != '\n' && c; ++p_src)
|
||||
{
|
||||
switch(state) {
|
||||
case ST_NORMAL:
|
||||
if (c == '\\')
|
||||
state = ST_ESCAPED;
|
||||
else
|
||||
*p_dest++ = c;
|
||||
break;
|
||||
case ST_ESCAPED:
|
||||
if ((val = hex_val(c)) > 0)
|
||||
{
|
||||
*p_dest = val;
|
||||
state = ST_HEX2;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = ST_NORMAL;
|
||||
*p_dest++ = c;
|
||||
}
|
||||
break;
|
||||
case ST_HEX2:
|
||||
if ((val = hex_val(c)) > 0)
|
||||
{
|
||||
*p_dest = (*p_dest << 4) + val;
|
||||
p_dest++;
|
||||
}
|
||||
else
|
||||
*p_dest++ = c;
|
||||
|
||||
state = ST_NORMAL;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
*p_dest = 0;
|
||||
return (p_dest - dest);
|
||||
}
|
||||
|
||||
|
||||
int read_line(char* buf, int size)
|
||||
{
|
||||
int c;
|
||||
|
Reference in New Issue
Block a user