mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Add break statement in mysqltest
This commit is contained in:
committed by
Andrew Hutchings
parent
f5aae71661
commit
9f8c5e01ae
@@ -354,7 +354,7 @@ enum enum_commands {
|
|||||||
Q_INC, Q_DEC,
|
Q_INC, Q_DEC,
|
||||||
Q_SOURCE, Q_DISCONNECT,
|
Q_SOURCE, Q_DISCONNECT,
|
||||||
Q_LET, Q_ECHO,
|
Q_LET, Q_ECHO,
|
||||||
Q_WHILE, Q_END_BLOCK,
|
Q_WHILE, Q_END_BLOCK, Q_BREAK,
|
||||||
Q_SYSTEM, Q_RESULT,
|
Q_SYSTEM, Q_RESULT,
|
||||||
Q_REQUIRE, Q_SAVE_MASTER_POS,
|
Q_REQUIRE, Q_SAVE_MASTER_POS,
|
||||||
Q_SYNC_WITH_MASTER,
|
Q_SYNC_WITH_MASTER,
|
||||||
@@ -424,6 +424,7 @@ const char *command_names[]=
|
|||||||
"echo",
|
"echo",
|
||||||
"while",
|
"while",
|
||||||
"end",
|
"end",
|
||||||
|
"break",
|
||||||
"system",
|
"system",
|
||||||
"result",
|
"result",
|
||||||
"require",
|
"require",
|
||||||
@@ -6306,6 +6307,33 @@ enum block_op find_operand(const char *start)
|
|||||||
return ILLEG_OP;
|
return ILLEG_OP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
do_break
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Instruction to stop execution of the current loop
|
||||||
|
*/
|
||||||
|
void do_break(struct st_command* command)
|
||||||
|
{
|
||||||
|
int depth= 0;
|
||||||
|
cur_block->ok= false;
|
||||||
|
|
||||||
|
/* Disable every outer block until while found or block stack ends */
|
||||||
|
while (cur_block->cmd != cmd_while && cur_block > block_stack)
|
||||||
|
{
|
||||||
|
cur_block--;
|
||||||
|
cur_block->ok= false;
|
||||||
|
depth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if the top block is not 'while' */
|
||||||
|
if (cur_block->cmd != cmd_while)
|
||||||
|
{
|
||||||
|
die("Stray break was found");
|
||||||
|
}
|
||||||
|
/* Set current block back */
|
||||||
|
cur_block+= depth;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Process start of a "if" or "while" statement
|
Process start of a "if" or "while" statement
|
||||||
@@ -10059,6 +10087,7 @@ int main(int argc, char **argv)
|
|||||||
case Q_INC: do_modify_var(command, DO_INC); break;
|
case Q_INC: do_modify_var(command, DO_INC); break;
|
||||||
case Q_DEC: do_modify_var(command, DO_DEC); break;
|
case Q_DEC: do_modify_var(command, DO_DEC); break;
|
||||||
case Q_ECHO: do_echo(command); command_executed++; break;
|
case Q_ECHO: do_echo(command); command_executed++; break;
|
||||||
|
case Q_BREAK: do_break(command); break;
|
||||||
case Q_SYSTEM: do_system(command); break;
|
case Q_SYSTEM: do_system(command); break;
|
||||||
case Q_REMOVE_FILE: do_remove_file(command); break;
|
case Q_REMOVE_FILE: do_remove_file(command); break;
|
||||||
case Q_REMOVE_FILES_WILDCARD: do_remove_files_wildcard(command); break;
|
case Q_REMOVE_FILES_WILDCARD: do_remove_files_wildcard(command); break;
|
||||||
|
9
mysql-test/main/mysqltest-break.result
Normal file
9
mysql-test/main/mysqltest-break.result
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
3
|
||||||
|
2
|
||||||
|
OK
|
||||||
|
OK
|
||||||
|
OK
|
||||||
|
1
|
||||||
|
cnt=3
|
||||||
|
cnt=2
|
||||||
|
mysqltest: At line 1: Stray break was found
|
86
mysql-test/main/mysqltest-break.test
Normal file
86
mysql-test/main/mysqltest-break.test
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#
|
||||||
|
# MDEV-12130 improve mysqltest language
|
||||||
|
#
|
||||||
|
# test "break" statement
|
||||||
|
#
|
||||||
|
|
||||||
|
# Break in a single loop
|
||||||
|
|
||||||
|
let $cnt= 4;
|
||||||
|
while($cnt > 1)
|
||||||
|
{
|
||||||
|
dec $cnt;
|
||||||
|
break;
|
||||||
|
--echo $cnt
|
||||||
|
--echo Break did not stop a single loop
|
||||||
|
}
|
||||||
|
|
||||||
|
# Break stops inner loop
|
||||||
|
|
||||||
|
let $outer= 4;
|
||||||
|
while($outer > 1)
|
||||||
|
{
|
||||||
|
let $inner= 4;
|
||||||
|
while($inner > 1)
|
||||||
|
{
|
||||||
|
if($outer == 2)
|
||||||
|
{
|
||||||
|
--echo OK
|
||||||
|
}
|
||||||
|
if($inner == 2)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dec $inner;
|
||||||
|
}
|
||||||
|
dec $outer;
|
||||||
|
--echo $outer
|
||||||
|
}
|
||||||
|
|
||||||
|
# Break stops outer loop
|
||||||
|
let $inner= 4;
|
||||||
|
let $outer= 4;
|
||||||
|
while($outer > 1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
while($inner > 1)
|
||||||
|
{
|
||||||
|
dec $inner;
|
||||||
|
--echo Outer loop`s break did not stop inner loop
|
||||||
|
}
|
||||||
|
dec $outer;
|
||||||
|
--echo $outer
|
||||||
|
}
|
||||||
|
|
||||||
|
# Break stops loop in if
|
||||||
|
let $cnt= 4;
|
||||||
|
if($cnt > 1)
|
||||||
|
{
|
||||||
|
while($cnt)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dec $cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
--echo cnt=$cnt
|
||||||
|
|
||||||
|
# Break in inner if
|
||||||
|
|
||||||
|
let $cnt= 4;
|
||||||
|
while($cnt > 1)
|
||||||
|
{
|
||||||
|
if($cnt == 2)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
--echo "if" is working after break
|
||||||
|
}
|
||||||
|
dec $cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
--echo cnt=$cnt
|
||||||
|
|
||||||
|
# Stray break
|
||||||
|
|
||||||
|
--error 1
|
||||||
|
--exec echo "break;" | $MYSQL_TEST 2>&1
|
Reference in New Issue
Block a user