mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
WL#2076: Added if(...) construct to mysqltest
Removed SHOW BINLOG EVENTS in test case for ps-protocol and row-based replication client/mysqltest.c: WL#2067: Added if(...) construct to mysqltest mysql-test/include/rpl_stmt_seq.inc: Removed SHOW BINLOG EVENTS in test case for ps-protocol and row-based replication mysql-test/r/rpl_ddl.result: Removed SHOW BINLOG EVENTS in test case for ps-protocol and row-based replication mysql-test/t/rpl_ddl.test: Comment
This commit is contained in:
@ -153,10 +153,6 @@ static char TMPDIR[FN_REFLEN];
|
|||||||
static char delimiter[MAX_DELIMITER]= DEFAULT_DELIMITER;
|
static char delimiter[MAX_DELIMITER]= DEFAULT_DELIMITER;
|
||||||
static uint delimiter_length= 1;
|
static uint delimiter_length= 1;
|
||||||
|
|
||||||
static int *cur_block, *block_stack_end;
|
|
||||||
static int block_stack[BLOCK_STACK_DEPTH];
|
|
||||||
|
|
||||||
static int block_ok_stack[BLOCK_STACK_DEPTH];
|
|
||||||
static CHARSET_INFO *charset_info= &my_charset_latin1; /* Default charset */
|
static CHARSET_INFO *charset_info= &my_charset_latin1; /* Default charset */
|
||||||
static const char *charset_name= "latin1"; /* Default character set name */
|
static const char *charset_name= "latin1"; /* Default character set name */
|
||||||
|
|
||||||
@ -210,8 +206,6 @@ MYSQL_RES *last_result=0;
|
|||||||
|
|
||||||
PARSER parser;
|
PARSER parser;
|
||||||
MASTER_POS master_pos;
|
MASTER_POS master_pos;
|
||||||
int *block_ok; /* set to 0 if the current block should not be executed */
|
|
||||||
int false_block_depth = 0;
|
|
||||||
/* if set, all results are concated and compared against this file */
|
/* if set, all results are concated and compared against this file */
|
||||||
const char *result_file = 0;
|
const char *result_file = 0;
|
||||||
|
|
||||||
@ -281,6 +275,7 @@ Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
|
|||||||
Q_START_TIMER, Q_END_TIMER,
|
Q_START_TIMER, Q_END_TIMER,
|
||||||
Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL,
|
Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL,
|
||||||
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
|
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
|
||||||
|
Q_IF,
|
||||||
|
|
||||||
Q_UNKNOWN, /* Unknown command. */
|
Q_UNKNOWN, /* Unknown command. */
|
||||||
Q_COMMENT, /* Comments, ignored. */
|
Q_COMMENT, /* Comments, ignored. */
|
||||||
@ -368,9 +363,20 @@ const char *command_names[]=
|
|||||||
"enable_ps_protocol",
|
"enable_ps_protocol",
|
||||||
"disable_reconnect",
|
"disable_reconnect",
|
||||||
"enable_reconnect",
|
"enable_reconnect",
|
||||||
|
"if",
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Block stack */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int line; /* Start line of block */
|
||||||
|
my_bool ok; /* Should block be executed */
|
||||||
|
enum enum_commands cmd; /* Command owning the block */
|
||||||
|
} BLOCK;
|
||||||
|
static BLOCK block_stack[BLOCK_STACK_DEPTH];
|
||||||
|
static BLOCK *cur_block, *block_stack_end;
|
||||||
|
|
||||||
TYPELIB command_typelib= {array_elements(command_names),"",
|
TYPELIB command_typelib= {array_elements(command_names),"",
|
||||||
command_names, 0};
|
command_names, 0};
|
||||||
|
|
||||||
@ -1723,36 +1729,54 @@ int do_connect(struct st_query* q)
|
|||||||
|
|
||||||
int do_done(struct st_query* q)
|
int do_done(struct st_query* q)
|
||||||
{
|
{
|
||||||
|
/* Dummy statement to eliminate compiler warning */
|
||||||
q->type = Q_END_BLOCK;
|
q->type = Q_END_BLOCK;
|
||||||
|
|
||||||
|
/* Check if empty block stack */
|
||||||
if (cur_block == block_stack)
|
if (cur_block == block_stack)
|
||||||
die("Stray '}' - end of block before beginning");
|
die("Stray '}' - end of block before beginning");
|
||||||
if (*block_ok--)
|
|
||||||
|
/* Test if inner block has been executed */
|
||||||
|
if (cur_block->ok && cur_block->cmd == Q_WHILE)
|
||||||
{
|
{
|
||||||
parser.current_line = *--cur_block;
|
/* Pop block from stack, re-execute outer block */
|
||||||
|
cur_block--;
|
||||||
|
parser.current_line = cur_block->line;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++parser.current_line;
|
/* Pop block from stack, goto next line */
|
||||||
--cur_block;
|
cur_block--;
|
||||||
|
parser.current_line++;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_while(struct st_query* q)
|
|
||||||
|
int do_block(enum enum_commands cmd, struct st_query* q)
|
||||||
{
|
{
|
||||||
char* p=q->first_argument;
|
char* p=q->first_argument;
|
||||||
const char* expr_start, *expr_end;
|
const char* expr_start, *expr_end;
|
||||||
VAR v;
|
VAR v;
|
||||||
|
|
||||||
|
/* Check stack overflow */
|
||||||
if (cur_block == block_stack_end)
|
if (cur_block == block_stack_end)
|
||||||
die("Nesting too deeply");
|
die("Nesting too deeply");
|
||||||
if (!*block_ok)
|
|
||||||
|
/* Set way to find outer block again, increase line counter */
|
||||||
|
cur_block->line= parser.current_line++;
|
||||||
|
|
||||||
|
/* If this block is ignored */
|
||||||
|
if (!cur_block->ok)
|
||||||
{
|
{
|
||||||
++false_block_depth;
|
/* Inner block should be ignored too */
|
||||||
*++block_ok = 0;
|
cur_block++;
|
||||||
*cur_block++ = parser.current_line++;
|
cur_block->cmd= cmd;
|
||||||
|
cur_block->ok= FALSE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Parse and evaluate test expression */
|
||||||
expr_start = strchr(p, '(');
|
expr_start = strchr(p, '(');
|
||||||
if (!expr_start)
|
if (!expr_start)
|
||||||
die("missing '(' in while");
|
die("missing '(' in while");
|
||||||
@ -1761,14 +1785,12 @@ int do_while(struct st_query* q)
|
|||||||
die("missing ')' in while");
|
die("missing ')' in while");
|
||||||
var_init(&v,0,0,0,0);
|
var_init(&v,0,0,0,0);
|
||||||
eval_expr(&v, ++expr_start, &expr_end);
|
eval_expr(&v, ++expr_start, &expr_end);
|
||||||
*cur_block++ = parser.current_line++;
|
|
||||||
if (!v.int_val)
|
/* Define inner block */
|
||||||
{
|
cur_block++;
|
||||||
*++block_ok = 0;
|
cur_block->cmd= cmd;
|
||||||
false_block_depth++;
|
cur_block->ok= (v.int_val ? TRUE : FALSE);
|
||||||
}
|
|
||||||
else
|
|
||||||
*++block_ok = 1;
|
|
||||||
var_free(&v);
|
var_free(&v);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3404,12 +3426,13 @@ int main(int argc, char **argv)
|
|||||||
lineno = lineno_stack;
|
lineno = lineno_stack;
|
||||||
my_init_dynamic_array(&q_lines, sizeof(struct st_query*), INIT_Q_LINES,
|
my_init_dynamic_array(&q_lines, sizeof(struct st_query*), INIT_Q_LINES,
|
||||||
INIT_Q_LINES);
|
INIT_Q_LINES);
|
||||||
|
|
||||||
memset(block_stack, 0, sizeof(block_stack));
|
memset(block_stack, 0, sizeof(block_stack));
|
||||||
block_stack_end = block_stack + BLOCK_STACK_DEPTH;
|
block_stack_end= block_stack + BLOCK_STACK_DEPTH;
|
||||||
memset(block_ok_stack, 0, sizeof(block_stack));
|
cur_block= block_stack;
|
||||||
cur_block = block_stack;
|
cur_block->ok= TRUE; /* Outer block should always be executed */
|
||||||
block_ok = block_ok_stack;
|
cur_block->cmd= Q_UNKNOWN;
|
||||||
*block_ok = 1;
|
|
||||||
init_dynamic_string(&ds_res, "", 0, 65536);
|
init_dynamic_string(&ds_res, "", 0, 65536);
|
||||||
parse_args(argc, argv);
|
parse_args(argc, argv);
|
||||||
if (mysql_server_init(embedded_server_arg_count,
|
if (mysql_server_init(embedded_server_arg_count,
|
||||||
@ -3461,7 +3484,7 @@ int main(int argc, char **argv)
|
|||||||
int current_line_inc = 1, processed = 0;
|
int current_line_inc = 1, processed = 0;
|
||||||
if (q->type == Q_UNKNOWN || q->type == Q_COMMENT_WITH_COMMAND)
|
if (q->type == Q_UNKNOWN || q->type == Q_COMMENT_WITH_COMMAND)
|
||||||
get_query_type(q);
|
get_query_type(q);
|
||||||
if (*block_ok)
|
if (cur_block->ok)
|
||||||
{
|
{
|
||||||
processed = 1;
|
processed = 1;
|
||||||
switch (q->type) {
|
switch (q->type) {
|
||||||
@ -3657,7 +3680,8 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
current_line_inc = 0;
|
current_line_inc = 0;
|
||||||
switch (q->type) {
|
switch (q->type) {
|
||||||
case Q_WHILE: do_while(q); break;
|
case Q_WHILE: do_block(Q_WHILE, q); break;
|
||||||
|
case Q_IF: do_block(Q_IF, q); break;
|
||||||
case Q_END_BLOCK: do_done(q); break;
|
case Q_END_BLOCK: do_done(q); break;
|
||||||
default: current_line_inc = 1; break;
|
default: current_line_inc = 1; break;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,12 @@
|
|||||||
# the $variables is extreme sensitive.
|
# the $variables is extreme sensitive.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
###############################################################
|
||||||
|
# Debug options : To debug this test script
|
||||||
|
###############################################################
|
||||||
|
let $showbinlog= 0;
|
||||||
|
let $manipulate= 1;
|
||||||
|
|
||||||
######## The typical test sequence
|
######## The typical test sequence
|
||||||
# 1. INSERT without commit
|
# 1. INSERT without commit
|
||||||
# check table content of master and slave
|
# check table content of master and slave
|
||||||
@ -52,9 +58,12 @@ let $MAX= `SELECT MAX(f1) FROM t1` ;
|
|||||||
eval INSERT INTO t1 SET f1= $MAX + 1;
|
eval INSERT INTO t1 SET f1= $MAX + 1;
|
||||||
# results before DDL(to be tested)
|
# results before DDL(to be tested)
|
||||||
SELECT MAX(f1) FROM t1;
|
SELECT MAX(f1) FROM t1;
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||||
|
}
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
@ -63,9 +72,12 @@ SELECT '-------- switch to slave --------' as "";
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
# results before DDL(to be tested)
|
# results before DDL(to be tested)
|
||||||
SELECT MAX(f1) FROM t1;
|
SELECT MAX(f1) FROM t1;
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################
|
###############################################################
|
||||||
# command to be tested
|
# command to be tested
|
||||||
@ -79,9 +91,12 @@ eval $my_stmt;
|
|||||||
let $my_stmt= ERROR: YOU FORGOT TO FILL IN THE STATEMENT;
|
let $my_stmt= ERROR: YOU FORGOT TO FILL IN THE STATEMENT;
|
||||||
# results after DDL(to be tested)
|
# results after DDL(to be tested)
|
||||||
SELECT MAX(f1) FROM t1;
|
SELECT MAX(f1) FROM t1;
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||||
|
}
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
@ -90,9 +105,12 @@ SELECT '-------- switch to slave --------' as "";
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
# results after DDL(to be tested)
|
# results after DDL(to be tested)
|
||||||
SELECT MAX(f1) FROM t1;
|
SELECT MAX(f1) FROM t1;
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################
|
###############################################################
|
||||||
# ROLLBACK
|
# ROLLBACK
|
||||||
@ -114,9 +132,12 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
|
|||||||
' (Failed)')) AS ""
|
' (Failed)')) AS ""
|
||||||
FROM mysqltest1.t1;
|
FROM mysqltest1.t1;
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||||
|
}
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
@ -133,16 +154,17 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE: The INSERT is ',
|
|||||||
' (Failed)')) AS ""
|
' (Failed)')) AS ""
|
||||||
FROM mysqltest1.t1;
|
FROM mysqltest1.t1;
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
if ($show_binlog)
|
||||||
|
{
|
||||||
--replace_result $VERSION VERSION
|
--replace_result $VERSION VERSION
|
||||||
--replace_column 2 # 5 #
|
--replace_column 2 # 5 #
|
||||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################
|
###############################################################
|
||||||
# Manipulate binlog
|
# Manipulate binlog
|
||||||
###############################################################
|
###############################################################
|
||||||
#let $manipulate= 0;
|
if ($manipulate)
|
||||||
let $manipulate= 1;
|
|
||||||
while ($manipulate)
|
|
||||||
{
|
{
|
||||||
#### Manipulate the binary logs,
|
#### Manipulate the binary logs,
|
||||||
# so that the output of SHOW BINLOG EVENTS IN <current log>
|
# so that the output of SHOW BINLOG EVENTS IN <current log>
|
||||||
@ -171,7 +193,6 @@ flush logs;
|
|||||||
# sleep 1;
|
# sleep 1;
|
||||||
# eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
# eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||||
inc $_log_num_n;
|
inc $_log_num_n;
|
||||||
let $manipulate= 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -253,6 +253,8 @@ let $my_slave_commit= false;
|
|||||||
--source include/rpl_stmt_seq.inc
|
--source include/rpl_stmt_seq.inc
|
||||||
|
|
||||||
# With prior read locking
|
# With prior read locking
|
||||||
|
# Note that this test generate an error since the rpl_stmt_seq.inc
|
||||||
|
# tries to insert into t1.
|
||||||
LOCK TABLES mysqltest1.t1 READ;
|
LOCK TABLES mysqltest1.t1 READ;
|
||||||
let $my_stmt= UNLOCK TABLES;
|
let $my_stmt= UNLOCK TABLES;
|
||||||
let $my_master_commit= false;
|
let $my_master_commit= false;
|
||||||
|
Reference in New Issue
Block a user