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
|
id tag doc type
|
||||||
sakila 1 Some text goes here text
|
sakila 1 Some text goes here text
|
||||||
DROP TABLE t1;
|
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');
|
SELECT id, tag, doc, type FROM t1 WHERE id IN ('flipper','sakila');
|
||||||
|
|
||||||
DROP TABLE t1;
|
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());
|
ERR_RETURN(ndb->getNdbError());
|
||||||
no_uncommitted_rows_reset(thd);
|
no_uncommitted_rows_reset(thd);
|
||||||
thd_ndb->stmt= trans;
|
thd_ndb->stmt= trans;
|
||||||
|
thd_ndb->query_state&= NDB_QUERY_NORMAL;
|
||||||
|
m_active_trans= trans;
|
||||||
trans_register_ha(thd, FALSE, &ndbcluster_hton);
|
trans_register_ha(thd, FALSE, &ndbcluster_hton);
|
||||||
}
|
}
|
||||||
thd_ndb->query_state&= NDB_QUERY_NORMAL;
|
|
||||||
m_active_trans= trans;
|
|
||||||
|
|
||||||
// Start of statement
|
// Start of statement
|
||||||
m_retrieve_all_fields= FALSE;
|
m_retrieve_all_fields= FALSE;
|
||||||
@ -6512,7 +6512,11 @@ close_scan:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (multi_range_curr == multi_range_end)
|
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);
|
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read remaining ranges
|
* Read remaining ranges
|
||||||
|
Reference in New Issue
Block a user