Skip to content

Commit 09876f8

Browse files
author
kevin.lewis@oracle.com
committed
Merge from mysql-5.5
2 parents 7ff336f + 1f844fa commit 09876f8

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

mysql-test/suite/innodb/r/innodb-index.result

+1
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,7 @@ v16 VARCHAR(500), v17 VARCHAR(500), v18 VARCHAR(500)
976976
CREATE INDEX idx1 ON t1(a,v1);
977977
INSERT INTO t1 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r);
978978
UPDATE t1 SET a=1000;
979+
DELETE FROM t1;
979980
DROP TABLE t1;
980981
set global innodb_file_per_table=0;
981982
set global innodb_file_format=Antelope;

mysql-test/suite/innodb/t/innodb-index.test

+3
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,9 @@ CREATE TABLE t1(a INT,
473473
CREATE INDEX idx1 ON t1(a,v1);
474474
INSERT INTO t1 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r);
475475
UPDATE t1 SET a=1000;
476+
DELETE FROM t1;
477+
# Let the purge thread clean up this file.
478+
-- sleep 10
476479
DROP TABLE t1;
477480

478481
eval set global innodb_file_per_table=$per_table;

storage/innobase/row/row0row.c

+13-8
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,27 @@ row_build_index_entry(
148148
continue;
149149
}
150150
} else if (dfield_is_ext(dfield)) {
151-
/* This table should be in Antelope format
152-
(ROW_FORMAT=REDUNDANT or ROW_FORMAT=COMPACT).
153-
In that format, the maximum column prefix
151+
/* This table is either in Antelope format
152+
(ROW_FORMAT=REDUNDANT or ROW_FORMAT=COMPACT)
153+
or a purge record where the ordered part of
154+
the field is not external.
155+
In Antelope, the maximum column prefix
154156
index length is 767 bytes, and the clustered
155157
index record contains a 768-byte prefix of
156158
each off-page column. */
157159
ut_a(len >= BTR_EXTERN_FIELD_REF_SIZE);
158160
len -= BTR_EXTERN_FIELD_REF_SIZE;
161+
dfield_set_len(dfield, len);
159162
}
160163

161164
/* If a column prefix index, take only the prefix. */
162-
ut_ad(ind_field->prefix_len);
163-
len = dtype_get_at_most_n_mbchars(
164-
col->prtype, col->mbminmaxlen,
165-
ind_field->prefix_len, len, dfield_get_data(dfield));
166-
dfield_set_len(dfield, len);
165+
if (ind_field->prefix_len) {
166+
len = dtype_get_at_most_n_mbchars(
167+
col->prtype, col->mbminmaxlen,
168+
ind_field->prefix_len, len,
169+
dfield_get_data(dfield));
170+
dfield_set_len(dfield, len);
171+
}
167172
}
168173

169174
ut_ad(dtuple_check_typed(entry));

0 commit comments

Comments
 (0)