mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
e66cd71698
Column names weren't checked for uniqueness for subqueries. Code for names uniqueness checking used for view creation moved into separate function named check_duplicate_names(). It's called on preparation of subqueries to check uniqueness of names. If duplicate names are found then error is raised. sql/sql_derived.cc: Fix bug #11864 non unique names are allowed in subquery Added check for names uniqueness in select list. sql/sql_view.cc: Fix bug #11864 non unique names are allowed in subquery Code for checking uniqueness of names in item list moved into separate function to make in available for use from other places. sql/sql_view.h: Fix bug #11864 non unique names are allowed in subquery Added check_duplicate_names() function prototype. mysql-test/t/derived.test: Fixed test case results after bug fix #11864 Added test case for bug#11864 non unique names are allowed in subquery. mysql-test/t/select_safe.test: Fixed test case results after bug fix #11864 mysql-test/r/derived.result: Added test case for bug #11864 non unique names are allowed in subquery. Fixed test case results after bug fix #11864 mysql-test/r/select_safe.result: Fixed test case results after bug fix #11864
90 lines
2.3 KiB
Text
90 lines
2.3 KiB
Text
#
|
|
# test of safe selects
|
|
#
|
|
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9;
|
|
create table t1 (a int auto_increment primary key, b char(20));
|
|
insert into t1 values(1,"test");
|
|
SELECT SQL_BUFFER_RESULT * from t1;
|
|
update t1 set b="a" where a=1;
|
|
delete from t1 where a=1;
|
|
insert into t1 values(1,"test"),(2,"test2");
|
|
SELECT SQL_BUFFER_RESULT * from t1;
|
|
update t1 set b="a" where a=1;
|
|
select 1 from t1,t1 as t2,t1 as t3;
|
|
|
|
# The following should give errors:
|
|
--error 1175
|
|
update t1 set b="a";
|
|
--error 1175
|
|
update t1 set b="a" where b="test";
|
|
--error 1175
|
|
delete from t1;
|
|
--error 1175
|
|
delete from t1 where b="test";
|
|
--error 1175
|
|
delete from t1 where a+0=1;
|
|
--error 1104
|
|
select 1 from t1,t1 as t2,t1 as t3,t1 as t4,t1 as t5;
|
|
|
|
# The following should be ok:
|
|
update t1 set b="a" limit 1;
|
|
update t1 set b="a" where b="b" limit 2;
|
|
delete from t1 where b="test" limit 1;
|
|
delete from t1 where a+0=1 limit 2;
|
|
|
|
# Test SQL_BIG_SELECTS
|
|
|
|
alter table t1 add key b (b);
|
|
SET MAX_JOIN_SIZE=2;
|
|
SELECT @@MAX_JOIN_SIZE, @@SQL_BIG_SELECTS;
|
|
insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a");
|
|
--error 1104
|
|
SELECT * from t1 order by a;
|
|
SET SQL_BIG_SELECTS=1;
|
|
SELECT * from t1 order by a;
|
|
SET MAX_JOIN_SIZE=2;
|
|
--error 1104
|
|
SELECT * from t1;
|
|
SET MAX_JOIN_SIZE=DEFAULT;
|
|
SELECT * from t1;
|
|
|
|
#
|
|
# Test MAX_SEEKS_FOR_KEY
|
|
#
|
|
analyze table t1;
|
|
insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a");
|
|
explain select STRAIGHT_JOIN * from t1,t1 as t2 where t1.b=t2.b;
|
|
set MAX_SEEKS_FOR_KEY=1;
|
|
explain select STRAIGHT_JOIN * from t1,t1 as t2 where t1.b=t2.b;
|
|
SET MAX_SEEKS_FOR_KEY=DEFAULT;
|
|
|
|
drop table t1;
|
|
|
|
# BUG#8726
|
|
create table t1 (a int);
|
|
insert into t1 values (1),(2),(3),(4),(5);
|
|
insert into t1 select * from t1;
|
|
insert into t1 select * from t1;
|
|
insert into t1 select * from t1;
|
|
|
|
set local max_join_size=8;
|
|
--error 1104
|
|
select * from (select * from t1) x;
|
|
|
|
set local max_join_size=1;
|
|
--error 1104
|
|
select * from (select a.a as aa, b.a as ba from t1 a, t1 b) x;
|
|
|
|
set local max_join_size=1;
|
|
--error 1104
|
|
select * from (select 1 union select 2 union select 3) x;
|
|
drop table t1;
|
|
|
|
SET SQL_SAFE_UPDATES=0,SQL_SELECT_LIMIT=DEFAULT, SQL_MAX_JOIN_SIZE=DEFAULT;
|
|
|
|
# End of 4.1 tests
|