Commit e8a91c18 authored by Sergei Golubchik's avatar Sergei Golubchik

Merge branch '10.3' into 10.4

parents f458acc8 153b75b5
...@@ -18,7 +18,8 @@ macro(restore WHAT) ...@@ -18,7 +18,8 @@ macro(restore WHAT)
endmacro() endmacro()
foreach (WHAT SUMMARY DESCRIPTION) 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") message(FATAL_ERROR "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${WHAT} is not defined")
endif() endif()
endforeach() endforeach()
......
...@@ -3272,6 +3272,30 @@ pk i v a b ...@@ -3272,6 +3272,30 @@ pk i v a b
2 2 4 2 4 2 2 4 2 4
drop table t1, t2; 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 # End of 10.2 tests
# #
# #
......
...@@ -2239,6 +2239,30 @@ select * from t1 inner join t2 on ( t2.b = t1.v or t2.a = t1.pk); ...@@ -2239,6 +2239,30 @@ select * from t1 inner join t2 on ( t2.b = t1.v or t2.a = t1.pk);
select * from t1 inner join t2 on ( t2.b = t1.v or t2.a = t1.pk); select * from t1 inner join t2 on ( t2.b = t1.v or t2.a = t1.pk);
drop table t1, t2; 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 #
--echo # End of 10.2 tests --echo # End of 10.2 tests
--echo # --echo #
......
...@@ -3269,6 +3269,30 @@ pk i v a b ...@@ -3269,6 +3269,30 @@ pk i v a b
2 2 4 2 4 2 2 4 2 4
drop table t1, t2; 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 # End of 10.2 tests
# #
# #
......
...@@ -5026,7 +5026,7 @@ sub mysqld_start ($$) { ...@@ -5026,7 +5026,7 @@ sub mysqld_start ($$) {
$mysqld->{'started_opts'}= $extra_opts; $mysqld->{'started_opts'}= $extra_opts;
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect"; 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, sleep_until_file_created($mysqld->value('pid-file'), $expect_file,
$opt_start_timeout, $mysqld->{'proc'}, $warn_seconds); $opt_start_timeout, $mysqld->{'proc'}, $warn_seconds);
} }
......
...@@ -251,8 +251,9 @@ static int ptr_cmp(void **a, void **b) ...@@ -251,8 +251,9 @@ static int ptr_cmp(void **a, void **b)
#define add_to_purgatory(PINS, ADDR) \ #define add_to_purgatory(PINS, ADDR) \
do \ do \
{ \ { \
*(void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset)= \ my_atomic_storeptr_explicit( \
(PINS)->purgatory; \ (void **)((char *)(ADDR)+(PINS)->pinbox->free_ptr_offset), \
(PINS)->purgatory, MY_MEMORY_ORDER_RELEASE); \
(PINS)->purgatory= (ADDR); \ (PINS)->purgatory= (ADDR); \
(PINS)->purgatory_count++; \ (PINS)->purgatory_count++; \
} while (0) } while (0)
......
...@@ -112,13 +112,16 @@ static int l_find(LF_SLIST **head, CHARSET_INFO *cs, uint32 hashnr, ...@@ -112,13 +112,16 @@ static int l_find(LF_SLIST **head, CHARSET_INFO *cs, uint32 hashnr,
cur_hashnr= cursor->curr->hashnr; cur_hashnr= cursor->curr->hashnr;
cur_keylen= cursor->curr->keylen; 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 { do {
link= cursor->curr->link; link= (intptr) my_atomic_loadptr_explicit((void **) &cursor->curr->link,
MY_MEMORY_ORDER_RELAXED);
cursor->next= PTR(link); cursor->next= PTR(link);
lf_pin(pins, 0, cursor->next); 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)) if (!DELETED(link))
{ {
......
...@@ -5506,6 +5506,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, ...@@ -5506,6 +5506,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
if (!s->const_keys.is_clear_all()) if (!s->const_keys.is_clear_all())
{ {
sargable_cond= get_sargable_cond(join, s->table); 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, select= make_select(s->table, found_const_table_map,
found_const_table_map, found_const_table_map,
...@@ -5522,6 +5523,12 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, ...@@ -5522,6 +5523,12 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
*/ */
*sargable_cond= select->cond; *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->quick=select->quick;
s->needed_reg=select->needed_reg; s->needed_reg=select->needed_reg;
select->quick=0; select->quick=0;
......
...@@ -86,7 +86,9 @@ set(LIB_DIR "lib") ...@@ -86,7 +86,9 @@ set(LIB_DIR "lib")
set(INCLUDE_DIR "include") set(INCLUDE_DIR "include")
set(GRN_INCLUDE_DIR "include/groonga") set(GRN_INCLUDE_DIR "include/groonga")
set(DATA_DIR "share") 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(CONFIG_DIR "etc")
set(GRN_CONFIG_DIR "${CONFIG_DIR}/${GRN_PROJECT_NAME}") set(GRN_CONFIG_DIR "${CONFIG_DIR}/${GRN_PROJECT_NAME}")
set(GRN_CONFIG_PATH "${CMAKE_INSTALL_PREFIX}/${GRN_CONFIG_DIR}/groonga.conf") set(GRN_CONFIG_PATH "${CMAKE_INSTALL_PREFIX}/${GRN_CONFIG_DIR}/groonga.conf")
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
# MA 02110-1335 USA # MA 02110-1335 USA
cmake_minimum_required(VERSION 2.6) 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}") project("${GROONGA_NORMALIZER_MYSQL_PROJECT_NAME}")
if(DEFINED GROONGA_NORMALIZER_MYSQL_EMBED) if(DEFINED GROONGA_NORMALIZER_MYSQL_EMBED)
......
...@@ -59,7 +59,7 @@ int main(int argc __attribute__((unused)), char **argv) ...@@ -59,7 +59,7 @@ int main(int argc __attribute__((unused)), char **argv)
pthread_mutex_init(&mutex, 0); pthread_mutex_init(&mutex, 0);
#define CYCLES 3000 #define CYCLES 30000
#define THREADS 30 #define THREADS 30
diag("N CPUs: %d", my_getncpus()); diag("N CPUs: %d", my_getncpus());
......
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