118 lines
3.1 KiB
PHP
118 lines
3.1 KiB
PHP
# ==== Purpose ====
|
|
#
|
|
# This include will check if the optimized delete (delete_all_rows) was
|
|
# used or not varying the session sql_log_bin variable with 0 and 1.
|
|
#
|
|
# It is expected that the optimized delete (delete_all_rows) will be used:
|
|
# a) If binlog_format != ROW
|
|
# b) If binlog_format == ROW but the statement will not be binlogged
|
|
#
|
|
# The include, varying sql_log_bin with 0 and 1, creates a new table (t1),
|
|
# fills it with data, and deletes all t1 data with a single query.
|
|
#
|
|
# It uses an EXPLAIN to assert if delete_all_rows was used or not.
|
|
#
|
|
# The include also asserts if the statement was binlogged if it is expected
|
|
# to be.
|
|
#
|
|
# ==== Usage ====
|
|
#
|
|
# [--let $storage_engine= InnoDB | MyISAM]
|
|
# --source include/delete_all_rows.inc
|
|
#
|
|
# Parameters:
|
|
# $storage_engine
|
|
# The storage engine that will be used in the CREATE TABLE statements.
|
|
# If not specified, InnoDB will be used.
|
|
#
|
|
|
|
if (!$storage_engine)
|
|
{
|
|
--let $_storage_engine= InnoDB
|
|
}
|
|
if ($storage_engine)
|
|
{
|
|
--let $_storage_engine= $storage_engine
|
|
}
|
|
|
|
##
|
|
## Determine if the server has the binary log enabled
|
|
##
|
|
--let $have_log_bin= query_get_value(SHOW GLOBAL VARIABLES LIKE 'log_bin', Value, 1)
|
|
|
|
# Create t1 and populate it
|
|
--eval CREATE TABLE t1 (c1 INT) ENGINE=$_storage_engine
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
|
|
##
|
|
## Session sql_log_bin = 0
|
|
##
|
|
--echo
|
|
SET sql_log_bin= 0;
|
|
|
|
# Assert that delete_all_rows() will be used
|
|
--let $explain_extra= query_get_value("EXPLAIN DELETE FROM t1", Extra, 1)
|
|
--let $assert_text= DELETE will use delete_all_rows
|
|
--let $assert_cond= "$explain_extra" = "Deleting all rows"
|
|
--source include/assert.inc
|
|
|
|
# Save current master position
|
|
if ($have_log_bin == ON)
|
|
{
|
|
--let $saved_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
|
|
}
|
|
DELETE FROM t1;
|
|
|
|
# Assert that this was not binlogged if binary log is enabled
|
|
if ($have_log_bin == ON)
|
|
{
|
|
--let $current_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
|
|
--let $assert_text= DELETE was not binlogged
|
|
--let $assert_cond= $current_pos = $saved_pos
|
|
--source include/assert.inc
|
|
}
|
|
|
|
##
|
|
## Session sql_log_bin = 1
|
|
##
|
|
--echo
|
|
SET sql_log_bin= 1;
|
|
# Populate t1 again
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
|
|
# Assert if delete_all_rows() will be used or not
|
|
--let $explain_extra_expected= "Deleting all rows"
|
|
# The extra info in explain will be NULL if the statement is binlogged
|
|
# with binlog_format = ROW
|
|
--let $explain_extra= query_get_value("EXPLAIN DELETE FROM t1", Extra, 1)
|
|
--let $assert_text= DELETE will use delete_all_rows
|
|
if ($have_log_bin == ON)
|
|
{
|
|
if (`SELECT @@GLOBAL.binlog_format = 'ROW'`)
|
|
{
|
|
--let $assert_text= DELETE will not use delete_all_rows
|
|
--let $explain_extra_expected= "NULL"
|
|
}
|
|
}
|
|
--let $assert_cond= "$explain_extra" = $explain_extra_expected
|
|
--source include/assert.inc
|
|
|
|
# Save current master position
|
|
if ($have_log_bin == ON)
|
|
{
|
|
--let $saved_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
|
|
}
|
|
|
|
DELETE FROM t1;
|
|
# Assert that this was binlogged if binary log is enabled
|
|
if ($have_log_bin == ON)
|
|
{
|
|
--let $current_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
|
|
--let $assert_text= DELETE was binlogged
|
|
--let $assert_cond= $current_pos > $saved_pos
|
|
--source include/assert.inc
|
|
}
|
|
|
|
# Cleanup
|
|
DROP TABLE t1;
|