~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/statement/kill.cc

  • Committer: Monty Taylor
  • Date: 2011-02-13 17:26:39 UTC
  • mfrom: (2157.2.2 give-in-to-pkg-config)
  • mto: This revision was merged to the branch mainline in revision 2166.
  • Revision ID: mordred@inaugust.com-20110213172639-nhy7i72sfhoq13ms
Merged in pkg-config fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2009 Sun Microsystems
 
4
 *  Copyright (C) 2009 Sun Microsystems, Inc.
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
21
21
#include "config.h"
22
22
#include <drizzled/show.h>
23
23
#include <drizzled/session.h>
 
24
#include <drizzled/session/cache.h>
24
25
#include <drizzled/statement/kill.h>
25
26
 
26
27
namespace drizzled
27
28
{
28
29
 
 
30
namespace statement
 
31
{
 
32
 
 
33
Kill::Kill(Session *in_session, Item *item, bool is_query_kill) :
 
34
  Statement(in_session)
 
35
  {
 
36
    if (is_query_kill)
 
37
    {
 
38
      getSession()->getLex()->type= ONLY_KILL_QUERY;
 
39
    }
 
40
 
 
41
    getSession()->getLex()->value_list.empty();
 
42
    getSession()->getLex()->value_list.push_front(item);
 
43
    getSession()->getLex()->sql_command= SQLCOM_KILL;
 
44
  }
 
45
 
 
46
} // namespace statement
 
47
 
 
48
bool statement::Kill::kill(session_id_t id, bool only_kill_query)
 
49
{
 
50
  drizzled::Session::shared_ptr session_param= session::Cache::singleton().find(id);
 
51
 
 
52
  if (session_param and session_param->isViewable(*getSession()->user()))
 
53
  {
 
54
    session_param->awake(only_kill_query ? Session::KILL_QUERY : Session::KILL_CONNECTION);
 
55
    return true;
 
56
  }
 
57
 
 
58
  return false;
 
59
}
 
60
 
29
61
bool statement::Kill::execute()
30
62
{
31
 
  Item *it= (Item *) session->lex->value_list.head();
 
63
  Item *it= (Item *) getSession()->lex->value_list.head();
32
64
 
33
 
  if ((! it->fixed && it->fix_fields(session->lex->session, &it)) || 
34
 
      it->check_cols(1))
 
65
  if ((not it->fixed && it->fix_fields(getSession()->lex->session, &it)) || it->check_cols(1))
35
66
  {
36
67
    my_message(ER_SET_CONSTANTS_ONLY, 
37
68
               ER(ER_SET_CONSTANTS_ONLY),
38
69
               MYF(0));
39
70
    return true;
40
71
  }
41
 
  sql_kill(session, (ulong) it->val_int(), session->lex->type & ONLY_KILL_QUERY);
 
72
 
 
73
  if (kill(static_cast<session_id_t>(it->val_int()), getSession()->lex->type & ONLY_KILL_QUERY))
 
74
  {
 
75
    getSession()->my_ok();
 
76
  }
 
77
  else
 
78
  {
 
79
    my_error(ER_NO_SUCH_THREAD, MYF(0), it->val_int());
 
80
  }
 
81
 
42
82
  return false;
43
83
}
44
84