Commit 8570a6a0 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.4 into 10.5

parents 1bacab8a d8dc8537
...@@ -2460,7 +2460,38 @@ count(*)+sleep(0) ...@@ -2460,7 +2460,38 @@ count(*)+sleep(0)
2 2
drop table t1; drop table t1;
# #
# Start of 10.3 tests # MDEV-25112: MIN/MAX optimization for query containing BETWEEN in WHERE
#
create table t1 (a int) engine=myisam;
insert into t1 values (267), (273), (287), (303), (308);
select max(a) from t1 where a < 303 and (a between 267 AND 287);
max(a)
287
explain select max(a) from t1 where a < 303 and (a between 267 AND 287);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
select min(a) from t1 where a > 267 and (a between 273 AND 303);
min(a)
273
explain select min(a) from t1 where a > 267 and (a between 273 AND 303);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
create index idx on t1(a);
select max(a) from t1 where a < 303 and (a between 267 AND 287);
max(a)
287
explain select max(a) from t1 where a < 303 and (a between 267 AND 287);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
select min(a) from t1 where a > 267 and (a between 273 AND 303);
min(a)
273
explain select min(a) from t1 where a > 267 and (a between 273 AND 303);
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
drop table t1;
#
# End of 10.2 tests
# #
# #
# MDEV-9408 CREATE TABLE SELECT MAX(int_column) creates different columns for table vs view # MDEV-9408 CREATE TABLE SELECT MAX(int_column) creates different columns for table vs view
...@@ -2492,3 +2523,6 @@ t2 CREATE TABLE `t2` ( ...@@ -2492,3 +2523,6 @@ t2 CREATE TABLE `t2` (
DROP TABLE t2; DROP TABLE t2;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
#
# End of 10.3 tests
#
...@@ -1705,7 +1705,33 @@ select count(*)+sleep(0) from t1; ...@@ -1705,7 +1705,33 @@ select count(*)+sleep(0) from t1;
drop table t1; drop table t1;
--echo # --echo #
--echo # Start of 10.3 tests --echo # MDEV-25112: MIN/MAX optimization for query containing BETWEEN in WHERE
--echo #
create table t1 (a int) engine=myisam;
insert into t1 values (267), (273), (287), (303), (308);
let $q1=
select max(a) from t1 where a < 303 and (a between 267 AND 287);
let $q2=
select min(a) from t1 where a > 267 and (a between 273 AND 303);
eval $q1;
eval explain $q1;
eval $q2;
eval explain $q2;
create index idx on t1(a);
eval $q1;
eval explain $q1;
eval $q2;
eval explain $q2;
drop table t1;
--echo #
--echo # End of 10.2 tests
--echo # --echo #
--echo # --echo #
...@@ -1730,3 +1756,7 @@ DROP TABLE t2; ...@@ -1730,3 +1756,7 @@ DROP TABLE t2;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # End of 10.3 tests
--echo #
--- /home/alice/git/10.3/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.result~ 2021-03-19 17:27:12.935559866 +0100
+++ /home/alice/git/10.3/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.reject 2021-03-19 17:27:14.071534938 +0100
@@ -126,12 +126,15 @@ @@ -126,12 +126,15 @@
show warnings; show warnings;
Level Code Message Level Code Message
......
...@@ -86,7 +86,7 @@ my_off_t my_tell(File fd, myf MyFlags) ...@@ -86,7 +86,7 @@ my_off_t my_tell(File fd, myf MyFlags)
DBUG_ENTER("my_tell"); DBUG_ENTER("my_tell");
DBUG_PRINT("my",("fd: %d MyFlags: %lu",fd, MyFlags)); DBUG_PRINT("my",("fd: %d MyFlags: %lu",fd, MyFlags));
DBUG_ASSERT(fd >= 0); DBUG_ASSERT(fd >= 0);
#if defined (HAVE_TELL) && !defined (_WIN32) #if defined (HAVE_TELL) && !defined (_WIN32) && !defined(_AIX)
pos= tell(fd); pos= tell(fd);
#else #else
pos= my_seek(fd, 0L, MY_SEEK_CUR,0); pos= my_seek(fd, 0L, MY_SEEK_CUR,0);
......
...@@ -842,7 +842,10 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo, ...@@ -842,7 +842,10 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
if (is_field_part) if (is_field_part)
{ {
if (between || eq_type) if (between || eq_type)
{
*range_fl&= ~(NO_MAX_RANGE | NO_MIN_RANGE); *range_fl&= ~(NO_MAX_RANGE | NO_MIN_RANGE);
*range_fl&= ~(max_fl ? NEAR_MAX : NEAR_MIN);
}
else else
{ {
*range_fl&= ~(max_fl ? NO_MAX_RANGE : NO_MIN_RANGE); *range_fl&= ~(max_fl ? NO_MAX_RANGE : NO_MIN_RANGE);
......
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