Skip to content

Commit dba8906

Browse files
committed
Merging mysql-8.0 to mysql-trunk
2 parents 6e0f3b6 + 61eaaa5 commit dba8906

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#
2+
# Bug #30288139 MARK_NOT_PARTIALLY_UPDATABLE ASSERTION FAILURE:
3+
# BUF0BUF.CC:4189:PAGE_SIZE.EQUALS
4+
#
5+
CREATE TABLE tb
6+
(id INT PRIMARY KEY,
7+
t1 LONGBLOB,
8+
t2 LONGBLOB,
9+
v1 CHAR(2) AS (SUBSTR(t1,2,2)) VIRTUAL,
10+
INDEX(id,v1)) ROW_FORMAT=COMPRESSED;
11+
INSERT INTO tb (id,t1,t2) VALUES (1,REPEAT("x",100000),REPEAT("y",100000));
12+
UPDATE tb SET t1=REPEAT("y",100000),t2=REPEAT("x",100000) WHERE id=1;
13+
UPDATE tb SET t1="a" WHERE id=1;
14+
DROP TABLE tb;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--echo #
2+
--echo # Bug #30288139 MARK_NOT_PARTIALLY_UPDATABLE ASSERTION FAILURE:
3+
--echo # BUF0BUF.CC:4189:PAGE_SIZE.EQUALS
4+
--echo #
5+
6+
CREATE TABLE tb
7+
(id INT PRIMARY KEY,
8+
t1 LONGBLOB,
9+
t2 LONGBLOB,
10+
v1 CHAR(2) AS (SUBSTR(t1,2,2)) VIRTUAL,
11+
INDEX(id,v1)) ROW_FORMAT=COMPRESSED;
12+
13+
INSERT INTO tb (id,t1,t2) VALUES (1,REPEAT("x",100000),REPEAT("y",100000));
14+
UPDATE tb SET t1=REPEAT("y",100000),t2=REPEAT("x",100000) WHERE id=1;
15+
UPDATE tb SET t1="a" WHERE id=1;
16+
DROP TABLE tb;

storage/innobase/include/row0upd.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,20 @@ inline std::ostream &operator<<(std::ostream &out, const Lob_diff &obj) {
474474

475475
/* Update vector field */
476476
struct upd_field_t {
477+
upd_field_t()
478+
: field_no(0),
479+
orig_len(0),
480+
exp(nullptr),
481+
old_v_val(nullptr),
482+
mysql_field(nullptr),
483+
ext_in_old(false),
484+
lob_diffs(nullptr),
485+
lob_first_page_no(FIL_NULL),
486+
lob_version(0),
487+
last_trx_id(0),
488+
last_undo_no(0),
489+
heap(nullptr) {}
490+
477491
unsigned field_no : 16; /*!< field number in an index, usually
478492
the clustered index, but in updating
479493
a secondary index record in btr0cur.cc

storage/innobase/lob/lob0lob.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,13 +1100,11 @@ ulint btr_push_update_extern_fields(dtuple_t *tuple, const upd_t *update,
11001100
n = upd_get_n_fields(update);
11011101

11021102
for (; n--; uf++) {
1103-
if (dfield_is_ext(&uf->new_val)) {
1104-
dfield_t *field = dtuple_get_nth_field(tuple, uf->field_no);
1103+
dfield_t *field = dtuple_get_nth_field(tuple, uf->field_no);
1104+
uf->ext_in_old = dfield_is_ext(field);
11051105

1106-
if (dfield_is_ext(field)) {
1107-
uf->ext_in_old = true;
1108-
} else {
1109-
uf->ext_in_old = false;
1106+
if (dfield_is_ext(&uf->new_val)) {
1107+
if (!dfield_is_ext(field)) {
11101108
dfield_set_ext(field);
11111109
n_pushed++;
11121110
}

0 commit comments

Comments
 (0)