1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

client/mysqlmanagerc.c

added support for quiet
    increased line buffer size
client/mysqltest.c
    fixed memory leak
    added query logging to result file
    added error message logging to result file
    added enable_query_log/disable_query_log
mysql-test/mysql-test-run.sh
    converted tests to use mysqlmanager

Updated test results
This commit is contained in:
sasha@mysql.sashanet.com
2001-09-27 23:05:54 -06:00
parent 043deed839
commit bb66c80aeb
160 changed files with 6687 additions and 81 deletions

View File

@ -173,6 +173,7 @@ static uint tokenize_args(char* arg_start,char** arg_end);
static void init_arg_array(char* arg_str,char** args,uint arg_count);
static int hex_val(char c);
static int open_and_dup(int fd,char* path);
static void update_req_len(struct manager_exec* e);
typedef int (*manager_cmd_handler)(struct manager_thd*,char*,char*);
@ -219,6 +220,7 @@ struct manager_exec
MYSQL mysql;
char* data_buf;
int req_len;
int start_wait_timeout;
int stderr_path_size,stdout_path_size,data_buf_size;
int num_args;
};
@ -244,6 +246,7 @@ HANDLE_DECL(stop_exec);
HANDLE_DECL(set_exec_con);
HANDLE_DECL(set_exec_stdout);
HANDLE_DECL(set_exec_stderr);
HANDLE_DECL(query);
HANDLE_NOARG_DECL(show_exec);
struct manager_cmd commands[] =
@ -262,6 +265,7 @@ struct manager_cmd commands[] =
handle_set_exec_stdout,15},
{"set_exec_stderr", "Set stderr path for executable entry",
handle_set_exec_stderr,15},
{"query","Run query against MySQL server",handle_query,5},
{"show_exec","Show defined executable entries",handle_show_exec,9},
{"help", "Print this message", handle_help,4},
{0,0,0,0}
@ -460,7 +464,7 @@ HANDLE_DECL(set_exec_con)
else
e->con_sock[0]=0;
}
else
else if(num_args > 4)
{
pthread_mutex_unlock(&lock_exec_hash);
error="Too many arguments";
@ -563,7 +567,7 @@ HANDLE_DECL(start_exec)
if ((error=e->error))
goto err;
pthread_mutex_lock(&e->lock);
t.tv_sec=time(0)+atoi(args_start+ident_len+1);
t.tv_sec=time(0)+(e->start_wait_timeout=atoi(args_start+ident_len+1));
t.tv_nsec=0;
if (!e->pid)
pthread_cond_timedwait(&e->cond,&e->lock,&t);
@ -642,6 +646,89 @@ err:
return 1;
}
HANDLE_DECL(query)
{
const char* error=0;
struct manager_exec* e;
MYSQL_RES* res=0;
MYSQL_ROW row;
MYSQL_FIELD* fields;
int num_fields,i,ident_len;
char* ident,*query;
query=ident=args_start;
while (!isspace(*query))
query++;
if (query == ident)
{
error="Missing server identifier";
goto err;
}
ident_len=(int)(query-ident);
while (query<args_end && isspace(*query))
query++;
if (query == args_end)
{
error="Missing query";
goto err;
}
pthread_mutex_lock(&lock_exec_hash);
if (!(e=(struct manager_exec*)hash_search(&exec_hash,ident,
ident_len)))
{
pthread_mutex_unlock(&lock_exec_hash);
error="Exec definition entry does not exist";
goto err;
}
pthread_mutex_unlock(&lock_exec_hash);
pthread_mutex_lock(&e->lock);
if (!e->pid)
{
error="Process is not running";
pthread_mutex_unlock(&e->lock);
goto err;
}
if (mysql_query(&e->mysql,query))
{
error=mysql_error(&e->mysql);
pthread_mutex_unlock(&e->lock);
goto err;
}
if ((res=mysql_store_result(&e->mysql)))
{
char buf[MAX_CLIENT_MSG_LEN],*p,*buf_end;
fields=mysql_fetch_fields(res);
num_fields=mysql_num_fields(res);
p=buf;
buf_end=buf+sizeof(buf);
for (i=0;i<num_fields && p<buf_end-2;i++)
{
p=arg_strmov(p,fields[i].name,buf_end-p-2);
*p++='\t';
}
*p=0;
client_msg_pre(thd->vio,MANAGER_OK,buf);
while ((row=mysql_fetch_row(res)))
{
p=buf;
for (i=0;i<num_fields && p<buf_end-2;i++)
{
p=arg_strmov(p,row[i],buf_end-p-2);
*p++='\t';
}
*p=0;
client_msg_pre(thd->vio,MANAGER_OK,buf);
}
}
pthread_mutex_unlock(&e->lock);
client_msg(thd->vio,MANAGER_OK,"End");
return 0;
err:
client_msg(thd->vio,MANAGER_CLIENT_ERR,error);
return 1;
}
HANDLE_DECL(def_exec)
{
struct manager_exec* e=0,*old_e;
@ -660,9 +747,14 @@ HANDLE_DECL(def_exec)
if ((old_e=(struct manager_exec*)hash_search(&exec_hash,(byte*)e->ident,
e->ident_len)))
{
pthread_mutex_unlock(&lock_exec_hash);
error="Exec definition already exists";
goto err;
strnmov(e->stdout_path,old_e->stdout_path,sizeof(e->stdout_path));
strnmov(e->stderr_path,old_e->stderr_path,sizeof(e->stderr_path));
strnmov(e->con_user,old_e->con_user,sizeof(e->con_user));
strnmov(e->con_host,old_e->con_host,sizeof(e->con_host));
strnmov(e->con_sock,old_e->con_sock,sizeof(e->con_sock));
e->con_port=old_e->con_port;
update_req_len(e);
hash_delete(&exec_hash,(byte*)old_e);
}
hash_insert(&exec_hash,(byte*)e);
pthread_mutex_unlock(&lock_exec_hash);
@ -712,7 +804,12 @@ static struct manager_exec* manager_exec_by_pid(pid_t pid)
static void manager_exec_connect(struct manager_exec* e)
{
int i;
for (i=0;i<manager_connect_retries;i++)
int connect_retries;
if (!(connect_retries=e->start_wait_timeout))
connect_retries=manager_connect_retries;
for (i=0;i<connect_retries;i++)
{
if (mysql_real_connect(&e->mysql,e->con_host,e->con_user,e->con_pass,0,
e->con_port,e->con_sock,0))
@ -1426,6 +1523,12 @@ static uint tokenize_args(char* arg_start,char** arg_end)
return arg_count;
}
static void update_req_len(struct manager_exec* e)
{
e->req_len=e->data_buf_size+
(e->stdout_path_size=strlen(e->stdout_path)+1)+
(e->stderr_path_size=strlen(e->stderr_path)+1);
}
static struct manager_exec* manager_exec_new(char* arg_start,char* arg_end)
{