17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
22
#ifndef DRIZZLED_SESSION_H
21
23
#define DRIZZLED_SESSION_H
25
#include "drizzled/plugin.h"
26
#include "drizzled/sql_locale.h"
27
#include "drizzled/resource_context.h"
28
#include "drizzled/cursor.h"
29
#include "drizzled/current_session.h"
30
#include "drizzled/sql_error.h"
31
#include "drizzled/file_exchange.h"
32
#include "drizzled/select_result_interceptor.h"
33
#include "drizzled/statistics_variables.h"
34
#include "drizzled/xid.h"
35
#include "drizzled/query_id.h"
36
#include "drizzled/named_savepoint.h"
37
#include "drizzled/transaction_context.h"
38
#include "drizzled/util/storable.h"
39
#include "drizzled/my_hash.h"
40
#include "drizzled/pthread_globals.h"
43
#include <sys/resource.h>
23
45
#include <algorithm>
25
#include <boost/make_shared.hpp>
26
#include <boost/thread/condition_variable.hpp>
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
#include "drizzled/catalog/instance.h"
58
#include "drizzled/catalog/local.h"
60
#include <boost/unordered_map.hpp>
62
#include <boost/thread/thread.hpp>
27
63
#include <boost/thread/mutex.hpp>
28
64
#include <boost/thread/shared_mutex.hpp>
29
#include <boost/thread/thread.hpp>
33
#include <sys/resource.h>
65
#include <boost/thread/condition_variable.hpp>
66
#include <boost/make_shared.hpp>
36
#include <drizzled/catalog/instance.h>
37
#include <drizzled/catalog/local.h>
38
#include <drizzled/copy_info.h>
39
#include <drizzled/cursor.h>
40
#include <drizzled/diagnostics_area.h>
41
#include <drizzled/file_exchange.h>
42
#include <drizzled/ha_data.h>
43
#include <drizzled/identifier.h>
44
#include <drizzled/lex_column.h>
45
#include <drizzled/my_hash.h>
46
#include <drizzled/named_savepoint.h>
47
#include <drizzled/open_tables_state.h>
48
#include <drizzled/plugin.h>
49
#include <drizzled/plugin/authorization.h>
50
#include <drizzled/pthread_globals.h>
51
#include <drizzled/query_id.h>
52
#include <drizzled/resource_context.h>
53
#include <drizzled/session/property_map.h>
54
#include <drizzled/session/state.h>
55
#include <drizzled/session/table_messages.h>
56
#include <drizzled/session/transactions.h>
57
#include <drizzled/sql_error.h>
58
#include <drizzled/sql_lex.h>
59
#include <drizzled/sql_locale.h>
60
#include <drizzled/statistics_variables.h>
61
#include <drizzled/system_variables.h>
62
#include <drizzled/system_variables.h>
63
#include <drizzled/table_ident.h>
64
#include <drizzled/transaction_context.h>
65
#include <drizzled/util/storable.h>
66
#include <drizzled/var.h>
67
#include <drizzled/visibility.h>
68
#include "drizzled/visibility.h"
69
70
#define MIN_HANDSHAKE_SIZE 6
106
111
#define TC_HEURISTIC_RECOVER_ROLLBACK 2
107
112
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>
109
178
#define Session_SENTRY_MAGIC 0xfeedd1ff
110
179
#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;
112
254
extern DRIZZLED_API struct drizzle_system_variables global_system_variables;
256
} /* namespace drizzled */
258
#include "drizzled/sql_lex.h"
263
DRIZZLED_API void mark_transaction_to_rollback(Session *session, bool all);
266
Storage engine specific thread local data.
271
Storage engine specific thread local data.
272
Lifetime: one user connection.
276
* Resource contexts for both the "statement" and "normal"
279
* Resource context at index 0:
281
* Life time: one statement within a transaction. If @@autocommit is
282
* on, also represents the entire transaction.
284
* Resource context at index 1:
286
* Life time: one transaction within a connection.
290
* If the storage engine does not participate in a transaction,
291
* there will not be a resource context.
293
drizzled::ResourceContext resource_context[2];
295
Ha_data() :ha_ptr(NULL) {}
115
299
* Represents a client connection to the database server.
517
739
ResourceContext *getResourceContext(const plugin::MonitoredInTransaction *monitored,
518
740
size_t index= 0);
520
session::Transactions transaction;
743
* Structure used to manage "statement transactions" and
744
* "normal transactions". In autocommit mode, the normal transaction is
745
* equivalent to the statement transaction.
747
* Storage engines will be registered here when they participate in
748
* a transaction. No engine is registered more than once.
750
struct st_transactions {
751
std::deque<NamedSavepoint> savepoints;
754
* The normal transaction (since BEGIN WORK).
756
* Contains a list of all engines that have participated in any of the
757
* statement transactions started within the context of the normal
760
* @note In autocommit mode, this is empty.
762
TransactionContext all;
765
* The statment transaction.
767
* Contains a list of all engines participating in the given statement.
769
* @note In autocommit mode, this will be used to commit/rollback the
770
* normal transaction.
772
TransactionContext stmt;
522
788
Field *dup_field;
523
789
sigset_t signals;
1579
1826
table::Placeholder *table_cache_insert_placeholder(const identifier::Table &identifier);
1580
1827
bool lock_table_name_if_not_cached(const identifier::Table &identifier, Table **table);
1829
typedef boost::unordered_map<std::string, message::Table, util::insensitive_hash, util::insensitive_equal_to> TableMessageCache;
1833
TableMessageCache table_message_cache;
1836
bool storeTableMessage(const identifier::Table &identifier, message::Table &table_message);
1837
bool removeTableMessage(const identifier::Table &identifier);
1838
bool getTableMessage(const identifier::Table &identifier, message::Table &table_message);
1839
bool doesTableMessageExist(const identifier::Table &identifier);
1840
bool renameTableMessage(const identifier::Table &from, const identifier::Table &to);
1583
session::TableMessages _table_message_cache;
1844
TableMessages _table_message_cache;
1586
session::TableMessages &getMessageCache()
1847
TableMessages &getMessageCache()
1588
1849
return _table_message_cache;
1668
1928
// This lives throughout the life of Session
1669
1929
bool use_usage;
1670
session::PropertyMap life_properties;
1930
PropertyMap life_properties;
1671
1931
std::vector<table::Singular *> temporary_shares;
1672
1932
struct rusage usage;
1675
1937
#define ESCAPE_CHARS "ntrb0ZN" // keep synchronous with READ_INFO::unescape
1939
} /* namespace drizzled */
1941
/** @TODO why is this in the middle of the file */
1942
#include <drizzled/select_to_file.h>
1943
#include <drizzled/select_export.h>
1944
#include <drizzled/select_dump.h>
1945
#include <drizzled/select_insert.h>
1946
#include <drizzled/select_create.h>
1947
#include <drizzled/tmp_table_param.h>
1948
#include <drizzled/select_union.h>
1949
#include <drizzled/select_subselect.h>
1950
#include <drizzled/select_singlerow_subselect.h>
1951
#include <drizzled/select_max_min_finder_subselect.h>
1952
#include <drizzled/select_exists_subselect.h>
1958
* A structure used to describe sort information
1959
* for a field or item used in ORDER BY.
1964
Field *field; /**< Field to sort */
1965
Item *item; /**< Item if not sorting fields */
1966
size_t length; /**< Length of sort field */
1967
uint32_t suffix_length; /**< Length suffix (0-4) */
1968
Item_result result_type; /**< Type of item */
1969
bool reverse; /**< if descending sort */
1970
bool need_strxnfrm; /**< If we have to use strxnfrm() */
1977
result_type(STRING_RESULT),
1984
} /* namespace drizzled */
1986
/** @TODO why is this in the middle of the file */
1988
#include <drizzled/table_ident.h>
1989
#include <drizzled/user_var_entry.h>
1990
#include <drizzled/unique.h>
1991
#include <drizzled/var.h>
1992
#include <drizzled/select_dumpvar.h>
1677
1997
/* Bits in sql_command_flags */
1679
1999
enum sql_command_flag_bits