mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Allowing NULL values in UNION's with first SELECT having only NOT NULL
columns.
This commit is contained in:
@ -203,3 +203,30 @@ No tables used
|
|||||||
select 1 as a,(select a union select a);
|
select 1 as a,(select a union select a);
|
||||||
a (select a union select a)
|
a (select a union select a)
|
||||||
1 1
|
1 1
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
CREATE TABLE t1 ( id int(3) unsigned default '0') TYPE=MyISAM;
|
||||||
|
INSERT INTO t1 (id) VALUES("1");
|
||||||
|
CREATE TABLE t2 ( id int(3) unsigned default '0', id_master int(5) default '0', text1 varchar(5) default NULL, text2 varchar(5) default NULL) TYPE=MyISAM;
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("1", "1",
|
||||||
|
"foo1", "bar1");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("2", "1",
|
||||||
|
"foo2", "bar2");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("3", "1", NULL,
|
||||||
|
"bar3");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("4", "1",
|
||||||
|
"foo4", "bar4");
|
||||||
|
SELECT 1 AS id_master, 1 AS id, NULL AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
|
||||||
|
id_master id text1 text2
|
||||||
|
1 1 NULL ABCDE
|
||||||
|
1 1 bar1
|
||||||
|
1 2 bar2
|
||||||
|
1 3 NULL bar3
|
||||||
|
1 4 bar4
|
||||||
|
SELECT 1 AS id_master, 1 AS id, 'ABCDE' AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
|
||||||
|
id_master id text1 text2
|
||||||
|
1 1 ABCDE ABCDE
|
||||||
|
1 1 foo1 bar1
|
||||||
|
1 2 foo2 bar2
|
||||||
|
1 3 NULL bar3
|
||||||
|
1 4 foo4 bar4
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
@ -107,3 +107,20 @@ drop table t1,t2;
|
|||||||
--error 1096
|
--error 1096
|
||||||
select * union select 1;
|
select * union select 1;
|
||||||
select 1 as a,(select a union select a);
|
select 1 as a,(select a union select a);
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
--enable_warnings
|
||||||
|
CREATE TABLE t1 ( id int(3) unsigned default '0') TYPE=MyISAM;
|
||||||
|
INSERT INTO t1 (id) VALUES("1");
|
||||||
|
CREATE TABLE t2 ( id int(3) unsigned default '0', id_master int(5) default '0', text1 varchar(5) default NULL, text2 varchar(5) default NULL) TYPE=MyISAM;
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("1", "1",
|
||||||
|
"foo1", "bar1");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("2", "1",
|
||||||
|
"foo2", "bar2");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("3", "1", NULL,
|
||||||
|
"bar3");
|
||||||
|
INSERT INTO t2 (id, id_master, text1, text2) VALUES("4", "1",
|
||||||
|
"foo4", "bar4");
|
||||||
|
SELECT 1 AS id_master, 1 AS id, NULL AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
|
||||||
|
SELECT 1 AS id_master, 1 AS id, 'ABCDE' AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master;
|
||||||
|
drop table if exists t1,t2;
|
||||||
|
@ -146,7 +146,10 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result,
|
|||||||
if (setup_tables(first_table) ||
|
if (setup_tables(first_table) ||
|
||||||
setup_wild(thd, first_table, sl->item_list, 0, sl->with_wild))
|
setup_wild(thd, first_table, sl->item_list, 0, sl->with_wild))
|
||||||
goto err;
|
goto err;
|
||||||
|
List_iterator<Item> it(sl->item_list);
|
||||||
|
Item *item;
|
||||||
|
while((item=it++))
|
||||||
|
item->maybe_null=1;
|
||||||
item_list= sl->item_list;
|
item_list= sl->item_list;
|
||||||
sl->with_wild= 0;
|
sl->with_wild= 0;
|
||||||
if (setup_ref_array(thd, &sl->ref_pointer_array,
|
if (setup_ref_array(thd, &sl->ref_pointer_array,
|
||||||
|
Reference in New Issue
Block a user