1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems, Inc.
4
* Copyright (C) 2008 Sun Microsystems
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
#ifndef DRIZZLED_OPEN_TABLES_STATE_H
22
22
#define DRIZZLED_OPEN_TABLES_STATE_H
24
#include "drizzled/lock.h"
25
#include "drizzled/query_id.h"
30
class CachedDirectory;
33
26
Class that holds information about tables which were opened and locked
51
43
or for an intermediate table used in ALTER.
52
44
XXX Why are internal temporary tables added to this list?
55
46
Table *temporary_tables;
59
Table *getTemporaryTables()
61
return temporary_tables;
65
Mark all temporary tables which were used by the current statement or
66
substatement as free for reuse, but only if the query_id can be cleared.
68
@param session thread context
70
@remark For temp tables associated with a open SQL HANDLER the query_id
71
is not reset until the HANDLER is closed.
73
void mark_temp_tables_as_free_for_reuse();
76
void close_temporary_tables();
79
void close_temporary_table(Table *table);
82
// The method below just handles the de-allocation of the table. In
83
// a better memory type world, this would not be needed.
84
void nukeTable(Table *table);
87
/* Work with temporary tables */
88
Table *find_temporary_table(const identifier::Table &identifier);
90
void dumpTemporaryTableNames(const char *id);
91
int drop_temporary_table(const drizzled::identifier::Table &identifier);
92
bool rm_temporary_table(plugin::StorageEngine *base, const identifier::Table &identifier);
93
bool rm_temporary_table(const drizzled::identifier::Table &identifier, bool best_effort= false);
94
Table *open_temporary_table(const drizzled::identifier::Table &identifier,
95
bool link_in_list= true);
97
virtual query_id_t getQueryId() const= 0;
100
48
Table *derived_tables;
104
Table *getDerivedTables()
106
return derived_tables;
109
void setDerivedTables(Table *arg)
114
void clearDerivedTables()
117
derived_tables= NULL; // They should all be invalid by this point
121
50
During a MySQL session, one can lock tables in two modes: automatic
122
51
or manual. In automatic mode all necessary tables are locked just before
130
59
the 'LOCK_TABLES' chapter of the MySQL manual.
131
60
See also lock_tables() for details.
136
65
CREATE-SELECT keeps an extra lock for the table being
137
66
created. This field is used to keep the extra lock available for
138
67
lower level routines, which would otherwise miss that lock.
140
DrizzleLock *extra_lock;
69
DRIZZLE_LOCK *extra_lock;
143
72
uint32_t current_tablenr;
75
Flags with information about the open tables state.
77
bool backups_available;
146
80
This constructor serves for creation of Open_tables_state instances
147
81
which are used as backup storage.
149
Open_tables_state() :
158
virtual ~Open_tables_state() {}
160
void doGetTableNames(CachedDirectory &directory,
161
const identifier::Schema &schema_identifier,
162
std::set<std::string>& set_of_names);
163
void doGetTableNames(const identifier::Schema &schema_identifier,
164
std::set<std::string>& set_of_names);
166
void doGetTableIdentifiers(CachedDirectory &directory,
167
const identifier::Schema &schema_identifier,
168
identifier::Table::vector &set_of_identifiers);
169
void doGetTableIdentifiers(const identifier::Schema &schema_identifier,
170
identifier::Table::vector &set_of_identifiers);
172
int doGetTableDefinition(const drizzled::identifier::Table &identifier,
173
message::Table &table_proto);
174
bool doDoesTableExist(const drizzled::identifier::Table &identifier);
83
Open_tables_state() : backups_available(false) { }
177
85
Open_tables_state(uint64_t version_arg);
87
void set_open_tables_state(Open_tables_state *state)
92
void reset_open_tables_state()
94
open_tables= temporary_tables= derived_tables= NULL;
95
extra_lock= lock= NULL;
96
backups_available= false;
180
} /* namespace drizzled */
182
100
#endif /* DRIZZLED_OPEN_TABLES_STATE_H */