Commit 1031b871 authored by unknown's avatar unknown

range.result, range.test:

  Added a test case for bug #10031.
opt_range.cc:
  Fixed bug #10031: range condition was not used with
  views. Range analyzer did not take into account that
  view columns were always referred through Item_ref.


sql/opt_range.cc:
  Fixed bug #10031: range condition was not used with
  views. Range analyzer did not take into account that
  view columns were always referred through Item_ref.
mysql-test/t/range.test:
  Added a test case for bug #10031.
mysql-test/r/range.result:
  Added a test case for bug #10031.
parent 1d937708
...@@ -720,3 +720,27 @@ id status ...@@ -720,3 +720,27 @@ id status
59 C 59 C
60 C 60 C
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a int, b int, primary key(a,b));
INSERT INTO t1 VALUES
(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3);
CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3;
EXPLAIN SELECT a,b FROM t1 WHERE a < 2 and b=3;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
EXPLAIN SELECT a,b FROM v1 WHERE a < 2 and b=3;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 4 Using where; Using index
SELECT a,b FROM t1 WHERE a < 2 and b=3;
a b
1 3
SELECT a,b FROM v1 WHERE a < 2 and b=3;
a b
1 3
DROP VIEW v1;
DROP TABLE t1;
...@@ -530,3 +530,26 @@ SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B'; ...@@ -530,3 +530,26 @@ SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B';
SELECT * FROM t1 WHERE status < 'A' OR status > 'B'; SELECT * FROM t1 WHERE status < 'A' OR status > 'B';
DROP TABLE t1; DROP TABLE t1;
#
# Test for bug #10031: range to be used over a view
#
CREATE TABLE t1 (a int, b int, primary key(a,b));
INSERT INTO t1 VALUES
(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3);
CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3;
EXPLAIN SELECT a,b FROM t1 WHERE a < 2 and b=3;
EXPLAIN SELECT a,b FROM v1 WHERE a < 2 and b=3;
EXPLAIN SELECT a,b FROM t1 WHERE a < 2;
EXPLAIN SELECT a,b FROM v1 WHERE a < 2;
SELECT a,b FROM t1 WHERE a < 2 and b=3;
SELECT a,b FROM v1 WHERE a < 2 and b=3;
DROP VIEW v1;
DROP TABLE t1;
...@@ -3581,15 +3581,16 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) ...@@ -3581,15 +3581,16 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond)
DBUG_RETURN(ftree); DBUG_RETURN(ftree);
} }
default: default:
if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM) if (cond_func->arguments()[0]->real_item()->type() == Item::FIELD_ITEM)
{ {
field_item= (Item_field*) (cond_func->arguments()[0]); field_item= (Item_field*) (cond_func->arguments()[0]->real_item());
value= cond_func->arg_count > 1 ? cond_func->arguments()[1] : 0; value= cond_func->arg_count > 1 ? cond_func->arguments()[1] : 0;
} }
else if (cond_func->have_rev_func() && else if (cond_func->have_rev_func() &&
cond_func->arguments()[1]->type() == Item::FIELD_ITEM) cond_func->arguments()[1]->real_item()->type() ==
Item::FIELD_ITEM)
{ {
field_item= (Item_field*) (cond_func->arguments()[1]); field_item= (Item_field*) (cond_func->arguments()[1]->real_item());
value= cond_func->arguments()[0]; value= cond_func->arguments()[0];
} }
else else
...@@ -3610,7 +3611,7 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) ...@@ -3610,7 +3611,7 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond)
for (uint i= 0; i < cond_func->arg_count; i++) for (uint i= 0; i < cond_func->arg_count; i++)
{ {
Item *arg= cond_func->arguments()[i]; Item *arg= cond_func->arguments()[i]->real_item();
if (arg != field_item) if (arg != field_item)
ref_tables|= arg->used_tables(); ref_tables|= arg->used_tables();
} }
......
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