summaryrefslogtreecommitdiff
path: root/mysql-test/t/subselect_innodb.test
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2005-11-04 13:16:46 +0200
committerunknown <bell@sanja.is.com.ua>2005-11-04 13:16:46 +0200
commit234bf9a70cc22f788ae655de1bb140e984918409 (patch)
tree941bd8ee7fed13c66d2a2579fd836c0369f4f5c9 /mysql-test/t/subselect_innodb.test
parent71898b3e2406897197df654f0ebf1b89e70b65b5 (diff)
downloadmariadb-git-234bf9a70cc22f788ae655de1bb140e984918409.tar.gz
avoiding of calling Item::val_* methods family with opt_range mem_root, because its life time is too short. (BUG#14342)
mysql-test/r/subselect_innodb.result: BUG#14342 test case mysql-test/t/subselect_innodb.test: BUG#14342 test case sql/opt_range.cc: avoiding of calling Item::val_* methods family with opt_range mem_root, because its life time is too short.
Diffstat (limited to 'mysql-test/t/subselect_innodb.test')
-rw-r--r--mysql-test/t/subselect_innodb.test54
1 files changed, 54 insertions, 0 deletions
diff --git a/mysql-test/t/subselect_innodb.test b/mysql-test/t/subselect_innodb.test
index a07cc93ad68..4bfc4d17588 100644
--- a/mysql-test/t/subselect_innodb.test
+++ b/mysql-test/t/subselect_innodb.test
@@ -183,3 +183,57 @@ group by country;
drop table t1;
+#
+# BUG#14342: wrong placement of subquery internals in complex queries
+#
+CREATE TABLE `t1` (
+ `t3_id` int NOT NULL,
+ `t1_id` int NOT NULL,
+ PRIMARY KEY (`t1_id`)
+);
+CREATE TABLE `t2` (
+ `t2_id` int NOT NULL,
+ `t1_id` int NOT NULL,
+ `b` int NOT NULL,
+ PRIMARY KEY (`t2_id`),
+ UNIQUE KEY `idx_t2_t1_b` (`t1_id`,`b`)
+) ENGINE=InnoDB;
+CREATE TABLE `t3` (
+ `t3_id` int NOT NULL
+);
+INSERT INTO `t3` VALUES (3);
+select
+ (SELECT rs.t2_id
+ FROM t2 rs
+ WHERE rs.t1_id=
+ (SELECT lt.t1_id
+ FROM t1 lt
+ WHERE lt.t3_id=a.t3_id)
+ ORDER BY b DESC LIMIT 1)
+from t3 AS a;
+# repeat above query in SP
+--disable_warnings
+DROP PROCEDURE IF EXISTS p1;
+--enable_warnings
+delimiter //;
+create procedure p1()
+begin
+ declare done int default 3;
+ repeat
+ select
+ (SELECT rs.t2_id
+ FROM t2 rs
+ WHERE rs.t1_id=
+ (SELECT lt.t1_id
+ FROM t1 lt
+ WHERE lt.t3_id=a.t3_id)
+ ORDER BY b DESC LIMIT 1) as x
+ from t3 AS a;
+ set done= done-1;
+ until done <= 0 end repeat;
+end//
+delimiter ;//
+call p1();
+call p1();
+call p1();
+drop tables t1,t2,t3;