1. 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
  2. 08 Mar, 2006 2 commits
    • marko's avatar
      branches/zip: Fix various bugs. · 4ea9fe18
      marko authored
      btr_root_raise_and_insert(): Because btr_page_set_level() must not
      change level from non-zero to zero on compressed pages, invoke
      btr_page_set_level() with page_zip==NULL and compress the entire
      root page after creating it from the scratch.
      
      btr_attach_half_pages(): Simplify the computation of lower_page_zip
      and upper_page_zip.  Invoke btr_node_ptr_set_child_page_no() with
      the correct page_zip.
      
      page0page.h: Add __attribute__((const)) to functions testing for
      infimum or supremum.
      
      page_zip_dir_delete(): Note that the third parameter may be NULL.
      Correct offset errors.
      
      page_zip_available(): Use n_heap instead of n_recs.
      
      page_zip_dir_find(), page_zip_dir_find_free(): Fix off-by-one error.
      
      page_zip_fields_encode(), page_zip_fields_decode(): Encode and decode
      index->n_nullable for non-leaf pages.
      
      page_zip_apply_log(): Write REC_NEW_HEAP_NO before calling
      rec_offs_make_valid().
      
      page_zip_write_node_ptr(): Correct off-by-one error.
      
      page_cur_search_with_match(): Make use of page_is_leaf().
      
      page_dir_add_slots(): Replaced with page_dir_add_slot().  Use memmove().
      4ea9fe18
    • marko's avatar
      branches/zip: btr_page_reorganize_low(): Assert page_zip_validate() · 4e22f340
      marko authored
      before and after the operation.
      4e22f340
  3. 07 Mar, 2006 3 commits
    • marko's avatar
      branches/zip: Minor bug fix · 4a09767d
      marko authored
      buf_flush_init_for_writing(): Copy FIL_PAGE_LSN to the compressed page.
      
      page_cur_insert_rec_low(): Add debug assertion.
      4a09767d
    • marko's avatar
      branches/zip: Fix errors in bit arithmetics. · ab747690
      marko authored
      page_zip_fixed_field_encode(), page_zip_fields_encode(),
      page_zip_fields_decode(): Do not waste one bit when encoding quantities
      larger than 127.
      
      page_zip_apply_log(), page_zip_write_rec(): Decode and encode
      heap_no >= 127 correctly.
      ab747690
    • marko's avatar
      branches/zip: Correctly restore extra bytes in page_zip_apply_log(). · a67a1628
      marko authored
      page_zip_apply_log(): Correct an off-by-one error.
      
      page_zip_write_rec(): Correct a debug assertion.
      Encode heap_no as soon as possible.
      a67a1628
  4. 06 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Fix some bugs in the insertion of records. · 1aca6cad
      marko authored
      row_upd_rec_in_place(), page_zip_write_rec(): Add parameter "index".
      
      page_dir_set_n_heap(): Add a debug assertion that on compressed
      pages, n_heap will always be incremented by one.  Improve code formatting.
      
      page_zip_dir_add_slot(): New function, called from
      page_cur_insert_rec_low() after page_mem_alloc_heap().
      
      rec_set_n_owned_new(): Do not call page_zip_rec_set_owned()
      on the supremum record.
      
      rec_offs_make_valid(): Add debug assertions.
      
      page_zip_dir_user_size(): Correct an off-by-one error in the debug assertion.
      
      page_zip_apply_log(): Add parameter trx_id_col.  Skip trx_id and roll_ptr.
      
      page_zip_decompress(): Simplify the handling of "storage" in the loop that
      copies the uncompressed fields.
      
      page_zip_write_rec(): Store trx_id and roll_ptr separately.
      
      page_zip_write_trx_id(), page_zip_write_roll_ptr(): Fix off-by-one errors.
      
      page_cur_insert_rec_low(): Call page_zip_dir_add_slot() after
      page_mem_alloc_heap().  Remove some redundant assertions.
      Pass page_zip to page_dir_split_slot().
      1aca6cad
  5. 03 Mar, 2006 4 commits
  6. 02 Mar, 2006 1 commit
    • marko's avatar
      branches/zip: Fix some bugs in incremental compression. · 7f2d91cb
      marko authored
      btr_create(): page_zip_compress() returns FALSE on failure.
      
      page_zip_write_header(): Write to page_zip->data[] instead of page_zip[].
      
      buf_flush_init_for_writing(): Add parameter page_zip and set the fields
      also in the header of the compressed page.
      
      btr_cur_search_to_nth_level(): Add ut_ad() on page_zip_validate().
      7f2d91cb
  7. 01 Mar, 2006 3 commits
  8. 28 Feb, 2006 1 commit
    • marko's avatar
      branches/zip: In page_zip_compress(), do not touch page_zip unless the · f7814d29
      marko authored
      operation succeeds.
      
      page_zip_dir_set(): Remove, as the slots will be written to a temporary
      buffer.
      
      page_zip_dir_encode(): Replace page_zip with buf.  Make some assertions
      more accurate.  Write the dense page directory to buf.
      
      page_zip_compress(): Allocate a temporary buffer for the compressed page
      except the page header.  Make some assertions more accurate.
      
      page_zip_compress(), page_zip_decompress(): Remove 2 bytes of empty space
      adjacent to the area reserved for storing uncompressed columns.
      f7814d29
  9. 27 Feb, 2006 5 commits
    • marko's avatar
      branches/zip: Fix a memory management bug. · e7acbec3
      marko authored
      page_zip_decompress(): Free index and heap at the end of the function.
      Do not write the index to the MLOG_ZIP_DECOMPRESS record, since it can be
      decoded from the compressed page.
      e7acbec3
    • marko's avatar
      branches/zip: Make page_delete_rec_list_start() work on compressed pages, · a71a1e9c
      marko authored
      now that deletion of records on compressed pages is guaranteed to succeed.
      a71a1e9c
    • marko's avatar
      branches/zip: Remove the possibility to relocate reallocated records · 897d28ca
      marko authored
      on a compressed page.
      
      page_zip_get_n_relocated(), page_zip_set_n_relocated(),
      page_zip_get_relocated(): Remove.
      
      page0zip.c, page0zip.ic: Remove all references to n_relocated.
      
      page_cur_insert_rec_low(): On pages that are compressed,
      never relocate records that are allocated from the free list.
      897d28ca
    • marko's avatar
      branches/zip: Correct bugs found by running ibtestblob. · 942ec176
      marko authored
      page_zip_compress(): Add assertions !c_stream.avail_in where appropriate.
      Add assertions on c_stream.next_in.  Correct malformed assertion on
      externs > c_stream.next_in.  Note that there may be trailing garbage after
      the last record.
      
      page_zip_fields_decode(): Correctly decode variable-length fields having
      maximum length greater than 255 bytes.
      
      page_zip_decompress(): Remove the special treatment of the case !n_dense.
      Replace the Z_NO_FLUSH argument of inflate() with Z_SYNC_FLUSH.
      Treat Z_OK return value the same as Z_BUF_ERROR: always check avail_out.
      After decompressing all records, decompress any trailing garbage.
      942ec176
    • marko's avatar
      branches/zip: Merge revisions 236:247 from trunk. · 40b0bf78
      marko authored
      40b0bf78
  10. 23 Feb, 2006 3 commits
  11. 22 Feb, 2006 2 commits
    • marko's avatar
      branches/zip: Minor cleanup. · 77a09481
      marko authored
      Remove the declaration of the undefined function
      page_zip_available_noninline().
      
      Make page_zip_available() private to page0zip.c and page0zip.ic.
      77a09481
    • marko's avatar
      branches/zip: Try to synchronize the updates of uncompressed and · 47da8abc
      marko authored
      compressed pages.
      
      btr_root_raise_and_insert(): Distinguish root_page_zip and new_page_zip.
      
      btr_cur_set_ownership_of_extern_field(): Do not log the write on the
      uncompressed page if it will be logged for page_zip.
      
      lock_rec_insert_check_and_lock(), lock_sec_rec_modify_check_and_lock():
      Update the max_trx_id field also on the compressed page.
      
      mlog_write_ulint(): Add UNIV_UNLIKELY hints.  Remove trailing white space.
      
      mlog_log_string(): Remove trailing white space.
      
      rec_set_field_extern_bits(): Remove parameter mtr, as the write will either
      occur in the heap, or it will be logged at a higher level.
      
      recv_parse_or_apply_log_rec_body(),
      page_zip_write_header(): Add log record type MLOG_ZIP_WRITE_HEADER.
      
      page_header_set_field(): Pass mtr=NULL to page_zip_write_header().
      
      page_header_reset_last_insert(): Pass mtr to page_zip_write_header().
      
      btr_page_set_index_id(), btr_page_set_level(),
      btr_page_set_next(), btr_page_set_prev(): Pass mtr to page_zip_write_header().
      
      row_upd_rec_sys_fields(): Pass mtr=NULL to page_zip_write_trx_id() and
      page_zip_write_roll_ptr(), since the write will be logged at a higher level.
      
      page_zip_write_header(): Add parameter mtr.
      page_zip_write_header_log(): New function.
      
      Remove rec_set_nth_field_extern_bit().
      Make rec_set_nth_field_extern_bit_old() static.
      Rename rec_set_nth_field_extern_bit_new()
      to rec_set_field_extern_bits_new() and make it static.
      
      row_ins_index_entry_low(): Remove bogus TODO comment.
      47da8abc
  12. 21 Feb, 2006 3 commits
    • marko's avatar
      branches/zip: Remove temporary hooks for testing BLOB compression. · 03a6c35b
      marko authored
      dict_mem_table_create(): Initialize table->zip.
      
      btr0cur.c: Distinguish compressed BLOBs based on page_zip or table->zip.
      03a6c35b
    • marko's avatar
      branches/zip: · 9d4fa728
      marko authored
      Fix the way how btr_free_externally_stored_field() is called in purge.
      
      btr_free_externally_stored_field(): Add parameter field_ref that points
      directly to the BLOB reference.  Use rec, offsets, page_zip, and i
      only for the page_zip_write_blob_ptr() call.
      
      row_purge_upd_exist_or_extern(): Do not assume that the undo log contains
      the entire record.  Only pass the BLOB reference to
      btr_free_externally_stored_field().
      9d4fa728
    • marko's avatar
      branches/zip: Fix bugs in the handling of externally stored columns. · 0d4b8a31
      marko authored
      btr_cur_pessimistic_insert(): Pass the "extern storage" flags to
      btr_root_raise_and_insert() or btr_page_split_and_insert().
      
      btr_copy_externally_stored_field(): Include local_len in the returned length.
      0d4b8a31
  13. 17 Feb, 2006 3 commits
  14. 16 Feb, 2006 2 commits
    • marko's avatar
    • marko's avatar
      branches/zip: Implement the compression of BLOB columns. · 1b7710af
      marko authored
      This has not been extensively tested yet, because some other part of the
      code breaks in "ibtestblob".
      
      btr_free_page_low(): Add parameters "space" and "page_no", because they
      are omitted from compressed BLOB pages.
      
      btr0cur.c: Implement the compression and decompression of BLOB columns,
      enabled at compile-time (#define ZIP_BLOB TRUE) for now.
      
      btr_rec_free_externally_stored_fields(),
      btr_copy_externally_stored_field(): Made static
      
      mlog_log_string(): New function, split from mlog_write_string(), allows
      to avoid a dummy memcpy() of compressed BLOB pages.
      1b7710af
  15. 13 Feb, 2006 1 commit
    • marko's avatar
      branches/zip: Remove in-place updates of the "external storage" · 4b3be43c
      marko authored
      flag of records.  The flags may only be updated in heap-allocated
      copies of records.
      
      btr_root_raise_and_insert(),
      btr_page_split_and_insert(),
      btr_cur_insert_if_possible(),
      btr_cur_optimistic_insert(),
      btr_cur_pessimistic_insert(),
      page_cur_tuple_insert(),
      page_cur_insert_rec_low(): Add parameters "ext" and "n_ext".
      
      dtuple_convert_big_rec(): Make parameter "ext" const.
      4b3be43c
  16. 10 Feb, 2006 1 commit
    • marko's avatar
      branches/zip: Prepare for in-place updates of B-tree node pointers, · 12050c5c
      marko authored
      BLOB pointers, trx_id, and roll_ptr.
      
      btr_empty(), btr_create(), page_create(): Add parameter "index", as some
      index information will be encoded on the compressed page.
      
      Define REC_NODE_PTR_SIZE as 4.
      
      Allow btr_page_reorganize() and btr_page_reorganize_low() to fail.
      
      Define the error code DB_ZIP_OVERFLOW.
      
      Make row_ins_index_entry_low() static.
      
      page0zip: Encode the index, log reorganized records, and store uncompressed
      fields separately from the compressed data stream.
      12050c5c
  17. 03 Feb, 2006 1 commit
    • marko's avatar
      branches/zip: Prepare for upcoming implementation of page_zip_compress() · d5f33daf
      marko authored
      that will require complete index information.
      
      dict_create_index_step(): invoke dict_index_add_to_cache() before btr_create()
      
      dict_index_remove_from_cache(): make public
      
      dict_index_get_if_in_cache_low(): new function, for holding dict_sys->mutex
      
      buf_flush_init_for_writing(): remove the temporary hook to page_zip_compress()
      
      page_create(): add temporary hook to page_zip_compress()
      d5f33daf
  18. 30 Nov, 2005 1 commit
    • marko's avatar
      branches/zip: · 3a55efc4
      marko authored
      buf_flush_init_for_writing(): The reported dense page directory size was
      4 bytes too much.  Subtract 2 (infimum and supremum) from n_heap.
      
      page_zip_decompress(): When decompressing the last user record, only set
      heap_no and the status bits if there is data to decode, i.e., there
      are user records on the page.
      3a55efc4