Commit 18c36d82 authored by Igor Babaev's avatar Igor Babaev

Merge.

parents 76379be1 6e08befd
...@@ -2785,4 +2785,26 @@ DROP TABLE IF EXISTS t1, t2; ...@@ -2785,4 +2785,26 @@ DROP TABLE IF EXISTS t1, t2;
CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb; CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb;
ALTER TABLE t1 RENAME TO t2, DISABLE KEYS; ALTER TABLE t1 RENAME TO t2, DISABLE KEYS;
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
#
# Bug#702322: HAVING with two ANDed predicates + ORDER BY
#
CREATE TABLE t1 (pk int PRIMARY KEY, a int, KEY (a)) ENGINE=InnoDB;
CREATE TABLE t2 (a int, KEY (a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(18,0),(9,10),(8,11),(2,15),(7,19),(1,20);
SET SESSION join_cache_level = 0;
EXPLAIN
SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a
WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11
ORDER BY t1.a;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 Using where; Using filesort
1 SIMPLE t2 ref a a 5 test.t1.pk 1 Using index
SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a
WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11
ORDER BY t1.a;
a
10
19
DROP TABLE t1,t2;
End of 5.3 tests End of 5.3 tests
...@@ -984,6 +984,7 @@ DROP TABLE t1, t2; ...@@ -984,6 +984,7 @@ DROP TABLE t1, t2;
--echo # Test for bug #56619 - Assertion failed during --echo # Test for bug #56619 - Assertion failed during
--echo # ALTER TABLE RENAME, DISABLE KEYS --echo # ALTER TABLE RENAME, DISABLE KEYS
--echo # --echo #
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
--enable_warnings --enable_warnings
...@@ -993,4 +994,26 @@ ALTER TABLE t1 RENAME TO t2, DISABLE KEYS; ...@@ -993,4 +994,26 @@ ALTER TABLE t1 RENAME TO t2, DISABLE KEYS;
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
--enable_warnings --enable_warnings
--echo #
--echo # Bug#702322: HAVING with two ANDed predicates + ORDER BY
--echo #
CREATE TABLE t1 (pk int PRIMARY KEY, a int, KEY (a)) ENGINE=InnoDB;
CREATE TABLE t2 (a int, KEY (a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(18,0),(9,10),(8,11),(2,15),(7,19),(1,20);
SET SESSION join_cache_level = 0;
EXPLAIN
SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a
WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11
ORDER BY t1.a;
SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a
WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11
ORDER BY t1.a;
DROP TABLE t1,t2;
--echo End of 5.3 tests --echo End of 5.3 tests
...@@ -2315,16 +2315,23 @@ JOIN::exec() ...@@ -2315,16 +2315,23 @@ JOIN::exec()
new Item_cond_and(curr_table->select->cond, new Item_cond_and(curr_table->select->cond,
sort_table_cond))) sort_table_cond)))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
curr_table->select->cond->fix_fields(thd, 0);
} }
if (curr_table->pre_idx_push_select_cond) if (curr_table->pre_idx_push_select_cond)
{ {
if (sort_table_cond->type() == Item::COND_ITEM &&
sort_table_cond != curr_table->select->cond)
sort_table_cond= sort_table_cond->copy_andor_structure(thd);
if (!(curr_table->pre_idx_push_select_cond= if (!(curr_table->pre_idx_push_select_cond=
new Item_cond_and(curr_table->pre_idx_push_select_cond, new Item_cond_and(curr_table->pre_idx_push_select_cond,
sort_table_cond))) sort_table_cond)))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
curr_table->pre_idx_push_select_cond->fix_fields(thd, 0);
} }
if (curr_table->select->cond && !curr_table->select->cond->fixed)
curr_table->select->cond->fix_fields(thd, 0);
if (curr_table->pre_idx_push_select_cond &&
!curr_table->pre_idx_push_select_cond->fixed)
curr_table->pre_idx_push_select_cond->fix_fields(thd, 0);
curr_table->set_select_cond(curr_table->select->cond, __LINE__); curr_table->set_select_cond(curr_table->select->cond, __LINE__);
curr_table->select_cond->top_level_item(); curr_table->select_cond->top_level_item();
DBUG_EXECUTE("where",print_where(curr_table->select->cond, DBUG_EXECUTE("where",print_where(curr_table->select->cond,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment