28 #include <drizzled/enum.h>
38 #define GLOBAL_TEMPORARY_EXT ".temporary"
42 #define LANGUAGE "english/"
43 #define TEMP_PREFIX "MY"
45 #define ER(X) ::drizzled::error_message((X))
48 #define STRERROR_MAX 256
51 #define MAX_FIELD_NAME 34
52 #define MAX_SYS_VAR_LENGTH 32
53 #define MAX_INDEXES 64
54 const uint32_t MAX_KEY = MAX_INDEXES;
55 const uint32_t MAX_REF_PARTS = 16;
56 const uint32_t MAX_KEY_LENGTH = 4096;
57 const uint32_t MAX_KEY_LENGTH_DECIMAL_WIDTH = 4;
60 #define MAX_REFLENGTH 8
62 #define MAX_REFLENGTH 4
66 #define MAX_FIELD_CHARLENGTH 255
67 #define MAX_FIELD_VARCHARLENGTH 65535
68 #define CONVERT_IF_BIGGER_TO_BLOB 512
71 #define MAX_FIELD_WIDTH (MAX_FIELD_CHARLENGTH*MAX_MBWIDTH+1)
73 #define MAX_TABLES (sizeof(table_map)*8-3)
74 #define PARAM_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-3))
75 #define OUTER_REF_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-2))
76 #define RAND_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-1))
77 #define PSEUDO_TABLE_BITS (PARAM_TABLE_BIT | OUTER_REF_TABLE_BIT | \
79 #define MAX_FIELDS 4096
81 #define MAX_SELECT_NESTING (sizeof(nesting_map)*8-1)
83 #define MAX_SORT_MEMORY (2048*1024-MALLOC_OVERHEAD)
84 #define MIN_SORT_MEMORY (32*1024-MALLOC_OVERHEAD)
86 #define DEFAULT_ERROR_COUNT 64
87 #define EXTRA_RECORDS 10
88 #define NAMES_SEP_CHAR '\377'
90 #define READ_RECORD_BUFFER (uint32_t) (IO_SIZE*8)
91 #define DISK_BUFFER_SIZE (uint32_t) (IO_SIZE*16)
93 #define ME_ERROR (ME_BELL+ME_OLDWIN+ME_NOREFRESH)
94 #define MYF_RW MYF(MY_WME+MY_NABP)
101 #define MIN_TURBOBM_PATTERN_LEN 3
107 #define MAX_FIELDS_BEFORE_HASH 32
108 #define TABLE_OPEN_CACHE_MIN 64
109 #define TABLE_OPEN_CACHE_DEFAULT 1024
120 #define STACK_MIN_SIZE 12000
122 #define STACK_MIN_SIZE_FOR_OPEN 1024*80
123 #define STACK_BUFF_ALLOC 352
125 #define QUERY_ALLOC_BLOCK_SIZE 8192
126 #define QUERY_ALLOC_PREALLOC_SIZE 8192
127 #define RANGE_ALLOC_BLOCK_SIZE 4096
128 #define TABLE_ALLOC_BLOCK_SIZE 1024
129 #define WARN_ALLOC_BLOCK_SIZE 2048
130 #define WARN_ALLOC_PREALLOC_SIZE 1024
136 #define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (10L*1024*1024)
137 #define MIN_ROWS_TO_USE_TABLE_CACHE 100
144 #define TIME_FOR_COMPARE 5 // 5 compares == one read
150 #define TIME_FOR_COMPARE_ROWID (TIME_FOR_COMPARE*2)
159 #define DISK_SEEK_BASE_COST ((double)0.9)
161 #define BLOCKS_IN_AVG_SEEK 128
163 #define DISK_SEEK_PROP_COST ((double)0.1/BLOCKS_IN_AVG_SEEK)
171 #define MATCHING_ROWS_IN_OTHER_TABLE 10
174 #define KEY_DEFAULT_PACK_LENGTH 8
177 #define PROCESS_LIST_WIDTH 100
180 #define MODE_NO_ZERO_DATE (2)
181 #define MODE_INVALID_DATES (MODE_NO_ZERO_DATE*2)
183 #define MY_CHARSET_BIN_MB_MAXLEN 1
186 static const uint32_t UNCACHEABLE_DEPENDENT= 1;
187 static const uint32_t UNCACHEABLE_RAND= 2;
188 static const uint32_t UNCACHEABLE_SIDEEFFECT= 3;
194 static const uint32_t UNCACHEABLE_UNITED= 6;
197 #define UNDEF_POS (-1)
200 static const uint32_t TL_OPTION_UPDATING= 0;
201 static const uint32_t TL_OPTION_FORCE_INDEX= 1;
202 static const uint32_t TL_OPTION_IGNORE_LEAVES= 2;
203 static const uint32_t TL_OPTION_ALIAS= 3;
204 static const uint32_t NUM_OF_TABLE_OPTIONS= 4;
208 #define portable_sizeof_char_ptr 8
210 #define TMP_FILE_PREFIX "#sql"
211 #define TMP_FILE_PREFIX_LENGTH 4
214 #define WEEK_MONDAY_FIRST 1
216 #define WEEK_FIRST_WEEKDAY 4
220 #define MAX_DAY_NUMBER 3652424L
222 #define STRING_BUFFER_USUAL_SIZE 80
224 typedef void *range_seq_t;
226 enum ha_stat_type { HA_ENGINE_STATUS, HA_ENGINE_LOGS, HA_ENGINE_MUTEX };
229 #define HA_ADMIN_ALREADY_DONE 1
230 #define HA_ADMIN_OK 0
231 #define HA_ADMIN_NOT_IMPLEMENTED -1
232 #define HA_ADMIN_FAILED -2
233 #define HA_ADMIN_CORRUPT -3
234 #define HA_ADMIN_INTERNAL_ERROR -4
235 #define HA_ADMIN_INVALID -5
236 #define HA_ADMIN_REJECT -6
239 #define HA_READ_NEXT 1
240 #define HA_READ_PREV 2
241 #define HA_READ_ORDER 4
242 #define HA_READ_RANGE 8
243 #define HA_ONLY_WHOLE_INDEX 16
244 #define HA_KEYREAD_ONLY 64
249 #define HA_KEY_SCAN_NOT_ROR 128
252 #define HA_KEY_SWITCH_NONUNIQ 0
253 #define HA_KEY_SWITCH_ALL 1
254 #define HA_KEY_SWITCH_NONUNIQ_SAVE 2
255 #define HA_KEY_SWITCH_ALL_SAVE 3
262 #define HA_OPEN_KEYFILE 1
263 #define HA_OPEN_RNDFILE 2
264 #define HA_GET_INDEX 4
265 #define HA_GET_INFO 8
266 #define HA_READ_ONLY 16
268 #define HA_TRY_READ_ONLY 32
269 #define HA_WAIT_IF_LOCKED 64
270 #define HA_ABORT_IF_LOCKED 128
271 #define HA_BLOCK_LOCK 256
272 #define HA_OPEN_TEMPORARY 512
275 #define HA_KEY_NULL_LENGTH 1
276 #define HA_KEY_BLOB_LENGTH 2
278 const uint32_t HA_MAX_REC_LENGTH = 65535;
281 enum start_transaction_option_t
283 START_TRANS_NO_OPTIONS,
284 START_TRANS_OPT_WITH_CONS_SNAPSHOT
288 #define HA_CHECK_DUP_KEY 1
289 #define HA_CHECK_DUP_UNIQUE 2
290 #define HA_CHECK_DUP (HA_CHECK_DUP_KEY + HA_CHECK_DUP_UNIQUE)
294 #define HA_CREATE_USED_AUTO (1L << 0)
295 #define HA_CREATE_USED_CHARSET (1L << 8)
296 #define HA_CREATE_USED_DEFAULT_CHARSET (1L << 9)
303 #define HA_MRR_SINGLE_POINT 1
304 #define HA_MRR_FIXED_KEY 2
310 #define HA_MRR_NO_ASSOCIATION 4
316 #define HA_MRR_SORTED 8
319 #define HA_MRR_INDEX_ONLY 16
325 #define HA_MRR_LIMITS 32
334 #define HA_MRR_USE_DEFAULT_IMPL 64
337 #define MYF(v) (static_cast<drizzled::myf>(v))
355 #define MY_COLL_ALLOW_SUPERSET_CONV 1
356 #define MY_COLL_ALLOW_COERCIBLE_CONV 2
357 #define MY_COLL_ALLOW_CONV 3
358 #define MY_COLL_DISALLOW_NONE 4
359 #define MY_COLL_CMP_CONV 7
361 inline static void clear_timestamp_auto_bits(timestamp_auto_set_type &_target_,
362 timestamp_auto_set_type _bits_)
364 _target_=
static_cast<timestamp_auto_set_type
>(_target_ & ~_bits_);
371 #define FIELDFLAG_PACK_SHIFT 3
372 #define FIELDFLAG_MAX_DEC 31
378 template <
typename T>
379 T MTYP_TYPENR(
const T& type)
381 return static_cast<T
>(type & 127);
384 #define MTYP_TYPENR(type) (type & 127)
387 inline static uint32_t f_settype(
const enum enum_field_types x)
389 return (uint32_t(x) << FIELDFLAG_PACK_SHIFT);
393 template <
class T>
void set_if_bigger(T &a,
const T &b)
399 template <
class T>
void set_if_smaller(T &a,
const T &b)
406 #define set_if_bigger(a,b) do { \
407 const typeof(a) _a = (a); \
408 const typeof(b) _b = (b); \
409 (void) (&_a == &_b); \
410 if ((a) < (b)) (a)=(b); \
412 #define set_if_smaller(a,b) do { \
413 const typeof(a) _a = (a); \
414 const typeof(b) _b = (b); \
415 (void) (&_a == &_b); \
416 if ((a) > (b)) (a)=(b); \
420 #define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0)
421 #define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0)
425 template<
class T>
inline void safe_delete(T*& ptr)
431 #define array_elements(a) \
432 ((sizeof(a) / sizeof(*(a))) / \
433 static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
435 #define FN_LIBCHAR '/'
441 #define MALLOC_OVERHEAD 8
444 static const uint32_t ONCE_ALLOC_INIT= 4096;
446 static const uint32_t RECORD_CACHE_SIZE= 64*1024;
453 #ifndef uint64_t2double
454 #define uint64_t2double(A) ((double) (uint64_t) (A))
457 #ifndef int64_t2double
458 #define int64_t2double(A) ((double) (int64_t) (A))
462 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
467 #define DBL_MIN 4.94065645841246544e-324
470 #define DBL_MAX 1.79769313486231470e+308
476 #define M_PI 3.14159265358979323846
479 #define M_E 2.7182818284590452354
482 #define M_LN2 0.69314718055994530942
489 #define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1))
490 #define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double))
492 #define ADD_TO_PTR(ptr,size,type) (type) (reinterpret_cast<const unsigned char*>(ptr)+size)
494 #define ADD_TO_PTR(ptr,size,type) (type) ((unsigned char*) (ptr)+size)
497 #define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B))
498 #define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))]
503 #if defined(SIZEOF_OFF_T)
504 # if (SIZEOF_OFF_T == 8)
505 # define OFF_T_MAX (INT64_MAX)
507 # define OFF_T_MAX (INT32_MAX)
511 #define MY_FILEPOS_ERROR -1
513 #define DRIZZLE_SERVER
516 #define MY_INT32_NUM_DECIMAL_DIGITS 11
519 #define MY_INT64_NUM_DECIMAL_DIGITS 21
531 #define FN_REFLEN 512
533 #define FN_EXTCHAR '.'
535 #define FN_HOMELIB '~'
537 #define FN_CURLIB '.'
539 #define FN_PARENTDIR ".."
543 # define QUOTE_ARG(x) #x
546 #ifndef STRINGIFY_ARG
547 # define STRINGIFY_ARG(x) QUOTE_ARG(x)
558 #if !defined(__GNUC__)
559 #define __builtin_expect(x, expected_value) (x)
562 #define likely(x) __builtin_expect((x),1)
563 #define unlikely(x) __builtin_expect((x),0)
570 #ifdef TARGET_OS_LINUX
571 #define NEED_EXPLICIT_SYNC_DIR 1
575 #if !defined(HAVE_DTRACE)
576 # undef _DTRACE_VERSION
577 # define _DTRACE_VERSION 0
580 typedef uint64_t table_map;
581 typedef uint32_t nesting_map;