summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorunknown <monty@mysql.com/narttu.mysql.fi>2007-01-23 21:13:26 +0200
committerunknown <monty@mysql.com/narttu.mysql.fi>2007-01-23 21:13:26 +0200
commitca42b36cc99fa0fb1d12a3150316bf3164909a07 (patch)
tree09269afde6ea92811b9a270afbfa86d3dc42dcc2 /include
parentb635df555adec7ebdc4cd40e102d51006c802639 (diff)
parent345959c660d7401c9dc991a2c572ba145d6e199c (diff)
downloadmariadb-git-ca42b36cc99fa0fb1d12a3150316bf3164909a07.tar.gz
Merge with new version
storage/myisam/mi_rsamepos.c: Auto merged include/m_string.h: Automatic merge include/maria.h: manual merge include/my_base.h: Automatic merge include/my_sys.h: Automatic merge mysys/mf_keycache.c: Automatic merge mysys/my_pread.c: Automatic merge sql/filesort.cc: Automatic merge sql/gen_lex_hash.cc: Automatic merge sql/mysqld.cc: Automatic merge sql/uniques.cc: Automatic merge storage/maria/Makefile.am: manual_merge storage/maria/ha_maria.cc: Automatic merge storage/maria/ma_check.c: manual merge storage/maria/ma_close.c: manual merge storage/maria/ma_create.c: manual merge storage/maria/ma_delete.c: manual merge storage/maria/ma_delete_all.c: Automatic merge storage/maria/ma_dynrec.c: manual merge storage/maria/ma_extra.c: Automatic merge storage/maria/ma_ft_boolean_search.c: manual merge storage/maria/ma_init.c: Automatic merge storage/maria/ma_key.c: manual merge storage/maria/ma_keycache.c: manual merge storage/maria/ma_locking.c: Automatic merge storage/maria/ma_open.c: manual merge storage/maria/ma_packrec.c: manual merge storage/maria/ma_page.c: Automatic merge storage/maria/ma_range.c: Automatic merge storage/maria/ma_rkey.c: manual merge storage/maria/ma_rsamepos.c: manual merge storage/maria/ma_sort.c: manual merge storage/maria/ma_statrec.c: Automatic merge storage/maria/ma_test2.c: Automatic merge storage/maria/ma_test3.c: Automatic merge storage/maria/ma_test_all.sh: Use new version storage/maria/ma_unique.c: Automatic merge storage/maria/ma_update.c: Automatic merge storage/maria/ma_write.c: manual merge storage/maria/maria_chk.c: manual merge storage/maria/maria_def.h: manual merge Added length pointer to _ma_page_get_block_info() storage/maria/maria_ftdump.c: Automatic merge storage/maria/maria_pack.c: manual merge storage/myisam/mi_check.c: Automatic merge storage/myisam/mi_create.c: Automatic merge storage/myisam/mi_test2.c: Automatic merge storage/myisam/sort.c: Automatic merge
Diffstat (limited to 'include')
-rw-r--r--include/m_string.h7
-rw-r--r--include/maria.h96
-rw-r--r--include/my_base.h4
-rw-r--r--include/my_handler.h22
-rw-r--r--include/my_sys.h1
-rw-r--r--include/myisamchk.h20
6 files changed, 86 insertions, 64 deletions
diff --git a/include/m_string.h b/include/m_string.h
index caccc59abd5..5aaa6aff51b 100644
--- a/include/m_string.h
+++ b/include/m_string.h
@@ -68,7 +68,7 @@
# define bcopy(s, d, n) memcpy((d), (s), (n))
# define bcmp(A,B,C) memcmp((A),(B),(C))
# define bzero(A,B) memset((A),0,(B))
-# define bmove_align(A,B,C) memcpy((A),(B),(C))
+# define bmove_align(A,B,C) memcpy((A),(B),(C))
#endif
#if defined(__cplusplus)
@@ -127,7 +127,10 @@ extern int bcmp(const char *s1,const char *s2,uint len);
extern int my_bcmp(const char *s1,const char *s2,uint len);
#undef bcmp
#define bcmp(A,B,C) my_bcmp((A),(B),(C))
-#endif
+#define bzero_if_purify(A,B) bzero(A,B)
+#else
+#define bzero_if_purify(A,B)
+#endif /* HAVE_purify */
#ifndef bmove512
extern void bmove512(gptr dst,const gptr src,uint len);
diff --git a/include/maria.h b/include/maria.h
index da9cbd49688..94152ce9bfa 100644
--- a/include/maria.h
+++ b/include/maria.h
@@ -55,6 +55,7 @@ extern "C" {
#define MARIA_MIN_KEY_BLOCK_LENGTH 1024 /* Min key block length */
#define MARIA_MAX_KEY_BLOCK_LENGTH 32768
#define maria_portable_sizeof_char_ptr 8
+#define MARIA_MAX_KEY_LENGTH 1000 /* Max length in bytes */
/*
In the following macros '_keyno_' is 0 .. keys-1.
@@ -109,13 +110,15 @@ extern "C" {
/* Param to/from maria_info */
+typedef ulonglong MARIA_RECORD_POS;
+
typedef struct st_maria_isaminfo /* Struct from h_info */
{
ha_rows records; /* Records in database */
ha_rows deleted; /* Deleted records in database */
- my_off_t recpos; /* Pos for last used record */
- my_off_t newrecpos; /* Pos if we write new record */
- my_off_t dupp_key_pos; /* Position to record with dup key */
+ MARIA_RECORD_POS recpos; /* Pos for last used record */
+ MARIA_RECORD_POS newrecpos; /* Pos if we write new record */
+ MARIA_RECORD_POS dup_key_pos; /* Position to record with dup key */
my_off_t data_file_length; /* Length of data file */
my_off_t max_data_file_length, index_file_length;
my_off_t max_index_file_length, delete_length;
@@ -146,9 +149,11 @@ typedef struct st_maria_create_info
ulonglong auto_increment;
ulonglong data_file_length;
ulonglong key_file_length;
+ uint null_bytes;
uint old_options;
+ enum data_file_type org_data_file_type;
uint8 language;
- my_bool with_auto_increment;
+ my_bool with_auto_increment, transactional;
} MARIA_CREATE_INFO;
struct st_maria_info; /* For referense */
@@ -168,25 +173,24 @@ typedef struct st_maria_keydef /* Key definition with open & info */
uint16 keylength; /* Tot length of keyparts (auto) */
uint16 minlength; /* min length of (packed) key (auto) */
uint16 maxlength; /* max length of (packed) key (auto) */
- uint16 block_size_index; /* block_size (auto) */
uint32 version; /* For concurrent read/write */
uint32 ftparser_nr; /* distinct ftparser number */
HA_KEYSEG *seg, *end;
struct st_mysql_ftparser *parser; /* Fulltext [pre]parser */
- int(*bin_search) (struct st_maria_info *info,
- struct st_maria_keydef *keyinfo, uchar *page, uchar *key,
- uint key_len, uint comp_flag, uchar **ret_pos,
- uchar *buff, my_bool *was_last_key);
- uint(*get_key) (struct st_maria_keydef *keyinfo, uint nod_flag,
- uchar **page, uchar *key);
- int(*pack_key) (struct st_maria_keydef *keyinfo, uint nod_flag,
- uchar *next_key, uchar *org_key, uchar *prev_key,
- uchar *key, struct st_maria_s_param *s_temp);
- void(*store_key) (struct st_maria_keydef *keyinfo, uchar *key_pos,
+ int (*bin_search)(struct st_maria_info *info,
+ struct st_maria_keydef *keyinfo, byte *page, byte *key,
+ uint key_len, uint comp_flag, byte **ret_pos,
+ byte *buff, my_bool *was_last_key);
+ uint(*get_key)(struct st_maria_keydef *keyinfo, uint nod_flag,
+ byte **page, byte *key);
+ int (*pack_key)(struct st_maria_keydef *keyinfo, uint nod_flag,
+ byte *next_key, byte *org_key, byte *prev_key,
+ const byte *key, struct st_maria_s_param *s_temp);
+ void (*store_key)(struct st_maria_keydef *keyinfo, byte *key_pos,
struct st_maria_s_param *s_temp);
- int(*ck_insert) (struct st_maria_info *inf, uint k_nr, uchar *k, uint klen);
- int(*ck_delete) (struct st_maria_info *inf, uint k_nr, uchar *k, uint klen);
+ int (*ck_insert)(struct st_maria_info *inf, uint k_nr, byte *k, uint klen);
+ int (*ck_delete)(struct st_maria_info *inf, uint k_nr, byte *k, uint klen);
} MARIA_KEYDEF;
@@ -195,7 +199,7 @@ typedef struct st_maria_keydef /* Key definition with open & info */
typedef struct st_maria_unique_def /* Segment definition of unique */
{
uint16 keysegs; /* Number of key-segment */
- uchar key; /* Mapped to which key */
+ uint8 key; /* Mapped to which key */
uint8 null_are_equal;
HA_KEYSEG *seg, *end;
} MARIA_UNIQUEDEF;
@@ -218,16 +222,19 @@ struct st_maria_bit_buff;
typedef struct st_maria_columndef /* column information */
{
- int16 type; /* en_fieldtype */
+ uint64 offset; /* Offset to position in row */
+ enum en_fieldtype type;
uint16 length; /* length of field */
- uint32 offset; /* Offset to position in row */
- uint8 null_bit; /* If column may be 0 */
- uint16 null_pos; /* position for null marker */
+ uint16 fill_length;
+ uint16 null_pos; /* Position for null marker */
+ uint16 empty_pos; /* Position for empty marker */
+ uint8 null_bit; /* If column may be NULL */
+ uint8 empty_bit; /* If column may be empty */
#ifndef NOT_PACKED_DATABASES
- void(*unpack) (struct st_maria_columndef *rec,
- struct st_maria_bit_buff *buff,
- uchar *start, uchar *end);
+ void(*unpack)(struct st_maria_columndef *rec,
+ struct st_maria_bit_buff *buff,
+ byte *start, byte *end);
enum en_fieldtype base_type;
uint space_length_bits, pack_type;
MARIA_DECODE_TREE *huff_tree;
@@ -237,7 +244,8 @@ typedef struct st_maria_columndef /* column information */
extern ulong maria_block_size;
extern ulong maria_concurrent_insert;
-extern my_bool maria_flush, maria_delay_key_write, maria_single_user;
+extern my_bool maria_flush, maria_single_user;
+extern my_bool maria_delay_key_write, maria_delay_rec_write;
extern my_off_t maria_max_temp_length;
extern ulong maria_bulk_insert_tree_size, maria_data_pointer_size;
extern KEY_CACHE maria_key_cache_var, *maria_key_cache;
@@ -260,19 +268,22 @@ extern int maria_rlast(struct st_maria_info *file, byte *buf, int inx);
extern int maria_rnext(struct st_maria_info *file, byte *buf, int inx);
extern int maria_rnext_same(struct st_maria_info *info, byte *buf);
extern int maria_rprev(struct st_maria_info *file, byte *buf, int inx);
-extern int maria_rrnd(struct st_maria_info *file, byte *buf, my_off_t pos);
+extern int maria_rrnd(struct st_maria_info *file, byte *buf,
+ MARIA_RECORD_POS pos);
extern int maria_scan_init(struct st_maria_info *file);
extern int maria_scan(struct st_maria_info *file, byte *buf);
+extern void maria_scan_end(struct st_maria_info *file);
extern int maria_rsame(struct st_maria_info *file, byte *record, int inx);
extern int maria_rsame_with_pos(struct st_maria_info *file, byte *record,
- int inx, my_off_t pos);
+ int inx, MARIA_RECORD_POS pos);
extern int maria_update(struct st_maria_info *file, const byte *old,
byte *new_record);
extern int maria_write(struct st_maria_info *file, byte *buff);
-extern my_off_t maria_position(struct st_maria_info *file);
+extern MARIA_RECORD_POS maria_position(struct st_maria_info *file);
extern int maria_status(struct st_maria_info *info, MARIA_INFO *x, uint flag);
extern int maria_lock_database(struct st_maria_info *file, int lock_type);
-extern int maria_create(const char *name, uint keys, MARIA_KEYDEF *keydef,
+extern int maria_create(const char *name, enum data_file_type record_type,
+ uint keys, MARIA_KEYDEF *keydef,
uint columns, MARIA_COLUMNDEF *columndef,
uint uniques, MARIA_UNIQUEDEF *uniquedef,
MARIA_CREATE_INFO *create_info, uint flags);
@@ -334,7 +345,7 @@ typedef struct st_maria_sort_param
MARIA_KEYDEF *keyinfo;
MARIA_SORT_INFO *sort_info;
HA_KEYSEG *seg;
- uchar **sort_keys;
+ byte **sort_keys;
byte *rec_buff;
void *wordlist, *wordptr;
MEM_ROOT wordroot;
@@ -348,17 +359,18 @@ typedef struct st_maria_sort_param
ulonglong unique[HA_MAX_KEY_SEG+1];
ulonglong notnull[HA_MAX_KEY_SEG+1];
- my_off_t pos,max_pos,filepos,start_recpos;
+ MARIA_RECORD_POS pos,max_pos,filepos,start_recpos;
uint key, key_length,real_key_length,sortbuff_size;
uint maxbuffers, keys, find_length, sort_keys_length;
my_bool fix_datafile, master;
my_bool calc_checksum; /* calculate table checksum */
+ my_size_t rec_buff_size;
int (*key_cmp)(struct st_maria_sort_param *, const void *, const void *);
- int (*key_read)(struct st_maria_sort_param *,void *);
- int (*key_write)(struct st_maria_sort_param *, const void *);
+ int (*key_read)(struct st_maria_sort_param *, byte *);
+ int (*key_write)(struct st_maria_sort_param *, const byte *);
void (*lock_in_memory)(HA_CHECK *);
- NEAR int (*write_keys)(struct st_maria_sort_param *, register uchar **,
+ NEAR int (*write_keys)(struct st_maria_sort_param *, register byte **,
uint , struct st_buffpek *, IO_CACHE *);
NEAR uint (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint);
NEAR int (*write_key)(struct st_maria_sort_param *, IO_CACHE *,char *,
@@ -367,7 +379,7 @@ typedef struct st_maria_sort_param
/* functions in maria_check */
-void mariachk_init(HA_CHECK *param);
+void maria_chk_init(HA_CHECK *param);
int maria_chk_status(HA_CHECK *param, MARIA_HA *info);
int maria_chk_del(HA_CHECK *param, register MARIA_HA *info, uint test_flag);
int maria_chk_size(HA_CHECK *param, MARIA_HA *info);
@@ -382,19 +394,19 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info,
const char *name, int rep_quick);
int maria_change_to_newfile(const char *filename, const char *old_ext,
- const char *new_ext, uint raid_chunks, myf myflags);
+ const char *new_ext, myf myflags);
void maria_lock_memory(HA_CHECK *param);
int maria_update_state_info(HA_CHECK *param, MARIA_HA *info, uint update);
void maria_update_key_parts(MARIA_KEYDEF *keyinfo, ulong *rec_per_key_part,
- ulonglong *unique, ulonglong *notnull,
- ulonglong records);
+ ulonglong *unique, ulonglong *notnull,
+ ulonglong records);
int maria_filecopy(HA_CHECK *param, File to, File from, my_off_t start,
- my_off_t length, const char *type);
+ my_off_t length, const char *type);
int maria_movepoint(MARIA_HA *info, byte *record, my_off_t oldpos,
- my_off_t newpos, uint prot_key);
+ my_off_t newpos, uint prot_key);
int maria_write_data_suffix(MARIA_SORT_INFO *sort_info, my_bool fix_datafile);
int maria_test_if_almost_full(MARIA_HA *info);
-int maria_recreate_table(HA_CHECK *param, MARIA_HA ** org_info, char *filename);
+int maria_recreate_table(HA_CHECK *param, MARIA_HA **org_info, char *filename);
int maria_disable_indexes(MARIA_HA *info);
int maria_enable_indexes(MARIA_HA *info);
int maria_indexes_are_disabled(MARIA_HA *info);
diff --git a/include/my_base.h b/include/my_base.h
index 63af3bf228d..7b001793fcf 100644
--- a/include/my_base.h
+++ b/include/my_base.h
@@ -48,7 +48,7 @@
#define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */
#define HA_OPEN_FROM_SQL_LAYER 64
- /* The following is parameter to ha_rkey() how to use key */
+/* The following is parameter to ha_rkey() how to use key */
/*
We define a complete-field prefix of a key value as a prefix where
@@ -440,7 +440,7 @@ enum en_fieldtype {
};
enum data_file_type {
- STATIC_RECORD,DYNAMIC_RECORD,COMPRESSED_RECORD
+ STATIC_RECORD, DYNAMIC_RECORD, COMPRESSED_RECORD, BLOCK_RECORD
};
/* For key ranges */
diff --git a/include/my_handler.h b/include/my_handler.h
index 9b086036389..fd1bafe8d5c 100644
--- a/include/my_handler.h
+++ b/include/my_handler.h
@@ -58,33 +58,35 @@ typedef struct st_HA_KEYSEG /* Key-portion */
} HA_KEYSEG;
#define get_key_length(length,key) \
-{ if ((uchar) *(key) != 255) \
- length= (uint) (uchar) *((key)++); \
+{ if (*(uchar*) (key) != 255) \
+ length= (uint) *(uchar*) ((key)++); \
else \
- { length=mi_uint2korr((key)+1); (key)+=3; } \
+ { length= mi_uint2korr((key)+1); (key)+=3; } \
}
#define get_key_length_rdonly(length,key) \
-{ if ((uchar) *(key) != 255) \
- length= ((uint) (uchar) *((key))); \
+{ if (*(uchar*) (key) != 255) \
+ length= ((uint) *(uchar*) ((key))); \
else \
- { length=mi_uint2korr((key)+1); } \
+ { length= mi_uint2korr((key)+1); } \
}
#define get_key_pack_length(length,length_pack,key) \
-{ if ((uchar) *(key) != 255) \
- { length= (uint) (uchar) *((key)++); length_pack=1; }\
+{ if (*(uchar*) (key) != 255) \
+ { length= (uint) *(uchar*) ((key)++); length_pack= 1; }\
else \
- { length=mi_uint2korr((key)+1); (key)+=3; length_pack=3; } \
+ { length=mi_uint2korr((key)+1); (key)+= 3; length_pack= 3; } \
}
#define store_key_length_inc(key,length) \
{ if ((length) < 255) \
- { *(key)++=(length); } \
+ { *(key)++= (length); } \
else \
{ *(key)=255; mi_int2store((key)+1,(length)); (key)+=3; } \
}
+#define size_to_store_key_length(length) ((length) < 255 ? 1 : 3)
+
#define get_rec_bits(bit_ptr, bit_ofs, bit_len) \
(((((uint16) (bit_ptr)[1] << 8) | (uint16) (bit_ptr)[0]) >> (bit_ofs)) & \
((1 << (bit_len)) - 1))
diff --git a/include/my_sys.h b/include/my_sys.h
index b02e1cd29fd..291fba103e8 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -771,6 +771,7 @@ extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,gptr element);
extern byte *alloc_dynamic(DYNAMIC_ARRAY *array);
extern byte *pop_dynamic(DYNAMIC_ARRAY*);
extern my_bool set_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
+extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements);
extern void get_dynamic(DYNAMIC_ARRAY *array,gptr element,uint array_index);
extern void delete_dynamic(DYNAMIC_ARRAY *array);
extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index);
diff --git a/include/myisamchk.h b/include/myisamchk.h
index 442fe5f7ece..66d0a77b62f 100644
--- a/include/myisamchk.h
+++ b/include/myisamchk.h
@@ -76,8 +76,8 @@
typedef struct st_sort_key_blocks /* Used when sorting */
{
- uchar *buff, *end_pos;
- uchar lastkey[HA_MAX_POSSIBLE_KEY_BUFF];
+ byte *buff, *end_pos;
+ byte lastkey[HA_MAX_POSSIBLE_KEY_BUFF];
uint last_length;
int inited;
} SORT_KEY_BLOCKS;
@@ -121,20 +121,24 @@ typedef struct st_handler_check_param
my_off_t search_after_block;
my_off_t new_file_pos, key_file_blocks;
my_off_t keydata, totaldata, key_blocks, start_check_pos;
- ha_rows total_records, total_deleted;
+ my_off_t used, empty, splits, del_length, link_used;
+ ha_rows total_records, total_deleted, records,del_blocks;
+ ha_rows full_page_count, tail_count;
ha_checksum record_checksum, glob_crc;
ha_checksum key_crc[HA_MAX_POSSIBLE_KEY];
+ ha_checksum tmp_key_crc[HA_MAX_POSSIBLE_KEY];
+ ha_checksum tmp_record_checksum;
ulong use_buffers, read_buffer_length, write_buffer_length;
ulong sort_buffer_length, sort_key_blocks;
ulong rec_per_key_part[HA_MAX_KEY_SEG * HA_MAX_POSSIBLE_KEY];
uint out_flag, warning_printed, error_printed, verbose;
uint opt_sort_key, total_files, max_level;
uint testflag, key_cache_block_size;
- int tmpfile_createflag;
+ int tmpfile_createflag, err_count;
myf myf_rw;
uint8 language;
my_bool using_global_keycache, opt_lock_memory, opt_follow_links;
- my_bool retry_repair, force_sort, calc_checksum;
+ my_bool retry_repair, force_sort, calc_checksum, static_row_size;
char temp_filename[FN_REFLEN];
IO_CACHE read_cache;
enum_handler_stats_method stats_method;
@@ -143,15 +147,15 @@ typedef struct st_handler_check_param
typedef struct st_sort_ftbuf
{
- uchar *buf, *end;
+ byte *buf, *end;
int count;
- uchar lastkey[HA_MAX_KEY_BUFF];
+ byte lastkey[HA_MAX_KEY_BUFF];
} SORT_FT_BUF;
typedef struct st_buffpek {
my_off_t file_pos; /* Where we are in the sort file */
- uchar *base,*key; /* Key pointers */
+ byte *base, *key; /* Key pointers */
ha_rows count; /* Number of rows in table */
ulong mem_count; /* numbers of keys in memory */
ulong max_keys; /* Max keys in buffert */