summaryrefslogtreecommitdiff
path: root/client/mysqltest.c
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-09-11 20:31:40 +0300
committerunknown <monty@mashka.mysql.fi>2003-09-11 20:31:40 +0300
commit41824a35338012ff8196eb975f961d5e0f0e2a22 (patch)
tree1475a169c541e6b7aedb36103dd255fe52fc0517 /client/mysqltest.c
parent07bc35e1d024e5e3b81b131a47878510f0521609 (diff)
parentd32bdcb1bfc274476cdd945e66e00f3ec31253c3 (diff)
downloadmariadb-git-41824a35338012ff8196eb975f961d5e0f0e2a22.tar.gz
merge with 4.1 tree
client/mysqltest.c: Auto merged include/mysql.h: Auto merged libmysql/errmsg.c: Auto merged libmysql/libmysql.c: Auto merged mysql-test/mysql-test-run.sh: Auto merged sql/field.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_yacc.yy: Auto merged tests/client_test.c: Auto merged
Diffstat (limited to 'client/mysqltest.c')
-rw-r--r--client/mysqltest.c95
1 files changed, 31 insertions, 64 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 7b5aee49bd5..92ed47221bd 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -42,7 +42,7 @@
**********************************************************************/
-#define MTEST_VERSION "1.29"
+#define MTEST_VERSION "1.30"
#include <my_global.h>
#include <mysql_embed.h>
@@ -227,6 +227,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",
@@ -503,15 +510,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)
{
@@ -924,7 +922,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);
@@ -981,8 +1000,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;
}
@@ -1279,7 +1296,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 */
}
}
@@ -1609,56 +1626,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;