00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022
00023 #include <drizzled/show.h>
00024 #include <drizzled/session.h>
00025 #include <drizzled/statement/drop_schema.h>
00026 #include <drizzled/plugin/event_observer.h>
00027 #include <drizzled/sql_lex.h>
00028 #include <drizzled/schema.h>
00029
00030 #include <string>
00031
00032 using namespace std;
00033
00034 namespace drizzled {
00035
00036 bool statement::DropSchema::execute()
00037 {
00038 if (session().inTransaction())
00039 {
00040 my_error(ER_TRANSACTIONAL_DDL_NOT_SUPPORTED, MYF(0));
00041 return true;
00042 }
00043
00044 identifier::Schema schema_identifier(to_string(lex().name));
00045
00046 if (not schema::check(session(), schema_identifier))
00047 {
00048 my_error(ER_WRONG_DB_NAME, schema_identifier);
00049 return false;
00050 }
00051
00052 if (session().inTransaction())
00053 {
00054 my_message(ER_LOCK_OR_ACTIVE_TRANSACTION, ER(ER_LOCK_OR_ACTIVE_TRANSACTION), MYF(0));
00055 return true;
00056 }
00057
00058 bool res = true;
00059 std::string path = schema_identifier.getSQLPath();
00060 if (unlikely(plugin::EventObserver::beforeDropDatabase(session(), path)))
00061 {
00062 my_error(ER_EVENT_OBSERVER_PLUGIN, schema_identifier);
00063 }
00064 else
00065 {
00066 res= schema::drop(session(), schema_identifier, drop_if_exists);
00067 if (unlikely(plugin::EventObserver::afterDropDatabase(session(), path, res)))
00068 {
00069 my_error(ER_EVENT_OBSERVER_PLUGIN, MYF(0), path.c_str());
00070 res = false;
00071 }
00072
00073 }
00074
00075 return res;
00076 }
00077
00078 }