From 34b002d0dceeec035b7f55a5026400d2b36918cd Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 26 Apr 2022 11:09:16 +0200 Subject: [PATCH 1/5] New PCRE2 (10.40) --- cmake/pcre.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/pcre.cmake b/cmake/pcre.cmake index b0c6b81e630..0ac834f44a6 100644 --- a/cmake/pcre.cmake +++ b/cmake/pcre.cmake @@ -43,6 +43,7 @@ MACRO(BUNDLE_PCRE2) ENDFOREACH() FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINSIZEREL") STRING(REPLACE "/WX" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}") + SET(pcre2_flags${v} "${pcre2_flags${v}} -std=c99 ") IF(MSVC) # Suppress a warning STRING(APPEND pcre2_flags${v} " /wd4244 " ) @@ -53,8 +54,8 @@ MACRO(BUNDLE_PCRE2) ExternalProject_Add( pcre2 PREFIX "${dir}" - URL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.zip" - URL_MD5 e101c0ca9edb4b0af103bebe78ba52b0 + URL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.40/pcre2-10.40.zip" + URL_MD5 798698846982ce171d881ed0d7535c2a INSTALL_COMMAND "" CMAKE_ARGS "-DCMAKE_WARN_DEPRECATED=FALSE" From 821808c45dd3c5d4bc98cd04810732f647872747 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 28 Apr 2022 11:23:12 +0400 Subject: [PATCH 2/5] A clean-up for "MDEV-19772 Add helper classes for ST_FIELD_INFO" As agreed with Serg, renaming class Yesno to Yes_or_empty, to reflect better its behavior. This helper class is used to define INFORMATION_SCHEMA columns that return either "Yes" or an empty string. --- sql/sql_i_s.h | 4 ++-- sql/sql_show.cc | 60 ++++++++++++++++++++++++------------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/sql/sql_i_s.h b/sql/sql_i_s.h index d909e7f3f1b..b44caedb911 100644 --- a/sql/sql_i_s.h +++ b/sql/sql_i_s.h @@ -156,10 +156,10 @@ public: }; -class Yesno: public Varchar +class Yes_or_empty: public Varchar { public: - Yesno(): Varchar(3) { } + Yes_or_empty(): Varchar(3) { } }; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 647bbfe1f8d..85169783393 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -9035,7 +9035,7 @@ ST_FIELD_INFO columns_fields_info[]= Column("ORDINAL_POSITION", ULonglong(), NOT_NULL, OPEN_FRM_ONLY), Column("COLUMN_DEFAULT", Longtext(MAX_FIELD_VARCHARLENGTH), NULLABLE, "Default",OPEN_FRM_ONLY), - Column("IS_NULLABLE", Yesno(), NOT_NULL, "Null", OPEN_FRM_ONLY), + Column("IS_NULLABLE", Yes_or_empty(), NOT_NULL, "Null", OPEN_FRM_ONLY), Column("DATA_TYPE", Name(), NOT_NULL, OPEN_FRM_ONLY), Column("CHARACTER_MAXIMUM_LENGTH",ULonglong(), NULLABLE, OPEN_FRM_ONLY), Column("CHARACTER_OCTET_LENGTH", ULonglong(), NULLABLE, OPEN_FRM_ONLY), @@ -9072,8 +9072,8 @@ ST_FIELD_INFO collation_fields_info[]= Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"), Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"), Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"), - Column("IS_DEFAULT", Yesno(), NOT_NULL, "Default"), - Column("IS_COMPILED", Yesno(), NOT_NULL, "Compiled"), + Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL, "Default"), + Column("IS_COMPILED", Yes_or_empty(), NOT_NULL, "Compiled"), Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"), CEnd() }; @@ -9081,10 +9081,10 @@ ST_FIELD_INFO collation_fields_info[]= ST_FIELD_INFO applicable_roles_fields_info[]= { - Column("GRANTEE", Userhost(), NOT_NULL), + Column("GRANTEE", Userhost(), NOT_NULL), Column("ROLE_NAME", Varchar(USERNAME_CHAR_LENGTH), NOT_NULL), - Column("IS_GRANTABLE", Yesno(), NOT_NULL), - Column("IS_DEFAULT", Yesno(), NULLABLE), + Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL), + Column("IS_DEFAULT", Yes_or_empty(), NULLABLE), CEnd() }; @@ -9227,7 +9227,7 @@ ST_FIELD_INFO view_fields_info[]= Column("TABLE_NAME", Name(), NOT_NULL, OPEN_FRM_ONLY), Column("VIEW_DEFINITION", Longtext(65535), NOT_NULL, OPEN_FRM_ONLY), Column("CHECK_OPTION", Varchar(8), NOT_NULL, OPEN_FRM_ONLY), - Column("IS_UPDATABLE", Yesno(), NOT_NULL, OPEN_FULL_TABLE), + Column("IS_UPDATABLE", Yes_or_empty(), NOT_NULL, OPEN_FULL_TABLE), Column("DEFINER", Definer(), NOT_NULL, OPEN_FRM_ONLY), Column("SECURITY_TYPE", Varchar(7), NOT_NULL, OPEN_FRM_ONLY), Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, OPEN_FRM_ONLY), @@ -9239,46 +9239,46 @@ ST_FIELD_INFO view_fields_info[]= ST_FIELD_INFO user_privileges_fields_info[]= { - Column("GRANTEE", Userhost(), NOT_NULL), - Column("TABLE_CATALOG", Catalog(), NOT_NULL), - Column("PRIVILEGE_TYPE", Name(), NOT_NULL), - Column("IS_GRANTABLE", Yesno(), NOT_NULL), + Column("GRANTEE", Userhost(), NOT_NULL), + Column("TABLE_CATALOG", Catalog(), NOT_NULL), + Column("PRIVILEGE_TYPE", Name(), NOT_NULL), + Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL), CEnd() }; ST_FIELD_INFO schema_privileges_fields_info[]= { - Column("GRANTEE", Userhost(), NOT_NULL), - Column("TABLE_CATALOG", Catalog(), NOT_NULL), - Column("TABLE_SCHEMA", Name(), NOT_NULL), - Column("PRIVILEGE_TYPE", Name(), NOT_NULL), - Column("IS_GRANTABLE", Yesno(), NOT_NULL), + Column("GRANTEE", Userhost(), NOT_NULL), + Column("TABLE_CATALOG", Catalog(), NOT_NULL), + Column("TABLE_SCHEMA", Name(), NOT_NULL), + Column("PRIVILEGE_TYPE", Name(), NOT_NULL), + Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL), CEnd() }; ST_FIELD_INFO table_privileges_fields_info[]= { - Column("GRANTEE", Userhost(), NOT_NULL), - Column("TABLE_CATALOG", Catalog(), NOT_NULL), - Column("TABLE_SCHEMA", Name(), NOT_NULL), - Column("TABLE_NAME", Name(), NOT_NULL), - Column("PRIVILEGE_TYPE", Name(), NOT_NULL), - Column("IS_GRANTABLE", Yesno(), NOT_NULL), + Column("GRANTEE", Userhost(), NOT_NULL), + Column("TABLE_CATALOG", Catalog(), NOT_NULL), + Column("TABLE_SCHEMA", Name(), NOT_NULL), + Column("TABLE_NAME", Name(), NOT_NULL), + Column("PRIVILEGE_TYPE", Name(), NOT_NULL), + Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL), CEnd() }; ST_FIELD_INFO column_privileges_fields_info[]= { - Column("GRANTEE", Userhost(), NOT_NULL), - Column("TABLE_CATALOG", Catalog(), NOT_NULL), - Column("TABLE_SCHEMA", Name(), NOT_NULL), - Column("TABLE_NAME", Name(), NOT_NULL), - Column("COLUMN_NAME", Name(), NOT_NULL), - Column("PRIVILEGE_TYPE", Name(), NOT_NULL), - Column("IS_GRANTABLE", Yesno(), NOT_NULL), + Column("GRANTEE", Userhost(), NOT_NULL), + Column("TABLE_CATALOG", Catalog(), NOT_NULL), + Column("TABLE_SCHEMA", Name(), NOT_NULL), + Column("TABLE_NAME", Name(), NOT_NULL), + Column("COLUMN_NAME", Name(), NOT_NULL), + Column("PRIVILEGE_TYPE", Name(), NOT_NULL), + Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL), CEnd() }; @@ -9419,7 +9419,7 @@ ST_FIELD_INFO sysvars_fields_info[]= Column("NUMERIC_MAX_VALUE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE), Column("NUMERIC_BLOCK_SIZE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE), Column("ENUM_VALUE_LIST", Longtext(65535), NULLABLE), - Column("READ_ONLY", Yesno(), NOT_NULL), + Column("READ_ONLY", Yes_or_empty(), NOT_NULL), Column("COMMAND_LINE_ARGUMENT",Name(), NULLABLE), Column("GLOBAL_VALUE_PATH", Varchar(2048), NULLABLE), CEnd() From 1421d1f2967f1546d2f38de31bc29159b5c9d540 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 29 Apr 2022 20:40:50 +0200 Subject: [PATCH 3/5] columnstore-5.6.5-2 --- storage/columnstore/columnstore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/columnstore/columnstore b/storage/columnstore/columnstore index 105aeb3e1e2..a509e0604f0 160000 --- a/storage/columnstore/columnstore +++ b/storage/columnstore/columnstore @@ -1 +1 @@ -Subproject commit 105aeb3e1e25dbb3dee6a53425dc665c7b7332dc +Subproject commit a509e0604f0afa4c165a449607e8b89d91ec20d2 From 26d46234e8316c010d40c02654803aaa7deb370c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 6 May 2022 10:12:31 +0300 Subject: [PATCH 4/5] MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log This is based on commit 20ae4816bba712a3faa0110c973e197d92f43b42 with some adjustments for MDEV-12353. row_ins_sec_index_entry_low(): If a separate mini-transaction is needed to adjust the minimum bounding rectangle (MBR) in the parent page, we must disable redo logging if the table is a temporary table. For temporary tables, no log is supposed to be written, because the temporary tablespace will be reinitialized on server restart. rtr_update_mbr_field(), rtr_merge_and_update_mbr(): Changed the return type to void and removed unreachable code. In older versions, these used to return a different value for temporary tables. page_id_t: Add constexpr to most member functions. mtr_t::log_write(): Catch log writes to invalid tablespaces so that the test case would crash without the fix to row_ins_sec_index_entry_low(). --- .../suite/innodb_gis/r/rtree_split.result | 7 --- .../suite/innodb_gis/r/rtree_temporary.result | 14 ++++++ .../suite/innodb_gis/t/rtree_split.test | 8 ---- .../suite/innodb_gis/t/rtree_temporary.test | 18 ++++++++ storage/innobase/btr/btr0btr.cc | 8 ---- storage/innobase/btr/btr0cur.cc | 14 +----- storage/innobase/gis/gis0rtree.cc | 43 +++++++------------ storage/innobase/include/buf0types.h | 42 +++++++++--------- storage/innobase/include/gis0rtree.h | 7 ++- storage/innobase/include/mtr0log.h | 6 ++- storage/innobase/row/row0ins.cc | 10 +++-- 11 files changed, 86 insertions(+), 91 deletions(-) create mode 100644 mysql-test/suite/innodb_gis/r/rtree_temporary.result create mode 100644 mysql-test/suite/innodb_gis/t/rtree_temporary.test diff --git a/mysql-test/suite/innodb_gis/r/rtree_split.result b/mysql-test/suite/innodb_gis/r/rtree_split.result index 2d6e8a1dfbe..df88960ba3d 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_split.result +++ b/mysql-test/suite/innodb_gis/r/rtree_split.result @@ -61,10 +61,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1); count(*) 57344 drop table t1; -# -# MDEV-27417 Spatial index tries to update -# change buffer bookkeeping page -# -CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB; -INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366; -DROP TABLE t1; diff --git a/mysql-test/suite/innodb_gis/r/rtree_temporary.result b/mysql-test/suite/innodb_gis/r/rtree_temporary.result new file mode 100644 index 00000000000..5ce02c881cc --- /dev/null +++ b/mysql-test/suite/innodb_gis/r/rtree_temporary.result @@ -0,0 +1,14 @@ +# +# MDEV-27417 Spatial index tries to update +# change buffer bookkeeping page +# +CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB; +INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366; +DROP TABLE t1; +# +# MDEV-28478 Assertion mtr->get_log_mode() == MTR_LOG_NO_REDO +# +CREATE TEMPORARY TABLE t1 (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB; +INSERT INTO t1 SELECT POINT(0,0) FROM seq_1_to_366; +INSERT INTO t1 VALUES (POINT(1e-270,1e-130)); +DROP TABLE t1; diff --git a/mysql-test/suite/innodb_gis/t/rtree_split.test b/mysql-test/suite/innodb_gis/t/rtree_split.test index 8697141ddea..6f285187508 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_split.test +++ b/mysql-test/suite/innodb_gis/t/rtree_split.test @@ -73,11 +73,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1); # Clean up. drop table t1; - ---echo # ---echo # MDEV-27417 Spatial index tries to update ---echo # change buffer bookkeeping page ---echo # -CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB; -INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366; -DROP TABLE t1; diff --git a/mysql-test/suite/innodb_gis/t/rtree_temporary.test b/mysql-test/suite/innodb_gis/t/rtree_temporary.test new file mode 100644 index 00000000000..5c4df251970 --- /dev/null +++ b/mysql-test/suite/innodb_gis/t/rtree_temporary.test @@ -0,0 +1,18 @@ +--source include/have_innodb.inc +--source include/have_sequence.inc + +--echo # +--echo # MDEV-27417 Spatial index tries to update +--echo # change buffer bookkeeping page +--echo # +CREATE TEMPORARY TABLE t1 (c POINT NOT NULL, SPATIAL(c)) ENGINE=InnoDB; +INSERT INTO t1 SELECT PointFromText('POINT(0 0)') FROM seq_1_to_366; +DROP TABLE t1; + +--echo # +--echo # MDEV-28478 Assertion mtr->get_log_mode() == MTR_LOG_NO_REDO +--echo # +CREATE TEMPORARY TABLE t1 (c POINT NOT NULL,SPATIAL (c)) ENGINE=InnoDB; +INSERT INTO t1 SELECT POINT(0,0) FROM seq_1_to_366; +INSERT INTO t1 VALUES (POINT(1e-270,1e-130)); +DROP TABLE t1; diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 4c832eb77e8..1f1233ff682 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -3588,17 +3588,9 @@ retry: } if (mbr_changed) { -#ifdef UNIV_DEBUG - bool success = rtr_update_mbr_field( - &cursor2, offsets2, &father_cursor, - merge_page, &new_mbr, NULL, mtr); - - ut_ad(success); -#else rtr_update_mbr_field( &cursor2, offsets2, &father_cursor, merge_page, &new_mbr, NULL, mtr); -#endif } else { rtr_node_ptr_delete(&father_cursor, mtr); } diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 4a4ef0deb9a..437c7508a0b 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -5834,7 +5834,6 @@ discard_page: rec_t* father_rec; btr_cur_t father_cursor; rec_offs* offsets; - bool upd_ret; ulint len; rtr_page_get_father_block(NULL, heap, index, @@ -5848,17 +5847,8 @@ discard_page: rtr_read_mbr(rec_get_nth_field( father_rec, offsets, 0, &len), &father_mbr); - upd_ret = rtr_update_mbr_field(&father_cursor, offsets, - NULL, page, &father_mbr, - next_rec, mtr); - - if (!upd_ret) { - *err = DB_ERROR; - - mem_heap_free(heap); - return(FALSE); - } - + rtr_update_mbr_field(&father_cursor, offsets, NULL, + page, &father_mbr, next_rec, mtr); ut_d(parent_latched = true); } else { /* Otherwise, if we delete the leftmost node pointer diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index 66fa3670ebd..19e7003f1ea 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -1,7 +1,13 @@ /***************************************************************************** Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. +<<<<<<< HEAD Copyright (c) 2018, 2021, MariaDB Corporation. +||||||| parent of 20ae4816bba (MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log) +Copyright (c) 2019, 2020, MariaDB Corporation. +======= +Copyright (c) 2019, 2022, MariaDB Corporation. +>>>>>>> 20ae4816bba (MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -185,9 +191,8 @@ rtr_index_build_node_ptr( } /**************************************************************//** -Update the mbr field of a spatial index row. -@return true if update is successful */ -bool +Update the mbr field of a spatial index row. */ +void rtr_update_mbr_field( /*=================*/ btr_cur_t* cursor, /*!< in/out: cursor pointed to rec.*/ @@ -535,8 +540,6 @@ update_mbr: page_is_comp(page)))); mem_heap_free(heap); - - return(true); } /**************************************************************//** @@ -1264,12 +1267,8 @@ rtr_ins_enlarge_mbr( page = buf_block_get_frame(block); /* Update the mbr field of the rec. */ - if (!rtr_update_mbr_field(&cursor, offsets, NULL, page, - &new_mbr, NULL, mtr)) { - err = DB_ERROR; - break; - } - + rtr_update_mbr_field(&cursor, offsets, NULL, page, + &new_mbr, NULL, mtr); page_cursor = btr_cur_get_page_cur(&cursor); block = page_cur_get_block(page_cursor); } @@ -1579,7 +1578,7 @@ rtr_merge_mbr_changed( /****************************************************************//** Merge 2 mbrs and update the the mbr that cursor is on. */ -dberr_t +void rtr_merge_and_update_mbr( /*=====================*/ btr_cur_t* cursor, /*!< in/out: cursor */ @@ -1589,27 +1588,15 @@ rtr_merge_and_update_mbr( page_t* child_page, /*!< in: the page. */ mtr_t* mtr) /*!< in: mtr */ { - dberr_t err = DB_SUCCESS; rtr_mbr_t new_mbr; - bool changed = false; - ut_ad(dict_index_is_spatial(cursor->index)); - - changed = rtr_merge_mbr_changed(cursor, cursor2, offsets, offsets2, - &new_mbr); - - /* Update the mbr field of the rec. And will delete the record - pointed by cursor2 */ - if (changed) { - if (!rtr_update_mbr_field(cursor, offsets, cursor2, child_page, - &new_mbr, NULL, mtr)) { - err = DB_ERROR; - } + if (rtr_merge_mbr_changed(cursor, cursor2, offsets, offsets2, + &new_mbr)) { + rtr_update_mbr_field(cursor, offsets, cursor2, child_page, + &new_mbr, NULL, mtr); } else { rtr_node_ptr_delete(cursor2, mtr); } - - return(err); } /*************************************************************//** diff --git a/storage/innobase/include/buf0types.h b/storage/innobase/include/buf0types.h index 3c5db853fe9..e2d733c6c13 100644 --- a/storage/innobase/include/buf0types.h +++ b/storage/innobase/include/buf0types.h @@ -24,9 +24,7 @@ The database buffer pool global types for the directory Created 11/17/1995 Heikki Tuuri *******************************************************/ -#ifndef buf0types_h -#define buf0types_h - +#pragma once #include "univ.i" /** Buffer page (uncompressed or compressed) */ @@ -122,18 +120,22 @@ public: /** Constructor from (space, page_no). @param[in] space tablespace id @param[in] page_no page number */ - page_id_t(ulint space, uint32_t page_no) : m_id(uint64_t{space} << 32 | page_no) - { - ut_ad(space <= 0xFFFFFFFFU); - } + constexpr page_id_t(ulint space, uint32_t page_no) : + m_id(uint64_t{space} << 32 | page_no) {} - page_id_t(uint64_t id) : m_id(id) {} - bool operator==(const page_id_t& rhs) const { return m_id == rhs.m_id; } - bool operator!=(const page_id_t& rhs) const { return m_id != rhs.m_id; } - bool operator<(const page_id_t& rhs) const { return m_id < rhs.m_id; } - bool operator>(const page_id_t& rhs) const { return m_id > rhs.m_id; } - bool operator<=(const page_id_t& rhs) const { return m_id <= rhs.m_id; } - bool operator>=(const page_id_t& rhs) const { return m_id >= rhs.m_id; } + constexpr page_id_t(uint64_t id) : m_id(id) {} + constexpr bool operator==(const page_id_t& rhs) const + { return m_id == rhs.m_id; } + constexpr bool operator!=(const page_id_t& rhs) const + { return m_id != rhs.m_id; } + constexpr bool operator<(const page_id_t& rhs) const + { return m_id < rhs.m_id; } + constexpr bool operator>(const page_id_t& rhs) const + { return m_id > rhs.m_id; } + constexpr bool operator<=(const page_id_t& rhs) const + { return m_id <= rhs.m_id; } + constexpr bool operator>=(const page_id_t& rhs) const + { return m_id >= rhs.m_id; } page_id_t &operator--() { ut_ad(page_no()); m_id--; return *this; } page_id_t &operator++() { @@ -154,15 +156,16 @@ public: /** Retrieve the tablespace id. @return tablespace id */ - uint32_t space() const { return static_cast(m_id >> 32); } + constexpr uint32_t space() const { return static_cast(m_id >> 32); } /** Retrieve the page number. @return page number */ - uint32_t page_no() const { return static_cast(m_id); } + constexpr uint32_t page_no() const { return static_cast(m_id); } /** Retrieve the fold value. @return fold value */ - ulint fold() const { return (ulint{space()} << 20) + space() + page_no(); } + constexpr ulint fold() const + { return (ulint{space()} << 20) + space() + page_no(); } /** Reset the page number only. @param[in] page_no page number */ @@ -171,7 +174,8 @@ public: m_id= (m_id & ~uint64_t{0} << 32) | page_no; } - ulonglong raw() { return m_id; } + constexpr ulonglong raw() { return m_id; } + private: /** The page identifier */ uint64_t m_id; @@ -221,5 +225,3 @@ public: }; #endif /* !UNIV_INNOCHECKSUM */ - -#endif /* buf0types.h */ diff --git a/storage/innobase/include/gis0rtree.h b/storage/innobase/include/gis0rtree.h index 1a27422a0d8..9a350325bca 100644 --- a/storage/innobase/include/gis0rtree.h +++ b/storage/innobase/include/gis0rtree.h @@ -379,7 +379,7 @@ rtr_page_copy_rec_list_start_no_locks( /****************************************************************//** Merge 2 mbrs and update the the mbr that cursor is on. */ -dberr_t +void rtr_merge_and_update_mbr( /*=====================*/ btr_cur_t* cursor, /*!< in/out: cursor */ @@ -411,9 +411,8 @@ rtr_merge_mbr_changed( /**************************************************************//** -Update the mbr field of a spatial index row. -@return true if successful */ -bool +Update the mbr field of a spatial index row. */ +void rtr_update_mbr_field( /*=================*/ btr_cur_t* cursor, /*!< in: cursor pointed to rec.*/ diff --git a/storage/innobase/include/mtr0log.h b/storage/innobase/include/mtr0log.h index 0d83d83b794..285672be898 100644 --- a/storage/innobase/include/mtr0log.h +++ b/storage/innobase/include/mtr0log.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2019, 2020, MariaDB Corporation. +Copyright (c) 2019, 2022, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -24,6 +24,9 @@ Mini-transaction log record encoding and decoding #pragma once #include "mtr0mtr.h" +/** The smallest invalid page identifier for persistent tablespaces */ +constexpr page_id_t end_page_id{SRV_SPACE_ID_UPPER_BOUND, 0}; + /** The minimum 2-byte integer (0b10xxxxxx xxxxxxxx) */ constexpr uint32_t MIN_2BYTE= 1 << 7; /** The minimum 3-byte integer (0b110xxxxx xxxxxxxx xxxxxxxx) */ @@ -388,6 +391,7 @@ inline byte *mtr_t::log_write(const page_id_t id, const buf_page_t *bpage, type <= FILE_CHECKPOINT, "invalid type"); ut_ad(type >= FILE_CREATE || is_named_space(id.space())); ut_ad(!bpage || bpage->id() == id); + ut_ad(id < end_page_id); constexpr bool have_len= type != INIT_PAGE && type != FREE_PAGE; constexpr bool have_offset= type == WRITE || type == MEMSET || type == MEMMOVE; diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index 8b89f2adf56..586d1eaf496 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, 2021, MariaDB Corporation. +Copyright (c) 2016, 2022, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -2952,8 +2952,12 @@ row_ins_sec_index_entry_low( rtr_init_rtr_info(&rtr_info, false, &cursor, index, false); rtr_info_update_btr(&cursor, &rtr_info); - mtr_start(&mtr); - index->set_modified(mtr); + mtr.start(); + if (index->table->is_temporary()) { + mtr.set_log_mode(MTR_LOG_NO_REDO); + } else { + index->set_modified(mtr); + } search_mode &= ulint(~BTR_MODIFY_LEAF); search_mode |= BTR_MODIFY_TREE; err = btr_cur_search_to_nth_level( From fd9e733aaaeada04eea215394208292753605517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 6 May 2022 10:39:12 +0300 Subject: [PATCH 5/5] MDEV-28478 fixup: Remove a conflict marker --- storage/innobase/gis/gis0rtree.cc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index 19e7003f1ea..b529d5ebef5 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -1,13 +1,7 @@ /***************************************************************************** Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. -<<<<<<< HEAD -Copyright (c) 2018, 2021, MariaDB Corporation. -||||||| parent of 20ae4816bba (MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log) -Copyright (c) 2019, 2020, MariaDB Corporation. -======= Copyright (c) 2019, 2022, MariaDB Corporation. ->>>>>>> 20ae4816bba (MDEV-28478: INSERT into SPATIAL INDEX in TEMPORARY table writes log) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software