diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-20 13:34:38 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-20 13:34:38 +0200 |
commit | 8570a6a0938055b36aabde3f440cae2c5584441b (patch) | |
tree | 1168645d76a69f5af9abe8006d6e0dd24a97b0df | |
parent | 1bacab8ab9a0bff3b7e43920610b03d5a98b3282 (diff) | |
parent | d8dc8537e4f6cfb3b0c63123a8d9df5c1101970d (diff) | |
download | mariadb-git-8570a6a0938055b36aabde3f440cae2c5584441b.tar.gz |
Merge 10.4 into 10.5
-rw-r--r-- | mysql-test/main/func_group.result | 36 | ||||
-rw-r--r-- | mysql-test/main/func_group.test | 32 | ||||
-rw-r--r-- | mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff | 2 | ||||
-rw-r--r-- | mysys/my_seek.c | 2 | ||||
-rw-r--r-- | sql/opt_sum.cc | 3 |
5 files changed, 72 insertions, 3 deletions
diff --git a/mysql-test/main/func_group.result b/mysql-test/main/func_group.result index 1fc92ba90cc..0f09aedc22a 100644 --- a/mysql-test/main/func_group.result +++ b/mysql-test/main/func_group.result @@ -2460,7 +2460,38 @@ count(*)+sleep(0) 2 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 @@ -2492,3 +2523,6 @@ t2 CREATE TABLE `t2` ( DROP TABLE t2; DROP VIEW v1; DROP TABLE t1; +# +# End of 10.3 tests +# diff --git a/mysql-test/main/func_group.test b/mysql-test/main/func_group.test index bc2d6e9047d..10b92cbadca 100644 --- a/mysql-test/main/func_group.test +++ b/mysql-test/main/func_group.test @@ -1705,7 +1705,33 @@ select count(*)+sleep(0) from t1; drop table t1; --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 # @@ -1730,3 +1756,7 @@ DROP TABLE t2; DROP VIEW v1; DROP TABLE t1; + +--echo # +--echo # End of 10.3 tests +--echo # diff --git a/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff b/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff index 47901f63a51..da41283e42f 100644 --- a/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff +++ b/mysql-test/suite/engines/funcs/r/rpl_sp,myisam,mix.rdiff @@ -1,3 +1,5 @@ +--- /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 @@ show warnings; Level Code Message diff --git a/mysys/my_seek.c b/mysys/my_seek.c index 6a370b0ad43..db364ccddda 100644 --- a/mysys/my_seek.c +++ b/mysys/my_seek.c @@ -86,7 +86,7 @@ my_off_t my_tell(File fd, myf MyFlags) DBUG_ENTER("my_tell"); DBUG_PRINT("my",("fd: %d MyFlags: %lu",fd, MyFlags)); DBUG_ASSERT(fd >= 0); -#if defined (HAVE_TELL) && !defined (_WIN32) +#if defined (HAVE_TELL) && !defined (_WIN32) && !defined(_AIX) pos= tell(fd); #else pos= my_seek(fd, 0L, MY_SEEK_CUR,0); diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index af2d9ddc2e7..27360d4a10c 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -842,7 +842,10 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo, if (is_field_part) { if (between || eq_type) + { *range_fl&= ~(NO_MAX_RANGE | NO_MIN_RANGE); + *range_fl&= ~(max_fl ? NEAR_MAX : NEAR_MIN); + } else { *range_fl&= ~(max_fl ? NO_MAX_RANGE : NO_MIN_RANGE); |