mirror of
https://github.com/MariaDB/server.git
synced 2025-04-18 05:05:32 +02:00
Merge branch '10.2' into 10.3
This commit is contained in:
commit
c9717dc019
140 changed files with 2212 additions and 2446 deletions
.gitattributes
debian
extra/mariabackup
include
mysql-test
lib/My/SafeProcess
main
assign_key_cache.resultassign_key_cache.testassign_key_cache_debug.resultassign_key_cache_debug.testconnect_debug.resultconnect_debug.testimplicit_commit.resultps.resultps.testsp-innodb.resultsp-innodb.testsubselect_sj.resultsubselect_sj.testsubselect_sj_jcl6.result
suite
galera
disabled.def
r
MW-44.resultgalera_ist_mysqldump.resultgalera_kill_nochanges.resultgalera_var_auto_inc_control_on.resultgalera_var_retry_autocommit.result
t
innodb
mariabackup
parts
inc
r
rpl
include
r
vcol
mysys
pcre
AUTHORSChangeLogINSTALLLICENCENEWSNON-AUTOTOOLS-BUILDconfigure.ac
doc/html
pcre.h.inpcre_compile.cpcre_dfa_exec.cpcre_exec.cpcre_jit_compile.cpcregrep.cpcreposix.ctestdata
scripts
sql-common
sql
ha_partition.ccitem.ccitem.hitem_cmpfunc.ccitem_func.ccitem_func.hitem_row.ccitem_sum.ccopt_subselect.ccslave.ccsql_acl.ccsql_admin.ccsql_base.ccsql_class.ccsql_class.hsql_connect.ccsql_insert.ccsql_parse.ccsql_parse.hsql_partition.ccsql_prepare.ccsql_select.ccsql_statistics.cctable.ccwsrep_applier.ccwsrep_hton.ccwsrep_mysqld.ccwsrep_mysqld.hwsrep_thd.cc
storage/connect
1
.gitattributes
vendored
1
.gitattributes
vendored
|
@ -25,6 +25,7 @@ pcre/testdata/greppatN4 -text
|
|||
*.MYD binary
|
||||
*.MYI binary
|
||||
*.class binary
|
||||
*.jar binary
|
||||
|
||||
*.c diff=cpp
|
||||
*.h diff=cpp
|
||||
|
|
1
debian/mariadb-server-10.3.install
vendored
1
debian/mariadb-server-10.3.install
vendored
|
@ -41,6 +41,7 @@ usr/bin/wsrep_sst_xtrabackup-v2
|
|||
usr/lib/mysql/plugin/auth_ed25519.so
|
||||
usr/lib/mysql/plugin/auth_pam.so
|
||||
usr/lib/mysql/plugin/auth_socket.so
|
||||
usr/lib/mysql/plugin/disks.so
|
||||
usr/lib/mysql/plugin/file_key_management.so
|
||||
usr/lib/mysql/plugin/ha_archive.so
|
||||
usr/lib/mysql/plugin/ha_blackhole.so
|
||||
|
|
|
@ -55,7 +55,7 @@ ELSE()
|
|||
SET(NT_SERVICE_SOURCE)
|
||||
ENDIF()
|
||||
|
||||
ADD_DEFINITIONS(-DPCRE_STATIC=1)
|
||||
ADD_DEFINITIONS(-DPCRE_STATIC=1 -DHAVE_OPENSSL=1)
|
||||
|
||||
MYSQL_ADD_EXECUTABLE(mariabackup
|
||||
xtrabackup.cc
|
||||
|
|
|
@ -94,7 +94,7 @@ time_t history_lock_time;
|
|||
|
||||
MYSQL *mysql_connection;
|
||||
|
||||
my_bool opt_ssl_verify_server_cert;
|
||||
extern my_bool opt_ssl_verify_server_cert, opt_use_ssl;
|
||||
|
||||
MYSQL *
|
||||
xb_mysql_connect()
|
||||
|
|
|
@ -195,6 +195,10 @@ static ulong max_buf_pool_modified_pct;
|
|||
/* Ignored option (--log) for MySQL option compatibility */
|
||||
static char* log_ignored_opt;
|
||||
|
||||
|
||||
extern my_bool opt_use_ssl;
|
||||
my_bool opt_ssl_verify_server_cert;
|
||||
|
||||
/* === metadata of backup === */
|
||||
#define XTRABACKUP_METADATA_FILENAME "xtrabackup_checkpoints"
|
||||
char metadata_type[30] = ""; /*[full-backuped|log-applied|incremental]*/
|
||||
|
@ -334,9 +338,6 @@ uint opt_safe_slave_backup_timeout = 0;
|
|||
|
||||
const char *opt_history = NULL;
|
||||
|
||||
#if defined(HAVE_OPENSSL)
|
||||
my_bool opt_ssl_verify_server_cert = FALSE;
|
||||
#endif
|
||||
|
||||
char mariabackup_exe[FN_REFLEN];
|
||||
char orig_argv1[FN_REFLEN];
|
||||
|
@ -589,6 +590,7 @@ typedef struct {
|
|||
} data_thread_ctxt_t;
|
||||
|
||||
/* ======== for option and variables ======== */
|
||||
#include <../../client/client_priv.h>
|
||||
|
||||
enum options_xtrabackup
|
||||
{
|
||||
|
@ -649,8 +651,6 @@ enum options_xtrabackup
|
|||
OPT_INNODB_LOG_CHECKSUMS,
|
||||
OPT_XTRA_INCREMENTAL_FORCE_SCAN,
|
||||
OPT_DEFAULTS_GROUP,
|
||||
OPT_OPEN_FILES_LIMIT,
|
||||
OPT_PLUGIN_DIR,
|
||||
OPT_PLUGIN_LOAD,
|
||||
OPT_INNODB_ENCRYPT_LOG,
|
||||
OPT_CLOSE_FILES,
|
||||
|
@ -1030,9 +1030,9 @@ struct my_option xb_client_options[] =
|
|||
{"secure-auth", OPT_XB_SECURE_AUTH, "Refuse client connecting to server if it"
|
||||
" uses old (pre-4.1.1) protocol.", &opt_secure_auth,
|
||||
&opt_secure_auth, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||
|
||||
#define MYSQL_CLIENT
|
||||
#include "sslopt-longopts.h"
|
||||
|
||||
#undef MYSQL_CLIENT
|
||||
|
||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
@ -1570,7 +1570,9 @@ xb_get_one_option(int optid,
|
|||
}
|
||||
}
|
||||
break;
|
||||
#define MYSQL_CLIENT
|
||||
#include "sslopt-case.h"
|
||||
#undef MYSQL_CLIENT
|
||||
|
||||
case '?':
|
||||
usage();
|
||||
|
|
|
@ -72,7 +72,7 @@ my_bool my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset,
|
|||
uint flags);
|
||||
void my_hash_free(HASH *tree);
|
||||
void my_hash_reset(HASH *hash);
|
||||
uchar *my_hash_element(HASH *hash, ulong idx);
|
||||
uchar *my_hash_element(HASH *hash, size_t idx);
|
||||
uchar *my_hash_search(const HASH *info, const uchar *key, size_t length);
|
||||
uchar *my_hash_search_using_hash_value(const HASH *info,
|
||||
my_hash_value_type hash_value,
|
||||
|
|
|
@ -89,7 +89,7 @@ static void die(const char* fmt, ...)
|
|||
}
|
||||
|
||||
|
||||
static void kill_child(bool was_killed)
|
||||
static int kill_child(bool was_killed)
|
||||
{
|
||||
int status= 0;
|
||||
|
||||
|
@ -108,15 +108,15 @@ static void kill_child(bool was_killed)
|
|||
exit_code= WEXITSTATUS(status);
|
||||
message("Child exit: %d", exit_code);
|
||||
// Exit with exit status of the child
|
||||
exit(exit_code);
|
||||
return exit_code;
|
||||
}
|
||||
|
||||
if (WIFSIGNALED(status))
|
||||
message("Child killed by signal: %d", WTERMSIG(status));
|
||||
|
||||
exit(exit_code);
|
||||
return exit_code;
|
||||
}
|
||||
exit(5);
|
||||
return 5;
|
||||
}
|
||||
|
||||
|
||||
|
@ -136,7 +136,7 @@ extern "C" void handle_signal(int sig)
|
|||
terminated= 1;
|
||||
|
||||
if (child_pid > 0)
|
||||
kill_child(sig == SIGCHLD);
|
||||
_exit(kill_child(sig == SIGCHLD));
|
||||
|
||||
// Ignore further signals
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
|
@ -300,8 +300,6 @@ int main(int argc, char* const argv[] )
|
|||
/* Wait for parent or child to die */
|
||||
sleep(1);
|
||||
}
|
||||
kill_child(0);
|
||||
|
||||
return 4;
|
||||
return kill_child(0);
|
||||
}
|
||||
|
||||
|
|
13
mysql-test/main/assign_key_cache.result
Normal file
13
mysql-test/main/assign_key_cache.result
Normal file
|
@ -0,0 +1,13 @@
|
|||
set global my_cache.key_buffer_size = 1024*1024;
|
||||
create table t1 (i int) engine=myisam partition by hash (i) partitions 2;
|
||||
xa start 'xid';
|
||||
cache index t1 partition (non_existing_partition) in my_cache;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 assign_to_keycache error Error in list of partitions to test.t1
|
||||
cache index t1 partition (p1) in my_cache;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 assign_to_keycache status OK
|
||||
xa end 'xid';
|
||||
xa rollback 'xid';
|
||||
drop table t1;
|
||||
set global my_cache.key_buffer_size = 0;
|
13
mysql-test/main/assign_key_cache.test
Normal file
13
mysql-test/main/assign_key_cache.test
Normal file
|
@ -0,0 +1,13 @@
|
|||
#
|
||||
# MDEV-15216 Assertion `! is_set() || m_can_overwrite_status' failed in Diagnostics_area::set_error_status upon operation inside XA
|
||||
#
|
||||
--source include/have_partition.inc
|
||||
set global my_cache.key_buffer_size = 1024*1024;
|
||||
create table t1 (i int) engine=myisam partition by hash (i) partitions 2;
|
||||
xa start 'xid';
|
||||
cache index t1 partition (non_existing_partition) in my_cache;
|
||||
cache index t1 partition (p1) in my_cache;
|
||||
xa end 'xid';
|
||||
xa rollback 'xid';
|
||||
drop table t1;
|
||||
set global my_cache.key_buffer_size = 0;
|
5
mysql-test/main/connect_debug.result
Normal file
5
mysql-test/main/connect_debug.result
Normal file
|
@ -0,0 +1,5 @@
|
|||
set @old_dbug=@@global.debug_dbug;
|
||||
set global debug_dbug='+d,auth_disconnect';
|
||||
create user 'bad' identified by 'worse';
|
||||
set global debug_dbug=@old_dbug;
|
||||
drop user bad;
|
12
mysql-test/main/connect_debug.test
Normal file
12
mysql-test/main/connect_debug.test
Normal file
|
@ -0,0 +1,12 @@
|
|||
source include/have_debug.inc;
|
||||
set @old_dbug=@@global.debug_dbug;
|
||||
|
||||
#
|
||||
# use after free if need plugin change and auth aborted
|
||||
#
|
||||
set global debug_dbug='+d,auth_disconnect';
|
||||
create user 'bad' identified by 'worse';
|
||||
--error 1
|
||||
--exec $MYSQL --default-auth=mysql_old_password --user=bad --password=worse
|
||||
set global debug_dbug=@old_dbug;
|
||||
drop user bad;
|
|
@ -562,7 +562,7 @@ INSERT INTO db1.trans (a) VALUES (1);
|
|||
cache index t3 in keycache;
|
||||
CALL db1.test_if_commit();
|
||||
IMPLICIT COMMIT
|
||||
YES
|
||||
NO
|
||||
set global keycache.key_buffer_size=0;
|
||||
#
|
||||
# SQLCOM_PRELOAD_KEYS
|
||||
|
@ -571,7 +571,7 @@ INSERT INTO db1.trans (a) VALUES (1);
|
|||
load index into cache t3;
|
||||
CALL db1.test_if_commit();
|
||||
IMPLICIT COMMIT
|
||||
YES
|
||||
NO
|
||||
#
|
||||
# SQLCOM_FLUSH
|
||||
#
|
||||
|
|
|
@ -5240,3 +5240,14 @@ END;
|
|||
$$
|
||||
CALL p1('x');
|
||||
DROP PROCEDURE p1;
|
||||
create table t1 (b blob default '');
|
||||
prepare stmt from "alter table t1 force";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
set names latin1;
|
||||
prepare stmt from "alter table t1 modify b text character set utf8 default 'a'";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
drop table t1;
|
||||
|
|
|
@ -4672,3 +4672,18 @@ DELIMITER ;$$
|
|||
--disable_result_log
|
||||
CALL p1('x');
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
#
|
||||
# MDEV-15746 ASAN heap-use-after-free in Item_change_list::rollback_item_tree_changes on ALTER executed as PS
|
||||
#
|
||||
create table t1 (b blob default '');
|
||||
prepare stmt from "alter table t1 force";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
set names latin1;
|
||||
prepare stmt from "alter table t1 modify b text character set utf8 default 'a'";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
drop table t1;
|
||||
|
|
|
@ -133,3 +133,37 @@ SET @@innodb_lock_wait_timeout= @innodb_lock_wait_timeout_saved;
|
|||
#
|
||||
# BUG 16041903: End of test case
|
||||
#
|
||||
#
|
||||
# MDEV-15035: SP using query with outer join and a parameter
|
||||
# in ON expression
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
CREATE TABLE t2 (
|
||||
id int NOT NULL,
|
||||
id_foo int NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1, 1);
|
||||
DROP PROCEDURE IF EXISTS test_proc;
|
||||
CREATE PROCEDURE test_proc(IN param int)
|
||||
LANGUAGE SQL
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
SELECT DISTINCT f.id
|
||||
FROM t1 f
|
||||
LEFT OUTER JOIN t2 b ON b.id_foo = f.id
|
||||
WHERE (param <> 0 OR b.id IS NOT NULL);
|
||||
END|
|
||||
CALL test_proc(0);
|
||||
id
|
||||
1
|
||||
CALL test_proc(1);
|
||||
id
|
||||
1
|
||||
2
|
||||
DROP PROCEDURE IF EXISTS test_proc;
|
||||
DROP TABLE t1, t2;
|
||||
|
|
|
@ -158,5 +158,47 @@ SET @@innodb_lock_wait_timeout= @innodb_lock_wait_timeout_saved;
|
|||
--echo # BUG 16041903: End of test case
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15035: SP using query with outer join and a parameter
|
||||
--echo # in ON expression
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id int NOT NULL,
|
||||
id_foo int NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t2 VALUES (1, 1);
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS test_proc;
|
||||
--enable_warnings
|
||||
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE test_proc(IN param int)
|
||||
LANGUAGE SQL
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
SELECT DISTINCT f.id
|
||||
FROM t1 f
|
||||
LEFT OUTER JOIN t2 b ON b.id_foo = f.id
|
||||
WHERE (param <> 0 OR b.id IS NOT NULL);
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CALL test_proc(0);
|
||||
CALL test_proc(1);
|
||||
|
||||
DROP PROCEDURE IF EXISTS test_proc;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
# Wait till we reached the initial number of concurrent sessions
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
|
|
@ -3165,4 +3165,30 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t4`.`c4` AS `c4` from `test`.`t1` left join (`test`.`t2` join `test`.`t4`) on(`test`.`t2`.`c2` = `test`.`t1`.`c1` and <in_optimizer>(`test`.`t1`.`c1`,<exists>(/* select#3 */ select `test`.`t3`.`c3` from `test`.`t3` where <cache>(`test`.`t2`.`c2`) = `test`.`t3`.`c3`))) where 1
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
#
|
||||
# MDEV-13699: Assertion `!new_field->field_name.str ||
|
||||
# strlen(new_field->field_name.str) == new_field->field_name.length'
|
||||
# failed in create_tmp_table on 2nd execution of PS with semijoin
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (b INT);
|
||||
INSERT INTO t2 VALUES (3),(4);
|
||||
CREATE TABLE t3 (c INT);
|
||||
CREATE ALGORITHM=MERGE VIEW v3 AS SELECT * FROM t3;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
PREPARE stmt FROM
|
||||
"SELECT * FROM t1
|
||||
WHERE EXISTS (
|
||||
SELECT * FROM t2 WHERE t1.a IN ( SELECT c AS fld FROM v3 )
|
||||
)";
|
||||
EXECUTE stmt;
|
||||
a
|
||||
EXECUTE stmt;
|
||||
a
|
||||
EXECUTE stmt;
|
||||
a
|
||||
drop view v3;
|
||||
drop table t1,t2,t3;
|
||||
# End of 5.5 test
|
||||
set optimizer_switch=@subselect_sj_tmp;
|
||||
|
|
|
@ -2846,5 +2846,35 @@ eval EXPLAIN EXTENDED $q2;
|
|||
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-13699: Assertion `!new_field->field_name.str ||
|
||||
--echo # strlen(new_field->field_name.str) == new_field->field_name.length'
|
||||
--echo # failed in create_tmp_table on 2nd execution of PS with semijoin
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
|
||||
CREATE TABLE t2 (b INT);
|
||||
INSERT INTO t2 VALUES (3),(4);
|
||||
|
||||
CREATE TABLE t3 (c INT);
|
||||
CREATE ALGORITHM=MERGE VIEW v3 AS SELECT * FROM t3;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
|
||||
PREPARE stmt FROM
|
||||
"SELECT * FROM t1
|
||||
WHERE EXISTS (
|
||||
SELECT * FROM t2 WHERE t1.a IN ( SELECT c AS fld FROM v3 )
|
||||
)";
|
||||
EXECUTE stmt;
|
||||
EXECUTE stmt;
|
||||
EXECUTE stmt;
|
||||
|
||||
drop view v3;
|
||||
drop table t1,t2,t3;
|
||||
|
||||
--echo # End of 5.5 test
|
||||
|
||||
# The following command must be the last one the file
|
||||
set optimizer_switch=@subselect_sj_tmp;
|
||||
|
|
|
@ -3179,6 +3179,32 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t4`.`c4` AS `c4` from `test`.`t1` left join (`test`.`t2` join `test`.`t4`) on(`test`.`t2`.`c2` = `test`.`t1`.`c1` and <in_optimizer>(`test`.`t1`.`c1`,<exists>(/* select#3 */ select `test`.`t3`.`c3` from `test`.`t3` where <cache>(`test`.`t2`.`c2`) = `test`.`t3`.`c3`))) where 1
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
#
|
||||
# MDEV-13699: Assertion `!new_field->field_name.str ||
|
||||
# strlen(new_field->field_name.str) == new_field->field_name.length'
|
||||
# failed in create_tmp_table on 2nd execution of PS with semijoin
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (b INT);
|
||||
INSERT INTO t2 VALUES (3),(4);
|
||||
CREATE TABLE t3 (c INT);
|
||||
CREATE ALGORITHM=MERGE VIEW v3 AS SELECT * FROM t3;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
PREPARE stmt FROM
|
||||
"SELECT * FROM t1
|
||||
WHERE EXISTS (
|
||||
SELECT * FROM t2 WHERE t1.a IN ( SELECT c AS fld FROM v3 )
|
||||
)";
|
||||
EXECUTE stmt;
|
||||
a
|
||||
EXECUTE stmt;
|
||||
a
|
||||
EXECUTE stmt;
|
||||
a
|
||||
drop view v3;
|
||||
drop table t1,t2,t3;
|
||||
# End of 5.5 test
|
||||
set optimizer_switch=@subselect_sj_tmp;
|
||||
#
|
||||
# BUG#49129: Wrong result with IN-subquery with join_cache_level=6 and firstmatch=off
|
||||
|
|
|
@ -23,12 +23,9 @@ galera_as_slave_replication_bundle : MDEV-13549 Galera test failures
|
|||
galera_gcache_recover : MDEV-13549 Galera test failures
|
||||
galera_gcache_recover_full_gcache : MDEV-13549 Galera test failures
|
||||
galera_gcache_recover_manytrx : MDEV-13549 Galera test failures
|
||||
galera_ist_mysqldump : MDEV-13549 Galera test failures
|
||||
galera_ssl_upgrade : MDEV-13549 Galera test failures
|
||||
galera.MW-329 : wsrep_local_replays not stable
|
||||
galera.MW-328A : have_deadlocks test not stable
|
||||
galera_var_retry_autocommit : MDEV-15794 Test failure on galera.galera_var_retry_autocommit
|
||||
galera_var_auto_inc_control_on : MDEV-15803 Test failure on galera.galera_var_auto_inc_control_on
|
||||
query_cache : MDEV-15805 Test failure on galera.query_cache
|
||||
galera.MW-44 : MDEV-15809 Test failure on galera.MW-44
|
||||
galera.galera_pc_ignore_sb : MDEV-15811 Test failure on galera_pc_ignore_sb
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
SET @@global.wsrep_replicate_myisam=OFF;
|
||||
connection node_1;
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
COUNT(*)
|
||||
1
|
||||
connection node_2;
|
||||
0
|
||||
SELECT * FROM mysql.general_log;
|
||||
event_time user_host thread_id server_id command_type argument
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
COUNT(*)
|
||||
1
|
||||
connection node_1;
|
||||
0
|
||||
SELECT * FROM mysql.general_log;
|
||||
event_time user_host thread_id server_id command_type argument
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
COUNT(*)
|
||||
1
|
||||
|
@ -21,9 +24,8 @@ SET SESSION wsrep_osu_method=TOI;
|
|||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
connection node_2;
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
SET @@global.wsrep_replicate_myisam=Default;
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
Setting SST method to mysqldump ...
|
||||
call mtr.add_suppression("WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to '127.0.0.1'");
|
||||
call mtr.add_suppression("Failed to load slave replication state from table mysql.gtid_slave_pos");
|
||||
CREATE USER 'sst';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'sst';
|
||||
SET GLOBAL wsrep_sst_auth = 'sst:';
|
||||
|
@ -194,7 +196,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
|
|||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
SET GLOBAL debug = 'd,sync.alter_opened_table';
|
||||
SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET wsrep_sync_wait = 0;
|
||||
Killing server ...
|
||||
|
@ -273,6 +275,7 @@ COUNT(*) = 0
|
|||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SET GLOBAL debug_dbug = $debug_orig;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
|
||||
DROP USER sst;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
|
||||
|
|
|
@ -3,6 +3,10 @@ CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
|||
INSERT INTO t1 VALUES (1);
|
||||
connection node_2;
|
||||
Killing server ...
|
||||
connection node_1;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_sync_wait = DEFAULT;
|
||||
connection node_2;
|
||||
connection node_2a;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
|
|
|
@ -1,38 +1,37 @@
|
|||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, node VARCHAR(10)) ENGINE=InnoDB;
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE
|
||||
2
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index';
|
||||
VARIABLE_VALUE
|
||||
0
|
||||
SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size');
|
||||
@@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size')
|
||||
1
|
||||
SELECT @@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1;
|
||||
@@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1
|
||||
connection node_2;
|
||||
auto_increment_offset_differ
|
||||
1
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES (DEFAULT, 'node1');;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (DEFAULT, 'node2');;
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE
|
||||
2
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index';
|
||||
VARIABLE_VALUE
|
||||
1
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size');
|
||||
@@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size')
|
||||
1
|
||||
SELECT @@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1;
|
||||
@@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1
|
||||
connection node_1;
|
||||
auto_increment_offset_differ
|
||||
1
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2');;
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1');;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 22 FROM t1;
|
||||
COUNT(*) = 22
|
||||
1
|
||||
SELECT COUNT(DISTINCT f1) = 22 FROM t1;
|
||||
COUNT(DISTINCT f1) = 22
|
||||
1
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 22 FROM t1;
|
||||
COUNT(*) = 22
|
||||
1
|
||||
|
|
|
@ -1,44 +1,72 @@
|
|||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB;
|
||||
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.f2 = SLEEP(5);
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_retry_autocommit = 0;
|
||||
INSERT INTO t1 (f1) VALUES (1),(2);;
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
|
||||
INSERT INTO t1 (f1) VALUES (2);
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
connection node_2;
|
||||
TRUNCATE TABLE t1;
|
||||
connection node_1;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
connection node_1;
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
INSERT INTO t1 (f1) VALUES (3),(4);;
|
||||
connection node_2;
|
||||
TRUNCATE TABLE t1;
|
||||
connection node_1;
|
||||
SELECT * FROM test.t1;
|
||||
f1 f2
|
||||
3 0
|
||||
4 0
|
||||
connection node_2;
|
||||
CREATE PROCEDURE repeated_truncate ()
|
||||
BEGIN
|
||||
DECLARE i INT;
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
|
||||
SET i = 0;
|
||||
WHILE i <= 1000 DO
|
||||
TRUNCATE TABLE t1;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
END|
|
||||
CALL repeated_truncate();
|
||||
connection node_1;
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
INSERT INTO t1 (f1) VALUES (5),(6);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
connection node_1;
|
||||
SET SESSION wsrep_retry_autocommit = 1024;
|
||||
INSERT INTO t1 (f1) VALUES (7),(8);;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
include/diff_servers.inc [servers=1 2]
|
||||
ERROR 40001: Deadlock: wsrep aborted transaction
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
|
||||
INSERT INTO t1 (f1) VALUES (2);
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
connection node_2;
|
||||
TRUNCATE TABLE t1;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 2';
|
||||
INSERT INTO t1 VALUES (2);;
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
connection node_2;
|
||||
TRUNCATE TABLE t1;
|
||||
connection node_1a;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue WAIT_FOR before_rep';
|
||||
connection node_2;
|
||||
TRUNCATE TABLE t1;
|
||||
connection node_1a;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
connection node_1;
|
||||
ERROR 40001: Deadlock: wsrep aborted transaction
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET GLOBAL debug_dbug = NULL;
|
||||
DROP TABLE t1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_retry_autocommit = 64;
|
||||
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 64';
|
||||
INSERT INTO t1 VALUES (2);
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET GLOBAL debug_dbug = NULL;
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE repeated_truncate;
|
||||
|
|
|
@ -5,18 +5,22 @@
|
|||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
SET @@global.wsrep_replicate_myisam=OFF;
|
||||
--connection node_1
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
SELECT * FROM mysql.general_log;
|
||||
|
||||
--sleep 1
|
||||
--connection node_2
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
SELECT * FROM mysql.general_log;
|
||||
|
||||
--sleep 1
|
||||
--connection node_1
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) from mysql.general_log;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
|
@ -27,6 +31,7 @@ SET SESSION wsrep_osu_method=TOI;
|
|||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
DROP TABLE t1;
|
||||
SET @@global.wsrep_replicate_myisam=Default;
|
||||
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
--source include/have_innodb.inc
|
||||
--source suite/galera/include/galera_have_debug_sync.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
# Prepare table
|
||||
CREATE TABLE t1 (f1 INT PRIMARY KEY, f2 TEXT);
|
||||
|
||||
|
@ -65,3 +70,5 @@ SELECT * FROM t1;
|
|||
--connection node_1
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
|
||||
--source suite/galera/include/galera_sst_set_mysqldump.inc
|
||||
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
# mysql-wsrep#33 - nnoDB: Failing assertion: xid_seqno > trx_sys_cur_xid_seqno in trx_sys_update_wsrep_checkpoint with mysqldump IST
|
||||
# --source suite/galera/include/galera_st_disconnect_slave.inc
|
||||
|
||||
|
@ -14,4 +18,5 @@
|
|||
--source suite/galera/include/galera_st_kill_slave.inc
|
||||
--source suite/galera/include/galera_st_kill_slave_ddl.inc
|
||||
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
--source suite/galera/include/galera_sst_restore.inc
|
||||
|
|
|
@ -11,6 +11,14 @@ INSERT INTO t1 VALUES (1);
|
|||
|
||||
--connection node_2
|
||||
--source include/kill_galera.inc
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'
|
||||
--source include/wait_condition.inc
|
||||
SET SESSION wsrep_sync_wait = DEFAULT;
|
||||
|
||||
--connection node_2
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $galera_connection_name = node_2a
|
||||
|
|
|
@ -20,7 +20,9 @@ SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true';
|
|||
--source include/kill_galera.inc
|
||||
|
||||
--connection node_1
|
||||
--sleep 2
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
DROP TABLE t1;
|
||||
|
@ -38,10 +40,8 @@ SET GLOBAL wsrep_cluster_address = '';
|
|||
|
||||
--connection node_2
|
||||
--source include/start_mysqld.inc
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
|
|
@ -5,24 +5,21 @@
|
|||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, node VARCHAR(10)) ENGINE=InnoDB;
|
||||
|
||||
--let $auto_increment_offset_node_1 = `SELECT @@global.auto_increment_offset`
|
||||
# auto_increment_increment is equal to the number of nodes
|
||||
# auto_increment_offset is equal to the ID of the node
|
||||
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index';
|
||||
SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size');
|
||||
SELECT @@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1;
|
||||
|
||||
--connection node_2
|
||||
--disable_query_log
|
||||
--eval SELECT @@global.auto_increment_offset != $auto_increment_offset_node_1 AS auto_increment_offset_differ;
|
||||
--enable_query_log
|
||||
|
||||
# Expect no conflicts
|
||||
--connection node_1
|
||||
--send INSERT INTO t1 VALUES (DEFAULT, 'node1');
|
||||
|
||||
--connection node_2
|
||||
|
@ -34,12 +31,18 @@ SELECT @@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_
|
|||
--connection node_2
|
||||
--reap
|
||||
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index';
|
||||
--let $auto_increment_offset_node_2 = `SELECT @@global.auto_increment_offset`
|
||||
# auto_increment_increment is equal to the number of nodes
|
||||
SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size');
|
||||
SELECT @@global.auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1;
|
||||
|
||||
--connection node_1
|
||||
--disable_query_log
|
||||
--eval SELECT @@global.auto_increment_offset != $auto_increment_offset_node_2 AS auto_increment_offset_differ;
|
||||
--enable_query_log
|
||||
|
||||
|
||||
# Expect no conflicts
|
||||
--connection node_2
|
||||
--send INSERT INTO t1 VALUES (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2');
|
||||
|
||||
--connection node_1
|
||||
|
|
|
@ -1,98 +1,141 @@
|
|||
#
|
||||
# Test that the wsrep_retry_autocommit variable is respected. We use an INSERT that
|
||||
# proceeds very slowly due to extra SLEEP() in a trigger
|
||||
# Test that the wsrep_retry_autocommit variable is respected.
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB;
|
||||
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.f2 = SLEEP(5);
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
|
||||
#
|
||||
# With wsrep_retry_autocommit = 0, error is certain
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
SET SESSION wsrep_retry_autocommit = 0;
|
||||
--send INSERT INTO t1 (f1) VALUES (1),(2);
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
|
||||
--send INSERT INTO t1 (f1) VALUES (2)
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
|
||||
--connection node_2
|
||||
--sleep 1
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# With wsrep_retry_autocommit = 1, success against one TRUNCATE
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
--send INSERT INTO t1 (f1) VALUES (3),(4);
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
|
||||
--send INSERT INTO t1 (f1) VALUES (2)
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
|
||||
--connection node_2
|
||||
--sleep 1
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1
|
||||
--error 0
|
||||
--reap
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
#
|
||||
# With wsrep_retry_autocommit = 1, failure against multiple TRUNCATEs
|
||||
#
|
||||
|
||||
--connection node_2
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE repeated_truncate ()
|
||||
BEGIN
|
||||
DECLARE i INT;
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
|
||||
|
||||
SET i = 0;
|
||||
WHILE i <= 1000 DO
|
||||
TRUNCATE TABLE t1;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
# Begin streaming TRUNCATEs
|
||||
--let $truncate_connection_id = `SELECT CONNECTION_ID()`
|
||||
--send CALL repeated_truncate()
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
--sleep 1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
INSERT INTO t1 (f1) VALUES (5),(6);
|
||||
|
||||
#
|
||||
# With wsrep_retry_autocommit = 1024, success against multiple TRUNCATEs
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_retry_autocommit = 1024;
|
||||
--send INSERT INTO t1 (f1) VALUES (7),(8);
|
||||
|
||||
--sleep 6
|
||||
|
||||
# Once he stream of TRUNCATEs is complete
|
||||
--connection node_2
|
||||
--reap
|
||||
|
||||
# the INSERT will eventually be sucessfull
|
||||
--connection node_1
|
||||
--error 0
|
||||
--reap
|
||||
|
||||
--let $diff_servers = 1 2
|
||||
--source include/diff_servers.inc
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# With wsrep_retry_autcommit = 1, failure against multiple TRUNCATEs
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
SET SESSION wsrep_retry_autocommit = 1;
|
||||
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 2';
|
||||
|
||||
--send INSERT INTO t1 VALUES (2);
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
|
||||
--connection node_2
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue WAIT_FOR before_rep';
|
||||
|
||||
--connection node_2
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1a
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
--connection node_1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET GLOBAL debug_dbug = NULL;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# With wsrep_retry_autocommit = 64, success against 64 TRUNCATEs
|
||||
#
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
SET SESSION wsrep_retry_autocommit = 64;
|
||||
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
|
||||
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 64';
|
||||
|
||||
--send INSERT INTO t1 VALUES (2)
|
||||
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--let $count = 64
|
||||
while ($count)
|
||||
{
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
|
||||
|
||||
--connection node_2
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--connection node_1a
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue';
|
||||
|
||||
--dec $count
|
||||
}
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
--reap
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET GLOBAL debug_dbug = NULL;
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE repeated_truncate;
|
||||
|
|
18
mysql-test/suite/innodb/r/alter_partitioned_xa.result
Normal file
18
mysql-test/suite/innodb/r/alter_partitioned_xa.result
Normal file
|
@ -0,0 +1,18 @@
|
|||
#
|
||||
# MDEV-14693 XA: Assertion `!clust_index->online_log' failed
|
||||
# in rollback_inplace_alter_table
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT) ENGINE=InnoDB PARTITION BY HASH(a) PARTITIONS 2;
|
||||
XA START 'xid';
|
||||
INSERT INTO t1 VALUES (1,10);
|
||||
CREATE DATABASE IF NOT EXISTS db;
|
||||
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
|
||||
connect con1,localhost,root,,test;
|
||||
SET innodb_lock_wait_timeout= 1, lock_wait_timeout= 2;
|
||||
ALTER TABLE t1 FORCE;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
disconnect con1;
|
||||
connection default;
|
||||
XA END 'xid';
|
||||
XA ROLLBACK 'xid';
|
||||
DROP TABLE t1;
|
31
mysql-test/suite/innodb/t/alter_partitioned_xa.test
Normal file
31
mysql-test/suite/innodb/t/alter_partitioned_xa.test
Normal file
|
@ -0,0 +1,31 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_partition.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-14693 XA: Assertion `!clust_index->online_log' failed
|
||||
--echo # in rollback_inplace_alter_table
|
||||
--echo #
|
||||
|
||||
# A bug in meta-data locking (MDL) for XA transactions causes
|
||||
# a bug in InnoDB error handling for ALTER TABLE to be triggered.
|
||||
CREATE TABLE t1 (a INT, b INT) ENGINE=InnoDB PARTITION BY HASH(a) PARTITIONS 2;
|
||||
XA START 'xid';
|
||||
INSERT INTO t1 VALUES (1,10);
|
||||
# XA bug: The following releases the MDL on t1!
|
||||
--error ER_XAER_RMFAIL
|
||||
CREATE DATABASE IF NOT EXISTS db;
|
||||
|
||||
--connect (con1,localhost,root,,test)
|
||||
SET innodb_lock_wait_timeout= 1, lock_wait_timeout= 2;
|
||||
# Here, innodb_lock_wait_timeout would be exceeded, causing the operation
|
||||
# to roll back when InnoDB is attempting to commit.
|
||||
# (Instead, lock_wait_timeout should be exceeded!)
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
ALTER TABLE t1 FORCE;
|
||||
|
||||
# Cleanup
|
||||
--disconnect con1
|
||||
--connection default
|
||||
XA END 'xid';
|
||||
XA ROLLBACK 'xid';
|
||||
DROP TABLE t1;
|
9
mysql-test/suite/mariabackup/backup_ssl.result
Normal file
9
mysql-test/suite/mariabackup/backup_ssl.result
Normal file
|
@ -0,0 +1,9 @@
|
|||
GRANT ALL PRIVILEGES on *.* TO backup_user IDENTIFIED by 'x' REQUIRE SSL;
|
||||
FLUSH PRIVILEGES;
|
||||
# xtrabackup backup
|
||||
# xtrabackup prepare
|
||||
# shutdown server
|
||||
# remove datadir
|
||||
# xtrabackup move back
|
||||
# restart server
|
||||
DROP USER backup_user;
|
16
mysql-test/suite/mariabackup/backup_ssl.test
Normal file
16
mysql-test/suite/mariabackup/backup_ssl.test
Normal file
|
@ -0,0 +1,16 @@
|
|||
GRANT ALL PRIVILEGES on *.* TO backup_user IDENTIFIED by 'x' REQUIRE SSL;
|
||||
FLUSH PRIVILEGES;
|
||||
echo # xtrabackup backup;
|
||||
let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
|
||||
--disable_result_log
|
||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --user=backup_user --password=x --ssl --backup --target-dir=$targetdir;
|
||||
--enable_result_log
|
||||
|
||||
echo # xtrabackup prepare;
|
||||
--disable_result_log
|
||||
exec $XTRABACKUP --prepare --target-dir=$targetdir;
|
||||
-- source include/restart_and_restore.inc
|
||||
--enable_result_log
|
||||
DROP USER backup_user;
|
||||
rmdir $targetdir;
|
||||
|
|
@ -39,7 +39,7 @@ DROP TABLE t1;
|
|||
#
|
||||
# MDEV-15456 Server crashes upon adding or dropping a partition in ALTER under LOCK TABLE after ER_SAME_NAME_PARTITION
|
||||
#
|
||||
create table t1 (i int) partition by range(i) (partition p0 values less than (10));
|
||||
--eval create table t1 (i int) engine=$engine partition by range(i) (partition p0 values less than (10))
|
||||
lock table t1 write;
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
alter table t1 add partition (partition p0 values less than (20));
|
||||
|
|
|
@ -42,7 +42,7 @@ PARTITION p3 VALUES IN (4,5,6)
|
|||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
||||
create table t1 (i int) partition by range(i) (partition p0 values less than (10));
|
||||
create table t1 (i int) engine=InnoDB partition by range(i) (partition p0 values less than (10));
|
||||
lock table t1 write;
|
||||
alter table t1 add partition (partition p0 values less than (20));
|
||||
ERROR HY000: Duplicate partition name p0
|
||||
|
|
|
@ -69,7 +69,7 @@ PARTITION p3 VALUES IN (4,5,6)
|
|||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
||||
create table t1 (i int) partition by range(i) (partition p0 values less than (10));
|
||||
create table t1 (i int) engine=Aria partition by range(i) (partition p0 values less than (10));
|
||||
lock table t1 write;
|
||||
alter table t1 add partition (partition p0 values less than (20));
|
||||
ERROR HY000: Duplicate partition name p0
|
||||
|
|
|
@ -42,7 +42,7 @@ PARTITION p3 VALUES IN (4,5,6)
|
|||
);
|
||||
ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
|
||||
DROP TABLE t1;
|
||||
create table t1 (i int) partition by range(i) (partition p0 values less than (10));
|
||||
create table t1 (i int) engine=MyISAM partition by range(i) (partition p0 values less than (10));
|
||||
lock table t1 write;
|
||||
alter table t1 add partition (partition p0 values less than (20));
|
||||
ERROR HY000: Duplicate partition name p0
|
||||
|
|
|
@ -32,349 +32,97 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
|
|||
--echo # CHECK IMPLICT COMMIT
|
||||
--echo #########################################################################
|
||||
SET AUTOCOMMIT= 0;
|
||||
let $ddl_cases= 43;
|
||||
while ($ddl_cases >= 1)
|
||||
{
|
||||
--echo -b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
let $in_temporary= no;
|
||||
let $ok= yes;
|
||||
#
|
||||
# In SBR and MIXED modes, the commit event is usually the third event in the
|
||||
# binary log:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: INSERT
|
||||
# 3: COMMIT
|
||||
# 4: DDL EVENT which triggered the previous commmit.
|
||||
#
|
||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
let $commit_event_row_number= 3;
|
||||
}
|
||||
#
|
||||
# In RBR mode, the commit event is usually the fourth event in the binary log:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
# 5: DDL EVENT which triggered the previous commmit.
|
||||
#
|
||||
if (`select @@binlog_format = 'ROW'`)
|
||||
{
|
||||
let $commit_event_row_number= 5;
|
||||
}
|
||||
|
||||
let $first_binlog_position= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||
--enable_query_log
|
||||
eval INSERT INTO tt_1(ddl_case) VALUES ($ddl_cases);
|
||||
|
||||
if ($ddl_cases == 43)
|
||||
{
|
||||
let $cmd= CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_SO";
|
||||
}
|
||||
if ($ddl_cases == 42)
|
||||
{
|
||||
let $cmd= DROP FUNCTION myfunc_int;
|
||||
}
|
||||
if ($ddl_cases == 41)
|
||||
{
|
||||
let $cmd= LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
}
|
||||
if ($ddl_cases == 40)
|
||||
{
|
||||
let $cmd= LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
}
|
||||
if ($ddl_cases == 39)
|
||||
{
|
||||
let $cmd= ANALYZE TABLE nt_1;
|
||||
}
|
||||
if ($ddl_cases == 38)
|
||||
{
|
||||
let $cmd= CHECK TABLE nt_1;
|
||||
}
|
||||
if ($ddl_cases == 37)
|
||||
{
|
||||
let $cmd= OPTIMIZE TABLE nt_1;
|
||||
}
|
||||
if ($ddl_cases == 36)
|
||||
{
|
||||
let $cmd= REPAIR TABLE nt_1;
|
||||
}
|
||||
if ($ddl_cases == 35)
|
||||
{
|
||||
let $cmd= LOCK TABLES tt_1 WRITE;
|
||||
}
|
||||
if ($ddl_cases == 34)
|
||||
{
|
||||
let $cmd= UNLOCK TABLES;
|
||||
}
|
||||
if ($ddl_cases == 33)
|
||||
{
|
||||
let $cmd= CREATE USER 'user'@'localhost';
|
||||
}
|
||||
if ($ddl_cases == 32)
|
||||
{
|
||||
let $cmd= GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
}
|
||||
if ($ddl_cases == 31)
|
||||
{
|
||||
let $cmd= SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
}
|
||||
if ($ddl_cases == 30)
|
||||
{
|
||||
let $cmd= REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
}
|
||||
if ($ddl_cases == 29)
|
||||
{
|
||||
let $cmd= RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
}
|
||||
if ($ddl_cases == 28)
|
||||
{
|
||||
let $cmd= DROP USER 'user_new'@'localhost';
|
||||
}
|
||||
if ($ddl_cases == 27)
|
||||
{
|
||||
let $cmd= CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
}
|
||||
if ($ddl_cases == 26)
|
||||
{
|
||||
let $cmd= ALTER EVENT evt COMMENT 'evt';
|
||||
}
|
||||
if ($ddl_cases == 25)
|
||||
{
|
||||
let $cmd= DROP EVENT evt;
|
||||
}
|
||||
if ($ddl_cases == 24)
|
||||
{
|
||||
let $cmd= CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
}
|
||||
if ($ddl_cases == 23)
|
||||
{
|
||||
let $cmd= DROP TRIGGER tr;
|
||||
#
|
||||
# In RBR mode, due to the trigger the tt_2 is also updated:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: TABLE MAP EVENT
|
||||
# 4: ROW EVENT
|
||||
# 5: COMMIT
|
||||
# 6: DDL EVENT which triggered the previous commmit.
|
||||
#
|
||||
if (`select @@binlog_format = 'ROW'`)
|
||||
{
|
||||
let $commit_event_row_number= 6;
|
||||
}
|
||||
}
|
||||
if ($ddl_cases == 22)
|
||||
{
|
||||
let $cmd= CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
}
|
||||
if ($ddl_cases == 21)
|
||||
{
|
||||
let $cmd= ALTER FUNCTION fc COMMENT 'fc';
|
||||
}
|
||||
if ($ddl_cases == 20)
|
||||
{
|
||||
let $cmd= DROP FUNCTION fc;
|
||||
}
|
||||
if ($ddl_cases == 19)
|
||||
{
|
||||
let $cmd= CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
}
|
||||
if ($ddl_cases == 18)
|
||||
{
|
||||
let $cmd= ALTER PROCEDURE pc COMMENT 'pc';
|
||||
}
|
||||
if ($ddl_cases == 17)
|
||||
{
|
||||
let $cmd= DROP PROCEDURE pc;
|
||||
}
|
||||
if ($ddl_cases == 16)
|
||||
{
|
||||
let $cmd= CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
}
|
||||
if ($ddl_cases == 15)
|
||||
{
|
||||
let $cmd= ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
}
|
||||
if ($ddl_cases == 14)
|
||||
{
|
||||
let $cmd= DROP VIEW v;
|
||||
}
|
||||
if ($ddl_cases == 13)
|
||||
{
|
||||
let $cmd= CREATE INDEX ix ON tt_1(ddl_case);
|
||||
}
|
||||
if ($ddl_cases == 12)
|
||||
{
|
||||
let $cmd= DROP INDEX ix ON tt_1;
|
||||
}
|
||||
if ($ddl_cases == 11)
|
||||
{
|
||||
let $cmd= CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
let $in_temporary= yes;
|
||||
# In SBR and MIXED modes, the DDL statement is written to the binary log but
|
||||
# does not commit the current transaction.
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: CREATE TEMPORARY
|
||||
# 3: INSERT
|
||||
# 4: COMMIT
|
||||
#
|
||||
# In RBR the transaction is not committed either and the statement is not
|
||||
# written to the binary log:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'` )
|
||||
{
|
||||
let $commit_event_row_number= 4;
|
||||
}
|
||||
}
|
||||
if ($ddl_cases == 10)
|
||||
{
|
||||
let $cmd= ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
#
|
||||
# In MIXED mode, the changes are logged as rows and we have what follows:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
# 5: DDL EVENT which triggered the previous commmit.
|
||||
#
|
||||
if (`select @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
let $commit_event_row_number= 5;
|
||||
}
|
||||
}
|
||||
if ($ddl_cases == 9)
|
||||
{
|
||||
let $cmd= ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
#
|
||||
# In MIXED mode, the changes are logged as rows and we have what follows:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
# 5: DDL EVENT which triggered the previous commmit.
|
||||
#
|
||||
if (`select @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
let $commit_event_row_number= 5;
|
||||
}
|
||||
}
|
||||
if ($ddl_cases == 8)
|
||||
{
|
||||
let $cmd= DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
let $in_temporary= yes;
|
||||
#
|
||||
# In SBR and MIXED modes, the DDL statement is written to the binary log
|
||||
# but does not commit the current transaction:
|
||||
#
|
||||
# In SBR, we have what follows:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: INSERT
|
||||
# 3: DROP TEMPORARY
|
||||
# 4: COMMIT
|
||||
#
|
||||
# In RBR the transaction is not committed either and the statement is not
|
||||
# written to the binary log:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'STATEMENT'`)
|
||||
{
|
||||
let $commit_event_row_number= 4;
|
||||
}
|
||||
if (`select @@binlog_format = 'ROW'`)
|
||||
{
|
||||
let $commit_event_row_number= 5;
|
||||
}
|
||||
# In MIXED mode, the changes are logged as rows and we have what follows:
|
||||
#
|
||||
# 1: BEGIN
|
||||
# 2: TABLE MAP EVENT
|
||||
# 3: ROW EVENT
|
||||
# 4: DROP TEMPORARY
|
||||
# 5: COMMIT
|
||||
#
|
||||
if (`select @@binlog_format = 'MIXED'`)
|
||||
{
|
||||
let $commit_event_row_number= 6;
|
||||
}
|
||||
}
|
||||
if ($ddl_cases == 7)
|
||||
{
|
||||
let $cmd= CREATE TABLE tt_xx (a int);
|
||||
}
|
||||
if ($ddl_cases == 6)
|
||||
{
|
||||
let $cmd= ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
}
|
||||
if ($ddl_cases == 5)
|
||||
{
|
||||
let $cmd= RENAME TABLE tt_xx TO new_tt_xx;
|
||||
}
|
||||
if ($ddl_cases == 4)
|
||||
{
|
||||
let $cmd= TRUNCATE TABLE new_tt_xx;
|
||||
}
|
||||
if ($ddl_cases == 3)
|
||||
{
|
||||
let $cmd= DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
}
|
||||
if ($ddl_cases == 2)
|
||||
{
|
||||
let $cmd= CREATE DATABASE db;
|
||||
}
|
||||
if ($ddl_cases == 1)
|
||||
{
|
||||
let $cmd= DROP DATABASE IF EXISTS db;
|
||||
}
|
||||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB
|
||||
--eval $cmd
|
||||
--disable_query_log
|
||||
#
|
||||
# When a temporary table is either created or dropped, there is no implicit
|
||||
# commit. The flag in_temporary is used to avoid aborting the test in such
|
||||
# cases. Thus we force the commit.
|
||||
#
|
||||
if ($in_temporary == yes)
|
||||
{
|
||||
--eval COMMIT
|
||||
}
|
||||
let $event_commit= query_get_value("SHOW BINLOG EVENTS FROM $first_binlog_position", Info, $commit_event_row_number);
|
||||
if (`SELECT SUBSTRING("$event_commit",1,6) != "COMMIT"`)
|
||||
{
|
||||
if ($ok == yes)
|
||||
{
|
||||
--echo it *does not* commit the current transaction.
|
||||
--echo $cmd
|
||||
--echo $event_commit
|
||||
SHOW BINLOG EVENTS;
|
||||
exit;
|
||||
}
|
||||
}
|
||||
INSERT INTO tt_1(ddl_case) VALUES (43);
|
||||
replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB;
|
||||
eval CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_SO";
|
||||
INSERT INTO tt_1(ddl_case) VALUES (42);
|
||||
DROP FUNCTION myfunc_int;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (41);
|
||||
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (40);
|
||||
LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (39);
|
||||
ANALYZE TABLE nt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (38);
|
||||
CHECK TABLE nt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (37);
|
||||
OPTIMIZE TABLE nt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--echo -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
let $binlog_start= $first_binlog_position;
|
||||
--echo -b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
--source include/show_binlog_events.inc
|
||||
--echo -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
--echo
|
||||
dec $ddl_cases;
|
||||
}
|
||||
SET AUTOCOMMIT= 1;
|
||||
|
||||
--echo ###################################################################################
|
||||
|
|
|
@ -14,620 +14,330 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
|
|||
# CHECK IMPLICT COMMIT
|
||||
#########################################################################
|
||||
SET AUTOCOMMIT= 0;
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (43);
|
||||
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (42);
|
||||
DROP FUNCTION myfunc_int;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (41);
|
||||
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 preload_keys status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (41)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (40);
|
||||
LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tt_1 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
test.tt_2 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (40)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (39);
|
||||
ANALYZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 analyze status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (39)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ANALYZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (38);
|
||||
CHECK TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 check status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (38)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (37);
|
||||
OPTIMIZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 optimize status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_2 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE nt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = MyIsam
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (41)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (40)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (39)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ANALYZE TABLE nt_1
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (38)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (37)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; OPTIMIZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (36)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REPAIR TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (35)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (34)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (33)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE USER 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (32)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; GRANT ALL ON *.* TO 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (31)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; SET PASSWORD FOR 'user'@'localhost'='*D8DECEC305209EEFEC43008E1D420E1AA06B19E0'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (30)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (29)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME USER 'user'@'localhost' TO 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (28)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP USER 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (27)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (26)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER EVENT evt COMMENT 'evt'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (25)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP EVENT evt
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (24)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (23)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TRIGGER tr
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (22)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `fc`() RETURNS varchar(64) CHARSET latin1
|
||||
RETURN "fc"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (21)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER FUNCTION fc COMMENT 'fc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (20)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION fc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (19)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `pc`()
|
||||
UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (18)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER PROCEDURE pc COMMENT 'pc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (17)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE pc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (16)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (15)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (14)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP VIEW v
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (13)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE INDEX ix ON tt_1(ddl_case)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (12)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP INDEX ix ON tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (11)
|
||||
master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_xx (a int)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (10)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx ADD COLUMN (b int)
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (10)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (9)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx RENAME new_tt_xx
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (9)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (8)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (8)
|
||||
master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`new_tt_xx` /* generated by server */
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (7)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_xx (a int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (6)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx ADD COLUMN (b int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (5)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME TABLE tt_xx TO new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (4)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (3)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `tt_xx`,`new_tt_xx` /* generated by server */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # CREATE DATABASE db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
SET AUTOCOMMIT= 1;
|
||||
###################################################################################
|
||||
# CHECK CONSISTENCY
|
||||
###################################################################################
|
||||
connection slave;
|
||||
include/diff_tables.inc [master:tt_1,slave:tt_1]
|
||||
###################################################################################
|
||||
# CLEAN
|
||||
###################################################################################
|
||||
connection master;
|
||||
DROP TABLE tt_1;
|
||||
DROP TABLE tt_2;
|
||||
DROP TABLE nt_1;
|
||||
connection slave;
|
||||
include/rpl_end.inc
|
||||
|
|
|
@ -14,13 +14,125 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
|
|||
# CHECK IMPLICT COMMIT
|
||||
#########################################################################
|
||||
SET AUTOCOMMIT= 0;
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (43);
|
||||
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (42);
|
||||
DROP FUNCTION myfunc_int;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (41);
|
||||
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 preload_keys status OK
|
||||
INSERT INTO tt_1(ddl_case) VALUES (40);
|
||||
LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tt_1 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
test.tt_2 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
INSERT INTO tt_1(ddl_case) VALUES (39);
|
||||
ANALYZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 analyze status Table is already up to date
|
||||
INSERT INTO tt_1(ddl_case) VALUES (38);
|
||||
CHECK TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 check status OK
|
||||
INSERT INTO tt_1(ddl_case) VALUES (37);
|
||||
OPTIMIZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 optimize status Table is already up to date
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_2 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE nt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = MyIsam
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_2(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_2)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (43)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -28,15 +140,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (42);
|
||||
DROP FUNCTION myfunc_int;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (42)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -44,84 +147,24 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (41);
|
||||
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 preload_keys status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (41)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (40);
|
||||
LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tt_1 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
test.tt_2 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (40)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (39);
|
||||
ANALYZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 analyze status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (39)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ANALYZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (38);
|
||||
CHECK TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 check status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (38)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (37);
|
||||
OPTIMIZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 optimize status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (37)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -129,17 +172,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; OPTIMIZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (36)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -147,43 +179,16 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REPAIR TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (35)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (34)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (33)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -191,15 +196,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE USER 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (32)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -207,15 +203,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; GRANT ALL ON *.* TO 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (31)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -223,15 +210,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; SET PASSWORD FOR 'user'@'localhost'='*D8DECEC305209EEFEC43008E1D420E1AA06B19E0'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (30)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -239,15 +217,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (29)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -255,15 +224,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME USER 'user'@'localhost' TO 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (28)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -271,15 +231,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP USER 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (27)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -287,15 +238,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (26)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -303,15 +245,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER EVENT evt COMMENT 'evt'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (25)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -319,15 +252,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP EVENT evt
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (24)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -335,15 +259,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (23)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -352,15 +267,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TRIGGER tr
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (22)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -369,15 +275,6 @@ master-bin.000001 # Xid # # COMMIT /* XID */
|
|||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `fc`() RETURNS varchar(64) CHARSET latin1
|
||||
RETURN "fc"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (21)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -385,15 +282,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER FUNCTION fc COMMENT 'fc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (20)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -401,15 +289,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION fc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (19)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -418,15 +297,6 @@ master-bin.000001 # Xid # # COMMIT /* XID */
|
|||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `pc`()
|
||||
UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (18)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -434,15 +304,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER PROCEDURE pc COMMENT 'pc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (17)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -450,15 +311,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE pc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (16)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -466,15 +318,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (15)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -482,15 +325,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (14)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -498,15 +332,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP VIEW v
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (13)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -514,15 +339,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE INDEX ix ON tt_1(ddl_case)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (12)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -530,87 +346,29 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP INDEX ix ON tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (11)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (10)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (9)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (8)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (7)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_xx (a int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (6)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -618,15 +376,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx ADD COLUMN (b int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (5)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -634,15 +383,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME TABLE tt_xx TO new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (4)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -650,17 +390,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (3)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -668,15 +397,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `tt_xx`,`new_tt_xx` /* generated by server */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (2)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -684,15 +404,6 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # CREATE DATABASE db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Annotate_rows # # INSERT INTO tt_1(ddl_case) VALUES (1)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.tt_1)
|
||||
|
@ -700,13 +411,18 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
SET AUTOCOMMIT= 1;
|
||||
###################################################################################
|
||||
# CHECK CONSISTENCY
|
||||
###################################################################################
|
||||
connection slave;
|
||||
include/diff_tables.inc [master:tt_1,slave:tt_1]
|
||||
###################################################################################
|
||||
# CLEAN
|
||||
###################################################################################
|
||||
connection master;
|
||||
DROP TABLE tt_1;
|
||||
DROP TABLE tt_2;
|
||||
DROP TABLE nt_1;
|
||||
connection slave;
|
||||
include/rpl_end.inc
|
||||
|
|
|
@ -14,618 +14,330 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
|
|||
# CHECK IMPLICT COMMIT
|
||||
#########################################################################
|
||||
SET AUTOCOMMIT= 0;
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (43);
|
||||
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (42);
|
||||
DROP FUNCTION myfunc_int;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (41);
|
||||
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 preload_keys status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (41)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (40);
|
||||
LOAD INDEX INTO CACHE tt_1, tt_2 IGNORE LEAVES;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tt_1 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
test.tt_2 preload_keys note The storage engine for the table doesn't support preload_keys
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (40)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (39);
|
||||
ANALYZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 analyze status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (39)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ANALYZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (38);
|
||||
CHECK TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 check status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (38)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (37);
|
||||
OPTIMIZE TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 optimize status Table is already up to date
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_2 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = Innodb
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE nt_1 (ddl_case INT, PRIMARY KEY(ddl_case)) ENGINE = MyIsam
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2(ddl_case) VALUES(0)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (41)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (40)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (39)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ANALYZE TABLE nt_1
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (38)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (37)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; OPTIMIZE TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (36);
|
||||
REPAIR TABLE nt_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.nt_1 repair status OK
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (36)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REPAIR TABLE nt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (35);
|
||||
LOCK TABLES tt_1 WRITE;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (35)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (34);
|
||||
UNLOCK TABLES;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (34)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (33);
|
||||
CREATE USER 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (33)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE USER 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (32);
|
||||
GRANT ALL ON *.* TO 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (32)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; GRANT ALL ON *.* TO 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (31);
|
||||
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpass');
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (31)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; SET PASSWORD FOR 'user'@'localhost'='*D8DECEC305209EEFEC43008E1D420E1AA06B19E0'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (30);
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (30)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (29);
|
||||
RENAME USER 'user'@'localhost' TO 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (29)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME USER 'user'@'localhost' TO 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (28);
|
||||
DROP USER 'user_new'@'localhost';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (28)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP USER 'user_new'@'localhost'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (27);
|
||||
CREATE EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (27)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT evt ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (26);
|
||||
ALTER EVENT evt COMMENT 'evt';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (26)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER EVENT evt COMMENT 'evt'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (25);
|
||||
DROP EVENT evt;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (25)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP EVENT evt
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (24);
|
||||
CREATE TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (24)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr AFTER INSERT ON tt_1 FOR EACH ROW UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (23);
|
||||
DROP TRIGGER tr;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (23)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TRIGGER tr
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (22);
|
||||
CREATE FUNCTION fc () RETURNS VARCHAR(64) RETURN "fc";
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (22)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `fc`() RETURNS varchar(64) CHARSET latin1
|
||||
RETURN "fc"
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (21);
|
||||
ALTER FUNCTION fc COMMENT 'fc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (21)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER FUNCTION fc COMMENT 'fc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (20);
|
||||
DROP FUNCTION fc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (20)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP FUNCTION fc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (19);
|
||||
CREATE PROCEDURE pc () UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (19)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `pc`()
|
||||
UPDATE tt_2 SET ddl_case = ddl_case WHERE ddl_case= NEW.ddl_case
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (18);
|
||||
ALTER PROCEDURE pc COMMENT 'pc';
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (18)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER PROCEDURE pc COMMENT 'pc'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (17);
|
||||
DROP PROCEDURE pc;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (17)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE pc
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (16);
|
||||
CREATE VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (16)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (15);
|
||||
ALTER VIEW v AS SELECT * FROM tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (15)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS SELECT * FROM tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (14);
|
||||
DROP VIEW v;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (14)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP VIEW v
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (13);
|
||||
CREATE INDEX ix ON tt_1(ddl_case);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (13)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE INDEX ix ON tt_1(ddl_case)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (12);
|
||||
DROP INDEX ix ON tt_1;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (12)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP INDEX ix ON tt_1
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (11);
|
||||
CREATE TEMPORARY TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (11)
|
||||
master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_xx (a int)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (10);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (10)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx ADD COLUMN (b int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (9);
|
||||
ALTER TABLE tt_xx RENAME new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (9)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx RENAME new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (8);
|
||||
DROP TEMPORARY TABLE IF EXISTS new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (8)
|
||||
master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`new_tt_xx` /* generated by server */
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (7);
|
||||
CREATE TABLE tt_xx (a int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (7)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE tt_xx (a int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (6);
|
||||
ALTER TABLE tt_xx ADD COLUMN (b int);
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (6)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; ALTER TABLE tt_xx ADD COLUMN (b int)
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (5);
|
||||
RENAME TABLE tt_xx TO new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (5)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; RENAME TABLE tt_xx TO new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (4);
|
||||
TRUNCATE TABLE new_tt_xx;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (4)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE new_tt_xx
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (3);
|
||||
DROP TABLE IF EXISTS tt_xx, new_tt_xx;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt_xx'
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (3)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `tt_xx`,`new_tt_xx` /* generated by server */
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (2);
|
||||
CREATE DATABASE db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # CREATE DATABASE db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
INSERT INTO tt_1(ddl_case) VALUES (1);
|
||||
DROP DATABASE IF EXISTS db;
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db
|
||||
-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
|
||||
|
||||
SET AUTOCOMMIT= 1;
|
||||
###################################################################################
|
||||
# CHECK CONSISTENCY
|
||||
###################################################################################
|
||||
connection slave;
|
||||
include/diff_tables.inc [master:tt_1,slave:tt_1]
|
||||
###################################################################################
|
||||
# CLEAN
|
||||
###################################################################################
|
||||
connection master;
|
||||
DROP TABLE tt_1;
|
||||
DROP TABLE tt_2;
|
||||
DROP TABLE nt_1;
|
||||
connection slave;
|
||||
include/rpl_end.inc
|
||||
|
|
|
@ -18,3 +18,13 @@ x
|
|||
15
|
||||
22
|
||||
DROP TABLE t1;
|
||||
create table t1 (i int, v int as (i) virtual)
|
||||
partition by range columns (i)
|
||||
subpartition by hash(v) subpartitions 3 (
|
||||
partition p1 values less than (3),
|
||||
partition pn values less than (maxvalue));
|
||||
insert t1 set i= 0;
|
||||
set statement sql_mode= '' for update t1 set i= 1, v= 2;
|
||||
Warnings:
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' ignored
|
||||
drop table t1;
|
||||
|
|
|
@ -18,3 +18,15 @@ INSERT t1 (id, store_id) VALUES(1, 2), (3, 4), (3, 12), (4, 18);
|
|||
CREATE INDEX idx ON t1(x);
|
||||
SELECT x FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# MDEV-15626 Assertion on update virtual column in partitioned table
|
||||
#
|
||||
create table t1 (i int, v int as (i) virtual)
|
||||
partition by range columns (i)
|
||||
subpartition by hash(v) subpartitions 3 (
|
||||
partition p1 values less than (3),
|
||||
partition pn values less than (maxvalue));
|
||||
insert t1 set i= 0;
|
||||
set statement sql_mode= '' for update t1 set i= 1, v= 2;
|
||||
drop table t1;
|
||||
|
|
|
@ -748,7 +748,7 @@ my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key,
|
|||
}
|
||||
|
||||
|
||||
uchar *my_hash_element(HASH *hash, ulong idx)
|
||||
uchar *my_hash_element(HASH *hash, size_t idx)
|
||||
{
|
||||
if (idx < hash->records)
|
||||
return dynamic_element(&hash->array,idx,HASH_LINK*)->data;
|
||||
|
|
|
@ -8,7 +8,7 @@ Email domain: cam.ac.uk
|
|||
University of Cambridge Computing Service,
|
||||
Cambridge, England.
|
||||
|
||||
Copyright (c) 1997-2017 University of Cambridge
|
||||
Copyright (c) 1997-2018 University of Cambridge
|
||||
All rights reserved
|
||||
|
||||
|
||||
|
@ -19,7 +19,7 @@ Written by: Zoltan Herczeg
|
|||
Email local part: hzmester
|
||||
Emain domain: freemail.hu
|
||||
|
||||
Copyright(c) 2010-2017 Zoltan Herczeg
|
||||
Copyright(c) 2010-2018 Zoltan Herczeg
|
||||
All rights reserved.
|
||||
|
||||
|
||||
|
@ -30,7 +30,7 @@ Written by: Zoltan Herczeg
|
|||
Email local part: hzmester
|
||||
Emain domain: freemail.hu
|
||||
|
||||
Copyright(c) 2009-2017 Zoltan Herczeg
|
||||
Copyright(c) 2009-2018 Zoltan Herczeg
|
||||
All rights reserved.
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,59 @@ ChangeLog for PCRE
|
|||
Note that the PCRE 8.xx series (PCRE1) is now in a bugfix-only state. All
|
||||
development is happening in the PCRE2 10.xx series.
|
||||
|
||||
|
||||
Version 8.42 20-March-2018
|
||||
--------------------------
|
||||
|
||||
1. Fixed a MIPS issue in the JIT compiler reported by Joshua Kinard.
|
||||
|
||||
2. Fixed outdated real_pcre definitions in pcre.h.in (patch by Evgeny Kotkov).
|
||||
|
||||
3. pcregrep was truncating components of file names to 128 characters when
|
||||
processing files with the -r option, and also (some very odd code) truncating
|
||||
path names to 512 characters. There is now a check on the absolute length of
|
||||
full path file names, which may be up to 2047 characters long.
|
||||
|
||||
4. Using pcre_dfa_exec(), in UTF mode when UCP support was not defined, there
|
||||
was the possibility of a false positive match when caselessly matching a "not
|
||||
this character" item such as [^\x{1234}] (with a code point greater than 127)
|
||||
because the "other case" variable was not being initialized.
|
||||
|
||||
5. Although pcre_jit_exec checks whether the pattern is compiled
|
||||
in a given mode, it was also expected that at least one mode is available.
|
||||
This is fixed and pcre_jit_exec returns with PCRE_ERROR_JIT_BADOPTION
|
||||
when the pattern is not optimized by JIT at all.
|
||||
|
||||
6. The line number and related variables such as match counts in pcregrep
|
||||
were all int variables, causing overflow when files with more than 2147483647
|
||||
lines were processed (assuming 32-bit ints). They have all been changed to
|
||||
unsigned long ints.
|
||||
|
||||
7. If a backreference with a minimum repeat count of zero was first in a
|
||||
pattern, apart from assertions, an incorrect first matching character could be
|
||||
recorded. For example, for the pattern /(?=(a))\1?b/, "b" was incorrectly set
|
||||
as the first character of a match.
|
||||
|
||||
8. Fix out-of-bounds read for partial matching of /./ against an empty string
|
||||
when the newline type is CRLF.
|
||||
|
||||
9. When matching using the the REG_STARTEND feature of the POSIX API with a
|
||||
non-zero starting offset, unset capturing groups with lower numbers than a
|
||||
group that did capture something were not being correctly returned as "unset"
|
||||
(that is, with offset values of -1).
|
||||
|
||||
10. Matching the pattern /(*UTF)\C[^\v]+\x80/ against an 8-bit string
|
||||
containing multi-code-unit characters caused bad behaviour and possibly a
|
||||
crash. This issue was fixed for other kinds of repeat in release 8.37 by change
|
||||
38, but repeating character classes were overlooked.
|
||||
|
||||
11. A small fix to pcregrep to avoid compiler warnings for -Wformat-overflow=2.
|
||||
|
||||
12. Added --enable-jit=auto support to configure.ac.
|
||||
|
||||
13. Fix misleading error message in configure.ac.
|
||||
|
||||
|
||||
Version 8.41 05-July-2017
|
||||
-------------------------
|
||||
|
||||
|
|
316
pcre/INSTALL
316
pcre/INSTALL
|
@ -1,8 +1,8 @@
|
|||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
|
||||
Inc.
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
|
@ -12,97 +12,96 @@ without warranty of any kind.
|
|||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell command `./configure && make && make install'
|
||||
Briefly, the shell command './configure && make && make install'
|
||||
should configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the `README' file for
|
||||
more-detailed instructions are generic; see the 'README' file for
|
||||
instructions specific to this package. Some packages provide this
|
||||
`INSTALL' file but do not implement all of the features documented
|
||||
'INSTALL' file but do not implement all of the features documented
|
||||
below. The lack of an optional feature in a given package is not
|
||||
necessarily a bug. More recommendations for GNU packages can be found
|
||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
The 'configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
those values to create a 'Makefile' in each directory of the package.
|
||||
It may also create one or more '.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script 'config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
file 'config.log' containing compiler output (useful mainly for
|
||||
debugging 'configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.
|
||||
It can also use an optional file (typically called 'config.cache' and
|
||||
enabled with '--cache-file=config.cache' or simply '-C') that saves the
|
||||
results of its tests to speed up reconfiguring. Caching is disabled by
|
||||
default to prevent problems with accidental use of stale cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
to figure out how 'configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the 'README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
some point 'config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You need `configure.ac' if
|
||||
you want to change it or regenerate `configure' using a newer version
|
||||
of `autoconf'.
|
||||
The file 'configure.ac' (or 'configure.in') is used to create
|
||||
'configure' by a program called 'autoconf'. You need 'configure.ac' if
|
||||
you want to change it or regenerate 'configure' using a newer version of
|
||||
'autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system.
|
||||
1. 'cd' to the directory containing the package's source code and type
|
||||
'./configure' to configure the package for your system.
|
||||
|
||||
Running `configure' might take a while. While running, it prints
|
||||
Running 'configure' might take a while. While running, it prints
|
||||
some messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
2. Type 'make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
3. Optionally, type 'make check' to run any self-tests that come with
|
||||
the package, generally using the just-built uninstalled binaries.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
4. Type 'make install' to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the `make install' phase executed with root
|
||||
user, and only the 'make install' phase executed with root
|
||||
privileges.
|
||||
|
||||
5. Optionally, type `make installcheck' to repeat any self-tests, but
|
||||
5. Optionally, type 'make installcheck' to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior `make install' required
|
||||
regular user, particularly if the prior 'make install' required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
6. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
source code directory by typing 'make clean'. To also remove the
|
||||
files that 'configure' created (so you can compile the package for
|
||||
a different kind of computer), type 'make distclean'. There is
|
||||
also a 'make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
7. Often, you can also type `make uninstall' to remove the installed
|
||||
7. Often, you can also type 'make uninstall' to remove the installed
|
||||
files again. In practice, not all packages have tested that
|
||||
uninstallation works correctly, even though it is required by the
|
||||
GNU Coding Standards.
|
||||
|
||||
8. Some packages, particularly those that use Automake, provide `make
|
||||
8. Some packages, particularly those that use Automake, provide 'make
|
||||
distcheck', which can by used by developers to test that all other
|
||||
targets like `make install' and `make uninstall' work correctly.
|
||||
targets like 'make install' and 'make uninstall' work correctly.
|
||||
This target is generally not run by end users.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. Run `./configure --help'
|
||||
the 'configure' script does not know about. Run './configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
You can give 'configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here is
|
||||
an example:
|
||||
|
||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||
|
||||
|
@ -113,21 +112,21 @@ Compiling For Multiple Architectures
|
|||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you can use GNU `make'. `cd' to the
|
||||
own directory. To do this, you can use GNU 'make'. 'cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'. This
|
||||
is known as a "VPATH" build.
|
||||
the 'configure' script. 'configure' automatically checks for the source
|
||||
code in the directory that 'configure' is in and in '..'. This is known
|
||||
as a "VPATH" build.
|
||||
|
||||
With a non-GNU `make', it is safer to compile the package for one
|
||||
With a non-GNU 'make', it is safer to compile the package for one
|
||||
architecture at a time in the source code directory. After you have
|
||||
installed the package for one architecture, use `make distclean' before
|
||||
installed the package for one architecture, use 'make distclean' before
|
||||
reconfiguring for another architecture.
|
||||
|
||||
On MacOS X 10.5 and later systems, you can create libraries and
|
||||
executables that work on multiple system types--known as "fat" or
|
||||
"universal" binaries--by specifying multiple `-arch' options to the
|
||||
compiler but only a single `-arch' option to the preprocessor. Like
|
||||
"universal" binaries--by specifying multiple '-arch' options to the
|
||||
compiler but only a single '-arch' option to the preprocessor. Like
|
||||
this:
|
||||
|
||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
|
@ -136,105 +135,104 @@ this:
|
|||
|
||||
This is not guaranteed to produce working output in all cases, you
|
||||
may have to build one architecture at a time and combine the results
|
||||
using the `lipo' tool if you have problems.
|
||||
using the 'lipo' tool if you have problems.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX', where PREFIX must be an
|
||||
By default, 'make install' installs the package's commands under
|
||||
'/usr/local/bin', include files under '/usr/local/include', etc. You
|
||||
can specify an installation prefix other than '/usr/local' by giving
|
||||
'configure' the option '--prefix=PREFIX', where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the
|
||||
default for these options is expressed in terms of `${prefix}', so that
|
||||
specifying just `--prefix' will affect all of the other directory
|
||||
options like '--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run 'configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the default
|
||||
for these options is expressed in terms of '${prefix}', so that
|
||||
specifying just '--prefix' will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to `configure'; however, many packages provide one or
|
||||
correct locations to 'configure'; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
`make install' command line to change installation locations without
|
||||
'make install' command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, `make install
|
||||
affected directory. For example, 'make install
|
||||
prefix=/alternate/directory' will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
`${prefix}'. Any directories that were specified during `configure',
|
||||
but not in terms of `${prefix}', must each be overridden at install
|
||||
time for the entire installation to be relocated. The approach of
|
||||
makefile variable overrides for each directory variable is required by
|
||||
the GNU Coding Standards, and ideally causes no recompilation.
|
||||
However, some platforms have known limitations with the semantics of
|
||||
shared libraries that end up requiring recompilation when using this
|
||||
method, particularly noticeable in packages that use GNU Libtool.
|
||||
'${prefix}'. Any directories that were specified during 'configure',
|
||||
but not in terms of '${prefix}', must each be overridden at install time
|
||||
for the entire installation to be relocated. The approach of makefile
|
||||
variable overrides for each directory variable is required by the GNU
|
||||
Coding Standards, and ideally causes no recompilation. However, some
|
||||
platforms have known limitations with the semantics of shared libraries
|
||||
that end up requiring recompilation when using this method, particularly
|
||||
noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the `DESTDIR' variable. For
|
||||
example, `make install DESTDIR=/alternate/directory' will prepend
|
||||
`/alternate/directory' before all installation names. The approach of
|
||||
`DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
The second method involves providing the 'DESTDIR' variable. For
|
||||
example, 'make install DESTDIR=/alternate/directory' will prepend
|
||||
'/alternate/directory' before all installation names. The approach of
|
||||
'DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of `${prefix}'
|
||||
at `configure' time.
|
||||
when some directory options were not specified in terms of '${prefix}'
|
||||
at 'configure' time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
with an extra prefix or suffix on their names by giving 'configure' the
|
||||
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
Some packages pay attention to '--enable-FEATURE' options to
|
||||
'configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to '--with-PACKAGE' options, where PACKAGE
|
||||
is something like 'gnu-as' or 'x' (for the X Window System). The
|
||||
'README' should mention any '--enable-' and '--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
For packages that use the X Window System, 'configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
you can use the 'configure' options '--x-includes=DIR' and
|
||||
'--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of `make' will be. For these packages, running `./configure
|
||||
execution of 'make' will be. For these packages, running './configure
|
||||
--enable-silent-rules' sets the default to minimal output, which can be
|
||||
overridden with `make V=1'; while running `./configure
|
||||
overridden with 'make V=1'; while running './configure
|
||||
--disable-silent-rules' sets the default to verbose, which can be
|
||||
overridden with `make V=0'.
|
||||
overridden with 'make V=0'.
|
||||
|
||||
Particular systems
|
||||
==================
|
||||
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
||||
CC is not installed, it is recommended to use the following options in
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
|
||||
is not installed, it is recommended to use the following options in
|
||||
order to use an ANSI C compiler:
|
||||
|
||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||
|
||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||
|
||||
HP-UX `make' updates targets which have the same time stamps as
|
||||
their prerequisites, which makes it generally unusable when shipped
|
||||
generated files such as `configure' are involved. Use GNU `make'
|
||||
instead.
|
||||
HP-UX 'make' updates targets which have the same time stamps as their
|
||||
prerequisites, which makes it generally unusable when shipped generated
|
||||
files such as 'configure' are involved. Use GNU 'make' instead.
|
||||
|
||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
||||
a workaround. If GNU CC is not installed, it is therefore recommended
|
||||
to try
|
||||
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
|
||||
workaround. If GNU CC is not installed, it is therefore recommended to
|
||||
try
|
||||
|
||||
./configure CC="cc"
|
||||
|
||||
|
@ -242,26 +240,26 @@ and if that doesn't work, try
|
|||
|
||||
./configure CC="cc -nodtk"
|
||||
|
||||
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
|
||||
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
|
||||
directory contains several dysfunctional programs; working variants of
|
||||
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
|
||||
in your `PATH', put it _after_ `/usr/bin'.
|
||||
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
|
||||
in your 'PATH', put it _after_ '/usr/bin'.
|
||||
|
||||
On Haiku, software installed for all users goes in `/boot/common',
|
||||
not `/usr/local'. It is recommended to use the following options:
|
||||
On Haiku, software installed for all users goes in '/boot/common',
|
||||
not '/usr/local'. It is recommended to use the following options:
|
||||
|
||||
./configure --prefix=/boot/common
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out
|
||||
There may be some features 'configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, `configure' can figure that out, but if it prints
|
||||
_same_ architectures, 'configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
'--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as 'sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
|
@ -270,101 +268,101 @@ where SYSTEM can have one of these forms:
|
|||
OS
|
||||
KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
See the file 'config.sub' for the possible values of each field. If
|
||||
'config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
use the option '--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
eventually be run) with '--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
If you want to set default values for 'configure' scripts to share,
|
||||
you can create a site shell script called 'config.site' that gives
|
||||
default values for variables like 'CC', 'cache_file', and 'prefix'.
|
||||
'configure' looks for 'PREFIX/share/config.site' if it exists, then
|
||||
'PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
'CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all 'configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
environment passed to 'configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
them in the 'configure' command line, using 'VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
causes the specified 'gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
||||
an Autoconf limitation. Until the limitation is lifted, you can use
|
||||
this workaround:
|
||||
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
|
||||
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||
workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
`configure' Invocation
|
||||
'configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
'configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of all of the options to `configure', and exit.
|
||||
'--help'
|
||||
'-h'
|
||||
Print a summary of all of the options to 'configure', and exit.
|
||||
|
||||
`--help=short'
|
||||
`--help=recursive'
|
||||
'--help=short'
|
||||
'--help=recursive'
|
||||
Print a summary of the options unique to this package's
|
||||
`configure', and exit. The `short' variant lists options used
|
||||
only in the top level, while the `recursive' variant lists options
|
||||
also present in any nested packages.
|
||||
'configure', and exit. The 'short' variant lists options used only
|
||||
in the top level, while the 'recursive' variant lists options also
|
||||
present in any nested packages.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
'--version'
|
||||
'-V'
|
||||
Print the version of Autoconf used to generate the 'configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
'--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
traditionally 'config.cache'. FILE defaults to '/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
'--config-cache'
|
||||
'-C'
|
||||
Alias for '--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
'--quiet'
|
||||
'--silent'
|
||||
'-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
suppress all normal output, redirect it to '/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
'--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
'configure' can determine that directory automatically.
|
||||
|
||||
`--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names::
|
||||
for more details, including other options available for fine-tuning
|
||||
the installation locations.
|
||||
'--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names:: for
|
||||
more details, including other options available for fine-tuning the
|
||||
installation locations.
|
||||
|
||||
`--no-create'
|
||||
`-n'
|
||||
'--no-create'
|
||||
'-n'
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
'configure' also accepts some other, not widely useful, options. Run
|
||||
'configure --help' for more details.
|
||||
|
|
|
@ -25,7 +25,7 @@ Email domain: cam.ac.uk
|
|||
University of Cambridge Computing Service,
|
||||
Cambridge, England.
|
||||
|
||||
Copyright (c) 1997-2017 University of Cambridge
|
||||
Copyright (c) 1997-2018 University of Cambridge
|
||||
All rights reserved.
|
||||
|
||||
|
||||
|
@ -36,7 +36,7 @@ Written by: Zoltan Herczeg
|
|||
Email local part: hzmester
|
||||
Emain domain: freemail.hu
|
||||
|
||||
Copyright(c) 2010-2017 Zoltan Herczeg
|
||||
Copyright(c) 2010-2018 Zoltan Herczeg
|
||||
All rights reserved.
|
||||
|
||||
|
||||
|
@ -47,7 +47,7 @@ Written by: Zoltan Herczeg
|
|||
Email local part: hzmester
|
||||
Emain domain: freemail.hu
|
||||
|
||||
Copyright(c) 2009-2017 Zoltan Herczeg
|
||||
Copyright(c) 2009-2018 Zoltan Herczeg
|
||||
All rights reserved.
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
News about PCRE releases
|
||||
------------------------
|
||||
|
||||
Release 8.42 20-March-2018
|
||||
--------------------------
|
||||
|
||||
This is a bug-fix release.
|
||||
|
||||
|
||||
Release 8.41 13-June-2017
|
||||
-------------------------
|
||||
|
||||
|
|
|
@ -760,13 +760,14 @@ The character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and
|
|||
applications can be supported through UNIX System Services, and in such an
|
||||
environment PCRE can be built in the same way as in other systems. However, in
|
||||
native z/OS (without UNIX System Services) and in z/VM, special ports are
|
||||
required. For details, please see this web site:
|
||||
required. PCRE1 version 8.39 is available in file 882 on this site:
|
||||
|
||||
http://www.zaconsultants.net
|
||||
http://www.cbttape.org
|
||||
|
||||
You may download PCRE from WWW.CBTTAPE.ORG, file 882. Everything, source and
|
||||
executable, is in EBCDIC and native z/OS file formats and this is the
|
||||
recommended download site.
|
||||
Everything, source and executable, is in EBCDIC and native z/OS file formats.
|
||||
However, this software is not maintained and will not be upgraded. If you are
|
||||
new to PCRE you should be looking at PCRE2 (version 10.30 or later).
|
||||
|
||||
==========================
|
||||
Last Updated: 25 June 2015
|
||||
===============================
|
||||
Last Updated: 13 September 2017
|
||||
===============================
|
||||
|
|
|
@ -9,18 +9,18 @@ dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
|
|||
dnl be defined as -RC2, for example. For real releases, it should be empty.
|
||||
|
||||
m4_define(pcre_major, [8])
|
||||
m4_define(pcre_minor, [41])
|
||||
m4_define(pcre_minor, [42])
|
||||
m4_define(pcre_prerelease, [])
|
||||
m4_define(pcre_date, [2017-07-05])
|
||||
m4_define(pcre_date, [2018-03-20])
|
||||
|
||||
# NOTE: The CMakeLists.txt file searches for the above variables in the first
|
||||
# 50 lines of this file. Please update that if the variables above are moved.
|
||||
|
||||
# Libtool shared library interface versions (current:revision:age)
|
||||
m4_define(libpcre_version, [3:9:2])
|
||||
m4_define(libpcre16_version, [2:9:2])
|
||||
m4_define(libpcre32_version, [0:9:0])
|
||||
m4_define(libpcreposix_version, [0:5:0])
|
||||
m4_define(libpcre_version, [3:10:2])
|
||||
m4_define(libpcre16_version, [2:10:2])
|
||||
m4_define(libpcre32_version, [0:10:0])
|
||||
m4_define(libpcreposix_version, [0:6:0])
|
||||
m4_define(libpcrecpp_version, [0:1:0])
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
|
@ -155,6 +155,18 @@ AC_ARG_ENABLE(jit,
|
|||
[enable Just-In-Time compiling support]),
|
||||
, enable_jit=no)
|
||||
|
||||
# This code enables JIT if the hardware supports it.
|
||||
|
||||
if test "$enable_jit" = "auto"; then
|
||||
AC_LANG(C)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#define SLJIT_CONFIG_AUTO 1
|
||||
#include "sljit/sljitConfigInternal.h"
|
||||
#if (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
|
||||
#error unsupported
|
||||
#endif]])], enable_jit=yes, enable_jit=no)
|
||||
fi
|
||||
|
||||
# Handle --disable-pcregrep-jit (enabled by default)
|
||||
AC_ARG_ENABLE(pcregrep-jit,
|
||||
AS_HELP_STRING([--disable-pcregrep-jit],
|
||||
|
@ -469,7 +481,7 @@ pcre_have_type_traits="0"
|
|||
pcre_have_bits_type_traits="0"
|
||||
|
||||
if test "x$enable_cpp" = "xyes" -a -z "$CXX"; then
|
||||
AC_MSG_ERROR([You need a C++ compiler for C++ support.])
|
||||
AC_MSG_ERROR([Invalid C++ compiler or C++ compiler flags])
|
||||
fi
|
||||
|
||||
if test "x$enable_cpp" = "xyes" -a -n "$CXX"
|
||||
|
|
|
@ -760,13 +760,14 @@ The character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and
|
|||
applications can be supported through UNIX System Services, and in such an
|
||||
environment PCRE can be built in the same way as in other systems. However, in
|
||||
native z/OS (without UNIX System Services) and in z/VM, special ports are
|
||||
required. For details, please see this web site:
|
||||
required. PCRE1 version 8.39 is available in file 882 on this site:
|
||||
|
||||
http://www.zaconsultants.net
|
||||
http://www.cbttape.org
|
||||
|
||||
You may download PCRE from WWW.CBTTAPE.ORG, file 882. Everything, source and
|
||||
executable, is in EBCDIC and native z/OS file formats and this is the
|
||||
recommended download site.
|
||||
Everything, source and executable, is in EBCDIC and native z/OS file formats.
|
||||
However, this software is not maintained and will not be upgraded. If you are
|
||||
new to PCRE you should be looking at PCRE2 (version 10.30 or later).
|
||||
|
||||
==========================
|
||||
Last Updated: 25 June 2015
|
||||
===============================
|
||||
Last Updated: 13 September 2017
|
||||
===============================
|
||||
|
|
|
@ -321,11 +321,11 @@ these bits, just add new ones on the end, in order to remain compatible. */
|
|||
|
||||
/* Types */
|
||||
|
||||
struct real_pcre; /* declaration; the definition is private */
|
||||
typedef struct real_pcre pcre;
|
||||
struct real_pcre8_or_16; /* declaration; the definition is private */
|
||||
typedef struct real_pcre8_or_16 pcre;
|
||||
|
||||
struct real_pcre16; /* declaration; the definition is private */
|
||||
typedef struct real_pcre16 pcre16;
|
||||
struct real_pcre8_or_16; /* declaration; the definition is private */
|
||||
typedef struct real_pcre8_or_16 pcre16;
|
||||
|
||||
struct real_pcre32; /* declaration; the definition is private */
|
||||
typedef struct real_pcre32 pcre32;
|
||||
|
|
|
@ -8063,7 +8063,7 @@ for (;; ptr++)
|
|||
single group (i.e. not to a duplicated name. */
|
||||
|
||||
HANDLE_REFERENCE:
|
||||
if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
|
||||
if (firstcharflags == REQ_UNSET) zerofirstcharflags = firstcharflags = REQ_NONE;
|
||||
previous = code;
|
||||
item_hwm_offset = cd->hwm - cd->start_workspace;
|
||||
*code++ = ((options & PCRE_CASELESS) != 0)? OP_REFI : OP_REF;
|
||||
|
|
|
@ -2287,12 +2287,14 @@ for (;;)
|
|||
case OP_NOTI:
|
||||
if (clen > 0)
|
||||
{
|
||||
unsigned int otherd;
|
||||
pcre_uint32 otherd;
|
||||
#ifdef SUPPORT_UTF
|
||||
if (utf && d >= 128)
|
||||
{
|
||||
#ifdef SUPPORT_UCP
|
||||
otherd = UCD_OTHERCASE(d);
|
||||
#else
|
||||
otherd = d;
|
||||
#endif /* SUPPORT_UCP */
|
||||
}
|
||||
else
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
and semantics are as close as possible to those of the Perl 5 language.
|
||||
|
||||
Written by Philip Hazel
|
||||
Copyright (c) 1997-2014 University of Cambridge
|
||||
Copyright (c) 1997-2018 University of Cambridge
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -2313,7 +2313,7 @@ for (;;)
|
|||
case OP_ANY:
|
||||
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH);
|
||||
if (md->partial != 0 &&
|
||||
eptr + 1 >= md->end_subject &&
|
||||
eptr == md->end_subject - 1 &&
|
||||
NLBLOCK->nltype == NLTYPE_FIXED &&
|
||||
NLBLOCK->nllen == 2 &&
|
||||
UCHAR21TEST(eptr) == NLBLOCK->nl[0])
|
||||
|
@ -3061,7 +3061,7 @@ for (;;)
|
|||
{
|
||||
RMATCH(eptr, ecode, offset_top, md, eptrb, RM18);
|
||||
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
||||
if (eptr-- == pp) break; /* Stop if tried at original pos */
|
||||
if (eptr-- <= pp) break; /* Stop if tried at original pos */
|
||||
BACKCHAR(eptr);
|
||||
}
|
||||
}
|
||||
|
@ -3218,7 +3218,7 @@ for (;;)
|
|||
{
|
||||
RMATCH(eptr, ecode, offset_top, md, eptrb, RM21);
|
||||
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
||||
if (eptr-- == pp) break; /* Stop if tried at original pos */
|
||||
if (eptr-- <= pp) break; /* Stop if tried at original pos */
|
||||
#ifdef SUPPORT_UTF
|
||||
if (utf) BACKCHAR(eptr);
|
||||
#endif
|
||||
|
|
|
@ -164,7 +164,6 @@ typedef struct jit_arguments {
|
|||
const pcre_uchar *begin;
|
||||
const pcre_uchar *end;
|
||||
int *offsets;
|
||||
pcre_uchar *uchar_ptr;
|
||||
pcre_uchar *mark_ptr;
|
||||
void *callout_data;
|
||||
/* Everything else after. */
|
||||
|
@ -214,7 +213,7 @@ enum control_types {
|
|||
type_then_trap = 1
|
||||
};
|
||||
|
||||
typedef int (SLJIT_CALL *jit_function)(jit_arguments *args);
|
||||
typedef int (SLJIT_FUNC *jit_function)(jit_arguments *args);
|
||||
|
||||
/* The following structure is the key data type for the recursive
|
||||
code generator. It is allocated by compile_matchingpath, and contains
|
||||
|
@ -489,9 +488,24 @@ typedef struct compare_context {
|
|||
/* Used for accessing the elements of the stack. */
|
||||
#define STACK(i) ((i) * (int)sizeof(sljit_sw))
|
||||
|
||||
#ifdef SLJIT_PREF_SHIFT_REG
|
||||
#if SLJIT_PREF_SHIFT_REG == SLJIT_R2
|
||||
/* Nothing. */
|
||||
#elif SLJIT_PREF_SHIFT_REG == SLJIT_R3
|
||||
#define SHIFT_REG_IS_R3
|
||||
#else
|
||||
#error "Unsupported shift register"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define TMP1 SLJIT_R0
|
||||
#ifdef SHIFT_REG_IS_R3
|
||||
#define TMP2 SLJIT_R3
|
||||
#define TMP3 SLJIT_R2
|
||||
#else
|
||||
#define TMP2 SLJIT_R2
|
||||
#define TMP3 SLJIT_R3
|
||||
#endif
|
||||
#define STR_PTR SLJIT_S0
|
||||
#define STR_END SLJIT_S1
|
||||
#define STACK_TOP SLJIT_R1
|
||||
|
@ -520,13 +534,10 @@ the start pointers when the end of the capturing group has not yet reached. */
|
|||
|
||||
#if defined COMPILE_PCRE8
|
||||
#define MOV_UCHAR SLJIT_MOV_U8
|
||||
#define MOVU_UCHAR SLJIT_MOVU_U8
|
||||
#elif defined COMPILE_PCRE16
|
||||
#define MOV_UCHAR SLJIT_MOV_U16
|
||||
#define MOVU_UCHAR SLJIT_MOVU_U16
|
||||
#elif defined COMPILE_PCRE32
|
||||
#define MOV_UCHAR SLJIT_MOV_U32
|
||||
#define MOVU_UCHAR SLJIT_MOVU_U32
|
||||
#else
|
||||
#error Unsupported compiling mode
|
||||
#endif
|
||||
|
@ -2383,12 +2394,25 @@ if (length < 8)
|
|||
}
|
||||
else
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START);
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw), SLJIT_R0, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
if (sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_STORE | SLJIT_MEM_PRE, SLJIT_R0, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw)) == SLJIT_SUCCESS)
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START);
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);
|
||||
loop = LABEL();
|
||||
sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_STORE | SLJIT_MEM_PRE, SLJIT_R0, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw));
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
}
|
||||
else
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START + sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R1), 0, SLJIT_R0, 0);
|
||||
OP2(SLJIT_ADD, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, sizeof(sljit_sw));
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2421,12 +2445,25 @@ if (length < 8)
|
|||
}
|
||||
else
|
||||
{
|
||||
GET_LOCAL_BASE(TMP2, 0, OVECTOR_START + sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2);
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOVU, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
if (sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_STORE | SLJIT_MEM_PRE, TMP1, SLJIT_MEM1(TMP2), sizeof(sljit_sw)) == SLJIT_SUCCESS)
|
||||
{
|
||||
GET_LOCAL_BASE(TMP2, 0, OVECTOR_START + sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2);
|
||||
loop = LABEL();
|
||||
sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_STORE | SLJIT_MEM_PRE, TMP1, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
}
|
||||
else
|
||||
{
|
||||
GET_LOCAL_BASE(TMP2, 0, OVECTOR_START + 2 * sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2);
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, TMP1, 0);
|
||||
OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, sizeof(sljit_sw));
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
}
|
||||
}
|
||||
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, ARGUMENTS, 0);
|
||||
|
@ -2436,10 +2473,10 @@ if (common->control_head_ptr != 0)
|
|||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(jit_arguments, stack));
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(struct sljit_stack, base));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(struct sljit_stack, end));
|
||||
}
|
||||
|
||||
static sljit_sw SLJIT_CALL do_search_mark(sljit_sw *current, const pcre_uchar *skip_arg)
|
||||
static sljit_sw SLJIT_FUNC do_search_mark(sljit_sw *current, const pcre_uchar *skip_arg)
|
||||
{
|
||||
while (current != NULL)
|
||||
{
|
||||
|
@ -2460,7 +2497,7 @@ while (current != NULL)
|
|||
SLJIT_ASSERT(current[0] == 0 || current < (sljit_sw*)current[0]);
|
||||
current = (sljit_sw*)current[0];
|
||||
}
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SLJIT_INLINE void copy_ovector(compiler_common *common, int topbracket)
|
||||
|
@ -2468,6 +2505,7 @@ static SLJIT_INLINE void copy_ovector(compiler_common *common, int topbracket)
|
|||
DEFINE_COMPILER;
|
||||
struct sljit_label *loop;
|
||||
struct sljit_jump *early_quit;
|
||||
BOOL has_pre;
|
||||
|
||||
/* At this point we can freely use all registers. */
|
||||
OP1(SLJIT_MOV, SLJIT_S2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));
|
||||
|
@ -2481,17 +2519,30 @@ if (common->mark_ptr != 0)
|
|||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, mark_ptr), SLJIT_R2, 0);
|
||||
OP2(SLJIT_SUB, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, offsets), SLJIT_IMM, sizeof(int));
|
||||
OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, begin));
|
||||
GET_LOCAL_BASE(SLJIT_S0, 0, OVECTOR_START);
|
||||
|
||||
has_pre = sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, SLJIT_S1, SLJIT_MEM1(SLJIT_S0), sizeof(sljit_sw)) == SLJIT_SUCCESS;
|
||||
GET_LOCAL_BASE(SLJIT_S0, 0, OVECTOR_START - (has_pre ? sizeof(sljit_sw) : 0));
|
||||
|
||||
/* Unlikely, but possible */
|
||||
early_quit = CMP(SLJIT_EQUAL, SLJIT_R1, 0, SLJIT_IMM, 0);
|
||||
loop = LABEL();
|
||||
OP2(SLJIT_SUB, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_S0), 0, SLJIT_R0, 0);
|
||||
OP2(SLJIT_ADD, SLJIT_S0, 0, SLJIT_S0, 0, SLJIT_IMM, sizeof(sljit_sw));
|
||||
|
||||
if (has_pre)
|
||||
sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_PRE, SLJIT_S1, SLJIT_MEM1(SLJIT_S0), sizeof(sljit_sw));
|
||||
else
|
||||
{
|
||||
OP1(SLJIT_MOV, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_S0), 0);
|
||||
OP2(SLJIT_ADD, SLJIT_S0, 0, SLJIT_S0, 0, SLJIT_IMM, sizeof(sljit_sw));
|
||||
}
|
||||
|
||||
OP2(SLJIT_ADD, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, sizeof(int));
|
||||
OP2(SLJIT_SUB, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_R0, 0);
|
||||
/* Copy the integer value to the output buffer */
|
||||
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
|
||||
OP2(SLJIT_ASHR, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_IMM, UCHAR_SHIFT);
|
||||
#endif
|
||||
OP1(SLJIT_MOVU_S32, SLJIT_MEM1(SLJIT_R2), sizeof(int), SLJIT_S1, 0);
|
||||
|
||||
OP1(SLJIT_MOV_S32, SLJIT_MEM1(SLJIT_R2), 0, SLJIT_S1, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
|
||||
JUMPTO(SLJIT_NOT_ZERO, loop);
|
||||
JUMPHERE(early_quit);
|
||||
|
@ -2499,14 +2550,29 @@ JUMPHERE(early_quit);
|
|||
/* Calculate the return value, which is the maximum ovector value. */
|
||||
if (topbracket > 1)
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);
|
||||
if (sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, SLJIT_R2, SLJIT_MEM1(SLJIT_R0), -(2 * (sljit_sw)sizeof(sljit_sw))) == SLJIT_SUCCESS)
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);
|
||||
|
||||
/* OVECTOR(0) is never equal to SLJIT_S2. */
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOVU, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), -(2 * (sljit_sw)sizeof(sljit_sw)));
|
||||
OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
|
||||
CMPTO(SLJIT_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);
|
||||
/* OVECTOR(0) is never equal to SLJIT_S2. */
|
||||
loop = LABEL();
|
||||
sljit_emit_mem(compiler, SLJIT_MOV | SLJIT_MEM_PRE, SLJIT_R2, SLJIT_MEM1(SLJIT_R0), -(2 * (sljit_sw)sizeof(sljit_sw)));
|
||||
OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
|
||||
CMPTO(SLJIT_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);
|
||||
}
|
||||
else
|
||||
{
|
||||
GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + (topbracket - 1) * 2 * sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);
|
||||
|
||||
/* OVECTOR(0) is never equal to SLJIT_S2. */
|
||||
loop = LABEL();
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), 0);
|
||||
OP2(SLJIT_SUB, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 2 * (sljit_sw)sizeof(sljit_sw));
|
||||
OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
|
||||
CMPTO(SLJIT_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);
|
||||
}
|
||||
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_R1, 0);
|
||||
}
|
||||
else
|
||||
|
@ -5167,93 +5233,190 @@ OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL);
|
|||
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
|
||||
}
|
||||
|
||||
#define CHAR1 STR_END
|
||||
#define CHAR2 STACK_TOP
|
||||
|
||||
static void do_casefulcmp(compiler_common *common)
|
||||
{
|
||||
DEFINE_COMPILER;
|
||||
struct sljit_jump *jump;
|
||||
struct sljit_label *label;
|
||||
int char1_reg;
|
||||
int char2_reg;
|
||||
|
||||
sljit_emit_fast_enter(compiler, RETURN_ADDR, 0);
|
||||
if (sljit_get_register_index(TMP3) < 0)
|
||||
{
|
||||
char1_reg = STR_END;
|
||||
char2_reg = STACK_TOP;
|
||||
}
|
||||
else
|
||||
{
|
||||
char1_reg = TMP3;
|
||||
char2_reg = RETURN_ADDR;
|
||||
}
|
||||
|
||||
sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
|
||||
OP1(SLJIT_MOV, TMP3, 0, CHAR1, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, CHAR2, 0);
|
||||
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
|
||||
label = LABEL();
|
||||
OP1(MOVU_UCHAR, CHAR1, 0, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
OP1(MOVU_UCHAR, CHAR2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
jump = CMP(SLJIT_NOT_EQUAL, CHAR1, 0, CHAR2, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
JUMPTO(SLJIT_NOT_ZERO, label);
|
||||
if (char1_reg == STR_END)
|
||||
{
|
||||
OP1(SLJIT_MOV, TMP3, 0, char1_reg, 0);
|
||||
OP1(SLJIT_MOV, RETURN_ADDR, 0, char2_reg, 0);
|
||||
}
|
||||
|
||||
JUMPHERE(jump);
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP1(SLJIT_MOV, CHAR1, 0, TMP3, 0);
|
||||
OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
|
||||
if (sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)
|
||||
{
|
||||
label = LABEL();
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_POST, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
JUMPTO(SLJIT_NOT_ZERO, label);
|
||||
|
||||
JUMPHERE(jump);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
}
|
||||
else if (sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)
|
||||
{
|
||||
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
|
||||
label = LABEL();
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
JUMPTO(SLJIT_NOT_ZERO, label);
|
||||
|
||||
JUMPHERE(jump);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
label = LABEL();
|
||||
OP1(MOV_UCHAR, char1_reg, 0, SLJIT_MEM1(TMP1), 0);
|
||||
OP1(MOV_UCHAR, char2_reg, 0, SLJIT_MEM1(STR_PTR), 0);
|
||||
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
JUMPTO(SLJIT_NOT_ZERO, label);
|
||||
|
||||
JUMPHERE(jump);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
}
|
||||
|
||||
if (char1_reg == STR_END)
|
||||
{
|
||||
OP1(SLJIT_MOV, char1_reg, 0, TMP3, 0);
|
||||
OP1(SLJIT_MOV, char2_reg, 0, RETURN_ADDR, 0);
|
||||
}
|
||||
|
||||
sljit_emit_fast_return(compiler, TMP1, 0);
|
||||
}
|
||||
|
||||
#define LCC_TABLE STACK_LIMIT
|
||||
|
||||
static void do_caselesscmp(compiler_common *common)
|
||||
{
|
||||
DEFINE_COMPILER;
|
||||
struct sljit_jump *jump;
|
||||
struct sljit_label *label;
|
||||
int char1_reg = STR_END;
|
||||
int char2_reg;
|
||||
int lcc_table;
|
||||
int opt_type = 0;
|
||||
|
||||
sljit_emit_fast_enter(compiler, RETURN_ADDR, 0);
|
||||
if (sljit_get_register_index(TMP3) < 0)
|
||||
{
|
||||
char2_reg = STACK_TOP;
|
||||
lcc_table = STACK_LIMIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
char2_reg = RETURN_ADDR;
|
||||
lcc_table = TMP3;
|
||||
}
|
||||
|
||||
if (sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)
|
||||
opt_type = 1;
|
||||
else if (sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)
|
||||
opt_type = 2;
|
||||
|
||||
sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
|
||||
|
||||
OP1(SLJIT_MOV, TMP3, 0, LCC_TABLE, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, CHAR1, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, CHAR2, 0);
|
||||
OP1(SLJIT_MOV, LCC_TABLE, 0, SLJIT_IMM, common->lcc);
|
||||
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, char1_reg, 0);
|
||||
|
||||
if (char2_reg == STACK_TOP)
|
||||
{
|
||||
OP1(SLJIT_MOV, TMP3, 0, char2_reg, 0);
|
||||
OP1(SLJIT_MOV, RETURN_ADDR, 0, lcc_table, 0);
|
||||
}
|
||||
|
||||
OP1(SLJIT_MOV, lcc_table, 0, SLJIT_IMM, common->lcc);
|
||||
|
||||
if (opt_type == 1)
|
||||
{
|
||||
label = LABEL();
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_POST, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
}
|
||||
else if (opt_type == 2)
|
||||
{
|
||||
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
|
||||
label = LABEL();
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
sljit_emit_mem(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
label = LABEL();
|
||||
OP1(MOV_UCHAR, char1_reg, 0, SLJIT_MEM1(TMP1), 0);
|
||||
OP1(MOV_UCHAR, char2_reg, 0, SLJIT_MEM1(STR_PTR), 0);
|
||||
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
}
|
||||
|
||||
label = LABEL();
|
||||
OP1(MOVU_UCHAR, CHAR1, 0, SLJIT_MEM1(TMP1), IN_UCHARS(1));
|
||||
OP1(MOVU_UCHAR, CHAR2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));
|
||||
#ifndef COMPILE_PCRE8
|
||||
jump = CMP(SLJIT_GREATER, CHAR1, 0, SLJIT_IMM, 255);
|
||||
jump = CMP(SLJIT_GREATER, char1_reg, 0, SLJIT_IMM, 255);
|
||||
#endif
|
||||
OP1(SLJIT_MOV_U8, CHAR1, 0, SLJIT_MEM2(LCC_TABLE, CHAR1), 0);
|
||||
OP1(SLJIT_MOV_U8, char1_reg, 0, SLJIT_MEM2(lcc_table, char1_reg), 0);
|
||||
#ifndef COMPILE_PCRE8
|
||||
JUMPHERE(jump);
|
||||
jump = CMP(SLJIT_GREATER, CHAR2, 0, SLJIT_IMM, 255);
|
||||
jump = CMP(SLJIT_GREATER, char2_reg, 0, SLJIT_IMM, 255);
|
||||
#endif
|
||||
OP1(SLJIT_MOV_U8, CHAR2, 0, SLJIT_MEM2(LCC_TABLE, CHAR2), 0);
|
||||
OP1(SLJIT_MOV_U8, char2_reg, 0, SLJIT_MEM2(lcc_table, char2_reg), 0);
|
||||
#ifndef COMPILE_PCRE8
|
||||
JUMPHERE(jump);
|
||||
#endif
|
||||
jump = CMP(SLJIT_NOT_EQUAL, CHAR1, 0, CHAR2, 0);
|
||||
|
||||
if (opt_type == 0)
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
|
||||
jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
JUMPTO(SLJIT_NOT_ZERO, label);
|
||||
|
||||
JUMPHERE(jump);
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
OP1(SLJIT_MOV, LCC_TABLE, 0, TMP3, 0);
|
||||
OP1(SLJIT_MOV, CHAR1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
|
||||
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
|
||||
}
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
|
||||
#undef LCC_TABLE
|
||||
#undef CHAR1
|
||||
#undef CHAR2
|
||||
if (opt_type == 2)
|
||||
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
|
||||
|
||||
if (char2_reg == STACK_TOP)
|
||||
{
|
||||
OP1(SLJIT_MOV, char2_reg, 0, TMP3, 0);
|
||||
OP1(SLJIT_MOV, lcc_table, 0, RETURN_ADDR, 0);
|
||||
}
|
||||
|
||||
OP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
|
||||
sljit_emit_fast_return(compiler, TMP1, 0);
|
||||
}
|
||||
|
||||
#if defined SUPPORT_UTF && defined SUPPORT_UCP
|
||||
|
||||
static const pcre_uchar * SLJIT_CALL do_utf_caselesscmp(pcre_uchar *src1, jit_arguments *args, pcre_uchar *end1)
|
||||
static const pcre_uchar * SLJIT_FUNC do_utf_caselesscmp(pcre_uchar *src1, pcre_uchar *src2, pcre_uchar *end1, pcre_uchar *end2)
|
||||
{
|
||||
/* This function would be ineffective to do in JIT level. */
|
||||
sljit_u32 c1, c2;
|
||||
const pcre_uchar *src2 = args->uchar_ptr;
|
||||
const pcre_uchar *end2 = args->end;
|
||||
const ucd_record *ur;
|
||||
const sljit_u32 *pp;
|
||||
|
||||
|
@ -6776,32 +6939,37 @@ else
|
|||
#if defined SUPPORT_UTF && defined SUPPORT_UCP
|
||||
if (common->utf && *cc == OP_REFI)
|
||||
{
|
||||
SLJIT_ASSERT(TMP1 == SLJIT_R0 && STACK_TOP == SLJIT_R1 && TMP2 == SLJIT_R2);
|
||||
SLJIT_ASSERT(TMP1 == SLJIT_R0 && STACK_TOP == SLJIT_R1);
|
||||
if (ref)
|
||||
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
|
||||
else
|
||||
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
|
||||
OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
|
||||
|
||||
if (withchecks)
|
||||
jump = CMP(SLJIT_EQUAL, TMP1, 0, TMP2, 0);
|
||||
jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_R2, 0);
|
||||
|
||||
/* Needed to save important temporary registers. */
|
||||
/* No free saved registers so save data on stack. */
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, ARGUMENTS, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(jit_arguments, uchar_ptr), STR_PTR, 0);
|
||||
sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_utf_caselesscmp));
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, STR_PTR, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_R3, 0, STR_END, 0);
|
||||
sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_utf_caselesscmp));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);
|
||||
|
||||
if (common->mode == JIT_COMPILE)
|
||||
add_jump(compiler, backtracks, CMP(SLJIT_LESS_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1));
|
||||
else
|
||||
{
|
||||
add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0));
|
||||
nopartial = CMP(SLJIT_NOT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1);
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1);
|
||||
|
||||
add_jump(compiler, backtracks, JUMP(SLJIT_LESS));
|
||||
|
||||
nopartial = JUMP(SLJIT_NOT_EQUAL);
|
||||
OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0);
|
||||
check_partial(common, FALSE);
|
||||
add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));
|
||||
JUMPHERE(nopartial);
|
||||
}
|
||||
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);
|
||||
}
|
||||
else
|
||||
#endif /* SUPPORT_UTF && SUPPORT_UCP */
|
||||
|
@ -7125,7 +7293,7 @@ add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IM
|
|||
return cc + 1 + LINK_SIZE;
|
||||
}
|
||||
|
||||
static int SLJIT_CALL do_callout(struct jit_arguments *arguments, PUBL(callout_block) *callout_block, pcre_uchar **jit_ovector)
|
||||
static sljit_s32 SLJIT_FUNC do_callout(struct jit_arguments *arguments, PUBL(callout_block) *callout_block, pcre_uchar **jit_ovector)
|
||||
{
|
||||
const pcre_uchar *begin = arguments->begin;
|
||||
int *offset_vector = arguments->offsets;
|
||||
|
@ -7207,18 +7375,17 @@ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
|
|||
/* SLJIT_R0 = arguments */
|
||||
OP1(SLJIT_MOV, SLJIT_R1, 0, STACK_TOP, 0);
|
||||
GET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START);
|
||||
sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout));
|
||||
OP1(SLJIT_MOV_S32, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0);
|
||||
sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(S32) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
free_stack(common, CALLOUT_ARG_SIZE / sizeof(sljit_sw));
|
||||
|
||||
/* Check return value. */
|
||||
OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
|
||||
add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER));
|
||||
OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
|
||||
add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER32));
|
||||
if (common->forced_quit_label == NULL)
|
||||
add_jump(compiler, &common->forced_quit, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */);
|
||||
add_jump(compiler, &common->forced_quit, JUMP(SLJIT_NOT_EQUAL32) /* SIG_LESS */);
|
||||
else
|
||||
JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->forced_quit_label);
|
||||
JUMPTO(SLJIT_NOT_EQUAL32 /* SIG_LESS */, common->forced_quit_label);
|
||||
return cc + 2 + 2 * LINK_SIZE;
|
||||
}
|
||||
|
||||
|
@ -10439,11 +10606,11 @@ if (opcode == OP_SKIP_ARG)
|
|||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, (sljit_sw)(current->cc + 2));
|
||||
sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_search_mark));
|
||||
sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_search_mark));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
|
||||
OP1(SLJIT_MOV, STR_PTR, 0, TMP1, 0);
|
||||
add_jump(compiler, &common->reset_match, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, -1));
|
||||
add_jump(compiler, &common->reset_match, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -11031,7 +11198,7 @@ if (!compiler)
|
|||
common->compiler = compiler;
|
||||
|
||||
/* Main pcre_jit_exec entry. */
|
||||
sljit_emit_enter(compiler, 0, 1, 5, 5, 0, 0, private_data_size);
|
||||
sljit_emit_enter(compiler, 0, SLJIT_ARG1(SW), 5, 5, 0, 0, private_data_size);
|
||||
|
||||
/* Register init. */
|
||||
reset_ovector(common, (re->top_bracket + 1) * 2);
|
||||
|
@ -11044,8 +11211,8 @@ OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str))
|
|||
OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, end));
|
||||
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
|
||||
OP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, limit_match));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, base));
|
||||
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, limit));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, end));
|
||||
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, start));
|
||||
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH, TMP1, 0);
|
||||
|
||||
|
@ -11251,20 +11418,22 @@ common->quit_label = quit_label;
|
|||
set_jumps(common->stackalloc, LABEL());
|
||||
/* RETURN_ADDR is not a saved register. */
|
||||
sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP2, 0);
|
||||
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, top), STACK_TOP, 0);
|
||||
OP2(SLJIT_SUB, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, limit), SLJIT_IMM, STACK_GROWTH_RATE);
|
||||
|
||||
sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize));
|
||||
jump = CMP(SLJIT_NOT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
|
||||
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, top));
|
||||
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, limit));
|
||||
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
|
||||
sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
SLJIT_ASSERT(TMP1 == SLJIT_R0 && STACK_TOP == SLJIT_R1);
|
||||
|
||||
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, STACK_TOP, 0);
|
||||
OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0);
|
||||
OP2(SLJIT_SUB, SLJIT_R1, 0, STACK_LIMIT, 0, SLJIT_IMM, STACK_GROWTH_RATE);
|
||||
OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, stack));
|
||||
OP1(SLJIT_MOV, STACK_LIMIT, 0, TMP2, 0);
|
||||
|
||||
sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize));
|
||||
jump = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
|
||||
OP1(SLJIT_MOV, TMP2, 0, STACK_LIMIT, 0);
|
||||
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_RETURN_REG, 0);
|
||||
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
|
||||
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
|
||||
sljit_emit_fast_return(compiler, TMP1, 0);
|
||||
|
||||
/* Allocation failed. */
|
||||
JUMPHERE(jump);
|
||||
|
@ -11409,9 +11578,9 @@ union {
|
|||
sljit_u8 local_space[MACHINE_STACK_SIZE];
|
||||
struct sljit_stack local_stack;
|
||||
|
||||
local_stack.max_limit = local_space;
|
||||
local_stack.limit = local_space;
|
||||
local_stack.base = local_space + MACHINE_STACK_SIZE;
|
||||
local_stack.min_start = local_space;
|
||||
local_stack.start = local_space;
|
||||
local_stack.end = local_space + MACHINE_STACK_SIZE;
|
||||
local_stack.top = local_space + MACHINE_STACK_SIZE;
|
||||
arguments->stack = &local_stack;
|
||||
convert_executable_func.executable_func = executable_func;
|
||||
|
@ -11529,7 +11698,7 @@ if ((options & PCRE_PARTIAL_HARD) != 0)
|
|||
else if ((options & PCRE_PARTIAL_SOFT) != 0)
|
||||
mode = JIT_PARTIAL_SOFT_COMPILE;
|
||||
|
||||
if (functions->executable_funcs[mode] == NULL)
|
||||
if (functions == NULL || functions->executable_funcs[mode] == NULL)
|
||||
return PCRE_ERROR_JIT_BADOPTION;
|
||||
|
||||
/* Sanity checks should be handled by pcre_exec. */
|
||||
|
|
|
@ -1387,8 +1387,8 @@ Returns: nothing
|
|||
*/
|
||||
|
||||
static void
|
||||
do_after_lines(int lastmatchnumber, char *lastmatchrestart, char *endptr,
|
||||
char *printname)
|
||||
do_after_lines(unsigned long int lastmatchnumber, char *lastmatchrestart,
|
||||
char *endptr, char *printname)
|
||||
{
|
||||
if (after_context > 0 && lastmatchnumber > 0)
|
||||
{
|
||||
|
@ -1398,7 +1398,7 @@ if (after_context > 0 && lastmatchnumber > 0)
|
|||
int ellength;
|
||||
char *pp = lastmatchrestart;
|
||||
if (printname != NULL) fprintf(stdout, "%s-", printname);
|
||||
if (number) fprintf(stdout, "%d-", lastmatchnumber++);
|
||||
if (number) fprintf(stdout, "%lu-", lastmatchnumber++);
|
||||
pp = end_of_line(pp, endptr, &ellength);
|
||||
FWRITE(lastmatchrestart, 1, pp - lastmatchrestart, stdout);
|
||||
lastmatchrestart = pp;
|
||||
|
@ -1502,11 +1502,11 @@ static int
|
|||
pcregrep(void *handle, int frtype, char *filename, char *printname)
|
||||
{
|
||||
int rc = 1;
|
||||
int linenumber = 1;
|
||||
int lastmatchnumber = 0;
|
||||
int count = 0;
|
||||
int filepos = 0;
|
||||
int offsets[OFFSET_SIZE];
|
||||
unsigned long int linenumber = 1;
|
||||
unsigned long int lastmatchnumber = 0;
|
||||
unsigned long int count = 0;
|
||||
char *lastmatchrestart = NULL;
|
||||
char *ptr = main_buffer;
|
||||
char *endptr;
|
||||
|
@ -1609,7 +1609,7 @@ while (ptr < endptr)
|
|||
|
||||
if (endlinelength == 0 && t == main_buffer + bufsize)
|
||||
{
|
||||
fprintf(stderr, "pcregrep: line %d%s%s is too long for the internal buffer\n"
|
||||
fprintf(stderr, "pcregrep: line %lu%s%s is too long for the internal buffer\n"
|
||||
"pcregrep: check the --buffer-size option\n",
|
||||
linenumber,
|
||||
(filename == NULL)? "" : " of file ",
|
||||
|
@ -1747,7 +1747,7 @@ while (ptr < endptr)
|
|||
prevoffsets[1] = offsets[1];
|
||||
|
||||
if (printname != NULL) fprintf(stdout, "%s:", printname);
|
||||
if (number) fprintf(stdout, "%d:", linenumber);
|
||||
if (number) fprintf(stdout, "%lu:", linenumber);
|
||||
|
||||
/* Handle --line-offsets */
|
||||
|
||||
|
@ -1862,7 +1862,7 @@ while (ptr < endptr)
|
|||
{
|
||||
char *pp = lastmatchrestart;
|
||||
if (printname != NULL) fprintf(stdout, "%s-", printname);
|
||||
if (number) fprintf(stdout, "%d-", lastmatchnumber++);
|
||||
if (number) fprintf(stdout, "%lu-", lastmatchnumber++);
|
||||
pp = end_of_line(pp, endptr, &ellength);
|
||||
FWRITE(lastmatchrestart, 1, pp - lastmatchrestart, stdout);
|
||||
lastmatchrestart = pp;
|
||||
|
@ -1902,7 +1902,7 @@ while (ptr < endptr)
|
|||
int ellength;
|
||||
char *pp = p;
|
||||
if (printname != NULL) fprintf(stdout, "%s-", printname);
|
||||
if (number) fprintf(stdout, "%d-", linenumber - linecount--);
|
||||
if (number) fprintf(stdout, "%lu-", linenumber - linecount--);
|
||||
pp = end_of_line(pp, endptr, &ellength);
|
||||
FWRITE(p, 1, pp - p, stdout);
|
||||
p = pp;
|
||||
|
@ -1916,7 +1916,7 @@ while (ptr < endptr)
|
|||
endhyphenpending = TRUE;
|
||||
|
||||
if (printname != NULL) fprintf(stdout, "%s:", printname);
|
||||
if (number) fprintf(stdout, "%d:", linenumber);
|
||||
if (number) fprintf(stdout, "%lu:", linenumber);
|
||||
|
||||
/* In multiline mode, we want to print to the end of the line in which
|
||||
the end of the matched string is found, so we adjust linelength and the
|
||||
|
@ -2112,7 +2112,7 @@ if (count_only && !quiet)
|
|||
{
|
||||
if (printname != NULL && filenames != FN_NONE)
|
||||
fprintf(stdout, "%s:", printname);
|
||||
fprintf(stdout, "%d\n", count);
|
||||
fprintf(stdout, "%lu\n", count);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2234,7 +2234,7 @@ if (isdirectory(pathname))
|
|||
|
||||
if (dee_action == dee_RECURSE)
|
||||
{
|
||||
char buffer[1024];
|
||||
char buffer[2048];
|
||||
char *nextfile;
|
||||
directory_type *dir = opendirectory(pathname);
|
||||
|
||||
|
@ -2249,7 +2249,14 @@ if (isdirectory(pathname))
|
|||
while ((nextfile = readdirectory(dir)) != NULL)
|
||||
{
|
||||
int frc;
|
||||
sprintf(buffer, "%.512s%c%.128s", pathname, FILESEP, nextfile);
|
||||
size_t fnlength = strlen(pathname) + strlen(nextfile) + 2;
|
||||
if (fnlength > 2048)
|
||||
{
|
||||
fprintf(stderr, "pcre2grep: recursive filename is too long\n");
|
||||
rc = 2;
|
||||
break;
|
||||
}
|
||||
sprintf(buffer, "%s%c%s", pathname, FILESEP, nextfile);
|
||||
frc = grep_or_recurse(buffer, dir_recurse, FALSE);
|
||||
if (frc > 1) rc = frc;
|
||||
else if (frc == 0 && rc == 1) rc = 0;
|
||||
|
@ -2520,7 +2527,14 @@ if ((popts & PO_FIXED_STRINGS) != 0)
|
|||
}
|
||||
}
|
||||
|
||||
sprintf(buffer, "%s%.*s%s", prefix[popts], patlen, ps, suffix[popts]);
|
||||
if (snprintf(buffer, PATBUFSIZE, "%s%.*s%s", prefix[popts], patlen, ps,
|
||||
suffix[popts]) > PATBUFSIZE)
|
||||
{
|
||||
fprintf(stderr, "pcregrep: Buffer overflow while compiling \"%s\"\n",
|
||||
ps);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
p->compiled = pcre_compile(buffer, options, &error, &errptr, pcretables);
|
||||
if (p->compiled != NULL) return TRUE;
|
||||
|
||||
|
@ -2756,8 +2770,15 @@ for (i = 1; i < argc; i++)
|
|||
int arglen = (argequals == NULL || equals == NULL)?
|
||||
(int)strlen(arg) : (int)(argequals - arg);
|
||||
|
||||
sprintf(buff1, "%.*s", baselen, op->long_name);
|
||||
sprintf(buff2, "%s%.*s", buff1, fulllen - baselen - 2, opbra + 1);
|
||||
if (snprintf(buff1, sizeof(buff1), "%.*s", baselen, op->long_name) >
|
||||
(int)sizeof(buff1) ||
|
||||
snprintf(buff2, sizeof(buff2), "%s%.*s", buff1,
|
||||
fulllen - baselen - 2, opbra + 1) > (int)sizeof(buff2))
|
||||
{
|
||||
fprintf(stderr, "pcregrep: Buffer overflow when parsing %s option\n",
|
||||
op->long_name);
|
||||
pcregrep_exit(2);
|
||||
}
|
||||
|
||||
if (strncmp(arg, buff1, arglen) == 0 ||
|
||||
strncmp(arg, buff2, arglen) == 0)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
and semantics are as close as possible to those of the Perl 5 language.
|
||||
|
||||
Written by Philip Hazel
|
||||
Copyright (c) 1997-2017 University of Cambridge
|
||||
Copyright (c) 1997-2018 University of Cambridge
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -389,8 +389,8 @@ if (rc >= 0)
|
|||
{
|
||||
for (i = 0; i < (size_t)rc; i++)
|
||||
{
|
||||
pmatch[i].rm_so = ovector[i*2] + so;
|
||||
pmatch[i].rm_eo = ovector[i*2+1] + so;
|
||||
pmatch[i].rm_so = (ovector[i*2] < 0)? -1 : ovector[i*2] + so;
|
||||
pmatch[i].rm_eo = (ovector[i*2+1] < 0)? -1: ovector[i*2+1] + so;
|
||||
}
|
||||
if (allocated_ovector) free(ovector);
|
||||
for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
|
||||
|
|
8
pcre/testdata/testinput2
vendored
8
pcre/testdata/testinput2
vendored
|
@ -4249,4 +4249,12 @@ backtracking verbs. --/
|
|||
|
||||
/(?=.*[A-Z])/I
|
||||
|
||||
"(?<=(a))\1?b"
|
||||
ab
|
||||
aaab
|
||||
|
||||
"(?=(a))\1?b"
|
||||
ab
|
||||
aaab
|
||||
|
||||
/-- End of testinput2 --/
|
||||
|
|
6
pcre/testdata/testinput5
vendored
6
pcre/testdata/testinput5
vendored
|
@ -798,4 +798,10 @@
|
|||
/(?<=\K\x{17f})/8G+
|
||||
\x{17f}\x{17f}\x{17f}\x{17f}\x{17f}
|
||||
|
||||
/\C[^\v]+\x80/8
|
||||
[AΏBŀC]
|
||||
|
||||
/\C[^\d]+\x80/8
|
||||
[AΏBŀC]
|
||||
|
||||
/-- End of testinput5 --/
|
||||
|
|
16
pcre/testdata/testoutput2
vendored
16
pcre/testdata/testoutput2
vendored
|
@ -14705,4 +14705,20 @@ No options
|
|||
No first char
|
||||
No need char
|
||||
|
||||
"(?<=(a))\1?b"
|
||||
ab
|
||||
0: b
|
||||
1: a
|
||||
aaab
|
||||
0: ab
|
||||
1: a
|
||||
|
||||
"(?=(a))\1?b"
|
||||
ab
|
||||
0: ab
|
||||
1: a
|
||||
aaab
|
||||
0: ab
|
||||
1: a
|
||||
|
||||
/-- End of testinput2 --/
|
||||
|
|
8
pcre/testdata/testoutput5
vendored
8
pcre/testdata/testoutput5
vendored
|
@ -1942,4 +1942,12 @@ Need char = 'z'
|
|||
0: \x{17f}
|
||||
0+
|
||||
|
||||
/\C[^\v]+\x80/8
|
||||
[AΏBŀC]
|
||||
No match
|
||||
|
||||
/\C[^\d]+\x80/8
|
||||
[AΏBŀC]
|
||||
No match
|
||||
|
||||
/-- End of testinput5 --/
|
||||
|
|
|
@ -399,7 +399,6 @@ if [[ ! ${WSREP_SST_OPT_ROLE} == 'joiner' && ! ${WSREP_SST_OPT_ROLE} == 'donor'
|
|||
fi
|
||||
|
||||
read_cnf
|
||||
setup_ports
|
||||
get_stream
|
||||
get_transfer
|
||||
|
||||
|
|
|
@ -1343,7 +1343,9 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
|||
{
|
||||
uchar *pos;
|
||||
/* fields count may be wrong */
|
||||
DBUG_ASSERT((uint) (field - result) < fields);
|
||||
if (field >= result + fields)
|
||||
goto err;
|
||||
|
||||
cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7);
|
||||
field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]);
|
||||
field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]);
|
||||
|
@ -1361,12 +1363,7 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
|||
|
||||
/* Unpack fixed length parts */
|
||||
if (lengths[6] != 12)
|
||||
{
|
||||
/* malformed packet. signal an error. */
|
||||
free_rows(data); /* Free old data */
|
||||
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
goto err;
|
||||
|
||||
pos= (uchar*) row->data[6];
|
||||
field->charsetnr= uint2korr(pos);
|
||||
|
@ -1393,6 +1390,8 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
|||
/* old protocol, for backward compatibility */
|
||||
for (row=data->data; row ; row = row->next,field++)
|
||||
{
|
||||
if (field >= result + fields)
|
||||
goto err;
|
||||
cli_fetch_lengths(&lengths[0], row->data, default_value ? 6 : 5);
|
||||
field->org_table= field->table= strdup_root(alloc,(char*) row->data[0]);
|
||||
field->name= strdup_root(alloc,(char*) row->data[1]);
|
||||
|
@ -1429,8 +1428,17 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
|||
}
|
||||
}
|
||||
#endif /* DELETE_SUPPORT_OF_4_0_PROTOCOL */
|
||||
if (field < result + fields)
|
||||
goto err;
|
||||
free_rows(data); /* Free old data */
|
||||
DBUG_RETURN(result);
|
||||
|
||||
err:
|
||||
/* malformed packet. signal an error. */
|
||||
free_rows(data);
|
||||
free_root(alloc, MYF(0));
|
||||
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/* Read all rows (fields or data) from server */
|
||||
|
@ -1499,7 +1507,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
|
|||
else
|
||||
{
|
||||
cur->data[field] = to;
|
||||
if (len > (ulong) (end_to - to))
|
||||
if (unlikely(len > (ulong)(end_to-to) || to > end_to))
|
||||
{
|
||||
free_rows(result);
|
||||
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
|
||||
|
@ -1571,7 +1579,7 @@ read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (pos + len > end_pos)
|
||||
if (unlikely(len > (ulong)(end_pos - pos) || pos > end_pos))
|
||||
{
|
||||
set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate);
|
||||
return -1;
|
||||
|
@ -2732,7 +2740,7 @@ static int client_mpvio_read_packet(struct st_plugin_vio *mpv, uchar **buf)
|
|||
*buf= mysql->net.read_pos;
|
||||
|
||||
/* was it a request to change plugins ? */
|
||||
if (**buf == 254)
|
||||
if (pkt_len == packet_error || **buf == 254)
|
||||
return (int)packet_error; /* if yes, this plugin shan't continue */
|
||||
|
||||
/*
|
||||
|
@ -2917,7 +2925,7 @@ int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
|
|||
|
||||
compile_time_assert(CR_OK == -1);
|
||||
compile_time_assert(CR_ERROR == 0);
|
||||
if (res > CR_OK && mysql->net.read_pos[0] != 254)
|
||||
if (res > CR_OK && (mysql->net.last_errno || mysql->net.read_pos[0] != 254))
|
||||
{
|
||||
/*
|
||||
the plugin returned an error. write it down in mysql,
|
||||
|
|
|
@ -10645,6 +10645,8 @@ int ha_partition::check_misplaced_rows(uint read_part_id, bool do_repair)
|
|||
{
|
||||
/* Only need to read the partitioning fields. */
|
||||
bitmap_union(table->read_set, &m_part_info->full_part_field_set);
|
||||
if (table->vcol_set)
|
||||
bitmap_union(table->vcol_set, &m_part_info->full_part_field_set);
|
||||
}
|
||||
|
||||
if ((result= m_file[read_part_id]->ha_rnd_init(1)))
|
||||
|
|
|
@ -508,6 +508,8 @@ Item::Item(THD *thd):
|
|||
marker= 0;
|
||||
maybe_null=null_value=with_sum_func=with_window_func=with_field=0;
|
||||
in_rollup= 0;
|
||||
with_param= 0;
|
||||
|
||||
/* Initially this item is not attached to any JOIN_TAB. */
|
||||
join_tab_idx= MAX_TABLES;
|
||||
|
||||
|
@ -549,6 +551,7 @@ Item::Item(THD *thd, Item *item):
|
|||
in_rollup(item->in_rollup),
|
||||
null_value(item->null_value),
|
||||
with_sum_func(item->with_sum_func),
|
||||
with_param(item->with_param),
|
||||
with_window_func(item->with_window_func),
|
||||
with_field(item->with_field),
|
||||
fixed(item->fixed),
|
||||
|
@ -1687,6 +1690,9 @@ bool Item_sp_variable::fix_fields_from_item(THD *thd, Item **, const Item *it)
|
|||
max_length= it->max_length;
|
||||
decimals= it->decimals;
|
||||
unsigned_flag= it->unsigned_flag;
|
||||
with_param= 1;
|
||||
if (thd->lex->current_select && thd->lex->current_select->master_unit()->item)
|
||||
thd->lex->current_select->master_unit()->item->with_param= 1;
|
||||
fixed= 1;
|
||||
collation.set(it->collation.collation, it->collation.derivation);
|
||||
|
||||
|
@ -8144,6 +8150,7 @@ void Item_ref::set_properties()
|
|||
split_sum_func() doesn't try to change the reference.
|
||||
*/
|
||||
with_sum_func= (*ref)->with_sum_func;
|
||||
with_param= (*ref)->with_param;
|
||||
with_window_func= (*ref)->with_window_func;
|
||||
with_field= (*ref)->with_field;
|
||||
fixed= 1;
|
||||
|
@ -8569,6 +8576,7 @@ Item_cache_wrapper::Item_cache_wrapper(THD *thd, Item *item_arg):
|
|||
Type_std_attributes::set(orig_item);
|
||||
maybe_null= orig_item->maybe_null;
|
||||
with_sum_func= orig_item->with_sum_func;
|
||||
with_param= orig_item->with_param;
|
||||
with_field= orig_item->with_field;
|
||||
name= item_arg->name;
|
||||
m_with_subquery= orig_item->with_subquery();
|
||||
|
|
|
@ -751,6 +751,7 @@ public:
|
|||
of a query with ROLLUP */
|
||||
bool null_value; /* if item is null */
|
||||
bool with_sum_func; /* True if item contains a sum func */
|
||||
bool with_param; /* True if contains an SP parameter */
|
||||
bool with_window_func; /* True if item contains a window func */
|
||||
/**
|
||||
True if any item except Item_sum contains a field. Set during parsing.
|
||||
|
|
|
@ -1292,6 +1292,7 @@ bool Item_in_optimizer::fix_left(THD *thd)
|
|||
}
|
||||
eval_not_null_tables(NULL);
|
||||
with_sum_func= args[0]->with_sum_func;
|
||||
with_param= args[0]->with_param || args[1]->with_param;
|
||||
with_field= args[0]->with_field;
|
||||
if ((const_item_cache= args[0]->const_item()))
|
||||
{
|
||||
|
@ -1340,6 +1341,7 @@ bool Item_in_optimizer::fix_fields(THD *thd, Item **ref)
|
|||
m_with_subquery= true;
|
||||
with_sum_func= with_sum_func || args[1]->with_sum_func;
|
||||
with_field= with_field || args[1]->with_field;
|
||||
with_param= args[0]->with_param || args[1]->with_param;
|
||||
used_tables_and_const_cache_join(args[1]);
|
||||
fixed= 1;
|
||||
return FALSE;
|
||||
|
@ -1889,6 +1891,7 @@ void Item_func_interval::fix_length_and_dec()
|
|||
used_tables_and_const_cache_join(row);
|
||||
not_null_tables_cache= row->not_null_tables();
|
||||
with_sum_func= with_sum_func || row->with_sum_func;
|
||||
with_param= with_param || row->with_param;
|
||||
with_field= with_field || row->with_field;
|
||||
}
|
||||
|
||||
|
@ -4526,6 +4529,7 @@ Item_cond::fix_fields(THD *thd, Item **ref)
|
|||
List_iterator<Item> li(list);
|
||||
Item *item;
|
||||
uchar buff[sizeof(char*)]; // Max local vars in function
|
||||
bool is_and_cond= functype() == Item_func::COND_AND_FUNC;
|
||||
not_null_tables_cache= 0;
|
||||
used_tables_and_const_cache_init();
|
||||
|
||||
|
@ -4588,26 +4592,33 @@ Item_cond::fix_fields(THD *thd, Item **ref)
|
|||
(item= *li.ref())->check_cols(1))
|
||||
return TRUE; /* purecov: inspected */
|
||||
used_tables_cache|= item->used_tables();
|
||||
if (item->const_item())
|
||||
if (item->const_item() && !item->with_param &&
|
||||
!item->is_expensive() && !cond_has_datetime_is_null(item))
|
||||
{
|
||||
if (!item->is_expensive() && !cond_has_datetime_is_null(item) &&
|
||||
item->val_int() == 0)
|
||||
if (item->val_int() == is_and_cond && top_level())
|
||||
{
|
||||
/*
|
||||
This is "... OR false_cond OR ..."
|
||||
a. This is "... AND true_cond AND ..."
|
||||
In this case, true_cond has no effect on cond_and->not_null_tables()
|
||||
b. This is "... OR false_cond/null cond OR ..."
|
||||
In this case, false_cond has no effect on cond_or->not_null_tables()
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
This is "... OR const_cond OR ..."
|
||||
a. This is "... AND false_cond/null_cond AND ..."
|
||||
The whole condition is FALSE/UNKNOWN.
|
||||
b. This is "... OR const_cond OR ..."
|
||||
In this case, cond_or->not_null_tables()=0, because the condition
|
||||
const_cond might evaluate to true (regardless of whether some tables
|
||||
were NULL-complemented).
|
||||
*/
|
||||
not_null_tables_cache= (table_map) 0;
|
||||
and_tables_cache= (table_map) 0;
|
||||
}
|
||||
if (thd->is_error())
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -4619,6 +4630,7 @@ Item_cond::fix_fields(THD *thd, Item **ref)
|
|||
}
|
||||
|
||||
with_sum_func|= item->with_sum_func;
|
||||
with_param|= item->with_param;
|
||||
with_field|= item->with_field;
|
||||
m_with_subquery|= item->with_subquery();
|
||||
with_window_func|= item->with_window_func;
|
||||
|
@ -4634,30 +4646,36 @@ bool
|
|||
Item_cond::eval_not_null_tables(void *opt_arg)
|
||||
{
|
||||
Item *item;
|
||||
bool is_and_cond= functype() == Item_func::COND_AND_FUNC;
|
||||
List_iterator<Item> li(list);
|
||||
not_null_tables_cache= (table_map) 0;
|
||||
and_tables_cache= ~(table_map) 0;
|
||||
while ((item=li++))
|
||||
{
|
||||
table_map tmp_table_map;
|
||||
if (item->const_item())
|
||||
if (item->const_item() && !item->with_param &&
|
||||
!item->is_expensive() && !cond_has_datetime_is_null(item))
|
||||
{
|
||||
if (!item->is_expensive() && !cond_has_datetime_is_null(item) &&
|
||||
item->val_int() == 0)
|
||||
if (item->val_int() == is_and_cond && top_level())
|
||||
{
|
||||
/*
|
||||
This is "... OR false_cond OR ..."
|
||||
a. This is "... AND true_cond AND ..."
|
||||
In this case, true_cond has no effect on cond_and->not_null_tables()
|
||||
b. This is "... OR false_cond/null cond OR ..."
|
||||
In this case, false_cond has no effect on cond_or->not_null_tables()
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
This is "... OR const_cond OR ..."
|
||||
a. This is "... AND false_cond/null_cond AND ..."
|
||||
The whole condition is FALSE/UNKNOWN.
|
||||
b. This is "... OR const_cond OR ..."
|
||||
In this case, cond_or->not_null_tables()=0, because the condition
|
||||
some_cond_or might be true regardless of what tables are
|
||||
NULL-complemented.
|
||||
const_cond might evaluate to true (regardless of whether some tables
|
||||
were NULL-complemented).
|
||||
*/
|
||||
not_null_tables_cache= (table_map) 0;
|
||||
and_tables_cache= (table_map) 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,6 +148,7 @@ void Item_func::sync_with_sum_func_and_with_field(List<Item> &list)
|
|||
with_sum_func|= item->with_sum_func;
|
||||
with_window_func|= item->with_window_func;
|
||||
with_field|= item->with_field;
|
||||
with_param|= item->with_param;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -367,6 +368,7 @@ Item_func::fix_fields(THD *thd, Item **ref)
|
|||
maybe_null=1;
|
||||
|
||||
with_sum_func= with_sum_func || item->with_sum_func;
|
||||
with_param= with_param || item->with_param;
|
||||
with_window_func= with_window_func || item->with_window_func;
|
||||
with_field= with_field || item->with_field;
|
||||
used_tables_and_const_cache_join(item);
|
||||
|
@ -3301,6 +3303,7 @@ udf_handler::fix_fields(THD *thd, Item_func_or_sum *func,
|
|||
func->maybe_null=1;
|
||||
func->with_sum_func= func->with_sum_func || item->with_sum_func;
|
||||
func->with_field= func->with_field || item->with_field;
|
||||
func->with_param= func->with_param || item->with_param;
|
||||
func->With_subquery_cache::join(item);
|
||||
func->used_tables_and_const_cache_join(item);
|
||||
f_args.arg_type[i]=item->result_type();
|
||||
|
|
|
@ -82,16 +82,19 @@ public:
|
|||
{
|
||||
with_sum_func= 0;
|
||||
with_field= 0;
|
||||
with_param= 0;
|
||||
}
|
||||
Item_func(THD *thd, Item *a): Item_func_or_sum(thd, a)
|
||||
{
|
||||
with_sum_func= a->with_sum_func;
|
||||
with_param= a->with_param;
|
||||
with_field= a->with_field;
|
||||
}
|
||||
Item_func(THD *thd, Item *a, Item *b):
|
||||
Item_func_or_sum(thd, a, b)
|
||||
{
|
||||
with_sum_func= a->with_sum_func || b->with_sum_func;
|
||||
with_param= a->with_param || b->with_param;
|
||||
with_field= a->with_field || b->with_field;
|
||||
}
|
||||
Item_func(THD *thd, Item *a, Item *b, Item *c):
|
||||
|
@ -99,6 +102,7 @@ public:
|
|||
{
|
||||
with_sum_func= a->with_sum_func || b->with_sum_func || c->with_sum_func;
|
||||
with_field= a->with_field || b->with_field || c->with_field;
|
||||
with_param= a->with_param || b->with_param || c->with_param;
|
||||
}
|
||||
Item_func(THD *thd, Item *a, Item *b, Item *c, Item *d):
|
||||
Item_func_or_sum(thd, a, b, c, d)
|
||||
|
@ -107,6 +111,8 @@ public:
|
|||
c->with_sum_func || d->with_sum_func;
|
||||
with_field= a->with_field || b->with_field ||
|
||||
c->with_field || d->with_field;
|
||||
with_param= a->with_param || b->with_param ||
|
||||
c->with_param || d->with_param;
|
||||
}
|
||||
Item_func(THD *thd, Item *a, Item *b, Item *c, Item *d, Item* e):
|
||||
Item_func_or_sum(thd, a, b, c, d, e)
|
||||
|
@ -115,6 +121,8 @@ public:
|
|||
c->with_sum_func || d->with_sum_func || e->with_sum_func;
|
||||
with_field= a->with_field || b->with_field ||
|
||||
c->with_field || d->with_field || e->with_field;
|
||||
with_param= a->with_param || b->with_param ||
|
||||
c->with_param || d->with_param || e->with_param;
|
||||
}
|
||||
Item_func(THD *thd, List<Item> &list):
|
||||
Item_func_or_sum(thd, list)
|
||||
|
|
|
@ -65,6 +65,7 @@ bool Item_row::fix_fields(THD *thd, Item **ref)
|
|||
with_window_func = with_window_func || item->with_window_func;
|
||||
with_field= with_field || item->with_field;
|
||||
m_with_subquery|= item->with_subquery();
|
||||
with_param|= item->with_param;
|
||||
}
|
||||
fixed= 1;
|
||||
return FALSE;
|
||||
|
@ -178,4 +179,3 @@ Item* Item_row::build_clone(THD *thd)
|
|||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
|
|
@ -1133,6 +1133,7 @@ Item_sum_num::fix_fields(THD *thd, Item **ref)
|
|||
return TRUE;
|
||||
set_if_bigger(decimals, args[i]->decimals);
|
||||
m_with_subquery|= args[i]->with_subquery();
|
||||
with_param|= args[i]->with_param;
|
||||
with_window_func|= args[i]->with_window_func;
|
||||
}
|
||||
result_field=0;
|
||||
|
@ -1166,6 +1167,7 @@ Item_sum_hybrid::fix_fields(THD *thd, Item **ref)
|
|||
DBUG_RETURN(TRUE);
|
||||
|
||||
m_with_subquery= args[0]->with_subquery();
|
||||
with_param= args[0]->with_param;
|
||||
with_window_func|= args[0]->with_window_func;
|
||||
|
||||
fix_length_and_dec();
|
||||
|
@ -3898,6 +3900,7 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref)
|
|||
args[i]->check_cols(1))
|
||||
return TRUE;
|
||||
m_with_subquery|= args[i]->with_subquery();
|
||||
with_param|= args[i]->with_param;
|
||||
with_window_func|= args[i]->with_window_func;
|
||||
}
|
||||
|
||||
|
|
|
@ -3708,8 +3708,7 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
|||
sjm= emb_sj_nest->sj_mat_info;
|
||||
thd= tab->join->thd;
|
||||
/* First the calls come to the materialization function */
|
||||
//List<Item> &item_list= emb_sj_nest->sj_subq_pred->unit->first_select()->item_list;
|
||||
|
||||
|
||||
DBUG_ASSERT(sjm->is_used);
|
||||
/*
|
||||
Set up the table to write to, do as select_union::create_result_table does
|
||||
|
@ -3718,10 +3717,22 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
|||
sjm->sjm_table_param.bit_fields_as_long= TRUE;
|
||||
SELECT_LEX *subq_select= emb_sj_nest->sj_subq_pred->unit->first_select();
|
||||
const LEX_CSTRING sj_materialize_name= { STRING_WITH_LEN("sj-materialize") };
|
||||
Ref_ptr_array p_items= subq_select->ref_pointer_array;
|
||||
for (uint i= 0; i < subq_select->item_list.elements; i++)
|
||||
sjm->sjm_table_cols.push_back(p_items[i], thd->mem_root);
|
||||
|
||||
List_iterator<Item> it(subq_select->item_list);
|
||||
Item *item;
|
||||
while((item= it++))
|
||||
{
|
||||
/*
|
||||
This semi-join replaced the subquery (subq_select) and so on
|
||||
re-executing it will not be prepared. To use the Items from its
|
||||
select list we have to prepare (fix_fields) them
|
||||
*/
|
||||
if (!item->fixed && item->fix_fields(thd, it.ref()))
|
||||
DBUG_RETURN(TRUE);
|
||||
item= *(it.ref()); // it can be changed by fix_fields
|
||||
DBUG_ASSERT(!item->name.length || item->name.length == strlen(item->name.str));
|
||||
sjm->sjm_table_cols.push_back(item, thd->mem_root);
|
||||
}
|
||||
|
||||
sjm->sjm_table_param.field_count= subq_select->item_list.elements;
|
||||
sjm->sjm_table_param.force_not_null_cols= TRUE;
|
||||
|
||||
|
|
|
@ -4358,10 +4358,10 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
|||
DBUG_RETURN(1);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state == NO_CONFLICT)
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
#endif /* WITH_WSREP */
|
||||
if (slave_trans_retries)
|
||||
{
|
||||
|
@ -4439,7 +4439,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
|||
#ifdef WITH_WSREP
|
||||
}
|
||||
else
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
thread_safe_increment64(&rli->executed_entries);
|
||||
|
|
|
@ -12276,6 +12276,7 @@ static bool send_plugin_request_packet(MPVIO_EXT *mpvio,
|
|||
const char *client_auth_plugin=
|
||||
((st_mysql_auth *) (plugin_decl(mpvio->plugin)->info))->client_auth_plugin;
|
||||
|
||||
DBUG_EXECUTE_IF("auth_disconnect", { vio_close(net->vio); DBUG_RETURN(1); });
|
||||
DBUG_ASSERT(client_auth_plugin);
|
||||
|
||||
/*
|
||||
|
|
|
@ -1175,7 +1175,9 @@ send_result_message:
|
|||
}
|
||||
else
|
||||
{
|
||||
if (trans_commit_stmt(thd) || trans_commit_implicit(thd))
|
||||
if (trans_commit_stmt(thd) ||
|
||||
(stmt_causes_implicit_commit(thd, CF_IMPLICIT_COMMIT_END) &&
|
||||
trans_commit_implicit(thd)))
|
||||
goto err;
|
||||
}
|
||||
close_thread_tables(thd);
|
||||
|
@ -1209,7 +1211,8 @@ send_result_message:
|
|||
err:
|
||||
/* Make sure this table instance is not reused after the failure. */
|
||||
trans_rollback_stmt(thd);
|
||||
trans_rollback(thd);
|
||||
if (stmt_causes_implicit_commit(thd, CF_IMPLICIT_COMMIT_END))
|
||||
trans_rollback(thd);
|
||||
if (table && table->table)
|
||||
{
|
||||
table->table->m_needs_reopen= true;
|
||||
|
|
|
@ -811,10 +811,7 @@ void close_thread_tables(THD *thd)
|
|||
we will exit this function a few lines below.
|
||||
*/
|
||||
if (! thd->lex->requires_prelocking())
|
||||
{
|
||||
thd->locked_tables_list.reopen_tables(thd, true);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/*
|
||||
We are in the top-level statement of a prelocked statement,
|
||||
|
|
|
@ -881,7 +881,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier, bool skip_global_sys_var_lock)
|
|||
*scramble= '\0';
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
mysql_mutex_init(key_LOCK_wsrep_thd, &LOCK_wsrep_thd, MY_MUTEX_INIT_FAST);
|
||||
wsrep_ws_handle.trx_id = WSREP_UNDEFINED_TRX_ID;
|
||||
wsrep_ws_handle.opaque = NULL;
|
||||
wsrep_retry_counter = 0;
|
||||
|
@ -1718,9 +1717,6 @@ THD::~THD()
|
|||
mysql_mutex_unlock(&LOCK_thd_kill);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
mysql_mutex_lock(&LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&LOCK_wsrep_thd);
|
||||
mysql_mutex_destroy(&LOCK_wsrep_thd);
|
||||
delete wsrep_rgi;
|
||||
#endif
|
||||
if (!free_connection_done)
|
||||
|
|
|
@ -4632,7 +4632,6 @@ public:
|
|||
query_id_t wsrep_last_query_id;
|
||||
enum wsrep_query_state wsrep_query_state;
|
||||
enum wsrep_conflict_state wsrep_conflict_state;
|
||||
mysql_mutex_t LOCK_wsrep_thd;
|
||||
wsrep_trx_meta_t wsrep_trx_meta;
|
||||
uint32 wsrep_rand;
|
||||
Relay_log_info *wsrep_rli;
|
||||
|
|
|
@ -1407,9 +1407,9 @@ void do_handle_one_connection(CONNECT *connect)
|
|||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_query_state= QUERY_EXITING;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif
|
||||
end_thread:
|
||||
|
|
|
@ -4586,17 +4586,17 @@ bool select_create::send_eof()
|
|||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state != NO_CONFLICT)
|
||||
{
|
||||
WSREP_DEBUG("select_create commit failed, thd: %lld err: %d %s",
|
||||
(longlong) thd->thread_id, thd->wsrep_conflict_state,
|
||||
thd->query());
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
abort_result_set();
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
|
|
@ -420,7 +420,7 @@ static bool some_non_temp_table_to_be_updated(THD *thd, TABLE_LIST *tables)
|
|||
|
||||
|
||||
/*
|
||||
Implicitly commit a active transaction if statement requires so.
|
||||
Check whether the statement implicitly commits an active transaction.
|
||||
|
||||
@param thd Thread handle.
|
||||
@param mask Bitmask used for the SQL command match.
|
||||
|
@ -428,7 +428,7 @@ static bool some_non_temp_table_to_be_updated(THD *thd, TABLE_LIST *tables)
|
|||
@return 0 No implicit commit
|
||||
@return 1 Do a commit
|
||||
*/
|
||||
static bool stmt_causes_implicit_commit(THD *thd, uint mask)
|
||||
bool stmt_causes_implicit_commit(THD *thd, uint mask)
|
||||
{
|
||||
LEX *lex= thd->lex;
|
||||
bool skip= FALSE;
|
||||
|
@ -1214,13 +1214,13 @@ bool do_command(THD *thd)
|
|||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_query_state= QUERY_IDLE;
|
||||
if (thd->wsrep_conflict_state==MUST_ABORT)
|
||||
{
|
||||
wsrep_client_rollback(thd);
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
@ -1266,15 +1266,15 @@ bool do_command(THD *thd)
|
|||
packet_length= my_net_read_packet(net, 1);
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd)) {
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
/* these THD's are aborted or are aborting during being idle */
|
||||
if (thd->wsrep_conflict_state == ABORTING)
|
||||
{
|
||||
while (thd->wsrep_conflict_state == ABORTING) {
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
my_sleep(1000);
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
}
|
||||
thd->store_globals();
|
||||
}
|
||||
|
@ -1284,7 +1284,7 @@ bool do_command(THD *thd)
|
|||
}
|
||||
|
||||
thd->wsrep_query_state= QUERY_EXEC;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
@ -1297,14 +1297,14 @@ bool do_command(THD *thd)
|
|||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state == MUST_ABORT)
|
||||
{
|
||||
DBUG_PRINT("wsrep",("aborted for wsrep rollback: %lu",
|
||||
(ulong) thd->real_id));
|
||||
wsrep_client_rollback(thd);
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
@ -1582,7 +1582,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
thd->wsrep_PA_safe= true;
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_query_state= QUERY_EXEC;
|
||||
if (thd->wsrep_conflict_state== RETRY_AUTOCOMMIT)
|
||||
{
|
||||
|
@ -1599,14 +1599,14 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
my_message(ER_LOCK_DEADLOCK, "Deadlock: wsrep aborted transaction",
|
||||
MYF(0));
|
||||
WSREP_DEBUG("Deadlock error for: %s", thd->query());
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
thd->reset_killed();
|
||||
thd->mysys_var->abort = 0;
|
||||
thd->wsrep_conflict_state = NO_CONFLICT;
|
||||
thd->wsrep_retry_counter = 0;
|
||||
goto dispatch_end;
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
#if defined(ENABLED_PROFILING)
|
||||
|
@ -2378,10 +2378,10 @@ com_multi_end:
|
|||
DBUG_ASSERT((command != COM_QUIT && command != COM_STMT_CLOSE)
|
||||
|| thd->get_stmt_da()->is_disabled());
|
||||
/* wsrep BF abort in query exec phase */
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
do_end_of_statement= thd->wsrep_conflict_state != REPLAYING &&
|
||||
thd->wsrep_conflict_state != RETRY_AUTOCOMMIT;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
else
|
||||
do_end_of_statement= true;
|
||||
|
@ -6307,6 +6307,10 @@ finish:
|
|||
|
||||
lex->unit.cleanup();
|
||||
|
||||
/* close/reopen tables that were marked to need reopen under LOCK TABLES */
|
||||
if (! thd->lex->requires_prelocking())
|
||||
thd->locked_tables_list.reopen_tables(thd, true);
|
||||
|
||||
if (! thd->in_sub_stmt)
|
||||
{
|
||||
if (thd->killed != NOT_KILLED)
|
||||
|
@ -7805,13 +7809,22 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
|||
com_statement_info[thd->get_command()].m_key);
|
||||
MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query(),
|
||||
thd->query_length());
|
||||
|
||||
DBUG_EXECUTE_IF("sync.wsrep_retry_autocommit",
|
||||
{
|
||||
const char act[]=
|
||||
"now "
|
||||
"SIGNAL wsrep_retry_autocommit_reached "
|
||||
"WAIT_FOR wsrep_retry_autocommit_continue";
|
||||
DBUG_ASSERT(!debug_sync_set_action(thd, STRING_WITH_LEN(act)));
|
||||
});
|
||||
}
|
||||
mysql_parse(thd, rawbuf, length, parser_state, is_com_multi,
|
||||
is_next_command);
|
||||
|
||||
if (WSREP(thd)) {
|
||||
/* wsrep BF abort in query exec phase */
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state == MUST_ABORT) {
|
||||
wsrep_client_rollback(thd);
|
||||
|
||||
|
@ -7820,8 +7833,11 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
|||
|
||||
if (thd->wsrep_conflict_state == MUST_REPLAY)
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
if (thd->lex->explain)
|
||||
delete_explain_query(thd->lex);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
wsrep_replay_transaction(thd);
|
||||
}
|
||||
|
||||
|
@ -7863,13 +7879,13 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
|||
if (thd->wsrep_conflict_state != REPLAYING)
|
||||
thd->wsrep_retry_counter= 0; // reset
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
thd->reset_killed();
|
||||
}
|
||||
else
|
||||
{
|
||||
set_if_smaller(thd->wsrep_retry_counter, 0); // reset; eventually ok
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8898,7 +8914,7 @@ kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type typ
|
|||
|
||||
if (((thd->security_ctx->master_access & SUPER_ACL) ||
|
||||
thd->security_ctx->user_matches(tmp->security_ctx)) &&
|
||||
!wsrep_thd_is_BF(tmp, true))
|
||||
!wsrep_thd_is_BF(tmp, false))
|
||||
{
|
||||
tmp->awake_no_mutex(kill_signal);
|
||||
error=0;
|
||||
|
|
|
@ -85,6 +85,7 @@ bool check_identifier_name(LEX_CSTRING *str, uint max_char_length,
|
|||
uint err_code, const char *param_for_err_msg);
|
||||
bool mysql_test_parse_for_slave(THD *thd,char *inBuf,uint length);
|
||||
bool sqlcom_can_generate_row_events(const THD *thd);
|
||||
bool stmt_causes_implicit_commit(THD *thd, uint mask);
|
||||
bool is_update_query(enum enum_sql_command command);
|
||||
bool is_log_table_write_query(enum enum_sql_command command);
|
||||
bool alloc_query(THD *thd, const char *packet, size_t packet_length);
|
||||
|
|
|
@ -525,9 +525,16 @@ static bool create_full_part_field_array(THD *thd, TABLE *table,
|
|||
full_part_field_array may be NULL if storage engine supports native
|
||||
partitioning.
|
||||
*/
|
||||
table->vcol_set= table->read_set= &part_info->full_part_field_set;
|
||||
if ((ptr= part_info->full_part_field_array))
|
||||
for (; *ptr; ptr++)
|
||||
bitmap_set_bit(&part_info->full_part_field_set, (*ptr)->field_index);
|
||||
{
|
||||
if ((*ptr)->vcol_info)
|
||||
table->mark_virtual_col(*ptr);
|
||||
else
|
||||
bitmap_fast_test_and_set(table->read_set, (*ptr)->field_index);
|
||||
}
|
||||
table->default_column_bitmaps();
|
||||
|
||||
end:
|
||||
DBUG_RETURN(result);
|
||||
|
|
|
@ -4196,7 +4196,7 @@ reexecute:
|
|||
|
||||
if (WSREP_ON)
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
switch (thd->wsrep_conflict_state)
|
||||
{
|
||||
case CERT_FAILURE:
|
||||
|
@ -4213,7 +4213,7 @@ reexecute:
|
|||
default:
|
||||
break;
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
@ -4392,7 +4392,7 @@ reexecute:
|
|||
|
||||
if (WSREP_ON)
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
switch (thd->wsrep_conflict_state)
|
||||
{
|
||||
case CERT_FAILURE:
|
||||
|
@ -4409,7 +4409,7 @@ reexecute:
|
|||
default:
|
||||
break;
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
|
|
|
@ -1553,9 +1553,6 @@ JOIN::optimize_inner()
|
|||
|
||||
eval_select_list_used_tables();
|
||||
|
||||
if (optimize_constant_subqueries())
|
||||
DBUG_RETURN(1);
|
||||
|
||||
table_count= select_lex->leaf_tables.elements;
|
||||
|
||||
if (setup_ftfuncs(select_lex)) /* should be after having->fix_fields */
|
||||
|
@ -1619,6 +1616,9 @@ JOIN::optimize_inner()
|
|||
thd->restore_active_arena(arena, &backup);
|
||||
}
|
||||
|
||||
if (optimize_constant_subqueries())
|
||||
DBUG_RETURN(1);
|
||||
|
||||
if (setup_jtbm_semi_joins(this, join_list, &conds))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
|
|
|
@ -3990,11 +3990,11 @@ bool is_stat_table(const LEX_CSTRING *db, LEX_CSTRING *table)
|
|||
{
|
||||
DBUG_ASSERT(db->str && table->str);
|
||||
|
||||
if (!cmp(db, &MYSQL_SCHEMA_NAME))
|
||||
if (!my_strcasecmp(table_alias_charset, db->str, MYSQL_SCHEMA_NAME.str))
|
||||
{
|
||||
for (uint i= 0; i < STATISTICS_TABLES; i ++)
|
||||
{
|
||||
if (cmp(table, &stat_table_name[i]) == 0)
|
||||
if (!my_strcasecmp(table_alias_charset, table->str, stat_table_name[i].str))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6743,7 +6743,7 @@ bool TABLE::mark_virtual_columns_for_write(bool insert_fl)
|
|||
if (bitmap_is_set(write_set, tmp_vfield->field_index))
|
||||
bitmap_updated= mark_virtual_col(tmp_vfield);
|
||||
else if (tmp_vfield->vcol_info->stored_in_db ||
|
||||
(tmp_vfield->flags & PART_KEY_FLAG))
|
||||
(tmp_vfield->flags & (PART_KEY_FLAG | FIELD_IN_PART_FUNC_FLAG)))
|
||||
{
|
||||
if (insert_fl)
|
||||
{
|
||||
|
|
|
@ -98,11 +98,11 @@ static wsrep_cb_status_t wsrep_apply_events(THD* thd,
|
|||
DBUG_RETURN(WSREP_CB_FAILURE);
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_query_state= QUERY_EXEC;
|
||||
if (thd->wsrep_conflict_state!= REPLAYING)
|
||||
thd->wsrep_conflict_state= NO_CONFLICT;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
if (!buf_len) WSREP_DEBUG("empty rbr buffer to apply: %lld",
|
||||
(long long) wsrep_thd_trx_seqno(thd));
|
||||
|
@ -197,9 +197,9 @@ static wsrep_cb_status_t wsrep_apply_events(THD* thd,
|
|||
}
|
||||
|
||||
error:
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_query_state= QUERY_IDLE;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
assert(thd->wsrep_exec_mode== REPL_RECV);
|
||||
|
||||
|
|
|
@ -240,12 +240,12 @@ static int wsrep_rollback(handlerton *hton, THD *thd, bool all)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
switch (thd->wsrep_exec_mode)
|
||||
{
|
||||
case TOTAL_ORDER:
|
||||
case REPL_RECV:
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
WSREP_DEBUG("Avoiding wsrep rollback for failed DDL: %s", thd->query());
|
||||
DBUG_RETURN(0);
|
||||
default: break;
|
||||
|
@ -262,7 +262,7 @@ static int wsrep_rollback(handlerton *hton, THD *thd, bool all)
|
|||
}
|
||||
wsrep_cleanup_transaction(thd);
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -275,7 +275,7 @@ int wsrep_commit(handlerton *hton, THD *thd, bool all)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if ((all || !thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) &&
|
||||
(thd->variables.wsrep_on && thd->wsrep_conflict_state != MUST_REPLAY))
|
||||
{
|
||||
|
@ -306,7 +306,7 @@ int wsrep_commit(handlerton *hton, THD *thd, bool all)
|
|||
wsrep_cleanup_transaction(thd);
|
||||
}
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -334,20 +334,20 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
|
||||
if (thd->wsrep_exec_mode == REPL_RECV) {
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state == MUST_ABORT) {
|
||||
if (wsrep_debug)
|
||||
WSREP_INFO("WSREP: must abort for BF");
|
||||
DBUG_PRINT("wsrep", ("BF apply commit fail"));
|
||||
thd->wsrep_conflict_state = NO_CONFLICT;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
//
|
||||
// TODO: test all calls of the rollback.
|
||||
// rollback must happen automagically innobase_rollback(hton, thd, 1);
|
||||
//
|
||||
DBUG_RETURN(WSREP_TRX_ERROR);
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
if (thd->wsrep_exec_mode != LOCAL_STATE) DBUG_RETURN(WSREP_TRX_OK);
|
||||
|
@ -359,11 +359,11 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
|
||||
DBUG_PRINT("wsrep", ("replicating commit"));
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
if (thd->wsrep_conflict_state == MUST_ABORT) {
|
||||
DBUG_PRINT("wsrep", ("replicate commit fail"));
|
||||
thd->wsrep_conflict_state = ABORTED;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
if (wsrep_debug) {
|
||||
WSREP_INFO("innobase_commit, abort %s",
|
||||
(thd->query()) ? thd->query() : "void");
|
||||
|
@ -385,7 +385,7 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
{
|
||||
|
||||
mysql_mutex_unlock(&LOCK_wsrep_replaying);
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
mysql_mutex_lock(&thd->mysys_var->mutex);
|
||||
thd_proc_info(thd, "WSREP waiting on replaying");
|
||||
|
@ -413,7 +413,7 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
thd->mysys_var->current_cond= 0;
|
||||
mysql_mutex_unlock(&thd->mysys_var->mutex);
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
mysql_mutex_lock(&LOCK_wsrep_replaying);
|
||||
}
|
||||
mysql_mutex_unlock(&LOCK_wsrep_replaying);
|
||||
|
@ -421,14 +421,14 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
if (thd->wsrep_conflict_state == MUST_ABORT) {
|
||||
DBUG_PRINT("wsrep", ("replicate commit fail"));
|
||||
thd->wsrep_conflict_state = ABORTED;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
WSREP_DEBUG("innobase_commit abort after replaying wait %s",
|
||||
(thd->query()) ? thd->query() : "void");
|
||||
DBUG_RETURN(WSREP_TRX_CERT_FAIL);
|
||||
}
|
||||
|
||||
thd->wsrep_query_state = QUERY_COMMITTING;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
cache = get_trans_log(thd);
|
||||
rcode = 0;
|
||||
|
@ -500,10 +500,10 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
WSREP_DEBUG("thd: %lld seqno: %lld BF aborted by provider, will replay",
|
||||
(longlong) thd->thread_id,
|
||||
(longlong) thd->wsrep_trx_meta.gtid.seqno);
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_conflict_state = MUST_REPLAY;
|
||||
DBUG_ASSERT(wsrep_thd_trx_seqno(thd) > 0);
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
mysql_mutex_lock(&LOCK_wsrep_replaying);
|
||||
wsrep_replaying++;
|
||||
WSREP_DEBUG("replaying increased: %d, thd: %lld",
|
||||
|
@ -517,7 +517,7 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
DBUG_RETURN(WSREP_TRX_ERROR);
|
||||
}
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
DEBUG_SYNC(thd, "wsrep_after_replication");
|
||||
|
||||
|
@ -574,26 +574,26 @@ wsrep_run_wsrep_commit(THD *thd, bool all)
|
|||
WSREP_LOG_CONFLICT(NULL, thd, FALSE);
|
||||
}
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
DBUG_RETURN(WSREP_TRX_CERT_FAIL);
|
||||
|
||||
case WSREP_SIZE_EXCEEDED:
|
||||
WSREP_ERROR("transaction size exceeded");
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
DBUG_RETURN(WSREP_TRX_SIZE_EXCEEDED);
|
||||
case WSREP_CONN_FAIL:
|
||||
WSREP_ERROR("connection failure");
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
DBUG_RETURN(WSREP_TRX_ERROR);
|
||||
default:
|
||||
WSREP_ERROR("unknown connection failure");
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
DBUG_RETURN(WSREP_TRX_ERROR);
|
||||
}
|
||||
|
||||
thd->wsrep_query_state= QUERY_EXEC;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
DBUG_RETURN(WSREP_TRX_OK);
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@ ulong wsrep_running_threads = 0; // # of currently running wsrep threads
|
|||
ulong my_bind_addr;
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
PSI_mutex_key key_LOCK_wsrep_rollback, key_LOCK_wsrep_thd,
|
||||
PSI_mutex_key key_LOCK_wsrep_rollback,
|
||||
key_LOCK_wsrep_replaying, key_LOCK_wsrep_ready, key_LOCK_wsrep_sst,
|
||||
key_LOCK_wsrep_sst_thread, key_LOCK_wsrep_sst_init,
|
||||
key_LOCK_wsrep_slave_threads, key_LOCK_wsrep_desync,
|
||||
|
@ -162,7 +162,6 @@ static PSI_mutex_info wsrep_mutexes[]=
|
|||
{ &key_LOCK_wsrep_sst_init, "LOCK_wsrep_sst_init", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_sst, "LOCK_wsrep_sst", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_rollback, "LOCK_wsrep_rollback", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_thd, "THD::LOCK_wsrep_thd", 0},
|
||||
{ &key_LOCK_wsrep_replaying, "LOCK_wsrep_replaying", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_slave_threads, "LOCK_wsrep_slave_threads", PSI_FLAG_GLOBAL},
|
||||
{ &key_LOCK_wsrep_desync, "LOCK_wsrep_desync", PSI_FLAG_GLOBAL},
|
||||
|
@ -1688,16 +1687,16 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
|
|||
if (thd->wsrep_exec_mode == REPL_RECV)
|
||||
return 0;
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
if (thd->wsrep_conflict_state == MUST_ABORT)
|
||||
{
|
||||
WSREP_INFO("thread: %lld schema: %s query: %s has been aborted due to multi-master conflict",
|
||||
(longlong) thd->thread_id, thd->get_db(), thd->query());
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
return WSREP_TRX_FAIL;
|
||||
}
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
DBUG_ASSERT(thd->wsrep_exec_mode == LOCAL_STATE);
|
||||
DBUG_ASSERT(thd->wsrep_trx_meta.gtid.seqno == WSREP_SEQNO_UNDEFINED);
|
||||
|
@ -1812,7 +1811,7 @@ bool wsrep_grant_mdl_exception(MDL_context *requestor_ctx,
|
|||
const char* schema= key->db_name();
|
||||
int schema_len= key->db_name_length();
|
||||
|
||||
mysql_mutex_lock(&request_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&request_thd->LOCK_thd_data);
|
||||
|
||||
/*
|
||||
We consider granting MDL exceptions only for appliers (BF THD) and ones
|
||||
|
@ -1836,19 +1835,19 @@ bool wsrep_grant_mdl_exception(MDL_context *requestor_ctx,
|
|||
if (request_thd->wsrep_exec_mode == TOTAL_ORDER ||
|
||||
request_thd->wsrep_exec_mode == REPL_RECV)
|
||||
{
|
||||
mysql_mutex_unlock(&request_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&request_thd->LOCK_thd_data);
|
||||
WSREP_MDL_LOG(DEBUG, "MDL conflict ", schema, schema_len,
|
||||
request_thd, granted_thd);
|
||||
ticket->wsrep_report(wsrep_debug);
|
||||
|
||||
mysql_mutex_lock(&granted_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&granted_thd->LOCK_thd_data);
|
||||
if (granted_thd->wsrep_exec_mode == TOTAL_ORDER ||
|
||||
granted_thd->wsrep_exec_mode == REPL_RECV)
|
||||
{
|
||||
WSREP_MDL_LOG(INFO, "MDL BF-BF conflict", schema, schema_len,
|
||||
request_thd, granted_thd);
|
||||
ticket->wsrep_report(true);
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_thd_data);
|
||||
ret= true;
|
||||
}
|
||||
else if (granted_thd->lex->sql_command == SQLCOM_FLUSH ||
|
||||
|
@ -1856,7 +1855,7 @@ bool wsrep_grant_mdl_exception(MDL_context *requestor_ctx,
|
|||
{
|
||||
WSREP_DEBUG("BF thread waiting for FLUSH");
|
||||
ticket->wsrep_report(wsrep_debug);
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_thd_data);
|
||||
ret= false;
|
||||
}
|
||||
else
|
||||
|
@ -1881,14 +1880,14 @@ bool wsrep_grant_mdl_exception(MDL_context *requestor_ctx,
|
|||
ticket->wsrep_report(true);
|
||||
}
|
||||
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&granted_thd->LOCK_thd_data);
|
||||
wsrep_abort_thd((void *) request_thd, (void *) granted_thd, 1);
|
||||
ret= false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mysql_mutex_unlock(&request_thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&request_thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -2045,9 +2044,9 @@ static inline bool is_replaying_connection(THD *thd)
|
|||
{
|
||||
bool ret;
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
ret= (thd->wsrep_conflict_state == REPLAYING) ? true : false;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2057,9 +2056,9 @@ static inline bool is_committing_connection(THD *thd)
|
|||
{
|
||||
bool ret;
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
ret= (thd->wsrep_query_state == QUERY_COMMITTING) ? true : false;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2440,13 +2439,13 @@ wsrep_ws_handle_t* wsrep_thd_ws_handle(THD *thd)
|
|||
|
||||
void wsrep_thd_LOCK(THD *thd)
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
|
||||
void wsrep_thd_UNLOCK(THD *thd)
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -266,8 +266,6 @@ extern my_bool wsrep_preordered_opt;
|
|||
extern handlerton *wsrep_hton;
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
extern PSI_mutex_key key_LOCK_wsrep_thd;
|
||||
extern PSI_cond_key key_COND_wsrep_thd;
|
||||
extern PSI_mutex_key key_LOCK_wsrep_ready;
|
||||
extern PSI_mutex_key key_COND_wsrep_ready;
|
||||
extern PSI_mutex_key key_LOCK_wsrep_sst;
|
||||
|
|
|
@ -47,7 +47,7 @@ int wsrep_show_bf_aborts (THD *thd, SHOW_VAR *var, char *buff,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* must have (&thd->LOCK_wsrep_thd) */
|
||||
/* must have (&thd->LOCK_thd_data) */
|
||||
void wsrep_client_rollback(THD *thd)
|
||||
{
|
||||
WSREP_DEBUG("client rollback due to BF abort for (%lld), query: %s",
|
||||
|
@ -56,7 +56,7 @@ void wsrep_client_rollback(THD *thd)
|
|||
WSREP_ATOMIC_ADD_LONG(&wsrep_bf_aborts_counter, 1);
|
||||
|
||||
thd->wsrep_conflict_state= ABORTING;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
trans_rollback(thd);
|
||||
|
||||
if (thd->locked_tables_mode && thd->lock)
|
||||
|
@ -86,7 +86,7 @@ void wsrep_client_rollback(THD *thd)
|
|||
(longlong) thd->thread_id);
|
||||
thd->clear_binlog_table_maps();
|
||||
}
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
thd->wsrep_conflict_state= ABORTED;
|
||||
}
|
||||
|
||||
|
@ -232,7 +232,7 @@ void wsrep_replay_transaction(THD *thd)
|
|||
thd->get_stmt_da()->reset_diagnostics_area();
|
||||
|
||||
thd->wsrep_conflict_state= REPLAYING;
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
thd->reset_for_next_command();
|
||||
thd->reset_killed();
|
||||
|
@ -272,7 +272,7 @@ void wsrep_replay_transaction(THD *thd)
|
|||
if (thd->wsrep_conflict_state!= REPLAYING)
|
||||
WSREP_WARN("lost replaying mode: %d", thd->wsrep_conflict_state );
|
||||
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
switch (rcode)
|
||||
{
|
||||
|
@ -328,7 +328,7 @@ void wsrep_replay_transaction(THD *thd)
|
|||
/* we're now in inconsistent state, must abort */
|
||||
|
||||
/* http://bazaar.launchpad.net/~codership/codership-mysql/5.6/revision/3962#sql/wsrep_thd.cc */
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
|
||||
unireg_abort(1);
|
||||
break;
|
||||
|
@ -495,30 +495,30 @@ static void wsrep_rollback_process(THD *thd)
|
|||
*/
|
||||
mysql_mutex_unlock(&LOCK_wsrep_rollback);
|
||||
|
||||
mysql_mutex_lock(&aborting->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&aborting->LOCK_thd_data);
|
||||
if (aborting->wsrep_conflict_state== ABORTED)
|
||||
{
|
||||
WSREP_DEBUG("WSREP, thd already aborted: %llu state: %d",
|
||||
(long long)aborting->real_id,
|
||||
aborting->wsrep_conflict_state);
|
||||
|
||||
mysql_mutex_unlock(&aborting->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&aborting->LOCK_thd_data);
|
||||
mysql_mutex_lock(&LOCK_wsrep_rollback);
|
||||
continue;
|
||||
}
|
||||
aborting->wsrep_conflict_state= ABORTING;
|
||||
|
||||
mysql_mutex_unlock(&aborting->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&aborting->LOCK_thd_data);
|
||||
|
||||
set_current_thd(aborting);
|
||||
aborting->store_globals();
|
||||
|
||||
mysql_mutex_lock(&aborting->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&aborting->LOCK_thd_data);
|
||||
wsrep_client_rollback(aborting);
|
||||
WSREP_DEBUG("WSREP rollbacker aborted thd: (%lld %lld)",
|
||||
(longlong) aborting->thread_id,
|
||||
(longlong) aborting->real_id);
|
||||
mysql_mutex_unlock(&aborting->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&aborting->LOCK_thd_data);
|
||||
|
||||
set_current_thd(thd);
|
||||
thd->store_globals();
|
||||
|
@ -558,10 +558,10 @@ enum wsrep_conflict_state wsrep_thd_conflict_state(THD *thd, my_bool sync)
|
|||
enum wsrep_conflict_state state = NO_CONFLICT;
|
||||
if (thd)
|
||||
{
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
state = thd->wsrep_conflict_state;
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
@ -585,12 +585,12 @@ my_bool wsrep_thd_is_BF(THD *thd, my_bool sync)
|
|||
if (wsrep_thd_is_wsrep(thd))
|
||||
{
|
||||
if (sync)
|
||||
mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
status = ((thd->wsrep_exec_mode == REPL_RECV) ||
|
||||
(thd->wsrep_exec_mode == TOTAL_ORDER));
|
||||
if (sync)
|
||||
mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
|
@ -603,12 +603,12 @@ my_bool wsrep_thd_is_BF_or_commit(void *thd_ptr, my_bool sync)
|
|||
if (thd_ptr)
|
||||
{
|
||||
THD* thd = (THD*)thd_ptr;
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
status = ((thd->wsrep_exec_mode == REPL_RECV) ||
|
||||
(thd->wsrep_exec_mode == TOTAL_ORDER) ||
|
||||
(thd->wsrep_exec_mode == LOCAL_COMMIT));
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
@ -620,10 +620,10 @@ my_bool wsrep_thd_is_local(void *thd_ptr, my_bool sync)
|
|||
if (thd_ptr)
|
||||
{
|
||||
THD* thd = (THD*)thd_ptr;
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
|
||||
status = (thd->wsrep_exec_mode == LOCAL_STATE);
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_wsrep_thd);
|
||||
if (sync) mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -427,7 +427,7 @@ int TXTFAM::DeleteSortedRows(PGLOBAL g)
|
|||
|
||||
for (i = 0; i < Posar->GetNval(); i++) {
|
||||
if ((irc = InitDelete(g, Posar->GetIntValue(ix[i]),
|
||||
Sosar->GetIntValue(ix[i])) == RC_FX))
|
||||
Sosar->GetIntValue(ix[i]))) == RC_FX)
|
||||
goto err;
|
||||
|
||||
// Now delete the sorted rows
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue