summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <igor@olga.mysql.com>2007-01-13 10:49:26 -0800
committerunknown <igor@olga.mysql.com>2007-01-13 10:49:26 -0800
commitb9dc0243a822df6484f91f15aa1734b84396ba7d (patch)
tree65f230f8d132cd8d63aba57dc40b6cce9f8bf3ad
parent52c100ae0cfbf5588fe3fa1917aba3934241e3f6 (diff)
downloadmariadb-git-b9dc0243a822df6484f91f15aa1734b84396ba7d.tar.gz
Fixed bug #24776: an assertion abort in handler::ha_index_init
for queries using 'range checked for each record'. The problem was fixed in 5.0 by the patch for bug 12291. This patch down-ported the corresponding code from 5.0 into QUICK_SELECT::init() and added a new test case. mysql-test/r/range.result: Added a test case for bug #24776. mysql-test/t/range.test: Added a test case for bug #24776. sql/opt_range.h: Fixed bug #24776: an assertion abort in handler::ha_index_init for queries using 'range checked for each record'. The problem was fixed in 5.0 by the patch for bug 12291. The patch for 4.1 down-ported the corresponding code from 5.0 into QUICK_SELECT::init().
-rw-r--r--mysql-test/r/range.result43
-rw-r--r--mysql-test/t/range.test43
-rw-r--r--sql/opt_range.h2
3 files changed, 88 insertions, 0 deletions
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result
index f25d94f8066..2125f237d0e 100644
--- a/mysql-test/r/range.result
+++ b/mysql-test/r/range.result
@@ -658,4 +658,47 @@ select a from t1 where a > 'x';
a
xx
drop table t1;
+CREATE TABLE t1 (
+OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
+OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid',
+OXLEFT int NOT NULL DEFAULT '0',
+OXRIGHT int NOT NULL DEFAULT '0',
+OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
+PRIMARY KEY (OXID),
+KEY OXNID (OXID),
+KEY OXLEFT (OXLEFT),
+KEY OXRIGHT (OXRIGHT),
+KEY OXROOTID (OXROOTID)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
+INSERT INTO t1 VALUES
+('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'),
+('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3,
+'d8c4177d09f8b11f5.52725521'),
+('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5,
+'d8c4177d09f8b11f5.52725521'),
+('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7,
+'d8c4177d09f8b11f5.52725521'),
+('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9,
+'d8c4177d09f8b11f5.52725521'),
+('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11,
+'d8c4177d09f8b11f5.52725521');
+EXPLAIN
+SELECT s.oxid FROM t1 v, t1 s
+WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
+v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
+s.oxleft > v.oxleft AND s.oxleft < v.oxright;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE v ref OXLEFT,OXRIGHT,OXROOTID OXROOTID 32 const 5 Using where
+1 SIMPLE s ALL OXLEFT NULL NULL NULL 5 Range checked for each record (index map: 0x4)
+SELECT s.oxid FROM t1 v, t1 s
+WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
+v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
+s.oxleft > v.oxleft AND s.oxleft < v.oxright;
+oxid
+d8c4177d151affab2.81582770
+d8c4177d206a333d2.74422679
+d8c4177d225791924.30714720
+d8c4177d2380fc201.39666693
+d8c4177d24ccef970.14957924
+DROP TABLE t1;
End of 4.1 tests
diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test
index 245178d7d4a..16cbcd754f6 100644
--- a/mysql-test/t/range.test
+++ b/mysql-test/t/range.test
@@ -520,4 +520,47 @@ explain select a from t1 where a > 'x';
select a from t1 where a > 'x';
drop table t1;
+#
+# Bug #24776: assertion abort for 'range checked for each record'
+#
+
+CREATE TABLE t1 (
+ OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
+ OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid',
+ OXLEFT int NOT NULL DEFAULT '0',
+ OXRIGHT int NOT NULL DEFAULT '0',
+ OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
+ PRIMARY KEY (OXID),
+ KEY OXNID (OXID),
+ KEY OXLEFT (OXLEFT),
+ KEY OXRIGHT (OXRIGHT),
+ KEY OXROOTID (OXROOTID)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
+
+INSERT INTO t1 VALUES
+('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'),
+('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3,
+ 'd8c4177d09f8b11f5.52725521'),
+('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5,
+ 'd8c4177d09f8b11f5.52725521'),
+('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7,
+ 'd8c4177d09f8b11f5.52725521'),
+('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9,
+ 'd8c4177d09f8b11f5.52725521'),
+('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11,
+ 'd8c4177d09f8b11f5.52725521');
+
+EXPLAIN
+SELECT s.oxid FROM t1 v, t1 s
+ WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
+ v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
+ s.oxleft > v.oxleft AND s.oxleft < v.oxright;
+
+SELECT s.oxid FROM t1 v, t1 s
+ WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND
+ v.oxrootid ='d8c4177d09f8b11f5.52725521' AND
+ s.oxleft > v.oxleft AND s.oxleft < v.oxright;
+
+DROP TABLE t1;
+
--echo End of 4.1 tests
diff --git a/sql/opt_range.h b/sql/opt_range.h
index 4d425604921..4b20d1fe0fe 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -90,6 +90,8 @@ public:
int init()
{
key_part_info= head->key_info[index].key_part;
+ if (file->inited != handler::NONE)
+ file->ha_index_or_rnd_end();
return error=file->ha_index_init(index);
}
virtual int get_next();