Loading mysql-test/r/innodb_mysql.result +21 −0 Original line number Diff line number Diff line Loading @@ -83,3 +83,24 @@ b a 3 3 3 3 DROP TABLE t1, t2, t3; CREATE TABLE `t1` (`id1` INT) ; INSERT INTO `t1` (`id1`) VALUES (1),(5),(2); CREATE TABLE `t2` ( `id1` INT, `id2` INT NOT NULL, `id3` INT, `id4` INT NOT NULL, UNIQUE (`id2`,`id4`), KEY (`id1`) ) ENGINE=InnoDB; INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES (1,1,1,0), (1,1,2,1), (5,1,2,2), (6,1,2,3), (1,2,2,2), (1,2,1,1); SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2); id1 2 DROP TABLE t1, t2; mysql-test/r/subselect.result +22 −0 Original line number Diff line number Diff line Loading @@ -2895,3 +2895,25 @@ select * from t1 where NOT(s1 = ALL (select s1/s1 from t1)); s1 2 drop table t1; create table t1 ( retailerID varchar(8) NOT NULL, statusID int(10) unsigned NOT NULL, changed datetime NOT NULL, UNIQUE KEY retailerID (retailerID, statusID, changed) ); INSERT INTO t1 VALUES("0026", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0026", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0037", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0037", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0048", "1", "2006-01-06 12:37:50"); INSERT INTO t1 VALUES("0059", "1", "2006-01-06 12:37:50"); select * from t1 r1 where (r1.retailerID,(r1.changed)) in (SELECT r2.retailerId,(max(changed)) from t1 r2 group by r2.retailerId); retailerID statusID changed 0026 2 2006-01-06 12:25:53 0037 2 2006-01-06 12:25:53 0048 1 2006-01-06 12:37:50 0059 1 2006-01-06 12:37:50 drop table t1; mysql-test/t/innodb_mysql.test +27 −0 Original line number Diff line number Diff line Loading @@ -90,3 +90,30 @@ SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2) ORDER BY t1.b LIMIT 5; DROP TABLE t1, t2, t3; # BUG#21077 (The testcase is not deterministic so correct execution doesn't # prove anything) For proof one should track if sequence of ha_innodb::* func # calls is correct. CREATE TABLE `t1` (`id1` INT) ; INSERT INTO `t1` (`id1`) VALUES (1),(5),(2); CREATE TABLE `t2` ( `id1` INT, `id2` INT NOT NULL, `id3` INT, `id4` INT NOT NULL, UNIQUE (`id2`,`id4`), KEY (`id1`) ) ENGINE=InnoDB; INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES (1,1,1,0), (1,1,2,1), (5,1,2,2), (6,1,2,3), (1,2,2,2), (1,2,1,1); SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2); DROP TABLE t1, t2; mysql-test/t/subselect.test +24 −0 Original line number Diff line number Diff line Loading @@ -1861,4 +1861,28 @@ select * from t1 where NOT(s1+1 = ANY (select s1 from t1)); select * from t1 where (s1 = ALL (select s1/s1 from t1)); select * from t1 where NOT(s1 = ALL (select s1/s1 from t1)); drop table t1; # # Bug #16255: Subquery in where # create table t1 ( retailerID varchar(8) NOT NULL, statusID int(10) unsigned NOT NULL, changed datetime NOT NULL, UNIQUE KEY retailerID (retailerID, statusID, changed) ); INSERT INTO t1 VALUES("0026", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0026", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0037", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0037", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0048", "1", "2006-01-06 12:37:50"); INSERT INTO t1 VALUES("0059", "1", "2006-01-06 12:37:50"); select * from t1 r1 where (r1.retailerID,(r1.changed)) in (SELECT r2.retailerId,(max(changed)) from t1 r2 group by r2.retailerId); drop table t1; # End of 4.1 tests sql/item_subselect.cc +5 −5 Original line number Diff line number Diff line Loading @@ -976,18 +976,18 @@ Item_in_subselect::row_value_transformer(JOIN *join) DBUG_RETURN(RES_ERROR); Item *item_eq= new Item_func_eq(new Item_direct_ref((*optimizer->get_cache())-> Item_ref((*optimizer->get_cache())-> addr(i), (char *)"<no matter>", (char *)in_left_expr_name), new Item_direct_ref(select_lex->ref_pointer_array + i, Item_ref(select_lex->ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") ); Item *item_isnull= new Item_func_isnull(new Item_direct_ref( select_lex-> Item_ref( select_lex-> ref_pointer_array+i, (char *)"<no matter>", (char *)"<list ref>") Loading @@ -1000,7 +1000,7 @@ Item_in_subselect::row_value_transformer(JOIN *join) new Item_is_not_null_test(this, new Item_direct_ref(select_lex-> Item_ref(select_lex-> ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") Loading Loading @@ -1057,7 +1057,7 @@ Item_in_subselect::row_value_transformer(JOIN *join) new Item_is_not_null_test(this, new Item_direct_ref(select_lex-> Item_ref(select_lex-> ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") Loading Loading
mysql-test/r/innodb_mysql.result +21 −0 Original line number Diff line number Diff line Loading @@ -83,3 +83,24 @@ b a 3 3 3 3 DROP TABLE t1, t2, t3; CREATE TABLE `t1` (`id1` INT) ; INSERT INTO `t1` (`id1`) VALUES (1),(5),(2); CREATE TABLE `t2` ( `id1` INT, `id2` INT NOT NULL, `id3` INT, `id4` INT NOT NULL, UNIQUE (`id2`,`id4`), KEY (`id1`) ) ENGINE=InnoDB; INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES (1,1,1,0), (1,1,2,1), (5,1,2,2), (6,1,2,3), (1,2,2,2), (1,2,1,1); SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2); id1 2 DROP TABLE t1, t2;
mysql-test/r/subselect.result +22 −0 Original line number Diff line number Diff line Loading @@ -2895,3 +2895,25 @@ select * from t1 where NOT(s1 = ALL (select s1/s1 from t1)); s1 2 drop table t1; create table t1 ( retailerID varchar(8) NOT NULL, statusID int(10) unsigned NOT NULL, changed datetime NOT NULL, UNIQUE KEY retailerID (retailerID, statusID, changed) ); INSERT INTO t1 VALUES("0026", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0026", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0037", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0037", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0048", "1", "2006-01-06 12:37:50"); INSERT INTO t1 VALUES("0059", "1", "2006-01-06 12:37:50"); select * from t1 r1 where (r1.retailerID,(r1.changed)) in (SELECT r2.retailerId,(max(changed)) from t1 r2 group by r2.retailerId); retailerID statusID changed 0026 2 2006-01-06 12:25:53 0037 2 2006-01-06 12:25:53 0048 1 2006-01-06 12:37:50 0059 1 2006-01-06 12:37:50 drop table t1;
mysql-test/t/innodb_mysql.test +27 −0 Original line number Diff line number Diff line Loading @@ -90,3 +90,30 @@ SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2) ORDER BY t1.b LIMIT 5; DROP TABLE t1, t2, t3; # BUG#21077 (The testcase is not deterministic so correct execution doesn't # prove anything) For proof one should track if sequence of ha_innodb::* func # calls is correct. CREATE TABLE `t1` (`id1` INT) ; INSERT INTO `t1` (`id1`) VALUES (1),(5),(2); CREATE TABLE `t2` ( `id1` INT, `id2` INT NOT NULL, `id3` INT, `id4` INT NOT NULL, UNIQUE (`id2`,`id4`), KEY (`id1`) ) ENGINE=InnoDB; INSERT INTO `t2`(`id1`,`id2`,`id3`,`id4`) VALUES (1,1,1,0), (1,1,2,1), (5,1,2,2), (6,1,2,3), (1,2,2,2), (1,2,1,1); SELECT `id1` FROM `t1` WHERE `id1` NOT IN (SELECT `id1` FROM `t2` WHERE `id2` = 1 AND `id3` = 2); DROP TABLE t1, t2;
mysql-test/t/subselect.test +24 −0 Original line number Diff line number Diff line Loading @@ -1861,4 +1861,28 @@ select * from t1 where NOT(s1+1 = ANY (select s1 from t1)); select * from t1 where (s1 = ALL (select s1/s1 from t1)); select * from t1 where NOT(s1 = ALL (select s1/s1 from t1)); drop table t1; # # Bug #16255: Subquery in where # create table t1 ( retailerID varchar(8) NOT NULL, statusID int(10) unsigned NOT NULL, changed datetime NOT NULL, UNIQUE KEY retailerID (retailerID, statusID, changed) ); INSERT INTO t1 VALUES("0026", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0026", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0037", "1", "2005-12-06 12:18:56"); INSERT INTO t1 VALUES("0037", "2", "2006-01-06 12:25:53"); INSERT INTO t1 VALUES("0048", "1", "2006-01-06 12:37:50"); INSERT INTO t1 VALUES("0059", "1", "2006-01-06 12:37:50"); select * from t1 r1 where (r1.retailerID,(r1.changed)) in (SELECT r2.retailerId,(max(changed)) from t1 r2 group by r2.retailerId); drop table t1; # End of 4.1 tests
sql/item_subselect.cc +5 −5 Original line number Diff line number Diff line Loading @@ -976,18 +976,18 @@ Item_in_subselect::row_value_transformer(JOIN *join) DBUG_RETURN(RES_ERROR); Item *item_eq= new Item_func_eq(new Item_direct_ref((*optimizer->get_cache())-> Item_ref((*optimizer->get_cache())-> addr(i), (char *)"<no matter>", (char *)in_left_expr_name), new Item_direct_ref(select_lex->ref_pointer_array + i, Item_ref(select_lex->ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") ); Item *item_isnull= new Item_func_isnull(new Item_direct_ref( select_lex-> Item_ref( select_lex-> ref_pointer_array+i, (char *)"<no matter>", (char *)"<list ref>") Loading @@ -1000,7 +1000,7 @@ Item_in_subselect::row_value_transformer(JOIN *join) new Item_is_not_null_test(this, new Item_direct_ref(select_lex-> Item_ref(select_lex-> ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") Loading Loading @@ -1057,7 +1057,7 @@ Item_in_subselect::row_value_transformer(JOIN *join) new Item_is_not_null_test(this, new Item_direct_ref(select_lex-> Item_ref(select_lex-> ref_pointer_array + i, (char *)"<no matter>", (char *)"<list ref>") Loading