issue correct error message in case of view presence for duplicated table on update (BUG#10773)
frequently used command sequence replaced with inline function BitKeeper/etc/config: logging switching off mysql-test/r/lowercase_view.result: hided view underlying tables from error message mysql-test/r/view.result: hided view underlying tables from error message mysql-test/t/lowercase_view.test: hided view underlying tables from error message mysql-test/t/view.test: hided view underlying tables from error message sql/mysql_priv.h: subroutine which return correct error message sql/share/errmsg.txt: new error message sql/sql_base.cc: subroutine which issue correct error message in case of view presence for duplicated table on update sql/sql_delete.cc: issue correct error message in case of view presence for duplicated table on update sql/sql_insert.cc: issue correct error message in case of view presence for duplicated table on update sql/sql_parse.cc: issue correct error message in case of view presence for duplicated table on update sql/sql_update.cc: issue correct error message in case of view presence for duplicated table on update sql/sql_view.cc: frequently used command sequence replaced with inline function sql/table.cc: frequently used command sequence replaced with inline function sql/table.h: frequently used command sequence replaced with inline function
This commit is contained in:
parent
b80eb2b5a8
commit
705118d1f6
@ -24,7 +24,7 @@ description: MySQL - fast and reliable SQL database
|
|||||||
# repository is commercial it can be an internal email address or "none"
|
# repository is commercial it can be an internal email address or "none"
|
||||||
# to disable logging.
|
# to disable logging.
|
||||||
#
|
#
|
||||||
logging: logging@openlogging.org
|
logging: none
|
||||||
#
|
#
|
||||||
# If this field is set, all checkins will appear to be made by this user,
|
# If this field is set, all checkins will appear to be made by this user,
|
||||||
# in effect making this a single user package. Single user packages are
|
# in effect making this a single user package. Single user packages are
|
||||||
|
@ -16,103 +16,103 @@ create view v1Aa as select * from t1aA;
|
|||||||
create view v2aA as select * from v1aA;
|
create view v2aA as select * from v1aA;
|
||||||
create view v3Aa as select v2Aa.col1 from v2aA,t2Aa where v2Aa.col1 = t2aA.col1;
|
create view v3Aa as select v2Aa.col1 from v2aA,t2Aa where v2Aa.col1 = t2aA.col1;
|
||||||
update v2aA set col1 = (select max(col1) from v1Aa);
|
update v2aA set col1 = (select max(col1) from v1Aa);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation UPDATE on table 'v2aA'.
|
||||||
update v2Aa set col1 = (select max(col1) from t1Aa);
|
update v2Aa set col1 = (select max(col1) from t1Aa);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation UPDATE on table 'v2Aa'.
|
||||||
update v2aA set col1 = (select max(col1) from v2Aa);
|
update v2aA set col1 = (select max(col1) from v2Aa);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2aA' for update in FROM clause
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v1aA) where v2aA.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v1aA) where v2aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation UPDATE on table 'v2aA'.
|
||||||
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v1Aa) where t1aA.col1 = t2aA.col1;
|
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v1Aa) where t1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation UPDATE on table 't1aA'.
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v1aA' for update in FROM clause
|
||||||
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from v1aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from v1aA) where v2Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation UPDATE on table 't2Aa'.
|
||||||
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v1Aa) where t1Aa.col1 = t2aA.col1;
|
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v1Aa) where t1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation UPDATE on table 't2Aa'.
|
||||||
update t2Aa,v1aA set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1aA set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation UPDATE on table 't2Aa'.
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from t1aA) where v2aA.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from t1aA) where v2aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation UPDATE on table 'v2aA'.
|
||||||
update t1Aa,t2Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
update t1Aa,t2Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1Aa' for update in FROM clause
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from t1Aa) where v1aA.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from t1Aa) where v1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation UPDATE on table 'v1aA'.
|
||||||
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from t1aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from t1aA) where v2Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't2Aa' for update in FROM clause
|
||||||
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't2Aa' for update in FROM clause
|
||||||
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from t1Aa) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from t1Aa) where v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't2Aa' for update in FROM clause
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2aA' for update in FROM clause
|
||||||
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v2aA) where t1aA.col1 = t2aA.col1;
|
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v2aA) where t1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation UPDATE on table 't1aA'.
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v2Aa) where v1aA.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v2Aa) where v1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation UPDATE on table 'v1aA'.
|
||||||
update t2Aa,v2aA set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2aA set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation UPDATE on table 't2Aa'.
|
||||||
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v2aA) where t1Aa.col1 = t2aA.col1;
|
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v2aA) where t1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation UPDATE on table 't2Aa'.
|
||||||
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from v2Aa) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from v2Aa) where v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation UPDATE on table 't2Aa'.
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v1aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v1aA);
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation UPDATE on table 'v3aA'.
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from t1aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from t1aA);
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v3aA' prevents operation UPDATE on table 'v3aA'.
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v2aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v2aA);
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation UPDATE on table 'v3aA'.
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v3aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v3aA);
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v3aA' for update in FROM clause
|
||||||
delete from v2Aa where col1 = (select max(col1) from v1Aa);
|
delete from v2Aa where col1 = (select max(col1) from v1Aa);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation DELETE on table 'v2Aa'.
|
||||||
delete from v2aA where col1 = (select max(col1) from t1Aa);
|
delete from v2aA where col1 = (select max(col1) from t1Aa);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation DELETE on table 'v2aA'.
|
||||||
delete from v2Aa where col1 = (select max(col1) from v2aA);
|
delete from v2Aa where col1 = (select max(col1) from v2aA);
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2Aa' for update in FROM clause
|
||||||
delete v2Aa from v2aA,t2Aa where (select max(col1) from v1aA) > 0 and v2Aa.col1 = t2aA.col1;
|
delete v2Aa from v2aA,t2Aa where (select max(col1) from v1aA) > 0 and v2Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation DELETE on table 'v2aA'.
|
||||||
delete t1aA from t1Aa,t2Aa where (select max(col1) from v1Aa) > 0 and t1aA.col1 = t2aA.col1;
|
delete t1aA from t1Aa,t2Aa where (select max(col1) from v1Aa) > 0 and t1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation DELETE on table 't1Aa'.
|
||||||
delete v1aA from v1Aa,t2Aa where (select max(col1) from v1aA) > 0 and v1Aa.col1 = t2aA.col1;
|
delete v1aA from v1Aa,t2Aa where (select max(col1) from v1aA) > 0 and v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v1Aa' for update in FROM clause
|
||||||
delete v2aA from v2Aa,t2Aa where (select max(col1) from t1Aa) > 0 and v2aA.col1 = t2aA.col1;
|
delete v2aA from v2Aa,t2Aa where (select max(col1) from t1Aa) > 0 and v2aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation DELETE on table 'v2Aa'.
|
||||||
delete t1aA from t1Aa,t2Aa where (select max(col1) from t1aA) > 0 and t1Aa.col1 = t2aA.col1;
|
delete t1aA from t1Aa,t2Aa where (select max(col1) from t1aA) > 0 and t1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1Aa' for update in FROM clause
|
||||||
delete v1aA from v1Aa,t2Aa where (select max(col1) from t1aA) > 0 and v1aA.col1 = t2aA.col1;
|
delete v1aA from v1Aa,t2Aa where (select max(col1) from t1aA) > 0 and v1aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation DELETE on table 'v1Aa'.
|
||||||
delete v2Aa from v2aA,t2Aa where (select max(col1) from v2Aa) > 0 and v2aA.col1 = t2aA.col1;
|
delete v2Aa from v2aA,t2Aa where (select max(col1) from v2Aa) > 0 and v2aA.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2aA' for update in FROM clause
|
||||||
delete t1Aa from t1aA,t2Aa where (select max(col1) from v2Aa) > 0 and t1Aa.col1 = t2aA.col1;
|
delete t1Aa from t1aA,t2Aa where (select max(col1) from v2Aa) > 0 and t1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation DELETE on table 't1aA'.
|
||||||
delete v1Aa from v1aA,t2Aa where (select max(col1) from v2aA) > 0 and v1Aa.col1 = t2aA.col1;
|
delete v1Aa from v1aA,t2Aa where (select max(col1) from v2aA) > 0 and v1Aa.col1 = t2aA.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation DELETE on table 'v1aA'.
|
||||||
insert into v2Aa values ((select max(col1) from v1aA));
|
insert into v2Aa values ((select max(col1) from v1aA));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation INSERT on table 'v2Aa'.
|
||||||
insert into t1aA values ((select max(col1) from v1Aa));
|
insert into t1aA values ((select max(col1) from v1Aa));
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation INSERT on table 't1aA'.
|
||||||
insert into v2aA values ((select max(col1) from v1aA));
|
insert into v2aA values ((select max(col1) from v1aA));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1aA' prevents operation INSERT on table 'v2aA'.
|
||||||
insert into v2Aa values ((select max(col1) from t1Aa));
|
insert into v2Aa values ((select max(col1) from t1Aa));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation INSERT on table 'v2Aa'.
|
||||||
insert into t1aA values ((select max(col1) from t1Aa));
|
insert into t1aA values ((select max(col1) from t1Aa));
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1aA' for update in FROM clause
|
||||||
insert into v2aA values ((select max(col1) from t1aA));
|
insert into v2aA values ((select max(col1) from t1aA));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation INSERT on table 'v2aA'.
|
||||||
insert into v2Aa values ((select max(col1) from v2aA));
|
insert into v2Aa values ((select max(col1) from v2aA));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2Aa' for update in FROM clause
|
||||||
insert into t1Aa values ((select max(col1) from v2Aa));
|
insert into t1Aa values ((select max(col1) from v2Aa));
|
||||||
ERROR HY000: You can't specify target table 't1aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2Aa' prevents operation INSERT on table 't1Aa'.
|
||||||
insert into v2aA values ((select max(col1) from v2Aa));
|
insert into v2aA values ((select max(col1) from v2Aa));
|
||||||
ERROR HY000: You can't specify target table 'v2aa' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2aA' for update in FROM clause
|
||||||
insert into v3Aa (col1) values ((select max(col1) from v1Aa));
|
insert into v3Aa (col1) values ((select max(col1) from v1Aa));
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v1Aa' prevents operation INSERT on table 'v3Aa'.
|
||||||
insert into v3aA (col1) values ((select max(col1) from t1aA));
|
insert into v3aA (col1) values ((select max(col1) from t1aA));
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v3aA' prevents operation INSERT on table 'v3aA'.
|
||||||
insert into v3Aa (col1) values ((select max(col1) from v2aA));
|
insert into v3Aa (col1) values ((select max(col1) from v2aA));
|
||||||
ERROR HY000: You can't specify target table 'v3aa' for update in FROM clause
|
ERROR HY000: The definition of table 'v2aA' prevents operation INSERT on table 'v3Aa'.
|
||||||
drop view v3aA,v2Aa,v1aA;
|
drop view v3aA,v2Aa,v1aA;
|
||||||
drop table t1Aa,t2Aa;
|
drop table t1Aa,t2Aa;
|
||||||
create table t1Aa (col1 int);
|
create table t1Aa (col1 int);
|
||||||
|
@ -870,29 +870,29 @@ create view v1 as select * from t1;
|
|||||||
create view v2 as select * from v1;
|
create view v2 as select * from v1;
|
||||||
create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
|
create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
|
||||||
update v2 set col1 = (select max(col1) from v1);
|
update v2 set col1 = (select max(col1) from v1);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 'v2'.
|
||||||
update v2 set col1 = (select max(col1) from t1);
|
update v2 set col1 = (select max(col1) from t1);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 'v2'.
|
||||||
update v2 set col1 = (select max(col1) from v2);
|
update v2 set col1 = (select max(col1) from v2);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
update v2,t2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 'v2'.
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 't1'.
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 't2'.
|
||||||
update t2,t1 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
update t2,t1 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 't2'.
|
||||||
update t2,v1 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
update t2,v1 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 't2'.
|
||||||
update v2,t2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 'v2'.
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 'v1'.
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
||||||
update t2,t1 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
update t2,t1 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
||||||
@ -902,73 +902,73 @@ ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
|||||||
update v2,t2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 't1'.
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 'v1'.
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 't2'.
|
||||||
update t2,t1 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
update t2,t1 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 't2'.
|
||||||
update t2,v1 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
update t2,v1 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 't2'.
|
||||||
update v3 set v3.col1 = (select max(col1) from v1);
|
update v3 set v3.col1 = (select max(col1) from v1);
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 'v3'.
|
||||||
update v3 set v3.col1 = (select max(col1) from t1);
|
update v3 set v3.col1 = (select max(col1) from t1);
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v3' prevents operation UPDATE on table 'v3'.
|
||||||
update v3 set v3.col1 = (select max(col1) from v2);
|
update v3 set v3.col1 = (select max(col1) from v2);
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation UPDATE on table 'v3'.
|
||||||
update v3 set v3.col1 = (select max(col1) from v3);
|
update v3 set v3.col1 = (select max(col1) from v3);
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
||||||
delete from v2 where col1 = (select max(col1) from v1);
|
delete from v2 where col1 = (select max(col1) from v1);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation DELETE on table 'v2'.
|
||||||
delete from v2 where col1 = (select max(col1) from t1);
|
delete from v2 where col1 = (select max(col1) from t1);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation DELETE on table 'v2'.
|
||||||
delete from v2 where col1 = (select max(col1) from v2);
|
delete from v2 where col1 = (select max(col1) from v2);
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
delete v2 from v2,t2 where (select max(col1) from v1) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from v1) > 0 and v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation DELETE on table 'v2'.
|
||||||
delete t1 from t1,t2 where (select max(col1) from v1) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from v1) > 0 and t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation DELETE on table 't1'.
|
||||||
delete v1 from v1,t2 where (select max(col1) from v1) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from v1) > 0 and v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
||||||
delete v2 from v2,t2 where (select max(col1) from t1) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from t1) > 0 and v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation DELETE on table 'v2'.
|
||||||
delete t1 from t1,t2 where (select max(col1) from t1) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from t1) > 0 and t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||||
delete v1 from v1,t2 where (select max(col1) from t1) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from t1) > 0 and v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation DELETE on table 'v1'.
|
||||||
delete v2 from v2,t2 where (select max(col1) from v2) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from v2) > 0 and v2.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
delete t1 from t1,t2 where (select max(col1) from v2) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from v2) > 0 and t1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation DELETE on table 't1'.
|
||||||
delete v1 from v1,t2 where (select max(col1) from v2) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from v2) > 0 and v1.col1 = t2.col1;
|
||||||
ERROR HY000: You can't specify target table 'v1' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation DELETE on table 'v1'.
|
||||||
insert into v2 values ((select max(col1) from v1));
|
insert into v2 values ((select max(col1) from v1));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v2'.
|
||||||
insert into t1 values ((select max(col1) from v1));
|
insert into t1 values ((select max(col1) from v1));
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 't1'.
|
||||||
insert into v2 values ((select max(col1) from v1));
|
insert into v2 values ((select max(col1) from v1));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v2'.
|
||||||
insert into v2 values ((select max(col1) from t1));
|
insert into v2 values ((select max(col1) from t1));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v2'.
|
||||||
insert into t1 values ((select max(col1) from t1));
|
insert into t1 values ((select max(col1) from t1));
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||||
insert into v2 values ((select max(col1) from t1));
|
insert into v2 values ((select max(col1) from t1));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v2'.
|
||||||
insert into v2 values ((select max(col1) from v2));
|
insert into v2 values ((select max(col1) from v2));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
insert into t1 values ((select max(col1) from v2));
|
insert into t1 values ((select max(col1) from v2));
|
||||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 't1'.
|
||||||
insert into v2 values ((select max(col1) from v2));
|
insert into v2 values ((select max(col1) from v2));
|
||||||
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
ERROR HY000: You can't specify target table 'v2' for update in FROM clause
|
||||||
insert into v3 (col1) values ((select max(col1) from v1));
|
insert into v3 (col1) values ((select max(col1) from v1));
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v1' prevents operation INSERT on table 'v3'.
|
||||||
insert into v3 (col1) values ((select max(col1) from t1));
|
insert into v3 (col1) values ((select max(col1) from t1));
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v3' prevents operation INSERT on table 'v3'.
|
||||||
insert into v3 (col1) values ((select max(col1) from v2));
|
insert into v3 (col1) values ((select max(col1) from v2));
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v3'.
|
||||||
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
|
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
|
||||||
ERROR HY000: You can't specify target table 'v3' for update in FROM clause
|
ERROR HY000: The definition of table 'v2' prevents operation INSERT on table 'v3'.
|
||||||
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
||||||
insert into mysql.time_zone values ('', (select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
insert into mysql.time_zone values ('', (select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
||||||
ERROR 23000: Column 'Use_leap_seconds' cannot be null
|
ERROR 23000: Column 'Use_leap_seconds' cannot be null
|
||||||
@ -1327,7 +1327,7 @@ insert into v3 values (30);
|
|||||||
ERROR HY000: The target table v3 of the INSERT is not updatable
|
ERROR HY000: The target table v3 of the INSERT is not updatable
|
||||||
create view v4 as select * from v2 where 20 < (select (s1) from t1);
|
create view v4 as select * from v2 where 20 < (select (s1) from t1);
|
||||||
insert into v4 values (30);
|
insert into v4 values (30);
|
||||||
ERROR HY000: You can't specify target table 'v4' for update in FROM clause
|
ERROR HY000: The target table v4 of the INSERT is not updatable
|
||||||
drop view v4, v3, v2, v1;
|
drop view v4, v3, v2, v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
@ -1839,3 +1839,13 @@ SELECT * FROM v1;
|
|||||||
SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1)
|
SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1)
|
||||||
dkjhgd
|
dkjhgd
|
||||||
drop view v1;
|
drop view v1;
|
||||||
|
create table t1 (f59 int, f60 int, f61 int);
|
||||||
|
insert into t1 values (19,41,32);
|
||||||
|
create view v1 as select f59, f60 from t1 where f59 in
|
||||||
|
(select f59 from t1);
|
||||||
|
update v1 set f60=2345;
|
||||||
|
ERROR HY000: The target table v1 of the UPDATE is not updatable
|
||||||
|
update t1 set f60=(select max(f60) from v1);
|
||||||
|
ERROR HY000: The definition of table 'v1' prevents operation UPDATE on table 't1'.
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
@ -23,29 +23,29 @@ create table t2aA (col1 int);
|
|||||||
create view v1Aa as select * from t1aA;
|
create view v1Aa as select * from t1aA;
|
||||||
create view v2aA as select * from v1aA;
|
create view v2aA as select * from v1aA;
|
||||||
create view v3Aa as select v2Aa.col1 from v2aA,t2Aa where v2Aa.col1 = t2aA.col1;
|
create view v3Aa as select v2Aa.col1 from v2aA,t2Aa where v2Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2aA set col1 = (select max(col1) from v1Aa);
|
update v2aA set col1 = (select max(col1) from v1Aa);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2Aa set col1 = (select max(col1) from t1Aa);
|
update v2Aa set col1 = (select max(col1) from t1Aa);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v2aA set col1 = (select max(col1) from v2Aa);
|
update v2aA set col1 = (select max(col1) from v2Aa);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v1aA) where v2aA.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v1aA) where v2aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v1Aa) where t1aA.col1 = t2aA.col1;
|
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v1Aa) where t1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from v1aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from v1aA) where v2Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v1Aa) where t1Aa.col1 = t2aA.col1;
|
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v1Aa) where t1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,v1aA set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1aA set v1Aa.col1 = (select max(col1) from v1aA) where v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from t1aA) where v2aA.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from t1aA) where v2aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update t1Aa,t2Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
update t1Aa,t2Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from t1Aa) where v1aA.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from t1Aa) where v1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from t1aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2Aa set v2aA.col1 = (select max(col1) from t1aA) where v2Aa.col1 = t2aA.col1;
|
||||||
@ -55,71 +55,71 @@ update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from t1Aa) where t1aA.col1 =
|
|||||||
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from t1Aa) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from t1Aa) where v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
update v2aA,t2Aa set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v2aA) where t1aA.col1 = t2aA.col1;
|
update t1aA,t2Aa set t1Aa.col1 = (select max(col1) from v2aA) where t1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v2Aa) where v1aA.col1 = t2aA.col1;
|
update v1aA,t2Aa set v1Aa.col1 = (select max(col1) from v2Aa) where v1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,v2aA set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
update t2Aa,v2aA set v2Aa.col1 = (select max(col1) from v2aA) where v2Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v2aA) where t1Aa.col1 = t2aA.col1;
|
update t2Aa,t1Aa set t1aA.col1 = (select max(col1) from v2aA) where t1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from v2Aa) where v1Aa.col1 = t2aA.col1;
|
update t2Aa,v1Aa set v1aA.col1 = (select max(col1) from v2Aa) where v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v1aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v1aA);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from t1aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from t1aA);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v2aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v2aA);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v3aA set v3Aa.col1 = (select max(col1) from v3aA);
|
update v3aA set v3Aa.col1 = (select max(col1) from v3aA);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete from v2Aa where col1 = (select max(col1) from v1Aa);
|
delete from v2Aa where col1 = (select max(col1) from v1Aa);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete from v2aA where col1 = (select max(col1) from t1Aa);
|
delete from v2aA where col1 = (select max(col1) from t1Aa);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete from v2Aa where col1 = (select max(col1) from v2aA);
|
delete from v2Aa where col1 = (select max(col1) from v2aA);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v2Aa from v2aA,t2Aa where (select max(col1) from v1aA) > 0 and v2Aa.col1 = t2aA.col1;
|
delete v2Aa from v2aA,t2Aa where (select max(col1) from v1aA) > 0 and v2Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete t1aA from t1Aa,t2Aa where (select max(col1) from v1Aa) > 0 and t1aA.col1 = t2aA.col1;
|
delete t1aA from t1Aa,t2Aa where (select max(col1) from v1Aa) > 0 and t1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete v1aA from v1Aa,t2Aa where (select max(col1) from v1aA) > 0 and v1Aa.col1 = t2aA.col1;
|
delete v1aA from v1Aa,t2Aa where (select max(col1) from v1aA) > 0 and v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v2aA from v2Aa,t2Aa where (select max(col1) from t1Aa) > 0 and v2aA.col1 = t2aA.col1;
|
delete v2aA from v2Aa,t2Aa where (select max(col1) from t1Aa) > 0 and v2aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete t1aA from t1Aa,t2Aa where (select max(col1) from t1aA) > 0 and t1Aa.col1 = t2aA.col1;
|
delete t1aA from t1Aa,t2Aa where (select max(col1) from t1aA) > 0 and t1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v1aA from v1Aa,t2Aa where (select max(col1) from t1aA) > 0 and v1aA.col1 = t2aA.col1;
|
delete v1aA from v1Aa,t2Aa where (select max(col1) from t1aA) > 0 and v1aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete v2Aa from v2aA,t2Aa where (select max(col1) from v2Aa) > 0 and v2aA.col1 = t2aA.col1;
|
delete v2Aa from v2aA,t2Aa where (select max(col1) from v2Aa) > 0 and v2aA.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete t1Aa from t1aA,t2Aa where (select max(col1) from v2Aa) > 0 and t1Aa.col1 = t2aA.col1;
|
delete t1Aa from t1aA,t2Aa where (select max(col1) from v2Aa) > 0 and t1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v1Aa from v1aA,t2Aa where (select max(col1) from v2aA) > 0 and v1Aa.col1 = t2aA.col1;
|
delete v1Aa from v1aA,t2Aa where (select max(col1) from v2aA) > 0 and v1Aa.col1 = t2aA.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2Aa values ((select max(col1) from v1aA));
|
insert into v2Aa values ((select max(col1) from v1aA));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into t1aA values ((select max(col1) from v1Aa));
|
insert into t1aA values ((select max(col1) from v1Aa));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2aA values ((select max(col1) from v1aA));
|
insert into v2aA values ((select max(col1) from v1aA));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2Aa values ((select max(col1) from t1Aa));
|
insert into v2Aa values ((select max(col1) from t1Aa));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into t1aA values ((select max(col1) from t1Aa));
|
insert into t1aA values ((select max(col1) from t1Aa));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2aA values ((select max(col1) from t1aA));
|
insert into v2aA values ((select max(col1) from t1aA));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into v2Aa values ((select max(col1) from v2aA));
|
insert into v2Aa values ((select max(col1) from v2aA));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into t1Aa values ((select max(col1) from v2Aa));
|
insert into t1Aa values ((select max(col1) from v2Aa));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into v2aA values ((select max(col1) from v2Aa));
|
insert into v2aA values ((select max(col1) from v2Aa));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3Aa (col1) values ((select max(col1) from v1Aa));
|
insert into v3Aa (col1) values ((select max(col1) from v1Aa));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3aA (col1) values ((select max(col1) from t1aA));
|
insert into v3aA (col1) values ((select max(col1) from t1aA));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3Aa (col1) values ((select max(col1) from v2aA));
|
insert into v3Aa (col1) values ((select max(col1) from v2aA));
|
||||||
drop view v3aA,v2Aa,v1aA;
|
drop view v3aA,v2Aa,v1aA;
|
||||||
drop table t1Aa,t2Aa;
|
drop table t1Aa,t2Aa;
|
||||||
|
@ -827,29 +827,29 @@ create table t2 (col1 int);
|
|||||||
create view v1 as select * from t1;
|
create view v1 as select * from t1;
|
||||||
create view v2 as select * from v1;
|
create view v2 as select * from v1;
|
||||||
create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
|
create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2 set col1 = (select max(col1) from v1);
|
update v2 set col1 = (select max(col1) from v1);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2 set col1 = (select max(col1) from t1);
|
update v2 set col1 = (select max(col1) from t1);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v2 set col1 = (select max(col1) from v2);
|
update v2 set col1 = (select max(col1) from v2);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2,t2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,t1 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
update t2,t1 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,v1 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
update t2,v1 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v2,t2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
|
||||||
@ -859,74 +859,74 @@ update t2,t1 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
|||||||
update t2,v1 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
update t2,v1 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v2,t2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
update v2,t2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t1,t2 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
update t1,t2 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v1,t2 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
update v1,t2 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,v2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
update t2,v2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,t1 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
update t2,t1 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update t2,v1 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
update t2,v1 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3 set v3.col1 = (select max(col1) from v1);
|
update v3 set v3.col1 = (select max(col1) from v1);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3 set v3.col1 = (select max(col1) from t1);
|
update v3 set v3.col1 = (select max(col1) from t1);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
update v3 set v3.col1 = (select max(col1) from v2);
|
update v3 set v3.col1 = (select max(col1) from v2);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
update v3 set v3.col1 = (select max(col1) from v3);
|
update v3 set v3.col1 = (select max(col1) from v3);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete from v2 where col1 = (select max(col1) from v1);
|
delete from v2 where col1 = (select max(col1) from v1);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete from v2 where col1 = (select max(col1) from t1);
|
delete from v2 where col1 = (select max(col1) from t1);
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete from v2 where col1 = (select max(col1) from v2);
|
delete from v2 where col1 = (select max(col1) from v2);
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v2 from v2,t2 where (select max(col1) from v1) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from v1) > 0 and v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete t1 from t1,t2 where (select max(col1) from v1) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from v1) > 0 and t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete v1 from v1,t2 where (select max(col1) from v1) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from v1) > 0 and v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v2 from v2,t2 where (select max(col1) from t1) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from t1) > 0 and v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete t1 from t1,t2 where (select max(col1) from t1) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from t1) > 0 and t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v1 from v1,t2 where (select max(col1) from t1) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from t1) > 0 and v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1093
|
||||||
delete v2 from v2,t2 where (select max(col1) from v2) > 0 and v2.col1 = t2.col1;
|
delete v2 from v2,t2 where (select max(col1) from v2) > 0 and v2.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete t1 from t1,t2 where (select max(col1) from v2) > 0 and t1.col1 = t2.col1;
|
delete t1 from t1,t2 where (select max(col1) from v2) > 0 and t1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
delete v1 from v1,t2 where (select max(col1) from v2) > 0 and v1.col1 = t2.col1;
|
delete v1 from v1,t2 where (select max(col1) from v2) > 0 and v1.col1 = t2.col1;
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2 values ((select max(col1) from v1));
|
insert into v2 values ((select max(col1) from v1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into t1 values ((select max(col1) from v1));
|
insert into t1 values ((select max(col1) from v1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2 values ((select max(col1) from v1));
|
insert into v2 values ((select max(col1) from v1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2 values ((select max(col1) from t1));
|
insert into v2 values ((select max(col1) from t1));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into t1 values ((select max(col1) from t1));
|
insert into t1 values ((select max(col1) from t1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v2 values ((select max(col1) from t1));
|
insert into v2 values ((select max(col1) from t1));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into v2 values ((select max(col1) from v2));
|
insert into v2 values ((select max(col1) from v2));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into t1 values ((select max(col1) from v2));
|
insert into t1 values ((select max(col1) from v2));
|
||||||
-- error 1093
|
-- error 1093
|
||||||
insert into v2 values ((select max(col1) from v2));
|
insert into v2 values ((select max(col1) from v2));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3 (col1) values ((select max(col1) from v1));
|
insert into v3 (col1) values ((select max(col1) from v1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3 (col1) values ((select max(col1) from t1));
|
insert into v3 (col1) values ((select max(col1) from t1));
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3 (col1) values ((select max(col1) from v2));
|
insert into v3 (col1) values ((select max(col1) from v2));
|
||||||
#check with TZ tables in list
|
#check with TZ tables in list
|
||||||
-- error 1093
|
-- error 1423
|
||||||
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
|
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
|
||||||
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
|
||||||
-- error 1048
|
-- error 1048
|
||||||
@ -1242,7 +1242,7 @@ create view v3 as select * from t1 where 20 < (select (s1) from v2);
|
|||||||
-- error 1288
|
-- error 1288
|
||||||
insert into v3 values (30);
|
insert into v3 values (30);
|
||||||
create view v4 as select * from v2 where 20 < (select (s1) from t1);
|
create view v4 as select * from v2 where 20 < (select (s1) from t1);
|
||||||
-- error 1093
|
-- error 1288
|
||||||
insert into v4 values (30);
|
insert into v4 values (30);
|
||||||
drop view v4, v3, v2, v1;
|
drop view v4, v3, v2, v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -1685,3 +1685,18 @@ drop view v1;
|
|||||||
CREATE VIEW v1 AS SELECT SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1);
|
CREATE VIEW v1 AS SELECT SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1);
|
||||||
SELECT * FROM v1;
|
SELECT * FROM v1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# hide underlying tables names in case of imposibility to update (BUG#10773)
|
||||||
|
#
|
||||||
|
create table t1 (f59 int, f60 int, f61 int);
|
||||||
|
insert into t1 values (19,41,32);
|
||||||
|
create view v1 as select f59, f60 from t1 where f59 in
|
||||||
|
(select f59 from t1);
|
||||||
|
-- error 1288
|
||||||
|
update v1 set f60=2345;
|
||||||
|
-- error 1423
|
||||||
|
update t1 set f60=(select max(f60) from v1);
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -882,6 +882,9 @@ void add_join_on(TABLE_LIST *b,Item *expr);
|
|||||||
void add_join_natural(TABLE_LIST *a,TABLE_LIST *b);
|
void add_join_natural(TABLE_LIST *a,TABLE_LIST *b);
|
||||||
bool add_proc_to_list(THD *thd, Item *item);
|
bool add_proc_to_list(THD *thd, Item *item);
|
||||||
TABLE *unlink_open_table(THD *thd,TABLE *list,TABLE *find);
|
TABLE *unlink_open_table(THD *thd,TABLE *list,TABLE *find);
|
||||||
|
void update_non_unique_table_error(TABLE_LIST *update,
|
||||||
|
const char *operation,
|
||||||
|
TABLE_LIST *duplicate);
|
||||||
|
|
||||||
SQL_SELECT *make_select(TABLE *head, table_map const_tables,
|
SQL_SELECT *make_select(TABLE *head, table_map const_tables,
|
||||||
table_map read_tables, COND *conds,
|
table_map read_tables, COND *conds,
|
||||||
|
@ -5358,3 +5358,5 @@ ER_STMT_HAS_NO_OPEN_CURSOR
|
|||||||
eng "The statement (%lu) has no open cursor."
|
eng "The statement (%lu) has no open cursor."
|
||||||
ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
|
ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
|
||||||
eng "Explicit or implicit commit is not allowed in stored function or trigger."
|
eng "Explicit or implicit commit is not allowed in stored function or trigger."
|
||||||
|
ER_VIEW_PREVENT_UPDATE
|
||||||
|
eng "The definition of table '%-.64s' prevents operation %s on table '%-.64s'."
|
||||||
|
@ -775,6 +775,60 @@ TABLE_LIST* unique_table(TABLE_LIST *table, TABLE_LIST *table_list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Issue correct error message in case we found 2 duplicate tables which
|
||||||
|
prevent some update operation
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
update_non_unique_table_error()
|
||||||
|
update table which we try to update
|
||||||
|
operation name of update operation
|
||||||
|
duplicate duplicate table which we found
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
here we hide view underlying tables if we have them
|
||||||
|
*/
|
||||||
|
|
||||||
|
void update_non_unique_table_error(TABLE_LIST *update,
|
||||||
|
const char *operation,
|
||||||
|
TABLE_LIST *duplicate)
|
||||||
|
{
|
||||||
|
update= update->top_table();
|
||||||
|
duplicate= duplicate->top_table();
|
||||||
|
if (!update->view || !duplicate->view ||
|
||||||
|
update->view == duplicate->view ||
|
||||||
|
update->view_name.length != duplicate->view_name.length ||
|
||||||
|
update->view_db.length != duplicate->view_db.length ||
|
||||||
|
my_strcasecmp(table_alias_charset,
|
||||||
|
update->view_name.str, duplicate->view_name.str) != 0 ||
|
||||||
|
my_strcasecmp(table_alias_charset,
|
||||||
|
update->view_db.str, duplicate->view_db.str) != 0)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
it is not the same view repeated (but it can be parts of the same copy
|
||||||
|
of view), so we have to hide underlying tables.
|
||||||
|
*/
|
||||||
|
if (update->view)
|
||||||
|
{
|
||||||
|
if (update->view == duplicate->view)
|
||||||
|
my_error(ER_NON_UPDATABLE_TABLE, MYF(0), update->alias, operation);
|
||||||
|
else
|
||||||
|
my_error(ER_VIEW_PREVENT_UPDATE, MYF(0),
|
||||||
|
(duplicate->view ? duplicate->alias : update->alias),
|
||||||
|
operation, update->alias);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (duplicate->view)
|
||||||
|
{
|
||||||
|
my_error(ER_VIEW_PREVENT_UPDATE, MYF(0), duplicate->alias, operation,
|
||||||
|
update->alias);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my_error(ER_UPDATE_TABLE_USED, MYF(0), update->alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name)
|
TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name)
|
||||||
{
|
{
|
||||||
char key[MAX_DBKEY_LENGTH];
|
char key[MAX_DBKEY_LENGTH];
|
||||||
@ -3212,9 +3266,7 @@ bool setup_tables(THD *thd, TABLE_LIST *tables, Item **conds,
|
|||||||
{
|
{
|
||||||
TABLE *table= table_list->table;
|
TABLE *table= table_list->table;
|
||||||
if (first_select_table &&
|
if (first_select_table &&
|
||||||
(table_list->belong_to_view ?
|
table_list->top_table() == first_select_table)
|
||||||
table_list->belong_to_view :
|
|
||||||
table_list) == first_select_table)
|
|
||||||
{
|
{
|
||||||
/* new counting for SELECT of INSERT ... SELECT command */
|
/* new counting for SELECT of INSERT ... SELECT command */
|
||||||
first_select_table= 0;
|
first_select_table= 0;
|
||||||
|
@ -309,11 +309,14 @@ bool mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds)
|
|||||||
my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "DELETE");
|
my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "DELETE");
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
if (unique_table(table_list, table_list->next_global))
|
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(table_list, table_list->next_global)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(table_list, "DELETE", duplicate);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
select_lex->fix_prepare_information(thd, conds);
|
select_lex->fix_prepare_information(thd, conds);
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
@ -393,13 +396,17 @@ bool mysql_multi_delete_prepare(THD *thd)
|
|||||||
Check that table from which we delete is not used somewhere
|
Check that table from which we delete is not used somewhere
|
||||||
inside subqueries/view.
|
inside subqueries/view.
|
||||||
*/
|
*/
|
||||||
if (unique_table(target_tbl->correspondent_table, lex->query_tables))
|
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0),
|
TABLE_LIST *duplicate;
|
||||||
target_tbl->correspondent_table->table_name);
|
if ((duplicate= unique_table(target_tbl->correspondent_table,
|
||||||
|
lex->query_tables)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(target_tbl->correspondent_table,
|
||||||
|
"DELETE", duplicate);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -778,11 +778,15 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, TABLE *table,
|
|||||||
if (!table)
|
if (!table)
|
||||||
table= table_list->table;
|
table= table_list->table;
|
||||||
|
|
||||||
if (!select_insert && unique_table(table_list, table_list->next_global))
|
if (!select_insert)
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(table_list, table_list->next_global)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(table_list, "INSERT", duplicate);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (duplic == DUP_UPDATE || duplic == DUP_REPLACE)
|
if (duplic == DUP_UPDATE || duplic == DUP_REPLACE)
|
||||||
table->file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY);
|
table->file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY);
|
||||||
thd->lex->select_lex.first_execution= 0;
|
thd->lex->select_lex.first_execution= 0;
|
||||||
|
@ -2845,13 +2845,16 @@ mysql_execute_command(THD *thd)
|
|||||||
Is table which we are changing used somewhere in other parts
|
Is table which we are changing used somewhere in other parts
|
||||||
of query
|
of query
|
||||||
*/
|
*/
|
||||||
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE))
|
||||||
unique_table(create_table, select_tables))
|
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), create_table->table_name);
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(create_table, select_tables)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(create_table, "CREATE", duplicate);
|
||||||
res= 1;
|
res= 1;
|
||||||
goto end_with_restart_wait;
|
goto end_with_restart_wait;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* If we create merge table, we have to test tables in merge, too */
|
/* If we create merge table, we have to test tables in merge, too */
|
||||||
if (lex->create_info.used_fields & HA_CREATE_USED_UNION)
|
if (lex->create_info.used_fields & HA_CREATE_USED_UNION)
|
||||||
{
|
{
|
||||||
@ -2860,9 +2863,10 @@ mysql_execute_command(THD *thd)
|
|||||||
tab;
|
tab;
|
||||||
tab= tab->next_local)
|
tab= tab->next_local)
|
||||||
{
|
{
|
||||||
if (unique_table(tab, select_tables))
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(tab, select_tables)))
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), tab->table_name);
|
update_non_unique_table_error(tab, "CREATE", duplicate);
|
||||||
res= 1;
|
res= 1;
|
||||||
goto end_with_restart_wait;
|
goto end_with_restart_wait;
|
||||||
}
|
}
|
||||||
|
@ -566,11 +566,15 @@ bool mysql_prepare_update(THD *thd, TABLE_LIST *table_list,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
/* Check that we are not using table that we are updating in a sub select */
|
/* Check that we are not using table that we are updating in a sub select */
|
||||||
if (unique_table(table_list, table_list->next_global))
|
|
||||||
{
|
{
|
||||||
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(table_list, table_list->next_global)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(table_list, "UPDATE", duplicate);
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
|
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
select_lex->fix_prepare_information(thd, conds);
|
select_lex->fix_prepare_information(thd, conds);
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
@ -781,7 +785,7 @@ bool mysql_multi_update_prepare(THD *thd)
|
|||||||
{
|
{
|
||||||
TABLE *table= tl->table;
|
TABLE *table= tl->table;
|
||||||
TABLE_LIST *tlist;
|
TABLE_LIST *tlist;
|
||||||
if (!(tlist= tl->belong_to_view ? tl->belong_to_view : tl)->derived)
|
if (!(tlist= tl->top_table())->derived)
|
||||||
{
|
{
|
||||||
tlist->grant.want_privilege=
|
tlist->grant.want_privilege=
|
||||||
(SELECT_ACL & ~tlist->grant.privilege);
|
(SELECT_ACL & ~tlist->grant.privilege);
|
||||||
@ -790,13 +794,16 @@ bool mysql_multi_update_prepare(THD *thd)
|
|||||||
DBUG_PRINT("info", ("table: %s want_privilege: %u", tl->alias,
|
DBUG_PRINT("info", ("table: %s want_privilege: %u", tl->alias,
|
||||||
(uint) table->grant.want_privilege));
|
(uint) table->grant.want_privilege));
|
||||||
if (tl->lock_type != TL_READ &&
|
if (tl->lock_type != TL_READ &&
|
||||||
tl->lock_type != TL_READ_NO_INSERT &&
|
tl->lock_type != TL_READ_NO_INSERT)
|
||||||
unique_table(tl, table_list))
|
|
||||||
{
|
{
|
||||||
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
|
TABLE_LIST *duplicate;
|
||||||
|
if ((duplicate= unique_table(tl, table_list)))
|
||||||
|
{
|
||||||
|
update_non_unique_table_error(table_list, "UPDATE", duplicate);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (thd->fill_derived_tables() &&
|
if (thd->fill_derived_tables() &&
|
||||||
mysql_handle_derived(lex, &mysql_derived_filling))
|
mysql_handle_derived(lex, &mysql_derived_filling))
|
||||||
|
@ -720,9 +720,7 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
|
|||||||
}
|
}
|
||||||
if (!res && !thd->is_fatal_error)
|
if (!res && !thd->is_fatal_error)
|
||||||
{
|
{
|
||||||
TABLE_LIST *top_view= (table->belong_to_view ?
|
TABLE_LIST *top_view= table->top_table();
|
||||||
table->belong_to_view :
|
|
||||||
table);
|
|
||||||
TABLE_LIST *view_tables= lex->query_tables;
|
TABLE_LIST *view_tables= lex->query_tables;
|
||||||
TABLE_LIST *view_tables_tail= 0;
|
TABLE_LIST *view_tables_tail= 0;
|
||||||
TABLE_LIST *tbl;
|
TABLE_LIST *tbl;
|
||||||
@ -1072,8 +1070,7 @@ bool check_key_in_view(THD *thd, TABLE_LIST *view)
|
|||||||
thd->lex->select_lex.select_limit == 0)
|
thd->lex->select_lex.select_limit == 0)
|
||||||
DBUG_RETURN(FALSE); /* it is normal table or query without LIMIT */
|
DBUG_RETURN(FALSE); /* it is normal table or query without LIMIT */
|
||||||
table= view->table;
|
table= view->table;
|
||||||
if (view->belong_to_view)
|
view= view->top_table();
|
||||||
view= view->belong_to_view;
|
|
||||||
trans= view->field_translation;
|
trans= view->field_translation;
|
||||||
key_info_end= (key_info= table->key_info)+ table->s->keys;
|
key_info_end= (key_info= table->key_info)+ table->s->keys;
|
||||||
|
|
||||||
|
@ -2118,7 +2118,7 @@ int st_table_list::view_check_option(THD *thd, bool ignore_failure)
|
|||||||
{
|
{
|
||||||
if (check_option && check_option->val_int() == 0)
|
if (check_option && check_option->val_int() == 0)
|
||||||
{
|
{
|
||||||
TABLE_LIST *view= (belong_to_view ? belong_to_view : this);
|
TABLE_LIST *view= top_table();
|
||||||
if (ignore_failure)
|
if (ignore_failure)
|
||||||
{
|
{
|
||||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
@ -459,6 +459,8 @@ typedef struct st_table_list
|
|||||||
st_table_list *view);
|
st_table_list *view);
|
||||||
bool set_insert_values(MEM_ROOT *mem_root);
|
bool set_insert_values(MEM_ROOT *mem_root);
|
||||||
st_table_list *find_underlying_table(TABLE *table);
|
st_table_list *find_underlying_table(TABLE *table);
|
||||||
|
inline st_table_list *top_table()
|
||||||
|
{ return belong_to_view ? belong_to_view : this; }
|
||||||
} TABLE_LIST;
|
} TABLE_LIST;
|
||||||
|
|
||||||
class Item;
|
class Item;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user