mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into mockturtle.local:/home/dlenev/src/mysql-5.1-merge mysql-test/t/disabled.def: Auto merged mysql-test/t/ps.test: Auto merged sql/sql_view.cc: Auto merged
This commit is contained in:
62
mysql-test/t/alter_table-big.test
Normal file
62
mysql-test/t/alter_table-big.test
Normal file
@@ -0,0 +1,62 @@
|
||||
# In order to be more or less robust test for bug#25044 has to take
|
||||
# significant time (e.g. about 9 seconds on my (Dmitri's) computer)
|
||||
# so we probably want execute it only in --big-test mode.
|
||||
--source include/big_test.inc
|
||||
--source include/have_binlog_format_mixed_or_statement.inc
|
||||
|
||||
|
||||
#
|
||||
# Test for bug #25044 "ALTER TABLE ... ENABLE KEYS acquires global
|
||||
# 'opening tables' lock".
|
||||
#
|
||||
# ALTER TABLE ... ENABLE KEYS should not acquire LOCK_open mutex for
|
||||
# the whole its duration as it prevents other queries from execution.
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
connect (addconroot, localhost, root,,);
|
||||
connection default;
|
||||
create table t1 (n1 int, n2 int, n3 int,
|
||||
key (n1, n2, n3),
|
||||
key (n2, n3, n1),
|
||||
key (n3, n1, n2));
|
||||
create table t2 (i int);
|
||||
|
||||
# Populating 't1' table with keys disabled, so ALTER TABLE .. ENABLE KEYS
|
||||
# will run for some time
|
||||
alter table t1 disable keys;
|
||||
--disable_query_log
|
||||
insert into t1 values (RAND()*1000,RAND()*1000,RAND()*1000);
|
||||
let $1=19;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t1 select RAND()*1000,RAND()*1000,RAND()*1000 from t1;
|
||||
dec $1;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Later we use binlog to check the order in which statements are
|
||||
# executed so let us reset it first.
|
||||
reset master;
|
||||
--send alter table t1 enable keys;
|
||||
connection addconroot;
|
||||
let $show_type= PROCESSLIST;
|
||||
let $show_pattern= '%Repair by sorting%alter table t1 enable keys%';
|
||||
--source include/wait_show_pattern.inc
|
||||
# This statement should not be blocked by in-flight ALTER and therefore
|
||||
# should be executed and written to binlog before ALTER TABLE ... ENABLE KEYS
|
||||
# finishes.
|
||||
insert into t2 values (1);
|
||||
# And this should wait until the end of ALTER TABLE ... ENABLE KEYS.
|
||||
insert into t1 values (1, 1, 1);
|
||||
connection default;
|
||||
--reap
|
||||
# Check that statements were executed/binlogged in correct order.
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'master-bin.000001' from 102;
|
||||
|
||||
# Clean up
|
||||
drop tables t1, t2;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
@@ -528,6 +528,71 @@ SHOW INDEX FROM bug24219_2;
|
||||
|
||||
DROP TABLE bug24219_2;
|
||||
|
||||
#
|
||||
# Bug#24562 (ALTER TABLE ... ORDER BY ... with complex expression asserts)
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists table_24562;
|
||||
--enable_warnings
|
||||
|
||||
create table table_24562(
|
||||
section int,
|
||||
subsection int,
|
||||
title varchar(50));
|
||||
|
||||
insert into table_24562 values
|
||||
(1, 0, "Introduction"),
|
||||
(1, 1, "Authors"),
|
||||
(1, 2, "Acknowledgements"),
|
||||
(2, 0, "Basics"),
|
||||
(2, 1, "Syntax"),
|
||||
(2, 2, "Client"),
|
||||
(2, 3, "Server"),
|
||||
(3, 0, "Intermediate"),
|
||||
(3, 1, "Complex queries"),
|
||||
(3, 2, "Stored Procedures"),
|
||||
(3, 3, "Stored Functions"),
|
||||
(4, 0, "Advanced"),
|
||||
(4, 1, "Replication"),
|
||||
(4, 2, "Load balancing"),
|
||||
(4, 3, "High availability"),
|
||||
(5, 0, "Conclusion");
|
||||
|
||||
select * from table_24562;
|
||||
|
||||
alter table table_24562 add column reviewer varchar(20),
|
||||
order by title;
|
||||
|
||||
select * from table_24562;
|
||||
|
||||
update table_24562 set reviewer="Me" where section=2;
|
||||
update table_24562 set reviewer="You" where section=3;
|
||||
|
||||
alter table table_24562
|
||||
order by section ASC, subsection DESC;
|
||||
|
||||
select * from table_24562;
|
||||
|
||||
alter table table_24562
|
||||
order by table_24562.subsection ASC, table_24562.section DESC;
|
||||
|
||||
select * from table_24562;
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
alter table table_24562 order by 12;
|
||||
--error ER_PARSE_ERROR
|
||||
alter table table_24562 order by (section + 12);
|
||||
--error ER_PARSE_ERROR
|
||||
alter table table_24562 order by length(title);
|
||||
--error ER_PARSE_ERROR
|
||||
alter table table_24562 order by (select 12 from dual);
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
alter table table_24562 order by no_such_col;
|
||||
|
||||
drop table table_24562;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@@ -11,7 +11,7 @@
|
||||
##############################################################################
|
||||
user_limits : Bug#23921 random failure of user_limits.test
|
||||
|
||||
im_daemon_life_cycle : Bug#24415 see note: [19 Dec 23:17] Trudy Pelzer
|
||||
# im_daemon_life_cycle : Bug#24415 see note: [19 Dec 23:17] Trudy Pelzer
|
||||
im_options : Bug#20294 2006-07-24 stewart Instance manager test im_options fails randomly
|
||||
concurrent_innodb : BUG#21579 2006-08-11 mleich innodb_concurrent random failures with varying differences
|
||||
ndb_autodiscover : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
|
||||
|
@@ -78,8 +78,13 @@ begin
|
||||
drop table "hashed_num";
|
||||
end|
|
||||
delimiter ;|
|
||||
--sleep 0.8
|
||||
--echo "Now if everything is fine the event has compiled and is locked
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Now if everything is fine the event has compiled and is locked"
|
||||
select /*1*/ user, host, db, info from information_schema.processlist where command!='Daemon' and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('test_bug16407');
|
||||
|
||||
@@ -127,10 +132,22 @@ begin
|
||||
end|
|
||||
delimiter ;|
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
--sleep 1
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 3 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select /*2*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('ee_16407_2');
|
||||
--sleep 1.2
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 and user = 'event_scheduler' and info is null
|
||||
from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler')
|
||||
and (info is null or info not like '%processlist%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select /*3*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
set global event_scheduler= off;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
@@ -150,6 +167,7 @@ set global event_scheduler= on;
|
||||
|
||||
set sql_mode='traditional';
|
||||
delimiter |;
|
||||
# ee_16407_5_pendant() should not insert anything because of invalid date.
|
||||
create procedure ee_16407_5_pendant() begin insert into events_test.events_smode_test values('ee_16407_5','2001-02-29'); end|
|
||||
create procedure ee_16407_6_pendant() begin insert into events_test.events_smode_test values('ee_16407_6','2004-02-29'); end|
|
||||
create event ee_16407_5 on schedule every 60 second do
|
||||
@@ -165,11 +183,23 @@ begin
|
||||
call events_test.ee_16407_6_pendant();
|
||||
end|
|
||||
delimiter ;|
|
||||
--sleep 1
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 2 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 2 locked processes"
|
||||
select /*4*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('ee_16407_5');
|
||||
--sleep 1.3
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 and user = 'event_scheduler' and info is null
|
||||
from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler')
|
||||
and (info is null or info not like '%processlist%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 0 processes locked"
|
||||
select /*5*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
@@ -272,17 +302,58 @@ insert into t1 values (2);
|
||||
create table t2 (a char(20));
|
||||
insert into t2 values ("e22830_1");
|
||||
create function f22830 () returns int return 5;
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
create event e22830 on schedule every f22830() second do select 123;
|
||||
create event e22830_1 on schedule every 1 hour do alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
create event e22830_2 on schedule every 1 hour do alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
create event e22830_3 on schedule every 1 hour do alter event e22830_3 on schedule every f22830() hour;
|
||||
create event e22830_4 on schedule every 1 hour do alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
|
||||
select get_lock('ee_22830', 60);
|
||||
set global event_scheduler=on;
|
||||
--sleep 4
|
||||
|
||||
delimiter |;
|
||||
create procedure p22830_wait()
|
||||
begin
|
||||
select get_lock('ee_22830', 60);
|
||||
select release_lock('ee_22830');
|
||||
end|
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
create event e22830 on schedule every f22830() second do
|
||||
begin
|
||||
call p22830_wait();
|
||||
select 123;
|
||||
end|
|
||||
create event e22830_1 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
end|
|
||||
create event e22830_2 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
end|
|
||||
create event e22830_3 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_3 on schedule every f22830() hour;
|
||||
end|
|
||||
create event e22830_4 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--echo "All events should be blocked in get_lock()"
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
|
||||
select release_lock('ee_22830');
|
||||
|
||||
let $wait_condition=
|
||||
select group_concat(interval_value order by interval_value) = '1,1,1,8'
|
||||
from information_schema.events;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
set global event_scheduler=off;
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
drop procedure p22830_wait;
|
||||
drop function f22830;
|
||||
--error ER_PARSE_ERROR
|
||||
drop event (select a from t2);
|
||||
|
@@ -1574,6 +1574,7 @@ execute sq;
|
||||
deallocate prepare no_index;
|
||||
deallocate prepare sq;
|
||||
|
||||
|
||||
#
|
||||
# Bug 25027: query with a single-row non-correlated subquery
|
||||
# and IS NULL predicate
|
||||
@@ -1597,6 +1598,36 @@ DEALLOCATE PREPARE stmt;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
#
|
||||
# BUG#24491 "using alias from source table in insert ... on duplicate key"
|
||||
#
|
||||
--disable_warnings
|
||||
drop tables if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (id int primary key auto_increment, value varchar(10));
|
||||
insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
|
||||
# Let us prepare INSERT ... SELECT ... ON DUPLICATE KEY UPDATE statement
|
||||
# which in its ON DUPLICATE KEY clause erroneously tries to assign value
|
||||
# to a column which is mentioned only in SELECT part.
|
||||
prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'";
|
||||
# Both first and second attempts to execute it should fail
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
execute stmt;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
# And now the same test for more complex case which is more close
|
||||
# to the one that was reported originally.
|
||||
prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'";
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
execute stmt;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
drop tables t1;
|
||||
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
@@ -1812,6 +1812,38 @@ PREPARE stmt FROM "CREATE VIEW v AS SELECT ?";
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# BUG#24491 "using alias from source table in insert ... on duplicate key"
|
||||
#
|
||||
--disable_warnings
|
||||
drop tables if exists t1;
|
||||
drop procedure if exists bug24491;
|
||||
--enable_warnings
|
||||
create table t1 (id int primary key auto_increment, value varchar(10));
|
||||
insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
|
||||
# Let us create routine with INSERT ... SELECT ... ON DUPLICATE KEY UPDATE
|
||||
# statement which in its ON DUPLICATE KEY clause erroneously tries to assign
|
||||
# value to a column which is mentioned only in SELECT part.
|
||||
create procedure bug24491()
|
||||
insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP';
|
||||
# Both first and second calls to it should fail
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
call bug24491();
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
call bug24491();
|
||||
drop procedure bug24491;
|
||||
# And now the same test for more complex case which is more close
|
||||
# to the one that was reported originally.
|
||||
create procedure bug24491()
|
||||
insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP';
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
call bug24491();
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
call bug24491();
|
||||
drop procedure bug24491;
|
||||
drop tables t1;
|
||||
|
||||
|
||||
#
|
||||
# End of 5.0 tests
|
||||
#
|
||||
@@ -1853,6 +1885,7 @@ drop function bug20701;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
@@ -933,6 +933,7 @@ DROP VIEW v2;
|
||||
DROP VIEW v1;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
|
||||
|
||||
#
|
||||
# Bug#17254: Error for DEFINER security on VIEW provides too much info
|
||||
#
|
||||
@@ -970,4 +971,74 @@ DROP DATABASE db17254;
|
||||
disconnect def;
|
||||
disconnect inv;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
||||
#
|
||||
# BUG#24404: strange bug with view+permission+prepared statement
|
||||
#
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mysqltest_db1;
|
||||
DROP DATABASE IF EXISTS mysqltest_db2;
|
||||
--enable_warnings
|
||||
--error 0,ER_CANNOT_USER
|
||||
DROP USER mysqltest_u1;
|
||||
--error 0,ER_CANNOT_USER
|
||||
DROP USER mysqltest_u2;
|
||||
|
||||
CREATE USER mysqltest_u1@localhost;
|
||||
CREATE USER mysqltest_u2@localhost;
|
||||
|
||||
CREATE DATABASE mysqltest_db1;
|
||||
CREATE DATABASE mysqltest_db2;
|
||||
|
||||
GRANT ALL ON mysqltest_db1.* TO mysqltest_u1@localhost WITH GRANT OPTION;
|
||||
GRANT ALL ON mysqltest_db2.* TO mysqltest_u2@localhost;
|
||||
|
||||
connect (conn1, localhost, mysqltest_u1, , mysqltest_db1);
|
||||
|
||||
CREATE TABLE t1 (i INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# Use view with subquery for better coverage.
|
||||
CREATE VIEW v1 AS SELECT i FROM t1 WHERE 1 IN (SELECT * FROM t1);
|
||||
|
||||
CREATE TABLE t2 (s CHAR(7));
|
||||
INSERT INTO t2 VALUES ('public');
|
||||
|
||||
GRANT SELECT ON v1 TO mysqltest_u2@localhost;
|
||||
GRANT SELECT ON t2 TO mysqltest_u2@localhost;
|
||||
|
||||
connect (conn2, localhost, mysqltest_u2, , mysqltest_db2);
|
||||
|
||||
SELECT * FROM mysqltest_db1.v1, mysqltest_db1.t2;
|
||||
PREPARE stmt1 FROM "SELECT * FROM mysqltest_db1.t2";
|
||||
EXECUTE stmt1;
|
||||
PREPARE stmt2 FROM "SELECT * FROM mysqltest_db1.v1, mysqltest_db1.t2";
|
||||
EXECUTE stmt2;
|
||||
|
||||
connection conn1;
|
||||
# Make table 't2' private.
|
||||
REVOKE SELECT ON t2 FROM mysqltest_u2@localhost;
|
||||
UPDATE t2 SET s = 'private' WHERE s = 'public';
|
||||
|
||||
connection conn2;
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
SELECT * FROM mysqltest_db1.v1, mysqltest_db1.t2;
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
EXECUTE stmt1;
|
||||
# Original bug was here: the statement didn't fail.
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
EXECUTE stmt2;
|
||||
|
||||
# Cleanup.
|
||||
disconnect conn2;
|
||||
disconnect conn1;
|
||||
connection default;
|
||||
REVOKE ALL ON mysqltest_db1.* FROM mysqltest_u1@localhost;
|
||||
REVOKE ALL ON mysqltest_db2.* FROM mysqltest_u2@localhost;
|
||||
DROP DATABASE mysqltest_db1;
|
||||
DROP DATABASE mysqltest_db2;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
DROP USER mysqltest_u2@localhost;
|
||||
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
Reference in New Issue
Block a user