17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
20
#ifndef DRIZZLED_SESSION_H
23
21
#define DRIZZLED_SESSION_H
23
#include "drizzled/cursor.h"
24
#include "drizzled/diagnostics_area.h"
25
#include "drizzled/file_exchange.h"
26
#include "drizzled/identifier.h"
27
#include "drizzled/internal_error_handler.h"
28
#include "drizzled/my_hash.h"
29
#include "drizzled/named_savepoint.h"
30
#include "drizzled/open_tables_state.h"
25
31
#include "drizzled/plugin.h"
26
#include "drizzled/sql_locale.h"
32
#include "drizzled/plugin/authorization.h"
33
#include "drizzled/pthread_globals.h"
34
#include "drizzled/query_id.h"
27
35
#include "drizzled/resource_context.h"
28
#include "drizzled/cursor.h"
29
#include "drizzled/current_session.h"
36
#include "drizzled/select_result_interceptor.h"
30
37
#include "drizzled/sql_error.h"
31
#include "drizzled/file_exchange.h"
32
#include "drizzled/select_result_interceptor.h"
38
#include "drizzled/sql_locale.h"
33
39
#include "drizzled/statistics_variables.h"
34
#include "drizzled/xid.h"
35
#include "drizzled/query_id.h"
36
#include "drizzled/named_savepoint.h"
37
40
#include "drizzled/transaction_context.h"
38
41
#include "drizzled/util/storable.h"
39
#include "drizzled/my_hash.h"
40
#include "drizzled/pthread_globals.h"
42
#include "drizzled/xid.h"
42
46
#include <sys/time.h>
43
47
#include <sys/resource.h>
45
49
#include <algorithm>
51
#include "drizzled/identifier.h"
52
#include "drizzled/open_tables_state.h"
53
#include "drizzled/internal_error_handler.h"
54
#include "drizzled/diagnostics_area.h"
55
#include "drizzled/plugin/authorization.h"
57
54
#include "drizzled/catalog/instance.h"
58
55
#include "drizzled/catalog/local.h"
60
#include <boost/unordered_map.hpp>
57
#include <drizzled/session/property_map.h>
58
#include <drizzled/session/state.h>
59
#include <drizzled/session/table_messages.h>
60
#include <drizzled/session/transactions.h>
61
#include <drizzled/system_variables.h>
62
#include <drizzled/copy_info.h>
63
#include <drizzled/system_variables.h>
64
#include <drizzled/ha_data.h>
62
66
#include <boost/thread/thread.hpp>
63
67
#include <boost/thread/mutex.hpp>
111
112
#define TC_HEURISTIC_RECOVER_ROLLBACK 2
112
113
extern uint32_t tc_heuristic_recover;
116
Local storage for proto that are tmp table. This should be enlarged
117
to hande the entire table-share for a local table. Once Hash is done,
118
we should consider exchanging the map for it.
120
typedef std::map <std::string, message::Table> ProtoCache;
123
The COPY_INFO structure is used by INSERT/REPLACE code.
124
The schema of the row counting by the INSERT/INSERT ... ON DUPLICATE KEY
126
If a row is inserted then the copied variable is incremented.
127
If a row is updated by the INSERT ... ON DUPLICATE KEY UPDATE and the
128
new data differs from the old one then the copied and the updated
129
variables are incremented.
130
The touched variable is incremented if a row was touched by the update part
131
of the INSERT ... ON DUPLICATE KEY UPDATE no matter whether the row
132
was actually changed or not.
137
ha_rows records; /**< Number of processed records */
138
ha_rows deleted; /**< Number of deleted records */
139
ha_rows updated; /**< Number of updated records */
140
ha_rows copied; /**< Number of copied records */
142
ha_rows touched; /* Number of touched records */
143
enum enum_duplicates handle_duplicates;
144
int escape_char, last_errno;
146
/* for INSERT ... UPDATE */
147
List<Item> *update_fields;
148
List<Item> *update_values;
149
/* for VIEW ... WITH CHECK OPTION */
167
} /* namespace drizzled */
169
/** @TODO why is this in the middle of the file */
170
#include <drizzled/lex_column.h>
175
115
class select_result;
178
118
#define Session_SENTRY_MAGIC 0xfeedd1ff
179
119
#define Session_SENTRY_GONE 0xdeadbeef
181
struct drizzle_system_variables
183
drizzle_system_variables()
186
How dynamically allocated system variables are handled:
188
The global_system_variables and max_system_variables are "authoritative"
189
They both should have the same 'version' and 'size'.
190
When attempting to access a dynamic variable, if the session version
191
is out of date, then the session version is updated and realloced if
192
neccessary and bytes copied from global to make up for missing data.
194
ulong dynamic_variables_version;
195
char * dynamic_variables_ptr;
196
uint32_t dynamic_variables_head; /* largest valid variable offset */
197
uint32_t dynamic_variables_size; /* how many bytes are in use */
199
uint64_t myisam_max_extra_sort_file_size;
200
uint64_t max_heap_table_size;
201
uint64_t tmp_table_size;
202
ha_rows select_limit;
203
ha_rows max_join_size;
204
uint64_t auto_increment_increment;
205
uint64_t auto_increment_offset;
206
uint64_t bulk_insert_buff_size;
207
uint64_t join_buff_size;
208
uint32_t max_allowed_packet;
209
uint64_t max_error_count;
210
uint64_t max_length_for_sort_data;
211
size_t max_sort_length;
212
uint64_t min_examined_row_limit;
213
bool optimizer_prune_level;
216
uint32_t optimizer_search_depth;
217
uint32_t div_precincrement;
218
uint64_t preload_buff_size;
219
uint32_t read_buff_size;
220
uint32_t read_rnd_buff_size;
221
bool replicate_query;
222
size_t sortbuff_size;
223
uint32_t thread_handling;
224
uint32_t tx_isolation;
225
uint32_t completion_type;
226
/* Determines which non-standard SQL behaviour should be enabled */
228
uint64_t max_seeks_for_key;
229
size_t range_alloc_block_size;
230
uint32_t query_alloc_block_size;
231
uint32_t query_prealloc_size;
232
uint64_t group_concat_max_len;
233
uint64_t pseudo_thread_id;
235
plugin::StorageEngine *storage_engine;
237
/* Only charset part of these variables is sensible */
238
const CHARSET_INFO *character_set_filesystem;
240
/* Both charset and collation parts of these variables are important */
241
const CHARSET_INFO *collation_server;
243
inline const CHARSET_INFO *getCollation(void)
245
return collation_server;
249
MY_LOCALE *lc_time_names;
251
Time_zone *time_zone;
254
121
extern DRIZZLED_API struct drizzle_system_variables global_system_variables;
256
} /* namespace drizzled */
258
#include "drizzled/sql_lex.h"
264
Storage engine specific thread local data.
269
Storage engine specific thread local data.
270
Lifetime: one user connection.
274
* Resource contexts for both the "statement" and "normal"
277
* Resource context at index 0:
279
* Life time: one statement within a transaction. If @@autocommit is
280
* on, also represents the entire transaction.
282
* Resource context at index 1:
284
* Life time: one transaction within a connection.
288
* If the storage engine does not participate in a transaction,
289
* there will not be a resource context.
291
drizzled::ResourceContext resource_context[2];
293
Ha_data() :ha_ptr(NULL) {}
297
124
* Represents a client connection to the database server.
749
524
ResourceContext *getResourceContext(const plugin::MonitoredInTransaction *monitored,
750
525
size_t index= 0);
753
* Structure used to manage "statement transactions" and
754
* "normal transactions". In autocommit mode, the normal transaction is
755
* equivalent to the statement transaction.
757
* Storage engines will be registered here when they participate in
758
* a transaction. No engine is registered more than once.
760
struct st_transactions {
761
std::deque<NamedSavepoint> savepoints;
764
* The normal transaction (since BEGIN WORK).
766
* Contains a list of all engines that have participated in any of the
767
* statement transactions started within the context of the normal
770
* @note In autocommit mode, this is empty.
772
TransactionContext all;
775
* The statment transaction.
777
* Contains a list of all engines participating in the given statement.
779
* @note In autocommit mode, this will be used to commit/rollback the
780
* normal transaction.
782
TransactionContext stmt;
527
session::Transactions transaction;
798
529
Field *dup_field;
799
530
sigset_t signals;
1854
1586
table::Placeholder *table_cache_insert_placeholder(const identifier::Table &identifier);
1855
1587
bool lock_table_name_if_not_cached(const identifier::Table &identifier, Table **table);
1857
typedef boost::unordered_map<std::string, message::Table, util::insensitive_hash, util::insensitive_equal_to> TableMessageCache;
1861
TableMessageCache table_message_cache;
1864
bool storeTableMessage(const identifier::Table &identifier, message::Table &table_message);
1865
bool removeTableMessage(const identifier::Table &identifier);
1866
bool getTableMessage(const identifier::Table &identifier, message::Table &table_message);
1867
bool doesTableMessageExist(const identifier::Table &identifier);
1868
bool renameTableMessage(const identifier::Table &from, const identifier::Table &to);
1872
TableMessages _table_message_cache;
1590
session::TableMessages _table_message_cache;
1875
TableMessages &getMessageCache()
1593
session::TableMessages &getMessageCache()
1877
1595
return _table_message_cache;