3382 Marko Mäkelä 2010-12-13
Bug#58015 Assert in row_sel_field_store_in_mysql_format when running ICP test
row_sel_field_store_in_mysql_format_func(): Replace the parameter
dict_field_t* field with dict_index_t* index, ulint field_no. Relax
the debug assertion so that a column prefix can be returned during
index condition pushdown (field_no == templ->icp_rec_field_no).
Add a test case to mysql-test/include/icp_tests.inc and adjust the
results for MyISAM and InnoDB.
modified:
mysql-test/include/icp_tests.inc
mysql-test/r/innodb_icp.result
mysql-test/r/innodb_icp_all.result
mysql-test/r/innodb_icp_none.result
mysql-test/r/myisam_icp.result
mysql-test/r/myisam_icp_all.result
mysql-test/r/myisam_icp_none.result
storage/innobase/row/row0sel.c
3381 Vasil Dimov 2010-12-13
Increment InnoDB version from 1.2.0 to 1.2.1
InnoDB 1.2.0 was not released to public, but we want to be
in line with MySQL version which is now at 5.6.1.
Suggested by: Calvin Sun
modified:
storage/innobase/include/univ.i
=== modified file 'mysql-test/include/icp_tests.inc'
--- a/mysql-test/include/icp_tests.inc revid:vasil.dimov@stripped
+++ b/mysql-test/include/icp_tests.inc revid:marko.makela@stripped
@@ -643,3 +643,13 @@ eval EXPLAIN $query;
eval $query;
DROP TABLE t1,t2,t3;
+
+--echo #
+--echo # Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+--echo # when running innodb_mrr_icp test"
+--echo #
+
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+drop table t1;
=== modified file 'mysql-test/r/innodb_icp.result'
--- a/mysql-test/r/innodb_icp.result revid:vasil.dimov@stripped1841-8rtst40im6s15lhz
+++ b/mysql-test/r/innodb_icp.result revid:marko.makela@strippedv31liy
@@ -589,5 +589,14 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set default_storage_engine= @save_storage_engine;
set optimizer_switch=default;
=== modified file 'mysql-test/r/innodb_icp_all.result'
--- a/mysql-test/r/innodb_icp_all.result revid:vasil.dimov@stripped13131841-8rtst40im6s15lhz
+++ b/mysql-test/r/innodb_icp_all.result revid:marko.makela@stripped8915q3ffv31liy
@@ -589,5 +589,14 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set default_storage_engine= @save_storage_engine;
set optimizer_switch=default;
=== modified file 'mysql-test/r/innodb_icp_none.result'
--- a/mysql-test/r/innodb_icp_none.result revid:vasil.dimov@oracle.com-20101213131841-8rtst40im6s15lhz
+++ b/mysql-test/r/innodb_icp_none.result revid:marko.makela@stripped13152245-7i8915q3ffv31liy
@@ -588,5 +588,14 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set default_storage_engine= @save_storage_engine;
set optimizer_switch=default;
=== modified file 'mysql-test/r/myisam_icp.result'
--- a/mysql-test/r/myisam_icp.result revid:vasil.dimov@oracle.com-20101213131841-8rtst40im6s15lhz
+++ b/mysql-test/r/myisam_icp.result revid:marko.makela@stripped2245-7i8915q3ffv31liy
@@ -587,4 +587,13 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set optimizer_switch=default;
=== modified file 'mysql-test/r/myisam_icp_all.result'
--- a/mysql-test/r/myisam_icp_all.result revid:vasil.dimov@stripped
+++ b/mysql-test/r/myisam_icp_all.result revid:marko.makela@oracle.com-20101213152245-7i8915q3ffv31liy
@@ -587,4 +587,13 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set optimizer_switch=default;
=== modified file 'mysql-test/r/myisam_icp_none.result'
--- a/mysql-test/r/myisam_icp_none.result revid:vasil.dimov@stripped15lhz
+++ b/mysql-test/r/myisam_icp_none.result revid:marko.makela@stripped
@@ -586,4 +586,13 @@ FROM t3));
i1
2
DROP TABLE t1,t2,t3;
+#
+# Bug#58015 "Assert in row_sel_field_store_in_mysql_format
+# when running innodb_mrr_icp test"
+#
+create table t1 (a char(2) charset utf8,b double, primary key (a(1)),key (b));
+insert into t1 values ('',1);
+select 1 from t1 where b <= 1 and a <> '';
+1
+drop table t1;
set optimizer_switch=default;
=== modified file 'storage/innobase/row/row0sel.c'
--- a/storage/innobase/row/row0sel.c revid:vasil.dimov@strippedt40im6s15lhz
+++ b/storage/innobase/row/row0sel.c revid:marko.makela@stripped
@@ -2528,11 +2528,11 @@ row_sel_store_row_id_to_prebuilt(
#ifdef UNIV_DEBUG
/** Convert a non-SQL-NULL field from Innobase format to MySQL format. */
-# define row_sel_field_store_in_mysql_format(dest,templ,field,src,len) \
- row_sel_field_store_in_mysql_format_func(dest,templ,field,src,len)
+# define row_sel_field_store_in_mysql_format(dest,templ,idx,field,src,len) \
+ row_sel_field_store_in_mysql_format_func(dest,templ,idx,field,src,len)
#else /* UNIV_DEBUG */
/** Convert a non-SQL-NULL field from Innobase format to MySQL format. */
-# define row_sel_field_store_in_mysql_format(dest,templ,field,src,len) \
+# define row_sel_field_store_in_mysql_format(dest,templ,idx,field,src,len) \
row_sel_field_store_in_mysql_format_func(dest,templ,src,len)
#endif /* UNIV_DEBUG */
@@ -2555,13 +2555,21 @@ row_sel_field_store_in_mysql_format_func
type, is_unsigned, mysql_col_len,
mbminlen, mbmaxlen */
#ifdef UNIV_DEBUG
- const dict_field_t* field,
- /*!< in: InnoDB index field */
+ const dict_index_t* index,
+ /*!< in: InnoDB index */
+ ulint field_no,
+ /*!< in: templ->rec_field_no or
+ templ->clust_rec_field_no or
+ templ->icp_rec_field_no */
#endif /* UNIV_DEBUG */
const byte* data, /*!< in: data to store */
ulint len) /*!< in: length of the data */
{
- byte* ptr;
+ byte* ptr;
+#ifdef UNIV_DEBUG
+ const dict_field_t* field
+ = dict_index_get_nth_field(index, field_no);
+#endif /* UNIV_DEBUG */
ut_ad(len != UNIV_SQL_NULL);
UNIV_MEM_ASSERT_RW(data, len);
@@ -2660,7 +2668,10 @@ row_sel_field_store_in_mysql_format_func
containing UTF-8 ENUM columns due to Bug #9526. */
ut_ad(!templ->mbmaxlen
|| !(templ->mysql_col_len % templ->mbmaxlen));
- ut_ad(len * templ->mbmaxlen >= templ->mysql_col_len);
+ ut_ad(len * templ->mbmaxlen >= templ->mysql_col_len
+ || (field_no == templ->icp_rec_field_no
+ && field->prefix_len > 0));
+ ut_ad(!(field->prefix_len % templ->mbmaxlen));
if (templ->mbminlen == 1 && templ->mbmaxlen != 1) {
/* Pad with spaces. This undoes the stripping
@@ -2782,8 +2793,7 @@ row_sel_store_mysql_field_func(
row_sel_field_store_in_mysql_format(
mysql_rec + templ->mysql_col_offset,
- templ, dict_index_get_nth_field(index, field_no),
- data, len);
+ templ, index, field_no, data, len);
if (heap != prebuilt->blob_heap) {
mem_heap_free(heap);
@@ -2832,8 +2842,7 @@ row_sel_store_mysql_field_func(
row_sel_field_store_in_mysql_format(
mysql_rec + templ->mysql_col_offset,
- templ, dict_index_get_nth_field(index, field_no),
- data, len);
+ templ, index, field_no, data, len);
}
ut_ad(len != UNIV_SQL_NULL);
Attachment: [text/bzr-bundle] bzr/marko.makela@oracle.com-20101213152245-7i8915q3ffv31liy.bundle
| Thread |
|---|
| • bzr push into mysql-trunk-innodb branch (marko.makela:3381 to 3382) Bug#58015 | marko.makela | 13 Dec |