Commit 8c029d42 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.4 into 10.5

parents 15dcb8bd a635588b
...@@ -28,7 +28,7 @@ IF(GIT_EXECUTABLE AND EXISTS "${CMAKE_SOURCE_DIR}/.git") ...@@ -28,7 +28,7 @@ IF(GIT_EXECUTABLE AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
RESULT_VARIABLE update_result) RESULT_VARIABLE update_result)
ELSE() ELSE()
MESSAGE(STATUS "Updating submodules") MESSAGE(STATUS "Updating submodules")
EXECUTE_PROCESS(COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive EXECUTE_PROCESS(COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive --depth=1
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE update_result) RESULT_VARIABLE update_result)
ENDIF() ENDIF()
......
...@@ -458,6 +458,8 @@ TABLE_COLLATION utf8_general_ci ...@@ -458,6 +458,8 @@ TABLE_COLLATION utf8_general_ci
CHECKSUM NULL CHECKSUM NULL
CREATE_OPTIONS #CO# CREATE_OPTIONS #CO#
TABLE_COMMENT #TC# TABLE_COMMENT #TC#
MAX_INDEX_LENGTH #MIL#
TEMPORARY Y
user_comment user_comment
Separator ----------------------------------------------------- Separator -----------------------------------------------------
TABLE_CATALOG def TABLE_CATALOG def
...@@ -831,6 +833,8 @@ TABLE_COLLATION utf8_general_ci ...@@ -831,6 +833,8 @@ TABLE_COLLATION utf8_general_ci
CHECKSUM NULL CHECKSUM NULL
CREATE_OPTIONS #CO# CREATE_OPTIONS #CO#
TABLE_COMMENT #TC# TABLE_COMMENT #TC#
MAX_INDEX_LENGTH #MIL#
TEMPORARY Y
user_comment user_comment
Separator ----------------------------------------------------- Separator -----------------------------------------------------
TABLE_CATALOG def TABLE_CATALOG def
...@@ -1570,6 +1574,8 @@ TABLE_COLLATION utf8_general_ci ...@@ -1570,6 +1574,8 @@ TABLE_COLLATION utf8_general_ci
CHECKSUM NULL CHECKSUM NULL
CREATE_OPTIONS #CO# CREATE_OPTIONS #CO#
TABLE_COMMENT #TC# TABLE_COMMENT #TC#
MAX_INDEX_LENGTH #MIL#
TEMPORARY Y
user_comment user_comment
Separator ----------------------------------------------------- Separator -----------------------------------------------------
TABLE_CATALOG def TABLE_CATALOG def
...@@ -1943,6 +1949,8 @@ TABLE_COLLATION utf8_general_ci ...@@ -1943,6 +1949,8 @@ TABLE_COLLATION utf8_general_ci
CHECKSUM NULL CHECKSUM NULL
CREATE_OPTIONS #CO# CREATE_OPTIONS #CO#
TABLE_COMMENT #TC# TABLE_COMMENT #TC#
MAX_INDEX_LENGTH #MIL#
TEMPORARY Y
user_comment user_comment
Separator ----------------------------------------------------- Separator -----------------------------------------------------
TABLE_CATALOG def TABLE_CATALOG def
......
@@ -509,4 +509,4 @@
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
instants
-35
+36
...@@ -443,6 +443,27 @@ SET GLOBAL innodb_limit_optimistic_insert_debug=@save_limit; ...@@ -443,6 +443,27 @@ SET GLOBAL innodb_limit_optimistic_insert_debug=@save_limit;
SELECT * FROM t1; SELECT * FROM t1;
c2 c c2 c
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-25236 Online log apply fails for ROW_FORMAT=REDUNDANT tables
#
CREATE TABLE t1
(a INT NOT NULL, b INT, c INT, d INT, e INT, f INT, g INT, h INT, i TEXT)
ENGINE=InnoDB;
ALTER TABLE t1 MODIFY a INT NULL;
SET DEBUG_SYNC='innodb_inplace_alter_table_enter SIGNAL alter WAIT_FOR go';
ALTER TABLE t1 ADD PRIMARY KEY (a);
connect con1,localhost,root,,;
set DEBUG_SYNC='now WAIT_FOR alter';
BEGIN;
INSERT INTO t1 SET a=0, i=REPEAT('1', 10000);
ROLLBACK;
set DEBUG_SYNC='now SIGNAL go';
connection default;
disconnect con1;
SELECT * FROM t1;
a b c d e f g h i
DROP TABLE t1;
SET DEBUG_SYNC=RESET;
# End of 10.4 tests # End of 10.4 tests
# #
# MDEV-22867 Assertion instant.n_core_fields == n_core_fields # MDEV-22867 Assertion instant.n_core_fields == n_core_fields
......
...@@ -512,6 +512,32 @@ SET GLOBAL innodb_limit_optimistic_insert_debug=@save_limit; ...@@ -512,6 +512,32 @@ SET GLOBAL innodb_limit_optimistic_insert_debug=@save_limit;
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-25236 Online log apply fails for ROW_FORMAT=REDUNDANT tables
--echo #
CREATE TABLE t1
(a INT NOT NULL, b INT, c INT, d INT, e INT, f INT, g INT, h INT, i TEXT)
ENGINE=InnoDB;
ALTER TABLE t1 MODIFY a INT NULL;
SET DEBUG_SYNC='innodb_inplace_alter_table_enter SIGNAL alter WAIT_FOR go';
send ALTER TABLE t1 ADD PRIMARY KEY (a);
connect(con1,localhost,root,,);
set DEBUG_SYNC='now WAIT_FOR alter';
BEGIN;
INSERT INTO t1 SET a=0, i=REPEAT('1', 10000);
ROLLBACK;
set DEBUG_SYNC='now SIGNAL go';
connection default;
reap;
disconnect con1;
SELECT * FROM t1;
DROP TABLE t1;
SET DEBUG_SYNC=RESET;
--echo # End of 10.4 tests --echo # End of 10.4 tests
--echo # --echo #
......
...@@ -248,6 +248,8 @@ enum rec_leaf_format { ...@@ -248,6 +248,8 @@ enum rec_leaf_format {
in ROW_FORMAT=COMPACT,DYNAMIC,COMPRESSED. in ROW_FORMAT=COMPACT,DYNAMIC,COMPRESSED.
This is a special case of rec_init_offsets() and rec_get_offsets_func(). This is a special case of rec_init_offsets() and rec_get_offsets_func().
@tparam mblob whether the record includes a metadata BLOB @tparam mblob whether the record includes a metadata BLOB
@tparam redundant_temp whether the record belongs to a temporary file
of a ROW_FORMAT=REDUNDANT table
@param[in] rec leaf-page record @param[in] rec leaf-page record
@param[in] index the index that the record belongs in @param[in] index the index that the record belongs in
@param[in] n_core number of core fields (index->n_core_fields) @param[in] n_core number of core fields (index->n_core_fields)
...@@ -255,7 +257,7 @@ This is a special case of rec_init_offsets() and rec_get_offsets_func(). ...@@ -255,7 +257,7 @@ This is a special case of rec_init_offsets() and rec_get_offsets_func().
NULL to refer to index->fields[].col->def_val NULL to refer to index->fields[].col->def_val
@param[in,out] offsets offsets, with valid rec_offs_n_fields(offsets) @param[in,out] offsets offsets, with valid rec_offs_n_fields(offsets)
@param[in] format record format */ @param[in] format record format */
template<bool mblob = false> template<bool mblob = false, bool redundant_temp = false>
static inline static inline
void void
rec_init_offsets_comp_ordinary( rec_init_offsets_comp_ordinary(
...@@ -286,7 +288,9 @@ rec_init_offsets_comp_ordinary( ...@@ -286,7 +288,9 @@ rec_init_offsets_comp_ordinary(
const unsigned n_core_null_bytes = UNIV_UNLIKELY(index->n_core_fields const unsigned n_core_null_bytes = UNIV_UNLIKELY(index->n_core_fields
!= n_core) != n_core)
? UT_BITS_IN_BYTES(unsigned(index->get_n_nullable(n_core))) ? UT_BITS_IN_BYTES(unsigned(index->get_n_nullable(n_core)))
: index->n_core_null_bytes; : (redundant_temp
? UT_BITS_IN_BYTES(index->n_nullable)
: index->n_core_null_bytes);
if (mblob) { if (mblob) {
ut_ad(index->table->instant); ut_ad(index->table->instant);
...@@ -1121,8 +1125,8 @@ rec_get_nth_field_offs_old( ...@@ -1121,8 +1125,8 @@ rec_get_nth_field_offs_old(
} }
/** Determine the size of a data tuple prefix in ROW_FORMAT=COMPACT. /** Determine the size of a data tuple prefix in ROW_FORMAT=COMPACT.
@tparam mblob whether the record includes a metadata BLOB @tparam mblob whether the record includes a metadata BLOB
@tparam redundant_temp whether to use the ROW_FORMAT=REDUNDANT format @tparam redundant_temp whether to use the ROW_FORMAT=REDUNDANT format
@param[in] index record descriptor; dict_table_is_comp() @param[in] index record descriptor; dict_table_is_comp()
is assumed to hold, even if it doesn't is assumed to hold, even if it doesn't
@param[in] dfield array of data fields @param[in] dfield array of data fields
...@@ -1169,7 +1173,9 @@ rec_get_converted_size_comp_prefix_low( ...@@ -1169,7 +1173,9 @@ rec_get_converted_size_comp_prefix_low(
- n_core_fields); - n_core_fields);
} else { } else {
ut_ad(n_fields <= n_core_fields); ut_ad(n_fields <= n_core_fields);
extra_size += index->n_core_null_bytes; extra_size += redundant_temp
? UT_BITS_IN_BYTES(index->n_nullable)
: index->n_core_null_bytes;
} }
ulint data_size = 0; ulint data_size = 0;
...@@ -1811,10 +1817,19 @@ rec_init_offsets_temp( ...@@ -1811,10 +1817,19 @@ rec_init_offsets_temp(
if it was emptied during an ALTER TABLE operation. */ if it was emptied during an ALTER TABLE operation. */
ut_ad(index->n_core_fields == n_core || !index->is_instant()); ut_ad(index->n_core_fields == n_core || !index->is_instant());
ut_ad(index->n_core_fields >= n_core); ut_ad(index->n_core_fields >= n_core);
rec_init_offsets_comp_ordinary(rec, index, offsets, n_core, def_val, if (index->table->not_redundant()) {
status == REC_STATUS_INSTANT rec_init_offsets_comp_ordinary(
? REC_LEAF_TEMP_INSTANT rec, index, offsets, n_core, def_val,
: REC_LEAF_TEMP); status == REC_STATUS_INSTANT
? REC_LEAF_TEMP_INSTANT
: REC_LEAF_TEMP);
} else {
rec_init_offsets_comp_ordinary<false, true>(
rec, index, offsets, n_core, def_val,
status == REC_STATUS_INSTANT
? REC_LEAF_TEMP_INSTANT
: REC_LEAF_TEMP);
}
} }
/** Determine the offset to each field in temporary file. /** Determine the offset to each field in temporary file.
...@@ -1829,9 +1844,15 @@ rec_init_offsets_temp( ...@@ -1829,9 +1844,15 @@ rec_init_offsets_temp(
rec_offs* offsets) rec_offs* offsets)
{ {
ut_ad(!index->is_instant()); ut_ad(!index->is_instant());
rec_init_offsets_comp_ordinary(rec, index, offsets, if (index->table->not_redundant()) {
index->n_core_fields, NULL, rec_init_offsets_comp_ordinary(
REC_LEAF_TEMP); rec, index, offsets,
index->n_core_fields, NULL, REC_LEAF_TEMP);
} else {
rec_init_offsets_comp_ordinary<false, true>(
rec, index, offsets,
index->n_core_fields, NULL, REC_LEAF_TEMP);
}
} }
/** Convert a data tuple prefix to the temporary file format. /** Convert a data tuple prefix to the temporary file format.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment