Post-merge fixes for rocksdb.group_min_max test

- Fix the LooseScan code to support storage engines that return
  HA_ERR_END_OF_FILE if the index scan goes out of provided range
  bounds
- Add a DBUG_EXECUTE_IF("force_group_by",...) to allow a test to
  force a LooseScan
- Adjust rocksdb.group_min_max test not to use features not present
  in MariaDB 10.2 (e.g. optimizer_trace.  In MariaDB 10.4 it's present
  but it doesn't meet the  assumptions that the test makes about it
- Adjust the test result file:
  = MariaDB doesn't support "Enhanced Loose Scan" that FB/MySQL has
  = MariaDB has different cost calculations.
This commit is contained in:
Sergei Petrunia 2019-08-03 23:15:44 +03:00
commit 09a85692a6
4 changed files with 395 additions and 360 deletions

View file

@ -266,6 +266,17 @@ select a1, max(c) from t2 where a1 in ('a','b','d') group by a1,a2,b;
# B) Equalities only over the non-group 'B' attributes
# plans
--echo #
--echo # MariaDB: we dont have the following patch:
--echo #
--echo # commit 60a92a79a3b7fde3c6efe91799e344b977c8e5c3
--echo # Author: Manuel Ung <mung@fb.com>
--echo # Date: Thu Apr 19 23:06:27 2018 -0700
--echo #
--echo # Enhance group-by loose index scan
--echo #
--echo # So the following results are not very meaningful, but are still kept here
explain select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
explain select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a' or a2 = 'b') and (b = 'b') group by a1;
explain select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b' or b = 'a') group by a1;
@ -730,9 +741,9 @@ explain extended select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,
explain extended select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
# test multi_range_groupby flag
set optimizer_switch = 'multi_range_groupby=off';
#MariaDB: no support: set optimizer_switch = 'multi_range_groupby=off';
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'a' or b = 'b') group by a1;
set optimizer_switch = 'default';
#set optimizer_switch = 'default';
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'a' or b = 'b') group by a1;
@ -1361,41 +1372,41 @@ drop table t1;
eval CREATE TABLE t (a INT, b INT, KEY(a,b)) engine=$engine;
INSERT INTO t VALUES (1,1), (2,2), (3,3), (4,4), (1,0), (3,2), (4,5);
ANALYZE TABLE t;
let $DEFAULT_TRACE_MEM_SIZE=1048576; # 1MB
eval set optimizer_trace_max_mem_size=$DEFAULT_TRACE_MEM_SIZE;
set @@session.optimizer_trace='enabled=on';
set end_markers_in_json=on;
# MariaDB: 10.2 doesn't have trace, yet: let $DEFAULT_TRACE_MEM_SIZE=1048576; # 1MB
# eval set optimizer_trace_max_mem_size=$DEFAULT_TRACE_MEM_SIZE;
# set @@session.optimizer_trace='enabled=on';
# set end_markers_in_json=on;
ANALYZE TABLE t;
SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
#SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
# FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
EXPLAIN SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
#SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
# FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
EXPLAIN SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
#SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
# FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
EXPLAIN SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
#SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
# FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
#SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
# FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
SET optimizer_trace_max_mem_size=DEFAULT;
SET optimizer_trace=DEFAULT;
SET end_markers_in_json=DEFAULT;
#SET optimizer_trace_max_mem_size=DEFAULT;
#SET optimizer_trace=DEFAULT;
#SET end_markers_in_json=DEFAULT;
DROP TABLE t;

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,9 @@
--source include/have_debug.inc
set global debug="+d,force_group_by";
set @debug_tmp= @@debug_dbug;
set global debug_dbug="+d,force_group_by";
let $engine=RocksDB;
--source include/group_min_max.inc
set global debug="-d,force_group_by";
set global debug_dbug=@debug_tmp;