summaryrefslogtreecommitdiff
path: root/client/mysqltest.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/mysqltest.c')
-rw-r--r--client/mysqltest.c122
1 files changed, 53 insertions, 69 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index a42b4698b3c..ebaa18da0c2 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -59,7 +59,8 @@
#include <sys/stat.h>
#include <violite.h>
-#define MAX_QUERY 65536
+#define MAX_QUERY 131072
+#define MAX_VAR_NAME 256
#define MAX_COLUMNS 256
#define PAD_SIZE 128
#define MAX_CONS 128
@@ -223,7 +224,6 @@ Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
Q_SERVER_START, Q_SERVER_STOP,Q_REQUIRE_MANAGER,
Q_WAIT_FOR_SLAVE_TO_STOP,
-Q_REQUIRE_VERSION,
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
Q_ENABLE_INFO, Q_DISABLE_INFO,
Q_ENABLE_METADATA, Q_DISABLE_METADATA,
@@ -296,7 +296,6 @@ const char *command_names[]=
"server_stop",
"require_manager",
"wait_for_slave_to_stop",
- "require_version",
"enable_warnings",
"disable_warnings",
"enable_info",
@@ -386,6 +385,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
register char c;
register int escaped = 0;
VAR* v;
+ DBUG_ENTER("do_eval");
for (p= query; (c = *p); ++p)
{
@@ -417,6 +417,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
break;
}
}
+ DBUG_VOID_RETURN;
}
@@ -628,6 +629,7 @@ static int check_result(DYNAMIC_STRING* ds, const char* fname,
return error;
}
+
VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw,
my_bool ignore_not_existing)
{
@@ -639,28 +641,29 @@ VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw,
if (*var_name != '$')
goto err;
digit = *++var_name - '0';
- if (!(digit < 10 && digit >= 0))
+ if (digit < 0 || digit >= 10)
{
const char* save_var_name = var_name, *end;
+ uint length;
end = (var_name_end) ? *var_name_end : 0;
while (my_isvar(charset_info,*var_name) && var_name != end)
- ++var_name;
+ var_name++;
if (var_name == save_var_name)
{
if (ignore_not_existing)
DBUG_RETURN(0);
die("Empty variable");
}
+ length= (uint) (var_name - save_var_name);
- if (!(v = (VAR*) hash_search(&var_hash, save_var_name,
- var_name - save_var_name)))
+ if (!(v = (VAR*) hash_search(&var_hash, save_var_name, length)) &&
+ length < MAX_VAR_NAME)
{
- char c=*var_name, *s=(char*)var_name;;
- *s=0;
- v=var_from_env(save_var_name, "");
- *s=c;
+ char buff[MAX_VAR_NAME+1];
+ strmake(buff, save_var_name, length);
+ v= var_from_env(buff, "");
}
- --var_name; /* Point at last character */
+ var_name--; /* Point at last character */
}
else
v = var_reg + digit;
@@ -812,42 +815,6 @@ int do_server_op(struct st_query* q,const char* op)
}
#endif
-int do_require_version(struct st_query* q)
-{
- MYSQL* mysql = &cur_con->mysql;
- MYSQL_RES* res;
- MYSQL_ROW row;
- char* p=q->first_argument, *ver_arg;
- uint ver_arg_len,ver_len;
- LINT_INIT(res);
-
- if (!*p)
- die("Missing version argument in require_version\n");
- ver_arg = p;
- while (*p && !my_isspace(charset_info,*p))
- p++;
- *p = 0;
- ver_arg_len = p - ver_arg;
-
- if (mysql_query(mysql, "select version()") ||
- !(res=mysql_store_result(mysql)))
- die("Query failed while check server version: %s",
- mysql_error(mysql));
- if (!(row=mysql_fetch_row(res)) || !row[0])
- {
- mysql_free_result(res);
- die("Strange result from query while checking version");
- }
- ver_len = strlen(row[0]);
- if (ver_len < ver_arg_len || memcmp(row[0],ver_arg,ver_arg_len))
- {
- mysql_free_result(res);
- abort_not_supported_test();
- }
- mysql_free_result(res);
- return 0;
-}
-
int do_source(struct st_query* q)
{
char* p=q->first_argument, *name;
@@ -1604,6 +1571,7 @@ int do_connect(struct st_query* q)
if (opt_compress)
mysql_options(&next_con->mysql,MYSQL_OPT_COMPRESS,NullS);
mysql_options(&next_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
+ mysql_options(&next_con->mysql, MYSQL_SET_CHARSET_NAME, "latin1");
#ifdef HAVE_OPENSSL
if (opt_use_ssl)
@@ -1740,6 +1708,7 @@ int read_line(char* buf, int size)
enum {R_NORMAL, R_Q1, R_ESC_Q_Q1, R_ESC_Q_Q2,
R_ESC_SLASH_Q1, R_ESC_SLASH_Q2,
R_Q2, R_COMMENT, R_LINE_START} state= R_LINE_START;
+ DBUG_ENTER("read_line");
start_lineno= *lineno;
for (; p < buf_end ;)
@@ -1753,7 +1722,7 @@ int read_line(char* buf, int size)
cur_file--;
lineno--;
if (cur_file == file_stack)
- return 1;
+ DBUG_RETURN(1);
continue;
}
@@ -1763,7 +1732,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (c == '\'')
state = R_Q1;
@@ -1780,7 +1749,7 @@ int read_line(char* buf, int size)
{
*p= 0;
(*lineno)++;
- return 0;
+ DBUG_RETURN(0);
}
break;
case R_LINE_START:
@@ -1798,12 +1767,12 @@ int read_line(char* buf, int size)
{
*buf++= '}';
*buf= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (end_of_query(c) || c == '{')
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (c == '\'')
state= R_Q1;
@@ -1823,7 +1792,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
if (c != '\'')
state= R_NORMAL;
@@ -1844,7 +1813,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
if (c != '"')
state= R_NORMAL;
@@ -1860,7 +1829,7 @@ int read_line(char* buf, int size)
*p++= c;
}
*p= 0; /* Always end with \0 */
- return feof(*cur_file);
+ DBUG_RETURN(feof(*cur_file));
}
@@ -1885,23 +1854,28 @@ int read_query(struct st_query** q_ptr)
q->record_file[0]= 0;
q->require_file= 0;
q->first_word_len= 0;
- memcpy((gptr) q->expected_errno, (gptr) global_expected_errno,
- sizeof(global_expected_errno));
- q->expected_errors= global_expected_errors;
- q->abort_on_error= global_expected_errors == 0;
- bzero((gptr) global_expected_errno, sizeof(global_expected_errno));
- global_expected_errors=0;
q->type = Q_UNKNOWN;
q->query_buf= q->query= 0;
if (read_line(read_query_buf, sizeof(read_query_buf)))
+ {
+ DBUG_PRINT("warning",("too long query"));
DBUG_RETURN(1);
-
+ }
+ DBUG_PRINT("info", ("query: %s", read_query_buf));
if (*p == '#')
{
q->type = Q_COMMENT;
+ /* This goto is to avoid losing the "expected error" info. */
+ goto end;
}
- else if (p[0] == '-' && p[1] == '-')
+ memcpy((gptr) q->expected_errno, (gptr) global_expected_errno,
+ sizeof(global_expected_errno));
+ q->expected_errors= global_expected_errors;
+ q->abort_on_error= global_expected_errors == 0;
+ bzero((gptr) global_expected_errno, sizeof(global_expected_errno));
+ global_expected_errors=0;
+ if (p[0] == '-' && p[1] == '-')
{
q->type= Q_COMMENT_WITH_COMMAND;
p+= 2; /* To calculate first word */
@@ -1936,6 +1910,8 @@ int read_query(struct st_query** q_ptr)
*p1 = 0;
}
}
+
+end:
while (*p && my_isspace(charset_info, *p))
p++;
if (!(q->query_buf= q->query= my_strdup(p, MYF(MY_WME))))
@@ -2262,6 +2238,7 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
char* query;
int query_len, got_error_on_send= 0;
DBUG_ENTER("run_query");
+ DBUG_PRINT("enter",("flags: %d", flags));
if (q->type != Q_EVAL)
{
@@ -2663,6 +2640,8 @@ int main(int argc, char **argv)
if (opt_compress)
mysql_options(&cur_con->mysql,MYSQL_OPT_COMPRESS,NullS);
mysql_options(&cur_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
+ mysql_options(&cur_con->mysql, MYSQL_SET_CHARSET_NAME, "latin1");
+
#ifdef HAVE_OPENSSL
if (opt_use_ssl)
mysql_ssl_set(&cur_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
@@ -2700,14 +2679,13 @@ int main(int argc, char **argv)
case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
case Q_ENABLE_WARNINGS: disable_warnings=0; break;
case Q_DISABLE_WARNINGS: disable_warnings=1; break;
- case Q_ENABLE_INFO: disable_info=0; break;
- case Q_DISABLE_INFO: disable_info=1; break;
+ case Q_ENABLE_INFO: disable_info=0; break;
+ case Q_DISABLE_INFO: disable_info=1; break;
case Q_ENABLE_METADATA: display_metadata=1; break;
- case Q_DISABLE_METADATA: display_metadata=0; break;
+ case Q_DISABLE_METADATA: display_metadata=0; break;
case Q_SOURCE: do_source(q); break;
case Q_SLEEP: do_sleep(q, 0); break;
case Q_REAL_SLEEP: do_sleep(q, 1); break;
- case Q_REQUIRE_VERSION: do_require_version(q); break;
case Q_WAIT_FOR_SLAVE_TO_STOP: do_wait_for_slave_to_stop(q); break;
case Q_REQUIRE_MANAGER: do_require_manager(q); break;
#ifndef EMBEDDED_LIBRARY
@@ -2729,7 +2707,10 @@ int main(int argc, char **argv)
case Q_EVAL_RESULT: eval_result = 1; break;
case Q_EVAL:
if (q->query == q->query_buf)
+ {
q->query= q->first_argument;
+ q->first_word_len= 0;
+ }
/* fall through */
case Q_QUERY_VERTICAL:
case Q_QUERY_HORIZONTAL:
@@ -2739,13 +2720,16 @@ int main(int argc, char **argv)
{
/* This happens when we use 'query_..' on it's own line */
q_send_flag=1;
+ DBUG_PRINT("info",
+ ("query: '%s' first_word_len: %d send_flag=1",
+ q->query, q->first_word_len));
break;
}
/* fix up query pointer if this is * first iteration for this line */
if (q->query == q->query_buf)
q->query += q->first_word_len + 1;
display_result_vertically= (q->type==Q_QUERY_VERTICAL);
- error |= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND);
+ error|= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND);
display_result_vertically= old_display_result_vertically;
break;
}