~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/base.h

  • Committer: Monty Taylor
  • Date: 2009-03-18 18:45:23 UTC
  • mto: (950.1.1 mordred)
  • mto: This revision was merged to the branch mainline in revision 943.
  • Revision ID: mordred@inaugust.com-20090318184523-mfbjyj5wkipv4n3b
Moved big tests to big suite. Added make target "make test-big" to allow for easy running of the big tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems, Inc.
 
4
 *  Copyright (C) 2008 Sun Microsystems
5
5
 *
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
 
22
22
/**
23
23
 * @TODO Name this file something better and split it out if necessary.
 
24
 * base.h isn't descriptive, especially compared to global.h
24
25
 *
25
26
 * @TODO Convert HA_XXX defines into enums and/or bitmaps
26
27
 */
27
28
 
28
 
#include <drizzled/definitions.h>
29
 
 
30
 
#ifndef DRIZZLED_BASE_H
31
 
#define DRIZZLED_BASE_H
32
 
 
33
 
namespace drizzled
34
 
{
 
29
#ifndef DRIZZLE_SERVER_BASE_H
 
30
#define DRIZZLE_SERVER_BASE_H
 
31
 
 
32
#define CHSIZE_USED
35
33
 
36
34
/* The following is bits in the flag parameter to ha_open() */
37
35
 
39
37
#define HA_OPEN_WAIT_IF_LOCKED          1
40
38
#define HA_OPEN_IGNORE_IF_LOCKED        2
41
39
#define HA_OPEN_TMP_TABLE               4       /* Table is a temp table */
 
40
#define HA_OPEN_DELAY_KEY_WRITE         8       /* Don't update index  */
 
41
#define HA_OPEN_ABORT_IF_CRASHED        16
 
42
#define HA_OPEN_FOR_REPAIR              32      /* open even if crashed */
 
43
#define HA_OPEN_FROM_SQL_LAYER          64
 
44
#define HA_OPEN_MMAP                    128     /* open memory mapped */
 
45
#define HA_OPEN_COPY                    256     /* Open copy (for repair) */
42
46
/* Internal temp table, used for temporary results */
43
47
#define HA_OPEN_INTERNAL_TABLE          512
44
48
 
84
88
enum ha_key_alg {
85
89
  HA_KEY_ALG_UNDEF=     0,              /* Not specified (old file) */
86
90
  HA_KEY_ALG_BTREE=     1,              /* B-tree, default one          */
87
 
  HA_KEY_ALG_HASH=      3               /* HASH keys (HEAP tables) */
 
91
  HA_KEY_ALG_RTREE=     2,              /* R-tree, for spatial searches */
 
92
  HA_KEY_ALG_HASH=      3,              /* HASH keys (HEAP tables) */
 
93
  HA_KEY_ALG_FULLTEXT=  4               /* FULLTEXT (MyISAM tables) */
88
94
};
89
95
 
90
96
        /* Index and table build methods */
140
146
    to overwrite entire row.
141
147
  */
142
148
  HA_EXTRA_KEYREAD_PRESERVE_FIELDS,
 
149
  HA_EXTRA_MMAP,
143
150
  /*
144
151
    Ignore if the a tuple is not found, continue processing the
145
152
    transaction and ignore that 'row'.  Needed for idempotency
175
182
  HA_EXTRA_PREPARE_FOR_RENAME
176
183
};
177
184
 
 
185
/* Compatible option, to be deleted in 6.0 */
 
186
#define HA_EXTRA_PREPARE_FOR_DELETE HA_EXTRA_PREPARE_FOR_DROP
 
187
 
178
188
        /* The following is parameter to ha_panic() */
179
189
 
180
190
enum ha_panic_function {
189
199
  HA_KEYTYPE_END=0,
190
200
  HA_KEYTYPE_TEXT=1,                    /* Key is sorted as letters */
191
201
  HA_KEYTYPE_BINARY=2,                  /* Key is sorted as unsigned chars */
 
202
  HA_KEYTYPE_SHORT_INT=3,
192
203
  HA_KEYTYPE_LONG_INT=4,
 
204
  HA_KEYTYPE_FLOAT=5,
193
205
  HA_KEYTYPE_DOUBLE=6,
 
206
  HA_KEYTYPE_NUM=7,                     /* Not packed num with pre-space */
 
207
  HA_KEYTYPE_USHORT_INT=8,
194
208
  HA_KEYTYPE_ULONG_INT=9,
195
209
  HA_KEYTYPE_LONGLONG=10,
196
210
  HA_KEYTYPE_ULONGLONG=11,
 
211
  HA_KEYTYPE_INT24=12,
 
212
  HA_KEYTYPE_UINT24=13,
 
213
  HA_KEYTYPE_INT8=14,
197
214
  /* Varchar (0-255 bytes) with length packed with 1 byte */
198
215
  HA_KEYTYPE_VARTEXT1=15,               /* Key is sorted as letters */
199
216
  HA_KEYTYPE_VARBINARY1=16,             /* Key is sorted as unsigned chars */
200
217
  /* Varchar (0-65535 bytes) with length packed with 2 bytes */
201
218
  HA_KEYTYPE_VARTEXT2=17,               /* Key is sorted as letters */
202
 
  HA_KEYTYPE_VARBINARY2=18              /* Key is sorted as unsigned chars */
 
219
  HA_KEYTYPE_VARBINARY2=18,             /* Key is sorted as unsigned chars */
 
220
  HA_KEYTYPE_BIT=19
203
221
};
204
222
 
 
223
#define HA_MAX_KEYTYPE  31              /* Must be log2-1 */
 
224
 
205
225
        /* These flags kan be OR:ed to key-flag */
206
226
 
207
227
#define HA_NOSAME                1      /* Set if not dupplicated records */
212
232
#define HA_NULL_ARE_EQUAL       2048    /* NULL in key are cmp as equal */
213
233
#define HA_GENERATED_KEY        8192    /* Automaticly generated key */
214
234
 
 
235
        /* The combination of the above can be used for key type comparison. */
 
236
#define HA_KEYFLAG_MASK (HA_NOSAME | HA_PACK_KEY | HA_AUTO_KEY | \
 
237
                         HA_BINARY_PACK_KEY | HA_UNIQUE_CHECK | \
 
238
                         HA_NULL_ARE_EQUAL | HA_GENERATED_KEY)
 
