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);
494
525
if (unlikely(plugin::EventObserver::beforeDropTable(session, identifier)))