mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Bug #12956584 MYSQLTEST: --ENABLE_X OR --DISABLE_X APPLYING ONLY TO NEXT COMMAND/STMT
Added a keyword ONCE to add to those commands Some internal tables to keep track of which properties are temporarily overriden Added tests in mysqltest.test Updates to other tests will be done later
This commit is contained in:
parent
0aef577ab7
commit
79b7d05c4c
3 changed files with 173 additions and 39 deletions
|
@ -118,6 +118,41 @@ static char **default_argv;
|
|||
static const char *load_default_groups[]= { "mysqltest", "client", 0 };
|
||||
static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer;
|
||||
|
||||
/* Info on properties that can be set with --enable_X and --disable_X */
|
||||
|
||||
struct property {
|
||||
my_bool *var; /* Actual variable */
|
||||
my_bool set; /* Has been set for ONE command */
|
||||
my_bool old; /* If set, thus is the old value */
|
||||
my_bool reverse; /* Varible is true if disabled */
|
||||
const char *env_name; /* Env. variable name */
|
||||
};
|
||||
|
||||
static struct property prop_list[] = {
|
||||
{ &abort_on_error, 0, 1, 0, "$ENABLED_ABORT_ON_ERROR" },
|
||||
{ &disable_connect_log, 0, 1, 1, "$ENABLED_CONNECT_LOG" },
|
||||
{ &disable_info, 0, 1, 1, "$ENABLED_INFO" },
|
||||
{ &display_metadata, 0, 0, 0, "$ENABLED_METADATA" },
|
||||
{ &ps_protocol, 0, 0, 0, "$ENABLED_PS_PROTOCOL" },
|
||||
{ &disable_query_log, 0, 0, 1, "$ENABLED_QUERY_LOG" },
|
||||
{ &disable_result_log, 0, 0, 1, "$ENABLED_RESULT_LOG" },
|
||||
{ &disable_warnings, 0, 0, 1, "$ENABLED_WARNINGS" }
|
||||
};
|
||||
|
||||
static my_bool once_property= FALSE;
|
||||
|
||||
enum enum_prop {
|
||||
P_ABORT= 0,
|
||||
P_CONNECT,
|
||||
P_INFO,
|
||||
P_META,
|
||||
P_PS,
|
||||
P_QUERY,
|
||||
P_RESULT,
|
||||
P_WARN,
|
||||
P_MAX
|
||||
};
|
||||
|
||||
static uint start_lineno= 0; /* Start line of current command */
|
||||
static uint my_end_arg= 0;
|
||||
|
||||
|
@ -712,6 +747,7 @@ void handle_error(struct st_command*,
|
|||
unsigned int err_errno, const char *err_error,
|
||||
const char *err_sqlstate, DYNAMIC_STRING *ds);
|
||||
void handle_no_error(struct st_command*);
|
||||
void revert_properties();
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
|
||||
|
@ -1174,6 +1210,7 @@ void handle_command_error(struct st_command *command, uint error)
|
|||
{
|
||||
DBUG_PRINT("info", ("command \"%.*s\" failed with expected error: %d",
|
||||
command->first_word_len, command->query, error));
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
if (command->expected_errors.count > 0)
|
||||
|
@ -1188,6 +1225,7 @@ void handle_command_error(struct st_command *command, uint error)
|
|||
command->first_word_len, command->query,
|
||||
command->expected_errors.err[0].code.errnum);
|
||||
}
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -2267,6 +2305,50 @@ void var_set_errno(int sql_errno)
|
|||
var_set_string("$mysql_errname", get_errname_from_code(sql_errno));
|
||||
}
|
||||
|
||||
/* Functions to handle --disable and --enable properties */
|
||||
|
||||
void set_once_property(enum_prop prop, my_bool val)
|
||||
{
|
||||
property &pr= prop_list[prop];
|
||||
pr.set= 1;
|
||||
pr.old= *pr.var;
|
||||
*pr.var= val;
|
||||
var_set_int(pr.env_name, (val != pr.reverse));
|
||||
once_property= TRUE;
|
||||
}
|
||||
|
||||
void set_property(st_command *command, enum_prop prop, my_bool val)
|
||||
{
|
||||
char* p= command->first_argument;
|
||||
if (p && !strcmp (p, "ONCE"))
|
||||
{
|
||||
command->last_argument= p + 4;
|
||||
set_once_property(prop, val);
|
||||
return;
|
||||
}
|
||||
property &pr= prop_list[prop];
|
||||
*pr.var= val;
|
||||
pr.set= 0;
|
||||
var_set_int(pr.env_name, (val != pr.reverse));
|
||||
}
|
||||
|
||||
void revert_properties()
|
||||
{
|
||||
if (! once_property)
|
||||
return;
|
||||
for (int i= 0; i < (int) P_MAX; i++)
|
||||
{
|
||||
property &pr= prop_list[i];
|
||||
if (pr.set)
|
||||
{
|
||||
*pr.var= pr.old;
|
||||
pr.set= 0;
|
||||
var_set_int(pr.env_name, (pr.old != pr.reverse));
|
||||
}
|
||||
}
|
||||
once_property=FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Set variable from the result of a query
|
||||
|
@ -4426,6 +4508,7 @@ void do_let(struct st_command *command)
|
|||
var_set(var_name, var_name_end, let_rhs_expr.str,
|
||||
(let_rhs_expr.str + let_rhs_expr.length));
|
||||
dynstr_free(&let_rhs_expr);
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -7354,6 +7437,7 @@ void handle_error(struct st_command *command,
|
|||
dynstr_append(ds,"Got one of the listed errors\n");
|
||||
}
|
||||
/* OK */
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -7381,6 +7465,7 @@ void handle_error(struct st_command *command,
|
|||
command->expected_errors.err[0].code.sqlstate);
|
||||
}
|
||||
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -7415,6 +7500,7 @@ void handle_no_error(struct st_command *command)
|
|||
command->query, command->expected_errors.err[0].code.sqlstate);
|
||||
}
|
||||
|
||||
revert_properties();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -8475,60 +8561,46 @@ int main(int argc, char **argv)
|
|||
case Q_DIRTY_CLOSE:
|
||||
do_close_connection(command); break;
|
||||
case Q_ENABLE_QUERY_LOG:
|
||||
disable_query_log= 0;
|
||||
var_set_int("$ENABLED_QUERY_LOG", 1);
|
||||
set_property(command, P_QUERY, 0);
|
||||
break;
|
||||
case Q_DISABLE_QUERY_LOG:
|
||||
disable_query_log= 1;
|
||||
var_set_int("$ENABLED_QUERY_LOG", 0);
|
||||
set_property(command, P_QUERY, 1);
|
||||
break;
|
||||
case Q_ENABLE_ABORT_ON_ERROR:
|
||||
abort_on_error= 1;
|
||||
var_set_int("$ENABLED_ABORT_ON_ERROR", 1);
|
||||
set_property(command, P_ABORT, 1);
|
||||
break;
|
||||
case Q_DISABLE_ABORT_ON_ERROR:
|
||||
abort_on_error= 0;
|
||||
var_set_int("$ENABLED_ABORT_ON_ERROR", 0);
|
||||
set_property(command, P_ABORT, 0);
|
||||
break;
|
||||
case Q_ENABLE_RESULT_LOG:
|
||||
disable_result_log= 0;
|
||||
var_set_int("$ENABLED_RESULT_LOG", 1);
|
||||
set_property(command, P_RESULT, 0);
|
||||
break;
|
||||
case Q_DISABLE_RESULT_LOG:
|
||||
disable_result_log=1;
|
||||
var_set_int("$ENABLED_RESULT_LOG", 0);
|
||||
set_property(command, P_RESULT, 1);
|
||||
break;
|
||||
case Q_ENABLE_CONNECT_LOG:
|
||||
disable_connect_log=0;
|
||||
var_set_int("$ENABLED_CONNECT_LOG", 1);
|
||||
set_property(command, P_CONNECT, 0);
|
||||
break;
|
||||
case Q_DISABLE_CONNECT_LOG:
|
||||
disable_connect_log=1;
|
||||
var_set_int("$ENABLED_CONNECT_LOG", 0);
|
||||
set_property(command, P_CONNECT, 1);
|
||||
break;
|
||||
case Q_ENABLE_WARNINGS:
|
||||
disable_warnings= 0;
|
||||
var_set_int("$ENABLED_WARNINGS", 1);
|
||||
set_property(command, P_WARN, 0);
|
||||
break;
|
||||
case Q_DISABLE_WARNINGS:
|
||||
disable_warnings= 1;
|
||||
var_set_int("$ENABLED_WARNINGS", 0);
|
||||
set_property(command, P_WARN, 1);
|
||||
break;
|
||||
case Q_ENABLE_INFO:
|
||||
disable_info= 0;
|
||||
var_set_int("$ENABLED_INFO", 1);
|
||||
set_property(command, P_INFO, 0);
|
||||
break;
|
||||
case Q_DISABLE_INFO:
|
||||
disable_info= 1;
|
||||
var_set_int("$ENABLED_INFO", 0);
|
||||
set_property(command, P_INFO, 1);
|
||||
break;
|
||||
case Q_ENABLE_METADATA:
|
||||
display_metadata= 1;
|
||||
var_set_int("$ENABLED_METADATA", 1);
|
||||
set_property(command, P_META, 1);
|
||||
break;
|
||||
case Q_DISABLE_METADATA:
|
||||
display_metadata= 0;
|
||||
var_set_int("$ENABLED_METADATA", 0);
|
||||
set_property(command, P_META, 0);
|
||||
break;
|
||||
case Q_SOURCE: do_source(command); break;
|
||||
case Q_SLEEP: do_sleep(command, 0); break;
|
||||
|
@ -8744,12 +8816,12 @@ int main(int argc, char **argv)
|
|||
do_set_charset(command);
|
||||
break;
|
||||
case Q_DISABLE_PS_PROTOCOL:
|
||||
ps_protocol_enabled= 0;
|
||||
set_property(command, P_PS, 0);
|
||||
/* Close any open statements */
|
||||
close_statements();
|
||||
break;
|
||||
case Q_ENABLE_PS_PROTOCOL:
|
||||
ps_protocol_enabled= ps_protocol;
|
||||
set_property(command, P_PS, 1);
|
||||
break;
|
||||
case Q_DISABLE_RECONNECT:
|
||||
set_reconnect(&cur_con->mysql, 0);
|
||||
|
|
|
@ -160,6 +160,25 @@ after_--enable_abort_on_error
|
|||
select 3 from t1 ;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
mysqltest: At line 1: query 'select 3 from t1' failed with wrong errno 1146: 'Table 'test.t1' doesn't exist', instead of 1064...
|
||||
garbage;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1
|
||||
select 2;
|
||||
select 3;
|
||||
3
|
||||
3
|
||||
select 5;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
select 7;
|
||||
7
|
||||
7
|
||||
mysqltest: At line 1: End of line junk detected: "OCNE"
|
||||
connect con1,localhost,root,,;
|
||||
select 5 from t1;
|
||||
lower
|
||||
case
|
||||
name
|
||||
abc
|
||||
xyz
|
||||
hello
|
||||
hello
|
||||
;;;;;;;;
|
||||
|
|
|
@ -383,6 +383,54 @@ select 3 from t1 ;
|
|||
--error 1
|
||||
--exec echo "disable_abort_on_error; enable_abort_on_error; error 1064; select 3 from t1; select 3 from t1;" | $MYSQL_TEST 2>&1
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test --enable and --disable with ONCE
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
--disable_abort_on_error ONCE
|
||||
garbage;
|
||||
--disable_abort_on_error ONCE
|
||||
--remove_file DoesNotExist
|
||||
|
||||
--disable_result_log
|
||||
select 2;
|
||||
--enable_result_log ONCE
|
||||
select 3;
|
||||
select 5;
|
||||
--enable_result_log
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test cumulative ONCE
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
--disable_abort_on_error ONCE
|
||||
--disable_query_log ONCE
|
||||
select 3 from t1;
|
||||
select 7;
|
||||
|
||||
--error 1
|
||||
--exec echo "--disable_info OCNE" | $MYSQL_TEST 2>&1
|
||||
|
||||
--enable_connect_log ONCE
|
||||
connect (con1,localhost,root,,);
|
||||
connection default;
|
||||
disconnect con1;
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test ONCE can be combined with --error or modifiers like lowercase
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
--disable_result_log ONCE
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select 5 from t1;
|
||||
|
||||
--disable_query_log ONCE
|
||||
--lowercase_result
|
||||
select "CASE" as "LOWER";
|
||||
|
||||
--sorted_result
|
||||
--disable_query_log ONCE
|
||||
select "xyz" as name union select "abc" as name order by name desc;
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test comments
|
||||
|
@ -952,10 +1000,9 @@ while ($outer)
|
|||
--source $MYSQLTEST_VARDIR/tmp/sourced.inc
|
||||
--error ER_NO_SUCH_TABLE
|
||||
SELECT * from nowhere;
|
||||
--disable_abort_on_error
|
||||
--disable_abort_on_error ONCE
|
||||
# Statement giving a different error, to make sure we don't mask it
|
||||
SELECT * FROM nowhere else;
|
||||
--enable_abort_on_error
|
||||
}
|
||||
dec $outer;
|
||||
inc $ifval;
|
||||
|
@ -1104,9 +1151,8 @@ system echo "hej" > /dev/null;
|
|||
--error 1
|
||||
--exec echo "system $NONEXISTSINFVAREABLI;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_abort_on_error ONCE
|
||||
system NonExistsinfComamdn 2> /dev/null;
|
||||
--enable_abort_on_error
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -2517,10 +2563,9 @@ INSERT INTO t1 SELECT f1 - 64 FROM t1;
|
|||
INSERT INTO t1 SELECT f1 - 128 FROM t1;
|
||||
INSERT INTO t1 SELECT f1 - 256 FROM t1;
|
||||
INSERT INTO t1 SELECT f1 - 512 FROM t1;
|
||||
--disable_result_log
|
||||
--disable_result_log ONCE
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
--enable_result_log
|
||||
DROP TABLE t1;
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -2568,11 +2613,9 @@ SELECT 0 as "WILL NOT lower case
|
|||
--exec $MYSQL_TEST --help 2>&1 > /dev/null
|
||||
--exec $MYSQL_TEST --version 2>&1 > /dev/null
|
||||
--enable_query_log
|
||||
--disable_abort_on_error
|
||||
--disable_abort_on_error ONCE
|
||||
--error 1
|
||||
--exec $MYSQL_TEST a b c 2>&1 > /dev/null
|
||||
--enable_abort_on_error
|
||||
--enable_query_log
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# test for query_get_value
|
||||
|
|
Loading…
Reference in a new issue