Commit 3dac4e9f authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-18338 Merge new release of InnoDB 5.7.25 to 10.2

parents 9a7281a7 d283f80e
...@@ -7,9 +7,18 @@ CREATE TABLE t1(fld1 INT NOT NULL PRIMARY KEY) engine=innodb; ...@@ -7,9 +7,18 @@ CREATE TABLE t1(fld1 INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2(fld1 INT NOT NULL, fld2 INT NOT NULL, CREATE TABLE t2(fld1 INT NOT NULL, fld2 INT NOT NULL,
fld3 INT AS (fld2) VIRTUAL, KEY(fld1), fld3 INT AS (fld2) VIRTUAL, KEY(fld1),
FOREIGN KEY(fld1) REFERENCES t1(fld1) ON UPDATE CASCADE) engine=innodb; FOREIGN KEY(fld1) REFERENCES t1(fld1) ON UPDATE CASCADE) engine=innodb;
CREATE TABLE u1(a INT, KEY(a)) ENGINE=InnoDB;
CREATE TABLE u2(b INT, vb INT GENERATED ALWAYS AS(b) VIRTUAL, KEY(vb),
FOREIGN KEY(b) REFERENCES u1(a)ON DELETE CASCADE)ENGINE=InnoDB;
INSERT INTO u1 SET a=1;
INSERT INTO u2 SET b=1;
INSERT INTO t1(fld1) VALUES(1); INSERT INTO t1(fld1) VALUES(1);
INSERT INTO t2(fld1, fld2) VALUES(1, 2); INSERT INTO t2(fld1, fld2) VALUES(1, 2);
UPDATE t1 SET fld1= 2; UPDATE t1 SET fld1= 2;
DELETE FROM u1;
SELECT * FROM u2;
b vb
DROP TABLE u2,u1;
SELECT fld3, fld1 FROM t2; SELECT fld3, fld1 FROM t2;
fld3 fld1 fld3 fld1
2 2 2 2
......
...@@ -243,3 +243,26 @@ KEY (a(1)) ...@@ -243,3 +243,26 @@ KEY (a(1))
INSERT INTO t1(b) VALUES(REPEAT('b',1000)); INSERT INTO t1(b) VALUES(REPEAT('b',1000));
DELETE FROM t1; DELETE FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #22990029 GCOLS: INCORRECT BEHAVIOR
# AFTER DATA INSERTED WITH IGNORE KEYWORD
#
CREATE TABLE t1(a INT PRIMARY KEY, b INT, vb DATE AS(b) VIRTUAL, KEY(vb))
ENGINE=InnoDB;
INSERT IGNORE INTO t1 (a,b) VALUES(1,20190132);
Warnings:
Warning 1265 Data truncated for column 'vb' at row 1
BEGIN;
DELETE FROM t1;
INSERT INTO t1 (a,b) VALUES(1,20190123);
ERROR 22007: Incorrect date value: '20190132' for column `test`.`t1`.`vb` at row 1
SELECT * FROM t1;
a b vb
ROLLBACK;
SELECT * FROM t1;
a b vb
1 20190132 0000-00-00
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
...@@ -11,10 +11,19 @@ CREATE TABLE t1(fld1 INT NOT NULL PRIMARY KEY) engine=innodb; ...@@ -11,10 +11,19 @@ CREATE TABLE t1(fld1 INT NOT NULL PRIMARY KEY) engine=innodb;
CREATE TABLE t2(fld1 INT NOT NULL, fld2 INT NOT NULL, CREATE TABLE t2(fld1 INT NOT NULL, fld2 INT NOT NULL,
fld3 INT AS (fld2) VIRTUAL, KEY(fld1), fld3 INT AS (fld2) VIRTUAL, KEY(fld1),
FOREIGN KEY(fld1) REFERENCES t1(fld1) ON UPDATE CASCADE) engine=innodb; FOREIGN KEY(fld1) REFERENCES t1(fld1) ON UPDATE CASCADE) engine=innodb;
CREATE TABLE u1(a INT, KEY(a)) ENGINE=InnoDB;
CREATE TABLE u2(b INT, vb INT GENERATED ALWAYS AS(b) VIRTUAL, KEY(vb),
FOREIGN KEY(b) REFERENCES u1(a)ON DELETE CASCADE)ENGINE=InnoDB;
INSERT INTO u1 SET a=1;
INSERT INTO u2 SET b=1;
INSERT INTO t1(fld1) VALUES(1); INSERT INTO t1(fld1) VALUES(1);
INSERT INTO t2(fld1, fld2) VALUES(1, 2); INSERT INTO t2(fld1, fld2) VALUES(1, 2);
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
UPDATE t1 SET fld1= 2; UPDATE t1 SET fld1= 2;
DELETE FROM u1;
SELECT * FROM u2;
DROP TABLE u2,u1;
SELECT fld3, fld1 FROM t2; SELECT fld3, fld1 FROM t2;
alter TABLE t2 ADD INDEX vk(fld3, fld1), ALGORITHM=INPLACE; alter TABLE t2 ADD INDEX vk(fld3, fld1), ALGORITHM=INPLACE;
UPDATE t1 SET fld1=3; UPDATE t1 SET fld1=3;
......
...@@ -263,3 +263,21 @@ CREATE TABLE t1( ...@@ -263,3 +263,21 @@ CREATE TABLE t1(
INSERT INTO t1(b) VALUES(REPEAT('b',1000)); INSERT INTO t1(b) VALUES(REPEAT('b',1000));
DELETE FROM t1; DELETE FROM t1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug #22990029 GCOLS: INCORRECT BEHAVIOR
--echo # AFTER DATA INSERTED WITH IGNORE KEYWORD
--echo #
CREATE TABLE t1(a INT PRIMARY KEY, b INT, vb DATE AS(b) VIRTUAL, KEY(vb))
ENGINE=InnoDB;
INSERT IGNORE INTO t1 (a,b) VALUES(1,20190132);
BEGIN;
DELETE FROM t1;
--error ER_TRUNCATED_WRONG_VALUE
INSERT INTO t1 (a,b) VALUES(1,20190123);
SELECT * FROM t1;
ROLLBACK;
SELECT * FROM t1;
CHECK TABLE t1;
DROP TABLE t1;
...@@ -3074,7 +3074,7 @@ READ_ONLY NO ...@@ -3074,7 +3074,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE 5.7.24 GLOBAL_VALUE 5.7.25
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2018, MariaDB Corporation. Copyright (c) 2018, 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
...@@ -219,6 +219,7 @@ the equal ordering fields. NOTE: we compare the fields as binary strings! ...@@ -219,6 +219,7 @@ the equal ordering fields. NOTE: we compare the fields as binary strings!
@param[in] heap memory heap from which allocated @param[in] heap memory heap from which allocated
@param[in,out] mysql_table NULL, or mysql table object when @param[in,out] mysql_table NULL, or mysql table object when
user thread invokes dml user thread invokes dml
@param[out] error error number in case of failure
@return own: update vector of differing fields, excluding roll ptr and @return own: update vector of differing fields, excluding roll ptr and
trx id */ trx id */
upd_t* upd_t*
...@@ -230,8 +231,9 @@ row_upd_build_difference_binary( ...@@ -230,8 +231,9 @@ row_upd_build_difference_binary(
bool no_sys, bool no_sys,
trx_t* trx, trx_t* trx,
mem_heap_t* heap, mem_heap_t* heap,
TABLE* mysql_table) TABLE* mysql_table,
MY_ATTRIBUTE((nonnull(1,2,3,7), warn_unused_result)); dberr_t* error)
MY_ATTRIBUTE((nonnull(1,2,3,7,9), warn_unused_result));
/***********************************************************//** /***********************************************************//**
Replaces the new column values stored in the update vector to the index entry Replaces the new column values stored in the update vector to the index entry
given. */ given. */
......
...@@ -41,7 +41,7 @@ Created 1/20/1994 Heikki Tuuri ...@@ -41,7 +41,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 5 #define INNODB_VERSION_MAJOR 5
#define INNODB_VERSION_MINOR 7 #define INNODB_VERSION_MINOR 7
#define INNODB_VERSION_BUGFIX 24 #define INNODB_VERSION_BUGFIX 25
/* The following is the InnoDB version as shown in /* The following is the InnoDB version as shown in
SELECT plugin_version FROM information_schema.plugins; SELECT plugin_version FROM information_schema.plugins;
......
...@@ -326,7 +326,7 @@ row_ins_clust_index_entry_by_modify( ...@@ -326,7 +326,7 @@ row_ins_clust_index_entry_by_modify(
{ {
const rec_t* rec; const rec_t* rec;
upd_t* update; upd_t* update;
dberr_t err; dberr_t err = DB_SUCCESS;
btr_cur_t* cursor = btr_pcur_get_btr_cur(pcur); btr_cur_t* cursor = btr_pcur_get_btr_cur(pcur);
TABLE* mysql_table = NULL; TABLE* mysql_table = NULL;
ut_ad(dict_index_is_clust(cursor->index)); ut_ad(dict_index_is_clust(cursor->index));
...@@ -349,7 +349,11 @@ row_ins_clust_index_entry_by_modify( ...@@ -349,7 +349,11 @@ row_ins_clust_index_entry_by_modify(
update = row_upd_build_difference_binary( update = row_upd_build_difference_binary(
cursor->index, entry, rec, NULL, true, cursor->index, entry, rec, NULL, true,
thr_get_trx(thr), heap, mysql_table); thr_get_trx(thr), heap, mysql_table, &err);
if (err != DB_SUCCESS) {
return(err);
}
if (mode != BTR_MODIFY_TREE) { if (mode != BTR_MODIFY_TREE) {
ut_ad((mode & ~BTR_ALREADY_S_LATCHED) == BTR_MODIFY_LEAF); ut_ad((mode & ~BTR_ALREADY_S_LATCHED) == BTR_MODIFY_LEAF);
......
...@@ -2042,7 +2042,10 @@ row_log_table_apply_update( ...@@ -2042,7 +2042,10 @@ row_log_table_apply_update(
row, NULL, index, heap, ROW_BUILD_NORMAL); row, NULL, index, heap, ROW_BUILD_NORMAL);
upd_t* update = row_upd_build_difference_binary( upd_t* update = row_upd_build_difference_binary(
index, entry, btr_pcur_get_rec(&pcur), cur_offsets, index, entry, btr_pcur_get_rec(&pcur), cur_offsets,
false, NULL, heap, dup->table); false, NULL, heap, dup->table, &error);
if (error != DB_SUCCESS) {
goto func_exit;
}
if (!update->n_fields) { if (!update->n_fields) {
/* Nothing to do. */ /* Nothing to do. */
......
...@@ -1036,8 +1036,9 @@ the equal ordering fields. NOTE: we compare the fields as binary strings! ...@@ -1036,8 +1036,9 @@ the equal ordering fields. NOTE: we compare the fields as binary strings!
@param[in] heap memory heap from which allocated @param[in] heap memory heap from which allocated
@param[in] mysql_table NULL, or mysql table object when @param[in] mysql_table NULL, or mysql table object when
user thread invokes dml user thread invokes dml
@param[out] error error number in case of failure
@return own: update vector of differing fields, excluding roll ptr and @return own: update vector of differing fields, excluding roll ptr and
trx id */ trx id,if error is not equal to DB_SUCCESS, return NULL */
upd_t* upd_t*
row_upd_build_difference_binary( row_upd_build_difference_binary(
dict_index_t* index, dict_index_t* index,
...@@ -1047,7 +1048,8 @@ row_upd_build_difference_binary( ...@@ -1047,7 +1048,8 @@ row_upd_build_difference_binary(
bool no_sys, bool no_sys,
trx_t* trx, trx_t* trx,
mem_heap_t* heap, mem_heap_t* heap,
TABLE* mysql_table) TABLE* mysql_table,
dberr_t* error)
{ {
upd_field_t* upd_field; upd_field_t* upd_field;
dfield_t* dfield; dfield_t* dfield;
...@@ -1159,6 +1161,10 @@ row_upd_build_difference_binary( ...@@ -1159,6 +1161,10 @@ row_upd_build_difference_binary(
update->old_vrow, col, index, update->old_vrow, col, index,
&v_heap, heap, NULL, thd, mysql_table, record, &v_heap, heap, NULL, thd, mysql_table, record,
NULL, NULL, NULL); NULL, NULL, NULL);
if (vfield == NULL) {
*error = DB_COMPUTE_VALUE_FAILED;
return(NULL);
}
if (!dfield_data_is_binary_equal( if (!dfield_data_is_binary_equal(
dfield, vfield->len, dfield, vfield->len,
......
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