239
 
215
240
#define HA_KEY_HAS_PART_KEY_SEG 65536   /* Key contains partial segments */
216
241
 
217
242
        /* Automatic bits in key-flag */
244
269
#define HA_OPTION_PACK_RECORD           1
245
270
#define HA_OPTION_PACK_KEYS             2
246
271
#define HA_OPTION_COMPRESS_RECORD       4
 
272
#define HA_OPTION_LONG_BLOB_PTR         8 /* new ISAM format */
247
273
#define HA_OPTION_TMP_TABLE             16
 
274
#define HA_OPTION_CHECKSUM              32
 
275
#define HA_OPTION_DELAY_KEY_WRITE       64
248
276
#define HA_OPTION_NO_PACK_KEYS          128  /* Reserved for MySQL */
 
277
#define HA_OPTION_CREATE_FROM_ENGINE    256
 
278
#define HA_OPTION_RELIES_ON_SQL_LAYER   512
 
279
#define HA_OPTION_NULL_FIELDS           1024
 
280
#define HA_OPTION_PAGE_CHECKSUM         2048
249
281
#define HA_OPTION_TEMP_COMPRESS_RECORD  ((uint32_t) 16384)      /* set by isamchk */
250
282
#define HA_OPTION_READ_ONLY_DATA        ((uint32_t) 32768)      /* Set by isamchk */
251
283
 
