summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <ram@gw.mysql.r18.ru>2003-09-24 16:13:47 +0500
committerunknown <ram@gw.mysql.r18.ru>2003-09-24 16:13:47 +0500
commit9e2b97fb25defd3478c0e27f9ac85702b24623bf (patch)
treea2bd339fd81dd7161229e2e1f4b31668ffbf5c8c /client
parent272b8d2485dab380b4504bad802b71f357562d20 (diff)
downloadmariadb-git-9e2b97fb25defd3478c0e27f9ac85702b24623bf.tar.gz
#1169: Add --exec command to mysqltest
Diffstat (limited to 'client')
-rw-r--r--client/mysqltest.c65
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;
}
}