~drizzle-trunk/drizzle/development

1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2009 Sun Microsystems
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; either version 2 of the License, or
9
 *  (at your option) any later version.
10
 *
11
 *  This program is distributed in the hope that it will be useful,
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  GNU General Public License for more details.
15
 *
16
 *  You should have received a copy of the GNU General Public License
17
 *  along with this program; if not, write to the Free Software
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
1241.9.36 by Monty Taylor
ZOMG. I deleted drizzled/server_includes.h.
21
#include "config.h"
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
22
#include <drizzled/show.h>
23
#include <drizzled/session.h>
24
#include <drizzled/lock.h>
25
#include <drizzled/statement/flush.h>
1241.9.23 by Monty Taylor
Removed sql_table.h from server_includes.h.
26
#include "drizzled/sql_table.h"
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
27
1130.3.12 by Monty Taylor
using namespace drizzled; to namespace drizzled { in statement/
28
namespace drizzled
29
{
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
30
31
bool statement::Flush::execute()
32
{
33
  /*
34
   * reloadCache() will tell us if we are allowed to write to the
35
   * binlog or not.
36
   */
37
  if (! reloadCache())
38
  {
39
    /*
40
     * We WANT to write and we CAN write.
41
     * ! we write after unlocking the table.
42
     *
43
     * Presumably, RESET and binlog writing doesn't require synchronization
44
     */
1280.3.11 by Padraig O'Sullivan
Changed the query member of Session to be std::string
45
    write_bin_log(session, session->query.c_str());
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
46
    session->my_ok();
47
  }
48
49
  return false;
50
}
51
52
bool statement::Flush::reloadCache()
53
{
54
  bool result= false;
55
  TableList *tables= (TableList *) session->lex->select_lex.table_list.first;
56
1315.2.17 by Stewart Smith
move FLUSH statement to use boolean values in statement::Flush instead of overloading Lex->type with REFRESH_STATUS and others.
57
  if (flush_log)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
58
  {
1152.1.3 by Brian Aker
refactored drizzled::plugin::StorageEngine::flushLogs()
59
    if (plugin::StorageEngine::flushLogs(NULL))
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
60
    {
61
      result= true;
62
    }
63
  }
64
  /*
65
    Note that if REFRESH_READ_LOCK bit is set then REFRESH_TABLES is set too
66
    (see sql_yacc.yy)
67
  */
1315.2.18 by Stewart Smith
fix flush tables
68
  if (flush_tables || flush_tables_with_read_lock)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
69
  {
1315.2.18 by Stewart Smith
fix flush tables
70
    if (session && flush_tables_with_read_lock)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
71
    {
72
      if (lock_global_read_lock(session))
73
      {
74
        return true; /* Killed */
75
      }
1315.2.17 by Stewart Smith
move FLUSH statement to use boolean values in statement::Flush instead of overloading Lex->type with REFRESH_STATUS and others.
76
      result= session->close_cached_tables(tables, true, true);
77
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
78
      if (make_global_read_lock_block_commit(session)) /* Killed */
79
      {
80
        /* Don't leave things in a half-locked state */
81
        unlock_global_read_lock(session);
82
        return true;
83
      }
84
    }
85
    else
86
    {
1315.2.17 by Stewart Smith
move FLUSH statement to use boolean values in statement::Flush instead of overloading Lex->type with REFRESH_STATUS and others.
87
      result= session->close_cached_tables(tables, true, false);
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
88
    }
89
  }
90
1315.2.17 by Stewart Smith
move FLUSH statement to use boolean values in statement::Flush instead of overloading Lex->type with REFRESH_STATUS and others.
91
  if (session && flush_status)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
92
  {
93
    session->refresh_status();
94
  }
95
96
 return result;
97
}
1130.3.12 by Monty Taylor
using namespace drizzled; to namespace drizzled { in statement/
98
99
}