mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fixed range optimzier bug (Bug #1828)
mysql-test/r/range.result: test for range optimzier bug mysql-test/t/range.test: test for range optimzier bug
This commit is contained in:
@ -290,3 +290,13 @@ t1 range a,b a 5 NULL 2 Using where
|
|||||||
SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
||||||
a b
|
a b
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a int, b int, c int, INDEX (c,a,b));
|
||||||
|
INSERT INTO t1 VALUES (1,0,0),(1,0,0),(1,0,0);
|
||||||
|
INSERT INTO t1 VALUES (0,1,0),(0,1,0),(0,1,0);
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE (c=0 and a=1) or (c=0 and b=1);
|
||||||
|
COUNT(*)
|
||||||
|
6
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE (c=0 and b=1) or (c=0 and a=1);
|
||||||
|
COUNT(*)
|
||||||
|
6
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -231,9 +231,20 @@ INSERT INTO t1 VALUES
|
|||||||
(21,4),(22,5),(23,5),(24,5),(25,5),(26,5),(30,5),(31,5),(32,5),(33,5),
|
(21,4),(22,5),(23,5),(24,5),(25,5),(26,5),(30,5),(31,5),(32,5),(33,5),
|
||||||
(33,5),(33,5),(33,5),(33,5),(34,5),(35,5);
|
(33,5),(33,5),(33,5),(33,5),(34,5),(35,5);
|
||||||
|
|
||||||
|
# we expect that optimizer will choose index on A
|
||||||
EXPLAIN SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
EXPLAIN SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
||||||
SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
SELECT * FROM t1 WHERE a IN(1,2) AND b=5;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# we expect that optimizer will choose index on A
|
#
|
||||||
|
# Test error with
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int, b int, c int, INDEX (c,a,b));
|
||||||
|
INSERT INTO t1 VALUES (1,0,0),(1,0,0),(1,0,0);
|
||||||
|
INSERT INTO t1 VALUES (0,1,0),(0,1,0),(0,1,0);
|
||||||
|
# -- First reports 3; second reports 6
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE (c=0 and a=1) or (c=0 and b=1);
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE (c=0 and b=1) or (c=0 and a=1);
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
{}
|
{}
|
||||||
inline bool is_same(SEL_ARG *arg)
|
inline bool is_same(SEL_ARG *arg)
|
||||||
{
|
{
|
||||||
if (type != arg->type)
|
if (type != arg->type || part != arg->part)
|
||||||
return 0;
|
return 0;
|
||||||
if (type != KEY_RANGE)
|
if (type != KEY_RANGE)
|
||||||
return 1;
|
return 1;
|
||||||
|
Reference in New Issue
Block a user