Merge 10.1 into 10.2
This commit is contained in:
commit
182e2d4a6c
@ -429,6 +429,7 @@ select @a;
|
|||||||
#
|
#
|
||||||
# BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
|
# BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
|
||||||
#
|
#
|
||||||
|
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-01 00:00:01');
|
||||||
create table t1(a date,key(a));
|
create table t1(a date,key(a));
|
||||||
insert into t1 values ('2012-01-01'),('2012-02-02');
|
insert into t1 values ('2012-01-01'),('2012-02-02');
|
||||||
explain
|
explain
|
||||||
@ -440,6 +441,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
#
|
#
|
||||||
# MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
|
# MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
|
||||||
# MDEV-9972 Least function retuns date in date time format
|
# MDEV-9972 Least function retuns date in date time format
|
||||||
|
@ -57,6 +57,7 @@ select * from t1;
|
|||||||
t
|
t
|
||||||
0000-00-00 00:00:00
|
0000-00-00 00:00:00
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET TIMESTAMP=UNIX_TIMESTAMP('2020-08-11 00:00:01');
|
||||||
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
|
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
|
||||||
insert into t1 (b,c,d) values(now(),curtime(),now());
|
insert into t1 (b,c,d) values(now(),curtime(),now());
|
||||||
Warnings:
|
Warnings:
|
||||||
@ -65,6 +66,7 @@ select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
|
|||||||
date_format(a,"%Y-%m-%d")=b right(a+0,6)=c+0 a=d+0
|
date_format(a,"%Y-%m-%d")=b right(a+0,6)=c+0 a=d+0
|
||||||
1 1 1
|
1 1 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
CREATE TABLE t1 (a datetime not null);
|
CREATE TABLE t1 (a datetime not null);
|
||||||
insert into t1 values (0);
|
insert into t1 values (0);
|
||||||
select * from t1 where a is null;
|
select * from t1 where a is null;
|
||||||
@ -298,8 +300,10 @@ f2 f3
|
|||||||
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
|
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
|
||||||
f2
|
f2
|
||||||
2001-04-15 00:00:00
|
2001-04-15 00:00:00
|
||||||
|
SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:01');
|
||||||
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
|
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
|
||||||
1
|
1
|
||||||
|
SET timestamp=DEFAULT;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (f1 date);
|
create table t1 (f1 date);
|
||||||
insert into t1 values('01-01-01'),('01-01-02'),('01-01-03');
|
insert into t1 values('01-01-01'),('01-01-02'),('01-01-03');
|
||||||
|
@ -1080,3 +1080,10 @@ update t2 set col145=@b;
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-19526 heap number overflow
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a SMALLINT NOT NULL UNIQUE AUTO_INCREMENT, KEY(a))
|
||||||
|
ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 (a) SELECT seq FROM seq_1_to_8191;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Tests for setting innodb-page-size=64k;
|
# Tests for setting innodb-page-size=64k;
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_innodb_64k.inc
|
--source include/have_innodb_64k.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
call mtr.add_suppression('InnoDB: Cannot add field.*because after adding it, the row size is');
|
call mtr.add_suppression('InnoDB: Cannot add field.*because after adding it, the row size is');
|
||||||
|
|
||||||
@ -638,3 +639,11 @@ COMMIT;
|
|||||||
|
|
||||||
drop table t2;
|
drop table t2;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19526 heap number overflow
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a SMALLINT NOT NULL UNIQUE AUTO_INCREMENT, KEY(a))
|
||||||
|
ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 (a) SELECT seq FROM seq_1_to_8191;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -515,7 +515,7 @@ SESSION_VALUE NULL
|
|||||||
DEFAULT_VALUE zlib
|
DEFAULT_VALUE zlib
|
||||||
VARIABLE_SCOPE GLOBAL
|
VARIABLE_SCOPE GLOBAL
|
||||||
VARIABLE_TYPE ENUM
|
VARIABLE_TYPE ENUM
|
||||||
VARIABLE_COMMENT Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, or bzip2
|
VARIABLE_COMMENT Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, bzip2, or snappy
|
||||||
NUMERIC_MIN_VALUE NULL
|
NUMERIC_MIN_VALUE NULL
|
||||||
NUMERIC_MAX_VALUE NULL
|
NUMERIC_MAX_VALUE NULL
|
||||||
NUMERIC_BLOCK_SIZE NULL
|
NUMERIC_BLOCK_SIZE NULL
|
||||||
|
@ -369,12 +369,18 @@ select @a;
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
|
--echo # BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
# Set timestamp to make sure DATETIME->DATE truncation happens.
|
||||||
|
# Otherwise, the warning would disappear at '00:00:00' sharp,
|
||||||
|
# and a different execution plan would be chosen.
|
||||||
|
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-01 00:00:01');
|
||||||
create table t1(a date,key(a));
|
create table t1(a date,key(a));
|
||||||
insert into t1 values ('2012-01-01'),('2012-02-02');
|
insert into t1 values ('2012-01-01'),('2012-02-02');
|
||||||
explain
|
explain
|
||||||
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
||||||
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
|
--echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
|
||||||
|
@ -32,10 +32,12 @@ drop table t1;
|
|||||||
# Test insert of now() and curtime()
|
# Test insert of now() and curtime()
|
||||||
#
|
#
|
||||||
|
|
||||||
|
SET TIMESTAMP=UNIX_TIMESTAMP('2020-08-11 00:00:01');
|
||||||
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
|
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
|
||||||
insert into t1 (b,c,d) values(now(),curtime(),now());
|
insert into t1 (b,c,d) values(now(),curtime(),now());
|
||||||
select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
|
select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test of datetime and not null
|
# Test of datetime and not null
|
||||||
@ -201,6 +203,7 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# Bug#16377: Wrong DATE/DATETIME comparison in BETWEEN function.
|
# Bug#16377: Wrong DATE/DATETIME comparison in BETWEEN function.
|
||||||
#
|
#
|
||||||
|
|
||||||
create table t1 (f1 date, f2 datetime, f3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
|
create table t1 (f1 date, f2 datetime, f3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
|
||||||
insert into t1 values('2001-01-01','2001-01-01 01:01:01','2001-01-01 01:01:01');
|
insert into t1 values('2001-01-01','2001-01-01 01:01:01','2001-01-01 01:01:01');
|
||||||
insert into t1 values('2001-02-05','2001-02-05 00:00:00','2001-02-05 01:01:01');
|
insert into t1 values('2001-02-05','2001-02-05 00:00:00','2001-02-05 01:01:01');
|
||||||
@ -214,7 +217,9 @@ select f1, f2, f3 from t1 where cast(f1 as datetime) between f2 and
|
|||||||
select f2 from t1 where '2001-04-10 12:34:56' between f2 and '01-05-01';
|
select f2 from t1 where '2001-04-10 12:34:56' between f2 and '01-05-01';
|
||||||
select f2, f3 from t1 where '01-03-10' between f2 and f3;
|
select f2, f3 from t1 where '01-03-10' between f2 and f3;
|
||||||
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
|
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
|
||||||
|
SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:01');
|
||||||
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
|
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
|
||||||
|
SET timestamp=DEFAULT;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -308,9 +308,7 @@ sub report_mysqlds
|
|||||||
|
|
||||||
sub start_mysqlds()
|
sub start_mysqlds()
|
||||||
{
|
{
|
||||||
my (@groups, $com, $tmp, $i, @options, $j, $mysqld_found, $suffix_found, $info_sent);
|
my (@groups, $com, $tmp, $i, @options, $j, $mysqld_found, $info_sent);
|
||||||
|
|
||||||
$suffix_found= 0;
|
|
||||||
|
|
||||||
if (!$opt_no_log)
|
if (!$opt_no_log)
|
||||||
{
|
{
|
||||||
@ -349,10 +347,6 @@ sub start_mysqlds()
|
|||||||
$options[$j]= quote_shell_word($options[$j]);
|
$options[$j]= quote_shell_word($options[$j]);
|
||||||
$tmp.= " $options[$j]";
|
$tmp.= " $options[$j]";
|
||||||
}
|
}
|
||||||
elsif ("--defaults-group-suffix=" eq substr($options[$j], 0, 24))
|
|
||||||
{
|
|
||||||
$suffix_found= 1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$options[$j]= quote_shell_word($options[$j]);
|
$options[$j]= quote_shell_word($options[$j]);
|
||||||
@ -369,12 +363,6 @@ sub start_mysqlds()
|
|||||||
$info_sent= 1;
|
$info_sent= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$suffix_found)
|
|
||||||
{
|
|
||||||
$com.= " --defaults-group-suffix=";
|
|
||||||
$com.= substr($groups[$i],6);
|
|
||||||
}
|
|
||||||
|
|
||||||
$com.= $tmp;
|
$com.= $tmp;
|
||||||
|
|
||||||
if ($opt_wsrep_new_cluster) {
|
if ($opt_wsrep_new_cluster) {
|
||||||
|
@ -716,7 +716,8 @@ INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
|||||||
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
||||||
fi
|
fi
|
||||||
# if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
|
# if no command line arg and INNODB_DATA_HOME_DIR environment variable
|
||||||
|
# is not set, try to get it from my.cnf:
|
||||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
||||||
fi
|
fi
|
||||||
@ -964,17 +965,25 @@ then
|
|||||||
|
|
||||||
ib_home_dir=$INNODB_DATA_HOME_DIR
|
ib_home_dir=$INNODB_DATA_HOME_DIR
|
||||||
|
|
||||||
# Try to set ib_log_dir from the command line:
|
WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
|
||||||
ib_log_dir=$INNODB_LOG_GROUP_HOME_ARG
|
# Try to set WSREP_LOG_DIR from the command line:
|
||||||
if [ -z "$ib_log_dir" ]; then
|
if [ ! -z "$INNODB_LOG_GROUP_HOME_ARG" ]; then
|
||||||
ib_log_dir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir "")
|
WSREP_LOG_DIR=$INNODB_LOG_GROUP_HOME_ARG
|
||||||
fi
|
fi
|
||||||
if [ -z "$ib_log_dir" ]; then
|
# if no command line arg and WSREP_LOG_DIR is not set,
|
||||||
ib_log_dir=$(parse_cnf --mysqld innodb-log-group-home-dir "")
|
# try to get it from my.cnf:
|
||||||
|
if [ -z "$WSREP_LOG_DIR" ]; then
|
||||||
|
WSREP_LOG_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir '')
|
||||||
|
fi
|
||||||
|
if [ -z "$WSREP_LOG_DIR" ]; then
|
||||||
|
WSREP_LOG_DIR=$(parse_cnf --mysqld innodb-log-group-home-dir '')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ib_log_dir=$WSREP_LOG_DIR
|
||||||
|
|
||||||
# Try to set ib_undo_dir from the command line:
|
# Try to set ib_undo_dir from the command line:
|
||||||
ib_undo_dir=$INNODB_UNDO_DIR_ARG
|
ib_undo_dir=${INNODB_UNDO_DIR_ARG:-""}
|
||||||
|
# if no command line arg then try to get it from my.cnf:
|
||||||
if [ -z "$ib_undo_dir" ]; then
|
if [ -z "$ib_undo_dir" ]; then
|
||||||
ib_undo_dir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-undo-directory "")
|
ib_undo_dir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-undo-directory "")
|
||||||
fi
|
fi
|
||||||
|
@ -150,10 +150,11 @@ fi
|
|||||||
|
|
||||||
WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
|
WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
|
||||||
# Try to set WSREP_LOG_DIR from the command line:
|
# Try to set WSREP_LOG_DIR from the command line:
|
||||||
if [ -z "$WSREP_LOG_DIR" ]; then
|
if [ ! -z "$INNODB_LOG_GROUP_HOME_ARG" ]; then
|
||||||
WSREP_LOG_DIR=$INNODB_LOG_GROUP_HOME_ARG
|
WSREP_LOG_DIR=$INNODB_LOG_GROUP_HOME_ARG
|
||||||
fi
|
fi
|
||||||
# if WSREP_LOG_DIR env. variable is not set, try to get it from my.cnf
|
# if no command line arg and WSREP_LOG_DIR is not set,
|
||||||
|
# try to get it from my.cnf:
|
||||||
if [ -z "$WSREP_LOG_DIR" ]; then
|
if [ -z "$WSREP_LOG_DIR" ]; then
|
||||||
WSREP_LOG_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir '')
|
WSREP_LOG_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir '')
|
||||||
fi
|
fi
|
||||||
@ -174,7 +175,8 @@ INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
|||||||
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
||||||
fi
|
fi
|
||||||
# if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
|
# if no command line arg and INNODB_DATA_HOME_DIR environment variable
|
||||||
|
# is not set, try to get it from my.cnf:
|
||||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
||||||
fi
|
fi
|
||||||
|
@ -904,7 +904,8 @@ INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
|||||||
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
||||||
fi
|
fi
|
||||||
# if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
|
# if no command line arg and INNODB_DATA_HOME_DIR environment variable
|
||||||
|
# is not set, try to get it from my.cnf:
|
||||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||||
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
||||||
fi
|
fi
|
||||||
|
@ -3158,17 +3158,23 @@ fail_err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ulint max_size = page_get_max_insert_size_after_reorganize(page, 1);
|
ulint max_size = page_get_max_insert_size_after_reorganize(page, 1);
|
||||||
|
if (max_size < rec_size) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ulint n_recs = page_get_n_recs(page);
|
||||||
|
if (UNIV_UNLIKELY(n_recs >= 8189)) {
|
||||||
|
ut_ad(srv_page_size == 65536);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if (page_has_garbage(page)) {
|
if (page_has_garbage(page)) {
|
||||||
if ((max_size < rec_size
|
if (max_size < BTR_CUR_PAGE_REORGANIZE_LIMIT
|
||||||
|| max_size < BTR_CUR_PAGE_REORGANIZE_LIMIT)
|
&& n_recs > 1
|
||||||
&& page_get_n_recs(page) > 1
|
|
||||||
&& page_get_max_insert_size(page, 1) < rec_size) {
|
&& page_get_max_insert_size(page, 1) < rec_size) {
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else if (max_size < rec_size) {
|
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there have been many consecutive inserts to the
|
/* If there have been many consecutive inserts to the
|
||||||
|
@ -20978,7 +20978,7 @@ static TYPELIB page_compression_algorithms_typelib=
|
|||||||
};
|
};
|
||||||
static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm,
|
static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm,
|
||||||
PLUGIN_VAR_OPCMDARG,
|
PLUGIN_VAR_OPCMDARG,
|
||||||
"Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, or bzip2",
|
"Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, bzip2, or snappy",
|
||||||
innodb_compression_algorithm_validate, NULL,
|
innodb_compression_algorithm_validate, NULL,
|
||||||
/* We use here the largest number of supported compression method to
|
/* We use here the largest number of supported compression method to
|
||||||
enable all those methods that are available. Availability of compression
|
enable all those methods that are available. Availability of compression
|
||||||
|
@ -911,20 +911,6 @@ page_mem_alloc_free(
|
|||||||
free record list */
|
free record list */
|
||||||
ulint need); /*!< in: number of bytes allocated */
|
ulint need); /*!< in: number of bytes allocated */
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
Allocates a block of memory from the heap of an index page.
|
|
||||||
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
|
||||||
byte*
|
|
||||||
page_mem_alloc_heap(
|
|
||||||
/*================*/
|
|
||||||
page_t* page, /*!< in/out: index page */
|
|
||||||
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
|
||||||
space available for inserting the record,
|
|
||||||
or NULL */
|
|
||||||
ulint need, /*!< in: total number of bytes needed */
|
|
||||||
ulint* heap_no);/*!< out: this contains the heap number
|
|
||||||
of the allocated record
|
|
||||||
if allocation succeeds */
|
|
||||||
/************************************************************//**
|
|
||||||
Puts a record to free list. */
|
Puts a record to free list. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
|
@ -1176,6 +1176,52 @@ page_cur_parse_insert_rec(
|
|||||||
return(const_cast<byte*>(ptr + end_seg_len));
|
return(const_cast<byte*>(ptr + end_seg_len));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************//**
|
||||||
|
Allocates a block of memory from the heap of an index page.
|
||||||
|
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
||||||
|
static
|
||||||
|
byte*
|
||||||
|
page_mem_alloc_heap(
|
||||||
|
/*================*/
|
||||||
|
page_t* page, /*!< in/out: index page */
|
||||||
|
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
||||||
|
space available for inserting the record,
|
||||||
|
or NULL */
|
||||||
|
ulint need, /*!< in: total number of bytes needed */
|
||||||
|
ulint* heap_no)/*!< out: this contains the heap number
|
||||||
|
of the allocated record
|
||||||
|
if allocation succeeds */
|
||||||
|
{
|
||||||
|
byte* block;
|
||||||
|
ulint avl_space;
|
||||||
|
|
||||||
|
ut_ad(page && heap_no);
|
||||||
|
|
||||||
|
avl_space = page_get_max_insert_size(page, 1);
|
||||||
|
|
||||||
|
if (avl_space >= need) {
|
||||||
|
const ulint h = page_dir_get_n_heap(page);
|
||||||
|
if (UNIV_UNLIKELY(h >= 8191)) {
|
||||||
|
/* At the minimum record size of 5+2 bytes,
|
||||||
|
we can only reach this condition when using
|
||||||
|
innodb_page_size=64k. */
|
||||||
|
ut_ad(srv_page_size == 65536);
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
*heap_no = h;
|
||||||
|
|
||||||
|
block = page_header_get_ptr(page, PAGE_HEAP_TOP);
|
||||||
|
|
||||||
|
page_header_set_ptr(page, page_zip, PAGE_HEAP_TOP,
|
||||||
|
block + need);
|
||||||
|
page_dir_set_n_heap(page, page_zip, 1 + *heap_no);
|
||||||
|
|
||||||
|
return(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************//**
|
/***********************************************************//**
|
||||||
Inserts a record next to page cursor on an uncompressed page.
|
Inserts a record next to page cursor on an uncompressed page.
|
||||||
Returns pointer to inserted record if succeed, i.e., enough
|
Returns pointer to inserted record if succeed, i.e., enough
|
||||||
|
@ -251,43 +251,6 @@ page_set_autoinc(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************//**
|
|
||||||
Allocates a block of memory from the heap of an index page.
|
|
||||||
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
|
||||||
byte*
|
|
||||||
page_mem_alloc_heap(
|
|
||||||
/*================*/
|
|
||||||
page_t* page, /*!< in/out: index page */
|
|
||||||
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
|
||||||
space available for inserting the record,
|
|
||||||
or NULL */
|
|
||||||
ulint need, /*!< in: total number of bytes needed */
|
|
||||||
ulint* heap_no)/*!< out: this contains the heap number
|
|
||||||
of the allocated record
|
|
||||||
if allocation succeeds */
|
|
||||||
{
|
|
||||||
byte* block;
|
|
||||||
ulint avl_space;
|
|
||||||
|
|
||||||
ut_ad(page && heap_no);
|
|
||||||
|
|
||||||
avl_space = page_get_max_insert_size(page, 1);
|
|
||||||
|
|
||||||
if (avl_space >= need) {
|
|
||||||
block = page_header_get_ptr(page, PAGE_HEAP_TOP);
|
|
||||||
|
|
||||||
page_header_set_ptr(page, page_zip, PAGE_HEAP_TOP,
|
|
||||||
block + need);
|
|
||||||
*heap_no = page_dir_get_n_heap(page);
|
|
||||||
|
|
||||||
page_dir_set_n_heap(page, page_zip, 1 + *heap_no);
|
|
||||||
|
|
||||||
return(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************//**
|
/**********************************************************//**
|
||||||
Writes a log record of page creation. */
|
Writes a log record of page creation. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2008, Google Inc.
|
Copyright (c) 2008, Google Inc.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2015, 2017, MariaDB Corporation.
|
Copyright (c) 2015, 2020, MariaDB Corporation.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
Google, Inc. Those modifications are gratefully acknowledged and are described
|
Google, Inc. Those modifications are gratefully acknowledged and are described
|
||||||
@ -1542,17 +1542,23 @@ fail_err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ulint max_size = page_get_max_insert_size_after_reorganize(page, 1);
|
ulint max_size = page_get_max_insert_size_after_reorganize(page, 1);
|
||||||
|
if (max_size < rec_size) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ulint n_recs = page_get_n_recs(page);
|
||||||
|
if (UNIV_UNLIKELY(n_recs >= 8189)) {
|
||||||
|
ut_ad(srv_page_size == 65536);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if (page_has_garbage(page)) {
|
if (page_has_garbage(page)) {
|
||||||
if ((max_size < rec_size
|
if (max_size < BTR_CUR_PAGE_REORGANIZE_LIMIT
|
||||||
|| max_size < BTR_CUR_PAGE_REORGANIZE_LIMIT)
|
&& n_recs > 1
|
||||||
&& page_get_n_recs(page) > 1
|
|
||||||
&& page_get_max_insert_size(page, 1) < rec_size) {
|
&& page_get_max_insert_size(page, 1) < rec_size) {
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else if (max_size < rec_size) {
|
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there have been many consecutive inserts to the
|
/* If there have been many consecutive inserts to the
|
||||||
|
@ -21068,7 +21068,7 @@ static TYPELIB page_compression_algorithms_typelib=
|
|||||||
};
|
};
|
||||||
static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm,
|
static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm,
|
||||||
PLUGIN_VAR_OPCMDARG,
|
PLUGIN_VAR_OPCMDARG,
|
||||||
"Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, or bzip2",
|
"Compression algorithm used on page compression. One of: none, zlib, lz4, lzo, lzma, bzip2, or snappy",
|
||||||
innodb_compression_algorithm_validate, NULL,
|
innodb_compression_algorithm_validate, NULL,
|
||||||
/* We use here the largest number of supported compression method to
|
/* We use here the largest number of supported compression method to
|
||||||
enable all those methods that are available. Availability of compression
|
enable all those methods that are available. Availability of compression
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2013, 2018, MariaDB Corporation.
|
Copyright (c) 2013, 2020, 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
|
||||||
@ -749,21 +749,6 @@ page_mem_alloc_free(
|
|||||||
free record list */
|
free record list */
|
||||||
ulint need); /*!< in: number of bytes allocated */
|
ulint need); /*!< in: number of bytes allocated */
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
Allocates a block of memory from the heap of an index page.
|
|
||||||
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
|
||||||
UNIV_INTERN
|
|
||||||
byte*
|
|
||||||
page_mem_alloc_heap(
|
|
||||||
/*================*/
|
|
||||||
page_t* page, /*!< in/out: index page */
|
|
||||||
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
|
||||||
space available for inserting the record,
|
|
||||||
or NULL */
|
|
||||||
ulint need, /*!< in: total number of bytes needed */
|
|
||||||
ulint* heap_no);/*!< out: this contains the heap number
|
|
||||||
of the allocated record
|
|
||||||
if allocation succeeds */
|
|
||||||
/************************************************************//**
|
|
||||||
Puts a record to free list. */
|
Puts a record to free list. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
|
Copyright (c) 2020, 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
|
||||||
@ -941,6 +942,52 @@ page_cur_parse_insert_rec(
|
|||||||
return(ptr + end_seg_len);
|
return(ptr + end_seg_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************//**
|
||||||
|
Allocates a block of memory from the heap of an index page.
|
||||||
|
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
||||||
|
static
|
||||||
|
byte*
|
||||||
|
page_mem_alloc_heap(
|
||||||
|
/*================*/
|
||||||
|
page_t* page, /*!< in/out: index page */
|
||||||
|
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
||||||
|
space available for inserting the record,
|
||||||
|
or NULL */
|
||||||
|
ulint need, /*!< in: total number of bytes needed */
|
||||||
|
ulint* heap_no)/*!< out: this contains the heap number
|
||||||
|
of the allocated record
|
||||||
|
if allocation succeeds */
|
||||||
|
{
|
||||||
|
byte* block;
|
||||||
|
ulint avl_space;
|
||||||
|
|
||||||
|
ut_ad(page && heap_no);
|
||||||
|
|
||||||
|
avl_space = page_get_max_insert_size(page, 1);
|
||||||
|
|
||||||
|
if (avl_space >= need) {
|
||||||
|
const ulint h = page_dir_get_n_heap(page);
|
||||||
|
if (UNIV_UNLIKELY(h >= 8191)) {
|
||||||
|
/* At the minimum record size of 5+2 bytes,
|
||||||
|
we can only reach this condition when using
|
||||||
|
innodb_page_size=64k. */
|
||||||
|
ut_ad(srv_page_size == 65536);
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
*heap_no = h;
|
||||||
|
|
||||||
|
block = page_header_get_ptr(page, PAGE_HEAP_TOP);
|
||||||
|
|
||||||
|
page_header_set_ptr(page, page_zip, PAGE_HEAP_TOP,
|
||||||
|
block + need);
|
||||||
|
page_dir_set_n_heap(page, page_zip, 1 + *heap_no);
|
||||||
|
|
||||||
|
return(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************//**
|
/***********************************************************//**
|
||||||
Inserts a record next to page cursor on an uncompressed page.
|
Inserts a record next to page cursor on an uncompressed page.
|
||||||
Returns pointer to inserted record if succeed, i.e., enough
|
Returns pointer to inserted record if succeed, i.e., enough
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2018, MariaDB Corporation.
|
Copyright (c) 2018, 2020, 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
|
||||||
@ -240,44 +240,6 @@ page_set_max_trx_id(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************//**
|
|
||||||
Allocates a block of memory from the heap of an index page.
|
|
||||||
@return pointer to start of allocated buffer, or NULL if allocation fails */
|
|
||||||
UNIV_INTERN
|
|
||||||
byte*
|
|
||||||
page_mem_alloc_heap(
|
|
||||||
/*================*/
|
|
||||||
page_t* page, /*!< in/out: index page */
|
|
||||||
page_zip_des_t* page_zip,/*!< in/out: compressed page with enough
|
|
||||||
space available for inserting the record,
|
|
||||||
or NULL */
|
|
||||||
ulint need, /*!< in: total number of bytes needed */
|
|
||||||
ulint* heap_no)/*!< out: this contains the heap number
|
|
||||||
of the allocated record
|
|
||||||
if allocation succeeds */
|
|
||||||
{
|
|
||||||
byte* block;
|
|
||||||
ulint avl_space;
|
|
||||||
|
|
||||||
ut_ad(page && heap_no);
|
|
||||||
|
|
||||||
avl_space = page_get_max_insert_size(page, 1);
|
|
||||||
|
|
||||||
if (avl_space >= need) {
|
|
||||||
block = page_header_get_ptr(page, PAGE_HEAP_TOP);
|
|
||||||
|
|
||||||
page_header_set_ptr(page, page_zip, PAGE_HEAP_TOP,
|
|
||||||
block + need);
|
|
||||||
*heap_no = page_dir_get_n_heap(page);
|
|
||||||
|
|
||||||
page_dir_set_n_heap(page, page_zip, 1 + *heap_no);
|
|
||||||
|
|
||||||
return(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef UNIV_HOTBACKUP
|
#ifndef UNIV_HOTBACKUP
|
||||||
/**********************************************************//**
|
/**********************************************************//**
|
||||||
Writes a log record of page creation. */
|
Writes a log record of page creation. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user