Commit a13fa8f6 authored by unknown's avatar unknown
Browse files

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  moonbone.local:/home/evgen/bk-trees/mysql-5.0-opt


mysql-test/t/subselect.test:
  Auto merged
sql/item_subselect.cc:
  Auto merged
parents 2aa36d2d 2f78d5ca
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1514,4 +1514,19 @@ Variable_name Value
Slow_queries	1
deallocate prepare no_index;
deallocate prepare sq;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
CREATE TABLE t2 (b int);
INSERT INTO t2 VALUES (NULL);
SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL;
a
1
2
PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL';
EXECUTE stmt;
a
1
2
DEALLOCATE PREPARE stmt;
DROP TABLE t1,t2;
End of 5.0 tests.
+13 −0
Original line number Diff line number Diff line
@@ -3033,6 +3033,19 @@ t3 CREATE TABLE `t3` (
  `a` datetime default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1,t2,t3;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) > 0;
a
SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;
a
1
2
EXPLAIN SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	2	
2	SUBQUERY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
DROP TABLE t1;
create table t1 (df decimal(5,1));
insert into t1 values(1.1);
insert into t1 values(2.2);
+18 −0
Original line number Diff line number Diff line
@@ -1563,4 +1563,22 @@ execute sq;
deallocate prepare no_index;
deallocate prepare sq;

#
# Bug 25027: query with a single-row non-correlated subquery
#            and IS NULL predicate
#

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
CREATE TABLE t2 (b int);
INSERT INTO t2 VALUES (NULL);

SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL;
PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL';

EXECUTE stmt;

DEALLOCATE PREPARE stmt;
DROP TABLE t1,t2;

--echo End of 5.0 tests.
+12 −0
Original line number Diff line number Diff line
@@ -1988,6 +1988,18 @@ SHOW CREATE TABLE t3;

DROP TABLE t1,t2,t3;

#
# Bug 24670: subquery witout tables but with a WHERE clause
#

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);

SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) > 0;
SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;
EXPLAIN SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;

DROP TABLE t1;
# End of 4.1 tests

#
+17 −2
Original line number Diff line number Diff line
@@ -349,6 +349,7 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
      */
      !(select_lex->item_list.head()->type() == FIELD_ITEM ||
	select_lex->item_list.head()->type() == REF_ITEM) &&
      !join->conds && !join->having &&
      /*
        switch off this optimization for prepare statement,
        because we do not rollback this changes
@@ -373,8 +374,6 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
    */
    substitution->walk(&Item::remove_dependence_processor,
		       (byte *) select_lex->outer_select());
    /* SELECT without FROM clause can't have WHERE or HAVING clause */
    DBUG_ASSERT(join->conds == 0 && join->having == 0);
    return RES_REDUCE;
  }
  return RES_OK;
@@ -2277,6 +2276,22 @@ bool subselect_single_select_engine::no_tables()
}


/*
  Check statically whether the subquery can return NULL

  SINOPSYS
    subselect_single_select_engine::may_be_null()

  RETURN
    FALSE  can guarantee that the subquery never return NULL
    TRUE   otherwise
*/
bool subselect_single_select_engine::may_be_null()
{
  return ((no_tables() && !join->conds && !join->having) ? maybe_null : 1);
}


/*
  Report about presence of tables in subquery

Loading