summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <vva@eagle.mysql.r18.ru>2004-02-12 23:45:39 +0400
committerunknown <vva@eagle.mysql.r18.ru>2004-02-12 23:45:39 +0400
commit9c8ca1fa64398ed8679b3aba3a51490ac16fa9c9 (patch)
tree0a47cf1aff09fd3a9edbdf22c979a4bb09aeec45
parent15b89bfc5981ad348220fbf3f7067b7465d71080 (diff)
downloadmariadb-git-9c8ca1fa64398ed8679b3aba3a51490ac16fa9c9.tar.gz
fixed copying of color in SEL_ARG::clone (fixed bug #2968)
mysql-test/r/select_found.result: added new tests for bugs with range optimization (bugs #2448 and #2698) mysql-test/t/select_found.test: added new tests for bugs with range optimization (bugs #2448 and #2698)
-rw-r--r--mysql-test/r/select_found.result18
-rw-r--r--mysql-test/t/select_found.test28
-rw-r--r--sql/opt_range.cc1
3 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result
index 419ffb73d59..367bdd798b4 100644
--- a/mysql-test/r/select_found.result
+++ b/mysql-test/r/select_found.result
@@ -188,3 +188,21 @@ select FOUND_ROWS();
FOUND_ROWS()
0
drop table t1;
+CREATE TABLE t1 ( a int not null, b int not null, KEY ab(a,b) );
+INSERT INTO t1 VALUES ( 47, 1 );
+INSERT INTO t1 VALUES ( 70, 1 );
+SELECT * FROM t1
+WHERE
+(
+( b =1 AND a BETWEEN 14 AND 21 ) OR
+( b =2 AND a BETWEEN 16 AND 18 ) OR
+( b =3 AND a BETWEEN 15 AND 19 )
+);
+a b
+DROP TABLE t1;
+CREATE TABLE t1 ( a integer, u varchar(15), r integer, key uao_idx( r, a, u));
+DELETE FROM t1
+WHERE ( r = 1 AND a IN ( 1, 2 ) AND ( u = 'w' OR u LIKE 'w/%' ) )
+OR ( r = 1 AND a IN ( 3 ) AND ( u = 'w/U' OR u LIKE 'w/U/%' ) )
+OR ( r = 1 AND a IN ( 1, 2, 3 ) AND ( u = 'w' ) );
+drop table t1;
diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test
index f5ee4d5c010..e584fca206f 100644
--- a/mysql-test/t/select_found.test
+++ b/mysql-test/t/select_found.test
@@ -99,3 +99,31 @@ select FOUND_ROWS();
select SQL_CALC_FOUND_ROWS * from t1 where id > 6 limit 0, 1;
select FOUND_ROWS();
drop table t1;
+
+#
+# Other bugs with range optimization
+#
+
+# bug #2448
+
+CREATE TABLE t1 ( a int not null, b int not null, KEY ab(a,b) );
+INSERT INTO t1 VALUES ( 47, 1 );
+INSERT INTO t1 VALUES ( 70, 1 );
+SELECT * FROM t1
+WHERE
+(
+ ( b =1 AND a BETWEEN 14 AND 21 ) OR
+ ( b =2 AND a BETWEEN 16 AND 18 ) OR
+ ( b =3 AND a BETWEEN 15 AND 19 )
+);
+DROP TABLE t1;
+
+# bug #2698
+
+CREATE TABLE t1 ( a integer, u varchar(15), r integer, key uao_idx( r, a, u));
+DELETE FROM t1
+WHERE ( r = 1 AND a IN ( 1, 2 ) AND ( u = 'w' OR u LIKE 'w/%' ) )
+ OR ( r = 1 AND a IN ( 3 ) AND ( u = 'w/U' OR u LIKE 'w/U/%' ) )
+ OR ( r = 1 AND a IN ( 1, 2, 3 ) AND ( u = 'w' ) );
+drop table t1;
+
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 188d503b767..0ed5c447486 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -488,6 +488,7 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg)
return 0; // OOM
}
increment_use_count(1);
+ tmp->color= color;
return tmp;
}