outer references in subqueries in INSERT
remove inconsistent limitation
This commit is contained in:
parent
173ae63114
commit
c7320830a6
@ -751,3 +751,19 @@ REPLACE INTO v1 SET f = NULL;
|
|||||||
ERROR 22007: Truncated incorrect DOUBLE value: 'foo'
|
ERROR 22007: Truncated incorrect DOUBLE value: 'foo'
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a int default 5);
|
||||||
|
insert t1 values (1);
|
||||||
|
insert t1 values (a);
|
||||||
|
insert t1 values ((select a+1));
|
||||||
|
insert t1 set a=2;
|
||||||
|
insert t1 set a=a+2;
|
||||||
|
insert t1 set a=(select a+3);
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
5
|
||||||
|
6
|
||||||
|
2
|
||||||
|
7
|
||||||
|
8
|
||||||
|
drop table t1;
|
||||||
|
@ -612,3 +612,16 @@ CREATE VIEW v1 AS SELECT * FROM t1 WHERE f <=> 'foo' WITH CHECK OPTION;
|
|||||||
REPLACE INTO v1 SET f = NULL;
|
REPLACE INTO v1 SET f = NULL;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# outer referencesin subqueries in INSERT
|
||||||
|
#
|
||||||
|
create table t1 (a int default 5);
|
||||||
|
insert t1 values (1);
|
||||||
|
insert t1 values (a);
|
||||||
|
insert t1 values ((select a+1));
|
||||||
|
insert t1 set a=2;
|
||||||
|
insert t1 set a=a+2;
|
||||||
|
insert t1 set a=(select a+3);
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
@ -682,8 +682,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -394,8 +394,6 @@ select * from t1;
|
|||||||
# After this, only data based on old t1 records should have been added.
|
# After this, only data based on old t1 records should have been added.
|
||||||
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
INSERT INTO t1 (x) select (SELECT SUM(x)+2 FROM t1) FROM t2;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
-- error ER_BAD_FIELD_ERROR
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
let $row_count_before= `SELECT COUNT(*) FROM t1`;
|
let $row_count_before= `SELECT COUNT(*) FROM t1`;
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
let $wait_condition= SELECT COUNT(*) <> $row_count_before FROM t1;
|
let $wait_condition= SELECT COUNT(*) <> $row_count_before FROM t1;
|
||||||
|
@ -686,8 +686,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -689,8 +689,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -685,8 +685,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -688,8 +688,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -685,8 +685,6 @@ x
|
|||||||
3
|
3
|
||||||
11
|
11
|
||||||
11
|
11
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(x) FROM t2));
|
|
||||||
ERROR 42S22: Unknown column 'x' in 'field list'
|
|
||||||
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
INSERT DELAYED INTO t1 (x) VALUES ((SELECT SUM(a) FROM t2));
|
||||||
select * from t1;
|
select * from t1;
|
||||||
x
|
x
|
||||||
|
@ -1512,25 +1512,6 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE))
|
if (thd->lex->handle_list_of_derived(table_list, DT_PREPARE))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
/*
|
|
||||||
For subqueries in VALUES() we should not see the table in which we are
|
|
||||||
inserting (for INSERT ... SELECT this is done by changing table_list,
|
|
||||||
because INSERT ... SELECT share SELECT_LEX it with SELECT.
|
|
||||||
*/
|
|
||||||
if (!select_insert)
|
|
||||||
{
|
|
||||||
for (SELECT_LEX_UNIT *un= select_lex->first_inner_unit();
|
|
||||||
un;
|
|
||||||
un= un->next_unit())
|
|
||||||
{
|
|
||||||
for (SELECT_LEX *sl= un->first_select();
|
|
||||||
sl;
|
|
||||||
sl= sl->next_select())
|
|
||||||
{
|
|
||||||
sl->context.outer_context= 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (duplic == DUP_UPDATE)
|
if (duplic == DUP_UPDATE)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user