Skip to content
/ server Public
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions mysql-test/suite/galera/r/MDEV-30612.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
connection node_2;
connection node_1;
CREATE TABLE t(a INT) ENGINE=INNODB;
PREPARE s FROM 'CREATE TRIGGER tr AFTER DELETE ON t FOR EACH ROW SET @a=1';
EXECUTE s;
EXECUTE s;
ERROR HY000: Trigger 'test.tr' already exists
DROP TRIGGER tr;
DROP TABLE t;
disconnect node_2;
disconnect node_1;
17 changes: 17 additions & 0 deletions mysql-test/suite/galera/t/MDEV-30612.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#
# MDEV-30612: Executing CREATE TRIGGER prepared statement twice led to a crash.
#

--source include/galera_cluster.inc
--source include/have_innodb.inc

CREATE TABLE t(a INT) ENGINE=INNODB;
PREPARE s FROM 'CREATE TRIGGER tr AFTER DELETE ON t FOR EACH ROW SET @a=1';
EXECUTE s;
--error ER_TRG_ALREADY_EXISTS
EXECUTE s;

DROP TRIGGER tr;
DROP TABLE t;

--source include/galera_end.inc
10 changes: 5 additions & 5 deletions sql/wsrep_mysqld.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3939,25 +3939,25 @@ bool wsrep_create_like_table(THD* thd, TABLE_LIST* table,

int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len)
{
LEX *lex= thd->lex;
String stmt_query;

LEX_CSTRING definer_user;
LEX_CSTRING definer_host;

if (!lex->definer)
LEX_USER *definer= thd->lex->definer;
if (!definer)
{
if (!thd->slave_thread)
{
if (!(lex->definer= create_default_definer(thd, false)))
if (!(definer= create_default_definer(thd, false)))
return 1;
}
}

if (lex->definer)
if (definer)
{
/* SUID trigger. */
LEX_USER *d= get_current_user(thd, lex->definer);
LEX_USER *d= get_current_user(thd, definer);

if (!d)
return 1;
Expand Down