254
286
#define HA_DONT_TOUCH_DATA      1       /* Don't empty datafile (isamchk) */
255
287
#define HA_PACK_RECORD          2       /* Request packed record format */
256
288
#define HA_CREATE_TMP_TABLE     4
 
289
#define HA_CREATE_CHECKSUM      8
257
290
#define HA_CREATE_KEEP_FILES    16      /* don't overwrite .MYD and MYI */
 
291
#define HA_CREATE_PAGE_CHECKSUM 32
 
292
#define HA_CREATE_DELAY_KEY_WRITE 64
 
293
#define HA_CREATE_RELIES_ON_SQL_LAYER 128
258
294
 
259
295
/*
260
296
  The following flags (OR-ed) are passed to handler::info() method.
302
338
/*
303
339
  Errorcodes given by handler functions
304
340
 
305
 
  optimizer::sum_query() assumes these codes are > 1
 
341
  opt_sum_query() assumes these codes are > 1
306
342
  Do not add error numbers before HA_ERR_FIRST.
307
343
  If necessary to add lower numbers, change HA_ERR_FIRST accordingly.
308
344
*/
309
345
#define HA_ERR_FIRST            120     /* Copy of first error nr.*/
310
346
 
311
 
/* Other constants */
312
 
 
313
 
typedef unsigned long key_part_map;
 
347
#define HA_ERR_KEY_NOT_FOUND    120     /* Didn't find key on read or update */
 
348
#define HA_ERR_FOUND_DUPP_KEY   121     /* Dupplicate key on write */
 
349
#define HA_ERR_INTERNAL_ERROR   122     /* Internal error */
 
350
#define HA_ERR_RECORD_CHANGED   123     /* Uppdate with is recoverable */
 
351
#define HA_ERR_WRONG_INDEX      124     /* Wrong index given to function */
 
352
#define HA_ERR_CRASHED          126     /* Indexfile is crashed */
 
353
#define HA_ERR_WRONG_IN_RECORD  127     /* Record-file is crashed */
 
354
#define HA_ERR_OUT_OF_MEM       128     /* Record-file is crashed */
 
355
#define HA_ERR_NOT_A_TABLE      130     /* not a MYI file - no signature */
 
356
#define HA_ERR_WRONG_COMMAND    131     /* Command not supported */
 
357
#define HA_ERR_OLD_FILE         132     /* old databasfile */
 
358
#define HA_ERR_NO_ACTIVE_RECORD 133     /* No record read in update() */
 
359
#define HA_ERR_RECORD_DELETED   134     /* A record is not there */
 
360
#define HA_ERR_RECORD_FILE_FULL 135     /* No more room in file */
 
361
#define HA_ERR_INDEX_FILE_FULL  136     /* No more room in file */
 
362
#define HA_ERR_END_OF_FILE      137     /* end in next/prev/first/last */
 
363
#define HA_ERR_UNSUPPORTED      138     /* unsupported extension used */
 
364
#define HA_ERR_TO_BIG_ROW       139     /* Too big row */
 
365
#define HA_WRONG_CREATE_OPTION  140     /* Wrong create option */
 
366
#define HA_ERR_FOUND_DUPP_UNIQUE 141    /* Dupplicate unique on write */
 
367
#define HA_ERR_UNKNOWN_CHARSET   142    /* Can't open charset */
 
368
#define HA_ERR_WRONG_MRG_TABLE_DEF 143  /* conflicting tables in MERGE */
 
369
#define HA_ERR_CRASHED_ON_REPAIR 144    /* Last (automatic?) repair failed */
 
370
#define HA_ERR_CRASHED_ON_USAGE  145    /* Table must be repaired */
 
371
#define HA_ERR_LOCK_WAIT_TIMEOUT 146
 
372
#define HA_ERR_LOCK_TABLE_FULL   147
 
373
#define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */
 
374
#define HA_ERR_LOCK_DEADLOCK     149
 
