Loading mysql-test/r/ndb_alter_table.result +1 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,7 @@ a b c 2 two two alter table t1 drop index c; 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'; a b c 2 two two Loading mysql-test/r/ndb_multi.result +1 −0 Original line number Diff line number Diff line Loading @@ -47,3 +47,4 @@ t2 t3 t4 drop table t1, t2, t3, t4; drop table t1, t3, t4; mysql-test/t/ndb_alter_table.test +1 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ select * from t1 where b = 'two'; connection server1; alter table t1 drop index c; connection server2; --error 1146 --error 1105 select * from t1 where b = 'two'; select * from t1 where b = 'two'; connection server1; Loading mysql-test/t/ndb_multi.test +2 −0 Original line number Diff line number Diff line Loading @@ -40,5 +40,7 @@ show status like 'handler_discover%'; show tables; drop table t1, t2, t3, t4; connection server2; drop table t1, t3, t4; sql/ha_ndbcluster.cc +28 −2 Original line number Diff line number Diff line Loading @@ -113,7 +113,6 @@ static const err_code_mapping err_map[]= { 4244, HA_ERR_TABLE_EXIST, 1 }, { 709, HA_ERR_NO_SUCH_TABLE, 1 }, { 284, HA_ERR_NO_SUCH_TABLE, 1 }, { 266, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, { 274, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, Loading Loading @@ -363,7 +362,7 @@ void ha_ndbcluster::invalidateDictionaryCache() int ha_ndbcluster::ndb_err(NdbConnection *trans) { int res; const NdbError err= trans->getNdbError(); NdbError err= trans->getNdbError(); DBUG_ENTER("ndb_err"); ERR_PRINT(err); Loading @@ -371,6 +370,33 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) case NdbError::SchemaError: { 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; } default: Loading Loading
mysql-test/r/ndb_alter_table.result +1 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,7 @@ a b c 2 two two alter table t1 drop index c; 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'; a b c 2 two two Loading
mysql-test/r/ndb_multi.result +1 −0 Original line number Diff line number Diff line Loading @@ -47,3 +47,4 @@ t2 t3 t4 drop table t1, t2, t3, t4; drop table t1, t3, t4;
mysql-test/t/ndb_alter_table.test +1 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ select * from t1 where b = 'two'; connection server1; alter table t1 drop index c; connection server2; --error 1146 --error 1105 select * from t1 where b = 'two'; select * from t1 where b = 'two'; connection server1; Loading
mysql-test/t/ndb_multi.test +2 −0 Original line number Diff line number Diff line Loading @@ -40,5 +40,7 @@ show status like 'handler_discover%'; show tables; drop table t1, t2, t3, t4; connection server2; drop table t1, t3, t4;
sql/ha_ndbcluster.cc +28 −2 Original line number Diff line number Diff line Loading @@ -113,7 +113,6 @@ static const err_code_mapping err_map[]= { 4244, HA_ERR_TABLE_EXIST, 1 }, { 709, HA_ERR_NO_SUCH_TABLE, 1 }, { 284, HA_ERR_NO_SUCH_TABLE, 1 }, { 266, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, { 274, HA_ERR_LOCK_WAIT_TIMEOUT, 1 }, Loading Loading @@ -363,7 +362,7 @@ void ha_ndbcluster::invalidateDictionaryCache() int ha_ndbcluster::ndb_err(NdbConnection *trans) { int res; const NdbError err= trans->getNdbError(); NdbError err= trans->getNdbError(); DBUG_ENTER("ndb_err"); ERR_PRINT(err); Loading @@ -371,6 +370,33 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) case NdbError::SchemaError: { 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; } default: Loading