~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/statement/kill.cc

  • Committer: Brian Aker
  • Date: 2011-02-22 06:12:02 UTC
  • mfrom: (2190.1.6 drizzle-build)
  • Revision ID: brian@tangent.org-20110222061202-k03czxykqy4x9hjs
List update, header fixes, multiple symbols, and David deletes some code.

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
18
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
19
 */
20
20
 
21
 
#include "config.h"
 
21
#include <config.h>
22
22
#include <drizzled/show.h>
23
23
#include <drizzled/session.h>
24
24
#include <drizzled/session/cache.h>
27
27
namespace drizzled
28
28
{
29
29
 
30
 
static bool kill_one_thread(session_id_t id, bool only_kill_query)
31
 
{
32
 
  drizzled::Session::shared_ptr session= session::Cache::singleton().find(id);
33
 
 
34
 
  if (session and session->isViewable())
35
 
  {
36
 
    session->awake(only_kill_query ? Session::KILL_QUERY : Session::KILL_CONNECTION);
 
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.clear();
 
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);
37
55
    return true;
38
56
  }
39
57
 
42
60
 
43
61
bool statement::Kill::execute()
44
62
{
45
 
  Item *it= (Item *) session->lex->value_list.head();
 
63
  Item *it= (Item *) getSession()->getLex()->value_list.head();
46
64
 
47
 
  if ((not it->fixed && it->fix_fields(session->lex->session, &it)) || it->check_cols(1))
 
65
  if ((not it->fixed && it->fix_fields(getSession()->getLex()->session, &it)) || it->check_cols(1))
48
66
  {
49
67
    my_message(ER_SET_CONSTANTS_ONLY, 
50
68
               ER(ER_SET_CONSTANTS_ONLY),
52
70
    return true;
53
71
  }
54
72
 
55
 
  if (kill_one_thread(static_cast<session_id_t>(it->val_int()), session->lex->type & ONLY_KILL_QUERY))
 
73
  if (kill(static_cast<session_id_t>(it->val_int()), getSession()->getLex()->type & ONLY_KILL_QUERY))
56
74
  {
57
 
    session->my_ok();
 
75
    getSession()->my_ok();
58
76
  }
59
77
  else
60
78
  {