mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge 10.10 into 10.11
This commit is contained in:
commit
7343a2ceb6
8 changed files with 71 additions and 11 deletions
|
@ -214,6 +214,21 @@ WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
|||
TABLE_ROWS AVG_ROW_LENGTH>0
|
||||
3 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-29975 InnoDB fails to release savepoint during bulk insert
|
||||
#
|
||||
CREATE TABLE t (c INT KEY) ENGINE=InnoDB;
|
||||
begin;
|
||||
INSERT INTO t VALUES (0,0);
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
SAVEPOINT a;
|
||||
INSERT INTO t VALUES (0),(0);
|
||||
ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
|
||||
SAVEPOINT a;
|
||||
commit;
|
||||
SELECT * FROM t;
|
||||
c
|
||||
DROP TABLE t;
|
||||
# End of 10.6 tests
|
||||
#
|
||||
# MDEV-26947 UNIQUE column checks fail in InnoDB resulting
|
||||
|
|
|
@ -2,6 +2,11 @@ SET GLOBAL innodb_fast_shutdown=0;
|
|||
# restart: --innodb_undo_tablespaces=2
|
||||
SET GLOBAL innodb_undo_log_truncate = 0;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
|
||||
=== information_schema.innodb_sys_tablespaces and innodb_sys_datafiles ===
|
||||
Space_Name Page_Size Zip_Size Path
|
||||
innodb_undo001 DEFAULT DEFAULT MYSQLD_DATADIR//undo001
|
||||
innodb_undo002 DEFAULT DEFAULT MYSQLD_DATADIR//undo002
|
||||
innodb_temporary DEFAULT DEFAULT MYSQLD_DATADIR/ibtmp1
|
||||
create table t1(keyc int primary key, c char(100)) engine = innodb;
|
||||
create table t2(keyc int primary key, c char(100)) engine = innodb;
|
||||
connect con1,localhost,root,,;
|
||||
|
|
|
@ -235,6 +235,20 @@ SELECT TABLE_ROWS, AVG_ROW_LENGTH>0 FROM INFORMATION_SCHEMA.TABLES
|
|||
WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-29975 InnoDB fails to release savepoint during bulk insert
|
||||
--echo #
|
||||
CREATE TABLE t (c INT KEY) ENGINE=InnoDB;
|
||||
begin;
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT INTO t VALUES (0,0);
|
||||
SAVEPOINT a;
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t VALUES (0),(0);
|
||||
SAVEPOINT a;
|
||||
commit;
|
||||
SELECT * FROM t;
|
||||
DROP TABLE t;
|
||||
--echo # End of 10.6 tests
|
||||
|
||||
--echo #
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
--innodb-buffer-pool-size=24M
|
||||
--innodb-immediate-scrub-data-uncompressed=ON
|
||||
--loose-innodb-sys-tablespaces
|
||||
|
|
|
@ -19,6 +19,9 @@ let $restart_parameters="--innodb_undo_tablespaces=2";
|
|||
SET GLOBAL innodb_undo_log_truncate = 0;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
|
||||
|
||||
LET $MYSQLD_DATADIR = `select @@datadir`;
|
||||
LET $INNODB_PAGE_SIZE = `select @@innodb_page_size`;
|
||||
--source suite/innodb/include/show_i_s_tablespaces.inc
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# Perform DML action using multiple clients and multiple undo tablespace.
|
||||
|
|
|
@ -4455,6 +4455,25 @@ innobase_commit_ordered(
|
|||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/** Mark the end of a statement.
|
||||
@param trx transaction
|
||||
@return whether an error occurred */
|
||||
static bool end_of_statement(trx_t *trx)
|
||||
{
|
||||
trx_mark_sql_stat_end(trx);
|
||||
if (UNIV_LIKELY(trx->error_state == DB_SUCCESS))
|
||||
return false;
|
||||
|
||||
trx_savept_t savept;
|
||||
savept.least_undo_no= 0;
|
||||
trx->rollback(&savept);
|
||||
/* MariaDB will roll back the entire transaction. */
|
||||
trx->bulk_insert= false;
|
||||
trx->last_sql_stat_start.least_undo_no= 0;
|
||||
trx->savepoints_discard();
|
||||
return true;
|
||||
}
|
||||
|
||||
/*****************************************************************//**
|
||||
Commits a transaction in an InnoDB database or marks an SQL statement
|
||||
ended.
|
||||
|
@ -4531,10 +4550,7 @@ innobase_commit(
|
|||
/* Store the current undo_no of the transaction so that we
|
||||
know where to roll back if we have to roll back the next
|
||||
SQL statement */
|
||||
|
||||
trx_mark_sql_stat_end(trx);
|
||||
if (UNIV_UNLIKELY(trx->error_state != DB_SUCCESS)) {
|
||||
trx_rollback_for_mysql(trx);
|
||||
if (UNIV_UNLIKELY(end_of_statement(trx))) {
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
|
@ -16954,10 +16970,7 @@ innobase_xa_prepare(
|
|||
/* Store the current undo_no of the transaction so that we
|
||||
know where to roll back if we have to roll back the next
|
||||
SQL statement */
|
||||
|
||||
trx_mark_sql_stat_end(trx);
|
||||
if (UNIV_UNLIKELY(trx->error_state != DB_SUCCESS)) {
|
||||
trx_rollback_for_mysql(trx);
|
||||
if (UNIV_UNLIKELY(end_of_statement(trx))) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6142,8 +6142,13 @@ static int i_s_sys_tablespaces_fill(THD *thd, const fil_space_t &s, TABLE *t)
|
|||
OK(f->store(name.data(), name.size(), system_charset_info));
|
||||
f->set_notnull();
|
||||
}
|
||||
else
|
||||
f->set_notnull();
|
||||
else if (srv_is_undo_tablespace(s.id))
|
||||
{
|
||||
char name[15];
|
||||
snprintf(name, sizeof name, "innodb_undo%03u",
|
||||
(s.id - srv_undo_space_id_start + 1));
|
||||
OK(f->store(name, strlen(name), system_charset_info));
|
||||
} else f->set_notnull();
|
||||
}
|
||||
|
||||
fields[SYS_TABLESPACES_NAME]->set_null();
|
||||
|
|
|
@ -557,9 +557,13 @@ trx_release_savepoint_for_mysql(
|
|||
|
||||
if (savep != NULL) {
|
||||
trx_roll_savepoint_free(trx, savep);
|
||||
return DB_SUCCESS;
|
||||
} else if (trx->last_sql_stat_start.least_undo_no == 0) {
|
||||
/* Bulk insert could have discarded savepoints */
|
||||
return DB_SUCCESS;
|
||||
}
|
||||
|
||||
return(savep != NULL ? DB_SUCCESS : DB_NO_SAVEPOINT);
|
||||
return DB_NO_SAVEPOINT;
|
||||
}
|
||||
|
||||
/*******************************************************************//**
|
||||
|
|
Loading…
Add table
Reference in a new issue