mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.5 into 10.6
This commit is contained in:
@ -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)
|
|||||||
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);
|
|||||||
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;
|
|
||||||
|
14
mysql-test/suite/innodb_gis/r/rtree_temporary.result
Normal file
14
mysql-test/suite/innodb_gis/r/rtree_temporary.result
Normal file
@ -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;
|
@ -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;
|
|
||||||
|
18
mysql-test/suite/innodb_gis/t/rtree_temporary.test
Normal file
18
mysql-test/suite/innodb_gis/t/rtree_temporary.test
Normal file
@ -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;
|
@ -158,10 +158,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
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[]=
|
|||||||
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[]=
|
|||||||
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()
|
||||||
};
|
};
|
||||||
@ -9106,8 +9106,8 @@ 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[]=
|
|||||||
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),
|
||||||
@ -9266,7 +9266,7 @@ 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()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9277,7 +9277,7 @@ ST_FIELD_INFO schema_privileges_fields_info[]=
|
|||||||
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()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9289,7 +9289,7 @@ ST_FIELD_INFO table_privileges_fields_info[]=
|
|||||||
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()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9302,7 +9302,7 @@ ST_FIELD_INFO column_privileges_fields_info[]=
|
|||||||
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[]=
|
|||||||
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 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 @@ discard_page:
|
|||||||
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 @@ discard_page:
|
|||||||
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
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
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(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************//**
|
/**************************************************************//**
|
||||||
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 @@ update_mbr:
|
|||||||
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(
|
|||||||
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(
|
|||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
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(
|
|||||||
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));
|
if (rtr_merge_mbr_changed(cursor, cursor2, offsets, offsets2,
|
||||||
|
&new_mbr)) {
|
||||||
changed = rtr_merge_mbr_changed(cursor, cursor2, offsets, offsets2,
|
rtr_update_mbr_field(cursor, offsets, cursor2, child_page,
|
||||||
&new_mbr);
|
&new_mbr, NULL, mtr);
|
||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
} 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 */
|
|||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
page_id_t(uint64_t id) : m_id(id) {}
|
constexpr page_id_t(uint64_t id) : m_id(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; }
|
||||||
|
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 @@ public:
|
|||||||
|
|
||||||
/** 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 @@ public:
|
|||||||
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(
|
|||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
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(
|
|||||||
|
|
||||||
|
|
||||||
/**************************************************************//**
|
/**************************************************************//**
|
||||||
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.*/
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
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
|
|||||||
#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,
|
|||||||
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(
|
|||||||
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();
|
||||||
|
if (index->table->is_temporary()) {
|
||||||
|
mtr.set_log_mode(MTR_LOG_NO_REDO);
|
||||||
|
} else {
|
||||||
index->set_modified(mtr);
|
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(
|
||||||
|
Reference in New Issue
Block a user