Spracherkennung für: .test vermutete Sprache: SQL {SQL[180] VDM[108] VHDL[96]} [Methode: maximale Elemente, drei Dimensionen]
--source include/have_innodb.inc
# BUG#
13684:
# SP:
DROP PROCEDURE|FUNCTION
IF EXISTS not binlogged
if routine
# does
not exist
#
# There
is an inconsistency
with DROP DATABASE IF EXISTS,
DROP
#
TABLE IF EXISTS and DROP VIEW
IF EXISTS: those are binlogged even
#
if the DB
or TABLE does
not exist, whereas
DROP PROCEDURE IF
#
EXISTS does
not. It would be nice
or at least consistent
if DROP
#
PROCEDURE/STATEMENT worked the same too.
#
# Description:
#
DROP PROCEDURE|FUNCTION
IF EXISTS does
not get binlogged whereas
DROP
#
DATABASE|
TABLE|
TRIGGER|...
IF EXISTS do.
#
# Fixed
DROP PROCEDURE|FUNCTION
IF EXISTS by adding a
call to
# write_bin_log
in mysql_execute_command. Checked also
if all
# documented
"DROP (...) IF EXISTS" get binlogged.
Left out DROP
# SERVER
IF EXISTS because it seems that it only gets binlogged
when
#
using row event (see BUG#
25705).
#
# TODO:
add DROP SERVER
IF EXISTS to the test
case when its
# binlogging
procedure gets fixed (BUG#
25705). Furthermore,
when
# logging
in RBR format the events that get logged are effectively
in
# RBR format
and not in STATEMENT format meaning that one must needs
#
to be extra careful
when writing a test
for it,
or change the
CREATE
# SERVER logging
to always log
as STATEMENT. You can quickly
check this
#
by enabling the flag below $fixed_bug_25705=
1 and watch the diff
on
# the STDOUT. More detail may be found
on the generated reject file.
#
# Test
is implemented
as follows:
#
# i) test
each "drop if exists" (DDL), found
in MySQL
5.
1 manual,
#
on inexistent objects (except
for DROP SERVER);
# ii)
show binlog events;
# iii)
create an object
for each drop if exists statement;
# iv) issue
"drop if exists" in existent objects.
# v)
show binlog events;
#
#
References:
#
http://dev.mysql.com/doc/refman/5.
1/en/
sql-syntax-data-definition.html
#
--source include/have_log_bin.inc
RESET MASTER;
disable_warnings;
# test
all "drop if exists" in manual
with inexistent objects
DROP PROCEDURE IF EXISTS db_bug_13684.p;
DROP FUNCTION
IF EXISTS db_bug_13684.f;
DROP TRIGGER IF EXISTS db_bug_13684.tr;
DROP VIEW
IF EXISTS db_bug_13684.v;
DROP EVENT
IF EXISTS db_bug_13684.e;
DROP TABLE IF EXISTS db_bug_13684.t;
DROP DATABASE IF EXISTS db_bug_13684;
let $fixed_bug_25705 =
0;
if($fixed_bug_25705)
{
DROP SERVER
IF EXISTS s_bug_13684;
}
--source include/show_binlog_events.inc
# test
drop with existing
values
#
create
CREATE DATABASE db_bug_13684;
CREATE TABLE db_bug_13684.t (a
int);
CREATE EVENT db_bug_13684.e
ON SCHEDULE AT
CURRENT_TIMESTAMP +
INTERVAL 1 HOUR
DO
UPDATE db_bug_13684.t
SET a = a +
1;
CREATE VIEW db_bug_13684.v
AS SELECT *
FROM db_bug_13684.t;
CREATE TRIGGER db_bug_13684.tr
BEFORE INSERT ON db_bug_13684.t
FOR EACH ROW BEGIN
END;
CREATE PROCEDURE db_bug_13684.p (
OUT p1
INT)
BEGIN
END;
CREATE FUNCTION db_bug_13684.f (s
CHAR(
20))
RETURNS
CHAR(
50)
DETERMINISTIC
RETURN s;
if($fixed_bug_25705)
{
CREATE SERVER s_bug_13684
FOREIGN DATA WRAPPER mysql
OPTIONS (USER
'Remote', HOST
'192.168.1.106',
DATABASE 'test');
}
--source include/show_binlog_events.inc
#
drop existing
DROP PROCEDURE IF EXISTS db_bug_13684.p;
DROP FUNCTION
IF EXISTS db_bug_13684.f;
DROP TRIGGER IF EXISTS db_bug_13684.tr;
DROP VIEW
IF EXISTS db_bug_13684.v;
DROP EVENT
IF EXISTS db_bug_13684.e;
DROP TABLE IF EXISTS db_bug_13684.t;
DROP DATABASE IF EXISTS db_bug_13684;
if($fixed_bug_25705)
{
DROP SERVER
IF EXISTS s_bug_13684;
}
--source include/show_binlog_events.inc
enable_warnings;
#
Drop comments
in binlog
let $binlog_start= query_get_value(
SHOW MASTER STATUS, Position,
1);
CREATE TABLE t1(id
int);
DROP TABLE /* comment */ t1;
CREATE TABLE t1(id
int);
DROP TABLE IF EXISTS /* comment */ t1;
CREATE TABLE t1(id
int);
DROP TABLE /**/ t1;
CREATE TABLE t1(id
int);
DROP TABLE IF EXISTS /* */ t1;
--source include/show_binlog_events.inc
--echo #
--echo # MDEV-22820 Bogus "Unknown table" warnings produced upon attempt to
--echo # drop parent table referenced by FK
--echo #
let $binlog_start= query_get_value(
SHOW MASTER STATUS, Position,
1);
create table t1 (a
int,
key(a)) engine=InnoDB;
create table t2 (b
int,
foreign key(b)
references t1(a)) engine=InnoDB;
--error ER_ROW_IS_REFERENCED_2
drop table if exists t1;
--error ER_ROW_IS_REFERENCED_2
drop table if exists t1,t0;
show warnings;
drop table t2,t1;
create table t3 (a
int) engine=aria;
# This
is not logged
--error ER_BAD_TABLE_ERROR
drop table t10,t20;
# This
is logged
--error ER_BAD_TABLE_ERROR
drop table t10,t20,t3;
# These are
both logged
drop table if exists t10,t20;
drop table if exists t10,t20,t3;
--source include/show_binlog_events.inc