mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
119 lines
3.6 KiB
PHP
119 lines
3.6 KiB
PHP
|
# ==== Purpose ====
|
||
|
#
|
||
|
# Check if a condition holds, fail with debug info if not.
|
||
|
#
|
||
|
# The condition is parsed before executed. The following constructs
|
||
|
# are supported:
|
||
|
#
|
||
|
# [SQL STATEMENT, COLUMN, ROW]
|
||
|
# The square bracket is replaced by the result from SQL STATEMENT,
|
||
|
# in the given COLUMN and ROW.
|
||
|
#
|
||
|
# <1>
|
||
|
# This is a shorthand for the result of the first executed square
|
||
|
# bracket. <2> is a shorthand for the second executed square
|
||
|
# bracket, and so on.
|
||
|
#
|
||
|
# ==== Usage ====
|
||
|
#
|
||
|
# --let $assert_text= Relay_Log_Pos must be smaller than pos.
|
||
|
# --let $assert_cond= [SHOW SLAVE STATUS, Relay_Log_Pos, 1] >= $min_pos AND <1> <= $max_pos
|
||
|
# [--let $assert_quiet= 1]
|
||
|
# [--let $rpl_debug= 1]
|
||
|
# --source include/rpl_assert.inc
|
||
|
#
|
||
|
# Parameters:
|
||
|
#
|
||
|
# $assert_text
|
||
|
# Text that describes what is being checked. By default, this text
|
||
|
# is written to the query log.
|
||
|
#
|
||
|
# $assert_cond
|
||
|
# Condition to check. See above for details about the format. The
|
||
|
# condition will be executed as `SELECT $assert_cond`. Note: this
|
||
|
# condition is parsed using SQL statements, quoted inside single
|
||
|
# quotes, so it must not contain single quotes itself (use double
|
||
|
# quotes for strings).
|
||
|
#
|
||
|
# $assert_quiet
|
||
|
# Do not print $assert_text to the query log.
|
||
|
#
|
||
|
# $rpl_debug
|
||
|
# Print extra debug info.
|
||
|
|
||
|
|
||
|
if ($rpl_debug)
|
||
|
{
|
||
|
--echo # debug: assert_text='$assert_text' assert_cond='$assert_cond'
|
||
|
}
|
||
|
|
||
|
# Sanity-check input
|
||
|
if (`SELECT "$assert_text" = ""`)
|
||
|
{
|
||
|
--die ERROR IN TEST: the mysqltest variable rpl_test must be set
|
||
|
}
|
||
|
|
||
|
# Evaluate square brackets in cond.
|
||
|
--let $_rpl_assert_substmt_number= 1
|
||
|
--let $_rpl_interpolated_cond= $assert_cond
|
||
|
--let $_rpl_assert_lbracket= `SELECT LOCATE('[', '$_rpl_interpolated_cond')`
|
||
|
while ($_rpl_assert_lbracket)
|
||
|
{
|
||
|
# Get position of right bracket
|
||
|
--let $_rpl_assert_rbracket= `SELECT LOCATE(']', '$_rpl_interpolated_cond')`
|
||
|
if (!$_rpl_assert_rbracket)
|
||
|
{
|
||
|
--echo BUG IN TEST: Mismatching square brackets in assert_cond: '$assert_cond'
|
||
|
--die BUG IN TEST: Mismatching square brackets in $assert_cond
|
||
|
}
|
||
|
# Get sub-statement and result of it
|
||
|
--let $_rpl_assert_substmt= `SELECT SUBSTRING('$_rpl_interpolated_cond', $_rpl_assert_lbracket + 1, $_rpl_assert_rbracket - $_rpl_assert_lbracket - 1)`
|
||
|
--let $_rpl_assert_substmt_result= query_get_value($_rpl_assert_substmt)
|
||
|
if ($rpl_debug)
|
||
|
{
|
||
|
--echo # debug: sub-statement='$_rpl_assert_substmt' result='$rpl_assert_result'
|
||
|
}
|
||
|
# Replace sub-statement by its result
|
||
|
--let $_rpl_interpolated_cond= `SELECT REPLACE('$_rpl_interpolated_cond', '[$_rpl_assert_substmt]', '$_rpl_assert_substmt_result')`
|
||
|
# Replace result references by result
|
||
|
--let $_rpl_interpolated_cond= `SELECT REPLACE('$_rpl_interpolated_cond', '<$_rpl_assert_substmt_number>', '$_rpl_assert_substmt_result')`
|
||
|
|
||
|
--let $_rpl_assert_lbracket= `SELECT LOCATE('[', '$_rpl_interpolated_cond')`
|
||
|
|
||
|
--inc $_rpl_assert_substmt_number
|
||
|
}
|
||
|
|
||
|
if ($rpl_debug)
|
||
|
{
|
||
|
--echo # debug: interpolated_cond='$_rpl_interpolated_cond'
|
||
|
}
|
||
|
|
||
|
# Execute.
|
||
|
--let $_rpl_assert_result= `SELECT $_rpl_interpolated_cond`
|
||
|
|
||
|
if ($rpl_debug)
|
||
|
{
|
||
|
--echo # debug: result='$_rpl_assert_result'
|
||
|
}
|
||
|
|
||
|
# Check.
|
||
|
if (!$_rpl_assert_result)
|
||
|
{
|
||
|
--echo ######## Test assertion failed: $assert_text ########
|
||
|
--echo Dumping debug info:
|
||
|
--source include/show_rpl_debug_info.inc
|
||
|
--echo Assertion text: '$assert_text'
|
||
|
--echo Assertion condition: '$assert_cond'
|
||
|
--echo Assertion condition, interpolated: '$_rpl_interpolated_cond'
|
||
|
--echo Assertion result: '$_rpl_assert_result'
|
||
|
--die Test assertion failed in rpl_assertion.inc
|
||
|
}
|
||
|
|
||
|
if (!$assert_quiet)
|
||
|
{
|
||
|
--echo # Asserted this: $assert_text
|
||
|
}
|
||
|
|
||
|
--let $assert_text=
|
||
|
--let $assert_cond=
|