mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
postmerge fix
This commit is contained in:
@@ -1347,8 +1347,8 @@ insert into v1 values(3);
|
||||
ERROR HY000: CHECK OPTION failed 'test.v1'
|
||||
insert ignore into v1 values (2),(3),(0);
|
||||
Warnings:
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
@@ -1361,8 +1361,8 @@ create table t2 (a int);
|
||||
insert into t2 values (2),(3),(0);
|
||||
insert ignore into v1 SELECT a from t2;
|
||||
Warnings:
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
@@ -1384,7 +1384,7 @@ a
|
||||
update v1 set a=a+1;
|
||||
update ignore v1,t2 set v1.a=v1.a+1 where v1.a=t2.a;
|
||||
Warnings:
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
@@ -1418,7 +1418,7 @@ insert into v1 values (1) on duplicate key update a=2;
|
||||
ERROR HY000: CHECK OPTION failed 'test.v1'
|
||||
insert ignore into v1 values (1) on duplicate key update a=2;
|
||||
Warnings:
|
||||
Error 1359 CHECK OPTION failed 'test.v1'
|
||||
Error 1365 CHECK OPTION failed 'test.v1'
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
|
||||
@@ -394,7 +394,7 @@ drop table t1;
|
||||
# syntax compatibility
|
||||
#
|
||||
create table t1 (a int);
|
||||
-- error 1358
|
||||
-- error 1364
|
||||
create view v1 as select distinct a from t1 WITH CHECK OPTION;
|
||||
create view v1 as select a from t1 WITH CHECK OPTION;
|
||||
create view v2 as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
@@ -1318,7 +1318,7 @@ create table t1 (a int);
|
||||
create view v1 as select * from t1 where a < 2 with check option;
|
||||
# simple insert
|
||||
insert into v1 values(1);
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v1 values(3);
|
||||
# simple insert with ignore
|
||||
insert ignore into v1 values (2),(3),(0);
|
||||
@@ -1327,7 +1327,7 @@ select * from t1;
|
||||
delete from t1;
|
||||
# INSERT SELECT test
|
||||
insert into v1 SELECT 1;
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v1 SELECT 3;
|
||||
# prepare data for next check
|
||||
create table t2 (a int);
|
||||
@@ -1337,7 +1337,7 @@ insert ignore into v1 SELECT a from t2;
|
||||
select * from t1;
|
||||
#simple UPDATE test
|
||||
update v1 set a=-1 where a=0;
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
update v1 set a=2 where a=1;
|
||||
select * from t1;
|
||||
# prepare data for next check
|
||||
@@ -1364,12 +1364,12 @@ create view v2 as select * from v1 where a > 0 with local check option;
|
||||
create view v3 as select * from v1 where a > 0 with cascaded check option;
|
||||
insert into v2 values (1);
|
||||
insert into v3 values (1);
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v2 values (0);
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v3 values (0);
|
||||
insert into v2 values (2);
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v3 values (2);
|
||||
select * from t1;
|
||||
drop view v3,v2,v1;
|
||||
@@ -1381,7 +1381,7 @@ drop table t1;
|
||||
create table t1 (a int, primary key (a));
|
||||
create view v1 as select * from t1 where a < 2 with check option;
|
||||
insert into v1 values (1) on duplicate key update a=2;
|
||||
-- error 1359
|
||||
-- error 1365
|
||||
insert into v1 values (1) on duplicate key update a=2;
|
||||
insert ignore into v1 values (1) on duplicate key update a=2;
|
||||
select * from t1;
|
||||
|
||||
68
sql/table.cc
68
sql/table.cc
@@ -1602,40 +1602,48 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds)
|
||||
check_option= and_conds(check_option, ancestor->check_option);
|
||||
}
|
||||
}
|
||||
/* Go up to join tree and try to find left join */
|
||||
for (; tbl; tbl= tbl->embedding)
|
||||
|
||||
/*
|
||||
check that it is not VIEW in which we insert with INSERT SELECT
|
||||
(in this case we can't add view WHERE condition to main SELECT_LEX)
|
||||
*/
|
||||
if (!no_where_clause)
|
||||
{
|
||||
if (tbl->outer_join)
|
||||
/* Go up to join tree and try to find left join */
|
||||
for (; tbl; tbl= tbl->embedding)
|
||||
{
|
||||
/*
|
||||
Store WHERE condition to ON expression for outer join, because we
|
||||
can't use WHERE to correctly execute jeft joins on VIEWs and this
|
||||
expression will not be moved to WHERE condition (i.e. will be clean
|
||||
correctly for PS/SP)
|
||||
*/
|
||||
tbl->on_expr= and_conds(tbl->on_expr, where);
|
||||
break;
|
||||
if (tbl->outer_join)
|
||||
{
|
||||
/*
|
||||
Store WHERE condition to ON expression for outer join, because
|
||||
we can't use WHERE to correctly execute jeft joins on VIEWs and
|
||||
this expression will not be moved to WHERE condition (i.e. will
|
||||
be clean correctly for PS/SP)
|
||||
*/
|
||||
tbl->on_expr= and_conds(tbl->on_expr, where);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tbl == 0)
|
||||
{
|
||||
if (outer_join)
|
||||
if (tbl == 0)
|
||||
{
|
||||
/*
|
||||
Store WHERE condition to ON expression for outer join, because we
|
||||
can't use WHERE to correctly execute jeft joins on VIEWs and this
|
||||
expression will not be moved to WHERE condition (i.e. will be
|
||||
clean correctly for PS/SP)
|
||||
*/
|
||||
on_expr= and_conds(on_expr, where);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
It is conds of JOIN, but it will be stored in
|
||||
st_select_lex::prep_where for next reexecution
|
||||
*/
|
||||
*conds= and_conds(*conds, where);
|
||||
if (outer_join)
|
||||
{
|
||||
/*
|
||||
Store WHERE condition to ON expression for outer join, because
|
||||
we can't use WHERE to correctly execute jeft joins on VIEWs and
|
||||
this expression will not be moved to WHERE condition (i.e. will
|
||||
be clean correctly for PS/SP)
|
||||
*/
|
||||
on_expr= and_conds(on_expr, where);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
It is conds of JOIN, but it will be stored in
|
||||
st_select_lex::prep_where for next reexecution
|
||||
*/
|
||||
*conds= and_conds(*conds, where);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user