summaryrefslogtreecommitdiff
path: root/storage/maria/ma_blockrec.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/maria/ma_blockrec.h')
-rw-r--r--storage/maria/ma_blockrec.h54
1 files changed, 35 insertions, 19 deletions
diff --git a/storage/maria/ma_blockrec.h b/storage/maria/ma_blockrec.h
index 54145319b83..9e251a8c59d 100644
--- a/storage/maria/ma_blockrec.h
+++ b/storage/maria/ma_blockrec.h
@@ -18,11 +18,11 @@
*/
#define LSN_SIZE 7
-#define DIRCOUNT_SIZE 1 /* Stores number of rows on page */
+#define DIR_COUNT_SIZE 1 /* Stores number of rows on page */
#define EMPTY_SPACE_SIZE 2 /* Stores empty space on page */
#define PAGE_TYPE_SIZE 1
#define PAGE_SUFFIX_SIZE 0 /* Bytes for page suffix */
-#define PAGE_HEADER_SIZE (LSN_SIZE + DIRCOUNT_SIZE + EMPTY_SPACE_SIZE +\
+#define PAGE_HEADER_SIZE (LSN_SIZE + DIR_COUNT_SIZE + EMPTY_SPACE_SIZE +\
PAGE_TYPE_SIZE)
#define PAGE_OVERHEAD_SIZE (PAGE_HEADER_SIZE + DIR_ENTRY_SIZE + \
PAGE_SUFFIX_SIZE)
@@ -34,14 +34,18 @@
#define ROW_EXTENT_COUNT_SIZE 2
#define ROW_EXTENT_SIZE (ROW_EXTENT_PAGE_SIZE + ROW_EXTENT_COUNT_SIZE)
#define TAIL_BIT 0x8000 /* Bit in page_count to signify tail */
+/* Number of extents reserved MARIA_BITMAP_BLOCKS to store head part */
#define ELEMENTS_RESERVED_FOR_MAIN_PART 4
+/* Fields before 'row->null_field_lengths' used by find_where_to_split_row */
#define EXTRA_LENGTH_FIELDS 3
+/* Size for the different parts in the row header (and head page) */
+
#define FLAG_SIZE 1
#define TRANSID_SIZE 6
#define VERPTR_SIZE 7
#define DIR_ENTRY_SIZE 4
-#define FIELD_OFFSET_SIZE 2
+#define FIELD_OFFSET_SIZE 2 /* size of pointers to field starts */
/* Minimum header size needed for a new row */
#define BASE_ROW_HEADER_SIZE FLAG_SIZE
@@ -51,8 +55,8 @@
enum en_page_type { UNALLOCATED_PAGE, HEAD_PAGE, TAIL_PAGE, BLOB_PAGE, MAX_PAGE_TYPE };
#define PAGE_TYPE_OFFSET LSN_SIZE
-#define DIR_ENTRY_OFFSET LSN_SIZE+PAGE_TYPE_SIZE
-#define EMPTY_SPACE_OFFSET (DIR_ENTRY_OFFSET + DIRCOUNT_SIZE)
+#define DIR_COUNT_OFFSET LSN_SIZE+PAGE_TYPE_SIZE
+#define EMPTY_SPACE_OFFSET (DIR_COUNT_OFFSET + DIR_COUNT_SIZE)
#define PAGE_CAN_BE_COMPACTED 128 /* Bit in PAGE_TYPE */
@@ -64,10 +68,15 @@ enum en_page_type { UNALLOCATED_PAGE, HEAD_PAGE, TAIL_PAGE, BLOB_PAGE, MAX_PAGE_
#define ROW_FLAG_EXTENTS 128
#define ROW_FLAG_ALL (1+2+4+8+128)
-/* Variables that affects how data pages are utilized */
+/******** Variables that affects how data pages are utilized ********/
+
+/* Minium size of tail segment */
#define MIN_TAIL_SIZE 32
-/* Fixed part of Max possible header size; See table in ma_blockrec.c */
+/*
+ Fixed length part of Max possible header size; See row data structure
+ table in ma_blockrec.c.
+*/
#define MAX_FIXED_HEADER_SIZE (FLAG_SIZE + 3 + ROW_EXTENT_SIZE + 3)
#define TRANS_MAX_FIXED_HEADER_SIZE (MAX_FIXED_HEADER_SIZE + \
TRANSID_SIZE + VERPTR_SIZE + \
@@ -77,21 +86,30 @@ enum en_page_type { UNALLOCATED_PAGE, HEAD_PAGE, TAIL_PAGE, BLOB_PAGE, MAX_PAGE_
#define MAX_ROWS_PER_PAGE 255
/* Bits for MARIA_BITMAP_BLOCKS->used */
+/* We stored data on disk in the block */
#define BLOCKUSED_USED 1
+/* Bitmap on disk is block->org_bitmap_value ; Happens only on update */
#define BLOCKUSED_USE_ORG_BITMAP 2
+/* We stored tail data on disk for the block */
#define BLOCKUSED_TAIL 4
-/* defines that affects allocation (density) of data */
+/******* defines that affects allocation (density) of data *******/
-/* If we fill up a block to 75 %, don't create a new tail page for it */
+/*
+ If the tail part (from the main block or a blob) uses more than 75 % of
+ the size of page, store the tail on a full page instead of a shared
+ tail page.
+*/
#define MAX_TAIL_SIZE(block_size) ((block_size) *3 / 4)
+extern uchar maria_bitmap_marker[2];
+
/* Functions to convert MARIA_RECORD_POS to/from page:offset */
-static inline MARIA_RECORD_POS ma_recordpos(ulonglong page, uint offset)
+static inline MARIA_RECORD_POS ma_recordpos(ulonglong page, uint dir_entry)
{
- DBUG_ASSERT(offset <= 255);
- return (MARIA_RECORD_POS) ((page << 8) | offset);
+ DBUG_ASSERT(dir_entry <= 255);
+ return (MARIA_RECORD_POS) ((page << 8) | dir_entry);
}
static inline my_off_t ma_recordpos_to_page(MARIA_RECORD_POS record_pos)
@@ -99,17 +117,17 @@ static inline my_off_t ma_recordpos_to_page(MARIA_RECORD_POS record_pos)
return record_pos >> 8;
}
-static inline my_off_t ma_recordpos_to_offset(MARIA_RECORD_POS record_pos)
+static inline my_off_t ma_recordpos_to_dir_entry(MARIA_RECORD_POS record_pos)
{
return record_pos & 255;
}
/* ma_blockrec.c */
void _ma_init_block_record_data(void);
-my_bool _ma_once_init_block_row(MARIA_SHARE *share, File dfile);
-my_bool _ma_once_end_block_row(MARIA_SHARE *share);
-my_bool _ma_init_block_row(MARIA_HA *info);
-void _ma_end_block_row(MARIA_HA *info);
+my_bool _ma_once_init_block_record(MARIA_SHARE *share, File dfile);
+my_bool _ma_once_end_block_record(MARIA_SHARE *share);
+my_bool _ma_init_block_record(MARIA_HA *info);
+void _ma_end_block_record(MARIA_HA *info);
my_bool _ma_update_block_record(MARIA_HA *info, MARIA_RECORD_POS pos,
const byte *record);
@@ -136,8 +154,6 @@ my_bool _ma_compare_block_record(register MARIA_HA *info,
my_bool _ma_bitmap_init(MARIA_SHARE *share, File file);
my_bool _ma_bitmap_end(MARIA_SHARE *share);
my_bool _ma_flush_bitmap(MARIA_SHARE *share);
-my_bool _ma_read_bitmap_page(MARIA_SHARE *share, MARIA_FILE_BITMAP *bitmap,
- ulonglong page);
my_bool _ma_bitmap_find_place(MARIA_HA *info, MARIA_ROW *row,
MARIA_BITMAP_BLOCKS *result_blocks);
my_bool _ma_bitmap_release_unused(MARIA_HA *info, MARIA_BITMAP_BLOCKS *blocks);