summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorMartin Hansson <martin.hansson@sun.com>2009-11-25 11:02:25 +0100
committerMartin Hansson <martin.hansson@sun.com>2009-11-25 11:02:25 +0100
commit14f2eb124448d69922c10fb818cbdf9b57f8ff63 (patch)
treef4b04367474b03bb2cbf69a5eb374058a50ad92f /mysql-test
parent42fcc56f2df81c453c130d2c3f214dcc1156c7af (diff)
downloadmariadb-git-14f2eb124448d69922c10fb818cbdf9b57f8ff63.tar.gz
Bug#48459: valgrind errors with query using 'Range checked
for each record' There was an error in an internal structure in the range optimizer (SEL_ARG). Bad design causes parts of a data structure not to be initialized when it is in a certain state. All client code must check that this state is not present before trying to access the structure's data. Fixed by - Checking the state before trying to access data (in several places, most of which not covered by test case.) - Copying the keypart id when cloning SEL_ARGs mysql-test/r/range.result: Bug#48459: Test result. mysql-test/t/range.test: Bug#48459: Test case. sql/opt_range.cc: Bug#48459: Fix + doxygenated count_key_part_usage comment.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/range.result33
-rw-r--r--mysql-test/t/range.test34
2 files changed, 66 insertions, 1 deletions
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result
index ab40eefdc82..64e00521cd2 100644
--- a/mysql-test/r/range.result
+++ b/mysql-test/r/range.result
@@ -1604,6 +1604,39 @@ str_to_date('', '%Y-%m-%d')
0000-00-00
DROP TABLE t1, t2;
#
+# Bug#48459: valgrind errors with query using 'Range checked for each
+# record'
+#
+CREATE TABLE t1 (
+a INT,
+b CHAR(2),
+c INT,
+d INT,
+KEY ( c ),
+KEY ( d, a, b ( 2 ) ),
+KEY ( b ( 1 ) )
+);
+INSERT INTO t1 VALUES ( NULL, 'a', 1, 2 ), ( NULL, 'a', 1, 2 ),
+( 1, 'a', 1, 2 ), ( 1, 'a', 1, 2 );
+CREATE TABLE t2 (
+a INT,
+c INT,
+e INT,
+KEY ( e )
+);
+INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL );
+# Should not give Valgrind warnings
+SELECT 1
+FROM t1, t2
+WHERE t1.d <> '1' AND t1.b > '1'
+AND t1.a = t2.a AND t1.c = t2.c;
+1
+1
+1
+1
+1
+DROP TABLE t1, t2;
+#
# Bug #48665: sql-bench's insert test fails due to wrong result
#
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a));
diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test
index 736d65792c5..5d5ad180f1a 100644
--- a/mysql-test/t/range.test
+++ b/mysql-test/t/range.test
@@ -1260,6 +1260,39 @@ SELECT str_to_date('', '%Y-%m-%d');
DROP TABLE t1, t2;
+--echo #
+--echo # Bug#48459: valgrind errors with query using 'Range checked for each
+--echo # record'
+--echo #
+CREATE TABLE t1 (
+ a INT,
+ b CHAR(2),
+ c INT,
+ d INT,
+ KEY ( c ),
+ KEY ( d, a, b ( 2 ) ),
+ KEY ( b ( 1 ) )
+);
+
+INSERT INTO t1 VALUES ( NULL, 'a', 1, 2 ), ( NULL, 'a', 1, 2 ),
+ ( 1, 'a', 1, 2 ), ( 1, 'a', 1, 2 );
+
+CREATE TABLE t2 (
+ a INT,
+ c INT,
+ e INT,
+ KEY ( e )
+);
+
+INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL );
+
+--echo # Should not give Valgrind warnings
+SELECT 1
+FROM t1, t2
+WHERE t1.d <> '1' AND t1.b > '1'
+AND t1.a = t2.a AND t1.c = t2.c;
+
+DROP TABLE t1, t2;
--echo #
--echo # Bug #48665: sql-bench's insert test fails due to wrong result
@@ -1280,5 +1313,4 @@ SELECT * FROM t1 FORCE INDEX (PRIMARY)
DROP TABLE t1;
-
--echo End of 5.1 tests