1. 12 Apr, 2006 2 commits
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 27 Mar, 2006 2 commits
  12. 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
  13. 22 Mar, 2006 3 commits
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 10 Mar, 2006 3 commits
  20. 09 Mar, 2006 3 commits
    • marko's avatar
      branches/zip: Note that TRX_ID and ROLL_PTR only exist on B-tree leaf pages · e8e9fb28
      marko authored
      of clustered indexes.  Previously, parts of the code assumed that these
      columns would exist on all leaf pages.  Simplify the update-in-place of
      these columns.
      
      Add inline function dict_index_is_clust() to replace all tests
      index->type & DICT_CLUSTERED.
      
      Remove the redo log entry types MLOG_ZIP_WRITE_TRX_ID and
      MLOG_ZIP_WRITE_ROLL_PTR, because the modifications to these columns
      are covered by logical logging.
      
      Fuse page_zip_write_trx_id() and page_zip_write_roll_ptr() into
      page_zip_write_trx_id_and_roll_ptr().
      
      page_zip_dir_add_slot(), page_zip_available(): Add flag "is_clustered",
      so that no space will be reserved for TRX_ID and ROLL_PTR on leaf pages
      of secondary indexes.
      
      page_zip_apply_log(): Flag an error when val==0 is encoded with two bytes.
      
      page_zip_write_rec(): Add debug assertions that there is enough space
      available for the entry before copying the data bytes of the record.
      e8e9fb28
    • marko's avatar
      branches/zip: Fix a bug in optimistic update. · e677258a
      marko authored
      btr_cur_update_in_place(): Remove the page_zip_write_rec() call,
      because row_upd_rec_in_place() already calls it.
      e677258a
    • marko's avatar
      branches/zip: Fix a bug in the insertion of a record. · bee191b7
      marko authored
      page_dir_split_slot(): Do not pass page_zip to page_dir_slot_set_n_owned(),
      because the caller will rewrite the dense page directory later.  At this
      point of execution, the dense directory will not contain the newly inserted
      record, which may end up being written to new_slot.
      bee191b7