mirror of
https://github.com/zebrajr/server.git
synced 2025-12-06 00:20:13 +01:00
This was caused by a bug in key_or() when SEL_ARG* key1 has been cloned and is overlapping with SEL_ARG *key2 Cloning of SEL_ARG's happens only in very special cases, which is why this bug has remained undetected for years. It happend in the following query: SELECT COUNT(*) FROM lineitem force index (i_l_orderkey_quantity,i_l_shipdate) WHERE l_shipdate < '1994-01-01' AND l_orderkey < 800 OR l_quantity > 3 AND l_orderkey NOT IN ( 157, 1444 ); Because there are two different indexes that can be used and the code for IN causes a 'tree_or', which causes all SEL_ARG's to be cloned. Other things: - While checking the code, I found a bug in SEL_ARG::SEL_ARG(SEL_ARG &arg) - This was incrementing next_key_part->use_count as part of creating a copy of an existing SEL_ARG. This is however not enough as the 'reverse operation' when the copy is not needed is 'key2_cpy.increment_use_count(-1)', which does something completely different. Fixed by calling increment_use_count(1) in SEL_ARG::SEL_ARG.
25 lines
590 B
Plaintext
25 lines
590 B
Plaintext
#
|
|
# This is generic tests using dbt3_s001 tables
|
|
# This file uses the Aria storage engine
|
|
#
|
|
|
|
set default_storage_engine=Aria;
|
|
|
|
CREATE DATABASE dbt3_s001;
|
|
use dbt3_s001;
|
|
--disable_query_log
|
|
--source include/dbt3_s001.inc
|
|
--enable_query_log
|
|
|
|
--echo #
|
|
--echo # MDEV-30325 Wrong result upon range query using index condition
|
|
--echo #
|
|
|
|
SELECT COUNT(*) FROM lineitem force index (i_l_orderkey_quantity,i_l_shipdate) WHERE l_shipdate < '1994-01-01' AND l_orderkey < 800 OR l_quantity > 3 AND l_orderkey NOT IN ( 157, 1444 );
|
|
|
|
--echo #
|
|
--echo # End of 10.5 tests
|
|
--echo #
|
|
|
|
DROP DATABASE dbt3_s001;
|