summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/join.result12
-rw-r--r--mysql-test/t/join.test11
-rw-r--r--sql/sql_select.cc2
3 files changed, 24 insertions, 1 deletions
diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result
index bacfa81160a..2585bf7a26e 100644
--- a/mysql-test/r/join.result
+++ b/mysql-test/r/join.result
@@ -930,4 +930,16 @@ Warnings:
Note 1003 select 1 AS `1` from `test`.`t1` left join `test`.`t1` `t2` on((1 = 1)) left join (`test`.`t1` left join `test`.`t1` `t2` on((1 = 1))) on(rand()) where 1
DROP VIEW v1;
DROP TABLE t1;
+#
+# Bug#52177 crash with explain, row comparison, join, text field
+#
+CREATE TABLE t1 (a TINYINT, b TEXT, KEY (a));
+INSERT INTO t1 VALUES (0,''),(0,'');
+FLUSH TABLES;
+EXPLAIN SELECT 1 FROM t1 LEFT JOIN t1 a ON 1
+WHERE ROW(t1.a, 1111.11) = ROW(1111.11, 1111.11) AND
+ROW(t1.b, 1111.11) <=> ROW('','');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+DROP TABLE t1;
End of 5.0 tests.
diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test
index ba61da289bc..a9900c34f1e 100644
--- a/mysql-test/t/join.test
+++ b/mysql-test/t/join.test
@@ -725,4 +725,15 @@ SELECT 1 FROM v1 right join v1 AS v2 ON RAND();
DROP VIEW v1;
DROP TABLE t1;
+--echo #
+--echo # Bug#52177 crash with explain, row comparison, join, text field
+--echo #
+CREATE TABLE t1 (a TINYINT, b TEXT, KEY (a));
+INSERT INTO t1 VALUES (0,''),(0,'');
+FLUSH TABLES;
+EXPLAIN SELECT 1 FROM t1 LEFT JOIN t1 a ON 1
+WHERE ROW(t1.a, 1111.11) = ROW(1111.11, 1111.11) AND
+ROW(t1.b, 1111.11) <=> ROW('','');
+DROP TABLE t1;
+
--echo End of 5.0 tests.
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index cbc608ea972..84de1fe241b 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1029,7 +1029,7 @@ JOIN::optimize()
}
}
- if (conds &&!outer_join && const_table_map != found_const_table_map &&
+ if (conds && const_table_map != found_const_table_map &&
(select_options & SELECT_DESCRIBE) &&
select_lex->master_unit() == &thd->lex->unit) // upper level SELECT
{