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/kill.h>
00024 #include <drizzled/session.h>
00025 #include <drizzled/statement/kill.h>
00026
00027 namespace drizzled
00028 {
00029
00030 namespace statement
00031 {
00032
00033 Kill::Kill(Session *in_session, Item *item, bool is_query_kill) :
00034 Statement(in_session)
00035 {
00036 if (is_query_kill)
00037 {
00038 lex().type= ONLY_KILL_QUERY;
00039 }
00040
00041 lex().value_list.clear();
00042 lex().value_list.push_front(item);
00043 set_command(SQLCOM_KILL);
00044 }
00045
00046 }
00047
00048 bool statement::Kill::execute()
00049 {
00050 Item *it= &lex().value_list.front();
00051
00052 if ((not it->fixed && it->fix_fields(lex().session, &it)) || it->check_cols(1))
00053 {
00054 my_message(ER_SET_CONSTANTS_ONLY,
00055 ER(ER_SET_CONSTANTS_ONLY),
00056 MYF(0));
00057 return true;
00058 }
00059
00060 if (drizzled::kill(*session().user(), static_cast<session_id_t>(it->val_int()), lex().type & ONLY_KILL_QUERY))
00061 {
00062 session().my_ok();
00063 }
00064 else
00065 {
00066 my_error(ER_NO_SUCH_THREAD, MYF(0), it->val_int());
00067 }
00068
00069 return false;
00070 }
00071
00072 }
00073