375
#define HA_ERR_CANNOT_ADD_FOREIGN 150    /* Cannot add a foreign key constr. */
 
376
#define HA_ERR_NO_REFERENCED_ROW 151     /* Cannot add a child row */
 
377
#define HA_ERR_ROW_IS_REFERENCED 152     /* Cannot delete a parent row */
 
378
#define HA_ERR_NO_SAVEPOINT      153     /* No savepoint with that name */
 
379
#define HA_ERR_NON_UNIQUE_BLOCK_SIZE 154 /* Non unique key block size */
 
380
#define HA_ERR_NO_SUCH_TABLE     155  /* The table does not exist in engine */
 
381
#define HA_ERR_TABLE_EXIST       156  /* The table existed in storage engine */
 
382
#define HA_ERR_NO_CONNECTION     157  /* Could not connect to storage engine */
 
383
/* NULLs are not supported in spatial index */
 
384
#define HA_ERR_NULL_IN_SPATIAL   158
 
385
#define HA_ERR_TABLE_DEF_CHANGED 159  /* The table changed in storage engine */
 
386
/* There's no partition in table for given value */
 
387
#define HA_ERR_NO_PARTITION_FOUND 160
 
388
#define HA_ERR_RBR_LOGGING_FAILED 161  /* Row-based binlogging of row failed */
 
389
#define HA_ERR_DROP_INDEX_FK      162  /* Index needed in foreign key constr */
 
390
/*
 
391
  Upholding foreign key constraints would lead to a duplicate key error
 
392
  in some other table.
 
393
*/
 
394
#define HA_ERR_FOREIGN_DUPLICATE_KEY 163
 
395
/* The table changed in storage engine */
 
396
#define HA_ERR_TABLE_NEEDS_UPGRADE 164
 
397
#define HA_ERR_TABLE_READONLY      165   /* The table is not writable */
 
398
 
 
399
#define HA_ERR_AUTOINC_READ_FAILED 166   /* Failed to get next autoinc value */
 
400
#define HA_ERR_AUTOINC_ERANGE    167     /* Failed to set row autoinc value */
 
401
#define HA_ERR_GENERIC           168     /* Generic error */
 
402
/* row not actually updated: new values same as the old values */
 
403
#define HA_ERR_RECORD_IS_THE_SAME 169
 
404
/* It is not possible to log this statement */
 
405
#define HA_ERR_LOGGING_IMPOSSIBLE 170    /* It is not possible to log this
 
406
                                            statement */
 
407
#define HA_ERR_TABLESPACE_EXIST   171
 
408
#define HA_ERR_CORRUPT_EVENT      172    /* The event was corrupt, leading to
 
409
                                            illegal data being read */
 
410
#define HA_ERR_NEW_FILE           173    /* New file format */
 
411
#define HA_ERR_ROWS_EVENT_APPLY   174    /* The event could not be processed
 
412
                                            no other hanlder error happened */
 
413
#define HA_ERR_INITIALIZATION     175    /* Error during initialization */
 
414
#define HA_ERR_FILE_TOO_SHORT     176    /* File too short */
 
415
#define HA_ERR_WRONG_CRC          177    /* Wrong CRC on page */
 
416
#define HA_ERR_LOCK_OR_ACTIVE_TRANSACTION 178
 
417
#define HA_ERR_NO_SUCH_TABLESPACE 179
 
418
#define HA_ERR_TABLESPACE_NOT_EMPTY 180
 
419
#define HA_ERR_LAST               180    /* Copy of last error nr */
 
420
 
 
421
/* Number of different errors */
 
422
#define HA_ERR_ERRORS            (HA_ERR_LAST - HA_ERR_FIRST + 1)
 
423
 
 
424
        /* Other constants */
 
425
 
 
426
#define HA_NAMELEN 64                   /* Max length of saved filename */
 
427
#define NO_SUCH_KEY (~(uint32_t)0)          /* used as a key no. */
 
