polardbxengine/mysql-test/include/set_gtid_next.inc

65 lines
1.8 KiB
C++

# ==== Purpose ====
#
# This is a simplified version of set_gtid_next__gtid_mode_agnostic.inc.
#
# It will set the GTID_NEXT session variable to ANONYMOUS if GTIDs
# are OFF or to SERVER_UUID:N (where N is the larger GTID executed plus one)
# if GTIDs are enabled.
#
# It is useful to test some functionalities regardless of GTIDs being enabled
# or not, when there is a need for non-automatic GTID_NEXT.
#
# It doesn't require gtid_utils.inc as set_gtid_next__gtid_mode_agnostic.inc.
#
# ==== Usage ====
#
# [--let $non_masked_gtid= 1]
# [--let $expected_error= error_number]
# --source include/set_gtid_next.inc
#
# Parameters:
# $non_masked_gtids
# By default, this include will mask the output of the statement in order
# to produce the same output with or without GTIDs enabled. By setting this
# parameter the include will not mask the output.
#
# $expected_error
# When set, the include will expect an error before setting the GTID_NEXT.
#
--let $_sgn_gtid_next= ANONYMOUS
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
{
# This routine assume that GTID_EXECUTED has only GTIDs from a single server
--let $_sgn_colon= `SELECT LOCATE(':', @@GLOBAL.GTID_EXECUTED)`
if ($_sgn_colon)
{
--let $_sgn_minus= `SELECT LOCATE('-', @@GLOBAL.GTID_EXECUTED, $_sgn_colon)`
if ($_sgn_minus)
{
--let $_sgn_next= `SELECT SUBSTR(@@GLOBAL.GTID_EXECUTED, LOCATE('-', @@GLOBAL.GTID_EXECUTED, $_sgn_colon) + 1) + 1`
}
if (!$_sgn_minus)
{
--let $_sgn_next= `SELECT SUBSTR(@@GLOBAL.GTID_EXECUTED, $_sgn_colon + 1) + 1`
}
}
if (!$_sgn_colon)
{
--let $_sgn_next= 1
}
--let $_sgn_server_uuid= `SELECT @@GLOBAL.SERVER_UUID`
--let $_sgn_gtid_next= $_sgn_server_uuid:$_sgn_next
}
if (!$non_masked_gtid)
{
--replace_result $_sgn_gtid_next #
}
if ($expected_error)
{
--error $expected_error
}
--eval SET GTID_NEXT= '$_sgn_gtid_next'