Commit 57a9626f authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.5 into 10.6

parents 06a4193c fd9e733a
...@@ -43,6 +43,7 @@ MACRO(BUNDLE_PCRE2) ...@@ -43,6 +43,7 @@ MACRO(BUNDLE_PCRE2)
ENDFOREACH() ENDFOREACH()
FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINSIZEREL") FOREACH(v "" "_DEBUG" "_RELWITHDEBINFO" "_RELEASE" "_MINSIZEREL")
STRING(REPLACE "/WX" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}") STRING(REPLACE "/WX" "" pcre2_flags${v} "${CMAKE_C_FLAGS${v}}")
SET(pcre2_flags${v} "${pcre2_flags${v}} -std=c99 ")
IF(MSVC) IF(MSVC)
# Suppress a warning # Suppress a warning
STRING(APPEND pcre2_flags${v} " /wd4244 " ) STRING(APPEND pcre2_flags${v} " /wd4244 " )
...@@ -53,8 +54,8 @@ MACRO(BUNDLE_PCRE2) ...@@ -53,8 +54,8 @@ MACRO(BUNDLE_PCRE2)
ExternalProject_Add( ExternalProject_Add(
pcre2 pcre2
PREFIX "${dir}" PREFIX "${dir}"
URL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.zip" URL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.40/pcre2-10.40.zip"
URL_MD5 e101c0ca9edb4b0af103bebe78ba52b0 URL_MD5 798698846982ce171d881ed0d7535c2a
INSTALL_COMMAND "" INSTALL_COMMAND ""
CMAKE_ARGS CMAKE_ARGS
"-DCMAKE_WARN_DEPRECATED=FALSE" "-DCMAKE_WARN_DEPRECATED=FALSE"
......
...@@ -61,10 +61,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1); ...@@ -61,10 +61,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1);
count(*) count(*)
57344 57344
drop table t1; 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;
#
# 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;
...@@ -73,11 +73,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1); ...@@ -73,11 +73,3 @@ select count(*) from t1 where MBRWithin(t1.c2, @g1);
# Clean up. # Clean up.
drop table t1; 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;
--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;
...@@ -158,10 +158,10 @@ class Longtext: public Type ...@@ -158,10 +158,10 @@ class Longtext: public Type
}; };
class Yesno: public Varchar class Yes_or_empty: public Varchar
{ {
public: public:
Yesno(): Varchar(3) { } Yes_or_empty(): Varchar(3) { }
}; };
......
...@@ -9058,7 +9058,7 @@ ST_FIELD_INFO columns_fields_info[]= ...@@ -9058,7 +9058,7 @@ ST_FIELD_INFO columns_fields_info[]=
Column("ORDINAL_POSITION", ULonglong(), NOT_NULL, OPEN_FRM_ONLY), Column("ORDINAL_POSITION", ULonglong(), NOT_NULL, OPEN_FRM_ONLY),
Column("COLUMN_DEFAULT", Longtext(MAX_FIELD_VARCHARLENGTH), Column("COLUMN_DEFAULT", Longtext(MAX_FIELD_VARCHARLENGTH),
NULLABLE, "Default",OPEN_FRM_ONLY), 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("DATA_TYPE", Name(), NOT_NULL, OPEN_FRM_ONLY),
Column("CHARACTER_MAXIMUM_LENGTH",ULonglong(), NULLABLE, OPEN_FRM_ONLY), Column("CHARACTER_MAXIMUM_LENGTH",ULonglong(), NULLABLE, OPEN_FRM_ONLY),
Column("CHARACTER_OCTET_LENGTH", ULonglong(), NULLABLE, OPEN_FRM_ONLY), Column("CHARACTER_OCTET_LENGTH", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
...@@ -9095,8 +9095,8 @@ ST_FIELD_INFO collation_fields_info[]= ...@@ -9095,8 +9095,8 @@ ST_FIELD_INFO collation_fields_info[]=
Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"), Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"),
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"), Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"), Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"),
Column("IS_DEFAULT", Yesno(), NOT_NULL, "Default"), Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL, "Default"),
Column("IS_COMPILED", Yesno(), NOT_NULL, "Compiled"), Column("IS_COMPILED", Yes_or_empty(), NOT_NULL, "Compiled"),
Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"), Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"),
CEnd() CEnd()
}; };
...@@ -9104,10 +9104,10 @@ ST_FIELD_INFO collation_fields_info[]= ...@@ -9104,10 +9104,10 @@ ST_FIELD_INFO collation_fields_info[]=
ST_FIELD_INFO applicable_roles_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("ROLE_NAME", Varchar(USERNAME_CHAR_LENGTH), NOT_NULL),
Column("IS_GRANTABLE", Yesno(), NOT_NULL), Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
Column("IS_DEFAULT", Yesno(), NULLABLE), Column("IS_DEFAULT", Yes_or_empty(), NULLABLE),
CEnd() CEnd()
}; };
...@@ -9251,7 +9251,7 @@ ST_FIELD_INFO view_fields_info[]= ...@@ -9251,7 +9251,7 @@ ST_FIELD_INFO view_fields_info[]=
Column("TABLE_NAME", Name(), NOT_NULL, OPEN_FRM_ONLY), Column("TABLE_NAME", Name(), NOT_NULL, OPEN_FRM_ONLY),
Column("VIEW_DEFINITION", Longtext(65535), 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("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("DEFINER", Definer(), NOT_NULL, OPEN_FRM_ONLY),
Column("SECURITY_TYPE", Varchar(7), 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), Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, OPEN_FRM_ONLY),
...@@ -9263,46 +9263,46 @@ ST_FIELD_INFO view_fields_info[]= ...@@ -9263,46 +9263,46 @@ ST_FIELD_INFO view_fields_info[]=
ST_FIELD_INFO user_privileges_fields_info[]= ST_FIELD_INFO user_privileges_fields_info[]=
{ {
Column("GRANTEE", Userhost(), NOT_NULL), Column("GRANTEE", Userhost(), NOT_NULL),
Column("TABLE_CATALOG", Catalog(), NOT_NULL), Column("TABLE_CATALOG", Catalog(), NOT_NULL),
Column("PRIVILEGE_TYPE", Name(), NOT_NULL), Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
Column("IS_GRANTABLE", Yesno(), NOT_NULL), Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
CEnd() CEnd()
}; };
ST_FIELD_INFO schema_privileges_fields_info[]= ST_FIELD_INFO schema_privileges_fields_info[]=
{ {
Column("GRANTEE", Userhost(), NOT_NULL), Column("GRANTEE", Userhost(), NOT_NULL),
Column("TABLE_CATALOG", Catalog(), NOT_NULL), Column("TABLE_CATALOG", Catalog(), NOT_NULL),
Column("TABLE_SCHEMA", Name(), NOT_NULL), Column("TABLE_SCHEMA", Name(), NOT_NULL),
Column("PRIVILEGE_TYPE", Name(), NOT_NULL), Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
Column("IS_GRANTABLE", Yesno(), NOT_NULL), Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
CEnd() CEnd()
}; };
ST_FIELD_INFO table_privileges_fields_info[]= ST_FIELD_INFO table_privileges_fields_info[]=
{ {
Column("GRANTEE", Userhost(), NOT_NULL), Column("GRANTEE", Userhost(), NOT_NULL),
Column("TABLE_CATALOG", Catalog(), NOT_NULL), Column("TABLE_CATALOG", Catalog(), NOT_NULL),
Column("TABLE_SCHEMA", Name(), NOT_NULL), Column("TABLE_SCHEMA", Name(), NOT_NULL),
Column("TABLE_NAME", Name(), NOT_NULL), Column("TABLE_NAME", Name(), NOT_NULL),
Column("PRIVILEGE_TYPE", Name(), NOT_NULL), Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
Column("IS_GRANTABLE", Yesno(), NOT_NULL), Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
CEnd() CEnd()
}; };
ST_FIELD_INFO column_privileges_fields_info[]= ST_FIELD_INFO column_privileges_fields_info[]=
{ {
Column("GRANTEE", Userhost(), NOT_NULL), Column("GRANTEE", Userhost(), NOT_NULL),
Column("TABLE_CATALOG", Catalog(), NOT_NULL), Column("TABLE_CATALOG", Catalog(), NOT_NULL),
Column("TABLE_SCHEMA", Name(), NOT_NULL), Column("TABLE_SCHEMA", Name(), NOT_NULL),
Column("TABLE_NAME", Name(), NOT_NULL), Column("TABLE_NAME", Name(), NOT_NULL),
Column("COLUMN_NAME", Name(), NOT_NULL), Column("COLUMN_NAME", Name(), NOT_NULL),
Column("PRIVILEGE_TYPE", Name(), NOT_NULL), Column("PRIVILEGE_TYPE", Name(), NOT_NULL),
Column("IS_GRANTABLE", Yesno(), NOT_NULL), Column("IS_GRANTABLE", Yes_or_empty(), NOT_NULL),
CEnd() CEnd()
}; };
...@@ -9443,7 +9443,7 @@ ST_FIELD_INFO sysvars_fields_info[]= ...@@ -9443,7 +9443,7 @@ ST_FIELD_INFO sysvars_fields_info[]=
Column("NUMERIC_MAX_VALUE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE), Column("NUMERIC_MAX_VALUE", Varchar(MY_INT64_NUM_DECIMAL_DIGITS), NULLABLE),
Column("NUMERIC_BLOCK_SIZE", 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("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("COMMAND_LINE_ARGUMENT",Name(), NULLABLE),
Column("GLOBAL_VALUE_PATH", Varchar(2048), NULLABLE), Column("GLOBAL_VALUE_PATH", Varchar(2048), NULLABLE),
CEnd() CEnd()
......
...@@ -3530,17 +3530,9 @@ btr_compress( ...@@ -3530,17 +3530,9 @@ btr_compress(
} }
if (mbr_changed) { 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( rtr_update_mbr_field(
&cursor2, offsets2, &father_cursor, &cursor2, offsets2, &father_cursor,
merge_page, &new_mbr, NULL, mtr); merge_page, &new_mbr, NULL, mtr);
#endif
} else { } else {
rtr_node_ptr_delete(&father_cursor, mtr); rtr_node_ptr_delete(&father_cursor, mtr);
} }
......
...@@ -5811,7 +5811,6 @@ btr_cur_pessimistic_delete( ...@@ -5811,7 +5811,6 @@ btr_cur_pessimistic_delete(
rec_t* father_rec; rec_t* father_rec;
btr_cur_t father_cursor; btr_cur_t father_cursor;
rec_offs* offsets; rec_offs* offsets;
bool upd_ret;
ulint len; ulint len;
rtr_page_get_father_block(NULL, heap, index, rtr_page_get_father_block(NULL, heap, index,
...@@ -5825,17 +5824,8 @@ btr_cur_pessimistic_delete( ...@@ -5825,17 +5824,8 @@ btr_cur_pessimistic_delete(
rtr_read_mbr(rec_get_nth_field( rtr_read_mbr(rec_get_nth_field(
father_rec, offsets, 0, &len), &father_mbr); father_rec, offsets, 0, &len), &father_mbr);
upd_ret = rtr_update_mbr_field(&father_cursor, offsets, rtr_update_mbr_field(&father_cursor, offsets, NULL,
NULL, page, &father_mbr, page, &father_mbr, next_rec, mtr);
next_rec, mtr);
if (!upd_ret) {
*err = DB_ERROR;
mem_heap_free(heap);
return(FALSE);
}
ut_d(parent_latched = true); ut_d(parent_latched = true);
} else { } else {
/* Otherwise, if we delete the leftmost node pointer /* Otherwise, if we delete the leftmost node pointer
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2018, 2021, MariaDB Corporation. Copyright (c) 2019, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU General Public License as published by the Free Software
...@@ -185,9 +185,8 @@ rtr_index_build_node_ptr( ...@@ -185,9 +185,8 @@ rtr_index_build_node_ptr(
} }
/**************************************************************//** /**************************************************************//**
Update the mbr field of a spatial index row. Update the mbr field of a spatial index row. */
@return true if update is successful */ void
bool
rtr_update_mbr_field( rtr_update_mbr_field(
/*=================*/ /*=================*/
btr_cur_t* cursor, /*!< in/out: cursor pointed to rec.*/ btr_cur_t* cursor, /*!< in/out: cursor pointed to rec.*/
...@@ -535,8 +534,6 @@ rtr_update_mbr_field( ...@@ -535,8 +534,6 @@ rtr_update_mbr_field(
page_is_comp(page)))); page_is_comp(page))));
mem_heap_free(heap); mem_heap_free(heap);
return(true);
} }
/**************************************************************//** /**************************************************************//**
...@@ -1262,12 +1259,8 @@ rtr_ins_enlarge_mbr( ...@@ -1262,12 +1259,8 @@ rtr_ins_enlarge_mbr(
page = buf_block_get_frame(block); page = buf_block_get_frame(block);
/* Update the mbr field of the rec. */ /* Update the mbr field of the rec. */
if (!rtr_update_mbr_field(&cursor, offsets, NULL, page, rtr_update_mbr_field(&cursor, offsets, NULL, page,
&new_mbr, NULL, mtr)) { &new_mbr, NULL, mtr);
err = DB_ERROR;
break;
}
page_cursor = btr_cur_get_page_cur(&cursor); page_cursor = btr_cur_get_page_cur(&cursor);
block = page_cur_get_block(page_cursor); block = page_cur_get_block(page_cursor);
} }
...@@ -1577,7 +1570,7 @@ rtr_merge_mbr_changed( ...@@ -1577,7 +1570,7 @@ rtr_merge_mbr_changed(
/****************************************************************//** /****************************************************************//**
Merge 2 mbrs and update the the mbr that cursor is on. */ Merge 2 mbrs and update the the mbr that cursor is on. */
dberr_t void
rtr_merge_and_update_mbr( rtr_merge_and_update_mbr(
/*=====================*/ /*=====================*/
btr_cur_t* cursor, /*!< in/out: cursor */ btr_cur_t* cursor, /*!< in/out: cursor */
...@@ -1587,27 +1580,15 @@ rtr_merge_and_update_mbr( ...@@ -1587,27 +1580,15 @@ rtr_merge_and_update_mbr(
page_t* child_page, /*!< in: the page. */ page_t* child_page, /*!< in: the page. */
mtr_t* mtr) /*!< in: mtr */ mtr_t* mtr) /*!< in: mtr */
{ {
dberr_t err = DB_SUCCESS;
rtr_mbr_t new_mbr; 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, if (rtr_merge_mbr_changed(cursor, cursor2, offsets, offsets2,
&new_mbr); &new_mbr)) {
rtr_update_mbr_field(cursor, offsets, cursor2, child_page,
/* Update the mbr field of the rec. And will delete the record &new_mbr, NULL, mtr);
pointed by cursor2 */
if (changed) {
if (!rtr_update_mbr_field(cursor, offsets, cursor2, child_page,
&new_mbr, NULL, mtr)) {
err = DB_ERROR;
}
} else { } else {
rtr_node_ptr_delete(cursor2, mtr); rtr_node_ptr_delete(cursor2, mtr);
} }
return(err);
} }
/*************************************************************//** /*************************************************************//**
......
...@@ -89,22 +89,25 @@ this must be equal to srv_page_size */ ...@@ -89,22 +89,25 @@ this must be equal to srv_page_size */
class page_id_t class page_id_t
{ {
public: public:
/** Constructor from (space, page_no). /** Constructor from (space, page_no).
@param[in] space tablespace id @param[in] space tablespace id
@param[in] page_no page number */ @param[in] page_no page number */
page_id_t(ulint space, uint32_t page_no) : m_id(uint64_t{space} << 32 | page_no) constexpr 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(uint64_t id) : m_id(id) {}
constexpr bool operator==(const page_id_t& rhs) const
page_id_t(uint64_t id) : m_id(id) {} { return m_id == rhs.m_id; }
bool operator==(const page_id_t& rhs) const { return m_id == rhs.m_id; } constexpr bool operator!=(const page_id_t& rhs) const
bool operator!=(const page_id_t& rhs) const { return m_id != rhs.m_id; } { return m_id != rhs.m_id; }
bool operator<(const page_id_t& rhs) const { return m_id < rhs.m_id; } constexpr bool operator<(const page_id_t& rhs) const
bool operator>(const page_id_t& rhs) const { return m_id > rhs.m_id; } { return m_id < rhs.m_id; }
bool operator<=(const page_id_t& rhs) const { return m_id <= rhs.m_id; } constexpr bool operator>(const page_id_t& rhs) const
bool operator>=(const page_id_t& rhs) const { return m_id >= rhs.m_id; } { 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--() { ut_ad(page_no()); m_id--; return *this; }
page_id_t &operator++() page_id_t &operator++()
{ {
...@@ -125,15 +128,16 @@ class page_id_t ...@@ -125,15 +128,16 @@ class page_id_t
/** Retrieve the tablespace id. /** Retrieve the tablespace id.
@return tablespace id */ @return tablespace id */
uint32_t space() const { return static_cast<uint32_t>(m_id >> 32); } constexpr uint32_t space() const { return static_cast<uint32_t>(m_id >> 32); }
/** Retrieve the page number. /** Retrieve the page number.
@return page number */ @return page number */
uint32_t page_no() const { return static_cast<uint32_t>(m_id); } constexpr uint32_t page_no() const { return static_cast<uint32_t>(m_id); }
/** Retrieve the fold value. /** Retrieve the fold value.
@return 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. /** Reset the page number only.
@param[in] page_no page number */ @param[in] page_no page number */
...@@ -142,7 +146,7 @@ class page_id_t ...@@ -142,7 +146,7 @@ class page_id_t
m_id= (m_id & ~uint64_t{0} << 32) | page_no; m_id= (m_id & ~uint64_t{0} << 32) | page_no;
} }
ulonglong raw() { return m_id; } constexpr ulonglong raw() { return m_id; }
private: private:
/** The page identifier */ /** The page identifier */
......
...@@ -372,7 +372,7 @@ rtr_page_copy_rec_list_start_no_locks( ...@@ -372,7 +372,7 @@ rtr_page_copy_rec_list_start_no_locks(
/****************************************************************//** /****************************************************************//**
Merge 2 mbrs and update the the mbr that cursor is on. */ Merge 2 mbrs and update the the mbr that cursor is on. */
dberr_t void
rtr_merge_and_update_mbr( rtr_merge_and_update_mbr(
/*=====================*/ /*=====================*/
btr_cur_t* cursor, /*!< in/out: cursor */ btr_cur_t* cursor, /*!< in/out: cursor */
...@@ -404,9 +404,8 @@ rtr_merge_mbr_changed( ...@@ -404,9 +404,8 @@ rtr_merge_mbr_changed(
/**************************************************************//** /**************************************************************//**
Update the mbr field of a spatial index row. Update the mbr field of a spatial index row. */
@return true if successful */ void
bool
rtr_update_mbr_field( rtr_update_mbr_field(
/*=================*/ /*=================*/
btr_cur_t* cursor, /*!< in: cursor pointed to rec.*/ btr_cur_t* cursor, /*!< in: cursor pointed to rec.*/
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 2019, 2021, MariaDB Corporation. Copyright (c) 2019, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 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 ...@@ -24,6 +24,9 @@ Mini-transaction log record encoding and decoding
#pragma once #pragma once
#include "mtr0mtr.h" #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) */ /** The minimum 2-byte integer (0b10xxxxxx xxxxxxxx) */
constexpr uint32_t MIN_2BYTE= 1 << 7; constexpr uint32_t MIN_2BYTE= 1 << 7;
/** The minimum 3-byte integer (0b110xxxxx xxxxxxxx xxxxxxxx) */ /** 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, ...@@ -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"); type <= FILE_CHECKPOINT, "invalid type");
ut_ad(type >= FILE_CREATE || is_named_space(id.space())); ut_ad(type >= FILE_CREATE || is_named_space(id.space()));
ut_ad(!bpage || bpage->id() == id); 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_len= type != INIT_PAGE && type != FREE_PAGE;
constexpr bool have_offset= type == WRITE || type == MEMSET || constexpr bool have_offset= type == WRITE || type == MEMSET ||
type == MEMMOVE; type == MEMMOVE;
......
...@@ -2880,8 +2880,12 @@ row_ins_sec_index_entry_low( ...@@ -2880,8 +2880,12 @@ row_ins_sec_index_entry_low(
rtr_init_rtr_info(&rtr_info, false, &cursor, rtr_init_rtr_info(&rtr_info, false, &cursor,
index, false); index, false);
rtr_info_update_btr(&cursor, &rtr_info); rtr_info_update_btr(&cursor, &rtr_info);
mtr_start(&mtr); mtr.start();
index->set_modified(mtr); 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 &= ulint(~BTR_MODIFY_LEAF);
search_mode |= BTR_MODIFY_TREE; search_mode |= BTR_MODIFY_TREE;
err = btr_cur_search_to_nth_level( err = btr_cur_search_to_nth_level(
......
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