1. 02 May, 2006 1 commit
    • marko's avatar
      branches/zip: Prepare for writing compressed and reading pages. · f118a9c1
      marko authored
      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().
      f118a9c1
  2. 28 Apr, 2006 2 commits
    • marko's avatar
      branches/zip: page_cur_insert_rec_low(): Write a log record of · 7d6a4e70
      marko authored
      recompressing the page.
      7d6a4e70
    • marko's avatar
      branches/zip: Minor improvements. · bb638768
      marko authored
      buf_flush_init_for_writing(): Calculate the checksum with the actual zip_size.
      
      buf_calc_zblob_page_checksum(): Skip the field FIL_PAGE_SPACE_OR_CHKSUM.
      
      trx_sys_doublewrite_init_or_restore_page(): Use the actual zip_size.
      
      page_cur_insert_rec_low(): If page_zip_alloc() fails, try compressing the
      whole page afterwards.
      bb638768
  3. 27 Apr, 2006 1 commit
  4. 26 Apr, 2006 1 commit
    • marko's avatar
      branches/zip: Minor cleanup and bug fixes · ed354ce8
      marko authored
      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.
      ed354ce8
  5. 25 Apr, 2006 1 commit
    • marko's avatar
      branches/zip: Write the compressed page size to SYS_TABLES.TYPE · 6dd1d8c4
      marko authored
      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.
      6dd1d8c4
  6. 12 Apr, 2006 2 commits
  7. 11 Apr, 2006 4 commits
    • marko's avatar
      branches/zip: Fix some crash recovery bugs. · 483faa77
      marko authored
      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.
      483faa77
    • marko's avatar
      branches/zip: Add the redo log type MLOG_ZIP_PAGE_COMPRESS. Remove · f119108f
      marko authored
      MLOG_ZIP_LIST_START_COPY and MLOG_ZIP_LIST_END_COPY.
      
      btr_compress(): Simplify a debug assertion.
      
      page_zip_compress_write_log(), page_zip_parse_compress(): New functions.
      
      page_cur_parse_insert_rec(): Simplify the code.
      
      page_parse_create_zip(): Removed.
      
      page_create_zip(), page_copy_rec_list_end(),
      page_copy_rec_list_start(): Invoke page_zip_compress_write_log().
      f119108f
    • marko's avatar
      branches/zip: Minor cleanup. Remove MLOG_ZIP_ROOT_RAISE. · c65c50ae
      marko authored
      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.
      c65c50ae
    • marko's avatar
      branches/zip: Disable accidentally committed debug code that would break · e20dfbc0
      marko authored
      crash recovery of uncompressed tables.
      e20dfbc0
  8. 10 Apr, 2006 2 commits
    • marko's avatar
      branches/zip: Replace the redo log entry types · 9b620097
      marko authored
      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.
      9b620097
    • marko's avatar
      branches/zip: btr_lift_page_up(): Remove return value; · b4fe38d5
      marko authored
      assume that the operation always succeeds.
      b4fe38d5
  9. 07 Apr, 2006 3 commits
    • marko's avatar
      branches/zip: Implement crash recovery of writing BLOB pointers. · 0906cd0c
      marko authored
      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().
      0906cd0c
    • marko's avatar
      branches/zip: Implement crash recovery of writing to the page header. · 44b22ebe
      marko authored
      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.
      44b22ebe
    • marko's avatar
      branches/zip: Implement the crash recovery of MLOG_ZIP_WRITE_NODE_PTR. · 52b7eb50
      marko authored
      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.
      52b7eb50
  10. 05 Apr, 2006 1 commit
    • marko's avatar
      branches/zip: Initial steps towards disk-based storage of compressed pages. · a1661efb
      marko authored
      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.
      a1661efb
  11. 04 Apr, 2006 1 commit
    • marko's avatar
      branches/zip: Minor cleanup. · 7b57df22
      marko authored
      Replace btr_page_get_level() with page_is_leaf() where possible.
      
      row_purge_upd_exist_or_extern(): Remove obsolete TODO comment.
      
      dtuple_convert_big_rec(): Replace a flag variable with goto.
      7b57df22
  12. 03 Apr, 2006 3 commits
    • marko's avatar
      branches/zip: Fix some BLOB handling bugs. · e14e7186
      marko authored
      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.
      e14e7186
    • marko's avatar
      branches/zip: Add TODO comment to · c7edc219
      marko authored
      row_purge_upd_exist_or_extern().
      c7edc219
    • marko's avatar
      branches/zip: Fix some bugs · f4a69e01
      marko authored
      btr_page_split_and_insert(): Avoid dereferencing pointers to garbage on
      the old page.
      
      btr_cur_pessimistic_insert(): Pass pointer to big_rec_vec to
      btr_cur_optimistic_insert().
      
      trx_undo_prev_version_build(): Only invoke rec_set_field_extern_bits()
      if n_ext_vect > 0.
      
      row_ins_index_entry_low(): Simplify a debug assertion.
      
      page_copy_rec_list_end_no_locks(): Make the loop slightly more readable.
      
      page_delete_rec_list_end(): Delete records on compressed pages one by one.
      f4a69e01
  13. 30 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Minor fixes for BLOB handling. · b63ff3be
      marko authored
      page_zip_get_n_prev_extern(): Ignore deleted records.
      
      page_zip_write_rec(): Remove bogus debug assertion about the BLOB pointer
      being zero-filled.  It would fail when reallocating records from the page
      heap or when updating records in place.
      b63ff3be
  14. 29 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Correctly identify deleted records when deciding whether to · 35958913
      marko authored
      copy BLOB pointers.
      
      page_zip_dir_find_free_low(): New function,
      split from page_zip_dir_find_free().
      
      Add comments about processing the records in heap_no order.
      
      Fix some typographic errors in comments and improve formatting.
      
      page_zip_decompress(): Initialize (clear) the BLOB pointers in deleted records.
      
      page_zip_clear_rec(): Relocate page_zip_validate() assertions, so that they
      will not fail if a record containing BLOB pointers is being deleted.
      
      Note that page_zip_validate() will fail if page_zip_clear_rec() is unable
      to clear the record.
      35958913
  15. 28 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Fix two bugs. · 8c7b1d22
      marko authored
      page_zip_decompress(): Pass size = d_stream.avail_in + 1
      to page_zip_apply_log(), since the terminating NUL byte is not included
      in the space reserved for the compressed data stream.
      
      page_zip_clear_rec(): Clear also node pointer fields.
      8c7b1d22
  16. 27 Mar, 2006 2 commits
  17. 23 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Do not clear the records in page_delete_rec_list_end(). · c7200092
      marko authored
      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.
      c7200092
  18. 22 Mar, 2006 3 commits
  19. 20 Mar, 2006 2 commits
    • marko's avatar
      branches/zip: Minor improvements. · 6ecd734f
      marko authored
      page_zip_compress(): Add a debug check that the trx_id and roll_ptr columns
      of deleted records are zero-filled.  This should provide some detection
      against misdirected writes.
      
      page_zip_decompress(): Correct typos in comments.
      6ecd734f
    • marko's avatar
      branches/zip: Minor improvements · 6ba1aed1
      marko authored
      btr_page_get_father_for_rec(): Remove redundant assertion.
      Add UNIV_UNLIKELY to an assertion-like test.
      
      btr_validate_level(): Add debug assertions on page_zip_validate().
      
      page_zip_compress(): Remove bogus assertion.
      
      page_zip_write_rec(): Assert that the record written is neither delete-marked
      nor deleted.
      6ba1aed1
  20. 17 Mar, 2006 2 commits
    • marko's avatar
      branches/zip: Minor bug fix. test-insert still does not pass. · 4596d491
      marko authored
      page_zip_compress(): Assert that trx_id and roll_ptr are zero for
      deleted records.
      
      page_zip_clear_rec(): Remove comment about need for redo logging.
      This operationg is already logged on a higher level.
      
      page_delete_rec_list_end(): Always invoke page_zip_clear_rec()
      on compressed pages.
      4596d491
    • marko's avatar
      branches/zip: Minor fixes · f2204447
      marko authored
      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.
      f2204447
  21. 16 Mar, 2006 2 commits
    • marko's avatar
      branches/zip: Improve the clearing of deleted records. Try to support · f137c038
      marko authored
      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.
      f137c038
    • marko's avatar
      branches/zip: Minor fixes · cd7583af
      marko authored
      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.
      cd7583af
  22. 14 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Bug fixes for BLOB handling. At least one bug remains: · 9d91b4bd
      marko authored
      page_zip_dir_delete() will need to handle BLOBs.
      
      rec_set_field_extern_bits(), rec_set_field_extern_bits_new():
      Add parameter offsets.
      
      rec_offs_set_nth_extern(): New function to set an extern bit in offsets.
      This will be called when an extern bit is set in a record.
      
      page_cur_rec_insert(), page_cur_insert_rec_low(): Document that the
      parameter "offsets" is in/out.
      
      page_zip_dir_delete(): Note that the array of BLOB pointers will need
      to be shifted.
      
      page0zip.ic: Document the entry type for clearing a record.
      
      page_zip_available(): Add parameter "index".  Remove parameters
      "is_leaf" and "is_clustered".
      
      page_zip_get_trailer_len(): New function for computing the trailer length
      of the compressed page.
      
      page_zip_apply_log(): Implement the modification log entry type for
      clearing the data bytes of a record.
      
      page_zip_decompress(): Initialize n_blobs when actually copying the
      BLOB pointers to place.
      
      page_zip_validate(): Add diagnostic messages for failures.  Check
      also m_start, m_end, and n_blobs.
      
      page_zip_write_blob_ptr(): Add page_zip_validate() assertion.
      9d91b4bd
  23. 13 Mar, 2006 2 commits
    • marko's avatar
      branches/zip: Implement in-place updates of BLOB pointers. · 65dfefe2
      marko authored
      There are still some bugs in the code.
      
      btr_store_big_rec_extern_fields(): Remove assertion on dict_table_is_zip()
      to ease testing.
      
      btr_free_externally_stored_field(): Test page_zip instead of
      dict_table_is_zip().
      
      page_zip_write_rec(): Add parameter "create".  Try to handle externally
      stored columns.
      
      rec_offs_any_extern(): Correct the function comment.
      
      Add rec_offs_n_extern() and page_zip_get_n_prev_extern().
      
      page_zip_dir_decode(): Replace assertion with if (...) return(FALSE).
      
      page_zip_decompress(): Do not clear page_zip->n_blobs after counting the
      BLOBs.
      
      page_zip_write_blob_ptr(): Use page_zip_get_n_prev_extern().
      Correct an off-by-one error in memcpy().
      65dfefe2
    • marko's avatar
      branches/zip: Minor improvements. · 23d19f8f
      marko authored
      btr_cur_pessimistic_update(): Remove extraneous page_zip_write_rec() call.
      
      btr_cur_set_ownership_of_extern_field(): Simplify the logic.
      
      row_upd_rec_in_place(): Make use of parameter "index" in debug assertions.
      
      page_zip_write_rec(): Remove TODO comment about redo log record.
      The write will already be covered by higher-level log entries.
      23d19f8f