mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
BUG#29851 TRUNCATE causes error 4350 from cluster in INSERT... ON DUPLICATE KEY UPDATE
mysql-test/r/ndb_alter_table2.result: Add test case for BUG#29851 mysql-test/t/ndb_alter_table2.test: Add test case for BUG#29851 sql/ha_ndbcluster.cc: Indexes are dropped also when dropping table in GlobalDictCache
This commit is contained in:
parent
1cfa76569d
commit
bafa5fe8aa
3 changed files with 59 additions and 1 deletions
|
@ -40,3 +40,22 @@ a b c
|
|||
select * from t1;
|
||||
a b c
|
||||
drop table t1;
|
||||
DROP TABLE IF EXISTS truncate_test;
|
||||
CREATE TABLE truncate_test (
|
||||
i INT PRIMARY KEY,
|
||||
a INT,
|
||||
b VARCHAR(11),
|
||||
UNIQUE KEY (a)
|
||||
) ENGINE = NDB;
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
TRUNCATE truncate_test;
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
SELECT * FROM truncate_test;
|
||||
i a b
|
||||
1 1 test
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
SELECT * FROM truncate_test;
|
||||
i a b
|
||||
1 1 new
|
||||
DROP TABLE truncate_test;
|
||||
|
|
|
@ -81,3 +81,34 @@ select * from t1;
|
|||
select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#For BUG#29851 TRUNCATE causes error 4350 from cluster in INSERT... ON DUPLICATE KEY UPDATE
|
||||
|
||||
connection con1;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS truncate_test;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE truncate_test (
|
||||
i INT PRIMARY KEY,
|
||||
a INT,
|
||||
b VARCHAR(11),
|
||||
UNIQUE KEY (a)
|
||||
) ENGINE = NDB;
|
||||
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
|
||||
connection con2;
|
||||
TRUNCATE truncate_test;
|
||||
|
||||
connection con1;
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
SELECT * FROM truncate_test;
|
||||
|
||||
connection con2;
|
||||
INSERT INTO truncate_test VALUES (1, 1, 'test') ON DUPLICATE KEY UPDATE b = 'new';
|
||||
SELECT * FROM truncate_test;
|
||||
|
||||
DROP TABLE truncate_test;
|
||||
|
|
|
@ -439,7 +439,8 @@ void ha_ndbcluster::no_uncommitted_rows_reset(THD *thd)
|
|||
|
||||
void ha_ndbcluster::invalidate_dictionary_cache(bool global)
|
||||
{
|
||||
NDBDICT *dict= get_ndb()->getDictionary();
|
||||
Ndb * ndb= get_ndb();
|
||||
NDBDICT *dict= ndb->getDictionary();
|
||||
DBUG_ENTER("invalidate_dictionary_cache");
|
||||
DBUG_PRINT("info", ("invalidating %s", m_tabname));
|
||||
|
||||
|
@ -459,6 +460,7 @@ void ha_ndbcluster::invalidate_dictionary_cache(bool global)
|
|||
}
|
||||
else
|
||||
dict->removeCachedTable(m_tabname);
|
||||
build_index_list(ndb, table, ILBP_OPEN);
|
||||
table->s->version=0L; /* Free when thread is ready */
|
||||
/* Invalidate indexes */
|
||||
for (uint i= 0; i < table->s->keys; i++)
|
||||
|
@ -470,17 +472,23 @@ void ha_ndbcluster::invalidate_dictionary_cache(bool global)
|
|||
switch (idx_type) {
|
||||
case PRIMARY_KEY_ORDERED_INDEX:
|
||||
case ORDERED_INDEX:
|
||||
if (!index)
|
||||
break;
|
||||
if (global)
|
||||
dict->invalidateIndex(index->getName(), m_tabname);
|
||||
else
|
||||
dict->removeCachedIndex(index->getName(), m_tabname);
|
||||
break;
|
||||
case UNIQUE_ORDERED_INDEX:
|
||||
if (!index)
|
||||
break;
|
||||
if (global)
|
||||
dict->invalidateIndex(index->getName(), m_tabname);
|
||||
else
|
||||
dict->removeCachedIndex(index->getName(), m_tabname);
|
||||
case UNIQUE_INDEX:
|
||||
if (!unique_index)
|
||||
break;
|
||||
if (global)
|
||||
dict->invalidateIndex(unique_index->getName(), m_tabname);
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue