dict_load_table(): Initialize table->flags with zip_size.
mlog_parse_nbytes(), mlog_parse_string(): Add parameter page_zip and
write the changes also to the compressed page if one is specified.
Assert that these functions are not called on FIL_PAGE_INDEX pages.
buf_page_io_complete(): Replace block->frame with frame where appropriate.
recv_parse_or_apply_log_rec_body(): Add ut_a(!page_zip) where appropriate.
page_parse_delete_rec_list(): Add parameter page_zip.
btr_rec_copy_externally_stored_field(): Add parameter zip_size.
Do not call buf_block_align(rec), because rec can also be in
dynamically allocated memory. buf_block_align() can only be invoked
on addresses inside the buffer pool.
page_zip_clear_rec(): Improve formatting.
ut_malloc() to avoid breaking the latching order.
page_rec_check(), page_dir_slot_get_rec(): Replace buf_frame_align()
with ut_align_down() to avoid assertion failures in page_zip_validate().
with page_zip_available() in order to avoid an extra page_zip_compress().
page_zip_available(): Make the function public.
page0zip.ic: Sort the inline function declarations in order to avoid
forward references, which do not work on some compilers.
on B-tree index pages.
page_rec_set_next(): Assert that rec != next.
rec_get_next_ptr(), rec_get_next_offs(): On compact pages, assert that
there are at least REC_N_NEW_EXTRA_BYTES + 1 between records.
page_cur_insert_rec_write_log(): Replace a buf_frame_align() call
with ut_align_offset().
page_cur_insert_rec_low(): Assert that current_rec != insert_rec.
page_zip_reorganize() was invoked.
btr_compress(): Obtain orig_pred and orig_succ after copying the records.
Add a debug assertion about FIL_PAGE_PREV.
page_copy_rec_list_end(), page_copy_rec_list_start(): Change the return
type from ibool to rec_t. Adjust the return value after invoking
page_zip_reorganize().
fil_read(), fil_write(): Make these inlined functions in fil0fil.c.
fil_write_lsn_and_arch_no_to_file(): Remove the parameter space_id and
note that this function is to be called on the system tablespace, which
is uncompressed.
recv_parse_or_apply_log_rec_body(): Assert that mlog_parse_nbytes() is
never called on compressed B-tree pages.
page_zip_simple_validate(): Correct a typo in a debug assertion.
xdes_calc_descriptor_page(): Fix an incorrect debug assertion.
ut_is_2pow(): New function for testing if a number is zero or a power of two.
Use this function instead of bitwise arithmetics or ut_2_power_up() where
possible.
mlog_parse_string(): Remove an off-by-one error in an assertion.
fil_extend_space_to_desired_size(): fsp_header_get_free_limit(),
fsp_try_extend_data_file(): Replace UNIV_PAGE_SIZE with the actual page size.
PAGE_ZIP_MIN_SIZE: New constant, to be used in assertions.
FSP_SEG_INODES_PER_PAGE: Add parameter zip_size.
fsp_seg_inode_page_get_nth_inode(), fsp_seg_inode_page_find_used(),
fsp_seg_inode_page_find_free(): Add parameter zip_size.
os_aio_simulated_handle(): Temporarily disable os_file_check_page_trailers(),
which cannot be invoked on compressed pages.
dict_table_add_system_columns(): New function, split from
dict_table_add_to_cache().
mlog_parse_index(): Add system columns to the dummy table and identify
DB_TRX_ID and DB_ROLL_PTR in the dummy index.
buf_LRU_get_free_block(): Note that page_zip->data should be allocated from
an aligned memory pool.
buf_flush_buffered_writes(): Write compressed pages to disk.
buf_flush_post_to_doublewrite_buf(): Copy compressed pages to the
doublewrite buffer. Zero fill any excess space.
buf_flush_init_for_writing(): Treat all compressed pages the same.
buf_read_page_low(): Read compressed pages from disk.
buf_page_io_complete(): Process compressed pages.
trx_sys_doublewrite_init_or_restore_page(): Process compressed pages.
mlog_write_initial_log_record_fast(): Enable a debug printout
#ifdef UNIV_LOG_DEBUG.
fsp_header_init(), fsp_fill_free_list(): Pass the compressed page size
to buf_page_create().
page_zip_compress_write_log(): Flatten the if-else if-else logic.
page_zip_parse_write_blob_ptr(): Do not test page_zip if page==NULL.
page_zip_parse_write_node_ptr(): Do not test page_zip if page==NULL.
Invoke mlog_close() correctly.
row_sel_store_row_id_to_prebuilt(): Add UNIV_UNLIKELY hint to an
assertion-like test.
page_zip_compress_write_log(): Make static.
page_zip_compress(): Add optional parameter mtr for redo logging.
page_zip_reorganize(): Low-level counterpart of btr_page_reorganize().
page_zip_copy(): Add debug assertions about mtr_memo_contains.
page_cur_insert_rec_low(): Try page_zip_reorganize() and seek to the
new position of insert_rec if it succeeds.
page_copy_rec_list_end(), page_copy_rec_list_start():
Try page_zip_reorganize().
page_move_rec_list_end(): Remove bogus comment.
page_zip_copy(), page_zip_compress_write_log(): Add parameter 'index'.
page_zip_parse_write_header(): Check for !page_zip only if page != NULL.
page_zip_compress_write_log(), page_zip_parse_compress(): Omit some
fields in the page header. Omit the unused bytes between the modification
log and the page trailer.
parse_or_apply_log_rec_body(): Remove a bogus debug assertion.
page_move_rec_list_start() and page_move_rec_list_end(). Relax the
conditions on insert_will_fit if page_zip is set.
page_delete_rec_list_start(): Make public.
page_zip_copy(): Clear REC_INFO_MIN_REC_FLAG if FIL_PAGE_PREV != FIL_NULL.
btr_validate_level(): Add missing parameter to added buf_page_print() calls.
btr_root_raise_and_insert(): Replace low-level code with page_zip_copy().
page_zip_copy(): New function to copy the data payload of a compressed page,
byte for byte. The file page header and trailer are not copied, to avoid
overwriting the fields FIL_PAGE_OFFSET, FIL_PAGE_PREV and FIL_PAGE_NEXT.
btr_cur_compress_if_useful(): Replace if () return(); return() with return.
page_rec_get_next_low(): New function.
page_rec_get_prev(): Invoke page_is_comp() outside the loop.
Replace page_rec_get_next() with loop-specific instances of
page_rec_get_next_low().
page_copy_rec_list_end(): Add some debug assertions.
Introduce FIL_PAGE_ZBLOB_DATA as a synonym for FIL_PAGE_FILE_FLUSH_LSN.
btr_store_big_rec_extern_fields(): Make the assertion about
dict_table_zip_size() more accurate.
buf_LRU_get_free_block(), buf_block_alloc(): Add parameter zip_size.
buf_calc_zblob_page_checksum(): Remove. Replace with page_zip_calc_checksum().
buf_page_init(): Remove parameter zip_size.
buf_page_io_complete(): Add a placeholder for handling compressed pages.
trx_doublewrite_page_inside(): Remove redundant function.
page_zip_write_rec(): Relax an overly tight assertion about blob_no.
buf_page_print(): Print also compressed pages. Add parameter zip_size.
buf_flush_init_for_writing(): Stamp the fields on a compressed B-tree index
page.
Add the header field FIL_PAGE_ZBLOB_SPACE_ID as an alias of FIL_PAGE_PREV.
page_zip_calc_checksum(): New function.
page_zip_compress(): Avoid copying the fields that are written in
buf_flush_init_for_writing().
page_zip_header_cmp(): New function for comparing those fields of the
page header that will not be written in buf_flush_init_for_writing().
btr_page_reorganize_low(): Rename new_page to temp_page.
btr_store_big_rec_extern_fields(): FIL_PAGE_TYPE is 2 bytes, not 4.
buf_page_init(), buf_page_create(), buf_read_page_low(),
buf_page_init_for_read(): Add parameter zip_size.
buf_page_init_for_backup_restore(),
recv_apply_log_recs_for_backup(): Enclose in #ifdef UNIV_HOTBACKUP.
Enclose some debug code in #ifdef UNIV_LOG_REPLICATE.
page_zip_write_header_log(): Replace page_zip with a pointer to
the uncompressed page.
page_zip_write_rec(): Relax an assertion about blob_no + n_ext.
page_copy_rec_list_to_created_page_write_log(): Allow logging to be disabled.
and to the file space header (FSP_PAGE_ZIP_SIZE, renamed from
FSP_LOWEST_NO_WRITE).
fil_space_struct: Add zip_size.
dict_table_struct: Embed zip_size in flags.
dict_table_zip_size(): Infer zip_size from table->flags.
dict_sys_tables_get_zip_size(): Read zip_size from SYS_TABLES.TYPE.
fil_space_get_zip_size(): Read zip_size from the file space header.
Add the redo log entry type MLOG_ZIP_FILE_CREATE.
page_zip_alloc(): Add parameter "mtr" and log successful calls
to page_zip_compress().
page_zip_write_blob_ptr(), page_zip_write_node_ptr(): Write the offset on
the uncompressed page, because mlog_write_initial_log_record_fast()
does not do so.
page_zip_write_header_log(), page_zip_parse_write_header(): Encode the
offset in one byte.
btr_page_create(): Remove parameters "prev" and "next". The pointers
to adjacent B-tree pages will be set in the caller before any user
records are inserted.
Remove the redo log entry type MLOG_ZIP_ROOT_RAISE, since
btr_root_raise_and_insert() will not defer modifications to
the compressed page.
btr_attach_half_pages(): Add parameter new_page_zip.
MLOG_ZIP_COMPRESS and MLOG_ZIP_DECOMPRESS with higher-level entry types.
Implement the logging and crash recovery of MLOG_ZIP_PAGE_CREATE.
page_create_zip(): New function for creating a compressed B-tree page.
page_parse_create_zip(): New function for applying a MLOG_ZIP_PAGE_CREATE
redo log record.
btr_page_create(): Remove the prototype. Add parameters page_zip, level,
prev, and next.
btr0btr.c: Eliminate page_zip_compress() calls where possible.
page_zip_alloc(), page_zip_compress(), page_zip_decompress(),
page_zip_clear_rec(): Remove parameter mtr.
recv_parse_or_apply_log_rec_body(): Handle MLOG_ZIP_PAGE_CREATE.
Add TODO comments for the other added redo log entry types.
page_zip_parse_write_blob_ptr(): New function for applying the redo log
record MLOG_ZIP_WRITE_BLOB_PTR.
page_zip_write_blob_ptr(): Write the necessary information to the redo log.
page0zip.c: Tighten the assertions to ensure that blob_ptr < page_zip->n_blobs.
page_zip_write_node_ptr(): Use memcpy() instead of mach_write_to_4().
page_zip_parse_write_header(): New function for applying the redo log of
MLOG_ZIP_WRITE_HEADER.
page_zip_parse_write_node_ptr(): Mark the log corrupted if !page_zip.
page_zip_parse_write_node_ptr(): New function to apply a redo log of
MLOG_ZIP_WRITE_NODE_PTR.
page_zip_write_node_ptr(): Write all needed information to the redo log.
page_zip_write_header_log(): Write all necessary information to the redo log.
dict_mem_table_create(): Account for DICT_TF_COMPRESSED in a debug assertion.
btr_store_big_rec_extern_fields(), btr_free_externally_stored_field(),
btr_copy_externally_stored_field(): Implement the disk format for
compressed BLOB pages.
btr_copy_externally_stored_field(): Improve error reporting and handling
when decompressing BLOB pages.
buf_flush_init_for_writing(), buf_page_is_corrupted(), buf_page_print():
Account for compressed BLOB pages (FIL_PAGE_TYPE_ZBLOB).
buf_calc_zblob_page_checksum(): New function.
btr_store_big_rec_extern_fields(): Assert that page_zip is non-NULL
if and only if dict_table_is_zip() holds.
btr_free_externally_stored_field(): Observe dict_table_is_zip().
Allow page_zip==NULL even if dict_table_is_zip(). Remove the
related TODO comment in row_purge_upd_exist_or_extern().
page_zip_available(): uncompressed_size already includes
PAGE_ZIP_DIR_SLOT_SIZE.
page_zip_decompress(): Remove bogus assertion d_stream.next_out == last.
Do not subtract BTR_EXTERN_FIELD_REF_SIZE from d_stream.avail_in when
decompressing records, because the records may be deleted later in
page_zip_apply_log(), and no BLOB pointers are allocated for deleted
records.
page_delete_rec_list_end(): Do not invoke page_zip_clear_rec().
page_zip_clear_rec(): Remove the global declaration. Add an assertion
that the record must be on the free list. Copy onl rec_offs_data_size()
bytes before attempting to clear the record and to compress the page.
page_zip_compress(), page_zip_write_rec(): Remove debug assertions that
trx_id, roll_ptr and node_ptr of deleted records be zero-filled.
Restore page_zip_clear_rec() to the global scope.
Invoke it in page_delete_rec_list_end().
Add debug assertions to page0zip.c to guard against overwriting data
on the compressed page.
operations on BLOB columns. There are some bugs in the code, because
test-insert and a few other tests fail.
page_mem_free(): Add parameter index. Decrement PAGE_N_RECS here.
Move some operations to page_zip_dir_delete().
page_zip_clear_rec(): Make this a static function.
page_zip_dir_delete(): Add parameters index and offsets.
Decrement PAGE_N_RECS and clear info_bits and n_owned.
page_zip_get_n_prev_extern(): Correct the synopsis and the algorithm.
Add parameter page_zip. Search the records in heap_no order instead
of collation order.
page_zip_compress(), page_zip_decompress(): Only copy BLOB pointers
and increment n_blobs for records that have not been deleted.
page_zip_clear_rec(): Clear trx_id and roll_ptr on the compressed page.
page_zip_dir_delete(): Decrement PAGE_N_RECS. Shift the array of
BLOB pointers. Call page_zip_clear_rec().
page_zip_dir_add_slot(): Shift the array of BLOB pointers to make
space of roll_ptr and trx_id.
page_cur_delete_rec(): Do not decrement PAGE_N_RECS or call
page_zip_clear_rec(), as page_mem_free() already does it.
trx-undo_prev_version_build(): Pass offsets==NULL to
rec_set_field_extern_bits().
rec_set_field_extern_bits(), rec_set_field_extern_bits_new():
Accept offsets==NULL.
row_upd_rec_in_place(): Remove the bogus comment that the function
would only be invoked on a clustered index. Remove the related
debug assertion.