Commit 55b4a2ab authored by Alexander Nozdrin's avatar Alexander Nozdrin

Auto-merge from mysql-next-mr-alik.

parents dadf8207 52beed00
...@@ -548,6 +548,36 @@ SELECT * FROM t1 WHERE s2 = s3; ...@@ -548,6 +548,36 @@ SELECT * FROM t1 WHERE s2 = s3;
s1 s2 s3 s1 s2 s3
a A A a A A
DROP TABLE t1; DROP TABLE t1;
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci);
insert into t1 values ('A'),('a'),('B'),('b'),('C'),('c');
select * from t1 where a > 'B' collate latin1_bin;
a
a
b
C
c
select * from t1 where a <> 'B' collate latin1_bin;
a
A
a
b
C
c
create index i on t1 (a);
select * from t1 where a > 'B' collate latin1_bin;
a
a
b
C
c
select * from t1 where a <> 'B' collate latin1_bin;
a
A
a
b
C
c
drop table t1;
SET NAMES latin1; SET NAMES latin1;
CREATE TABLE t1 CREATE TABLE t1
(s1 char(10) COLLATE latin1_german1_ci, (s1 char(10) COLLATE latin1_german1_ci,
......
drop table if exists t1; drop table if exists t1;
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci)
partition by range columns(a)
( partition p0 values less than ('a'),
partition p1 values less than ('b'),
partition p2 values less than ('c'),
partition p3 values less than ('d'));
insert into t1 values ('A'),('a'),('B'),('b'),('C'),('c');
select * from t1 where a > 'B' collate latin1_bin;
a
a
b
C
c
select * from t1 where a <> 'B' collate latin1_bin;
a
A
a
b
C
c
alter table t1 remove partitioning;
select * from t1 where a > 'B' collate latin1_bin;
a
a
b
C
c
select * from t1 where a <> 'B' collate latin1_bin;
a
A
a
b
C
c
drop table t1;
create table t1 (a varchar(2) character set latin1,
b varchar(2) character set latin1)
partition by list columns(a,b)
(partition p0 values in (('a','a')));
insert into t1 values ('A','A');
select * from t1 where b <> 'a' collate latin1_bin AND
a = 'A' collate latin1_bin;
a b
A A
alter table t1 remove partitioning;
select * from t1 where b <> 'a' collate latin1_bin AND
a = 'A' collate latin1_bin;
a b
A A
drop table t1;
create table t1 (a varchar(5)) create table t1 (a varchar(5))
partition by list columns(a) partition by list columns(a)
( partition p0 values in ('\''), ( partition p0 values in ('\''),
......
drop table if exists t1; drop table if exists t1;
create table t1 (a varchar(5), b int signed, c varchar(10), d datetime)
partition by range columns(b,c)
subpartition by hash(to_seconds(d))
( partition p0 values less than (2, 'b'),
partition p1 values less than (4, 'd'),
partition p2 values less than (10, 'za'));
insert into t1 values ('a', 3, 'w', '2001-10-27 04:34:00');
insert into t1 values ('r', 7, 'w', '2001-10-27 05:34:00');
insert into t1 values ('g', 10, 'w', '2001-10-27 06:34:00');
update t1 set a = 'c' where a > 'f';
drop table t1;
create table t1 (a varchar(5)) create table t1 (a varchar(5))
engine=memory engine=memory
partition by range columns(a) partition by range columns(a)
......
...@@ -172,6 +172,18 @@ DROP TABLE t1; ...@@ -172,6 +172,18 @@ DROP TABLE t1;
# #
# Test that optimizer doesn't use indexes with wrong collation # Test that optimizer doesn't use indexes with wrong collation
# #
#
# BUG#48447, Delivering too few records with indexes using collate syntax
#
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci);
insert into t1 values ('A'),('a'),('B'),('b'),('C'),('c');
select * from t1 where a > 'B' collate latin1_bin;
select * from t1 where a <> 'B' collate latin1_bin;
create index i on t1 (a);
select * from t1 where a > 'B' collate latin1_bin;
select * from t1 where a <> 'B' collate latin1_bin;
drop table t1;
SET NAMES latin1; SET NAMES latin1;
CREATE TABLE t1 CREATE TABLE t1
(s1 char(10) COLLATE latin1_german1_ci, (s1 char(10) COLLATE latin1_german1_ci,
......
...@@ -8,6 +8,37 @@ ...@@ -8,6 +8,37 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
#
# BUG#48161, Delivering too few records using collate syntax with partitions
#
# Test case from BUG#48447 with some extension
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci)
partition by range columns(a)
( partition p0 values less than ('a'),
partition p1 values less than ('b'),
partition p2 values less than ('c'),
partition p3 values less than ('d'));
insert into t1 values ('A'),('a'),('B'),('b'),('C'),('c');
select * from t1 where a > 'B' collate latin1_bin;
select * from t1 where a <> 'B' collate latin1_bin;
alter table t1 remove partitioning;
select * from t1 where a > 'B' collate latin1_bin;
select * from t1 where a <> 'B' collate latin1_bin;
drop table t1;
# Test case from BUG#48161
create table t1 (a varchar(2) character set latin1,
b varchar(2) character set latin1)
partition by list columns(a,b)
(partition p0 values in (('a','a')));
insert into t1 values ('A','A');
select * from t1 where b <> 'a' collate latin1_bin AND
a = 'A' collate latin1_bin;
alter table t1 remove partitioning;
select * from t1 where b <> 'a' collate latin1_bin AND
a = 'A' collate latin1_bin;
drop table t1;
create table t1 (a varchar(5)) create table t1 (a varchar(5))
partition by list columns(a) partition by list columns(a)
( partition p0 values in ('\''), ( partition p0 values in ('\''),
......
...@@ -5,6 +5,21 @@ ...@@ -5,6 +5,21 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
#
# BUG#47774, Assertion failure in InnoDB using column list partitioning
#
create table t1 (a varchar(5), b int signed, c varchar(10), d datetime)
partition by range columns(b,c)
subpartition by hash(to_seconds(d))
( partition p0 values less than (2, 'b'),
partition p1 values less than (4, 'd'),
partition p2 values less than (10, 'za'));
insert into t1 values ('a', 3, 'w', '2001-10-27 04:34:00');
insert into t1 values ('r', 7, 'w', '2001-10-27 05:34:00');
insert into t1 values ('g', 10, 'w', '2001-10-27 06:34:00');
update t1 set a = 'c' where a > 'f';
drop table t1;
# #
# BUG#47776, Failed to update for MEMORY engine, crash for InnoDB and success for MyISAM # BUG#47776, Failed to update for MEMORY engine, crash for InnoDB and success for MyISAM
# #
......
...@@ -5882,7 +5882,8 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field, ...@@ -5882,7 +5882,8 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field,
value->result_type() == STRING_RESULT && value->result_type() == STRING_RESULT &&
key_part->image_type == Field::itRAW && key_part->image_type == Field::itRAW &&
((Field_str*)field)->charset() != conf_func->compare_collation() && ((Field_str*)field)->charset() != conf_func->compare_collation() &&
!(conf_func->compare_collation()->state & MY_CS_BINSORT)) !(conf_func->compare_collation()->state & MY_CS_BINSORT &&
(type == Item_func::EQUAL_FUNC || type == Item_func::EQ_FUNC)))
goto end; goto end;
if (key_part->image_type == Field::itMBR) if (key_part->image_type == Field::itMBR)
......
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