diff options
author | unknown <ram@gw.mysql.r18.ru> | 2003-09-24 16:13:47 +0500 |
---|---|---|
committer | unknown <ram@gw.mysql.r18.ru> | 2003-09-24 16:13:47 +0500 |
commit | 9e2b97fb25defd3478c0e27f9ac85702b24623bf (patch) | |
tree | a2bd339fd81dd7161229e2e1f4b31668ffbf5c8c /client | |
parent | 272b8d2485dab380b4504bad802b71f357562d20 (diff) | |
download | mariadb-git-9e2b97fb25defd3478c0e27f9ac85702b24623bf.tar.gz |
#1169: Add --exec command to mysqltest
Diffstat (limited to 'client')
-rw-r--r-- | client/mysqltest.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c index d733ab58243..a02fdf30601 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -199,6 +199,7 @@ 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_EXEC, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ Q_COMMENT_WITH_COMMAND @@ -264,6 +265,7 @@ const char *command_names[]= "require_manager", "wait_for_slave_to_stop", "require_version", + "exec", 0 }; @@ -821,6 +823,66 @@ int do_source(struct st_query* q) return open_file(name); } +/* + Execute given command. + + SYNOPSIS + do_exec() + q called command + + DESCRIPTION + If one uses --exec command [args] command in .test file + we will execute the command and record its output. + + RETURN VALUES + 0 ok + 1 error +*/ + +int do_exec(struct st_query* q) +{ + int error= 0; + DYNAMIC_STRING *ds; + DYNAMIC_STRING ds_tmp; + char buf[1024]; + FILE *res_file; + char *cmd= q->first_argument; + + while (*cmd && isspace(*cmd)) + cmd++; + if (!*cmd) + die("Missing argument in exec\n"); + + if (q->record_file[0]) + { + init_dynamic_string(&ds_tmp, "", 16384, 65536); + ds= &ds_tmp; + } + else + ds= &ds_res; + + if (!(res_file= popen(cmd, "r")) && q->abort_on_error) + die("popen() failed\n"); + while (fgets(buf, sizeof(buf), res_file)) + dynstr_append(ds, buf); + pclose(res_file); + if (record) + { + if (!q->record_file[0] && !result_file) + die("At line %u: Missing result file", start_lineno); + if (!result_file) + str_to_file(q->record_file, ds->str, ds->length); + } + else if (q->record_file[0]) + { + error= check_result(ds, q->record_file, q->require_file); + } + if (ds == &ds_tmp) + dynstr_free(&ds_tmp); + + return error; +} + int var_query_set(VAR* v, const char* p, const char** p_end) { char* end = (char*)((p_end && *p_end) ? *p_end : p + strlen(p)); @@ -2469,6 +2531,9 @@ int main(int argc, char** argv) case Q_PING: (void) mysql_ping(&cur_con->mysql); break; + case Q_EXEC: + (void) do_exec(q); + break; default: processed = 0; break; } } |