mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-521 fix.
After pullout item during single row subselect transformation it should be fixed properly.
This commit is contained in:
@@ -6163,5 +6163,20 @@ a ( 3, 3 ) NOT IN ( SELECT NULL, NULL )
|
|||||||
3 NULL
|
3 NULL
|
||||||
set optimizer_switch=@mdev367_optimizer_switch;
|
set optimizer_switch=@mdev367_optimizer_switch;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-521 single value subselect transformation problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
DROP TABLE t1;
|
||||||
# return optimizer switch changed in the beginning of this test
|
# return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
|
@@ -6162,6 +6162,21 @@ a ( 3, 3 ) NOT IN ( SELECT NULL, NULL )
|
|||||||
3 NULL
|
3 NULL
|
||||||
set optimizer_switch=@mdev367_optimizer_switch;
|
set optimizer_switch=@mdev367_optimizer_switch;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-521 single value subselect transformation problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
DROP TABLE t1;
|
||||||
# return optimizer switch changed in the beginning of this test
|
# return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
|
@@ -6158,6 +6158,21 @@ a ( 3, 3 ) NOT IN ( SELECT NULL, NULL )
|
|||||||
3 NULL
|
3 NULL
|
||||||
set optimizer_switch=@mdev367_optimizer_switch;
|
set optimizer_switch=@mdev367_optimizer_switch;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-521 single value subselect transformation problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
DROP TABLE t1;
|
||||||
# return optimizer switch changed in the beginning of this test
|
# return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
|
@@ -6169,6 +6169,21 @@ a ( 3, 3 ) NOT IN ( SELECT NULL, NULL )
|
|||||||
3 NULL
|
3 NULL
|
||||||
set optimizer_switch=@mdev367_optimizer_switch;
|
set optimizer_switch=@mdev367_optimizer_switch;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-521 single value subselect transformation problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
DROP TABLE t1;
|
||||||
# return optimizer switch changed in the beginning of this test
|
# return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
|
@@ -6158,6 +6158,21 @@ a ( 3, 3 ) NOT IN ( SELECT NULL, NULL )
|
|||||||
3 NULL
|
3 NULL
|
||||||
set optimizer_switch=@mdev367_optimizer_switch;
|
set optimizer_switch=@mdev367_optimizer_switch;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-521 single value subselect transformation problem
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
f1
|
||||||
|
u1
|
||||||
|
u2
|
||||||
|
DROP TABLE t1;
|
||||||
# return optimizer switch changed in the beginning of this test
|
# return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
|
@@ -5229,5 +5229,18 @@ set optimizer_switch=@mdev367_optimizer_switch;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-521 single value subselect transformation problem
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (f1 char(2), PRIMARY KEY (f1)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES ('u1'),('u2');
|
||||||
|
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
FLUSH TABLES;
|
||||||
|
SELECT a.* FROM t1 a WHERE ( SELECT EXISTS ( SELECT 1 FROM t1 b WHERE b.f1 = a.f1 ) );
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # return optimizer switch changed in the beginning of this test
|
--echo # return optimizer switch changed in the beginning of this test
|
||||||
set optimizer_switch=@subselect_tmp;
|
set optimizer_switch=@subselect_tmp;
|
||||||
|
@@ -1007,11 +1007,9 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
|
|||||||
}
|
}
|
||||||
substitution= select_lex->item_list.head();
|
substitution= select_lex->item_list.head();
|
||||||
/*
|
/*
|
||||||
as far as we moved content to upper level, field which depend of
|
as far as we moved content to upper level we have to fix dependences & Co
|
||||||
'upper' select is not really dependent => we remove this dependence
|
|
||||||
*/
|
*/
|
||||||
substitution->walk(&Item::remove_dependence_processor, 0,
|
substitution->fix_after_pullout(select_lex->outer_select(), &substitution);
|
||||||
(uchar *) select_lex->outer_select());
|
|
||||||
}
|
}
|
||||||
DBUG_RETURN(false);
|
DBUG_RETURN(false);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user