mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #25522 Update with IN syntax Clustertable + Trigger leads to mysqld segfault: in start_stmt, only change query_state if starting a new transactions, in read_multi_range_next, change query state when end is reached
This commit is contained in:
@ -381,3 +381,20 @@ SELECT id, tag, doc, type FROM t1 WHERE id IN ('flipper','sakila');
|
||||
id tag doc type
|
||||
sakila 1 Some text goes here text
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
var1 int(2) NOT NULL,
|
||||
var2 int(2) NOT NULL,
|
||||
PRIMARY KEY (var1)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=ascii CHECKSUM=1;
|
||||
CREATE TABLE t2 (
|
||||
var1 int(2) NOT NULL,
|
||||
var2 int(2) NOT NULL,
|
||||
PRIMARY KEY (var1)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=ascii CHECKSUM=1;
|
||||
CREATE TRIGGER testtrigger
|
||||
AFTER UPDATE ON t1 FOR EACH ROW BEGIN
|
||||
REPLACE INTO t2 SELECT * FROM t1 WHERE t1.var1 = NEW.var1;END|
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
||||
UPDATE t1 SET var2 = 9 WHERE var1 IN(1,2,3);
|
||||
DROP TRIGGER testtrigger;
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -253,3 +253,32 @@ SELECT id, tag, doc, type FROM t1 WHERE id IN ('flipper','orka');
|
||||
SELECT id, tag, doc, type FROM t1 WHERE id IN ('flipper','sakila');
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#bug#25522
|
||||
CREATE TABLE t1 (
|
||||
var1 int(2) NOT NULL,
|
||||
var2 int(2) NOT NULL,
|
||||
PRIMARY KEY (var1)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=ascii CHECKSUM=1;
|
||||
|
||||
|
||||
CREATE TABLE t2 (
|
||||
var1 int(2) NOT NULL,
|
||||
var2 int(2) NOT NULL,
|
||||
PRIMARY KEY (var1)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=ascii CHECKSUM=1;
|
||||
|
||||
|
||||
DELIMITER |;
|
||||
CREATE TRIGGER testtrigger
|
||||
AFTER UPDATE ON t1 FOR EACH ROW BEGIN
|
||||
REPLACE INTO t2 SELECT * FROM t1 WHERE t1.var1 = NEW.var1;END|
|
||||
DELIMITER ;|
|
||||
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
||||
|
||||
UPDATE t1 SET var2 = 9 WHERE var1 IN(1,2,3);
|
||||
|
||||
DROP TRIGGER testtrigger;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -3877,10 +3877,10 @@ int ha_ndbcluster::start_stmt(THD *thd, thr_lock_type lock_type)
|
||||
ERR_RETURN(ndb->getNdbError());
|
||||
no_uncommitted_rows_reset(thd);
|
||||
thd_ndb->stmt= trans;
|
||||
thd_ndb->query_state&= NDB_QUERY_NORMAL;
|
||||
m_active_trans= trans;
|
||||
trans_register_ha(thd, FALSE, &ndbcluster_hton);
|
||||
}
|
||||
thd_ndb->query_state&= NDB_QUERY_NORMAL;
|
||||
m_active_trans= trans;
|
||||
|
||||
// Start of statement
|
||||
m_retrieve_all_fields= FALSE;
|
||||
@ -6512,7 +6512,11 @@ close_scan:
|
||||
}
|
||||
|
||||
if (multi_range_curr == multi_range_end)
|
||||
{
|
||||
Thd_ndb *thd_ndb= get_thd_ndb(current_thd);
|
||||
thd_ndb->query_state&= NDB_QUERY_NORMAL;
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read remaining ranges
|
||||
|
Reference in New Issue
Block a user