1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems
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.
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.
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
24
Mostly this file is used in the server. But a little part of it is used in
25
definition of SELECT_DISTINCT and others.
27
@TODO Name this file better. "priv" could mean private, privileged, privileges.
30
#ifndef DRIZZLED_SERVER_INCLUDES_H
31
#define DRIZZLED_SERVER_INCLUDES_H
33
/* Cross-platform portability code and standard includes */
34
#include <drizzled/global.h>
35
/* Contains system-wide constants and #defines */
36
#include <drizzled/definitions.h>
38
/* Lots of system-wide struct definitions like IO_CACHE,
39
prototypes for all my_* functions */
40
#include <mysys/my_sys.h>
41
/* Custom C string functions */
42
#include <mystrings/m_string.h>
44
/* The <strong>INTERNAL</strong> plugin API - not the external, or public, server plugin API */
45
#include <drizzled/sql_plugin.h>
46
/* Range optimization API/library */
47
#include <drizzled/opt_range.h>
48
/* Simple error injection (crash) module */
49
#include <drizzled/error_injection.h>
50
/* Routines for dropping, repairing, checking schema tables */
51
#include <drizzled/sql_table.h>
53
/* Routines for printing error messages */
54
#include <drizzled/errmsg_print.h>
61
extern const CHARSET_INFO *system_charset_info, *files_charset_info ;
62
extern const CHARSET_INFO *national_charset_info, *table_alias_charset;
64
typedef struct drizzled_lock_st DRIZZLE_LOCK;
65
typedef struct st_ha_create_information HA_CREATE_INFO;
67
/* information schema */
68
static const std::string INFORMATION_SCHEMA_NAME("information_schema");
73
void refresh_status(Session *session);
74
bool drizzle_rm_tmp_tables(void);
75
void unlink_session(Session *session);
78
extern bool check_reserved_words(LEX_STRING *name);
79
extern enum_field_types agg_field_type(Item **items, uint32_t nitems);
82
uint64_t find_set(TYPELIB *lib, const char *x, uint32_t length, const CHARSET_INFO * const cs,
83
char **err_pos, uint32_t *err_len, bool *set_warning);
84
uint32_t find_type(const TYPELIB *lib, const char *find, uint32_t length,
86
uint32_t find_type2(const TYPELIB *lib, const char *find, uint32_t length,
87
const CHARSET_INFO *cs);
88
void unhex_type2(TYPELIB *lib);
89
uint32_t check_word(TYPELIB *lib, const char *val, const char *end,
90
const char **end_of_word);
91
int find_string_in_array(LEX_STRING * const haystack, LEX_STRING * const needle,
92
const CHARSET_INFO * const cs);
99
extern char *drizzle_tmpdir;
100
extern const LEX_STRING command_name[];
101
extern const char *first_keyword, *my_localhost, *delayed_user, *binary_keyword;
102
extern const char *myisam_recover_options_str;
103
extern const char *in_left_expr_name, *in_additional_cond, *in_having_cond;
104
extern const char * const TRG_EXT;
105
extern const char * const TRN_EXT;
106
extern char language[FN_REFLEN];
107
extern char glob_hostname[FN_REFLEN], drizzle_home[FN_REFLEN];
108
extern char pidfile_name[FN_REFLEN], system_time_zone[30];
109
extern char *opt_tc_log_file;
110
extern const double log_10[309];
111
extern uint64_t log_10_int[20];
112
extern uint64_t keybuff_size;
113
extern uint64_t session_startup_options;
114
extern uint32_t thread_id;
115
extern uint64_t aborted_threads;
116
extern uint64_t aborted_connects;
117
extern uint64_t slow_launch_threads;
118
extern uint64_t table_cache_size;
119
extern uint64_t table_def_size;
120
extern uint64_t max_connect_errors;
121
extern uint32_t connect_timeout;
122
extern uint32_t back_log;
123
extern pid_t current_pid;
124
extern uint64_t expire_logs_days;
125
extern uint64_t tc_log_max_pages_used;
126
extern uint64_t tc_log_page_size;
127
extern uint64_t opt_tc_log_size;
128
extern uint64_t tc_log_page_waits;
129
extern bool opt_innodb;
130
extern uint32_t test_flags,select_errors,ha_open_options;
131
extern uint32_t protocol_version, drizzled_port, dropping_tables;
132
extern uint32_t delay_key_write_options;
133
extern bool opt_endinfo, using_udf_functions;
134
extern bool locked_in_memory;
135
extern bool using_update_log, server_id_supplied;
137
extern ulong log_output_options;
138
extern bool opt_character_set_client_handshake;
139
extern bool volatile abort_loop, shutdown_in_progress;
140
extern uint32_t volatile thread_running, global_read_lock;
141
extern bool opt_safe_user_create;
142
extern bool opt_no_mix_types;
143
extern bool opt_safe_show_db, opt_myisam_use_mmap;
144
extern bool use_temp_pool;
145
extern bool opt_readonly;
146
extern char* opt_secure_file_priv;
147
extern bool opt_noacl;
148
extern bool opt_old_style_user_limits;
149
extern char *default_tz_name;
150
extern char *opt_logname;
152
extern TableList general_log, slow_log;
153
extern FILE *stderror_file;
154
extern pthread_mutex_t LOCK_create_db,LOCK_open, LOCK_lock_db,
155
LOCK_thread_count,LOCK_user_locks, LOCK_status,
156
LOCK_global_read_lock,
157
LOCK_global_system_variables;
159
extern pthread_rwlock_t LOCK_system_variables_hash;
160
extern pthread_cond_t COND_refresh, COND_thread_count;
161
extern pthread_cond_t COND_global_read_lock;
162
extern pthread_attr_t connection_attrib;
163
extern I_List<Session> session_list;
164
extern std::bitset<MAX_FIELDS> temp_pool;
165
extern String my_empty_string;
166
extern const String my_null_string;
167
extern SHOW_VAR status_vars[];
168
extern struct system_variables max_system_variables;
169
extern struct system_status_var global_status_var;
170
extern struct rand_struct sql_rand;
172
extern Table *unused_tables;
173
extern const char* any_db;
174
extern struct my_option my_long_options[];
175
extern const LEX_STRING view_type;
176
extern TYPELIB thread_handling_typelib;
177
extern uint8_t uc_update_queries[SQLCOM_END+1];
178
extern std::bitset<5> sql_command_flags[];
179
extern TYPELIB log_output_typelib;
181
extern StorageEngine *myisam_engine;
182
extern StorageEngine *heap_engine;
184
extern SHOW_COMP_OPTION have_symlink;
186
extern pthread_t signal_thread;
190
TABLE_SHARE *alloc_table_share(TableList *table_list, char *key,
191
uint32_t key_length);
192
void init_tmp_table_share(Session *session, TABLE_SHARE *share, const char *key,
194
const char *table_name, const char *path);
195
void free_table_share(TABLE_SHARE *share);
196
int open_table_def(Session *session, TABLE_SHARE *share, uint32_t db_flags);
197
void open_table_error(TABLE_SHARE *share, int error, int db_errno, int errarg);
198
int open_table_from_share(Session *session, TABLE_SHARE *share, const char *alias,
199
uint32_t db_stat, uint32_t prgflag, uint32_t ha_open_flags,
200
Table *outparam, open_table_mode open_mode);
201
int readfrm(const char *name, unsigned char **data, size_t *length);
202
int writefrm(const char* name, const unsigned char* data, size_t len);
203
int read_string(File file, unsigned char* *to, size_t length);
204
void free_blobs(Table *table);
205
int set_zone(int nr,int min_zone,int max_zone);
206
uint32_t convert_period_to_month(uint32_t period);
207
uint32_t convert_month_to_period(uint32_t month);
208
void get_date_from_daynr(long daynr,uint32_t *year, uint32_t *month,
210
bool str_to_time_with_warn(const char *str,uint32_t length,DRIZZLE_TIME *l_time);
211
enum enum_drizzle_timestamp_type str_to_datetime_with_warn(const char *str, uint32_t length,
212
DRIZZLE_TIME *l_time, uint32_t flags);
213
void localtime_to_TIME(DRIZZLE_TIME *to, struct tm *from);
214
void calc_time_from_sec(DRIZZLE_TIME *to, long seconds, long microseconds);
216
void make_truncated_value_warning(Session *session, DRIZZLE_ERROR::enum_warning_level level,
218
uint32_t str_length, enum enum_drizzle_timestamp_type time_type,
219
const char *field_name);
221
bool date_add_interval(DRIZZLE_TIME *ltime, interval_type int_type, INTERVAL interval);
222
bool calc_time_diff(DRIZZLE_TIME *l_time1, DRIZZLE_TIME *l_time2, int l_sign,
223
int64_t *seconds_out, long *microseconds_out);
225
extern LEX_STRING interval_type_to_name[];
227
void make_datetime(const DRIZZLE_TIME *l_time, String *str);
228
void make_date(const DRIZZLE_TIME *l_time, String *str);
229
void make_time(const DRIZZLE_TIME *l_time, String *str);
230
int my_time_compare(DRIZZLE_TIME *a, DRIZZLE_TIME *b);
231
uint64_t get_datetime_value(Session *session, Item ***item_arg, Item **cache_arg,
232
Item *warn_item, bool *is_null);
234
int test_if_number(char *str,int *res,bool allow_wildcards);
235
void change_byte(unsigned char *,uint,char,char);
236
void init_read_record(READ_RECORD *info, Session *session, Table *reg_form,
238
int use_record_cache, bool print_errors);
239
void init_read_record_idx(READ_RECORD *info, Session *session, Table *table,
240
bool print_error, uint32_t idx);
241
void end_read_record(READ_RECORD *info);
242
ha_rows filesort(Session *session, Table *form,struct st_sort_field *sortorder,
243
uint32_t s_length, SQL_SELECT *select,
244
ha_rows max_rows, bool sort_positions,
245
ha_rows *examined_rows);
246
void filesort_free_buffers(Table *table, bool full);
247
void change_double_for_sort(double nr,unsigned char *to);
248
double my_double_round(double value, int64_t dec, bool dec_unsigned,
250
int get_quick_record(SQL_SELECT *select);
252
int calc_weekday(long daynr,bool sunday_first_day_of_week);
253
uint32_t calc_week(DRIZZLE_TIME *l_time, uint32_t week_behaviour, uint32_t *year);
254
void find_date(char *pos,uint32_t *vek,uint32_t flag);
255
TYPELIB *convert_strings_to_array_type(char * *typelibs, char * *end);
256
TYPELIB *typelib(MEM_ROOT *mem_root, List<String> &strings);
257
ulong get_form_pos(File file, unsigned char *head, TYPELIB *save_names);
258
off_t make_new_entry(File file,unsigned char *fileinfo,TYPELIB *formnames,
259
const char *newname);
260
ulong next_io_size(ulong pos);
261
void append_unescaped(String *res, const char *pos, uint32_t length);
262
int rename_table_proto_file(const char *from, const char* to);
263
int delete_table_proto_file(const char *file_name);
264
int rename_file_ext(const char * from,const char * to,const char * ext);
265
bool check_db_name(LEX_STRING *db);
266
bool check_column_name(const char *name);
267
bool check_table_name(const char *name, uint32_t length);
268
char *get_field(MEM_ROOT *mem, Field *field);
269
bool get_field(MEM_ROOT *mem, Field *field, class String *res);
270
char *fn_rext(char *name);
272
/* Conversion functions */
273
uint32_t build_table_filename(char *buff, size_t bufflen, const char *db,
274
const char *table, const char *ext, uint32_t flags);
276
/* Flags for conversion functions. */
277
#define FN_FROM_IS_TMP (1 << 0)
278
#define FN_TO_IS_TMP (1 << 1)
279
#define FN_IS_TMP (FN_FROM_IS_TMP | FN_TO_IS_TMP)
280
#define NO_FRM_RENAME (1 << 2)
283
inline ulong sql_rnd()
285
ulong tmp= (ulong) (rand() * 0xffffffff); /* make all bits random */
293
convert a hex digit into number.
296
inline int hexchar_to_int(char c)
298
if (c <= '9' && c >= '0')
301
if (c <= 'f' && c >= 'a')
307
#endif /* DRIZZLE_SERVER_SERVER_INCLUDES_H */