1. 25 Sep, 2017 2 commits
  2. 24 Sep, 2017 2 commits
  3. 23 Sep, 2017 11 commits
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Cleanup: Revert unnecessary changes and simplify some code · acd66eed
      Marko Mäkelä authored
      Revert any changes that are not needed any more.
      
      Most of the code submitted by Vinchen has been refactored so far.
      The redo log format changes are as they were submitted by Vinchen.
      
      FIXME: On rollback, convert the record to "old" format if the values
      match the 'default row' ones. There should be no need to write any
      new BLOBs during rollback. If we created new BLOBs during rollback,
      crash recovery could become very tricky.
      
      TODO: Review the changes to row0upd.cc, row0umod.cc. For new inserts
      and updates, if the suffix of instantly added columns match the
      'default row', we can omit those fields from the clustered index
      record. If a non-default value is assigned to the last column, then
      all columns will have to be materialized.
      
      TODO: Implement update-in-place of the 'default row' record
      (for performing instant ADD COLUMN after instant ADD COLUMN).
      
      TODO: Implement and test rollback of the 'default row' record.
      
      TODO: Test crash recovery. Ensure that the ADD COLUMN operation
      is being rolled back if the server is killed during it. Also test
      crash recovery of DML operations on tables that were subject to
      instant ADD COLUMN, using all supported ROW_FORMAT (REDUNDANT,
      COMPACT, DYNAMIC).
      acd66eed
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.3-instant · 09370c07
      Marko Mäkelä authored
      09370c07
    • Marko Mäkelä's avatar
      Clarify a comment · 3b90e507
      Marko Mäkelä authored
      3b90e507
    • Marko Mäkelä's avatar
      Relax a too strict debug assertion · 1b349262
      Marko Mäkelä authored
      1b349262
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Encode the number of added columns in the record header · 47988df7
      Marko Mäkelä authored
      For ROW_FORMAT=COMPACT and ROW_FORMAT=DYNAMIC records that contain
      fields that have been inserted after columns were instantly added
      (the record is tagged REC_STATUS_COLUMNS_ADDED), encode the
      number of added columns - 1 in the record header.
      
      rec_get_n_add_field_len): Determine the encoded size of the added fields.
      
      rec_get_n_add_field(): Determine the number of added fields.
      
      rec_set_n_add_field(): Set the number of added fields.
      47988df7
    • Marko Mäkelä's avatar
      Clarify a comment · 6d6ce1bb
      Marko Mäkelä authored
      6d6ce1bb
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Add member functions to dictionary objects · f4ac3b78
      Marko Mäkelä authored
      dict_col_t::is_nullable(): Determine if the column can be set NULL.
      
      dict_col_t::is_nullable(): Determine if the column is virtual.
      
      dict_col_t::is_instant(): Determine if the column has been instantly added.
      
      dict_col_t::instant_value(): Get the default value of an instantly-added
      column.
      
      dict_index_t::get_n_nullable(n_prefix): Determine the number of nullable
      index fields in the prefix.
      
      dict_index_t::instant_field_value(): Get the default value of a
      clustered index field of an instantly-added column.
      f4ac3b78
    • Alexander Barkov's avatar
  4. 22 Sep, 2017 20 commits
  5. 21 Sep, 2017 5 commits
    • Marko Mäkelä's avatar
      Skip the 'default row' pseudo-record where needed · 5c9cedaf
      Marko Mäkelä authored
      The 'default row' record (which stores the default values of
      instantly added columns when they were added) must be ignored
      during normal operation.
      
      Because btr_pcur_store_position() can theoretically be invoked
      on the pseudo-record, we must check every caller of
      btr_pcur_restore_position(). Similarly, when positioning the
      cursor to the start of an index with btr_pcur_open_at_index_side(),
      or when moving to the previous record, we must be careful to
      skip the 'default row' record.
      
      rec_is_default_row(): Check whether a leaf page record is the
      'default row' pseudo-record.
      
      row_import_set_sys_max_row_id(): Check for a table that is empty but
      contains the 'default row' record.
      
      IndexPurge::open(), row_merge_read_clustered_index(),
      dict_stats_analyze_index_level(), row_sel_try_search_shortcut(),
      row_sel(), sel_restore_position_for_mysql(), row_search_mvcc():
      Skip the 'default row' pseudo-record.
      
      fts_get_max_doc_id(): Assert that the 'default row' cannot exist
      in the secondary index FTS_DOC_ID_INDEX(FTS_DOC_ID).
      
      page_find_rec_max_not_deleted(): Assert that we are operating
      on a leaf page. Also skip the 'default row' pseudo-record, not
      only delete-marked records.
      
      row_search_get_max_rec(): Assert that page_find_rec_max_not_deleted()
      did not return any delete-marked or 'default row' record.
      5c9cedaf
    • Marko Mäkelä's avatar
      Always set the heap_no before calling rec_get_offsets() · b52423d7
      Marko Mäkelä authored
      With instant ADD COLUMN, rec_get_offsets() must reliably know if it
      is dealing with a user record (not the page infimum/supremum).
      b52423d7
    • Marko Mäkelä's avatar
      Do not use page_cur_search_with_match_bytes() for comparing MIN_REC_FLAG · 45f01898
      Marko Mäkelä authored
      The 'default row' record (which is the only search tuple and the only
      leaf-page record that carries the REC_INFO_MIN_REC_FLAG)  must be searched
      by using the conventional means. Do not slow down the search shortcut by
      taking the MIN_REC_FLAG into account.
      45f01898
    • Marko Mäkelä's avatar
      Debug fixes for old records after instant ADD COLUMN · b8e14a2e
      Marko Mäkelä authored
      rec_offs_validate(): Do not dereference index==NULL.
      
      rec_validate(): Properly handle missing columns.
      b8e14a2e
    • Marko Mäkelä's avatar
      On instant ALTER TABLE, copy the default values to the dictionary cache · 8857d57e
      Marko Mäkelä authored
      dict_table_get_nth_v_col(): Assert that no default value is ever set
      on a virtual column. Virtual columns are not handled by the
      instant ADD COLUMN mechanism.
      
      ha_innobase_inplace_ctx::commit_instant(): Copy the default values
      from instant_table to old_table.
      Take deep copy of the dict_table_t::v_cols[].
      
      instant_add_instant_try(): Copy the default values to instant_table.
      
      dict_index_get_nth_field_def(): Define the function in the .h file.
      
      dict_col_t::def_val.data: Change the data type to const void*
      to reduce the number of type casts.
      8857d57e