Commit 9cc67b9e authored by unknown's avatar unknown
Browse files

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

into neptunus.(none):/home/msvensson/mysql/bug6762

parents a503a112 e0216a7e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -47,3 +47,4 @@ t2
t3
t4
drop table t1, t2, t3, t4;
drop table t1, t3, t4;
+1 −1
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -40,5 +40,7 @@ show status like 'handler_discover%';
show tables;

drop table t1, t2, t3, t4;
connection server2;
drop table t1, t3, t4;

+28 −2
Original line number Diff line number Diff line
@@ -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 },
@@ -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);
@@ -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: