diff options
author | Sergei Golubchik <serg@mariadb.org> | 2021-12-07 09:47:42 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2021-12-07 09:47:42 +0100 |
commit | e8a91c18ea136f54a53ae19c6f41482a1b855cff (patch) | |
tree | f300f9a1135ab44d329efd60bedc59e4c36e9bdc | |
parent | f458acc81e805d148e01f60fe5c2ded622df7c01 (diff) | |
parent | 153b75b5762eacff1ab257e6e22522efd53e7c3e (diff) | |
download | mariadb-git-e8a91c18ea136f54a53ae19c6f41482a1b855cff.tar.gz |
Merge branch '10.3' into 10.4
-rw-r--r-- | cmake/Internal/CPack/CPackRPM.cmake | 3 | ||||
-rw-r--r-- | mysql-test/main/range.result | 24 | ||||
-rw-r--r-- | mysql-test/main/range.test | 24 | ||||
-rw-r--r-- | mysql-test/main/range_mrr_icp.result | 24 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 2 | ||||
-rw-r--r-- | mysys/lf_alloc-pin.c | 5 | ||||
-rw-r--r-- | mysys/lf_hash.c | 9 | ||||
-rw-r--r-- | sql/sql_select.cc | 7 | ||||
-rw-r--r-- | storage/mroonga/vendor/groonga/CMakeLists.txt | 4 | ||||
-rw-r--r-- | storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt | 4 | ||||
-rw-r--r-- | unittest/mysys/thr_template.c | 2 |
11 files changed, 98 insertions, 10 deletions
diff --git a/cmake/Internal/CPack/CPackRPM.cmake b/cmake/Internal/CPack/CPackRPM.cmake index a1040a0161f..d16965be1e9 100644 --- a/cmake/Internal/CPack/CPackRPM.cmake +++ b/cmake/Internal/CPack/CPackRPM.cmake @@ -18,7 +18,8 @@ macro(restore WHAT) endmacro() foreach (WHAT SUMMARY DESCRIPTION) - if(NOT CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT}) + if(CPACK_RPM_PACKAGE_COMPONENT AND + NOT CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT}) message(FATAL_ERROR "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT} is not defined") endif() endforeach() diff --git a/mysql-test/main/range.result b/mysql-test/main/range.result index afd1571283f..0e728d76a3e 100644 --- a/mysql-test/main/range.result +++ b/mysql-test/main/range.result @@ -3272,6 +3272,30 @@ pk i v a b 2 2 4 2 4 drop table t1, t2; # +# MDEV-26553: Always FALSE/NULL disjunct on top level of WHERE is removed +# +create table t1 (a int, b int, index idx(a,b)); +insert into t1 values (1,1), (1,2), (2,1), (2,2), (3,3); +create table t2 (c int); +insert into t2 values (5), (2), (3), (4); +select 1 from t1 s1 +where 1 not in (select 1 from t1 +where ((a = 1 or a = 2) and b = 1) or (b > 5 and b < 1)); +1 +select 1 from t1 s1 +where 1 not in (select 1 from t1 +where ((a = 1 or a = 2) and b = 1) or b = NULL); +1 +select c from t2 +where 2 not in (select 1 from t1 +where ((a=1 or a=2) and b = 1) or (b > 5 and b < 1)); +c +5 +2 +3 +4 +drop table t1,t2; +# # End of 10.2 tests # # diff --git a/mysql-test/main/range.test b/mysql-test/main/range.test index de2a428c49a..10245857265 100644 --- a/mysql-test/main/range.test +++ b/mysql-test/main/range.test @@ -2240,6 +2240,30 @@ select * from t1 inner join t2 on ( t2.b = t1.v or t2.a = t1.pk); drop table t1, t2; --echo # +--echo # MDEV-26553: Always FALSE/NULL disjunct on top level of WHERE is removed +--echo # + +create table t1 (a int, b int, index idx(a,b)); +insert into t1 values (1,1), (1,2), (2,1), (2,2), (3,3); + +create table t2 (c int); +insert into t2 values (5), (2), (3), (4); + +select 1 from t1 s1 + where 1 not in (select 1 from t1 + where ((a = 1 or a = 2) and b = 1) or (b > 5 and b < 1)); + +select 1 from t1 s1 + where 1 not in (select 1 from t1 + where ((a = 1 or a = 2) and b = 1) or b = NULL); + +select c from t2 + where 2 not in (select 1 from t1 + where ((a=1 or a=2) and b = 1) or (b > 5 and b < 1)); + +drop table t1,t2; + +--echo # --echo # End of 10.2 tests --echo # diff --git a/mysql-test/main/range_mrr_icp.result b/mysql-test/main/range_mrr_icp.result index 3fce8b0fc23..51de18acf9c 100644 --- a/mysql-test/main/range_mrr_icp.result +++ b/mysql-test/main/range_mrr_icp.result @@ -3269,6 +3269,30 @@ pk i v a b 2 2 4 2 4 drop table t1, t2; # +# MDEV-26553: Always FALSE/NULL disjunct on top level of WHERE is removed +# +create table t1 (a int, b int, index idx(a,b)); +insert into t1 values (1,1), (1,2), (2,1), (2,2), (3,3); +create table t2 (c int); +insert into t2 values (5), (2), (3), (4); +select 1 from t1 s1 +where 1 not in (select 1 from t1 +where ((a = 1 or a = 2) and b = 1) or (b > 5 and b < 1)); +1 +select 1 from t1 s1 +where 1 not in (select 1 from t1 +where ((a = 1 or a = 2) and b = 1) or b = NULL); +1 +select c from t2 +where 2 not in (select 1 from t1 +where ((a=1 or a=2) and b = 1) or (b > 5 and b < 1)); +c +5 +2 +3 +4 +drop table t1,t2; +# # End of 10.2 tests # # diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 043092e3945..f513e9091d3 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -5026,7 +5026,7 @@ sub mysqld_start ($$) { $mysqld->{'started_opts'}= $extra_opts; my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect"; - return $oldexe eq $exe || + return $oldexe eq ($exe || '') || sleep_until_file_created($mysqld->value('pid-file'), $expect_file, $opt_start_timeout, $mysqld->{'proc'}, $warn_seconds); } diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c index 646e584c152..f844920a664 100644 --- a/mysys/lf_alloc-pin.c +++ b/mysys/lf_alloc-pin.c @@ -251,8 +251,9 @@ static int ptr_cmp(void **a, void **b) #define add_to_purgatory(PINS, ADDR) \ do \ { \ - *(void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset)= \ - (PINS)->purgatory; \ + my_atomic_storeptr_explicit( \ + (void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset), \ + (PINS)->purgatory, MY_MEMORY_ORDER_RELEASE); \ (PINS)->purgatory= (ADDR); \ (PINS)->purgatory_count++; \ } while (0) diff --git a/mysys/lf_hash.c b/mysys/lf_hash.c index 7e401a63194..90389c01d6a 100644 --- a/mysys/lf_hash.c +++ b/mysys/lf_hash.c @@ -112,13 +112,16 @@ retry: cur_hashnr= cursor->curr->hashnr; cur_keylen= cursor->curr->keylen; - cur_key= cursor->curr->key; + cur_key= my_atomic_loadptr_explicit((void **) &cursor->curr->key, + MY_MEMORY_ORDER_ACQUIRE); do { - link= cursor->curr->link; + link= (intptr) my_atomic_loadptr_explicit((void **) &cursor->curr->link, + MY_MEMORY_ORDER_RELAXED); cursor->next= PTR(link); lf_pin(pins, 0, cursor->next); - } while (link != cursor->curr->link && LF_BACKOFF()); + } while (link != (intptr) my_atomic_loadptr((void **) &cursor->curr->link) + && LF_BACKOFF()); if (!DELETED(link)) { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3272f8b7f65..27fc27f242a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5506,6 +5506,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, if (!s->const_keys.is_clear_all()) { sargable_cond= get_sargable_cond(join, s->table); + bool is_sargable_cond_of_where= sargable_cond == &join->conds; select= make_select(s->table, found_const_table_map, found_const_table_map, @@ -5522,6 +5523,12 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, */ *sargable_cond= select->cond; + if (is_sargable_cond_of_where && + join->conds && join->conds->type() == Item::COND_ITEM && + ((Item_cond*) (join->conds))->functype() == + Item_func::COND_AND_FUNC) + join->cond_equal= &((Item_cond_and*) (join->conds))->m_cond_equal; + s->quick=select->quick; s->needed_reg=select->needed_reg; select->quick=0; diff --git a/storage/mroonga/vendor/groonga/CMakeLists.txt b/storage/mroonga/vendor/groonga/CMakeLists.txt index 2929338d7b1..8afa53be1e0 100644 --- a/storage/mroonga/vendor/groonga/CMakeLists.txt +++ b/storage/mroonga/vendor/groonga/CMakeLists.txt @@ -86,7 +86,9 @@ set(LIB_DIR "lib") set(INCLUDE_DIR "include") set(GRN_INCLUDE_DIR "include/groonga") set(DATA_DIR "share") -set(GRN_DATA_DIR "${DATA_DIR}/${GRN_PROJECT_NAME}") +if(NOT DEFINED GRN_DATA_DIR) + set(GRN_DATA_DIR "${DATA_DIR}/${GRN_PROJECT_NAME}") +endif() set(CONFIG_DIR "etc") set(GRN_CONFIG_DIR "${CONFIG_DIR}/${GRN_PROJECT_NAME}") set(GRN_CONFIG_PATH "${CMAKE_INSTALL_PREFIX}/${GRN_CONFIG_DIR}/groonga.conf") diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt index ae083028038..4c2aa343089 100644 --- a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt +++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt @@ -16,7 +16,9 @@ # MA 02110-1335 USA cmake_minimum_required(VERSION 2.6) -set(GROONGA_NORMALIZER_MYSQL_PROJECT_NAME "groonga-normalizer-mysql") +if(NOT DEFINED GROONGA_NORMALIZER_MYSQL_PROJECT_NAME) + set(GROONGA_NORMALIZER_MYSQL_PROJECT_NAME "groonga-normalizer-mysql") +endif() project("${GROONGA_NORMALIZER_MYSQL_PROJECT_NAME}") if(DEFINED GROONGA_NORMALIZER_MYSQL_EMBED) diff --git a/unittest/mysys/thr_template.c b/unittest/mysys/thr_template.c index 42e035d911c..1e715484687 100644 --- a/unittest/mysys/thr_template.c +++ b/unittest/mysys/thr_template.c @@ -59,7 +59,7 @@ int main(int argc __attribute__((unused)), char **argv) pthread_mutex_init(&mutex, 0); -#define CYCLES 3000 +#define CYCLES 30000 #define THREADS 30 diag("N CPUs: %d", my_getncpus()); |