428
 
 
429
typedef ulong key_part_map;
314
430
#define HA_WHOLE_KEY  (~(key_part_map)0)
315
431
 
316
432
        /* Intern constants in databases */
330
446
#define MBR_WITHIN      2048
331
447
#define MBR_DISJOINT    4096
332
448
#define MBR_EQUAL       8192
 
449
#define MBR_DATA        16384
333
450
#define SEARCH_NULL_ARE_EQUAL 32768     /* NULL in keys are equal */
334
451
#define SEARCH_NULL_ARE_NOT_EQUAL 65536 /* NULL in keys are not equal */
335
452
 
336
453
        /* bits in opt_flag */
 
454
#define QUICK_USED      1
337
455
#define READ_CACHE_USED 2
338
456
#define READ_CHECK_USED 4
339
457
#define KEY_READ_USED   8
347
465
#define HA_STATE_DELETED        8
348
466
#define HA_STATE_NEXT_FOUND     16      /* Next found record (record before) */
349
467
#define HA_STATE_PREV_FOUND     32      /* Prev found record (record after) */
 
468
#define HA_STATE_NO_KEY         64      /* Last read didn't find record */
350
469
#define HA_STATE_KEY_CHANGED    128
351
470
#define HA_STATE_WRITE_AT_END   256     /* set in _ps_find_writepos */
 
471
#define HA_STATE_BUFF_SAVED     512     /* If current keybuff is info->buff */
352
472
#define HA_STATE_ROW_CHANGED    1024    /* To invalide ROW cache */
353
473
#define HA_STATE_EXTEND_BLOCK   2048
354
474
#define HA_STATE_RNEXT_SAME     4096    /* rnext_same occupied lastkey2 */
398
518
*/
399
519
#define NULL_RANGE      64
400
520
 
401
 
class key_range
 
521
typedef struct st_key_range
402
522
{
403
 
public:
404
523
  const unsigned char *key;
405
524
  uint32_t length;
 
525
  key_part_map keypart_map;
406
526
  enum ha_rkey_function flag;
407
 
  key_part_map keypart_map;
408
 
};
 
527
} key_range;
409
528
 
410
 
class KEY_MULTI_RANGE
 
529
typedef struct st_key_multi_range
411
530
{
412
 
public:
413
531
  key_range start_key;
414
532
  key_range end_key;
415
533
  char  *ptr;                 /* Free to use by caller (ptr to row etc) */
416
534
  uint32_t  range_flag;           /* key range flags see above */
417
 
};
 
535
} KEY_MULTI_RANGE;
418
536
 
419
537
 
420
538
/* For number of records */
421
539
typedef uint64_t        ha_rows;
 
540
#define rows2double(A)  uint64_t2double(A)
422
541
 
423
 
#define HA_POS_ERROR    (~ (::drizzled::ha_rows) 0)
424
 
#define HA_OFFSET_ERROR (~ (::drizzled::internal::my_off_t) 0)
 
542
#define HA_POS_ERROR    (~ (ha_rows) 0)
 
543
#define HA_OFFSET_ERROR (~ (my_off_t) 0)
425
544
 
426
545
#if SIZEOF_OFF_T == 4
427
546
#define MAX_FILE_SIZE   INT32_MAX
429
548
#define MAX_FILE_SIZE   INT64_MAX
430
549
#endif
431
550
 
432
 
inline static uint32_t ha_varchar_packlength(uint32_t field_length)
433
 
{
434
 
  return (field_length < 256 ? 1 :2);
435
 
}
436
 
 
437
 
 
438
 
} /* namespace drizzled */
439
 
 
440
 
#endif /* DRIZZLED_BASE_H */
 
551
#define HA_VARCHAR_PACKLENGTH(field_length) ((field_length) < 256 ? 1 :2)
 
552
 
 
553
#endif /* DRIZZLE_SERVER_BASE_H */