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/session.h>
00024 #include <drizzled/session/cache.h>
00025 #include <plugin/utility_functions/functions.h>
00026
00027 namespace drizzled {
00028 namespace utility_functions {
00029
00030 int64_t Kill::val_int()
00031 {
00032 int64_t session_id_for_kill= args[0]->val_int();
00033
00034 if (getSession().getSessionId() == session_id_for_kill)
00035 {
00036 my_error(drizzled::ER_KILL_DENY_SELF_ERROR, MYF(0));
00037 return 0;
00038 }
00039
00040 Session::shared_ptr die_session(session::Cache::find(session_id_for_kill));
00041
00042 if (not die_session)
00043 {
00044 my_error(drizzled::ER_NO_SUCH_THREAD, session_id_for_kill, MYF(0));
00045 return 0;
00046 }
00047
00048 if (not die_session->isViewable(*getSession().user()))
00049 {
00050 my_error(drizzled::ER_KILL_DENIED_ERROR, session_id_for_kill, MYF(0));
00051 return 0;
00052 }
00053
00054 die_session->awake(arg_count == 2 ? Session::KILL_QUERY : Session::KILL_CONNECTION);
00055
00056 return session_id_for_kill;
00057 }
00058
00059 }
00060 }