~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/open_tables_state.h

  • Committer: Brian Aker
  • Date: 2009-02-08 03:02:04 UTC
  • Revision ID: brian@tangent.org-20090208030204-3gz6xwcq5niux5nm
Class rewrite of Session (aka get all of the junk out)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
 
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
 
3
 *
 
4
 *  Copyright (C) 2008 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; version 2 of the License.
 
9
 *
 
10
 *  This program is distributed in the hope that it will be useful,
 
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 *  GNU General Public License for more details.
 
14
 *
 
15
 *  You should have received a copy of the GNU General Public License
 
16
 *  along with this program; if not, write to the Free Software
 
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
18
 */
 
19
 
 
20
 
 
21
#ifndef DRIZZLED_OPEN_TABLES_STATE_H
 
22
#define DRIZZLED_OPEN_TABLES_STATE_H
 
23
 
 
24
 
 
25
/**
 
26
  Class that holds information about tables which were opened and locked
 
27
  by the thread. It is also used to save/restore this information in
 
28
  push_open_tables_state()/pop_open_tables_state().
 
29
*/
 
30
 
 
31
class Open_tables_state
 
32
{
 
33
public:
 
34
  /**
 
35
    List of regular tables in use by this thread. Contains temporary and
 
36
    base tables that were opened with @see open_tables().
 
37
  */
 
38
  Table *open_tables;
 
39
  /**
 
40
    List of temporary tables used by this thread. Contains user-level
 
41
    temporary tables, created with CREATE TEMPORARY TABLE, and
 
42
    internal temporary tables, created, e.g., to resolve a SELECT,
 
43
    or for an intermediate table used in ALTER.
 
44
    XXX Why are internal temporary tables added to this list?
 
45
  */
 
46
  Table *temporary_tables;
 
47
  /**
 
48
    List of tables that were opened with HANDLER OPEN and are
 
49
    still in use by this thread.
 
50
  */
 
51
  Table *handler_tables;
 
52
  Table *derived_tables;
 
53
  /*
 
54
    During a MySQL session, one can lock tables in two modes: automatic
 
55
    or manual. In automatic mode all necessary tables are locked just before
 
56
    statement execution, and all acquired locks are stored in 'lock'
 
57
    member. Unlocking takes place automatically as well, when the
 
58
    statement ends.
 
59
    Manual mode comes into play when a user issues a 'LOCK TABLES'
 
60
    statement. In this mode the user can only use the locked tables.
 
61
    Trying to use any other tables will give an error. The locked tables are
 
62
    stored in 'locked_tables' member.  Manual locking is described in
 
63
    the 'LOCK_TABLES' chapter of the MySQL manual.
 
64
    See also lock_tables() for details.
 
65
  */
 
66
  DRIZZLE_LOCK *lock;
 
67
  /*
 
68
    Tables that were locked with explicit or implicit LOCK TABLES.
 
69
    (Implicit LOCK TABLES happens when we are prelocking tables for
 
70
     execution of statement which uses stored routines. See description
 
71
     Session::prelocked_mode for more info.)
 
72
  */
 
73
  DRIZZLE_LOCK *locked_tables;
 
74
 
 
75
  /*
 
76
    CREATE-SELECT keeps an extra lock for the table being
 
77
    created. This field is used to keep the extra lock available for
 
78
    lower level routines, which would otherwise miss that lock.
 
79
   */
 
80
  DRIZZLE_LOCK *extra_lock;
 
81
 
 
82
  ulong version;
 
83
  uint32_t current_tablenr;
 
84
 
 
85
  enum enum_flags {
 
86
    BACKUPS_AVAIL = (1U << 0)     /* There are backups available */
 
87
  };
 
88
 
 
89
  /*
 
90
    Flags with information about the open tables state.
 
91
  */
 
92
  uint32_t state_flags;
 
93
 
 
94
  /*
 
95
    This constructor serves for creation of Open_tables_state instances
 
96
    which are used as backup storage.
 
97
  */
 
98
  Open_tables_state() : state_flags(0U) { }
 
99
 
 
100
  Open_tables_state(ulong version_arg);
 
101
 
 
102
  void set_open_tables_state(Open_tables_state *state)
 
103
  {
 
104
    *this= *state;
 
105
  }
 
106
 
 
107
  void reset_open_tables_state()
 
108
  {
 
109
    open_tables= temporary_tables= handler_tables= derived_tables= 0;
 
110
    extra_lock= lock= locked_tables= 0;
 
111
    state_flags= 0U;
 
112
  }
 
113
};
 
114
 
 
115
#endif /* DRIZZLED_OPEN_TABLES_STATE_H */