diff options
-rw-r--r-- | mysql-test/r/join.result | 12 | ||||
-rw-r--r-- | mysql-test/t/join.test | 11 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 |
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 { |