diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2022-01-27 08:45:36 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2022-01-27 08:45:36 +0100 |
commit | 9b4a179d69a1c795bef303a88f9d3195669f00ec (patch) | |
tree | 87811d81af231e2945468ead0cba58cfc5514548 /sql/opt_range.cc | |
parent | 020dc54dabe64f238e8ef4f50a630a22e0f06949 (diff) | |
parent | 7db489fc7dea2b4c236807035e57f169074c6682 (diff) | |
download | mariadb-git-10.3-merge.tar.gz |
Merge branch '10.2' into bb-10.3-release10.3-merge
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r-- | sql/opt_range.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 8f8767c10b3..54c0c5bba96 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -9369,7 +9369,7 @@ key_or(RANGE_OPT_PARAM *param, SEL_ARG *key1,SEL_ARG *key2) uint max_part_no= MY_MAX(key1->max_part_no, key2->max_part_no); - for (key2=key2->first(); key2; ) + for (key2=key2->first(); ; ) { /* key1 consists of one or more ranges. tmp is the range currently @@ -9383,6 +9383,16 @@ key_or(RANGE_OPT_PARAM *param, SEL_ARG *key1,SEL_ARG *key2) ^ tmp */ + if (key1->min_flag & NO_MIN_RANGE && + key1->max_flag & NO_MAX_RANGE) + { + if (key1->maybe_flag) + return new SEL_ARG(SEL_ARG::MAYBE_KEY); + return 0; // Always true OR + } + if (!key2) + break; + SEL_ARG *tmp=key1->find_range(key2); /* @@ -9453,6 +9463,13 @@ key_or(RANGE_OPT_PARAM *param, SEL_ARG *key1,SEL_ARG *key2) key2->copy_min(tmp); if (!(key1=key1->tree_delete(tmp))) { // Only one key in tree + if (key2->min_flag & NO_MIN_RANGE && + key2->max_flag & NO_MAX_RANGE) + { + if (key2->maybe_flag) + return new SEL_ARG(SEL_ARG::MAYBE_KEY); + return 0; // Always true OR + } key1=key2; key1->make_root(); key2=key2_next; |