Loading mysql-test/r/subselect.result +15 −0 Original line number Diff line number Diff line Loading @@ -3002,6 +3002,21 @@ field1 field2 1 1 1 3 DROP TABLE t1, t2; CREATE TABLE t1(a int, INDEX (a)); INSERT INTO t1 VALUES (1), (3), (5), (7); INSERT INTO t1 VALUES (NULL); CREATE TABLE t2(a int); INSERT INTO t2 VALUES (1),(2),(3); EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 3 2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index SELECT a, a IN (SELECT a FROM t1) FROM t2; a a IN (SELECT a FROM t1) 1 1 2 NULL 3 1 DROP TABLE t1,t2; create table t1 (df decimal(5,1)); insert into t1 values(1.1); insert into t1 values(2.2); Loading mysql-test/t/subselect.test +17 −0 Original line number Diff line number Diff line Loading @@ -1955,6 +1955,23 @@ SELECT field1, field2 DROP TABLE t1, t2; # # Bug #23478: not top-level IN subquery returning a non-empty result set # with possible NULL values by index access from the outer query # CREATE TABLE t1(a int, INDEX (a)); INSERT INTO t1 VALUES (1), (3), (5), (7); INSERT INTO t1 VALUES (NULL); CREATE TABLE t2(a int); INSERT INTO t2 VALUES (1),(2),(3); EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2; SELECT a, a IN (SELECT a FROM t1) FROM t2; DROP TABLE t1,t2; # End of 4.1 tests # Loading sql/item_subselect.cc +5 −0 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ double Item_in_subselect::val_real() */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -687,6 +688,7 @@ longlong Item_in_subselect::val_int() */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -707,6 +709,7 @@ String *Item_in_subselect::val_str(String *str) */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -726,6 +729,7 @@ String *Item_in_subselect::val_str(String *str) bool Item_in_subselect::val_bool() { DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -744,6 +748,7 @@ my_decimal *Item_in_subselect::val_decimal(my_decimal *decimal_value) method should not be used */ DBUG_ASSERT(0); null_value= 0; DBUG_ASSERT(fixed == 1); if (exec()) { Loading Loading
mysql-test/r/subselect.result +15 −0 Original line number Diff line number Diff line Loading @@ -3002,6 +3002,21 @@ field1 field2 1 1 1 3 DROP TABLE t1, t2; CREATE TABLE t1(a int, INDEX (a)); INSERT INTO t1 VALUES (1), (3), (5), (7); INSERT INTO t1 VALUES (NULL); CREATE TABLE t2(a int); INSERT INTO t2 VALUES (1),(2),(3); EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 3 2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index SELECT a, a IN (SELECT a FROM t1) FROM t2; a a IN (SELECT a FROM t1) 1 1 2 NULL 3 1 DROP TABLE t1,t2; create table t1 (df decimal(5,1)); insert into t1 values(1.1); insert into t1 values(2.2); Loading
mysql-test/t/subselect.test +17 −0 Original line number Diff line number Diff line Loading @@ -1955,6 +1955,23 @@ SELECT field1, field2 DROP TABLE t1, t2; # # Bug #23478: not top-level IN subquery returning a non-empty result set # with possible NULL values by index access from the outer query # CREATE TABLE t1(a int, INDEX (a)); INSERT INTO t1 VALUES (1), (3), (5), (7); INSERT INTO t1 VALUES (NULL); CREATE TABLE t2(a int); INSERT INTO t2 VALUES (1),(2),(3); EXPLAIN SELECT a, a IN (SELECT a FROM t1) FROM t2; SELECT a, a IN (SELECT a FROM t1) FROM t2; DROP TABLE t1,t2; # End of 4.1 tests # Loading
sql/item_subselect.cc +5 −0 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ double Item_in_subselect::val_real() */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -687,6 +688,7 @@ longlong Item_in_subselect::val_int() */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -707,6 +709,7 @@ String *Item_in_subselect::val_str(String *str) */ DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -726,6 +729,7 @@ String *Item_in_subselect::val_str(String *str) bool Item_in_subselect::val_bool() { DBUG_ASSERT(fixed == 1); null_value= 0; if (exec()) { reset(); Loading @@ -744,6 +748,7 @@ my_decimal *Item_in_subselect::val_decimal(my_decimal *decimal_value) method should not be used */ DBUG_ASSERT(0); null_value= 0; DBUG_ASSERT(fixed == 1); if (exec()) { Loading