Merge a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-4.1

into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0
parents c753d587 7c57c41a
...@@ -98,6 +98,10 @@ ...@@ -98,6 +98,10 @@
#define DEFAULT_DELIMITER ";" #define DEFAULT_DELIMITER ";"
#define MAX_DELIMITER 16 #define MAX_DELIMITER 16
#define RESULT_OK 0
#define RESULT_CONTENT_MISMATCH 1
#define RESULT_LENGTH_MISMATCH 2
enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD, enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD,
OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC, OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC,
OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH,
...@@ -679,7 +683,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) ...@@ -679,7 +683,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
DBUG_PRINT("info",("Size differs: result size: %u file size: %u", DBUG_PRINT("info",("Size differs: result size: %u file size: %u",
ds->length, stat_info.st_size)); ds->length, stat_info.st_size));
DBUG_PRINT("info",("result: '%s'", ds->str)); DBUG_PRINT("info",("result: '%s'", ds->str));
DBUG_RETURN(2); DBUG_RETURN(RESULT_LENGTH_MISMATCH);
} }
if (!(tmp = (char*) my_malloc(stat_info.st_size + 1, MYF(MY_WME)))) if (!(tmp = (char*) my_malloc(stat_info.st_size + 1, MYF(MY_WME))))
die(NullS); die(NullS);
...@@ -696,7 +700,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) ...@@ -696,7 +700,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
res_ptr = res_ds.str; res_ptr = res_ds.str;
if ((res_len = res_ds.length) != ds->length) if ((res_len = res_ds.length) != ds->length)
{ {
res = 2; res= RESULT_LENGTH_MISMATCH;
goto err; goto err;
} }
} }
...@@ -706,7 +710,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) ...@@ -706,7 +710,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
res_len = stat_info.st_size; res_len = stat_info.st_size;
} }
res = (memcmp(res_ptr, ds->str, res_len)) ? 1 : 0; res= (memcmp(res_ptr, ds->str, res_len)) ?
RESULT_CONTENT_MISMATCH : RESULT_OK;
err: err:
if (res && eval_result) if (res && eval_result)
...@@ -723,22 +728,23 @@ err: ...@@ -723,22 +728,23 @@ err:
static int check_result(DYNAMIC_STRING* ds, const char *fname, static int check_result(DYNAMIC_STRING* ds, const char *fname,
my_bool require_option) my_bool require_option)
{ {
int error = 0; int error= RESULT_OK;
int res=dyn_string_cmp(ds, fname); int res= dyn_string_cmp(ds, fname);
DBUG_ENTER("check_result"); DBUG_ENTER("check_result");
if (res && require_option) if (res && require_option)
abort_not_supported_test(); abort_not_supported_test();
switch (res) { switch (res) {
case 0: case RESULT_OK:
break; /* ok */ break; /* ok */
case 2: case RESULT_LENGTH_MISMATCH:
verbose_msg("Result length mismatch"); verbose_msg("Result length mismatch");
error = 1; error= RESULT_LENGTH_MISMATCH;
break; break;
case 1: case RESULT_CONTENT_MISMATCH:
verbose_msg("Result content mismatch"); verbose_msg("Result content mismatch");
error = 1; error= RESULT_CONTENT_MISMATCH;
break; break;
default: /* impossible */ default: /* impossible */
die("Unknown error code from dyn_string_cmp()"); die("Unknown error code from dyn_string_cmp()");
...@@ -3944,8 +3950,10 @@ int main(int argc, char **argv) ...@@ -3944,8 +3950,10 @@ int main(int argc, char **argv)
{ {
int error = 0; int error = 0;
struct st_query *q; struct st_query *q;
my_bool require_file=0, q_send_flag=0, abort_flag= 0; my_bool require_file=0, q_send_flag=0, abort_flag= 0,
query_executed= 0;
char save_file[FN_REFLEN]; char save_file[FN_REFLEN];
MY_STAT res_info;
MY_INIT(argv[0]); MY_INIT(argv[0]);
/* Use all time until exit if no explicit 'start_timer' */ /* Use all time until exit if no explicit 'start_timer' */
...@@ -4141,6 +4149,7 @@ int main(int argc, char **argv) ...@@ -4141,6 +4149,7 @@ int main(int argc, char **argv)
save_file[0]=0; save_file[0]=0;
} }
error |= run_query(&cur_con->mysql, q, flags); error |= run_query(&cur_con->mysql, q, flags);
query_executed= 1;
q->last_argument= q->end; q->last_argument= q->end;
break; break;
} }
...@@ -4161,6 +4170,7 @@ int main(int argc, char **argv) ...@@ -4161,6 +4170,7 @@ int main(int argc, char **argv)
is given on this connection. is given on this connection.
*/ */
error |= run_query(&cur_con->mysql, q, QUERY_SEND); error |= run_query(&cur_con->mysql, q, QUERY_SEND);
query_executed= 1;
q->last_argument= q->end; q->last_argument= q->end;
break; break;
case Q_RESULT: case Q_RESULT:
...@@ -4201,6 +4211,7 @@ int main(int argc, char **argv) ...@@ -4201,6 +4211,7 @@ int main(int argc, char **argv)
break; break;
case Q_EXEC: case Q_EXEC:
do_exec(q); do_exec(q);
query_executed= 1;
break; break;
case Q_START_TIMER: case Q_START_TIMER:
/* Overwrite possible earlier start of timer */ /* Overwrite possible earlier start of timer */
...@@ -4280,6 +4291,18 @@ int main(int argc, char **argv) ...@@ -4280,6 +4291,18 @@ int main(int argc, char **argv)
parser.current_line += current_line_inc; parser.current_line += current_line_inc;
} }
if (!query_executed && result_file && my_stat(result_file, &res_info, 0))
{
/*
my_stat() successful on result file. Check if we have not run a
single query, but we do have a result file that contains data.
Note that we don't care, if my_stat() fails. For example for
non-existing or non-readable file we assume it's fine to have
no query output from the test file, e.g. regarded as no error.
*/
if (res_info.st_size)
error|= (RESULT_CONTENT_MISMATCH | RESULT_LENGTH_MISMATCH);
}
if (result_file && ds_res.length && !error) if (result_file && ds_res.length && !error)
{ {
if (!record) if (!record)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment