summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2020-08-28 16:40:12 +0300
committerJan Lindström <jan.lindstrom@mariadb.com>2020-08-28 16:40:12 +0300
commitc710c450e3a5654244fffaabcb4ba5af2dd24dd9 (patch)
tree3a1cc44386b812c80dab56945eea5b8034553713
parentdf07ea0b27f891c69e60b75869f474cd03232216 (diff)
downloadmariadb-git-c710c450e3a5654244fffaabcb4ba5af2dd24dd9.tar.gz
MDEV-21578 : CREATE OR REPLACE TRIGGER in Galera cluster not replicating
While doing TOI buffer OR REPLACE option was not added to replicated string.
-rw-r--r--mysql-test/suite/galera/r/galera_trigger.result32
-rw-r--r--mysql-test/suite/galera/t/galera_trigger.test36
-rw-r--r--sql/wsrep_mysqld.cc7
3 files changed, 74 insertions, 1 deletions
diff --git a/mysql-test/suite/galera/r/galera_trigger.result b/mysql-test/suite/galera/r/galera_trigger.result
new file mode 100644
index 00000000000..112d3f39aa0
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_trigger.result
@@ -0,0 +1,32 @@
+CREATE TABLE IF NOT EXISTS t1 (id int(10) not null primary key) engine=innodb;
+CREATE OR REPLACE TRIGGER tr1
+BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+SET NEW.id = 100;
+END|
+INSERT INTO t1 VALUES (1);
+SELECT * from t1;
+id
+100
+CREATE OR REPLACE TRIGGER tr1
+BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+SET NEW.id = 200;
+END|
+connection node_2;
+SET SESSION wsrep_sync_wait=15;
+SELECT * FROM t1;
+id
+100
+INSERT INTO t1 values (2);
+SELECT * FROM t1;
+id
+100
+200
+connection node_1;
+SELECT * FROM t1;
+id
+100
+200
+DROP TRIGGER tr1;
+DROP TABLE t1;
diff --git a/mysql-test/suite/galera/t/galera_trigger.test b/mysql-test/suite/galera/t/galera_trigger.test
new file mode 100644
index 00000000000..54508583f4b
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_trigger.test
@@ -0,0 +1,36 @@
+--source include/galera_cluster.inc
+#
+# MDEV-21578 CREATE OR REPLACE TRIGGER in Galera cluster not replicating
+#
+CREATE TABLE IF NOT EXISTS t1 (id int(10) not null primary key) engine=innodb;
+--delimiter |
+CREATE OR REPLACE TRIGGER tr1
+BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+SET NEW.id = 100;
+END|
+--delimiter ;
+
+INSERT INTO t1 VALUES (1);
+SELECT * from t1;
+
+--delimiter |
+CREATE OR REPLACE TRIGGER tr1
+BEFORE INSERT ON t1 FOR EACH ROW
+BEGIN
+SET NEW.id = 200;
+END|
+--delimiter ;
+
+--connection node_2
+SET SESSION wsrep_sync_wait=15;
+SELECT * FROM t1;
+INSERT INTO t1 values (2);
+SELECT * FROM t1;
+
+--connection node_1
+SELECT * FROM t1;
+
+DROP TRIGGER tr1;
+DROP TABLE t1;
+
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index f95ef168a23..d392d1c2a61 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -2924,7 +2924,12 @@ static int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len)
definer_host.length= 0;
}
- stmt_query.append(STRING_WITH_LEN("CREATE "));
+ const LEX_STRING command[3]=
+ {{ C_STRING_WITH_LEN("CREATE ") },
+ { C_STRING_WITH_LEN("ALTER ") },
+ { C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
+ stmt_query.append(command[thd->lex->create_view_mode].str,
+ command[thd->lex->create_view_mode].length);
append_definer(thd, &stmt_query, &definer_user, &definer_host);