~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"
1900.3.1 by Andrew Hutchings
Add FLUSH GLOBAL STATUS; command
27
#include "drizzled/plugin/logging.h"
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
28
1130.3.12 by Monty Taylor
using namespace drizzled; to namespace drizzled { in statement/
29
namespace drizzled
30
{
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
31
32
bool statement::Flush::execute()
33
{
34
  /*
35
   * reloadCache() will tell us if we are allowed to write to the
36
   * binlog or not.
37
   */
1921.4.13 by Brian Aker
Fix issue where session info might not be correct.
38
  if (not reloadCache())
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
39
  {
40
    /*
41
     * We WANT to write and we CAN write.
42
     * ! we write after unlocking the table.
43
     *
44
     * Presumably, RESET and binlog writing doesn't require synchronization
45
     */
1921.4.13 by Brian Aker
Fix issue where session info might not be correct.
46
    write_bin_log(session, *session->getQueryString());
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
47
    session->my_ok();
48
  }
49
50
  return false;
51
}
52
53
bool statement::Flush::reloadCache()
54
{
55
  bool result= false;
56
  TableList *tables= (TableList *) session->lex->select_lex.table_list.first;
57
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.
58
  if (flush_log)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
59
  {
1152.1.3 by Brian Aker
refactored drizzled::plugin::StorageEngine::flushLogs()
60
    if (plugin::StorageEngine::flushLogs(NULL))
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
61
    {
62
      result= true;
63
    }
64
  }
65
  /*
66
    Note that if REFRESH_READ_LOCK bit is set then REFRESH_TABLES is set too
67
    (see sql_yacc.yy)
68
  */
1315.2.18 by Stewart Smith
fix flush tables
69
  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.
70
  {
1315.2.18 by Stewart Smith
fix flush tables
71
    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.
72
    {
1910.2.2 by Brian Aker
First pass through the global lock refactor merge.
73
      if (session->lockGlobalReadLock())
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
74
      {
75
        return true; /* Killed */
76
      }
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.
77
      result= session->close_cached_tables(tables, true, true);
78
1910.2.2 by Brian Aker
First pass through the global lock refactor merge.
79
      if (session->makeGlobalReadLockBlockCommit()) /* Killed */
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
80
      {
81
        /* Don't leave things in a half-locked state */
1910.2.2 by Brian Aker
First pass through the global lock refactor merge.
82
        session->unlockGlobalReadLock();
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
83
        return true;
84
      }
85
    }
86
    else
87
    {
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.
88
      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.
89
    }
90
  }
91
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.
92
  if (session && flush_status)
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
93
  {
94
    session->refresh_status();
95
  }
96
1900.3.1 by Andrew Hutchings
Add FLUSH GLOBAL STATUS; command
97
  if (session && flush_global_status)
98
  {
99
    memset(&current_global_counters, 0, sizeof(current_global_counters));
100
    plugin::Logging::resetStats(session);
101
    session->refresh_status();
102
  }
103
104
  return result;
1100.3.48 by Padraig O'Sullivan
Extracted the FLUSH command into its own class and implementation files.
105
}
1130.3.12 by Monty Taylor
using namespace drizzled; to namespace drizzled { in statement/
106
107
}