439
returns ENOENT if the file doesn't exists.
441
int StorageEngine::dropTable(Session& session,
442
const TableIdentifier &identifier)
446
message::table::shared_ptr src_proto;
447
StorageEngine *engine;
449
error_proto= StorageEngine::getTableDefinition(session, identifier, src_proto);
451
if (error_proto == ER_CORRUPT_TABLE_DEFINITION)
453
std::string error_message;
454
identifier.getSQLPath(error_message);
456
my_error(ER_CORRUPT_TABLE_DEFINITION, MYF(0),
457
error_message.c_str(),
458
src_proto->InitializationErrorString().c_str());
460
return ER_CORRUPT_TABLE_DEFINITION;
464
engine= StorageEngine::findByName(session, src_proto->engine().name());
466
engine= StorageEngine::findByName(session, "");
470
std::string error_message;
471
identifier.getSQLPath(error_message);
473
my_error(ER_CORRUPT_TABLE_DEFINITION, MYF(0), error_message.c_str(), "");
475
return ER_CORRUPT_TABLE_DEFINITION;
478
error= StorageEngine::dropTable(session, *engine, identifier);
480
if (error_proto && error == 0)
486
int StorageEngine::dropTable(Session& session,
487
StorageEngine &engine,
488
const TableIdentifier &identifier)
438
class DropTableByIdentifier: public std::unary_function<EngineVector::value_type, bool>
440
Session::reference session;
441
TableIdentifier::const_reference identifier;
442
drizzled::error_t &error;
446
DropTableByIdentifier(Session::reference session_arg,
447
TableIdentifier::const_reference identifier_arg,
448
drizzled::error_t &error_arg) :
449
session(session_arg),
450
identifier(identifier_arg),
454
result_type operator() (argument_type engine)
456
if (not engine->doDoesTableExist(session, identifier))
459
int local_error= engine->doDropTable(session, identifier);
467
case HA_ERR_NO_SUCH_TABLE:
469
error= static_cast<drizzled::error_t>(HA_ERR_NO_SUCH_TABLE);
473
error= static_cast<drizzled::error_t>(local_error);
480
bool StorageEngine::dropTable(Session::reference session,
481
TableIdentifier::const_reference identifier,
482
drizzled::error_t &error)
486
EngineVector::const_iterator iter= std::find_if(vector_of_engines.begin(), vector_of_engines.end(),
487
DropTableByIdentifier(session, identifier, error));
493
else if (iter == vector_of_engines.end())
495
error= ER_BAD_TABLE_ERROR;
499
drizzled::message::Cache::singleton().erase(identifier);
504
bool StorageEngine::dropTable(Session& session,
505
const TableIdentifier &identifier)
507
drizzled::error_t error;
509
if (not dropTable(session, identifier, error))
517
bool StorageEngine::dropTable(Session::reference session,
518
StorageEngine &engine,
519
TableIdentifier::const_reference identifier,
520
drizzled::error_t &error)
492
523
engine.setTransactionReadWrite(session);
525
assert(identifier.isTmp());
494
527
if (unlikely(plugin::EventObserver::beforeDropTable(session, identifier)))
900
936
textno=ER_TABLE_DEF_CHANGED;
902
938
case HA_ERR_NO_SUCH_TABLE:
904
my_error(ER_NO_SUCH_TABLE, MYF(0), table->getShare()->getSchemaName(),
905
table->getShare()->getTableName());
939
my_error(ER_NO_SUCH_TABLE, MYF(0), table.getShare()->getSchemaName(),
940
table.getShare()->getTableName());
907
942
case HA_ERR_RBR_LOGGING_FAILED:
908
943
textno= ER_BINLOG_ROW_LOGGING_FAILED;
910
945
case HA_ERR_DROP_INDEX_FK:
913
947
const char *ptr= "???";
914
uint32_t key_nr= table->get_dup_key(error);
948
uint32_t key_nr= table.get_dup_key(error);
915
949
if ((int) key_nr >= 0)
916
ptr= table->key_info[key_nr].name;
950
ptr= table.key_info[key_nr].name;
917
951
my_error(ER_DROP_INDEX_FK, MYF(0), ptr);