summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnnamalai Gurusami <annamalai.gurusami@oracle.com>2014-08-05 17:25:57 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2018-05-16 15:03:09 +0530
commit21e02b2c92e83a0c3fea1e97db85aca0feb9261e (patch)
tree34c6a9cbcb6abf192736e41e24790e3dcbc22785
parent6e76b402d46a7454a0ca0fb1482c06b9f612ad03 (diff)
downloadmariadb-git-21e02b2c92e83a0c3fea1e97db85aca0feb9261e.tar.gz
Bug #19077964 ASSERT PAGE_SIZE.EQUALS_TO SPACE_PAGE_SIZE BTR_COPY_BLOB_PREFIX
Problem: The function row_build_index_entry_low() takes a dtuple_t object ('row') and dict_index_t object ('index') as input and returns a new dtuple_t object ('entry') as output. The dtuple_t object 'row' that is given as input might have been constructed from a different dict_index_t object (!= index). So when accessing the externally stored data of the given 'row' we need to make use of the correct index object. Solution: Store the page size information in the associated row_ext_t object. rb#6086 approved by Vasil and Jimmy.
-rw-r--r--mysql-test/suite/innodb/r/alter_page_size.result19
-rw-r--r--mysql-test/suite/innodb/t/alter_page_size.test36
2 files changed, 55 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/r/alter_page_size.result b/mysql-test/suite/innodb/r/alter_page_size.result
new file mode 100644
index 00000000000..656369e9538
--- /dev/null
+++ b/mysql-test/suite/innodb/r/alter_page_size.result
@@ -0,0 +1,19 @@
+#
+# Bug #19077964 ASSERT PAGE_SIZE.EQUALS_TO SPACE_PAGE_SIZE
+# BTR_COPY_BLOB_PREFIX
+#
+set global innodb_file_format=Barracuda;
+create table t1 (f1 int primary key, f3 linestring not null,
+spatial key(f3)) engine=innodb row_format=compressed key_block_size=1;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `f1` int(11) NOT NULL,
+ `f3` linestring NOT NULL,
+ PRIMARY KEY (`f1`),
+ SPATIAL KEY `f3` (`f3`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1
+insert into t1 values (1, linefromtext(concat('linestring', '( 0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7, 8 8, 9 9, 10 10, 11 11, 12 12, 13 13, 14 14, 15 15, 16 16, 17 17, 18 18, 19 19, 20 20, 21 21, 22 22, 23 23, 24 24, 25 25, 26 26, 27 27, 28 28, 29 29, 30 30, 31 31, 32 32, 33 33, 34 34, 35 35, 36 36, 37 37, 38 38, 39 39, 40 40, 41 41, 42 42, 43 43, 44 44, 45 45, 46 46, 47 47, 48 48, 49 49, 50 50, 51 51, 52 52, 53 53, 54 54, 55 55, 56 56, 57 57, 58 58, 59 59, 60 60, 61 61, 62 62, 63 63, 64 64, 65 65, 66 66, 67 67, 68 68, 69 69, 70 70, 71 71, 72 72, 73 73, 74 74, 75 75, 76 76, 77 77, 78 78, 79 79, 9999 9999)')));;
+alter table t1 row_format=dynamic, key_block_size=0, algorithm=inplace;
+drop table t1;
+set global innodb_file_format=default;
diff --git a/mysql-test/suite/innodb/t/alter_page_size.test b/mysql-test/suite/innodb/t/alter_page_size.test
new file mode 100644
index 00000000000..6f2359ee3a3
--- /dev/null
+++ b/mysql-test/suite/innodb/t/alter_page_size.test
@@ -0,0 +1,36 @@
+
+--source include/have_innodb.inc
+
+--echo #
+--echo # Bug #19077964 ASSERT PAGE_SIZE.EQUALS_TO SPACE_PAGE_SIZE
+--echo # BTR_COPY_BLOB_PREFIX
+--echo #
+
+set global innodb_file_format=Barracuda;
+
+create table t1 (f1 int primary key, f3 linestring not null,
+ spatial key(f3)) engine=innodb row_format=compressed key_block_size=1;
+show create table t1;
+
+let $points = 80;
+let $x = 0;
+let $y = 0;
+let $linestr = (;
+
+while ($points)
+{
+ let $linestr = $linestr $x $y,;
+ dec $points;
+ inc $x;
+ inc $y;
+}
+
+let $linestr = $linestr 9999 9999);
+
+--eval insert into t1 values (1, linefromtext(concat('linestring', '$linestr')));
+
+alter table t1 row_format=dynamic, key_block_size=0, algorithm=inplace;
+
+drop table t1;
+
+set global innodb_file_format=default;