Loading mysql-test/r/ndb_autodiscover.result +1 −1 Original line number Diff line number Diff line Loading @@ -382,7 +382,7 @@ create table t1 (a int primary key) engine=ndb; select * from t1; a select * from t1; ERROR HY000: Can't lock file (errno: 4009) ERROR HY000: Can't lock file (errno: 157) use test; drop database test_only_ndb_tables; CREATE TABLE t9 ( Loading sql/ha_ndbcluster.cc +5 −6 Original line number Diff line number Diff line Loading @@ -203,6 +203,8 @@ static const err_code_mapping err_map[]= { 284, HA_ERR_TABLE_DEF_CHANGED, 0 }, {4009, HA_ERR_NO_CONNECTION, 1 }, { 0, 1, 0 }, { -1, -1, 1 } Loading Loading @@ -5042,14 +5044,11 @@ int ndbcluster_table_exists_in_engine(THD* thd, const char *db, const char *name dict->invalidateTable(name); if (!(tab= dict->getTable(name))) { const NdbError err= dict->getNdbError(); if (err.code == 709) DBUG_RETURN(0); ERR_RETURN(err); ERR_RETURN(dict->getNdbError()); } DBUG_PRINT("info", ("Found table %s", tab->getName())); DBUG_RETURN(1); DBUG_RETURN(HA_ERR_TABLE_EXIST); } Loading Loading @@ -5234,7 +5233,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path, DBUG_PRINT("info", ("%s existed on disk", name)); // The .ndb file exists on disk, but it's not in list of tables in ndb // Verify that handler agrees table is gone. if (ndbcluster_table_exists_in_engine(thd, db, file_name) == 0) if (ndbcluster_table_exists_in_engine(thd, db, file_name) == HA_ERR_NO_SUCH_TABLE) { DBUG_PRINT("info", ("NDB says %s does not exists", file_name)); it.remove(); Loading sql/handler.cc +4 −4 Original line number Diff line number Diff line Loading @@ -2442,14 +2442,14 @@ ha_find_files(THD *thd,const char *db,const char *path, Ask handler if the table exists in engine RETURN 0 Table does not exist 1 Table exists HA_ERR_NO_SUCH_TABLE Table does not exist HA_ERR_TABLE_EXIST Table exists # Error code */ int ha_table_exists_in_engine(THD* thd, const char* db, const char* name) { int error= 0; int error= HA_ERR_NO_SUCH_TABLE; DBUG_ENTER("ha_table_exists_in_engine"); DBUG_PRINT("enter", ("db: %s, name: %s", db, name)); #ifdef HAVE_NDBCLUSTER_DB Loading sql/sql_table.cc +19 −6 Original line number Diff line number Diff line Loading @@ -1696,6 +1696,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, alias); DBUG_RETURN(FALSE); } DBUG_PRINT("info",("1")); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias); DBUG_RETURN(TRUE); } Loading @@ -1706,6 +1707,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, { if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) goto warn; DBUG_PRINT("info",("2")); my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto end; } Loading @@ -1724,14 +1726,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, { bool create_if_not_exists = create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS; if (ha_table_exists_in_engine(thd, db, table_name)) int retcode = ha_table_exists_in_engine(thd, db, table_name); DBUG_PRINT("info", ("exists_in_engine: %u",retcode)); switch (retcode) { DBUG_PRINT("info", ("Table with same name already existed in handler")); case HA_ERR_NO_SUCH_TABLE: /* Normal case, no table exists. we can go and create it */ break; case HA_ERR_TABLE_EXIST: DBUG_PRINT("info", ("Table existed in handler")); if (create_if_not_exists) goto warn; my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto end; break; default: DBUG_PRINT("info", ("error: %u from storage engine", retcode)); my_error(retcode, MYF(0),table_name); goto end; } } Loading Loading
mysql-test/r/ndb_autodiscover.result +1 −1 Original line number Diff line number Diff line Loading @@ -382,7 +382,7 @@ create table t1 (a int primary key) engine=ndb; select * from t1; a select * from t1; ERROR HY000: Can't lock file (errno: 4009) ERROR HY000: Can't lock file (errno: 157) use test; drop database test_only_ndb_tables; CREATE TABLE t9 ( Loading
sql/ha_ndbcluster.cc +5 −6 Original line number Diff line number Diff line Loading @@ -203,6 +203,8 @@ static const err_code_mapping err_map[]= { 284, HA_ERR_TABLE_DEF_CHANGED, 0 }, {4009, HA_ERR_NO_CONNECTION, 1 }, { 0, 1, 0 }, { -1, -1, 1 } Loading Loading @@ -5042,14 +5044,11 @@ int ndbcluster_table_exists_in_engine(THD* thd, const char *db, const char *name dict->invalidateTable(name); if (!(tab= dict->getTable(name))) { const NdbError err= dict->getNdbError(); if (err.code == 709) DBUG_RETURN(0); ERR_RETURN(err); ERR_RETURN(dict->getNdbError()); } DBUG_PRINT("info", ("Found table %s", tab->getName())); DBUG_RETURN(1); DBUG_RETURN(HA_ERR_TABLE_EXIST); } Loading Loading @@ -5234,7 +5233,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path, DBUG_PRINT("info", ("%s existed on disk", name)); // The .ndb file exists on disk, but it's not in list of tables in ndb // Verify that handler agrees table is gone. if (ndbcluster_table_exists_in_engine(thd, db, file_name) == 0) if (ndbcluster_table_exists_in_engine(thd, db, file_name) == HA_ERR_NO_SUCH_TABLE) { DBUG_PRINT("info", ("NDB says %s does not exists", file_name)); it.remove(); Loading
sql/handler.cc +4 −4 Original line number Diff line number Diff line Loading @@ -2442,14 +2442,14 @@ ha_find_files(THD *thd,const char *db,const char *path, Ask handler if the table exists in engine RETURN 0 Table does not exist 1 Table exists HA_ERR_NO_SUCH_TABLE Table does not exist HA_ERR_TABLE_EXIST Table exists # Error code */ int ha_table_exists_in_engine(THD* thd, const char* db, const char* name) { int error= 0; int error= HA_ERR_NO_SUCH_TABLE; DBUG_ENTER("ha_table_exists_in_engine"); DBUG_PRINT("enter", ("db: %s, name: %s", db, name)); #ifdef HAVE_NDBCLUSTER_DB Loading
sql/sql_table.cc +19 −6 Original line number Diff line number Diff line Loading @@ -1696,6 +1696,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, alias); DBUG_RETURN(FALSE); } DBUG_PRINT("info",("1")); my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias); DBUG_RETURN(TRUE); } Loading @@ -1706,6 +1707,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, { if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS) goto warn; DBUG_PRINT("info",("2")); my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto end; } Loading @@ -1724,14 +1726,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, { bool create_if_not_exists = create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS; if (ha_table_exists_in_engine(thd, db, table_name)) int retcode = ha_table_exists_in_engine(thd, db, table_name); DBUG_PRINT("info", ("exists_in_engine: %u",retcode)); switch (retcode) { DBUG_PRINT("info", ("Table with same name already existed in handler")); case HA_ERR_NO_SUCH_TABLE: /* Normal case, no table exists. we can go and create it */ break; case HA_ERR_TABLE_EXIST: DBUG_PRINT("info", ("Table existed in handler")); if (create_if_not_exists) goto warn; my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto end; break; default: DBUG_PRINT("info", ("error: %u from storage engine", retcode)); my_error(retcode, MYF(0),table_name); goto end; } } Loading