- 29 Sep, 2017 7 commits
-
-
Marko Mäkelä authored
btr_cur_optimistic_update(), btr_cur_pessimistic_update(): Do not trim the 'default row' record. innobase_instant_add_try(): Compute and apply the update vector for the 'default row'. FIXME: The rollback of the 'default row' operations (that is, the ROLLBACK of the ALTER TABLE…ADD COLUMN operation) has not been tested and is unlikely to work. We need a test that flushes the redo log and kills the server at the end of innobase_instant_add_try(), before the ALTER TABLE transaction is committed.
-
Marko Mäkelä authored
btr_cur_instant_init_low(): Read and validate the 'default row' btr_cur_instant_root_init(): Avoid tripping a debug assertion innobase_add_instant_try(): Use field_ref_zero for empty values. Tolerate the hidden FTS_DOC_ID column.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 28 Sep, 2017 7 commits
-
-
Marko Mäkelä authored
The space management and recovery of operations on off-page columns relies on the undo log records. Inserting off-page columns during rollback could break this. The solution to the rollback problem is simple: Do not duplicate 'default row' data in individual records. In this way, the ROLLBACK of an UPDATE to a record that was originally written before instant ADD COLUMN, would never have to insert off-page records, even if there were instantly added BLOB columns with long DEFAULT values. This will also reduce space consumption (a simple form of compression). dtuple_t::trim(index): Omit a redundant suffix of an index tuple right before insert or update. After instant ADD COLUMN, if the last fields of a clustered index tuple match the 'default row', there will be no need to store them. While trimming the entry, we must hold a page latch, so that the table cannot be emptied and the 'default row' be deleted. btr_cur_optimistic_update(), btr_cur_pessimistic_update(), row_upd_clust_rec_by_insert(), row_ins_clust_index_entry_low(): Invoke dtuple_t::trim() if needed. row_ins_clust_index_entry(): Restore dtuple_t::n_fields after calling row_ins_clust_index_entry_low(). rec_get_converted_size(), rec_get_converted_size_comp(): Allow the number of fields to be between n_core_fields and n_fields. rec_convert_dtuple_to_rec_comp(): Assign the status bits based on the number of fields.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
innobase_add_instant_try(): If the table is empty, remove the 'default row' instead of adding one. dict_index_t::commit_instant_copy(): Allow !instant.is_instant() for the clustered index. ha_innobase_inplace_ctx::commit_instant(): Allow !instant_table->is_instant()
-
Marko Mäkelä authored
row_sel_try_search_shortcut_for_mysql(): Skip the 'default row', like row_sel_try_search_shortcut() does
-
- 27 Sep, 2017 7 commits
-
-
Marko Mäkelä authored
row_upd_changes_field_size_or_external(): Revert some unnecessary changes, and assert that the update vector does not contain the magic value UNIV_SQL_DEFAULT. row_upd_rec_in_place(): Remove a redundant assertion. rec_set_nth_field() already asserts the same. row_upd_build_sec_rec_difference_binary(): Assert that there are no default values in a secondary index tuple.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
The ALGORITHM=INPLACE interface is not accessible to temporary tables. Therefore, instant ADD COLUMN cannot be used either. dict_table_t::is_temporary(): New predicate. dict_table_is_temporary(): Define as a wrapper macro.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 26 Sep, 2017 5 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
In the temporary file that is applied by row_log_table_apply(), we must identify whether the records contain the extra header for instantly added columns. For now, we will allocate an additional byte for this for ROW_T_INSERT and ROW_T_UPDATE records when the source table has been subject to instant ADD COLUMN. The ROW_T_DELETE records are fine, as they will be converted and will only contain 'core' columns (PRIMARY KEY and some system columns) that are converted from dtuple_t. rec_get_converted_size_temp(), rec_init_offsets_temp(), rec_convert_dtuple_to_temp(): Add the parameter 'status'. rec_set_n_add_field(): Simplify the interface to resemble rec_get_n_add_field(). rec_init_offsets_comp_ordinary(): Handle the new rec_leaf_format constant REC_LEAF_TEMP_COLUMNS_ADDED. rec_get_converted_size_comp_prefix_low(), rec_convert_dtuple_to_rec_comp(): Handle index->is_instant() for both temp and !temp.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 25 Sep, 2017 14 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Ensure that no adaptive hash index exists for any system tables, so that the blocked TRUNCATE TABLE t1 will not block the concurrent TRUNCATE TABLE t2.
-
Marko Mäkelä authored
Ensure that no adaptive hash index exists for any system tables, so that the blocked TRUNCATE TABLE t1 will not block the concurrent TRUNCATE TABLE t2.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Will authored
Made a few links in README.md secure (https).
-
Marko Mäkelä authored
This bug is a regression caused by the code refactoring in commit f5a833c3. It was not present in any release of the MariaDB server. The bug affects table-rebuilding ALTER TABLE when the source table is in ROW_FORMAT=REDUNDANT and contains no virtual columns. row_log_table_low_redundant(): Log virtual column data only if virtual columns are present.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
In TRUNCATE TABLE, clear the 'instant' status of a table. TODO: Do the same when the table becomes empty dict_col_t::remove_instant(): Remove the instantness of a column. dict_index_t::remove_instant(): Remove the instantness of a clustered index.
-
Marko Mäkelä authored
-