@@ -1030,6 +1030,71 @@ set statement optimizer_switch='split_materialized=off' for $query;
10301030a b name total_amt
103110311 NULL A 10
10321032DROP TABLE t1,t2;
1033+ #
1034+ # MDEV-37407 Wrong result with ORDER BY LIMIT
1035+ # Both, with and without split_materialized should
1036+ # produce the same results
1037+ #
1038+ SET @save_optimizer_switch= @@optimizer_switch;
1039+ CREATE TABLE t1
1040+ (a varchar(35), b varchar(4), KEY (a))
1041+ ENGINE=InnoDB;
1042+ INSERT INTO t1 VALUES
1043+ ('Albania','AXA'), ('Australia','AUS'), ('Myanmar','MMR'),
1044+ ('Bahamas','BS'), ('Brazil','BRA'), ('Barbados','BRB');
1045+ CREATE TABLE t2
1046+ (a varchar(4), b varchar(50), PRIMARY KEY (b,a), KEY (a))
1047+ ENGINE=InnoDB;
1048+ INSERT INTO t2 VALUES
1049+ ('AUS','Anglican'), ('MMR','Baptist'), ('BS','Anglican'),
1050+ ('BS','Baptist'), ('BS','Methodist'), ('BRB','Methodist'),
1051+ ('BRA','Baptist'), ('USA','Baptist');
1052+ ANALYZE TABLE t1 PERSISTENT FOR ALL;
1053+ Table Op Msg_type Msg_text
1054+ test.t1 analyze status Engine-independent statistics collected
1055+ test.t1 analyze status OK
1056+ ANALYZE TABLE t2 PERSISTENT FOR ALL;
1057+ Table Op Msg_type Msg_text
1058+ test.t2 analyze status Engine-independent statistics collected
1059+ test.t2 analyze status OK
1060+ set optimizer_switch='split_materialized=off';
1061+ SELECT t1.a
1062+ FROM (SELECT a FROM t2 GROUP BY a ORDER BY a, COUNT(DISTINCT b) LIMIT 1) dt
1063+ JOIN t1 ON
1064+ dt.a=t1.b
1065+ WHERE t1.a LIKE 'B%';
1066+ a
1067+ set optimizer_switch='split_materialized=on';
1068+ SELECT t1.a
1069+ FROM (SELECT a FROM t2 GROUP BY a ORDER BY a, COUNT(DISTINCT b) LIMIT 1) dt
1070+ JOIN t1 ON
1071+ dt.a=t1.b
1072+ WHERE t1.a LIKE 'B%';
1073+ a
1074+ DROP TABLE t1,t2;
1075+ SET optimizer_switch= @save_optimizer_switch;
1076+ #
1077+ # MDEV-29638 Crash when considering Split-Materialized plan
1078+ #
1079+ set @save_optimizer_switch= @@optimizer_switch;
1080+ set optimizer_switch='condition_pushdown_for_derived=off,split_materialized=on';
1081+ CREATE TABLE t1 (id int PRIMARY KEY)engine=innodb;
1082+ CREATE TABLE t2 (id int PRIMARY KEY, c int) engine=innodb;
1083+ CREATE TABLE t3 (id int PRIMARY KEY, a int , b int, KEY (a))engine=innodb;
1084+ SELECT * FROM
1085+ (
1086+ SELECT DISTINCT t1.id
1087+ FROM t1 JOIN
1088+ (
1089+ SELECT t2.id FROM t2 JOIN t3
1090+ ON t3.id = t2.c
1091+ WHERE (t3.a > 2 AND t3.b = 2)
1092+ GROUP BY t2.id
1093+ ) m2 ON m2.id = t1.id
1094+ ) dt;
1095+ id
1096+ drop table t1, t2, t3;
1097+ SET optimizer_switch= @save_optimizer_switch;
10331098# End of 10.11 tests
10341099#
10351100# MDEV-37057 Wrong result with LATERAL DERIVED
0 commit comments