mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 03:47:17 +02:00
merge from 5.1
This commit is contained in:
commit
95646db77b
3 changed files with 195 additions and 2 deletions
|
|
@ -1767,4 +1767,121 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
||||||
pk i4 pk i4
|
pk i4 pk i4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# BUG#13519696 - 62940: SELECT RESULTS VARY WITH VERSION AND
|
||||||
|
# WITH/WITHOUT INDEX RANGE SCAN
|
||||||
|
#
|
||||||
|
create table t1 (id int unsigned not null auto_increment primary key);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
create table t2 (
|
||||||
|
id int unsigned not null auto_increment,
|
||||||
|
val decimal(5,3) not null,
|
||||||
|
primary key (id,val),
|
||||||
|
unique key (val,id),
|
||||||
|
unique key (id));
|
||||||
|
insert into t2 select null,id*0.0009 from t1;
|
||||||
|
select count(val) from t2 ignore index (val) where val > 0.1155;
|
||||||
|
count(val)
|
||||||
|
128
|
||||||
|
select count(val) from t2 force index (val) where val > 0.1155;
|
||||||
|
count(val)
|
||||||
|
128
|
||||||
|
drop table t2, t1;
|
||||||
|
#
|
||||||
|
# BUG#13453382 - REGRESSION SINCE 5.1.39, RANGE OPTIMIZER WRONG
|
||||||
|
# RESULTS WITH DECIMAL CONVERSION
|
||||||
|
#
|
||||||
|
create table t1 (a int,b int,c int,primary key (a,c));
|
||||||
|
insert into t1 values (1,1,2),(1,1,3),(1,1,4);
|
||||||
|
select convert(3, signed integer) > 2.9;
|
||||||
|
convert(3, signed integer) > 2.9
|
||||||
|
1
|
||||||
|
select * from t1 force index (primary) where a=1 and c>= 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c>= 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 force index (primary) where a=1 and c> 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c> 2.9;
|
||||||
|
a b c
|
||||||
|
1 1 3
|
||||||
|
1 1 4
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# BUG#13463488 - 63437: CHAR & BETWEEN WITH INDEX RETURNS WRONG
|
||||||
|
# RESULT AFTER MYSQL 5.1.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(
|
||||||
|
F1 CHAR(5) NOT NULL,
|
||||||
|
F2 CHAR(5) NOT NULL,
|
||||||
|
F3 CHAR(5) NOT NULL,
|
||||||
|
PRIMARY KEY(F1),
|
||||||
|
INDEX IDX_F2(F2)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('A','A','A'),('AA','AA','AA'),('AAA','AAA','AAA'),
|
||||||
|
('AAAA','AAAA','AAAA'),('AAAAA','AAAAA','AAAAA');
|
||||||
|
SELECT * FROM t1 WHERE F1 = 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 = 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
SELECT * FROM t1 WHERE F1 >= 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F1 > 'A ';
|
||||||
|
F1 F2 F3
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F1 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F2 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 WHERE F3 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 BETWEEN 'A ' AND
|
||||||
|
'AAAAA';
|
||||||
|
F1 F2 F3
|
||||||
|
A A A
|
||||||
|
AA AA AA
|
||||||
|
AAA AAA AAA
|
||||||
|
AAAA AAAA AAAA
|
||||||
|
AAAAA AAAAA AAAAA
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
|
|
||||||
|
|
@ -1392,4 +1392,80 @@ SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13519696 - 62940: SELECT RESULTS VARY WITH VERSION AND
|
||||||
|
--echo # WITH/WITHOUT INDEX RANGE SCAN
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (id int unsigned not null auto_increment primary key);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
insert into t1 select null from t1;
|
||||||
|
create table t2 (
|
||||||
|
id int unsigned not null auto_increment,
|
||||||
|
val decimal(5,3) not null,
|
||||||
|
primary key (id,val),
|
||||||
|
unique key (val,id),
|
||||||
|
unique key (id));
|
||||||
|
--disable_warnings
|
||||||
|
insert into t2 select null,id*0.0009 from t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
select count(val) from t2 ignore index (val) where val > 0.1155;
|
||||||
|
select count(val) from t2 force index (val) where val > 0.1155;
|
||||||
|
|
||||||
|
drop table t2, t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13453382 - REGRESSION SINCE 5.1.39, RANGE OPTIMIZER WRONG
|
||||||
|
--echo # RESULTS WITH DECIMAL CONVERSION
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (a int,b int,c int,primary key (a,c));
|
||||||
|
insert into t1 values (1,1,2),(1,1,3),(1,1,4);
|
||||||
|
# show that the integer 3 is bigger than the decimal 2.9,
|
||||||
|
# which should also apply to comparing "c" with 2.9
|
||||||
|
# when c is 3.
|
||||||
|
select convert(3, signed integer) > 2.9;
|
||||||
|
select * from t1 force index (primary) where a=1 and c>= 2.9;
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c>= 2.9;
|
||||||
|
select * from t1 force index (primary) where a=1 and c> 2.9;
|
||||||
|
select * from t1 ignore index (primary) where a=1 and c> 2.9;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#13463488 - 63437: CHAR & BETWEEN WITH INDEX RETURNS WRONG
|
||||||
|
--echo # RESULT AFTER MYSQL 5.1.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(
|
||||||
|
F1 CHAR(5) NOT NULL,
|
||||||
|
F2 CHAR(5) NOT NULL,
|
||||||
|
F3 CHAR(5) NOT NULL,
|
||||||
|
PRIMARY KEY(F1),
|
||||||
|
INDEX IDX_F2(F2)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('A','A','A'),('AA','AA','AA'),('AAA','AAA','AAA'),
|
||||||
|
('AAAA','AAAA','AAAA'),('AAAAA','AAAAA','AAAAA');
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE F1 = 'A ';
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 = 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 >= 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 > 'A ';
|
||||||
|
SELECT * FROM t1 WHERE F1 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 WHERE F2 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 WHERE F3 BETWEEN 'A ' AND 'AAAAA';
|
||||||
|
SELECT * FROM t1 IGNORE INDEX(PRIMARY) WHERE F1 BETWEEN 'A ' AND
|
||||||
|
'AAAAA';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
|
||||||
|
|
@ -7449,7 +7449,7 @@ int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
||||||
|
|
||||||
return my_time_compare(&field_time, &item_time);
|
return my_time_compare(&field_time, &item_time);
|
||||||
}
|
}
|
||||||
return stringcmp(field_result, item_result);
|
return sortcmp(field_result, item_result, field->charset());
|
||||||
}
|
}
|
||||||
if (res_type == INT_RESULT)
|
if (res_type == INT_RESULT)
|
||||||
return 0; // Both are of type int
|
return 0; // Both are of type int
|
||||||
|
|
@ -7461,7 +7461,7 @@ int stored_field_cmp_to_item(THD *thd, Field *field, Item *item)
|
||||||
if (item->null_value)
|
if (item->null_value)
|
||||||
return 0;
|
return 0;
|
||||||
field_val= field->val_decimal(&field_buf);
|
field_val= field->val_decimal(&field_buf);
|
||||||
return my_decimal_cmp(item_val, field_val);
|
return my_decimal_cmp(field_val, item_val);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
The patch for Bug#13463415 started using this function for comparing
|
The patch for Bug#13463415 started using this function for comparing
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue