Commit f8ae1e53 authored by msvensson@neptunus.(none)'s avatar msvensson@neptunus.(none)

Merge neptunus.(none):/home/msvensson/mysql/mysql-4.1

into neptunus.(none):/home/msvensson/mysql/bug6762
parents 247f2ac5 71ccc569
...@@ -179,7 +179,7 @@ a b c ...@@ -179,7 +179,7 @@ a b c
2 two two 2 two two
alter table t1 drop index c; alter table t1 drop index c;
select * from t1 where b = 'two'; select * from t1 where b = 'two';
ERROR 42S02: Table 'test.t1' doesn't exist ERROR HY000: Table definition has changed, please retry transaction
select * from t1 where b = 'two'; select * from t1 where b = 'two';
a b c a b c
2 two two 2 two two
......
...@@ -47,3 +47,4 @@ t2 ...@@ -47,3 +47,4 @@ t2
t3 t3
t4 t4
drop table t1, t2, t3, t4; drop table t1, t2, t3, t4;
drop table t1, t3, t4;
...@@ -143,7 +143,7 @@ select * from t1 where b = 'two'; ...@@ -143,7 +143,7 @@ select * from t1 where b = 'two';
connection server1; connection server1;
alter table t1 drop index c; alter table t1 drop index c;
connection server2; connection server2;
--error 1146 --error 1105
select * from t1 where b = 'two'; select * from t1 where b = 'two';
select * from t1 where b = 'two'; select * from t1 where b = 'two';
connection server1; connection server1;
......
...@@ -40,5 +40,7 @@ show status like 'handler_discover%'; ...@@ -40,5 +40,7 @@ show status like 'handler_discover%';
show tables; show tables;
drop table t1, t2, t3, t4; drop table t1, t2, t3, t4;
connection server2;
drop table t1, t3, t4;
...@@ -113,7 +113,6 @@ static const err_code_mapping err_map[]= ...@@ -113,7 +113,6 @@ static const err_code_mapping err_map[]=
{ 4244, HA_ERR_TABLE_EXIST, 1 }, { 4244, HA_ERR_TABLE_EXIST, 1 },
{ 709, HA_ERR_NO_SUCH_TABLE, 1 }, { 709, HA_ERR_NO_SUCH_TABLE, 1 },
{ 284, HA_ERR_NO_SUCH_TABLE, 1 },
{ 266, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, { 266, HA_ERR_LOCK_WAIT_TIMEOUT, 1 },
{ 274, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, { 274, HA_ERR_LOCK_WAIT_TIMEOUT, 1 },
...@@ -363,7 +362,7 @@ void ha_ndbcluster::invalidateDictionaryCache() ...@@ -363,7 +362,7 @@ void ha_ndbcluster::invalidateDictionaryCache()
int ha_ndbcluster::ndb_err(NdbConnection *trans) int ha_ndbcluster::ndb_err(NdbConnection *trans)
{ {
int res; int res;
const NdbError err= trans->getNdbError(); NdbError err= trans->getNdbError();
DBUG_ENTER("ndb_err"); DBUG_ENTER("ndb_err");
ERR_PRINT(err); ERR_PRINT(err);
...@@ -371,6 +370,33 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) ...@@ -371,6 +370,33 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans)
case NdbError::SchemaError: case NdbError::SchemaError:
{ {
invalidateDictionaryCache(); invalidateDictionaryCache();
if (err.code==284)
{
/*
Check if the table is _really_ gone or if the table has
been alterend and thus changed table id
*/
NDBDICT *dict= get_ndb()->getDictionary();
DBUG_PRINT("info", ("Check if table %s is really gone", m_tabname));
if (!(dict->getTable(m_tabname)))
{
err= dict->getNdbError();
DBUG_PRINT("info", ("Table not found, error: %d", err.code));
if (err.code != 709)
DBUG_RETURN(1);
}
else
{
DBUG_PRINT("info", ("Table exist but must have changed"));
/* In 5.0, this should be replaced with a mapping to a mysql error */
my_printf_error(ER_UNKNOWN_ERROR,
"Table definition has changed, "\
"please retry transaction",
MYF(0));
DBUG_RETURN(1);
}
}
break; break;
} }
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment