Commit 038cd519 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.7 into 10.8

parents fe9412db 08e2c98e
...@@ -154,7 +154,7 @@ id2 int NOT NULL, ...@@ -154,7 +154,7 @@ id2 int NOT NULL,
d1 datetime, d1 datetime,
d2 timestamp NOT NULL, d2 timestamp NOT NULL,
KEY id2 (id2) KEY id2 (id2)
) engine=innodb; ) engine=innodb stats_persistent=0;
insert into t2 values insert into t2 values
(1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'), (1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
(2,3,'2019-03-05 00:00:00','2019-03-06 00:00:00'), (2,3,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
......
...@@ -141,7 +141,7 @@ CREATE TABLE t2 ( ...@@ -141,7 +141,7 @@ CREATE TABLE t2 (
d1 datetime, d1 datetime,
d2 timestamp NOT NULL, d2 timestamp NOT NULL,
KEY id2 (id2) KEY id2 (id2)
) engine=innodb; ) engine=innodb stats_persistent=0;
insert into t2 values insert into t2 values
(1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'), (1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
--source include/have_debug.inc --source include/have_debug.inc
--source include/have_debug_sync.inc --source include/have_debug_sync.inc
--source include/have_sequence.inc --source include/have_sequence.inc
--source include/no_valgrind_without_big.inc
CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL, CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL,
f3 CHAR(200), f4 CHAR(200), f3 CHAR(200), f4 CHAR(200),
......
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/no_valgrind_without_big.inc
call mtr.add_suppression("Table `test`.`t2` should have 2 indexes but the tablespace has 1 indexes"); call mtr.add_suppression("Table `test`.`t2` should have 2 indexes but the tablespace has 1 indexes");
call mtr.add_suppression("Index for table 't2' is corrupt; try to repair it"); call mtr.add_suppression("Index for table 't2' is corrupt; try to repair it");
......
-- source include/have_innodb.inc -- source include/have_innodb.inc
-- source include/no_valgrind_without_big.inc
let $MYSQLD_DATADIR=`select @@datadir`; let $MYSQLD_DATADIR=`select @@datadir`;
CREATE TABLE t1(f1 int auto_increment primary key, CREATE TABLE t1(f1 int auto_increment primary key,
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
# recovery process with such numbers. # recovery process with such numbers.
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/have_debug.inc --source include/have_debug.inc
--source include/no_valgrind_without_big.inc
--let MYSQLD_DATADIR= `select @@datadir` --let MYSQLD_DATADIR= `select @@datadir`
let $MYSQLD_BOOTSTRAP_CMD= $MYSQLD_BOOTSTRAP_CMD --datadir=$MYSQLD_DATADIR --tmpdir=$MYSQL_TMP_DIR --debug-dbug=+d,innodb_small_log_block_no_limit; let $MYSQLD_BOOTSTRAP_CMD= $MYSQLD_BOOTSTRAP_CMD --datadir=$MYSQLD_DATADIR --tmpdir=$MYSQL_TMP_DIR --debug-dbug=+d,innodb_small_log_block_no_limit;
......
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/have_debug.inc --source include/have_debug.inc
--source include/not_embedded.inc --source include/not_embedded.inc
--source include/no_valgrind_without_big.inc
call mtr.add_suppression("InnoDB: Expected tablespace id .*"); call mtr.add_suppression("InnoDB: Expected tablespace id .*");
--echo # Mariabackup --backup with page0 INIT_PAGE redo record --echo # Mariabackup --backup with page0 INIT_PAGE redo record
......
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/have_debug.inc --source include/have_debug.inc
--source include/have_sequence.inc --source include/have_sequence.inc
--source include/no_valgrind_without_big.inc
CREATE TABLE t(i INT) ENGINE=INNODB; CREATE TABLE t(i INT) ENGINE=INNODB;
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
--source include/have_debug_sync.inc --source include/have_debug_sync.inc
--source include/have_debug.inc --source include/have_debug.inc
--source include/have_sequence.inc --source include/have_sequence.inc
--source include/no_valgrind_without_big.inc
CREATE TABLE t ENGINE=INNODB SELECT seq%10 i FROM seq_0_to_204796; CREATE TABLE t ENGINE=INNODB SELECT seq%10 i FROM seq_0_to_204796;
......
reset master;
install plugin test_sql_service soname 'test_sql_service'; install plugin test_sql_service soname 'test_sql_service';
show status like 'test_sql_service_passed'; show status like 'test_sql_service_passed';
Variable_name Value Variable_name Value
......
--source include/not_embedded.inc --source include/not_embedded.inc
--source include/have_log_bin.inc --source include/have_log_bin.inc
reset master; # clear binlogs
if (!$TEST_SQL_SERVICE_SO) { if (!$TEST_SQL_SERVICE_SO) {
skip No TEST_SQL_SERVICE plugin; skip No TEST_SQL_SERVICE plugin;
} }
......
...@@ -150,7 +150,7 @@ partition by system_time limit 1; ...@@ -150,7 +150,7 @@ partition by system_time limit 1;
alter table t1 change x big int; alter table t1 change x big int;
create or replace table t1 (i int) engine myisam partition by hash(i) partitions 2; create or replace table t1 (i int) engine myisam partition by hash(i) partitions 2;
alter table t1 add partition (partition px history); alter table t1 add partition (partition px history);
ERROR HY000: Wrong partition type `SYSTEM_TIME` for partitioning by `HASH` ERROR HY000: Wrong partitioning type, expected type: `SYSTEM_TIME`
## INSERT, UPDATE, DELETE ## INSERT, UPDATE, DELETE
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
...@@ -1105,7 +1105,7 @@ drop table t1; ...@@ -1105,7 +1105,7 @@ drop table t1;
create table t1 (a int) with system versioning partition by system_time create table t1 (a int) with system versioning partition by system_time
(partition p1 history, partition pn current); (partition p1 history, partition pn current);
alter table t1 add partition (partition p2); alter table t1 add partition (partition p2);
ERROR HY000: Wrong partition type `HASH` for partitioning by `SYSTEM_TIME` ERROR HY000: Wrong partitioning type, expected type: `SYSTEM_TIME`
# MDEV-17891 Assertion failures in select_insert::abort_result_set and # MDEV-17891 Assertion failures in select_insert::abort_result_set and
# mysql_load upon attempt to replace into a full table # mysql_load upon attempt to replace into a full table
set @@max_heap_table_size= 1024*1024; set @@max_heap_table_size= 1024*1024;
......
...@@ -429,13 +429,8 @@ class partition_info : public DDL_LOG_STATE, public Sql_alloc ...@@ -429,13 +429,8 @@ class partition_info : public DDL_LOG_STATE, public Sql_alloc
return NULL; return NULL;
} }
uint next_part_no(uint new_parts) const; uint next_part_no(uint new_parts) const;
int gen_part_type(THD *thd, String *str) const;
}; };
void part_type_error(THD *thd, partition_info *work_part_info,
const char *part_type, partition_info *tab_part_info);
uint32 get_next_partition_id_range(struct st_partition_iter* part_iter); uint32 get_next_partition_id_range(struct st_partition_iter* part_iter);
bool check_partition_dirs(partition_info *part_info); bool check_partition_dirs(partition_info *part_info);
......
...@@ -9773,9 +9773,9 @@ ER_UNUSED_23 ...@@ -9773,9 +9773,9 @@ ER_UNUSED_23
spa "Nunca debería vd de ver esto" spa "Nunca debería vd de ver esto"
ER_PARTITION_WRONG_TYPE ER_PARTITION_WRONG_TYPE
chi "错误的分区类型,预期类型:%`s for partitioning by %`s" chi "错误的分区类型,预期类型:%`s"
eng "Wrong partition type %`s for partitioning by %`s" eng "Wrong partitioning type, expected type: %`s"
spa "Tipo de partición equivocada, tipo esperado: %`s for partitioning by %`s" spa "Tipo de partición equivocada, tipo esperado: %`s"
WARN_VERS_PART_FULL WARN_VERS_PART_FULL
chi "版本化表%`s.%`s:partition%`s已满,添加更多历史分区(out of %s)" chi "版本化表%`s.%`s:partition%`s已满,添加更多历史分区(out of %s)"
......
...@@ -9761,7 +9761,7 @@ bool LEX::part_values_current(THD *thd) ...@@ -9761,7 +9761,7 @@ bool LEX::part_values_current(THD *thd)
{ {
if (unlikely(part_info->part_type != VERSIONING_PARTITION)) if (unlikely(part_info->part_type != VERSIONING_PARTITION))
{ {
part_type_error(thd, NULL, "CURRENT", part_info); my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME");
return true; return true;
} }
} }
...@@ -9788,7 +9788,7 @@ bool LEX::part_values_history(THD *thd) ...@@ -9788,7 +9788,7 @@ bool LEX::part_values_history(THD *thd)
{ {
if (unlikely(part_info->part_type != VERSIONING_PARTITION)) if (unlikely(part_info->part_type != VERSIONING_PARTITION))
{ {
part_type_error(thd, NULL, "HISTORY", part_info); my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME");
return true; return true;
} }
} }
......
...@@ -2470,7 +2470,7 @@ static int add_partition_values(String *str, partition_info *part_info, ...@@ -2470,7 +2470,7 @@ static int add_partition_values(String *str, partition_info *part_info,
@retval != 0 Failure @retval != 0 Failure
*/ */
static int add_key_with_algorithm(String *str, const partition_info *part_info) static int add_key_with_algorithm(String *str, partition_info *part_info)
{ {
int err= 0; int err= 0;
err+= str->append(STRING_WITH_LEN("KEY ")); err+= str->append(STRING_WITH_LEN("KEY "));
...@@ -2499,78 +2499,6 @@ char *generate_partition_syntax_for_frm(THD *thd, partition_info *part_info, ...@@ -2499,78 +2499,6 @@ char *generate_partition_syntax_for_frm(THD *thd, partition_info *part_info,
return res; return res;
} }
/*
Generate the partition type syntax from the partition data structure.
@return Operation status.
@retval 0 Success
@retval > 0 Failure
@retval -1 Fatal error
*/
int partition_info::gen_part_type(THD *thd, String *str) const
{
int err= 0;
switch (part_type)
{
case RANGE_PARTITION:
err+= str->append(STRING_WITH_LEN("RANGE "));
break;
case LIST_PARTITION:
err+= str->append(STRING_WITH_LEN("LIST "));
break;
case HASH_PARTITION:
if (linear_hash_ind)
err+= str->append(STRING_WITH_LEN("LINEAR "));
if (list_of_part_fields)
{
err+= add_key_with_algorithm(str, this);
err+= add_part_field_list(thd, str, part_field_list);
}
else
err+= str->append(STRING_WITH_LEN("HASH "));
break;
case VERSIONING_PARTITION:
err+= str->append(STRING_WITH_LEN("SYSTEM_TIME "));
break;
default:
DBUG_ASSERT(0);
/* We really shouldn't get here, no use in continuing from here */
my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATAL));
return -1;
}
return err;
}
void part_type_error(THD *thd, partition_info *work_part_info,
const char *part_type,
partition_info *tab_part_info)
{
StringBuffer<256> tab_part_type;
if (tab_part_info->gen_part_type(thd, &tab_part_type) < 0)
return;
tab_part_type.length(tab_part_type.length() - 1);
if (work_part_info)
{
DBUG_ASSERT(!part_type);
StringBuffer<256> work_part_type;
if (work_part_info->gen_part_type(thd, &work_part_type) < 0)
return;
work_part_type.length(work_part_type.length() - 1);
my_error(ER_PARTITION_WRONG_TYPE, MYF(0), work_part_type.c_ptr(),
tab_part_type.c_ptr());
}
else
{
DBUG_ASSERT(part_type);
my_error(ER_PARTITION_WRONG_TYPE, MYF(0), part_type,
tab_part_type.c_ptr());
}
}
/* /*
Generate the partition syntax from the partition data structure. Generate the partition syntax from the partition data structure.
Useful for support of generating defaults, SHOW CREATE TABLES Useful for support of generating defaults, SHOW CREATE TABLES
...@@ -2614,10 +2542,34 @@ char *generate_partition_syntax(THD *thd, partition_info *part_info, ...@@ -2614,10 +2542,34 @@ char *generate_partition_syntax(THD *thd, partition_info *part_info,
DBUG_ENTER("generate_partition_syntax"); DBUG_ENTER("generate_partition_syntax");
err+= str.append(STRING_WITH_LEN(" PARTITION BY ")); err+= str.append(STRING_WITH_LEN(" PARTITION BY "));
int err2= part_info->gen_part_type(thd, &str); switch (part_info->part_type)
if (err2 < 0) {
DBUG_RETURN(NULL); case RANGE_PARTITION:
err+= err2; err+= str.append(STRING_WITH_LEN("RANGE "));
break;
case LIST_PARTITION:
err+= str.append(STRING_WITH_LEN("LIST "));
break;
case HASH_PARTITION:
if (part_info->linear_hash_ind)
err+= str.append(STRING_WITH_LEN("LINEAR "));
if (part_info->list_of_part_fields)
{
err+= add_key_with_algorithm(&str, part_info);
err+= add_part_field_list(thd, &str, part_info->part_field_list);
}
else
err+= str.append(STRING_WITH_LEN("HASH "));
break;
case VERSIONING_PARTITION:
err+= str.append(STRING_WITH_LEN("SYSTEM_TIME "));
break;
default:
DBUG_ASSERT(0);
/* We really shouldn't get here, no use in continuing from here */
my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATAL));
DBUG_RETURN(NULL);
}
if (part_info->part_type == VERSIONING_PARTITION) if (part_info->part_type == VERSIONING_PARTITION)
{ {
Vers_part_info *vers_info= part_info->vers_info; Vers_part_info *vers_info= part_info->vers_info;
...@@ -5117,7 +5069,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, ...@@ -5117,7 +5069,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
else if (thd->work_part_info->part_type == VERSIONING_PARTITION || else if (thd->work_part_info->part_type == VERSIONING_PARTITION ||
tab_part_info->part_type == VERSIONING_PARTITION) tab_part_info->part_type == VERSIONING_PARTITION)
{ {
part_type_error(thd, thd->work_part_info, NULL, tab_part_info); my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME");
} }
else else
{ {
......
...@@ -2391,9 +2391,8 @@ dberr_t btr_cur_search_to_nth_level(dict_index_t *index, ulint level, ...@@ -2391,9 +2391,8 @@ dberr_t btr_cur_search_to_nth_level(dict_index_t *index, ulint level,
page hash index, while holding search latch. */ page hash index, while holding search latch. */
if (!btr_search_enabled) { if (!btr_search_enabled) {
} else if (tuple->info_bits & REC_INFO_MIN_REC_FLAG) { } else if (tuple->info_bits & REC_INFO_MIN_REC_FLAG) {
ut_ad(index->is_instant());
/* This may be a search tuple for /* This may be a search tuple for
btr_pcur_restore_position(). */ btr_pcur_t::restore_position(). */
ut_ad(tuple->is_metadata() ut_ad(tuple->is_metadata()
|| (tuple->is_metadata(tuple->info_bits || (tuple->is_metadata(tuple->info_bits
^ REC_STATUS_INSTANT))); ^ REC_STATUS_INSTANT)));
......
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