Commit b771483b authored by Matthias Leich's avatar Matthias Leich

Last slice of fix for Bug#42003 tests missing the disconnect of connections <> default

+ Fix for Bug#43114 wait_until_count_sessions too restrictive, random PB failures
+ Removal of a lot of other weaknesses found
+ modifications according to review
parent 209cc336
...@@ -2,14 +2,23 @@ ...@@ -2,14 +2,23 @@
# #
# SUMMARY # SUMMARY
# #
# Waits until the passed number ($count_sessions) of concurrent sessions was # Waits until the passed number ($count_sessions) of concurrent sessions or
# observed via # a smaller number was observed via
# SHOW STATUS LIKE 'Threads_connected' # SHOW STATUS LIKE 'Threads_connected'
# or the operation times out. # or the operation times out.
# Note: Starting with 5.1 we could also use # Note:
# SELECT COUNT(*) FROM information_schema.processlist # 1. We wait for $current_sessions <= $count_sessions because in the use case
# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this # with count_sessions.inc before and wait_until_count_sessions.inc after
# runs in all versions 5.0+ # the core of the test it could happen that the disconnects of sessions
# belonging to the preceeding test are not finished.
# sessions at test begin($count_sessions) = m + n
# sessions of the previous test which will be soon disconnected = n (n >= 0)
# sessions at test end ($current sessions, assuming the test disconnects
# all additional sessions) = m
# 2. Starting with 5.1 we could also use
# SELECT COUNT(*) FROM information_schema.processlist
# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
# runs in all versions 5.0+
# #
# #
# USAGE # USAGE
...@@ -19,7 +28,7 @@ ...@@ -19,7 +28,7 @@
# #
# OR typical example of a test which uses more than one session # OR typical example of a test which uses more than one session
# Such a test could harm successing tests if there is no server shutdown # Such a test could harm successing tests if there is no server shutdown
# and start between.cw # and start between.
# #
# If the testing box is slow than the disconnect of sessions belonging to # If the testing box is slow than the disconnect of sessions belonging to
# the current test might happen when the successing test gets executed. # the current test might happen when the successing test gets executed.
...@@ -79,7 +88,11 @@ ...@@ -79,7 +88,11 @@
# backup.test, grant3.test # backup.test, grant3.test
# #
# #
# Created: 2009-01-14 mleich # Created:
# 2009-01-14 mleich
# Modified:
# 2009-02-24 mleich Fix Bug#43114 wait_until_count_sessions too restrictive,
# random PB failures
# #
let $wait_counter= 100; let $wait_counter= 100;
...@@ -93,7 +106,7 @@ let $wait_timeout= 0; ...@@ -93,7 +106,7 @@ let $wait_timeout= 0;
while ($wait_counter) while ($wait_counter)
{ {
let $current_sessions= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1); let $current_sessions= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);
let $success= `SELECT $current_sessions = $count_sessions`; let $success= `SELECT $current_sessions <= $count_sessions`;
if ($success) if ($success)
{ {
let $wait_counter= 0; let $wait_counter= 0;
...@@ -107,7 +120,7 @@ while ($wait_counter) ...@@ -107,7 +120,7 @@ while ($wait_counter)
if (!$success) if (!$success)
{ {
--echo # Timeout in wait_until_count_sessions.inc --echo # Timeout in wait_until_count_sessions.inc
--echo # Number of sessions expected: $count_sessions found: $current_sessions --echo # Number of sessions expected: < $count_sessions found: $current_sessions
SHOW PROCESSLIST; SHOW PROCESSLIST;
} }
drop table if exists t1; DROP TABLE IF EXISTS t1;
create table t1 (a int) engine=innodb; # Establish connection con1 (user=root)
start transaction with consistent snapshot; # Establish connection con2 (user=root)
insert into t1 values(1); # Switch to connection con1
select * from t1; CREATE TABLE t1 (a INT) ENGINE=innodb;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
# Switch to connection con2
INSERT INTO t1 VALUES(1);
# Switch to connection con1
SELECT * FROM t1;
a a
commit; COMMIT;
delete from t1; DELETE FROM t1;
start transaction; START TRANSACTION;
insert into t1 values(1); # Switch to connection con2
select * from t1; INSERT INTO t1 VALUES(1);
# Switch to connection con1
SELECT * FROM t1;
a a
1 1
commit; COMMIT;
drop table t1; # Switch to connection default + close connections con1 and con2
DROP TABLE t1;
drop table if exists t1; DROP TABLE IF EXISTS t1;
create table t1 (n int); CREATE TABLE t1 (n INT);
insert into t1 values (1),(2),(3); INSERT INTO t1 VALUES (1),(2),(3);
select * from t1; SELECT * FROM t1;
n n
1 1
2 2
3 3
drop table t1; DROP TABLE t1;
drop table if exists t1; # Establish connection con1 (user=root)
create table t1 (a int) engine=innodb; # Establish connection con2 (user=root)
begin; # Establish connection con3 (user=root)
insert into t1 values(1); # Switch to connection con1
flush tables with read lock; DROP TABLE IF EXISTS t1;
select * from t1; CREATE TABLE t1 (a INT) ENGINE=innodb;
BEGIN;
INSERT INTO t1 VALUES(1);
# Switch to connection con2
FLUSH TABLES WITH READ LOCK;
SELECT * FROM t1;
a a
commit; # Switch to connection con1
select * from t1; COMMIT;
# Switch to connection con2
SELECT * FROM t1;
a a
unlock tables; UNLOCK TABLES;
begin; # Switch to connection con1
select * from t1 for update; # Switch to connection con1
BEGIN;
SELECT * FROM t1 FOR UPDATE;
a a
1 1
begin; # Switch to connection con2
select * from t1 for update; BEGIN;
flush tables with read lock; SELECT * FROM t1 FOR UPDATE;
commit; # Switch to connection con3
FLUSH TABLES WITH READ LOCK;
# Switch to connection con1
COMMIT;
# Switch to connection con2
a a
1 1
unlock tables; # Switch to connection con3
commit; UNLOCK TABLES;
begin; # Switch to connection con2
insert into t1 values(10); COMMIT;
flush tables with read lock; # Switch to connection con1
commit; BEGIN;
unlock tables; INSERT INTO t1 VALUES(10);
flush tables with read lock; FLUSH TABLES WITH READ LOCK;
unlock tables; COMMIT;
begin; UNLOCK TABLES;
select * from t1; # Switch to connection con2
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
BEGIN;
SELECT * FROM t1;
a a
1 1
10 10
show create database test; SHOW CREATE DATABASE test;
Database Create Database Database Create Database
test CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ test CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */
drop table t1; DROP TABLE t1;
# Switch to connection default and close connections con1, con2, con3
create table t1 (a int) engine=innodb; # Establish connection con1 (user=root)
reset master; # Establish connection con2 (user=root)
set autocommit=0; # Switch to connection con1
insert t1 values (1); CREATE TABLE t1 (a INT) ENGINE=innodb;
flush tables with read lock; RESET MASTER;
show master status; SET AUTOCOMMIT=0;
INSERT t1 VALUES (1);
# Switch to connection con2
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 98 master-bin.000001 98
commit; # Switch to connection con1
show master status; COMMIT;
# Switch to connection con2
SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 98 master-bin.000001 98
unlock tables; UNLOCK TABLES;
drop table t1; # Switch to connection con1
set autocommit=1; DROP TABLE t1;
SET AUTOCOMMIT=1;
# Switch to connection default and close connections con1 and con2
drop table if exists t1; SET @old_concurrent_insert= @@global.concurrent_insert;
create table t1 (kill_id int); SET @@global.concurrent_insert= 0;
insert into t1 values(connection_id()); DROP TABLE IF EXISTS t1;
flush tables with read lock; CREATE TABLE t1 (kill_id INT);
select ((@id := kill_id) - kill_id) from t1; INSERT INTO t1 VALUES(connection_id());
FLUSH TABLES WITH READ LOCK;
SELECT ((@id := kill_id) - kill_id) FROM t1;
((@id := kill_id) - kill_id) ((@id := kill_id) - kill_id)
0 0
kill connection @id; KILL CONNECTION @id;
drop table t1; DROP TABLE t1;
SET @@global.concurrent_insert= @old_concurrent_insert;
...@@ -51,10 +51,10 @@ ERROR HY000: Can't execute the query because you have a conflicting read lock ...@@ -51,10 +51,10 @@ ERROR HY000: Can't execute the query because you have a conflicting read lock
UNLOCK TABLES; UNLOCK TABLES;
DROP DATABASE mysqltest_1; DROP DATABASE mysqltest_1;
ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist
use mysql; USE mysql;
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE; LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
FLUSH TABLES; FLUSH TABLES;
use mysql; USE mysql;
SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1; SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
OPTIMIZE TABLES columns_priv, db, host, user; OPTIMIZE TABLES columns_priv, db, host, user;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
...@@ -65,7 +65,7 @@ mysql.user optimize status OK ...@@ -65,7 +65,7 @@ mysql.user optimize status OK
UNLOCK TABLES; UNLOCK TABLES;
Select_priv Select_priv
N N
use test; USE test;
use test; use test;
CREATE TABLE t1 (c1 int); CREATE TABLE t1 (c1 int);
LOCK TABLE t1 WRITE; LOCK TABLE t1 WRITE;
...@@ -93,7 +93,7 @@ create table t1 (a int); ...@@ -93,7 +93,7 @@ create table t1 (a int);
connection: locker connection: locker
lock tables t1 read; lock tables t1 read;
connection: writer connection: writer
create table t2 like t1;; create table t2 like t1;
connection: default connection: default
kill query kill query
ERROR 70100: Query execution was interrupted ERROR 70100: Query execution was interrupted
......
...@@ -349,17 +349,17 @@ DELIMITER ; ...@@ -349,17 +349,17 @@ DELIMITER ;
ROLLBACK /* added by mysqlbinlog */; ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
CREATE TABLE t1 (c1 CHAR(10)); CREATE TABLE t1 (c1 CHAR(10));
flush logs; FLUSH LOGS;
INSERT INTO t1 VALUES ('0123456789'); INSERT INTO t1 VALUES ('0123456789');
flush logs; FLUSH LOGS;
DROP TABLE t1; DROP TABLE t1;
# Query thread_id=REMOVED exec_time=REMOVED error_code=REMOVED # Query thread_id=REMOVED exec_time=REMOVED error_code=REMOVED
flush logs; FLUSH LOGS;
create table t1(a int); CREATE TABLE t1(a INT);
insert into t1 values(connection_id()); INSERT INTO t1 VALUES(connection_id());
flush logs; FLUSH LOGS;
drop table t1; DROP TABLE t1;
1 1
drop table t1; DROP TABLE t1;
shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
End of 5.0 tests End of 5.0 tests
...@@ -47,7 +47,7 @@ Note 1051 Unknown table 'ttt' ...@@ -47,7 +47,7 @@ Note 1051 Unknown table 'ttt'
drop table t1,t2; drop table t1,t2;
drop user test@localhost; drop user test@localhost;
# #
# Bug #27440 read_only allows create and drop database # Bug#27440 read_only allows create and drop database
# #
drop database if exists mysqltest_db1; drop database if exists mysqltest_db1;
drop database if exists mysqltest_db2; drop database if exists mysqltest_db2;
......
...@@ -507,9 +507,9 @@ ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql ...@@ -507,9 +507,9 @@ ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql
drop table mysqltest.t1; drop table mysqltest.t1;
drop database mysqltest; drop database mysqltest;
set names binary; set names binary;
delete from mysql.user delete from mysql.user
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3'; where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
delete from mysql.db delete from mysql.db
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3'; where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges; flush privileges;
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY; CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
...@@ -916,7 +916,7 @@ def TRIGGERS DEFINER Definer 252 589815 14 N 17 0 33 ...@@ -916,7 +916,7 @@ def TRIGGERS DEFINER Definer 252 589815 14 N 17 0 33
Trigger Event Table Statement Timing Created sql_mode Definer Trigger Event Table Statement Timing Created sql_mode Definer
t1_bi INSERT t1 SET @a = 1 BEFORE NULL root@localhost t1_bi INSERT t1 SET @a = 1 BEFORE NULL root@localhost
---------------------------------------------------------------- ----------------------------------------------------------------
SELECT SELECT
TRIGGER_CATALOG, TRIGGER_CATALOG,
TRIGGER_SCHEMA, TRIGGER_SCHEMA,
TRIGGER_NAME, TRIGGER_NAME,
......
...@@ -5,10 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255' ...@@ -5,10 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255' GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255'; REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
DROP USER mysqltest_1@'127.0.0.1/255.255.255.255'; DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
select user(); SELECT USER();
user() USER()
# #
show processlist; SHOW PROCESSLIST;
Id User Host db Command Time State Info Id User Host db Command Time State Info
<id> root <host> test <command> <time> <state> <info> <id> root <host> test <command> <time> <state> <info>
<id> root <host> test <command> <time> <state> <info> <id> root <host> test <command> <time> <state> <info>
...@@ -332,7 +332,7 @@ ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table ...@@ -332,7 +332,7 @@ ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table
drop user user_bug14533@localhost; drop user user_bug14533@localhost;
drop database db_bug14533; drop database db_bug14533;
CREATE DATABASE db_bug7787; CREATE DATABASE db_bug7787;
use db_bug7787; USE db_bug7787;
CREATE PROCEDURE p1() CREATE PROCEDURE p1()
SHOW INNODB STATUS; SHOW INNODB STATUS;
Warnings: Warnings:
...@@ -352,12 +352,12 @@ GRANT SUPER ON *.* TO mysqltest_2@localhost; ...@@ -352,12 +352,12 @@ GRANT SUPER ON *.* TO mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost; GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
---> connection: mysqltest_2_con ---> connection: mysqltest_2_con
use mysqltest; USE mysqltest;
CREATE PROCEDURE wl2897_p1() SELECT 1; CREATE PROCEDURE wl2897_p1() SELECT 1;
CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1; CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
---> connection: mysqltest_1_con ---> connection: mysqltest_1_con
use mysqltest; USE mysqltest;
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2; CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
ERROR 42000: Access denied; you need the SUPER privilege for this operation ERROR 42000: Access denied; you need the SUPER privilege for this operation
CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2; CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2;
...@@ -373,7 +373,7 @@ Warnings: ...@@ -373,7 +373,7 @@ Warnings:
Note 1449 There is no 'a @ b @ c'@'localhost' registered Note 1449 There is no 'a @ b @ c'@'localhost' registered
---> connection: con1root ---> connection: con1root
use mysqltest; USE mysqltest;
SHOW CREATE PROCEDURE wl2897_p1; SHOW CREATE PROCEDURE wl2897_p1;
Procedure sql_mode Create Procedure Procedure sql_mode Create Procedure
wl2897_p1 CREATE DEFINER=`mysqltest_2`@`localhost` PROCEDURE `wl2897_p1`() wl2897_p1 CREATE DEFINER=`mysqltest_2`@`localhost` PROCEDURE `wl2897_p1`()
...@@ -403,7 +403,7 @@ CREATE USER mysqltest_2@localhost; ...@@ -403,7 +403,7 @@ CREATE USER mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost; GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
---> connection: mysqltest_1_con ---> connection: mysqltest_1_con
use mysqltest; USE mysqltest;
CREATE PROCEDURE bug13198_p1() CREATE PROCEDURE bug13198_p1()
SELECT 1; SELECT 1;
CREATE FUNCTION bug13198_f1() RETURNS INT CREATE FUNCTION bug13198_f1() RETURNS INT
...@@ -416,7 +416,7 @@ bug13198_f1() ...@@ -416,7 +416,7 @@ bug13198_f1()
1 1
---> connection: mysqltest_2_con ---> connection: mysqltest_2_con
use mysqltest; USE mysqltest;
CALL bug13198_p1(); CALL bug13198_p1();
1 1
1 1
...@@ -428,7 +428,7 @@ bug13198_f1() ...@@ -428,7 +428,7 @@ bug13198_f1()
DROP USER mysqltest_1@localhost; DROP USER mysqltest_1@localhost;
---> connection: mysqltest_2_con ---> connection: mysqltest_2_con
use mysqltest; USE mysqltest;
CALL bug13198_p1(); CALL bug13198_p1();
ERROR HY000: There is no 'mysqltest_1'@'localhost' registered ERROR HY000: There is no 'mysqltest_1'@'localhost' registered
SELECT bug13198_f1(); SELECT bug13198_f1();
...@@ -445,7 +445,7 @@ Host User Password ...@@ -445,7 +445,7 @@ Host User Password
localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C
---> connection: mysqltest_2_con ---> connection: mysqltest_2_con
use test; USE test;
CREATE PROCEDURE sp19857() DETERMINISTIC CREATE PROCEDURE sp19857() DETERMINISTIC
BEGIN BEGIN
DECLARE a INT; DECLARE a INT;
......
...@@ -1667,9 +1667,9 @@ INSERT INTO t2 VALUES (4,3,'n'); ...@@ -1667,9 +1667,9 @@ INSERT INTO t2 VALUES (4,3,'n');
INSERT INTO t2 VALUES (6,1,'n'); INSERT INTO t2 VALUES (6,1,'n');
INSERT INTO t2 VALUES (8,1,'y'); INSERT INTO t2 VALUES (8,1,'y');
CREATE VIEW v1 AS SELECT * FROM t1; CREATE VIEW v1 AS SELECT * FROM t1;
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1 FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
col1 col2 col2 col3 col1 col2 col2 col3
1 trudy 2 y 1 trudy 2 y
...@@ -1681,9 +1681,9 @@ col1 col2 col2 col3 ...@@ -1681,9 +1681,9 @@ col1 col2 col2 col3
7 carsten NULL NULL 7 carsten NULL NULL
8 ranger 1 y 8 ranger 1 y
10 matt NULL NULL 10 matt NULL NULL
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1 FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
col1 col2 col2 col3 col1 col2 col2 col3
1 trudy 2 y 1 trudy 2 y
...@@ -1737,7 +1737,7 @@ A A ...@@ -1737,7 +1737,7 @@ A A
2 2 2 2
3 3 3 3
create table t3 as select a a,a b from t2; create table t3 as select a a,a b from t2;
create view v2 as select * from t3 where create view v2 as select * from t3 where
a in (select * from t1) or b in (select * from t2); a in (select * from t1) or b in (select * from t2);
select * from v2 A, v2 B where A.a = B.b; select * from v2 A, v2 B where A.a = B.b;
a b a b a b a b
...@@ -1993,7 +1993,7 @@ dkjhgd ...@@ -1993,7 +1993,7 @@ dkjhgd
drop view v1; drop view v1;
create table t1 (f59 int, f60 int, f61 int); create table t1 (f59 int, f60 int, f61 int);
insert into t1 values (19,41,32); insert into t1 values (19,41,32);
create view v1 as select f59, f60 from t1 where f59 in create view v1 as select f59, f60 from t1 where f59 in
(select f59 from t1); (select f59 from t1);
update v1 set f60=2345; update v1 set f60=2345;
ERROR HY000: The target table v1 of the UPDATE is not updatable ERROR HY000: The target table v1 of the UPDATE is not updatable
...@@ -2120,7 +2120,7 @@ pid int NOT NULL ...@@ -2120,7 +2120,7 @@ pid int NOT NULL
INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d'); INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d');
INSERT INTO t2 values (1,1), (2,1), (2,2); INSERT INTO t2 values (1,1), (2,1), (2,2);
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid; CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2 SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
WHERE t1.aid = t2.aid GROUP BY pid; WHERE t1.aid = t2.aid GROUP BY pid;
pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
1 a b,c d 1 a b,c d
...@@ -2222,7 +2222,7 @@ group_name varchar(32) NOT NULL ...@@ -2222,7 +2222,7 @@ group_name varchar(32) NOT NULL
) engine = InnoDB; ) engine = InnoDB;
create table t2 ( create table t2 (
r_object_id char(16) NOT NULL, r_object_id char(16) NOT NULL,
i_position int(11) NOT NULL, i_position int(11) NOT NULL,
users_names varchar(32) default NULL users_names varchar(32) default NULL
) Engine = InnoDB; ) Engine = InnoDB;
create view v1 as select r_object_id, group_name from t1; create view v1 as select r_object_id, group_name from t1;
...@@ -2235,7 +2235,7 @@ insert into t1 values('120001a080000542','tstgroup1'); ...@@ -2235,7 +2235,7 @@ insert into t1 values('120001a080000542','tstgroup1');
insert into t2 values('120001a080000542',-1, 'guser01'); insert into t2 values('120001a080000542',-1, 'guser01');
insert into t2 values('120001a080000542',-2, 'guser02'); insert into t2 values('120001a080000542',-2, 'guser02');
select v1.r_object_id, v2.users_names from v1, v2 select v1.r_object_id, v2.users_names from v1, v2
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
order by users_names; order by users_names;
r_object_id users_names r_object_id users_names
120001a080000542 guser01 120001a080000542 guser01
...@@ -2385,8 +2385,8 @@ create table t4 (x int, y int, z int); ...@@ -2385,8 +2385,8 @@ create table t4 (x int, y int, z int);
create view v1 as create view v1 as
select t1.x select t1.x
from ( from (
(t1 join t2 on ((t1.y = t2.y))) (t1 join t2 on ((t1.y = t2.y)))
join join
(t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
); );
prepare stmt1 from "select count(*) from v1 where x = ?"; prepare stmt1 from "select count(*) from v1 where x = ?";
...@@ -2562,12 +2562,12 @@ Warnings: ...@@ -2562,12 +2562,12 @@ Warnings:
Warning 1052 Column 'x' in group statement is ambiguous Warning 1052 Column 'x' in group statement is ambiguous
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
drop table if exists t1; drop table if exists t1;
drop view if exists v1; drop view if exists v1;
create table t1 (id int); create table t1 (id int);
create view v1 as select * from t1; create view v1 as select * from t1;
drop table t1; drop table t1;
show create view v1; show create view v1;
drop view v1; drop view v1;
// //
View Create View View Create View
...@@ -2614,7 +2614,7 @@ DROP VIEW v2; ...@@ -2614,7 +2614,7 @@ DROP VIEW v2;
DROP TABLE t1, t2; DROP TABLE t1, t2;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
td date DEFAULT NULL, KEY idx(td)); td date DEFAULT NULL, KEY idx(td));
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'), (1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'), (4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06'); (7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
...@@ -2978,10 +2978,10 @@ drop view v1; ...@@ -2978,10 +2978,10 @@ drop view v1;
drop table t1; drop table t1;
CREATE TABLE t1(pk int PRIMARY KEY); CREATE TABLE t1(pk int PRIMARY KEY);
CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int); CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
CREATE ALGORITHM=MERGE VIEW v1 AS CREATE ALGORITHM=MERGE VIEW v1 AS
SELECT t1.* SELECT t1.*
FROM t1 JOIN t2 FROM t1 JOIN t2
ON t2.fk = t1.pk AND ON t2.fk = t1.pk AND
t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org); t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
SHOW WARNINGS; SHOW WARNINGS;
Level Code Message Level Code Message
...@@ -3311,7 +3311,7 @@ name char(10) NOT NULL ...@@ -3311,7 +3311,7 @@ name char(10) NOT NULL
INSERT INTO t1 (lid, name) VALUES INSERT INTO t1 (lid, name) VALUES
(1, 'YES'), (2, 'NO'); (1, 'YES'), (2, 'NO');
CREATE TABLE t2 ( CREATE TABLE t2 (
id int NOT NULL PRIMARY KEY, id int NOT NULL PRIMARY KEY,
gid int NOT NULL, gid int NOT NULL,
lid int NOT NULL, lid int NOT NULL,
dt date dt date
...@@ -3410,8 +3410,8 @@ CREATE TABLE t1 (id int); ...@@ -3410,8 +3410,8 @@ CREATE TABLE t1 (id int);
CREATE TABLE t2 (id int, c int DEFAULT 0); CREATE TABLE t2 (id int, c int DEFAULT 0);
INSERT INTO t1 (id) VALUES (1); INSERT INTO t1 (id) VALUES (1);
INSERT INTO t2 (id) VALUES (1); INSERT INTO t2 (id) VALUES (1);
CREATE VIEW v1 AS CREATE VIEW v1 AS
SELECT t2.c FROM t1, t2 SELECT t2.c FROM t1, t2
WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION; WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
UPDATE v1 SET c=1; UPDATE v1 SET c=1;
DROP VIEW v1; DROP VIEW v1;
...@@ -3519,7 +3519,7 @@ role_name varchar(100) default NULL, ...@@ -3519,7 +3519,7 @@ role_name varchar(100) default NULL,
app_name varchar(40) NOT NULL, app_name varchar(40) NOT NULL,
INDEX idx_app_name(app_name) INDEX idx_app_name(app_name)
); );
CREATE VIEW v1 AS CREATE VIEW v1 AS
SELECT profile.person_id AS person_id SELECT profile.person_id AS person_id
FROM t1 profile, t2 userrole, t3 role FROM t1 profile, t2 userrole, t3 role
WHERE userrole.person_id = profile.person_id AND WHERE userrole.person_id = profile.person_id AND
...@@ -3531,7 +3531,7 @@ INSERT INTO t1 VALUES ...@@ -3531,7 +3531,7 @@ INSERT INTO t1 VALUES
(-717462680,'ENTS Ta','0'), (-904346964,'ndard SQL\n','0'); (-717462680,'ENTS Ta','0'), (-904346964,'ndard SQL\n','0');
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
(1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10); (1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
INSERT INTO t3 VALUES INSERT INTO t3 VALUES
(1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'), (1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
(3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'), (3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
(5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'), (5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
...@@ -3557,7 +3557,7 @@ i ...@@ -3557,7 +3557,7 @@ i
2 2
3 3
4 4
select table_name, is_updatable from information_schema.views select table_name, is_updatable from information_schema.views
where table_name = 'v1'; where table_name = 'v1';
table_name is_updatable table_name is_updatable
v1 NO v1 NO
...@@ -3603,8 +3603,8 @@ DROP VIEW v2; ...@@ -3603,8 +3603,8 @@ DROP VIEW v2;
DROP VIEW v3; DROP VIEW v3;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug#29477: Not all fields of the target table were checked to have # Bug#29477 Not all fields of the target table were checked to have
# a default value when inserting into a view. # a default value when inserting into a view.
# #
create table t1(f1 int, f2 int not null); create table t1(f1 int, f2 int not null);
create view v1 as select f1 from t1; create view v1 as select f1 from t1;
...@@ -3621,7 +3621,7 @@ drop table t1; ...@@ -3621,7 +3621,7 @@ drop table t1;
create table t1 (a int, key(a)); create table t1 (a int, key(a));
create table t2 (c int); create table t2 (c int);
create view v1 as select a b from t1; create view v1 as select a b from t1;
create view v2 as select 1 a from t2, v1 where c in create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a); (select 1 from t1 where b = a);
insert into t1 values (1), (1); insert into t1 values (1), (1);
insert into t2 values (1), (1); insert into t2 values (1), (1);
...@@ -3643,7 +3643,7 @@ MAX(a) COUNT(DISTINCT a) ...@@ -3643,7 +3643,7 @@ MAX(a) COUNT(DISTINCT a)
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# ----------------------------------------------------------------- # -----------------------------------------------------------------
# -- Bug#34337: Server crash when Altering a view using a table name. # -- Bug#34337 Server crash when Altering a view using a table name.
# ----------------------------------------------------------------- # -----------------------------------------------------------------
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
...@@ -3660,8 +3660,8 @@ DROP TABLE t1; ...@@ -3660,8 +3660,8 @@ DROP TABLE t1;
# -- End of test case for Bug#34337. # -- End of test case for Bug#34337.
# ----------------------------------------------------------------- # -----------------------------------------------------------------
# -- Bug#35193: VIEW query is rewritten without "FROM DUAL", # -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
# -- causing syntax error # -- causing syntax error
# ----------------------------------------------------------------- # -----------------------------------------------------------------
CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1; CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1;
......
...@@ -644,7 +644,7 @@ CREATE DATABASE test2; ...@@ -644,7 +644,7 @@ CREATE DATABASE test2;
CREATE TABLE test1.t0 (a VARCHAR(20)); CREATE TABLE test1.t0 (a VARCHAR(20));
CREATE TABLE test2.t1 (a VARCHAR(20)); CREATE TABLE test2.t1 (a VARCHAR(20));
CREATE VIEW test2.t3 AS SELECT * FROM test1.t0; CREATE VIEW test2.t3 AS SELECT * FROM test1.t0;
CREATE OR REPLACE VIEW test.v1 AS CREATE OR REPLACE VIEW test.v1 AS
SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb; SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb;
DROP VIEW test.v1; DROP VIEW test.v1;
DROP VIEW test2.t3; DROP VIEW test2.t3;
...@@ -788,7 +788,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI ...@@ -788,7 +788,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
DROP USER u26813@localhost; DROP USER u26813@localhost;
DROP DATABASE db26813; DROP DATABASE db26813;
# #
# Bug#29908: A user can gain additional access through the ALTER VIEW. # Bug#29908 A user can gain additional access through the ALTER VIEW.
# #
CREATE DATABASE mysqltest_29908; CREATE DATABASE mysqltest_29908;
USE mysqltest_29908; USE mysqltest_29908;
......
# In order to be more or less robust test for bug#25044 has to take # 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) # significant time (e.g. about 9 seconds on my (Dmitri's) computer)
# so we probably want execute it only in --big-test mode. # so we probably want execute it only in --big-test mode.
# Also in 5.1 this test will require statement-based binlog. # Also in 5.1 this test will require statement-based binlog.
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
# #
# Test for bug #25044 "ALTER TABLE ... ENABLE KEYS acquires global # Test for Bug#25044 ALTER TABLE ... ENABLE KEYS acquires global
# 'opening tables' lock". # 'opening tables' lock
# #
# ALTER TABLE ... ENABLE KEYS should not acquire LOCK_open mutex for # ALTER TABLE ... ENABLE KEYS should not acquire LOCK_open mutex for
# the whole its duration as it prevents other queries from execution. # the whole its duration as it prevents other queries from execution.
...@@ -57,6 +57,7 @@ show binlog events in 'master-bin.000001' from 98; ...@@ -57,6 +57,7 @@ show binlog events in 'master-bin.000001' from 98;
# Clean up # Clean up
drop tables t1, t2; drop tables t1, t2;
disconnect addconroot;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -18,12 +18,16 @@ connect (con2,localhost,root,,test); ...@@ -18,12 +18,16 @@ connect (con2,localhost,root,,test);
show tables; show tables;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,root,z,test2); connect (fail_con,localhost,root,z,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,root,z,); connect (fail_con,localhost,root,z,);
connection default;
disconnect con1;
disconnect con2;
grant ALL on *.* to test@localhost identified by "gambling"; grant ALL on *.* to test@localhost identified by "gambling";
grant ALL on *.* to test@127.0.0.1 identified by "gambling"; grant ALL on *.* to test@127.0.0.1 identified by "gambling";
...@@ -35,20 +39,23 @@ show tables; ...@@ -35,20 +39,23 @@ show tables;
connect (con4,localhost,test,gambling,test); connect (con4,localhost,test,gambling,test);
show tables; show tables;
connection default;
disconnect con3;
disconnect con4;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,test2); connect (fail_con,localhost,test,,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,""); connect (fail_con,localhost,test,,"");
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,test2); connect (fail_con,localhost,test,zorro,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,); connect (fail_con,localhost,test,zorro,);
# check if old password version also works # check if old password version also works
update mysql.user set password=old_password("gambling2") where user=_binary"test"; update mysql.user set password=old_password("gambling2") where user=_binary"test";
flush privileges; flush privileges;
...@@ -57,30 +64,34 @@ connect (con10,localhost,test,gambling2,); ...@@ -57,30 +64,34 @@ connect (con10,localhost,test,gambling2,);
connect (con5,localhost,test,gambling2,mysql); connect (con5,localhost,test,gambling2,mysql);
connection con5; connection con5;
set password=""; set password="";
--error 1372 --error ER_PASSWD_LENGTH
set password='gambling3'; set password='gambling3';
set password=old_password('gambling3'); set password=old_password('gambling3');
show tables; show tables;
connect (con6,localhost,test,gambling3,test); connect (con6,localhost,test,gambling3,test);
show tables; show tables;
connection default;
disconnect con10;
disconnect con5;
disconnect con6;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,test2); connect (fail_con,localhost,test,,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,); connect (fail_con,localhost,test,,);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,test2); connect (fail_con,localhost,test,zorro,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error 1045 --error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,); connect (fail_con,localhost,test,zorro,);
# remove user 'test' so that other tests which may use 'test' # remove user 'test' so that other tests which may use 'test'
# do not depend on this test. # do not depend on this test.
delete from mysql.user where user=_binary"test"; delete from mysql.user where user=_binary"test";
flush privileges; flush privileges;
...@@ -98,4 +109,9 @@ disconnect con7; ...@@ -98,4 +109,9 @@ disconnect con7;
connection default; connection default;
drop table t1; drop table t1;
--disconnect con1
--disconnect con2
--disconnect con3
--disconnect con4
# End of 4.1 tests # End of 4.1 tests
-- source include/have_innodb.inc --source include/have_innodb.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
drop table if exists t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
### Test 1: ### Test 1:
### - While a consistent snapshot transaction is executed, ### - While a consistent snapshot transaction is executed,
### no external inserts should be visible to the transaction. ### no external inserts should be visible to the transaction.
--echo # Switch to connection con1
connection con1; connection con1;
create table t1 (a int) engine=innodb; CREATE TABLE t1 (a INT) ENGINE=innodb;
start transaction with consistent snapshot; START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo # Switch to connection con2
connection con2; connection con2;
insert into t1 values(1); INSERT INTO t1 VALUES(1);
--echo # Switch to connection con1
connection con1; connection con1;
select * from t1; # if consistent snapshot was set as expected, we SELECT * FROM t1; # if consistent snapshot was set as expected, we
# should see nothing. # should see nothing.
commit; COMMIT;
### Test 2: ### Test 2:
### - For any non-consistent snapshot transaction, external ### - For any non-consistent snapshot transaction, external
### committed inserts should be visible to the transaction. ### committed inserts should be visible to the transaction.
delete from t1; DELETE FROM t1;
start transaction; # Now we omit WITH CONSISTENT SNAPSHOT START TRANSACTION; # Now we omit WITH CONSISTENT SNAPSHOT
--echo # Switch to connection con2
connection con2; connection con2;
insert into t1 values(1); INSERT INTO t1 VALUES(1);
--echo # Switch to connection con1
connection con1; connection con1;
select * from t1; # if consistent snapshot was not set, as expected, we SELECT * FROM t1; # if consistent snapshot was not set, as expected, we
# should see 1. # should see 1.
commit; COMMIT;
drop table t1; --echo # Switch to connection default + close connections con1 and con2
connection default;
disconnect con1;
disconnect con2;
DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
connection con1; connection con1;
...@@ -5,12 +9,19 @@ dirty_close con1; ...@@ -5,12 +9,19 @@ dirty_close con1;
connection con2; connection con2;
--disable_warnings --disable_warnings
drop table if exists t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
create table t1 (n int); CREATE TABLE t1 (n INT);
insert into t1 values (1),(2),(3); INSERT INTO t1 VALUES (1),(2),(3);
select * from t1; SELECT * FROM t1;
drop table t1; DROP TABLE t1;
connection default;
disconnect con2;
# End of 4.1 tests # End of 4.1 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -4,74 +4,106 @@ ...@@ -4,74 +4,106 @@
# This is intended to mimick how mysqldump and innobackup work. # This is intended to mimick how mysqldump and innobackup work.
# And it requires InnoDB # And it requires InnoDB
-- source include/have_innodb.inc --source include/have_innodb.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
--echo # Establish connection con3 (user=root)
connect (con3,localhost,root,,); connect (con3,localhost,root,,);
--echo # Switch to connection con1
connection con1; connection con1;
--disable_warnings --disable_warnings
drop table if exists t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
create table t1 (a int) engine=innodb; CREATE TABLE t1 (a INT) ENGINE=innodb;
# blocks COMMIT ? # blocks COMMIT ?
begin; BEGIN;
insert into t1 values(1); INSERT INTO t1 VALUES(1);
--echo # Switch to connection con2
connection con2; connection con2;
flush tables with read lock; FLUSH TABLES WITH READ LOCK;
select * from t1; SELECT * FROM t1;
--echo # Switch to connection con1
connection con1; connection con1;
send commit; # blocked by con2 send COMMIT; # blocked by con2
sleep 1; sleep 1;
--echo # Switch to connection con2
connection con2; connection con2;
select * from t1; # verify con1 was blocked and data did not move SELECT * FROM t1; # verify con1 was blocked and data did not move
unlock tables; UNLOCK TABLES;
--echo # Switch to connection con1
connection con1; connection con1;
reap; reap;
# No deadlock ? # No deadlock ?
--echo # Switch to connection con1
connection con1; connection con1;
begin; BEGIN;
select * from t1 for update; SELECT * FROM t1 FOR UPDATE;
--echo # Switch to connection con2
connection con2; connection con2;
begin; BEGIN;
send select * from t1 for update; # blocked by con1 send SELECT * FROM t1 FOR UPDATE; # blocked by con1
sleep 1; sleep 1;
--echo # Switch to connection con3
connection con3; connection con3;
send flush tables with read lock; # blocked by con2 send FLUSH TABLES WITH READ LOCK; # blocked by con2
--echo # Switch to connection con1
connection con1; connection con1;
commit; # should not be blocked by con3 COMMIT; # should not be blocked by con3
--echo # Switch to connection con2
connection con2; connection con2;
reap; reap;
--echo # Switch to connection con3
connection con3; connection con3;
reap; reap;
unlock tables; UNLOCK TABLES;
# BUG#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES # Bug#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES
# WITH READ LOCK # WITH READ LOCK
--echo # Switch to connection con2
connection con2; connection con2;
commit; # unlock InnoDB row locks to allow insertions COMMIT; # unlock InnoDB row locks to allow insertions
--echo # Switch to connection con1
connection con1; connection con1;
begin; BEGIN;
insert into t1 values(10); INSERT INTO t1 VALUES(10);
flush tables with read lock; FLUSH TABLES WITH READ LOCK;
commit; COMMIT;
unlock tables; UNLOCK TABLES;
--echo # Switch to connection con2
connection con2; connection con2;
flush tables with read lock; # bug caused hang here FLUSH TABLES WITH READ LOCK; # bug caused hang here
unlock tables; UNLOCK TABLES;
# Bug#7358 SHOW CREATE DATABASE fails if open transaction
BEGIN;
SELECT * FROM t1;
SHOW CREATE DATABASE test;
# BUG#7358 SHOW CREATE DATABASE fails if open transaction DROP TABLE t1;
begin;
select * from t1;
show create database test;
drop table t1; # Cleanup
--echo # Switch to connection default and close connections con1, con2, con3
connection default;
disconnect con1;
disconnect con2;
disconnect con3;
# End of 4.1 tests # End of 4.1 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -3,32 +3,51 @@ ...@@ -3,32 +3,51 @@
# We verify that we did not introduce a deadlock. # We verify that we did not introduce a deadlock.
# This is intended to mimick how mysqldump and innobackup work. # This is intended to mimick how mysqldump and innobackup work.
-- source include/have_log_bin.inc --source include/have_log_bin.inc
# And it requires InnoDB # And it requires InnoDB
-- source include/have_log_bin.inc --source include/have_log_bin.inc
-- source include/have_innodb.inc --source include/have_innodb.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
# FLUSH TABLES WITH READ LOCK should block writes to binlog too # FLUSH TABLES WITH READ LOCK should block writes to binlog too
--echo # Switch to connection con1
connection con1; connection con1;
create table t1 (a int) engine=innodb; CREATE TABLE t1 (a INT) ENGINE=innodb;
reset master; RESET MASTER;
set autocommit=0; SET AUTOCOMMIT=0;
insert t1 values (1); INSERT t1 VALUES (1);
--echo # Switch to connection con2
connection con2; connection con2;
flush tables with read lock; FLUSH TABLES WITH READ LOCK;
show master status; SHOW MASTER STATUS;
--echo # Switch to connection con1
connection con1; connection con1;
send commit; send COMMIT;
--echo # Switch to connection con2
connection con2; connection con2;
sleep 1; sleep 1;
show master status; SHOW MASTER STATUS;
unlock tables; UNLOCK TABLES;
--echo # Switch to connection con1
connection con1; connection con1;
reap; reap;
drop table t1; DROP TABLE t1;
set autocommit=1; SET AUTOCOMMIT=1;
--echo # Switch to connection default and close connections con1 and con2
connection default;
disconnect con1;
disconnect con2;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -8,19 +8,27 @@ ...@@ -8,19 +8,27 @@
# won't test anything interesting). # won't test anything interesting).
# This also won't work with the embedded server test # This also won't work with the embedded server test
-- source include/not_embedded.inc --source include/not_embedded.inc
-- source include/have_debug.inc --source include/have_debug.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
# Disable concurrent inserts to avoid test failures when reading the
# connection id which was inserted into a table by another thread.
SET @old_concurrent_insert= @@global.concurrent_insert;
SET @@global.concurrent_insert= 0;
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
connection con1; connection con1;
--disable_warnings --disable_warnings
drop table if exists t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
create table t1 (kill_id int); CREATE TABLE t1 (kill_id INT);
insert into t1 values(connection_id()); INSERT INTO t1 VALUES(connection_id());
# Thanks to the parameter we passed to --debug, this FLUSH will # Thanks to the parameter we passed to --debug, this FLUSH will
# block on a debug build running with our --debug=make_global... It # block on a debug build running with our --debug=make_global... It
...@@ -28,14 +36,14 @@ insert into t1 values(connection_id()); ...@@ -28,14 +36,14 @@ insert into t1 values(connection_id());
# --debug) it will succeed immediately # --debug) it will succeed immediately
connection con1; connection con1;
send flush tables with read lock; send FLUSH TABLES WITH READ LOCK;
# kill con1 # kill con1
connection con2; connection con2;
select ((@id := kill_id) - kill_id) from t1; SELECT ((@id := kill_id) - kill_id) FROM t1;
--sleep 2 # leave time for FLUSH to block --sleep 2 # leave time for FLUSH to block
kill connection @id; KILL CONNECTION @id;
connection con1; connection con1;
# On debug builds it will be error 1053 (killed); on non-debug, or # On debug builds it will be error 1053 (killed); on non-debug, or
...@@ -46,4 +54,13 @@ connection con1; ...@@ -46,4 +54,13 @@ connection con1;
reap; reap;
connection con2; connection con2;
drop table t1; DROP TABLE t1;
connection default;
disconnect con2;
# Restore global concurrent_insert value
SET @@global.concurrent_insert= @old_concurrent_insert;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
# should work with embedded server after mysqltest is fixed # should work with embedded server after mysqltest is fixed
--source include/not_embedded.inc --source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--source include/add_anonymous_users.inc --source include/add_anonymous_users.inc
connect (con0,localhost,root,,); connect (con0,localhost,root,,);
...@@ -233,7 +236,8 @@ connect (con1,localhost,mysqltest1,,); ...@@ -233,7 +236,8 @@ connect (con1,localhost,mysqltest1,,);
connection con1; connection con1;
select * from t1; select * from t1;
connection con0; connection default;
disconnect con0;
disconnect con1; disconnect con1;
drop trigger trg1; drop trigger trg1;
...@@ -244,3 +248,7 @@ set global init_connect="set @a='a\\0c'"; ...@@ -244,3 +248,7 @@ set global init_connect="set @a='a\\0c'";
revoke all privileges, grant option from mysqltest1@localhost; revoke all privileges, grant option from mysqltest1@localhost;
drop user mysqltest1@localhost; drop user mysqltest1@localhost;
drop table t1, t2; drop table t1, t2;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
drop table if exists t1,t2; drop table if exists t1,t2;
--enable_warnings --enable_warnings
...@@ -14,12 +18,23 @@ create table t1(n int); ...@@ -14,12 +18,23 @@ create table t1(n int);
insert into t1 values (1); insert into t1 values (1);
lock tables t1 write; lock tables t1 write;
connection writer; connection writer;
send update low_priority t1 set n = 4; send
update low_priority t1 set n = 4;
connection reader; connection reader;
--sleep 2 # Sleep a bit till the update of connection writer is in work and hangs
send select n from t1; let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Locked';
--source include/wait_show_condition.inc
send
select n from t1;
connection locker; connection locker;
--sleep 2 # Sleep a bit till the select of connection reader is in work and hangs
# Here we cannot use include/wait_show_condition.inc because this routine
# cannot count the number of 'Locked' sessions or access two columns within
# the same query_get_value call.
--sleep 3
unlock tables; unlock tables;
connection writer; connection writer;
reap; reap;
...@@ -32,12 +47,23 @@ create table t1(n int); ...@@ -32,12 +47,23 @@ create table t1(n int);
insert into t1 values (1); insert into t1 values (1);
lock tables t1 read; lock tables t1 read;
connection writer; connection writer;
send update low_priority t1 set n = 4; send
update low_priority t1 set n = 4;
connection reader; connection reader;
--sleep 2 # Sleep a bit till the update of connection writer is in work and hangs
send select n from t1; let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Locked';
--source include/wait_show_condition.inc
#
send
select n from t1;
connection locker; connection locker;
--sleep 2 # Sleep a bit till the select of connection reader is in work and hangs
# Here we cannot use include/wait_show_condition.inc.
--sleep 3
#
unlock tables; unlock tables;
connection writer; connection writer;
reap; reap;
...@@ -58,10 +84,15 @@ insert into t1 values(2,2); ...@@ -58,10 +84,15 @@ insert into t1 values(2,2);
insert into t2 values(1,2); insert into t2 values(1,2);
lock table t1 read; lock table t1 read;
connection writer; connection writer;
--sleep 2 # mleich: IMHO the "send is not necessary because the update should not block.
send update t1,t2 set c=a where b=d; # But it will save some runtime in case we block because of an error.
send
update t1,t2 set c=a where b=d;
connection reader; connection reader;
--sleep 2 # Sleep a bit till the update of connection writer is finished
# Here we cannot use include/wait_show_condition.inc.
--sleep 3
#
select c from t2; select c from t2;
connection writer; connection writer;
reap; reap;
...@@ -70,7 +101,7 @@ drop table t1; ...@@ -70,7 +101,7 @@ drop table t1;
drop table t2; drop table t2;
# #
# Test problem when using locks on many tables and droping a table that # Test problem when using locks on many tables and dropping a table that
# is to-be-locked by another thread # is to-be-locked by another thread
# #
...@@ -79,11 +110,18 @@ create table t1 (a int); ...@@ -79,11 +110,18 @@ create table t1 (a int);
create table t2 (a int); create table t2 (a int);
lock table t1 write, t2 write; lock table t1 write, t2 write;
connection reader; connection reader;
send insert t1 select * from t2; send
insert t1 select * from t2;
connection locker; connection locker;
# Sleep a bit till the insert of connection reader is in work and hangs
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Locked';
--source include/wait_show_condition.inc
drop table t2; drop table t2;
connection reader; connection reader;
--error 1146 --error ER_NO_SUCH_TABLE
reap; reap;
connection locker; connection locker;
drop table t1; drop table t1;
...@@ -91,7 +129,7 @@ drop table t1; ...@@ -91,7 +129,7 @@ drop table t1;
# End of 4.1 tests # End of 4.1 tests
# #
# BUG#9998 - MySQL client hangs on USE "database" # Bug#9998 MySQL client hangs on USE "database"
# #
create table t1(a int); create table t1(a int);
lock tables t1 write; lock tables t1 write;
...@@ -102,7 +140,7 @@ unlock tables; ...@@ -102,7 +140,7 @@ unlock tables;
drop table t1; drop table t1;
# #
# Bug#19815 - CREATE/RENAME/DROP DATABASE can deadlock on a global read lock # Bug#19815 CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
# #
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
connect (con2,localhost,root,,); connect (con2,localhost,root,,);
...@@ -114,12 +152,18 @@ FLUSH TABLES WITH READ LOCK; ...@@ -114,12 +152,18 @@ FLUSH TABLES WITH READ LOCK;
# With bug in place: acquire LOCK_mysql_create_table and # With bug in place: acquire LOCK_mysql_create_table and
# wait in wait_if_global_read_lock(). # wait in wait_if_global_read_lock().
connection con2; connection con2;
send DROP DATABASE mysqltest_1; send
--sleep 1 DROP DATABASE mysqltest_1;
# #
# With bug in place: try to acquire LOCK_mysql_create_table... # With bug in place: try to acquire LOCK_mysql_create_table...
# When fixed: Reject dropping db because of the read lock. # When fixed: Reject dropping db because of the read lock.
connection con1; connection con1;
# Wait a bit so that the session con2 is in state "Waiting for release of readlock"
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Waiting for release of readlock';
--source include/wait_show_condition.inc
--error ER_CANT_UPDATE_WITH_READLOCK --error ER_CANT_UPDATE_WITH_READLOCK
DROP DATABASE mysqltest_1; DROP DATABASE mysqltest_1;
UNLOCK TABLES; UNLOCK TABLES;
...@@ -135,26 +179,33 @@ disconnect con2; ...@@ -135,26 +179,33 @@ disconnect con2;
--error ER_DB_DROP_EXISTS --error ER_DB_DROP_EXISTS
DROP DATABASE mysqltest_1; DROP DATABASE mysqltest_1;
# #
# Bug#16986 - Deadlock condition with MyISAM tables # Bug#16986 Deadlock condition with MyISAM tables
# #
# Need a matching user in mysql.user for multi-table select # Need a matching user in mysql.user for multi-table select
--source include/add_anonymous_users.inc --source include/add_anonymous_users.inc
connection locker; connection locker;
use mysql; USE mysql;
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE; LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
FLUSH TABLES; FLUSH TABLES;
--sleep 1 --sleep 1
# #
connection reader; connection reader;
use mysql; USE mysql;
#NOTE: This must be a multi-table select, otherwise the deadlock will not occur # Note: This must be a multi-table select, otherwise the deadlock will not occur
send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1; send
--sleep 1 SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
# #
connection locker; connection locker;
# Sleep a bit till the select of connection reader is in work and hangs
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Locked';
--source include/wait_show_condition.inc
# Make test case independent from earlier grants. # Make test case independent from earlier grants.
--replace_result "Table is already up to date" "OK" --replace_result "Table is already up to date" "OK"
OPTIMIZE TABLES columns_priv, db, host, user; OPTIMIZE TABLES columns_priv, db, host, user;
...@@ -162,7 +213,7 @@ UNLOCK TABLES; ...@@ -162,7 +213,7 @@ UNLOCK TABLES;
# #
connection reader; connection reader;
reap; reap;
use test; USE test;
# #
connection locker; connection locker;
use test; use test;
...@@ -177,11 +228,17 @@ LOCK TABLE t1 WRITE; ...@@ -177,11 +228,17 @@ LOCK TABLE t1 WRITE;
# #
# This waits until t1 is unlocked. # This waits until t1 is unlocked.
connection locker; connection locker;
send FLUSH TABLES WITH READ LOCK; send
--sleep 1 FLUSH TABLES WITH READ LOCK;
# #
# This must not block. # This must not block.
connection writer; connection writer;
# Sleep a bit till the flush of connection locker is in work and hangs
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Flushing tables';
--source include/wait_show_condition.inc
CREATE TABLE t2 (c1 int); CREATE TABLE t2 (c1 int);
UNLOCK TABLES; UNLOCK TABLES;
# #
...@@ -201,12 +258,18 @@ LOCK TABLE t1 WRITE; ...@@ -201,12 +258,18 @@ LOCK TABLE t1 WRITE;
# #
# This waits until t1 is unlocked. # This waits until t1 is unlocked.
connection locker; connection locker;
send FLUSH TABLES WITH READ LOCK; send
--sleep 1 FLUSH TABLES WITH READ LOCK;
# #
# This must not block. # This must not block.
connection writer; connection writer;
--error 1100 # Sleep a bit till the flush of connection locker is in work and hangs
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Flushing tables';
--source include/wait_show_condition.inc
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t2 AS SELECT * FROM t1; CREATE TABLE t2 AS SELECT * FROM t1;
UNLOCK TABLES; UNLOCK TABLES;
# #
...@@ -220,8 +283,9 @@ DROP TABLE t1; ...@@ -220,8 +283,9 @@ DROP TABLE t1;
--source include/delete_anonymous_users.inc --source include/delete_anonymous_users.inc
# #
# Bug #17264: MySQL Server freeze # Bug#17264 MySQL Server freeze
# #
connection locker; connection locker;
# Disable warnings to allow test to run also without InnoDB # Disable warnings to allow test to run also without InnoDB
...@@ -230,17 +294,27 @@ create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) e ...@@ -230,17 +294,27 @@ create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) e
--enable_warnings --enable_warnings
lock tables t1 write; lock tables t1 write;
connection writer; connection writer;
--sleep 2 # mleich: I have doubts if the next sleep is really necessary
# --sleep 2
delimiter //; delimiter //;
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; // send
alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
delimiter ;// delimiter ;//
connection reader; connection reader;
--sleep 2 # Wait till connection writer is blocked
let $wait_timeout= 5;
let $show_statement= SHOW PROCESSLIST;
let $field= State;
let $condition= = 'Locked';
--source include/wait_show_condition.inc
delimiter //; delimiter //;
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; // send
alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
delimiter ;// delimiter ;//
connection locker; connection locker;
--sleep 2 # Wait till connection reader is blocked
# Here we cannot use include/wait_show_condition.inc.
--sleep 3
unlock tables; unlock tables;
connection writer; connection writer;
reap; reap;
...@@ -263,7 +337,7 @@ lock tables t1 read; ...@@ -263,7 +337,7 @@ lock tables t1 read;
--echo connection: writer --echo connection: writer
connection writer; connection writer;
let $ID= `select connection_id()`; let $ID= `select connection_id()`;
--send create table t2 like t1; send create table t2 like t1;
--echo connection: default --echo connection: default
connection default; connection default;
let $show_type= open tables where in_use=2 and name_locked=1; let $show_type= open tables where in_use=2 and name_locked=1;
...@@ -282,8 +356,8 @@ connection default; ...@@ -282,8 +356,8 @@ connection default;
drop table t1; drop table t1;
# #
# Bug #38691: segfault/abort in ``UPDATE ...JOIN'' while # Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while
# ``FLUSH TABLES WITH READ LOCK'' # ``FLUSH TABLES WITH READ LOCK''
# #
--connection default --connection default
...@@ -354,7 +428,7 @@ while ($i) { ...@@ -354,7 +428,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL; ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t2 SET a=b; UPDATE t2 SET a=b;
...@@ -362,11 +436,11 @@ while ($i) { ...@@ -362,11 +436,11 @@ while ($i) {
--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b --send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t2 DROP COLUMN a; ALTER TABLE t2 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 --error 0,ER_BAD_FIELD_ERROR
--reap --reap
} }
--enable_query_log --enable_query_log
...@@ -379,7 +453,7 @@ while ($i) { ...@@ -379,7 +453,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL; ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t2 SET a=b; UPDATE t2 SET a=b;
...@@ -388,11 +462,11 @@ while ($i) { ...@@ -388,11 +462,11 @@ while ($i) {
--send EXECUTE stmt --send EXECUTE stmt
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t2 DROP COLUMN a; ALTER TABLE t2 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 --error 0,ER_BAD_FIELD_ERROR
--reap --reap
} }
...@@ -400,8 +474,9 @@ while ($i) { ...@@ -400,8 +474,9 @@ while ($i) {
--connection default --connection default
DROP TABLE t1, t2, t3; DROP TABLE t1, t2, t3;
# #
# Bug#38499: flush tables and multitable table update with derived table cause # Bug#38499: flush tables and multitable table update with derived table cause
# crash # crash
# #
...@@ -460,7 +535,7 @@ while ($i) { ...@@ -460,7 +535,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL; ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t1 SET a=b; UPDATE t1 SET a=b;
...@@ -468,11 +543,11 @@ while ($i) { ...@@ -468,11 +543,11 @@ while ($i) {
--send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0; --send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 # unknown column error --error 0,ER_BAD_FIELD_ERROR # unknown column error
--reap --reap
} }
--enable_query_log --enable_query_log
...@@ -485,7 +560,7 @@ while ($i) { ...@@ -485,7 +560,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a INT; ALTER TABLE t1 ADD COLUMN a INT;
UPDATE t1 SET a=b; UPDATE t1 SET a=b;
...@@ -494,11 +569,11 @@ while ($i) { ...@@ -494,11 +569,11 @@ while ($i) {
--send EXECUTE stmt --send EXECUTE stmt
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 # Unknown column 'a' in 'field list' --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap --reap
} }
--enable_query_log --enable_query_log
...@@ -557,7 +632,7 @@ while ($i) { ...@@ -557,7 +632,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL; ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t1 SET a=b; UPDATE t1 SET a=b;
...@@ -565,11 +640,11 @@ while ($i) { ...@@ -565,11 +640,11 @@ while ($i) {
--send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0; --send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 # Unknown column 'a' in 'field list' --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap --reap
} }
--enable_query_log --enable_query_log
...@@ -582,7 +657,7 @@ while ($i) { ...@@ -582,7 +657,7 @@ while ($i) {
dec $i; dec $i;
--connection locker --connection locker
--error 0,1060 --error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a INT; ALTER TABLE t1 ADD COLUMN a INT;
UPDATE t1 SET a=b; UPDATE t1 SET a=b;
...@@ -591,15 +666,25 @@ while ($i) { ...@@ -591,15 +666,25 @@ while ($i) {
--send EXECUTE stmt --send EXECUTE stmt
--connection locker --connection locker
--error 0,1091 --error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN a;
--connection writer --connection writer
--error 0,1054 # Unknown column 'a' in 'field list' --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap --reap
} }
--enable_query_log --enable_query_log
--connection default --connection default
DROP TABLE t1; DROP TABLE t1;
# Close connections used in many subtests
--disconnect reader
--disconnect locker
--disconnect writer
# End of 5.0 tests # End of 5.0 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -19,7 +19,7 @@ insert into t2 values (); ...@@ -19,7 +19,7 @@ insert into t2 values ();
# set @a:=1 # set @a:=1
# insert into t2 values (@a); # insert into t2 values (@a);
# test for load data and load data distributed among the several # test for load data and load data distributed among the several
# files (we need to fill up first binlog) # files (we need to fill up first binlog)
load data infile '../std_data_ln/words.dat' into table t1; load data infile '../std_data_ln/words.dat' into table t1;
load data infile '../std_data_ln/words.dat' into table t1; load data infile '../std_data_ln/words.dat' into table t1;
...@@ -104,7 +104,7 @@ select "--- --position --" as ""; ...@@ -104,7 +104,7 @@ select "--- --position --" as "";
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ --replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=231 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002 --exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=231 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
# Bug#7853 (mysqlbinlog does not accept input from stdin) # Bug#7853 mysqlbinlog does not accept input from stdin
--disable_query_log --disable_query_log
select "--- reading stdin --" as ""; select "--- reading stdin --" as "";
--enable_query_log --enable_query_log
...@@ -118,7 +118,7 @@ select "--- reading stdin --" as ""; ...@@ -118,7 +118,7 @@ select "--- reading stdin --" as "";
drop table t1,t2; drop table t1,t2;
# #
#BUG#14157: utf8 encoding in binlog without set character_set_client # Bug#14157 utf8 encoding in binlog without set character_set_client
# #
flush logs; flush logs;
--write_file $MYSQLTEST_VARDIR/tmp/bug14157.sql --write_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
...@@ -131,8 +131,8 @@ EOF ...@@ -131,8 +131,8 @@ EOF
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug14157.sql --exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug14157.sql
--remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql --remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
# resulted binlog, parly consisting of multi-byte utf8 chars, # resulted binlog, parly consisting of multi-byte utf8 chars,
# must be digestable for both client and server. In 4.1 the client # must be digestable for both client and server. In 4.1 the client
# should use default-character-set same as the server. # should use default-character-set same as the server.
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL
select * from t5 /* must be (1),(1) */; select * from t5 /* must be (1),(1) */;
...@@ -158,7 +158,7 @@ select * from t5 order by c1; ...@@ -158,7 +158,7 @@ select * from t5 order by c1;
drop table t5; drop table t5;
# #
# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails # Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
# #
--disable_warnings --disable_warnings
drop procedure if exists p1; drop procedure if exists p1;
...@@ -174,7 +174,7 @@ delimiter ;// ...@@ -174,7 +174,7 @@ delimiter ;//
flush logs; flush logs;
call p1(); call p1();
drop procedure p1; drop procedure p1;
--error 1305 --error ER_SP_DOES_NOT_EXIST
call p1(); call p1();
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/ --replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007
...@@ -222,35 +222,36 @@ flush logs; ...@@ -222,35 +222,36 @@ flush logs;
CREATE TABLE t1 (c1 CHAR(10)); CREATE TABLE t1 (c1 CHAR(10));
# we need this for getting fixed timestamps inside of this test # we need this for getting fixed timestamps inside of this test
flush logs; FLUSH LOGS;
INSERT INTO t1 VALUES ('0123456789'); INSERT INTO t1 VALUES ('0123456789');
flush logs; FLUSH LOGS;
DROP TABLE t1; DROP TABLE t1;
--exec $MYSQL_BINLOG --hexdump --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000011 | grep 'Query' | sed 's/[0-9]\{1,\}/REMOVED/g' --exec $MYSQL_BINLOG --hexdump --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000011 | grep 'Query' | sed 's/[0-9]\{1,\}/REMOVED/g'
# #
# Bug #29928: incorrect connection_id() restoring from mysqlbinlog out # Bug#29928 incorrect connection_id() restoring from mysqlbinlog out
# #
flush logs; FLUSH LOGS;
create table t1(a int); CREATE TABLE t1(a INT);
insert into t1 values(connection_id()); INSERT INTO t1 VALUES(connection_id());
let $a= `select a from t1`; let $a= `SELECT a FROM t1`;
flush logs; FLUSH LOGS;
--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000013 > $MYSQLTEST_VARDIR/tmp/bug29928.sql --exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000013 > $MYSQLTEST_VARDIR/tmp/bug29928.sql
drop table t1; DROP TABLE t1;
connect (con1, localhost, root, , test); connect (con1, localhost, root, , test);
connection con1; connection con1;
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug29928.sql --exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug29928.sql
--remove_file $MYSQLTEST_VARDIR/tmp/bug29928.sql --remove_file $MYSQLTEST_VARDIR/tmp/bug29928.sql
let $b= `select a from t1`; let $b= `SELECT a FROM t1`;
disconnect con1; disconnect con1;
connection default; connection default;
let $c= `select $a=$b`; let $c= `SELECT $a=$b`;
--echo $c --echo $c
drop table t1; DROP TABLE t1;
echo shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql; echo shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql;
error 1; error 1;
exec $MYSQL_BINLOG $MYSQL_TEST_DIR/std_data/corrupt-relay-bin.000624 > $MYSQLTEST_VARDIR/tmp/bug31793.sql; exec $MYSQL_BINLOG $MYSQL_TEST_DIR/std_data/corrupt-relay-bin.000624 > $MYSQLTEST_VARDIR/tmp/bug31793.sql;
remove_file $MYSQLTEST_VARDIR/tmp/bug31793.sql;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
# This test uses chmod, can't be run with root permissions # This test uses chmod, can't be run with root permissions
-- source include/not_as_root.inc -- source include/not_as_root.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
# ============================================================================ # ============================================================================
# #
# Test of mysqltest itself # Test of mysqltest itself
...@@ -50,7 +53,7 @@ select otto from (select 1 as otto) as t1; ...@@ -50,7 +53,7 @@ select otto from (select 1 as otto) as t1;
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Negative case(statement): # Negative case(statement):
# The derived table t1 does not contain a column named 'friedrich' . # The derived table t1 does not contain a column named 'friedrich' .
# --> ERROR 42S22: Unknown column 'friedrich' in 'field list and # --> ERROR 42S22: Unknown column 'friedrich' in 'field list and
# --> 1054: Unknown column 'friedrich' in 'field list' # --> 1054: Unknown column 'friedrich' in 'field list'
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
...@@ -116,7 +119,7 @@ select friedrich from (select 1 as otto) as t1; ...@@ -116,7 +119,7 @@ select friedrich from (select 1 as otto) as t1;
# $mysql_errno is a builtin variable of mysqltest and contains the return code # $mysql_errno is a builtin variable of mysqltest and contains the return code
# of the last command sent to the server. # of the last command sent to the server.
# #
# The following test cases often initialize $mysql_errno to 1064 by # The following test cases often initialize $mysql_errno to 1064 by
# a command with wrong syntax. # a command with wrong syntax.
# Example: --error 1064 To prevent the abort after the error. # Example: --error 1064 To prevent the abort after the error.
# garbage ; # garbage ;
...@@ -454,7 +457,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; ...@@ -454,7 +457,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
# Allow trailing # comment # Allow trailing # comment
--sleep 1 # Wait for insert delayed to be executed. --sleep 1 # Wait for insert delayed to be executed.
--sleep 1 # Wait for insert delayed to be executed. --sleep 1 # Wait for insert delayed to be executed.
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Test error # Test error
...@@ -1360,7 +1363,7 @@ connection default; ...@@ -1360,7 +1363,7 @@ connection default;
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# TODO Test queries, especially their errormessages... so it's easy to debug # TODO Test queries, especially their errormessages... so it's easy to debug
# new scripts and diagnose errors # new scripts and diagnose errors
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
...@@ -1401,7 +1404,7 @@ let $message= `SELECT USER()`; ...@@ -1401,7 +1404,7 @@ let $message= `SELECT USER()`;
# The message contains more then 80 characters on multiple lines # The message contains more then 80 characters on multiple lines
# and is kept between double quotes. # and is kept between double quotes.
let $message= let $message=
"Here comes a very very long message that "Here comes a very very long message that
- is longer then 80 characters and - is longer then 80 characters and
- consists of several lines"; - consists of several lines";
...@@ -1436,7 +1439,7 @@ select "this will be executed"; ...@@ -1436,7 +1439,7 @@ select "this will be executed";
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result; remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result;
--error 0,1 --error 0,1
remove_file $MYSQLTEST_VARDIR/log/zero_length_file.reject; remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.reject;
--error 0,1 --error 0,1
remove_file $MYSQL_TEST_DIR/r/zero_length_file.reject; remove_file $MYSQL_TEST_DIR/r/zero_length_file.reject;
...@@ -1510,7 +1513,7 @@ remove_file $MYSQLTEST_VARDIR/log/bug11731.log; ...@@ -1510,7 +1513,7 @@ remove_file $MYSQLTEST_VARDIR/log/bug11731.log;
remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql; remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql;
# #
# Bug#19890 mysqltest: "query" command is broken # Bug#19890 mysqltest: "query" command is broken
# #
# It should be possible to use the command "query" to force mysqltest to # It should be possible to use the command "query" to force mysqltest to
...@@ -1533,7 +1536,7 @@ select "at" as col1, "c" as col2; ...@@ -1533,7 +1536,7 @@ select "at" as col1, "c" as col2;
select "at" as col1, "AT" as col2, "c" as col3; select "at" as col1, "AT" as col2, "c" as col3;
--replace_regex /a/b/ /ct/d/ --replace_regex /a/b/ /ct/d/
select "a" as col1, "ct" as col2; select "a" as col1, "ct" as col2;
--replace_regex /(strawberry)/raspberry and \1/ /blueberry/blackberry/ /potato/tomato/; --replace_regex /(strawberry)/raspberry and \1/ /blueberry/blackberry/ /potato/tomato/;
select "strawberry","blueberry","potato"; select "strawberry","blueberry","potato";
...@@ -1551,7 +1554,7 @@ select "strawberry","blueberry","potato"; ...@@ -1551,7 +1554,7 @@ select "strawberry","blueberry","potato";
--error 1 --error 1
--exec echo "--replace_regex /a b c" | $MYSQL_TEST 2>&1 --exec echo "--replace_regex /a b c" | $MYSQL_TEST 2>&1
--error 1 --error 1
--exec echo "replace_regex /a /b c ;" | $MYSQL_TEST 2>&1 --exec echo "replace_regex /a /b c ;" | $MYSQL_TEST 2>&1
# REQUIREMENT # REQUIREMENT
# replace_regex should replace substitutions from left to right in output # replace_regex should replace substitutions from left to right in output
...@@ -1920,7 +1923,7 @@ SELECT '2' as "my_col1",2 as "my_col2" ...@@ -1920,7 +1923,7 @@ SELECT '2' as "my_col1",2 as "my_col2"
UNION UNION
SELECT '1',1 from t2; SELECT '1',1 from t2;
# 9. Ensure that several result formatting options including "sorted_result" # 9. Ensure that several result formatting options including "sorted_result"
# - have all an effect # - have all an effect
# - "--sorted_result" does not need to be direct before the statement # - "--sorted_result" does not need to be direct before the statement
# - Row sorting is applied after modification of the column content # - Row sorting is applied after modification of the column content
...@@ -2126,3 +2129,5 @@ rmdir $MYSQLTEST_VARDIR/tmp/testdir; ...@@ -2126,3 +2129,5 @@ rmdir $MYSQLTEST_VARDIR/tmp/testdir;
--echo End of tests --echo End of tests
# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
# should work with embedded server after mysqltest is fixed # should work with embedded server after mysqltest is fixed
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1,t2,t3; DROP TABLE IF EXISTS t1,t2,t3;
--enable_warnings --enable_warnings
...@@ -40,24 +43,24 @@ connection con1; ...@@ -40,24 +43,24 @@ connection con1;
select @@global.read_only; select @@global.read_only;
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
create table t3 (a int); create table t3 (a int);
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
insert into t1 values(1); insert into t1 values(1);
# if a statement, after parse stage, looks like it will update a # if a statement, after parse stage, looks like it will update a
# non-temp table, it will be rejected, even if at execution it would # non-temp table, it will be rejected, even if at execution it would
# have turned out that 0 rows would be updated # have turned out that 0 rows would be updated
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
update t1 set a=1 where 1=0; update t1 set a=1 where 1=0;
# multi-update is special (see sql_parse.cc) so we test it # multi-update is special (see sql_parse.cc) so we test it
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
update t1,t2 set t1.a=t2.a+1 where t1.a=t2.a; update t1,t2 set t1.a=t2.a+1 where t1.a=t2.a;
# check multi-delete to be sure # check multi-delete to be sure
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
delete t1,t2 from t1,t2 where t1.a=t2.a; delete t1,t2 from t1,t2 where t1.a=t2.a;
# With temp tables updates should be accepted: # With temp tables updates should be accepted:
...@@ -71,7 +74,7 @@ insert into t3 values(1); ...@@ -71,7 +74,7 @@ insert into t3 values(1);
insert into t4 select * from t3; insert into t4 select * from t3;
# a non-temp table updated: # a non-temp table updated:
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
update t1,t3 set t1.a=t3.a+1 where t1.a=t3.a; update t1,t3 set t1.a=t3.a+1 where t1.a=t3.a;
# no non-temp table updated (just swapped): # no non-temp table updated (just swapped):
...@@ -79,7 +82,7 @@ update t1,t3 set t3.a=t1.a+1 where t1.a=t3.a; ...@@ -79,7 +82,7 @@ update t1,t3 set t3.a=t1.a+1 where t1.a=t3.a;
update t4,t3 set t4.a=t3.a+1 where t4.a=t3.a; update t4,t3 set t4.a=t3.a+1 where t4.a=t3.a;
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
delete t1 from t1,t3 where t1.a=t3.a; delete t1 from t1,t3 where t1.a=t3.a;
delete t3 from t1,t3 where t1.a=t3.a; delete t3 from t1,t3 where t1.a=t3.a;
...@@ -98,11 +101,11 @@ delete t1 from t1,t3 where t1.a=t3.a; ...@@ -98,11 +101,11 @@ delete t1 from t1,t3 where t1.a=t3.a;
drop table t1; drop table t1;
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT
insert into t1 values(1); insert into t1 values(1);
# #
# BUG #22077 "DROP TEMPORARY TABLE fails with wrong error if read_only is set" # Bug#22077 DROP TEMPORARY TABLE fails with wrong error if read_only is set
# #
# check if DROP TEMPORARY on a non-existing temporary table returns the right # check if DROP TEMPORARY on a non-existing temporary table returns the right
# error # error
...@@ -114,11 +117,12 @@ drop temporary table ttt; ...@@ -114,11 +117,12 @@ drop temporary table ttt;
drop temporary table if exists ttt; drop temporary table if exists ttt;
connection default; connection default;
disconnect con1;
drop table t1,t2; drop table t1,t2;
drop user test@localhost; drop user test@localhost;
--echo # --echo #
--echo # Bug #27440 read_only allows create and drop database --echo # Bug#27440 read_only allows create and drop database
--echo # --echo #
--disable_warnings --disable_warnings
drop database if exists mysqltest_db1; drop database if exists mysqltest_db1;
...@@ -151,3 +155,7 @@ delete from mysql.columns_priv where User like 'mysqltest_%'; ...@@ -151,3 +155,7 @@ delete from mysql.columns_priv where User like 'mysqltest_%';
flush privileges; flush privileges;
drop database mysqltest_db1; drop database mysqltest_db1;
set global read_only=0; set global read_only=0;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
# Uses GRANT commands that usually disabled in embedded server # Uses GRANT commands that usually disabled in embedded server
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
# #
# Test of some show commands # Test of some show commands
# #
...@@ -33,7 +36,7 @@ check table t1 medium; ...@@ -33,7 +36,7 @@ check table t1 medium;
check table t1 extended; check table t1 extended;
show index from t1; show index from t1;
--disable_metadata --disable_metadata
--error 1062 --error ER_DUP_ENTRY
insert into t1 values (5,5,5); insert into t1 values (5,5,5);
--echo -- Here we enable metadata just to check that the collation of the --echo -- Here we enable metadata just to check that the collation of the
...@@ -191,14 +194,14 @@ show columns from t1; ...@@ -191,14 +194,14 @@ show columns from t1;
drop table t1; drop table t1;
# #
# Test for Bug #2593 "SHOW CREATE TABLE doesn't properly double quotes" # Test for Bug#2593 SHOW CREATE TABLE doesn't properly double quotes
# #
SET @old_sql_mode= @@sql_mode, sql_mode= ''; SET @old_sql_mode= @@sql_mode, sql_mode= '';
SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF; SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF;
######### hook for WL#1324 # ######### hook for WL#1324 #
--error 1103 --error ER_WRONG_TABLE_NAME
CREATE TABLE `a/b` (i INT); CREATE TABLE `a/b` (i INT);
# the above test should WORK when WL#1324 is done, # the above test should WORK when WL#1324 is done,
# it should be removed and # it should be removed and
...@@ -224,7 +227,7 @@ CREATE TABLE `a/b` (i INT); ...@@ -224,7 +227,7 @@ CREATE TABLE `a/b` (i INT);
#SHOW CREATE TABLE """a"; #SHOW CREATE TABLE """a";
#DROP TABLE """a"; #DROP TABLE """a";
# #
#Bug #4374 SHOW TABLE STATUS FROM ignores collation_connection #Bug#4374 SHOW TABLE STATUS FROM ignores collation_connection
#set names latin1; #set names latin1;
#create database ``; #create database ``;
#create table ``.`` (a int) engine=heap; #create table ``.`` (a int) engine=heap;
...@@ -252,7 +255,7 @@ SET sql_quote_show_create= @old_sql_quote_show_create; ...@@ -252,7 +255,7 @@ SET sql_quote_show_create= @old_sql_quote_show_create;
SET sql_mode= @old_sql_mode; SET sql_mode= @old_sql_mode;
# #
# Test for bug #2719 "Heap tables status shows wrong or missing data." # Test for Bug#2719 Heap tables status shows wrong or missing data.
# #
select @@max_heap_table_size; select @@max_heap_table_size;
...@@ -313,7 +316,7 @@ show table status; ...@@ -313,7 +316,7 @@ show table status;
drop table t1, t2, t3; drop table t1, t2, t3;
# #
# Test for bug #3342 SHOW CREATE DATABASE seems to require DROP privilege # Test for Bug#3342 SHOW CREATE DATABASE seems to require DROP privilege
# #
create database mysqltest; create database mysqltest;
...@@ -328,36 +331,39 @@ connect (con1,localhost,mysqltest_1,,mysqltest); ...@@ -328,36 +331,39 @@ connect (con1,localhost,mysqltest_1,,mysqltest);
connection con1; connection con1;
select * from t1; select * from t1;
show create database mysqltest; show create database mysqltest;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
drop table t1; drop table t1;
--error 1044 --error ER_DBACCESS_DENIED_ERROR
drop database mysqltest; drop database mysqltest;
disconnect con1;
connect (con2,localhost,mysqltest_2,,test); connect (con2,localhost,mysqltest_2,,test);
connection con2; connection con2;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest.t1; select * from mysqltest.t1;
--error 1044 --error ER_DBACCESS_DENIED_ERROR
show create database mysqltest; show create database mysqltest;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
drop table mysqltest.t1; drop table mysqltest.t1;
--error 1044 --error ER_DBACCESS_DENIED_ERROR
drop database mysqltest; drop database mysqltest;
disconnect con2;
connect (con3,localhost,mysqltest_3,,test); connect (con3,localhost,mysqltest_3,,test);
connection con3; connection con3;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest.t1; select * from mysqltest.t1;
--error 1044 --error ER_DBACCESS_DENIED_ERROR
show create database mysqltest; show create database mysqltest;
drop table mysqltest.t1; drop table mysqltest.t1;
drop database mysqltest; drop database mysqltest;
disconnect con3;
connection default; connection default;
set names binary; set names binary;
delete from mysql.user delete from mysql.user
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3'; where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
delete from mysql.db delete from mysql.db
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3'; where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges; flush privileges;
...@@ -371,7 +377,7 @@ flush privileges; ...@@ -371,7 +377,7 @@ flush privileges;
#drop database ``; #drop database ``;
# Test that USING <keytype> is always shown in SHOW CREATE TABLE when it was # Test that USING <keytype> is always shown in SHOW CREATE TABLE when it was
# specified during table creation, but not otherwise. (Bug #7235) # specified during table creation, but not otherwise. (Bug#7235)
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY; CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
DROP TABLE t1; DROP TABLE t1;
...@@ -402,7 +408,7 @@ ALTER TABLE t1 ENGINE=MEMORY; ...@@ -402,7 +408,7 @@ ALTER TABLE t1 ENGINE=MEMORY;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
DROP TABLE t1; DROP TABLE t1;
# Test for BUG#9439 "Reporting wrong datatype for sub_part on show index" # Test for Bug#9439 Reporting wrong datatype for sub_part on show index
CREATE TABLE t1( CREATE TABLE t1(
field1 text NOT NULL, field1 text NOT NULL,
PRIMARY KEY(field1(1000)) PRIMARY KEY(field1(1000))
...@@ -412,7 +418,7 @@ show index from t1; ...@@ -412,7 +418,7 @@ show index from t1;
--disable_metadata --disable_metadata
drop table t1; drop table t1;
# Test for BUG#11635: mysqldump exports TYPE instead of USING for HASH # Test for Bug#11635 mysqldump exports TYPE instead of USING for HASH
create table t1 ( create table t1 (
c1 int NOT NULL, c1 int NOT NULL,
c2 int NOT NULL, c2 int NOT NULL,
...@@ -422,7 +428,7 @@ create table t1 ( ...@@ -422,7 +428,7 @@ create table t1 (
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
DROP TABLE t1; DROP TABLE t1;
# Test for BUG#93: 4.1 protocl crash on corupted frm and SHOW TABLE STATUS # Test for Bug#93 4.1 protocl crash on corupted frm and SHOW TABLE STATUS
flush tables; flush tables;
...@@ -430,7 +436,7 @@ flush tables; ...@@ -430,7 +436,7 @@ flush tables;
system echo "this is a junk file for test" >> $MYSQLTEST_VARDIR/master-data/test/t1.frm ; system echo "this is a junk file for test" >> $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
--replace_column 6 # 7 # 8 # 9 # --replace_column 6 # 7 # 8 # 9 #
SHOW TABLE STATUS like 't1'; SHOW TABLE STATUS like 't1';
--error 1033 --error ER_NOT_FORM_FILE
show create table t1; show create table t1;
drop table t1; drop table t1;
...@@ -438,7 +444,7 @@ drop table t1; ...@@ -438,7 +444,7 @@ drop table t1;
--echo End of 4.1 tests --echo End of 4.1 tests
# #
# BUG 12183 - SHOW OPEN TABLES behavior doesn't match grammar # Bug#12183 SHOW OPEN TABLES behavior doesn't match grammar
# First we close all open tables with FLUSH tables and then we open some. # First we close all open tables with FLUSH tables and then we open some.
CREATE TABLE txt1(a int); CREATE TABLE txt1(a int);
CREATE TABLE tyt2(a int); CREATE TABLE tyt2(a int);
...@@ -456,14 +462,14 @@ DROP TABLE txt1; ...@@ -456,14 +462,14 @@ DROP TABLE txt1;
DROP TABLE tyt2; DROP TABLE tyt2;
DROP TABLE urkunde; DROP TABLE urkunde;
# #
# BUG #12591 (SHOW TABLES FROM dbname produces wrong error message) # Bug#12591 SHOW TABLES FROM dbname produces wrong error message
# #
--error 1049 --error ER_BAD_DB_ERROR
SHOW TABLES FROM non_existing_database; SHOW TABLES FROM non_existing_database;
# #
# Bug#17203: "sql_no_cache sql_cache" in views created from prepared # Bug#17203 "sql_no_cache sql_cache" in views created from prepared
# statement # statement
# #
# The problem was that initial user setting was forgotten, and current # The problem was that initial user setting was forgotten, and current
...@@ -543,7 +549,7 @@ SHOW COLUMNS FROM no_such_table; ...@@ -543,7 +549,7 @@ SHOW COLUMNS FROM no_such_table;
# #
# Bug #19764: SHOW commands end up in the slow log as table scans # Bug#19764 SHOW commands end up in the slow log as table scans
# #
flush status; flush status;
show status like 'slow_queries'; show status like 'slow_queries';
...@@ -555,8 +561,8 @@ select 1 from information_schema.tables limit 1; ...@@ -555,8 +561,8 @@ select 1 from information_schema.tables limit 1;
show status like 'slow_queries'; show status like 'slow_queries';
# #
# BUG#10491: Server returns data as charset binary SHOW CREATE TABLE or SELECT # BUG#10491 Server returns data as charset binary SHOW CREATE TABLE or SELECT
# FROM I_S. # FROM I_S.
# #
# #
...@@ -671,7 +677,7 @@ SHOW TRIGGERS LIKE 't1'; ...@@ -671,7 +677,7 @@ SHOW TRIGGERS LIKE 't1';
--echo ---------------------------------------------------------------- --echo ----------------------------------------------------------------
SELECT SELECT
TRIGGER_CATALOG, TRIGGER_CATALOG,
TRIGGER_SCHEMA, TRIGGER_SCHEMA,
TRIGGER_NAME, TRIGGER_NAME,
...@@ -821,10 +827,11 @@ SHOW CREATE TABLE mysqltest1.t1; ...@@ -821,10 +827,11 @@ SHOW CREATE TABLE mysqltest1.t1;
# Cleanup. # Cleanup.
DROP DATABASE mysqltest1; DROP DATABASE mysqltest1;
--remove_file $MYSQLTEST_VARDIR/tmp/show_check.mysqltest1.sql
use test; use test;
# #
# Bug #28808: log_queries_not_using_indexes variable dynamic change is ignored # Bug#28808 log_queries_not_using_indexes variable dynamic change is ignored
# #
flush status; flush status;
show variables like "log_queries_not_using_indexes"; show variables like "log_queries_not_using_indexes";
...@@ -840,7 +847,7 @@ select 1 from information_schema.tables limit 1; ...@@ -840,7 +847,7 @@ select 1 from information_schema.tables limit 1;
show status like 'slow_queries'; show status like 'slow_queries';
# #
# Bug #30088: Can't disable myisam-recover by a value of "" # Bug#30088 Can't disable myisam-recover by a value of ""
# #
show variables like 'myisam_recover_options'; show variables like 'myisam_recover_options';
...@@ -865,3 +872,7 @@ show create table t1; ...@@ -865,3 +872,7 @@ show create table t1;
drop table t1; drop table t1;
--echo End of 5.0 tests --echo End of 5.0 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
# Can't be tested with embedded server # Can't be tested with embedded server
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Bug #8471: IP address with mask fail when skip-name-resolve is on # Bug#8471: IP address with mask fail when skip-name-resolve is on
GRANT ALL ON test.* TO mysqltest_1@'127.0.0.1/255.255.255.255'; GRANT ALL ON test.* TO mysqltest_1@'127.0.0.1/255.255.255.255';
SHOW GRANTS FOR mysqltest_1@'127.0.0.1/255.255.255.255'; SHOW GRANTS FOR mysqltest_1@'127.0.0.1/255.255.255.255';
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255'; REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
...@@ -9,12 +9,13 @@ DROP USER mysqltest_1@'127.0.0.1/255.255.255.255'; ...@@ -9,12 +9,13 @@ DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
# End of 4.1 tests # End of 4.1 tests
# Bug #13407 "Remote connecting crashes server". # Bug#13407: Remote connecting crashes server
# Server crashed when one used USER() function in connection for which # Server crashed when one used USER() function in connection for which
# was impossible to obtain peer hostname. # was impossible to obtain peer hostname.
connect (con1, 127.0.0.1, root, , test, $MASTER_MYPORT, ); connect (con1, 127.0.0.1, root, , test, $MASTER_MYPORT, );
--replace_column 1 # --replace_column 1 #
select user(); SELECT USER();
--replace_column 1 <id> 3 <host> 5 <command> 6 <time> 7 <state> 8 <info> --replace_column 1 <id> 3 <host> 5 <command> 6 <time> 7 <state> 8 <info>
show processlist; SHOW PROCESSLIST;
connection default; connection default;
disconnect con1;
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
# Can't test with embedded server that doesn't support grants # Can't test with embedded server that doesn't support grants
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
connect (con1root,localhost,root,,); connect (con1root,localhost,root,,);
connection con1root; connection con1root;
...@@ -156,7 +159,7 @@ call db1_secret.stamp(6); ...@@ -156,7 +159,7 @@ call db1_secret.stamp(6);
select db1_secret.db(); select db1_secret.db();
# #
# BUG#2777 # Bug#2777 Stored procedure doesn't observe definer's rights
# #
connection con1root; connection con1root;
...@@ -215,7 +218,7 @@ call q(); ...@@ -215,7 +218,7 @@ call q();
select * from t2; select * from t2;
# #
# BUG#6030: Stored procedure has no appropriate DROP privilege # Bug#6030 Stored procedure has no appropriate DROP privilege
# (or ALTER for that matter) # (or ALTER for that matter)
# still connection con2user1 in db2 # still connection con2user1 in db2
...@@ -330,7 +333,7 @@ flush privileges; ...@@ -330,7 +333,7 @@ flush privileges;
drop table t1; drop table t1;
# #
# BUG#9503: reseting correct parameters of thread after error in SP function # Bug#9503 reseting correct parameters of thread after error in SP function
# #
connect (root,localhost,root,,test); connect (root,localhost,root,,test);
connection root; connection root;
...@@ -366,10 +369,12 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost; ...@@ -366,10 +369,12 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost;
drop function bug_9503; drop function bug_9503;
use test; use test;
drop database mysqltest; drop database mysqltest;
connection default;
disconnect root;
# #
# correct value from current_user() in function run from "security definer" # correct value from current_user() in function run from "security definer"
# (BUG#7291) # (Bug#7291 Stored procedures: wrong CURRENT_USER value)
# #
connection con1root; connection con1root;
use test; use test;
...@@ -398,10 +403,10 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost; ...@@ -398,10 +403,10 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost;
drop user user1@localhost; drop user user1@localhost;
# #
# Bug #12318: Wrong error message when accessing an inaccessible stored # Bug#12318 Wrong error message when accessing an inaccessible stored
# procedure in another database when the current database is # procedure in another database when the current database is
# information_schema. # information_schema.
# #
--disable_warnings --disable_warnings
drop database if exists mysqltest_1; drop database if exists mysqltest_1;
...@@ -438,7 +443,7 @@ revoke usage on *.* from mysqltest_1@localhost; ...@@ -438,7 +443,7 @@ revoke usage on *.* from mysqltest_1@localhost;
drop user mysqltest_1@localhost; drop user mysqltest_1@localhost;
# #
# BUG#12812 create view calling a function works without execute right # Bug#12812 create view calling a function works without execute right
# on function # on function
delimiter |; delimiter |;
--disable_warnings --disable_warnings
...@@ -464,7 +469,7 @@ delimiter ;| ...@@ -464,7 +469,7 @@ delimiter ;|
# #
# BUG#14834: Server denies to execute Stored Procedure # Bug#14834 Server denies to execute Stored Procedure
# #
# The problem here was with '_' in the database name. # The problem here was with '_' in the database name.
# #
...@@ -507,7 +512,7 @@ drop database db_bug14834; ...@@ -507,7 +512,7 @@ drop database db_bug14834;
# #
# BUG#14533: 'desc tbl' in stored procedure causes error # Bug#14533 'desc tbl' in stored procedure causes error
# ER_TABLEACCESS_DENIED_ERROR # ER_TABLEACCESS_DENIED_ERROR
# #
create database db_bug14533; create database db_bug14533;
...@@ -546,20 +551,20 @@ drop database db_bug14533; ...@@ -546,20 +551,20 @@ drop database db_bug14533;
# #
# BUG#7787: Stored procedures: improper warning for "grant execute" statement # Bug#7787 Stored procedures: improper warning for "grant execute" statement
# #
# Prepare. # Prepare.
CREATE DATABASE db_bug7787; CREATE DATABASE db_bug7787;
use db_bug7787; USE db_bug7787;
# Test. # Test.
CREATE PROCEDURE p1() CREATE PROCEDURE p1()
SHOW INNODB STATUS; SHOW INNODB STATUS;
GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost; GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
# Cleanup. # Cleanup.
...@@ -569,7 +574,7 @@ use test; ...@@ -569,7 +574,7 @@ use test;
# #
# WL#2897: Complete definer support in the stored routines. # WL#2897 Complete definer support in the stored routines.
# #
# The following cases are tested: # The following cases are tested:
# 1. check that if DEFINER-clause is not explicitly specified, stored routines # 1. check that if DEFINER-clause is not explicitly specified, stored routines
...@@ -614,7 +619,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost; ...@@ -614,7 +619,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
--echo ---> connection: mysqltest_2_con --echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con --connection mysqltest_2_con
use mysqltest; USE mysqltest;
CREATE PROCEDURE wl2897_p1() SELECT 1; CREATE PROCEDURE wl2897_p1() SELECT 1;
...@@ -626,7 +631,7 @@ CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1; ...@@ -626,7 +631,7 @@ CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
--echo ---> connection: mysqltest_1_con --echo ---> connection: mysqltest_1_con
--connection mysqltest_1_con --connection mysqltest_1_con
use mysqltest; USE mysqltest;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR --error ER_SPECIFIC_ACCESS_DENIED_ERROR
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2; CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
...@@ -652,7 +657,7 @@ CREATE DEFINER='a @ b @ c'@localhost FUNCTION wl2897_f3() RETURNS INT RETURN 3; ...@@ -652,7 +657,7 @@ CREATE DEFINER='a @ b @ c'@localhost FUNCTION wl2897_f3() RETURNS INT RETURN 3;
--echo ---> connection: con1root --echo ---> connection: con1root
--connection con1root --connection con1root
use mysqltest; USE mysqltest;
SHOW CREATE PROCEDURE wl2897_p1; SHOW CREATE PROCEDURE wl2897_p1;
SHOW CREATE PROCEDURE wl2897_p3; SHOW CREATE PROCEDURE wl2897_p3;
...@@ -672,7 +677,7 @@ DROP DATABASE mysqltest; ...@@ -672,7 +677,7 @@ DROP DATABASE mysqltest;
# #
# BUG#13198: SP executes if definer does not exist # Bug#13198 SP executes if definer does not exist
# #
# Prepare environment. # Prepare environment.
...@@ -702,7 +707,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost; ...@@ -702,7 +707,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
--echo ---> connection: mysqltest_1_con --echo ---> connection: mysqltest_1_con
--connection mysqltest_1_con --connection mysqltest_1_con
use mysqltest; USE mysqltest;
CREATE PROCEDURE bug13198_p1() CREATE PROCEDURE bug13198_p1()
SELECT 1; SELECT 1;
...@@ -720,7 +725,7 @@ SELECT bug13198_f1(); ...@@ -720,7 +725,7 @@ SELECT bug13198_f1();
--echo ---> connection: mysqltest_2_con --echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con --connection mysqltest_2_con
use mysqltest; USE mysqltest;
CALL bug13198_p1(); CALL bug13198_p1();
...@@ -742,7 +747,7 @@ DROP USER mysqltest_1@localhost; ...@@ -742,7 +747,7 @@ DROP USER mysqltest_1@localhost;
--echo ---> connection: mysqltest_2_con --echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con --connection mysqltest_2_con
use mysqltest; USE mysqltest;
--error ER_NO_SUCH_USER --error ER_NO_SUCH_USER
CALL bug13198_p1(); CALL bug13198_p1();
...@@ -764,8 +769,8 @@ DROP DATABASE mysqltest; ...@@ -764,8 +769,8 @@ DROP DATABASE mysqltest;
# #
# Bug#19857 - When a user with CREATE ROUTINE priv creates a routine, # Bug#19857 When a user with CREATE ROUTINE priv creates a routine,
# it results in NULL p/w # it results in NULL p/w
# #
# Can't test with embedded server that doesn't support grants # Can't test with embedded server that doesn't support grants
...@@ -780,7 +785,7 @@ SELECT Host,User,Password FROM mysql.user WHERE User='user19857'; ...@@ -780,7 +785,7 @@ SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
--echo ---> connection: mysqltest_2_con --echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con --connection mysqltest_2_con
use test; USE test;
DELIMITER //; DELIMITER //;
CREATE PROCEDURE sp19857() DETERMINISTIC CREATE PROCEDURE sp19857() DETERMINISTIC
...@@ -814,7 +819,7 @@ DROP USER user19857@localhost; ...@@ -814,7 +819,7 @@ DROP USER user19857@localhost;
# #
# BUG#18630: Arguments of suid routine calculated in wrong security # Bug#18630 Arguments of suid routine calculated in wrong security
# context # context
# #
# Arguments of suid routines were calculated in definer's security # Arguments of suid routines were calculated in definer's security
...@@ -886,3 +891,7 @@ DROP FUNCTION f_suid; ...@@ -886,3 +891,7 @@ DROP FUNCTION f_suid;
DROP TABLE t1; DROP TABLE t1;
--echo End of 5.0 tests. --echo End of 5.0 tests.
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
# Can't test with embedded server # Can't test with embedded server
-- source include/not_embedded.inc -- source include/not_embedded.inc
--sleep 2 # Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
drop table if exists t1,t3; drop table if exists t1,t3;
--enable_warnings --enable_warnings
delimiter |; delimiter |;
# #
# BUG#4902: Stored procedure with SHOW WARNINGS leads to packet error # Bug#4902: Stored procedure with SHOW WARNINGS leads to packet error
# #
# Added tests for show grants command # Added tests for show grants command
--disable_warnings --disable_warnings
...@@ -47,7 +50,7 @@ drop procedure bug4902_2| ...@@ -47,7 +50,7 @@ drop procedure bug4902_2|
# #
# BUG#5278: Stored procedure packets out of order if SET PASSWORD. # Bug#5278: Stored procedure packets out of order if SET PASSWORD.
# #
--disable_warnings --disable_warnings
drop function if exists bug5278| drop function if exists bug5278|
...@@ -58,13 +61,16 @@ begin ...@@ -58,13 +61,16 @@ begin
return 'okay'; return 'okay';
end| end|
--error 1133 --error ER_PASSWORD_NO_MATCH
select bug5278()| select bug5278()|
--error 1133 --error ER_PASSWORD_NO_MATCH
select bug5278()| select bug5278()|
drop function bug5278| drop function bug5278|
#
# Bug#3583: query cache doesn't work for stored procedures
#
--disable_warnings --disable_warnings
drop table if exists t1| drop table if exists t1|
--enable_warnings --enable_warnings
...@@ -72,9 +78,6 @@ create table t1 ( ...@@ -72,9 +78,6 @@ create table t1 (
id char(16) not null default '', id char(16) not null default '',
data int not null data int not null
)| )|
#
# BUG#3583: query cache doesn't work for stored procedures
#
--disable_warnings --disable_warnings
drop procedure if exists bug3583| drop procedure if exists bug3583|
--enable_warnings --enable_warnings
...@@ -110,8 +113,9 @@ delete from t1| ...@@ -110,8 +113,9 @@ delete from t1|
drop procedure bug3583| drop procedure bug3583|
drop table t1| drop table t1|
# #
# BUG#6807: Stored procedure crash if CREATE PROCEDURE ... KILL QUERY # Bug#6807: Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
# #
--disable_warnings --disable_warnings
drop procedure if exists bug6807| drop procedure if exists bug6807|
...@@ -125,16 +129,16 @@ begin ...@@ -125,16 +129,16 @@ begin
select 'Not reached'; select 'Not reached';
end| end|
--error 1317 --error ER_QUERY_INTERRUPTED
call bug6807()| call bug6807()|
--error 1317 --error ER_QUERY_INTERRUPTED
call bug6807()| call bug6807()|
drop procedure bug6807| drop procedure bug6807|
# #
# BUG#10100: function (and stored procedure?) recursivity problem # Bug#10100: function (and stored procedure?) recursivity problem
# #
--disable_warnings --disable_warnings
drop function if exists bug10100f| drop function if exists bug10100f|
...@@ -233,11 +237,11 @@ begin ...@@ -233,11 +237,11 @@ begin
close c; close c;
end| end|
#end of the stack checking # end of the stack checking
set @@max_sp_recursion_depth=255| set @@max_sp_recursion_depth=255|
set @var=1| set @var=1|
#disable log because error about stack overrun contains numbers which # disable log because error about stack overrun contains numbers which
#depend on a system # depend on a system
-- disable_result_log -- disable_result_log
-- error ER_STACK_OVERRUN_NEED_MORE -- error ER_STACK_OVERRUN_NEED_MORE
call bug10100p(255, @var)| call bug10100p(255, @var)|
...@@ -266,6 +270,7 @@ drop table t3| ...@@ -266,6 +270,7 @@ drop table t3|
delimiter ;| delimiter ;|
# #
# Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context # Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context
# #
...@@ -282,6 +287,11 @@ call 15298_1(); ...@@ -282,6 +287,11 @@ call 15298_1();
call 15298_2(); call 15298_2();
connection default; connection default;
disconnect con1;
drop user mysqltest_1@localhost; drop user mysqltest_1@localhost;
drop procedure 15298_1; drop procedure 15298_1;
drop procedure 15298_2; drop procedure 15298_2;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -4,12 +4,15 @@ ...@@ -4,12 +4,15 @@
-- source include/have_ssl.inc -- source include/have_ssl.inc
-- source include/big_test.inc -- source include/big_test.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
--enable_warnings --enable_warnings
# #
# Bug #29579 Clients using SSL can hang the server # Bug#29579 Clients using SSL can hang the server
# #
connect (ssl_con,localhost,root,,,,,SSL); connect (ssl_con,localhost,root,,,,,SSL);
...@@ -18,7 +21,7 @@ create table t1 (a int); ...@@ -18,7 +21,7 @@ create table t1 (a int);
disconnect ssl_con; disconnect ssl_con;
--disable_query_log --disable_query_log
--disable_result_log --disable_result_log
...@@ -26,31 +29,36 @@ let $count= 2000; ...@@ -26,31 +29,36 @@ let $count= 2000;
while ($count) while ($count)
{ {
connect (ssl_con,localhost,root,,,,,SSL); connect (ssl_con,localhost,root,,,,,SSL);
eval insert into t1 values ($count); eval insert into t1 values ($count);
dec $count; dec $count;
# This select causes the net buffer to fill as the server sends the results # This select causes the net buffer to fill as the server sends the results
# but the client doesn't reap the results. The results are larger each time # but the client doesn't reap the results. The results are larger each time
# through the loop, so that eventually the buffer is completely full # through the loop, so that eventually the buffer is completely full
# at the exact moment the server attempts to the close the connection with # at the exact moment the server attempts to the close the connection with
# the lock held. # the lock held.
send select * from t1; send select * from t1;
# now send the quit the command so the server will initiate the shutdown. # now send the quit the command so the server will initiate the shutdown.
send_quit ssl_con; send_quit ssl_con;
# if the server is hung, this will hang too: # if the server is hung, this will hang too:
connect (ssl_con2,localhost,root,,,,,SSL); connect (ssl_con2,localhost,root,,,,,SSL);
# no hang if we get here, close and retry # no hang if we get here, close and retry
disconnect ssl_con2; disconnect ssl_con2;
disconnect ssl_con; disconnect ssl_con;
} }
--enable_query_log --enable_query_log
--enable_result_log --enable_result_log
connect (ssl_con,localhost,root,,,,,SSL); connect (ssl_con,localhost,root,,,,,SSL);
drop table t1; drop table t1;
connection default;
disconnect ssl_con;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
-- source include/have_ssl.inc -- source include/have_ssl.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
connect (ssl_con,localhost,root,,,,,SSL); connect (ssl_con,localhost,root,,,,,SSL);
# Check ssl turned on # Check ssl turned on
...@@ -14,4 +17,9 @@ SHOW STATUS LIKE 'Ssl_cipher'; ...@@ -14,4 +17,9 @@ SHOW STATUS LIKE 'Ssl_cipher';
# Check ssl turned on # Check ssl turned on
SHOW STATUS LIKE 'Ssl_cipher'; SHOW STATUS LIKE 'Ssl_cipher';
connection default;
disconnect ssl_con;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
-- source include/have_ssl.inc -- source include/have_ssl.inc
-- source include/have_compress.inc -- source include/have_compress.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS); connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS);
# Check ssl turned on # Check ssl turned on
...@@ -20,3 +23,10 @@ SHOW STATUS LIKE 'Ssl_cipher'; ...@@ -20,3 +23,10 @@ SHOW STATUS LIKE 'Ssl_cipher';
# Check compression turned on # Check compression turned on
SHOW STATUS LIKE 'Compression'; SHOW STATUS LIKE 'Compression';
connection default;
disconnect ssl_compress_con;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
# embedded server causes different stat # embedded server causes different stat
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
# PS causes different statistics # PS causes different statistics
--disable_ps_protocol --disable_ps_protocol
...@@ -208,3 +211,7 @@ DROP PROCEDURE p1; ...@@ -208,3 +211,7 @@ DROP PROCEDURE p1;
DROP FUNCTION f1; DROP FUNCTION f1;
# End of 5.0 tests # End of 5.0 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -3,9 +3,12 @@ ...@@ -3,9 +3,12 @@
# #
# Requires privileges to be enabled # Requires privileges to be enabled
-- source include/not_embedded.inc --source include/not_embedded.inc
# Prepare play-ground # Save the initial number of concurrent sessions
--source include/count_sessions.inc
# Prepare play-ground
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
...@@ -28,11 +31,11 @@ connect (mqph, localhost, mysqltest_1,,); ...@@ -28,11 +31,11 @@ connect (mqph, localhost, mysqltest_1,,);
connection mqph; connection mqph;
select * from t1; select * from t1;
select * from t1; select * from t1;
--error 1226 --error ER_USER_LIMIT_REACHED
select * from t1; select * from t1;
connect (mqph2, localhost, mysqltest_1,,); connect (mqph2, localhost, mysqltest_1,,);
connection mqph2; connection mqph2;
--error 1226 --error ER_USER_LIMIT_REACHED
select * from t1; select * from t1;
# cleanup # cleanup
connection default; connection default;
...@@ -50,12 +53,12 @@ select * from t1; ...@@ -50,12 +53,12 @@ select * from t1;
select * from t1; select * from t1;
delete from t1; delete from t1;
delete from t1; delete from t1;
--error 1226 --error ER_USER_LIMIT_REACHED
delete from t1; delete from t1;
select * from t1; select * from t1;
connect (muph2, localhost, mysqltest_1,,); connect (muph2, localhost, mysqltest_1,,);
connection muph2; connection muph2;
--error 1226 --error ER_USER_LIMIT_REACHED
delete from t1; delete from t1;
select * from t1; select * from t1;
# Cleanup # Cleanup
...@@ -74,7 +77,7 @@ connect (mcph2, localhost, mysqltest_1,,); ...@@ -74,7 +77,7 @@ connect (mcph2, localhost, mysqltest_1,,);
connection mcph2; connection mcph2;
select * from t1; select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1226 --error ER_USER_LIMIT_REACHED
connect (mcph3, localhost, mysqltest_1,,); connect (mcph3, localhost, mysqltest_1,,);
# Old connection is still ok # Old connection is still ok
select * from t1; select * from t1;
...@@ -83,7 +86,7 @@ select * from t1; ...@@ -83,7 +86,7 @@ select * from t1;
disconnect mcph1; disconnect mcph1;
disconnect mcph2; disconnect mcph2;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1226 --error ER_USER_LIMIT_REACHED
connect (mcph3, localhost, mysqltest_1,,); connect (mcph3, localhost, mysqltest_1,,);
# Cleanup # Cleanup
connection default; connection default;
...@@ -101,13 +104,13 @@ connect (muc2, localhost, mysqltest_1,,); ...@@ -101,13 +104,13 @@ connect (muc2, localhost, mysqltest_1,,);
connection muc2; connection muc2;
select * from t1; select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1226 --error ER_USER_LIMIT_REACHED
connect (muc3, localhost, mysqltest_1,,); connect (muc3, localhost, mysqltest_1,,);
# Closing of one of connections should help # Closing of one of connections should help
disconnect muc1; disconnect muc1;
connect (muc3, localhost, mysqltest_1,,); connect (muc3, localhost, mysqltest_1,,);
select * from t1; select * from t1;
# Changing of limit should also help (and immediately) # Changing of limit should also help (and immediately)
connection default; connection default;
grant usage on *.* to mysqltest_1@localhost with max_user_connections 3; grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
flush user_resources; flush user_resources;
...@@ -115,7 +118,7 @@ connect (muc4, localhost, mysqltest_1,,); ...@@ -115,7 +118,7 @@ connect (muc4, localhost, mysqltest_1,,);
connection muc4; connection muc4;
select * from t1; select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1226 --error ER_USER_LIMIT_REACHED
connect (muc5, localhost, mysqltest_1,,); connect (muc5, localhost, mysqltest_1,,);
# Clean up # Clean up
connection default; connection default;
...@@ -129,10 +132,10 @@ drop user mysqltest_1@localhost; ...@@ -129,10 +132,10 @@ drop user mysqltest_1@localhost;
select @@session.max_user_connections, @@global.max_user_connections; select @@session.max_user_connections, @@global.max_user_connections;
# Local max_user_connections variable can't be set directly # Local max_user_connections variable can't be set directly
# since this limit is per-account # since this limit is per-account
--error 1229 --error ER_GLOBAL_VARIABLE
set session max_user_connections= 2; set session max_user_connections= 2;
# But it is ok to set global max_user_connections # But it is ok to set global max_user_connections
set global max_user_connections= 2; set global max_user_connections= 2;
select @@session.max_user_connections, @@global.max_user_connections; select @@session.max_user_connections, @@global.max_user_connections;
# Let us check that global limit works # Let us check that global limit works
grant usage on *.* to mysqltest_1@localhost; grant usage on *.* to mysqltest_1@localhost;
...@@ -144,7 +147,7 @@ connect (muca2, localhost, mysqltest_1,,); ...@@ -144,7 +147,7 @@ connect (muca2, localhost, mysqltest_1,,);
connection muca2; connection muca2;
select * from t1; select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1203 --error ER_TOO_MANY_USER_CONNECTIONS
connect (muca3, localhost, mysqltest_1,,); connect (muca3, localhost, mysqltest_1,,);
# Now we are testing that per-account limit prevails over gloabl limit # Now we are testing that per-account limit prevails over gloabl limit
connection default; connection default;
...@@ -154,16 +157,20 @@ connect (muca3, localhost, mysqltest_1,,); ...@@ -154,16 +157,20 @@ connect (muca3, localhost, mysqltest_1,,);
connection muca3; connection muca3;
select @@session.max_user_connections, @@global.max_user_connections; select @@session.max_user_connections, @@global.max_user_connections;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK --replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
--error 1226 --error ER_USER_LIMIT_REACHED
connect (muca4, localhost, mysqltest_1,,); connect (muca4, localhost, mysqltest_1,,);
# Cleanup # Cleanup
connection default; connection default;
disconnect muca1; disconnect muca1;
disconnect muca2; disconnect muca2;
disconnect muca3; disconnect muca3;
set global max_user_connections= 0; set global max_user_connections= 0;
drop user mysqltest_1@localhost; drop user mysqltest_1@localhost;
--enable_ps_protocol --enable_ps_protocol
# Final cleanup # Final cleanup
drop table t1; drop table t1;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -10,12 +10,12 @@ use test; ...@@ -10,12 +10,12 @@ use test;
# #
# create view on nonexistent table # create view on nonexistent table
-- error 1146 -- error ER_NO_SUCH_TABLE
create view v1 (c,d) as select a,b from t1; create view v1 (c,d) as select a,b from t1;
create temporary table t1 (a int, b int); create temporary table t1 (a int, b int);
# view on temporary table # view on temporary table
-- error 1352 -- error ER_VIEW_SELECT_TMPTABLE
create view v1 (c) as select b+1 from t1; create view v1 (c) as select b+1 from t1;
drop table t1; drop table t1;
...@@ -42,18 +42,18 @@ select * from t1; ...@@ -42,18 +42,18 @@ select * from t1;
select c from v1; select c from v1;
show create table v1; show create table v1;
show create view v1; show create view v1;
-- error 1347 -- error ER_WRONG_OBJECT
show create view t1; show create view t1;
drop table t1; drop table t1;
# try to use fields from underlying table # try to use fields from underlying table
-- error 1054 -- error ER_BAD_FIELD_ERROR
select a from v1; select a from v1;
-- error 1054 -- error ER_BAD_FIELD_ERROR
select v1.a from v1; select v1.a from v1;
-- error 1054 -- error ER_BAD_FIELD_ERROR
select b from v1; select b from v1;
-- error 1054 -- error ER_BAD_FIELD_ERROR
select v1.b from v1; select v1.b from v1;
# view with different algorithms (explain output differs) # view with different algorithms (explain output differs)
...@@ -64,9 +64,9 @@ select c from v2; ...@@ -64,9 +64,9 @@ select c from v2;
explain extended select c from v2; explain extended select c from v2;
# try to use underlying table fields in VIEW creation process # try to use underlying table fields in VIEW creation process
-- error 1054 -- error ER_BAD_FIELD_ERROR
create view v3 (c) as select a+1 from v1; create view v3 (c) as select a+1 from v1;
-- error 1054 -- error ER_BAD_FIELD_ERROR
create view v3 (c) as select b+1 from v1; create view v3 (c) as select b+1 from v1;
...@@ -104,7 +104,7 @@ select * from v1; ...@@ -104,7 +104,7 @@ select * from v1;
select * from v2; select * from v2;
# try to create VIEW with name of existing VIEW # try to create VIEW with name of existing VIEW
-- error 1050 -- error ER_TABLE_EXISTS_ERROR
create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1; create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
# 'or replace' should work in this case # 'or replace' should work in this case
...@@ -112,7 +112,7 @@ create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a ...@@ -112,7 +112,7 @@ create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a
# try to ALTER unexisting VIEW # try to ALTER unexisting VIEW
drop view v2; drop view v2;
-- error 1146 -- error ER_NO_SUCH_TABLE
alter view v2 as select c, d from v1; alter view v2 as select c, d from v1;
# 'or replace' on unexisting view # 'or replace' on unexisting view
...@@ -126,15 +126,15 @@ select * from v1; ...@@ -126,15 +126,15 @@ select * from v1;
select * from v2; select * from v2;
# try to drop nonexistent VIEW # try to drop nonexistent VIEW
-- error 1051 -- error ER_BAD_TABLE_ERROR
drop view v100; drop view v100;
# try to drop table with DROP VIEW # try to drop table with DROP VIEW
-- error 1347 -- error ER_WRONG_OBJECT
drop view t1; drop view t1;
# try to drop VIEW with DROP TABLE # try to drop VIEW with DROP TABLE
-- error 1051 -- error ER_BAD_TABLE_ERROR
drop table v1; drop table v1;
# try to drop table with DROP VIEW # try to drop table with DROP VIEW
...@@ -175,7 +175,7 @@ drop table t1; ...@@ -175,7 +175,7 @@ drop table t1;
# syntax compatibility # syntax compatibility
# #
create table t1 (a int); create table t1 (a int);
-- error 1368 -- error ER_VIEW_NONUPD_CHECK
create view v1 as select distinct a from t1 WITH CHECK OPTION; 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 v1 as select a from t1 WITH CHECK OPTION;
create view v2 as select a from t1 WITH CASCADED CHECK OPTION; create view v2 as select a from t1 WITH CASCADED CHECK OPTION;
...@@ -232,10 +232,10 @@ create algorithm=temptable view v2 (a,c) as select a, b+1 from t1; ...@@ -232,10 +232,10 @@ create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
select is_updatable from information_schema.views where table_name='v2'; select is_updatable from information_schema.views where table_name='v2';
select is_updatable from information_schema.views where table_name='v1'; select is_updatable from information_schema.views where table_name='v1';
# try to update expression # try to update expression
-- error 1348 -- error ER_NONUPDATEABLE_COLUMN
update v1 set c=a+c; update v1 set c=a+c;
# try to update VIEW with forced TEMPORARY TABLE algorithm # try to update VIEW with forced TEMPORARY TABLE algorithm
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update v2 set a=a+c; update v2 set a=a+c;
# updatable field of updateable view # updatable field of updateable view
update v1 set a=a+c; update v1 set a=a+c;
...@@ -254,10 +254,10 @@ insert into t2 values (10), (20); ...@@ -254,10 +254,10 @@ insert into t2 values (10), (20);
create view v1 (a,c) as select a, b+1 from t1; create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1; create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update expression # try to update expression
-- error 1348 -- error ER_NONUPDATEABLE_COLUMN
update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a; update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a;
# try to update VIEW with forced TEMPORARY TABLE algorithm # try to update VIEW with forced TEMPORARY TABLE algorithm
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a; update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a;
# updatable field of updateable view # updatable field of updateable view
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a; update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a;
...@@ -292,7 +292,7 @@ insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10); ...@@ -292,7 +292,7 @@ insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
create view v1 (a,c) as select a, b+1 from t1; create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1; create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update VIEW with forced TEMPORARY TABLE algorithm # try to update VIEW with forced TEMPORARY TABLE algorithm
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
delete from v2 where c < 4; delete from v2 where c < 4;
# updatable field of updateable view # updatable field of updateable view
delete from v1 where c < 4; delete from v1 where c < 4;
...@@ -311,7 +311,7 @@ insert into t2 values (1), (2), (3), (4); ...@@ -311,7 +311,7 @@ insert into t2 values (1), (2), (3), (4);
create view v1 (a,c) as select a, b+1 from t1; create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1; create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update VIEW with forced TEMPORARY TABLE algorithm # try to update VIEW with forced TEMPORARY TABLE algorithm
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
delete v2 from t2,v2 where t2.x=v2.a; delete v2 from t2,v2 where t2.x=v2.a;
# updatable field of updateable view # updatable field of updateable view
delete v1 from t2,v1 where t2.x=v1.a; delete v1 from t2,v1 where t2.x=v1.a;
...@@ -331,7 +331,7 @@ set updatable_views_with_limit=NO; ...@@ -331,7 +331,7 @@ set updatable_views_with_limit=NO;
update v1 set x=x+1; update v1 set x=x+1;
update v2 set x=x+1; update v2 set x=x+1;
update v1 set x=x+1 limit 1; update v1 set x=x+1 limit 1;
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update v2 set x=x+1 limit 1; update v2 set x=x+1 limit 1;
set updatable_views_with_limit=YES; set updatable_views_with_limit=YES;
update v1 set x=x+1 limit 1; update v1 set x=x+1 limit 1;
...@@ -353,13 +353,13 @@ create view v3 (x,y,z) as select b, a, b from t1; ...@@ -353,13 +353,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
create view v4 (x,y,z) as select c+1, b, a from t1; create view v4 (x,y,z) as select c+1, b, a from t1;
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1; create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
# try insert to VIEW with fields duplicate # try insert to VIEW with fields duplicate
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v3 values (-60,4,30); insert into v3 values (-60,4,30);
# try insert to VIEW with expression in SELECT list # try insert to VIEW with expression in SELECT list
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v4 values (-60,4,30); insert into v4 values (-60,4,30);
# try insert to VIEW using temporary table algorithm # try insert to VIEW using temporary table algorithm
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v5 values (-60,4,30); insert into v5 values (-60,4,30);
insert into v1 values (-60,4,30); insert into v1 values (-60,4,30);
insert into v1 (z,y,x) values (50,6,-100); insert into v1 (z,y,x) values (50,6,-100);
...@@ -381,13 +381,13 @@ create view v3 (x,y,z) as select b, a, b from t1; ...@@ -381,13 +381,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
create view v4 (x,y,z) as select c+1, b, a from t1; create view v4 (x,y,z) as select c+1, b, a from t1;
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1; create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
# try insert to VIEW with fields duplicate # try insert to VIEW with fields duplicate
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v3 select c, b, a from t2; insert into v3 select c, b, a from t2;
# try insert to VIEW with expression in SELECT list # try insert to VIEW with expression in SELECT list
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v4 select c, b, a from t2; insert into v4 select c, b, a from t2;
# try insert to VIEW using temporary table algorithm # try insert to VIEW using temporary table algorithm
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v5 select c, b, a from t2; insert into v5 select c, b, a from t2;
insert into v1 select c, b, a from t2; insert into v1 select c, b, a from t2;
insert into v1 (z,y,x) select a+20,b+2,-100 from t2; insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
...@@ -424,7 +424,7 @@ create table t1 (a int, primary key(a)); ...@@ -424,7 +424,7 @@ create table t1 (a int, primary key(a));
insert into t1 values (1), (2), (3), (200); insert into t1 values (1), (2), (3), (200);
create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1; create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1;
create view v2 (y) as select x from v1; create view v2 (y) as select x from v1;
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update v2 set y=10 where y=2; update v2 set y=10 where y=2;
drop table t1; drop table t1;
drop view v1,v2; drop view v1,v2;
...@@ -479,17 +479,17 @@ create table t1 (col1 char(5),col2 char(5)); ...@@ -479,17 +479,17 @@ create table t1 (col1 char(5),col2 char(5));
create view v1 as select * from t1; create view v1 as select * from t1;
drop table t1; drop table t1;
create table t1 (col1 char(5),newcol2 char(5)); create table t1 (col1 char(5),newcol2 char(5));
-- error 1356 -- error ER_VIEW_INVALID
insert into v1 values('a','aa'); insert into v1 values('a','aa');
drop table t1; drop table t1;
-- error 1356 -- error ER_VIEW_INVALID
select * from v1; select * from v1;
drop view v1; drop view v1;
# #
# check of duplication of column names # check of duplication of column names
# #
-- error 1060 -- error ER_DUP_FIELDNAME
create view v1 (a,a) as select 'a','a'; create view v1 (a,a) as select 'a','a';
# #
...@@ -559,7 +559,7 @@ drop table t1; ...@@ -559,7 +559,7 @@ drop table t1;
# #
# error on preparation # error on preparation
# #
-- error 1096 -- error ER_NO_TABLES_USED
CREATE VIEW v02 AS SELECT * FROM DUAL; CREATE VIEW v02 AS SELECT * FROM DUAL;
SHOW TABLES; SHOW TABLES;
...@@ -575,7 +575,7 @@ drop view v1; ...@@ -575,7 +575,7 @@ drop view v1;
# #
create table t1 (col1 int,col2 char(22)); create table t1 (col1 int,col2 char(22));
create view v1 as select * from t1; create view v1 as select * from t1;
-- error 1347 -- error ER_WRONG_OBJECT
create index i1 on v1 (col1); create index i1 on v1 (col1);
drop view v1; drop view v1;
drop table t1; drop table t1;
...@@ -735,7 +735,7 @@ create function x1 () returns int return 5; ...@@ -735,7 +735,7 @@ create function x1 () returns int return 5;
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select x1() from t1; create view v1 as select x1() from t1;
drop function x1; drop function x1;
-- error 1356 -- error ER_VIEW_INVALID
select * from v1; select * from v1;
--replace_column 8 # 12 # 13 # --replace_column 8 # 12 # 13 #
show table status; show table status;
...@@ -786,10 +786,10 @@ create table t1 (a int); ...@@ -786,10 +786,10 @@ create table t1 (a int);
create view v1 as select a from t1; create view v1 as select a from t1;
create view v3 as select a from t1; create view v3 as select a from t1;
create database mysqltest; create database mysqltest;
-- error 1450 -- error ER_FORBID_SCHEMA_CHANGE
rename table v1 to mysqltest.v1; rename table v1 to mysqltest.v1;
rename table v1 to v2; rename table v1 to v2;
--error 1050 --error ER_TABLE_EXISTS_ERROR
rename table v3 to v1, v2 to t1; rename table v3 to v1, v2 to t1;
drop table t1; drop table t1;
drop view v2,v3; drop view v2,v3;
...@@ -802,19 +802,19 @@ create view v1 as select 'a',1; ...@@ -802,19 +802,19 @@ create view v1 as select 'a',1;
create view v2 as select * from v1 union all select * from v1; create view v2 as select * from v1 union all select * from v1;
create view v3 as select * from v2 where 1 = (select `1` from v2); create view v3 as select * from v2 where 1 = (select `1` from v2);
create view v4 as select * from v3; create view v4 as select * from v3;
-- error 1242 -- error ER_SUBQUERY_NO_1_ROW
select * from v4; select * from v4;
drop view v4, v3, v2, v1; drop view v4, v3, v2, v1;
# #
# VIEW over SELECT with prohibited clauses # VIEW over SELECT with prohibited clauses
# #
-- error 1350 -- error ER_VIEW_SELECT_CLAUSE
create view v1 as select 5 into @w; create view v1 as select 5 into @w;
-- error 1350 -- error ER_VIEW_SELECT_CLAUSE
create view v1 as select 5 into outfile 'ttt'; create view v1 as select 5 into outfile 'ttt';
create table t1 (a int); create table t1 (a int);
-- error 1350 -- error ER_VIEW_SELECT_CLAUSE
create view v1 as select a from t1 procedure analyse(); create view v1 as select a from t1 procedure analyse();
-- error ER_VIEW_SELECT_DERIVED -- error ER_VIEW_SELECT_DERIVED
create view v1 as select 1 from (select 1) as d1; create view v1 as select 1 from (select 1) as d1;
...@@ -839,109 +839,109 @@ create table t2 (col1 int); ...@@ -839,109 +839,109 @@ 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 1443 -- error ER_VIEW_PREVENT_UPDATE
update v2 set col1 = (select max(col1) from v1); update v2 set col1 = (select max(col1) from v1);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
update v2 set col1 = (select max(col1) from t1); update v2 set col1 = (select max(col1) from t1);
-- error 1093 -- error ER_UPDATE_TABLE_USED
update v2 set col1 = (select max(col1) from v2); update v2 set col1 = (select max(col1) from v2);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1093 -- error ER_UPDATE_TABLE_USED
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;
-- error 1093 -- error ER_UPDATE_TABLE_USED
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from v1); update v3 set v3.col1 = (select max(col1) from v1);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from t1); update v3 set v3.col1 = (select max(col1) from t1);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from v2); update v3 set v3.col1 = (select max(col1) from v2);
-- error 1093 -- error ER_UPDATE_TABLE_USED
update v3 set v3.col1 = (select max(col1) from v3); update v3 set v3.col1 = (select max(col1) from v3);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
delete from v2 where col1 = (select max(col1) from v1); delete from v2 where col1 = (select max(col1) from v1);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
delete from v2 where col1 = (select max(col1) from t1); delete from v2 where col1 = (select max(col1) from t1);
-- error 1093 -- error ER_UPDATE_TABLE_USED
delete from v2 where col1 = (select max(col1) from v2); delete from v2 where col1 = (select max(col1) from v2);
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_UPDATE_TABLE_USED
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from v1)); insert into v2 values ((select max(col1) from v1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into t1 values ((select max(col1) from v1)); insert into t1 values ((select max(col1) from v1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from v1)); insert into v2 values ((select max(col1) from v1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from t1)); insert into v2 values ((select max(col1) from t1));
-- error 1093 -- error ER_UPDATE_TABLE_USED
insert into t1 values ((select max(col1) from t1)); insert into t1 values ((select max(col1) from t1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from t1)); insert into v2 values ((select max(col1) from t1));
-- error 1093 -- error ER_UPDATE_TABLE_USED
insert into v2 values ((select max(col1) from v2)); insert into v2 values ((select max(col1) from v2));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into t1 values ((select max(col1) from v2)); insert into t1 values ((select max(col1) from v2));
-- error 1093 -- error ER_UPDATE_TABLE_USED
insert into v2 values ((select max(col1) from v2)); insert into v2 values ((select max(col1) from v2));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select max(col1) from v1)); insert into v3 (col1) values ((select max(col1) from v1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select max(col1) from t1)); insert into v3 (col1) values ((select max(col1) from t1));
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
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 1443 -- error ER_VIEW_PREVENT_UPDATE
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 ER_BAD_NULL_ERROR
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));
# temporary table algorithm view should be equal to subquery in the from clause # temporary table algorithm view should be equal to subquery in the from clause
create algorithm=temptable view v4 as select * from t1; create algorithm=temptable view v4 as select * from t1;
...@@ -957,7 +957,7 @@ drop table t1,t2; ...@@ -957,7 +957,7 @@ drop table t1,t2;
# #
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select * from t1; create view v1 as select * from t1;
-- error 1347 -- error ER_WRONG_OBJECT
handler v1 open as xx; handler v1 open as xx;
drop view v1; drop view v1;
drop table t1; drop table t1;
...@@ -1005,7 +1005,7 @@ create table t2 (a int); ...@@ -1005,7 +1005,7 @@ create table t2 (a int);
create view v1 as select * from t1; create view v1 as select * from t1;
lock tables t1 read, v1 read; lock tables t1 read, v1 read;
select * from v1; select * from v1;
-- error 1100 -- error ER_TABLE_NOT_LOCKED
select * from t2; select * from t2;
drop view v1; drop view v1;
drop table t1, t2; drop table t1, t2;
...@@ -1017,7 +1017,7 @@ create table t1 (a int); ...@@ -1017,7 +1017,7 @@ create table t1 (a int);
create view v1 as select * from t1 where a < 2 with check option; create view v1 as select * from t1 where a < 2 with check option;
# simple insert # simple insert
insert into v1 values(1); insert into v1 values(1);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v1 values(3); insert into v1 values(3);
# simple insert with ignore # simple insert with ignore
insert ignore into v1 values (2),(3),(0); insert ignore into v1 values (2),(3),(0);
...@@ -1026,7 +1026,7 @@ select * from t1; ...@@ -1026,7 +1026,7 @@ select * from t1;
delete from t1; delete from t1;
# INSERT SELECT test # INSERT SELECT test
insert into v1 SELECT 1; insert into v1 SELECT 1;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v1 SELECT 3; insert into v1 SELECT 3;
# prepare data for next check # prepare data for next check
create table t2 (a int); create table t2 (a int);
...@@ -1034,9 +1034,9 @@ insert into t2 values (2),(3),(0); ...@@ -1034,9 +1034,9 @@ insert into t2 values (2),(3),(0);
# INSERT SELECT with ignore test # INSERT SELECT with ignore test
insert ignore into v1 SELECT a from t2; insert ignore into v1 SELECT a from t2;
select * from t1; select * from t1;
#simple UPDATE test # simple UPDATE test
update v1 set a=-1 where a=0; update v1 set a=-1 where a=0;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
update v1 set a=2 where a=1; update v1 set a=2 where a=1;
select * from t1; select * from t1;
# prepare data for next check # prepare data for next check
...@@ -1063,12 +1063,12 @@ create view v2 as select * from v1 where a > 0 with local check option; ...@@ -1063,12 +1063,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; create view v3 as select * from v1 where a > 0 with cascaded check option;
insert into v2 values (1); insert into v2 values (1);
insert into v3 values (1); insert into v3 values (1);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v2 values (0); insert into v2 values (0);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v3 values (0); insert into v3 values (0);
insert into v2 values (2); insert into v2 values (2);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v3 values (2); insert into v3 values (2);
select * from t1; select * from t1;
drop view v3,v2,v1; drop view v3,v2,v1;
...@@ -1080,7 +1080,7 @@ drop table t1; ...@@ -1080,7 +1080,7 @@ drop table t1;
create table t1 (a int, primary key (a)); create table t1 (a int, primary key (a));
create view v1 as select * from t1 where a < 2 with check option; create view v1 as select * from t1 where a < 2 with check option;
insert into v1 values (1) on duplicate key update a=2; insert into v1 values (1) on duplicate key update a=2;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v1 values (1) on duplicate key update a=2; insert into v1 values (1) on duplicate key update a=2;
insert ignore 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; select * from t1;
...@@ -1093,13 +1093,13 @@ drop table t1; ...@@ -1093,13 +1093,13 @@ drop table t1;
create table t1 (s1 int); create table t1 (s1 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;
-- error 1146 -- error ER_NO_SUCH_TABLE
alter view v1 as select * from v2; alter view v1 as select * from v2;
-- error 1146 -- error ER_NO_SUCH_TABLE
alter view v1 as select * from v1; alter view v1 as select * from v1;
-- error 1146 -- error ER_NO_SUCH_TABLE
create or replace view v1 as select * from v2; create or replace view v1 as select * from v2;
-- error 1146 -- error ER_NO_SUCH_TABLE
create or replace view v1 as select * from v1; create or replace view v1 as select * from v1;
drop view v2,v1; drop view v2,v1;
drop table t1; drop table t1;
...@@ -1134,7 +1134,7 @@ select * from t2; ...@@ -1134,7 +1134,7 @@ select * from t2;
# check it with check option # check it with check option
alter view v2 as select * from t2 where s1 in (select s1 from t1) with check option; alter view v2 as select * from t2 where s1 in (select s1 from t1) with check option;
insert into v2 values (5); insert into v2 values (5);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
update v2 set s1 = 1; update v2 set s1 = 1;
insert into t1 values (1); insert into t1 values (1);
update v2 set s1 = 1; update v2 set s1 = 1;
...@@ -1166,7 +1166,7 @@ drop table t1; ...@@ -1166,7 +1166,7 @@ drop table t1;
create table t1 (s1 tinyint); create table t1 (s1 tinyint);
create view v1 as select * from t1 where s1 <> 0 with local check option; create view v1 as select * from t1 where s1 <> 0 with local check option;
create view v2 as select * from v1 with cascaded check option; create view v2 as select * from v1 with cascaded check option;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v2 values (0); insert into v2 values (0);
drop view v2, v1; drop view v2, v1;
drop table t1; drop table t1;
...@@ -1177,7 +1177,7 @@ drop table t1; ...@@ -1177,7 +1177,7 @@ drop table t1;
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select * from t1 where s1 < 5 with check option; create view v1 as select * from t1 where s1 < 5 with check option;
#single value #single value
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert ignore into v1 values (6); insert ignore into v1 values (6);
#several values #several values
insert ignore into v1 values (6),(3); insert ignore into v1 values (6),(3);
...@@ -1191,7 +1191,7 @@ drop table t1; ...@@ -1191,7 +1191,7 @@ drop table t1;
create table t1 (s1 tinyint); create table t1 (s1 tinyint);
create trigger t1_bi before insert on t1 for each row set new.s1 = 500; create trigger t1_bi before insert on t1 for each row set new.s1 = 500;
create view v1 as select * from t1 where s1 <> 127 with check option; create view v1 as select * from t1 where s1 <> 127 with check option;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v1 values (0); insert into v1 values (0);
select * from v1; select * from v1;
select * from t1; select * from t1;
...@@ -1205,7 +1205,7 @@ drop table t1; ...@@ -1205,7 +1205,7 @@ drop table t1;
create table t1 (s1 tinyint); create table t1 (s1 tinyint);
create view v1 as select * from t1 where s1 <> 0; create view v1 as select * from t1 where s1 <> 0;
create view v2 as select * from v1 where s1 <> 1 with cascaded check option; create view v2 as select * from v1 where s1 <> 1 with cascaded check option;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
insert into v2 values (0); insert into v2 values (0);
select * from v2; select * from v2;
select * from t1; select * from t1;
...@@ -1218,7 +1218,7 @@ drop table t1; ...@@ -1218,7 +1218,7 @@ drop table t1;
# fixed length fields # fixed length fields
create table t1 (a int, b char(10)); create table t1 (a int, b char(10));
create view v1 as select * from t1 where a != 0 with check option; create view v1 as select * from t1 where a != 0 with check option;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
load data infile '../std_data_ln/loaddata3.dat' into table v1 fields terminated by '' enclosed by '' ignore 1 lines; load data infile '../std_data_ln/loaddata3.dat' into table v1 fields terminated by '' enclosed by '' ignore 1 lines;
select * from t1; select * from t1;
select * from v1; select * from v1;
...@@ -1231,7 +1231,7 @@ drop table t1; ...@@ -1231,7 +1231,7 @@ drop table t1;
# variable length fields # variable length fields
create table t1 (a text, b text); create table t1 (a text, b text);
create view v1 as select * from t1 where a <> 'Field A' with check option; create view v1 as select * from t1 where a <> 'Field A' with check option;
-- error 1369 -- error ER_VIEW_CHECK_FAILED
load data infile '../std_data_ln/loaddata2.dat' into table v1 fields terminated by ',' enclosed by ''''; load data infile '../std_data_ln/loaddata2.dat' into table v1 fields terminated by ',' enclosed by '''';
select concat('|',a,'|'), concat('|',b,'|') from t1; select concat('|',a,'|'), concat('|',b,'|') from t1;
select concat('|',a,'|'), concat('|',b,'|') from v1; select concat('|',a,'|'), concat('|',b,'|') from v1;
...@@ -1247,14 +1247,14 @@ drop table t1; ...@@ -1247,14 +1247,14 @@ drop table t1;
# #
create table t1 (s1 smallint); create table t1 (s1 smallint);
create view v1 as select * from t1 where 20 < (select (s1) from t1); create view v1 as select * from t1 where 20 < (select (s1) from t1);
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
insert into v1 values (30); insert into v1 values (30);
create view v2 as select * from t1; create view v2 as select * from t1;
create view v3 as select * from t1 where 20 < (select (s1) from v2); create view v3 as select * from t1 where 20 < (select (s1) from v2);
-- error 1471 -- error ER_NON_INSERTABLE_TABLE
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 1471 -- error ER_NON_INSERTABLE_TABLE
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;
...@@ -1312,7 +1312,7 @@ select * from t2; ...@@ -1312,7 +1312,7 @@ select * from t2;
# view without primary key # view without primary key
create view v2 (a,b) as select t1.b as a, t2.a as b from t1, t2; create view v2 (a,b) as select t1.b as a, t2.a as b from t1, t2;
set updatable_views_with_limit=NO; set updatable_views_with_limit=NO;
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update v2 set a= 10 where a=200 limit 1; update v2 set a= 10 where a=200 limit 1;
set updatable_views_with_limit=DEFAULT; set updatable_views_with_limit=DEFAULT;
# just view selects # just view selects
...@@ -1340,14 +1340,14 @@ create table t2 (a int, primary key (a), b int); ...@@ -1340,14 +1340,14 @@ create table t2 (a int, primary key (a), b int);
insert into t2 values (1000, 2000); insert into t2 values (1000, 2000);
create view v3 (a,b) as select t1.a as a, t2.a as b from t1, t2; create view v3 (a,b) as select t1.a as a, t2.a as b from t1, t2;
# inserting into join view without field list # inserting into join view without field list
-- error 1394 -- error ER_VIEW_NO_INSERT_FIELD_LIST
insert into v3 values (1,2); insert into v3 values (1,2);
-- error 1394 -- error ER_VIEW_NO_INSERT_FIELD_LIST
insert into v3 select * from t2; insert into v3 select * from t2;
# inserting in several tables of join view # inserting in several tables of join view
-- error 1393 -- error ER_VIEW_MULTIUPDATE
insert into v3(a,b) values (1,2); insert into v3(a,b) values (1,2);
-- error 1393 -- error ER_VIEW_MULTIUPDATE
insert into v3(a,b) select * from t2; insert into v3(a,b) select * from t2;
# correct inserts into join view # correct inserts into join view
insert into v3(a) values (1); insert into v3(a) values (1);
...@@ -1358,11 +1358,11 @@ insert into v3(a) values (1) on duplicate key update a=a+10000+VALUES(a); ...@@ -1358,11 +1358,11 @@ insert into v3(a) values (1) on duplicate key update a=a+10000+VALUES(a);
select * from t1; select * from t1;
select * from t2; select * from t2;
# try delete from join view # try delete from join view
-- error 1395 -- error ER_VIEW_DELETE_MERGE_VIEW
delete from v3; delete from v3;
-- error 1395 -- error ER_VIEW_DELETE_MERGE_VIEW
delete v3,t1 from v3,t1; delete v3,t1 from v3,t1;
-- error 1395 -- error ER_VIEW_DELETE_MERGE_VIEW
delete t1,v3 from t1,v3; delete t1,v3 from t1,v3;
# delete from t1 just to reduce result set size # delete from t1 just to reduce result set size
delete from t1; delete from t1;
...@@ -1385,7 +1385,7 @@ drop view v3; ...@@ -1385,7 +1385,7 @@ drop view v3;
drop tables t1,t2; drop tables t1,t2;
# #
# View field names should be case insensitive # View field names should be case insensitive
# #
create table t1(f1 int); create table t1(f1 int);
create view v1 as select f1 from t1; create view v1 as select f1 from t1;
...@@ -1394,7 +1394,7 @@ drop view v1; ...@@ -1394,7 +1394,7 @@ drop view v1;
drop table t1; drop table t1;
# #
# Resolving view fields in subqueries in VIEW (Bug #6394) # Resolving view fields in subqueries in VIEW (Bug#6394)
# #
create table t1(c1 int); create table t1(c1 int);
create table t2(c2 int); create table t2(c2 int);
...@@ -1411,7 +1411,7 @@ drop view v2, v1; ...@@ -1411,7 +1411,7 @@ drop view v2, v1;
drop table t1, t2; drop table t1, t2;
# #
# view over other view setup (BUG#7433) # view over other view setup (Bug#7433)
# #
CREATE TABLE t1 (C1 INT, C2 INT); CREATE TABLE t1 (C1 INT, C2 INT);
CREATE TABLE t2 (C2 INT); CREATE TABLE t2 (C2 INT);
...@@ -1422,10 +1422,10 @@ drop view v2, v1; ...@@ -1422,10 +1422,10 @@ drop view v2, v1;
drop table t1, t2; drop table t1, t2;
# #
# view and group_concat() (BUG#7116) # view and group_concat() (Bug#7116)
# #
create table t1 (col1 char(5),col2 int,col3 int); create table t1 (col1 char(5),col2 int,col3 int);
insert into t1 values ('one',10,25), ('two',10,50), ('two',10,50), ('one',20,25), ('one',30,25); insert into t1 values ('one',10,25), ('two',10,50), ('two',10,50), ('one',20,25), ('one',30,25);
create view v1 as select * from t1; create view v1 as select * from t1;
select col1,group_concat(col2,col3) from t1 group by col1; select col1,group_concat(col2,col3) from t1 group by col1;
select col1,group_concat(col2,col3) from v1 group by col1; select col1,group_concat(col2,col3) from v1 group by col1;
...@@ -1433,18 +1433,18 @@ drop view v1; ...@@ -1433,18 +1433,18 @@ drop view v1;
drop table t1; drop table t1;
# #
# Item_ref resolved as view field (BUG#6894) # Item_ref resolved as view field (Bug#6894)
# #
create table t1 (s1 int, s2 char); create table t1 (s1 int, s2 char);
create view v1 as select s1, s2 from t1; create view v1 as select s1, s2 from t1;
-- error 1054 -- error ER_BAD_FIELD_ERROR
select s2 from v1 vq1 where 2 = (select count(*) from v1 vq2 having vq1.s2 = vq2.s2); select s2 from v1 vq1 where 2 = (select count(*) from v1 vq2 having vq1.s2 = vq2.s2);
select s2 from v1 vq1 where 2 = (select count(*) aa from v1 vq2 having vq1.s2 = aa); select s2 from v1 vq1 where 2 = (select count(*) aa from v1 vq2 having vq1.s2 = aa);
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Test case for bug #9398 CREATE TABLE with SELECT from a multi-table view # Test case for Bug#9398 CREATE TABLE with SELECT from a multi-table view
# #
CREATE TABLE t1 (a1 int); CREATE TABLE t1 (a1 int);
CREATE TABLE t2 (a2 int); CREATE TABLE t2 (a2 int);
...@@ -1460,7 +1460,7 @@ DROP VIEW v1; ...@@ -1460,7 +1460,7 @@ DROP VIEW v1;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
# #
# Test for BUG#8703 "insert into table select from view crashes" # Test for Bug#8703 insert into table select from view crashes
# #
create table t1 (a int); create table t1 (a int);
create table t2 like t1; create table t2 like t1;
...@@ -1472,84 +1472,84 @@ drop view v1; ...@@ -1472,84 +1472,84 @@ drop view v1;
drop table t1,t2,t3; drop table t1,t2,t3;
# #
# Test for BUG #6106: query over a view using subquery for the underlying table # Test for Bug#6106 query over a view using subquery for the underlying table
# #
CREATE TABLE t1 (col1 int PRIMARY KEY, col2 varchar(10)); CREATE TABLE t1 (col1 int PRIMARY KEY, col2 varchar(10));
INSERT INTO t1 VALUES(1,'trudy'); INSERT INTO t1 VALUES(1,'trudy');
INSERT INTO t1 VALUES(2,'peter'); INSERT INTO t1 VALUES(2,'peter');
INSERT INTO t1 VALUES(3,'sanja'); INSERT INTO t1 VALUES(3,'sanja');
INSERT INTO t1 VALUES(4,'monty'); INSERT INTO t1 VALUES(4,'monty');
INSERT INTO t1 VALUES(5,'david'); INSERT INTO t1 VALUES(5,'david');
INSERT INTO t1 VALUES(6,'kent'); INSERT INTO t1 VALUES(6,'kent');
INSERT INTO t1 VALUES(7,'carsten'); INSERT INTO t1 VALUES(7,'carsten');
INSERT INTO t1 VALUES(8,'ranger'); INSERT INTO t1 VALUES(8,'ranger');
INSERT INTO t1 VALUES(10,'matt'); INSERT INTO t1 VALUES(10,'matt');
CREATE TABLE t2 (col1 int, col2 int, col3 char(1)); CREATE TABLE t2 (col1 int, col2 int, col3 char(1));
INSERT INTO t2 VALUES (1,1,'y'); INSERT INTO t2 VALUES (1,1,'y');
INSERT INTO t2 VALUES (1,2,'y'); INSERT INTO t2 VALUES (1,2,'y');
INSERT INTO t2 VALUES (2,1,'n'); INSERT INTO t2 VALUES (2,1,'n');
INSERT INTO t2 VALUES (3,1,'n'); INSERT INTO t2 VALUES (3,1,'n');
INSERT INTO t2 VALUES (4,1,'y'); INSERT INTO t2 VALUES (4,1,'y');
INSERT INTO t2 VALUES (4,2,'n'); INSERT INTO t2 VALUES (4,2,'n');
INSERT INTO t2 VALUES (4,3,'n'); INSERT INTO t2 VALUES (4,3,'n');
INSERT INTO t2 VALUES (6,1,'n'); INSERT INTO t2 VALUES (6,1,'n');
INSERT INTO t2 VALUES (8,1,'y'); INSERT INTO t2 VALUES (8,1,'y');
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT a.col1,a.col2,b.col2,b.col3 CREATE VIEW v1 AS SELECT * FROM t1;
SELECT a.col1,a.col2,b.col2,b.col3
FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1 FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1 FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
CREATE VIEW v2 AS SELECT * FROM t2; CREATE VIEW v2 AS SELECT * FROM t2;
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1 FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
# Tests from the report for bug #6107 # Tests from the report for Bug#6107
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1 FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
WHERE a.col1 IN (1,5,9) AND WHERE a.col1 IN (1,5,9) AND
(b.col2 IS NULL OR (b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1)); b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1));
CREATE VIEW v3 AS SELECT * FROM t1 WHERE col1 IN (1,5,9); CREATE VIEW v3 AS SELECT * FROM t1 WHERE col1 IN (1,5,9);
SELECT a.col1,a.col2,b.col2,b.col3 SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v3 a ON a.col1=b.col1 FROM v2 b RIGHT JOIN v3 a ON a.col1=b.col1
WHERE b.col2 IS NULL OR WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1); b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
DROP VIEW v1,v2,v3; DROP VIEW v1,v2,v3;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# BUG#8490 Select from views containing subqueries causes server to hang # Bug#8490 Select from views containing subqueries causes server to hang
# forever. # forever.
# #
create table t1 as select 1 A union select 2 union select 3; create table t1 as select 1 A union select 2 union select 3;
create table t2 as select * from t1; create table t2 as select * from t1;
create view v1 as select * from t1 where a in (select * from t2); create view v1 as select * from t1 where a in (select * from t2);
select * from v1 A, v1 B where A.a = B.a; select * from v1 A, v1 B where A.a = B.a;
create table t3 as select a a,a b from t2; create table t3 as select a a,a b from t2;
create view v2 as select * from t3 where create view v2 as select * from t3 where
a in (select * from t1) or b in (select * from t2); a in (select * from t1) or b in (select * from t2);
select * from v2 A, v2 B where A.a = B.b; select * from v2 A, v2 B where A.a = B.b;
drop view v1, v2; drop view v1, v2;
drop table t1, t2, t3; drop table t1, t2, t3;
# #
# Test case for bug #8528: select from view over multi-table view # Test case for Bug#8528 select from view over multi-table view
# #
CREATE TABLE t1 (a int); CREATE TABLE t1 (a int);
CREATE TABLE t2 (b int); CREATE TABLE t2 (b int);
...@@ -1565,7 +1565,7 @@ DROP VIEW v2,v1; ...@@ -1565,7 +1565,7 @@ DROP VIEW v2,v1;
DROP TABLE t1, t2; DROP TABLE t1, t2;
# #
# Correct restoring view name in SP table locking BUG#9758 # Correct restoring view name in SP table locking Bug#9758
# #
create table t1 (a int); create table t1 (a int);
create view v1 as select sum(a) from t1 group by a; create view v1 as select sum(a) from t1 group by a;
...@@ -1594,7 +1594,7 @@ SELECT d, c FROM v1 ORDER BY d,c; ...@@ -1594,7 +1594,7 @@ SELECT d, c FROM v1 ORDER BY d,c;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1, t2; DROP TABLE t1, t2;
# #
# using sum(distinct ) & avg(distinct ) in views (BUG#7015) # using sum(distinct ) & avg(distinct ) in views (Bug#7015)
# #
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select sum(distinct s1) from t1; create view v1 as select sum(distinct s1) from t1;
...@@ -1606,14 +1606,14 @@ drop view v1; ...@@ -1606,14 +1606,14 @@ drop view v1;
drop table t1; drop table t1;
# #
# using cast(... as decimal) in views (BUG#11387); # using cast(... as decimal) in views (Bug#11387);
# #
create view v1 as select cast(1 as decimal); create view v1 as select cast(1 as decimal);
select * from v1; select * from v1;
drop view v1; drop view v1;
# #
# Bug#11298 insert into select from VIEW produces incorrect result when # Bug#11298 insert into select from VIEW produces incorrect result when
# using ORDER BY # using ORDER BY
create table t1(f1 int); create table t1(f1 int);
create table t2(f2 int); create table t2(f2 int);
...@@ -1627,7 +1627,7 @@ drop view v1; ...@@ -1627,7 +1627,7 @@ drop view v1;
drop table t1,t2,t3; drop table t1,t2,t3;
# #
# Generation unique names for columns, and correct names check (BUG#7448) # Generation unique names for columns, and correct names check (Bug#7448)
# #
# names with ' and \ # names with ' and \
create view v1 as select '\\','\\shazam'; create view v1 as select '\\','\\shazam';
...@@ -1670,24 +1670,24 @@ create view v1 as select 's1', 's1', s1 from t1; ...@@ -1670,24 +1670,24 @@ create view v1 as select 's1', 's1', s1 from t1;
select * from v1; select * from v1;
drop view v1; drop view v1;
# underlying field name conflict with set name # underlying field name conflict with set name
-- error 1060 -- error ER_DUP_FIELDNAME
create view v1 as select 1 as s1, 's1', s1 from t1; create view v1 as select 1 as s1, 's1', s1 from t1;
-- error 1060 -- error ER_DUP_FIELDNAME
create view v1 as select 's1', s1, 1 as s1 from t1; create view v1 as select 's1', s1, 1 as s1 from t1;
drop table t1; drop table t1;
# set names differ by case only # set names differ by case only
-- error 1060 -- error ER_DUP_FIELDNAME
create view v1(k, K) as select 1,2; create view v1(k, K) as select 1,2;
# #
# using time_format in view (BUG#7521) # using time_format in view (Bug#7521)
# #
create view v1 as SELECT TIME_FORMAT(SEC_TO_TIME(3600),'%H:%i') as t; create view v1 as SELECT TIME_FORMAT(SEC_TO_TIME(3600),'%H:%i') as t;
select * from v1; select * from v1;
drop view v1; drop view v1;
# #
# evaluation constant functions in WHERE (BUG#4663) # evaluation constant functions in WHERE (Bug#4663)
# #
create table t1 (a timestamp default now()); create table t1 (a timestamp default now());
create table t2 (b timestamp default now()); create table t2 (b timestamp default now());
...@@ -1708,7 +1708,7 @@ DROP VIEW v1; ...@@ -1708,7 +1708,7 @@ DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# checking views after some view with error (BUG#11337) # checking views after some view with error (Bug#11337)
# #
CREATE TABLE t1 (col1 time); CREATE TABLE t1 (col1 time);
CREATE TABLE t2 (col1 time); CREATE TABLE t2 (col1 time);
...@@ -1749,7 +1749,7 @@ drop view v1, v2, v3, v4, v5, v6; ...@@ -1749,7 +1749,7 @@ drop view v1, v2, v3, v4, v5, v6;
drop table t2,t3; drop table t2,t3;
# #
# bug #11325 Wrong date comparison in views # Bug#11325 Wrong date comparison in views
# #
create table t1 (f1 date); create table t1 (f1 date);
insert into t1 values ('2005-01-01'),('2005-02-02'); insert into t1 values ('2005-01-01'),('2005-02-02');
...@@ -1760,7 +1760,7 @@ drop view v1; ...@@ -1760,7 +1760,7 @@ drop view v1;
drop table t1; drop table t1;
# #
# using encrypt & substring_index in view (BUG#7024) # using encrypt & substring_index in view (Bug#7024)
# #
CREATE VIEW v1 AS SELECT ENCRYPT("dhgdhgd"); CREATE VIEW v1 AS SELECT ENCRYPT("dhgdhgd");
disable_result_log; disable_result_log;
...@@ -1772,21 +1772,21 @@ SELECT * FROM v1; ...@@ -1772,21 +1772,21 @@ SELECT * FROM v1;
drop view v1; drop view v1;
# #
# hide underlying tables names in case of imposibility to update (BUG#10773) # hide underlying tables names in case of imposibility to update (Bug#10773)
# #
create table t1 (f59 int, f60 int, f61 int); create table t1 (f59 int, f60 int, f61 int);
insert into t1 values (19,41,32); insert into t1 values (19,41,32);
create view v1 as select f59, f60 from t1 where f59 in create view v1 as select f59, f60 from t1 where f59 in
(select f59 from t1); (select f59 from t1);
-- error 1288 -- error ER_NON_UPDATABLE_TABLE
update v1 set f60=2345; update v1 set f60=2345;
-- error 1443 -- error ER_VIEW_PREVENT_UPDATE
update t1 set f60=(select max(f60) from v1); update t1 set f60=(select max(f60) from v1);
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Using var_samp with view (BUG#10651) # Using var_samp with view (Bug#10651)
# #
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select var_samp(s1) from t1; create view v1 as select var_samp(s1) from t1;
...@@ -1794,24 +1794,26 @@ show create view v1; ...@@ -1794,24 +1794,26 @@ show create view v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Correct inserting data check (absence of default value) for view # Correct inserting data check (absence of default value) for view
# underlying tables (BUG#6443) # underlying tables (Bug#6443)
# #
set sql_mode='strict_all_tables'; set sql_mode='strict_all_tables';
CREATE TABLE t1 (col1 INT NOT NULL, col2 INT NOT NULL); CREATE TABLE t1 (col1 INT NOT NULL, col2 INT NOT NULL);
CREATE VIEW v1 (vcol1) AS SELECT col1 FROM t1; CREATE VIEW v1 (vcol1) AS SELECT col1 FROM t1;
CREATE VIEW v2 (vcol1) AS SELECT col1 FROM t1 WHERE col2 > 2; CREATE VIEW v2 (vcol1) AS SELECT col1 FROM t1 WHERE col2 > 2;
-- error 1364 -- error ER_NO_DEFAULT_FOR_FIELD
INSERT INTO t1 (col1) VALUES(12); INSERT INTO t1 (col1) VALUES(12);
-- error 1423 -- error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v1 (vcol1) VALUES(12); INSERT INTO v1 (vcol1) VALUES(12);
-- error 1423 -- error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v2 (vcol1) VALUES(12); INSERT INTO v2 (vcol1) VALUES(12);
set sql_mode=default; set sql_mode=default;
drop view v2,v1; drop view v2,v1;
drop table t1; drop table t1;
# #
# Bug#11399 Use an alias in a select statement on a view # Bug#11399 Use an alias in a select statement on a view
# #
...@@ -1822,8 +1824,9 @@ select f1 as alias from v1; ...@@ -1822,8 +1824,9 @@ select f1 as alias from v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Test for bug #6120: SP cache to be invalidated when altering a view # Test for Bug#6120 SP cache to be invalidated when altering a view
# #
CREATE TABLE t1 (s1 int, s2 int); CREATE TABLE t1 (s1 int, s2 int);
...@@ -1842,8 +1845,9 @@ DROP PROCEDURE p1; ...@@ -1842,8 +1845,9 @@ DROP PROCEDURE p1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Test for bug #11709 View was ordered by wrong column # Test for Bug#11709 View was ordered by wrong column
# #
create table t1 (f1 int, f2 int); create table t1 (f1 int, f2 int);
create view v1 as select f1 as f3, f2 as f1 from t1; create view v1 as select f1 as f3, f2 as f1 from t1;
...@@ -1852,8 +1856,9 @@ select * from v1 order by f1; ...@@ -1852,8 +1856,9 @@ select * from v1 order by f1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Test for bug #11771: wrong query_id in SELECT * FROM <view> # Test for Bug#11771 wrong query_id in SELECT * FROM <view>
# #
CREATE TABLE t1 (f1 char); CREATE TABLE t1 (f1 char);
INSERT INTO t1 VALUES ('A'); INSERT INTO t1 VALUES ('A');
...@@ -1866,8 +1871,9 @@ SELECT * FROM t1; ...@@ -1866,8 +1871,9 @@ SELECT * FROM t1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# opening table in correct locking mode (BUG#9597) # opening table in correct locking mode (Bug#9597)
# #
CREATE TABLE t1 ( bug_table_seq INTEGER NOT NULL); CREATE TABLE t1 ( bug_table_seq INTEGER NOT NULL);
CREATE OR REPLACE VIEW v1 AS SELECT * from t1; CREATE OR REPLACE VIEW v1 AS SELECT * from t1;
...@@ -1884,8 +1890,9 @@ DROP PROCEDURE p1; ...@@ -1884,8 +1890,9 @@ DROP PROCEDURE p1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #11335 View redefines column types # Bug#11335 View redefines column types
# #
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime); create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
create view v1 as select * from t1; create view v1 as select * from t1;
...@@ -1893,8 +1900,9 @@ desc v1; ...@@ -1893,8 +1900,9 @@ desc v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #11760 Typo in Item_func_add_time::print() results in NULLs returned # Bug#11760 Typo in Item_func_add_time::print() results in NULLs returned
# subtime() in view # subtime() in view
create table t1(f1 datetime); create table t1(f1 datetime);
insert into t1 values('2005.01.01 12:0:0'); insert into t1 values('2005.01.01 12:0:0');
...@@ -1903,8 +1911,9 @@ select * from v1; ...@@ -1903,8 +1911,9 @@ select * from v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Test for bug #11412: query over a multitable view with GROUP_CONCAT # Test for Bug#11412 query over a multitable view with GROUP_CONCAT
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
aid int PRIMARY KEY, aid int PRIMARY KEY,
...@@ -1920,15 +1929,16 @@ INSERT INTO t2 values (1,1), (2,1), (2,2); ...@@ -1920,15 +1929,16 @@ INSERT INTO t2 values (1,1), (2,1), (2,2);
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid; CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2 SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
WHERE t1.aid = t2.aid GROUP BY pid; WHERE t1.aid = t2.aid GROUP BY pid;
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid; SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Test for bug #12382: SELECT * FROM view after INSERT command # Test for Bug#12382 SELECT * FROM view after INSERT command
# #
CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255)); CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255));
...@@ -1942,9 +1952,10 @@ SELECT * FROM v1; ...@@ -1942,9 +1952,10 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Test for bug #12470: crash for a simple select from a view defined # Test for Bug#12470 crash for a simple select from a view defined
# as a join over 5 tables # as a join over 5 tables
CREATE TABLE t1 (pk int PRIMARY KEY, b int); CREATE TABLE t1 (pk int PRIMARY KEY, b int);
CREATE TABLE t2 (pk int PRIMARY KEY, fk int, INDEX idx(fk)); CREATE TABLE t2 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
...@@ -1961,27 +1972,29 @@ SELECT a FROM v1; ...@@ -1961,27 +1972,29 @@ SELECT a FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2,t3,t4,t5; DROP TABLE t1,t2,t3,t4,t5;
# #
# Bug #12298 Typo in function name results in erroneous view being created. # Bug#12298 Typo in function name results in erroneous view being created.
# #
create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1; create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1;
select * from v1; select * from v1;
drop view v1; drop view v1;
# #
# repeatable CREATE VIEW statement BUG#12468 # repeatable CREATE VIEW statement Bug#12468
# #
create table t1(a int); create table t1(a int);
create procedure p1() create view v1 as select * from t1; create procedure p1() create view v1 as select * from t1;
drop table t1; drop table t1;
-- error 1146 -- error ER_NO_SUCH_TABLE
call p1(); call p1();
-- error 1146 -- error ER_NO_SUCH_TABLE
call p1(); call p1();
drop procedure p1; drop procedure p1;
# #
# Bug #10624 Views with multiple UNION and UNION ALL produce incorrect results # Bug#10624 Views with multiple UNION and UNION ALL produce incorrect results
# #
create table t1 (f1 int); create table t1 (f1 int);
create table t2 (f1 int); create table t2 (f1 int);
...@@ -1991,20 +2004,23 @@ create view v1 as select * from t1 union select * from t2 union all select * fro ...@@ -1991,20 +2004,23 @@ create view v1 as select * from t1 union select * from t2 union all select * fro
select * from v1; select * from v1;
drop view v1; drop view v1;
drop table t1,t2; drop table t1,t2;
#
# Test for Bug#10970 view referring a temporary table indirectly
# #
# Test for bug #10970: view referring a temporary table indirectly
#
CREATE TEMPORARY TABLE t1 (a int); CREATE TEMPORARY TABLE t1 (a int);
CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1); CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1);
-- error 1352 -- error ER_VIEW_SELECT_TMPTABLE
CREATE VIEW v1 AS SELECT f1(); CREATE VIEW v1 AS SELECT f1();
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# BUG #12533 (crash on DESCRIBE <view> after renaming base table column) # Bug#12533 (crash on DESCRIBE <view> after renaming base table column)
# #
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
...@@ -2016,13 +2032,14 @@ CREATE VIEW v1 AS SELECT * FROM t1; ...@@ -2016,13 +2032,14 @@ CREATE VIEW v1 AS SELECT * FROM t1;
DESCRIBE v1; DESCRIBE v1;
ALTER TABLE t1 CHANGE COLUMN f4 f4x CHAR(5); ALTER TABLE t1 CHANGE COLUMN f4 f4x CHAR(5);
--error 1356 --error ER_VIEW_INVALID
DESCRIBE v1; DESCRIBE v1;
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v1; DROP VIEW v1;
#
# Bug #12489 wrongly printed strcmp() function results in creation of broken #
# Bug#12489 wrongly printed strcmp() function results in creation of broken
# view # view
create table t1 (f1 char); create table t1 (f1 char);
create view v1 as select strcmp(f1,'a') from t1; create view v1 as select strcmp(f1,'a') from t1;
...@@ -2030,8 +2047,9 @@ select * from v1; ...@@ -2030,8 +2047,9 @@ select * from v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #12922 if(sum(),...) with group from view returns wrong results # Bug#12922 if(sum(),...) with group from view returns wrong results
# #
create table t1 (f1 int, f2 int,f3 int); create table t1 (f1 int, f2 int,f3 int);
insert into t1 values (1,10,20),(2,0,0); insert into t1 values (1,10,20),(2,0,0);
...@@ -2039,7 +2057,9 @@ create view v1 as select * from t1; ...@@ -2039,7 +2057,9 @@ create view v1 as select * from t1;
select if(sum(f1)>1,f2,f3) from v1 group by f1; select if(sum(f1)>1,f2,f3) from v1 group by f1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# BUG#12941
# Bug#12941
# #
--disable_warnings --disable_warnings
create table t1 ( create table t1 (
...@@ -2049,7 +2069,7 @@ create table t1 ( ...@@ -2049,7 +2069,7 @@ create table t1 (
create table t2 ( create table t2 (
r_object_id char(16) NOT NULL, r_object_id char(16) NOT NULL,
i_position int(11) NOT NULL, i_position int(11) NOT NULL,
users_names varchar(32) default NULL users_names varchar(32) default NULL
) Engine = InnoDB; ) Engine = InnoDB;
--enable_warnings --enable_warnings
...@@ -2067,22 +2087,24 @@ insert into t2 values('120001a080000542',-1, 'guser01'); ...@@ -2067,22 +2087,24 @@ insert into t2 values('120001a080000542',-1, 'guser01');
insert into t2 values('120001a080000542',-2, 'guser02'); insert into t2 values('120001a080000542',-2, 'guser02');
select v1.r_object_id, v2.users_names from v1, v2 select v1.r_object_id, v2.users_names from v1, v2
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
order by users_names; order by users_names;
drop view v1, v2; drop view v1, v2;
drop table t1, t2; drop table t1, t2;
# Bug #6808 - Views: CREATE VIEW v ... FROM t AS v fails
# Bug#6808 Views: CREATE VIEW v ... FROM t AS v fails
# #
create table t1 (s1 int); create table t1 (s1 int);
create view abc as select * from t1 as abc; create view abc as select * from t1 as abc;
drop table t1; drop table t1;
drop view abc; drop view abc;
# #
# Bug #12993 View column rename broken in subselect # Bug#12993 View column rename broken in subselect
# #
create table t1(f1 char(1)); create table t1(f1 char(1));
create view v1 as select * from t1; create view v1 as select * from t1;
...@@ -2090,15 +2112,17 @@ select * from (select f1 as f2 from v1) v where v.f2='a'; ...@@ -2090,15 +2112,17 @@ select * from (select f1 as f2 from v1) v where v.f2='a';
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #11416 Server crash if using a view that uses function convert_tz # Bug#11416 Server crash if using a view that uses function convert_tz
# #
create view v1 as SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); create view v1 as SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
select * from v1; select * from v1;
drop view v1; drop view v1;
# #
# Bugs #12963, #13000: wrong creation of VIEW with DAYNAME, DAYOFWEEK, and WEEKDAY # Bugs#12963, #13000 wrong creation of VIEW with DAYNAME, DAYOFWEEK, and WEEKDAY
# #
CREATE TABLE t1 (date DATE NOT NULL); CREATE TABLE t1 (date DATE NOT NULL);
...@@ -2128,8 +2152,9 @@ SELECT * FROM v3; ...@@ -2128,8 +2152,9 @@ SELECT * FROM v3;
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v1, v2, v3; DROP VIEW v1, v2, v3;
# #
# Bug #13411: crash when using non-qualified view column in HAVING clause # Bug#13411 crash when using non-qualified view column in HAVING clause
# #
CREATE TABLE t1 ( a int, b int ); CREATE TABLE t1 ( a int, b int );
...@@ -2141,8 +2166,9 @@ SELECT v1.a FROM v1 GROUP BY v1.a HAVING a > 1; ...@@ -2141,8 +2166,9 @@ SELECT v1.a FROM v1 GROUP BY v1.a HAVING a > 1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #13410: failed name resolution for qualified view column in HAVING # Bug#13410 failed name resolution for qualified view column in HAVING
# #
CREATE TABLE t1 ( a int, b int ); CREATE TABLE t1 ( a int, b int );
...@@ -2156,8 +2182,9 @@ SELECT v_1.a FROM v1 AS v_1 GROUP BY v_1.a HAVING v_1.a IN (1,2,3); ...@@ -2156,8 +2182,9 @@ SELECT v_1.a FROM v1 AS v_1 GROUP BY v_1.a HAVING v_1.a IN (1,2,3);
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #13327 view wasn't using index for const condition # Bug#13327 view wasn't using index for const condition
# #
CREATE TABLE t1 (a INT, b INT, INDEX(a,b)); CREATE TABLE t1 (a INT, b INT, INDEX(a,b));
...@@ -2174,8 +2201,9 @@ EXPLAIN SELECT * FROM v2 WHERE a=1; ...@@ -2174,8 +2201,9 @@ EXPLAIN SELECT * FROM v2 WHERE a=1;
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
# #
# Bug #13622 Wrong view .frm created if some field's alias contain \n # Bug#13622 Wrong view .frm created if some field's alias contain \n
# #
create table t1 (f1 int); create table t1 (f1 int);
create view v1 as select t1.f1 as '123 create view v1 as select t1.f1 as '123
...@@ -2184,7 +2212,8 @@ select * from v1; ...@@ -2184,7 +2212,8 @@ select * from v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# Bug #14466 lost sort order in GROUP_CONCAT() in a view
# Bug#14466 lost sort order in GROUP_CONCAT() in a view
# #
create table t1 (f1 int, f2 int); create table t1 (f1 int, f2 int);
insert into t1 values(1,1),(1,2),(1,3); insert into t1 values(1,1),(1,2),(1,3);
...@@ -2195,8 +2224,9 @@ select * from v2; ...@@ -2195,8 +2224,9 @@ select * from v2;
drop view v1,v2; drop view v1,v2;
drop table t1; drop table t1;
# #
# BUG#14026 Crash on second PS execution when using views # Bug#14026 Crash on second PS execution when using views
# #
create table t1 (x int, y int); create table t1 (x int, y int);
create table t2 (x int, y int, z int); create table t2 (x int, y int, z int);
...@@ -2206,8 +2236,8 @@ create table t4 (x int, y int, z int); ...@@ -2206,8 +2236,8 @@ create table t4 (x int, y int, z int);
create view v1 as create view v1 as
select t1.x select t1.x
from ( from (
(t1 join t2 on ((t1.y = t2.y))) (t1 join t2 on ((t1.y = t2.y)))
join join
(t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
); );
...@@ -2219,8 +2249,9 @@ execute stmt1 using @parm1; ...@@ -2219,8 +2249,9 @@ execute stmt1 using @parm1;
drop view v1; drop view v1;
drop table t1,t2,t3,t4; drop table t1,t2,t3,t4;
# #
# Bug #14540: OPTIMIZE, ANALYZE, REPAIR applied to not a view # Bug#14540 OPTIMIZE, ANALYZE, REPAIR applied to not a view
# #
CREATE TABLE t1(id INT); CREATE TABLE t1(id INT);
...@@ -2239,7 +2270,7 @@ DROP VIEW v1; ...@@ -2239,7 +2270,7 @@ DROP VIEW v1;
# #
# BUG#14719: Views DEFINER grammar is incorrect # Bug#14719 Views DEFINER grammar is incorrect
# #
create definer = current_user() sql security invoker view v1 as select 1; create definer = current_user() sql security invoker view v1 as select 1;
...@@ -2250,8 +2281,9 @@ create definer = current_user sql security invoker view v1 as select 1; ...@@ -2250,8 +2281,9 @@ create definer = current_user sql security invoker view v1 as select 1;
show create view v1; show create view v1;
drop view v1; drop view v1;
# #
# Bug #14816 test_if_order_by_key() expected only Item_fields. # Bug#14816 test_if_order_by_key() expected only Item_fields.
# #
create table t1 (id INT, primary key(id)); create table t1 (id INT, primary key(id));
insert into t1 values (1),(2); insert into t1 values (1),(2);
...@@ -2260,8 +2292,9 @@ explain select id from v1 order by id; ...@@ -2260,8 +2292,9 @@ explain select id from v1 order by id;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #14850 Item_ref's values wasn't updated # Bug#14850 Item_ref's values wasn't updated
# #
create table t1(f1 int, f2 int); create table t1(f1 int, f2 int);
insert into t1 values (null, 10), (null,2); insert into t1 values (null, 10), (null,2);
...@@ -2271,8 +2304,9 @@ select f1, sum(f2) from v1 group by f1; ...@@ -2271,8 +2304,9 @@ select f1, sum(f2) from v1 group by f1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# BUG#14885: incorrect SOURCE in view created in a procedure # Bug#14885 incorrect SOURCE in view created in a procedure
# TODO: here SOURCE string must be shown when it will be possible # TODO: here SOURCE string must be shown when it will be possible
# #
--disable_warnings --disable_warnings
...@@ -2290,8 +2324,9 @@ show create view v1; ...@@ -2290,8 +2324,9 @@ show create view v1;
drop view v1; drop view v1;
drop procedure p1; drop procedure p1;
# #
# BUG#15096: using function with view for view creation # Bug#15096 using function with view for view creation
# #
CREATE VIEW v1 AS SELECT 42 AS Meaning; CREATE VIEW v1 AS SELECT 42 AS Meaning;
--disable_warnings --disable_warnings
...@@ -2311,8 +2346,9 @@ select * from v2; ...@@ -2311,8 +2346,9 @@ select * from v2;
drop view v2,v1; drop view v2,v1;
drop function f1; drop function f1;
# #
# Bug#14861: aliased column names are not preserved. # Bug#14861 aliased column names are not preserved.
# #
create table t1 (id numeric, warehouse_id numeric); create table t1 (id numeric, warehouse_id numeric);
create view v1 as select id from t1; create view v1 as select id from t1;
...@@ -2330,8 +2366,9 @@ order by v2.receipt_id; ...@@ -2330,8 +2366,9 @@ order by v2.receipt_id;
drop view v2, v1; drop view v2, v1;
drop table t1; drop table t1;
# #
# Bug#16016: MIN/MAX optimization for views # Bug#16016 MIN/MAX optimization for views
# #
CREATE TABLE t1 (a int PRIMARY KEY, b int); CREATE TABLE t1 (a int PRIMARY KEY, b int);
...@@ -2354,9 +2391,10 @@ EXPLAIN SELECT MIN(a) FROM v1; ...@@ -2354,9 +2391,10 @@ EXPLAIN SELECT MIN(a) FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug#16382: grouping name is resolved against a view column name # Bug#16382 grouping name is resolved against a view column name
# which coincides with a select column name # which coincides with a select column name
CREATE TABLE t1 (x varchar(10)); CREATE TABLE t1 (x varchar(10));
INSERT INTO t1 VALUES (null), ('foo'), ('bar'), (null); INSERT INTO t1 VALUES (null), ('foo'), ('bar'), (null);
...@@ -2371,21 +2409,23 @@ SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM v1 GROUP BY x; ...@@ -2371,21 +2409,23 @@ SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM v1 GROUP BY x;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#15943: mysql_next_result hangs on invalid SHOW CREATE VIEW # Bug#15943 mysql_next_result hangs on invalid SHOW CREATE VIEW
# #
delimiter //; delimiter //;
drop table if exists t1; drop table if exists t1;
drop view if exists v1; drop view if exists v1;
create table t1 (id int); create table t1 (id int);
create view v1 as select * from t1; create view v1 as select * from t1;
drop table t1; drop table t1;
show create view v1; show create view v1;
drop view v1; drop view v1;
// //
delimiter ;// delimiter ;//
# #
# Bug#17726 Not checked empty list caused endless loop # Bug#17726 Not checked empty list caused endless loop
# #
...@@ -2400,9 +2440,10 @@ select * from v2; ...@@ -2400,9 +2440,10 @@ select * from v2;
drop view v2, v1; drop view v2, v1;
drop table t1; drop table t1;
# #
# Bug #18386: select from view over a table with ORDER BY view_col clause # Bug#18386 select from view over a table with ORDER BY view_col clause
# given view_col is not an image of any column from the base table # given view_col is not an image of any column from the base table
CREATE TABLE t1 (a int); CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2); INSERT INTO t1 VALUES (1), (2);
...@@ -2414,9 +2455,10 @@ SELECT my_sqrt FROM v1 ORDER BY my_sqrt; ...@@ -2414,9 +2455,10 @@ SELECT my_sqrt FROM v1 ORDER BY my_sqrt;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#18237 invalid count optimization applied to an outer join with a view
# #
# Bug #18237: invalid count optimization applied to an outer join with a view
#
CREATE TABLE t1 (id int PRIMARY KEY); CREATE TABLE t1 (id int PRIMARY KEY);
CREATE TABLE t2 (id int PRIMARY KEY); CREATE TABLE t2 (id int PRIMARY KEY);
...@@ -2435,14 +2477,15 @@ DROP VIEW v2; ...@@ -2435,14 +2477,15 @@ DROP VIEW v2;
DROP TABLE t1, t2; DROP TABLE t1, t2;
# #
# Bug #16069: VIEW does return the same results as underlying SELECT # Bug#16069 VIEW does return the same results as underlying SELECT
# with WHERE condition containing BETWEEN over dates # with WHERE condition containing BETWEEN over dates
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
td date DEFAULT NULL, KEY idx(td)); td date DEFAULT NULL, KEY idx(td));
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'), (1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'), (4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06'); (7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
...@@ -2455,8 +2498,9 @@ SELECT * FROM v1 WHERE td BETWEEN CAST('2005.01.02' AS DATE) AND CAST('2005.01.0 ...@@ -2455,8 +2498,9 @@ SELECT * FROM v1 WHERE td BETWEEN CAST('2005.01.02' AS DATE) AND CAST('2005.01.0
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#14308: Recursive view definitions # Bug#14308 Recursive view definitions
# #
# using view only # using view only
create table t1 (a int); create table t1 (a int);
...@@ -2486,8 +2530,9 @@ select * from v1; ...@@ -2486,8 +2530,9 @@ select * from v1;
drop function f1; drop function f1;
drop view t1, v1; drop view t1, v1;
# #
# Bug #15153: CONVERT_TZ() is not allowed in all places in VIEWs # Bug#15153 CONVERT_TZ() is not allowed in all places in VIEWs
# #
# Error was reported when one tried to use CONVERT_TZ() function # Error was reported when one tried to use CONVERT_TZ() function
# select list of view which was processed using MERGE algorithm. # select list of view which was processed using MERGE algorithm.
...@@ -2498,7 +2543,7 @@ insert into t1 values (20040101000000), (20050101000000), (20060101000000); ...@@ -2498,7 +2543,7 @@ insert into t1 values (20040101000000), (20050101000000), (20060101000000);
create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1; create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1;
select * from v1; select * from v1;
drop view v1; drop view v1;
# And in its where part # And in its where part
create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000; create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000;
select * from v1; select * from v1;
# Other interesting case - a view which uses convert_tz() function # Other interesting case - a view which uses convert_tz() function
...@@ -2513,9 +2558,10 @@ select * from v2; ...@@ -2513,9 +2558,10 @@ select * from v2;
drop view v1, v2; drop view v1, v2;
drop table t1; drop table t1;
# #
# Bug #19490: usage of view specified by a query with GROUP BY # Bug#19490 usage of view specified by a query with GROUP BY
# an expression containing non-constant interval # an expression containing non-constant interval
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, d datetime); CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, d datetime);
...@@ -2529,8 +2575,9 @@ SELECT * FROM v1; ...@@ -2529,8 +2575,9 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug#19077: A nested materialized view is used before being populated. # Bug#19077 A nested materialized view is used before being populated.
# #
CREATE TABLE t1 (i INT, j BIGINT); CREATE TABLE t1 (i INT, j BIGINT);
INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2); INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
...@@ -2540,9 +2587,10 @@ SELECT * FROM v2; ...@@ -2540,9 +2587,10 @@ SELECT * FROM v2;
DROP VIEW v2, v1; DROP VIEW v2, v1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#19573 VIEW with HAVING that refers an alias name
# #
# Bug #19573: VIEW with HAVING that refers an alias name
#
CREATE TABLE t1( CREATE TABLE t1(
fName varchar(25) NOT NULL, fName varchar(25) NOT NULL,
...@@ -2550,7 +2598,7 @@ CREATE TABLE t1( ...@@ -2550,7 +2598,7 @@ CREATE TABLE t1(
DOB date NOT NULL, DOB date NOT NULL,
test_date date NOT NULL, test_date date NOT NULL,
uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY); uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY);
INSERT INTO t1(fName, lName, DOB, test_date) VALUES INSERT INTO t1(fName, lName, DOB, test_date) VALUES
('Hank', 'Hill', '1964-09-29', '2007-01-01'), ('Hank', 'Hill', '1964-09-29', '2007-01-01'),
('Tom', 'Adams', '1908-02-14', '2007-01-01'), ('Tom', 'Adams', '1908-02-14', '2007-01-01'),
...@@ -2558,8 +2606,8 @@ INSERT INTO t1(fName, lName, DOB, test_date) VALUES ...@@ -2558,8 +2606,8 @@ INSERT INTO t1(fName, lName, DOB, test_date) VALUES
CREATE VIEW v1 AS CREATE VIEW v1 AS
SELECT (year(test_date)-year(DOB)) AS Age SELECT (year(test_date)-year(DOB)) AS Age
FROM t1 HAVING Age < 75; FROM t1 HAVING Age < 75;
SHOW CREATE VIEW v1; SHOW CREATE VIEW v1;
SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75; SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75;
SELECT * FROM v1; SELECT * FROM v1;
...@@ -2567,8 +2615,9 @@ SELECT * FROM v1; ...@@ -2567,8 +2615,9 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #19089: wrong inherited dafault values in temp table views # Bug#19089 wrong inherited dafault values in temp table views
# #
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx'); CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx');
...@@ -2600,7 +2649,7 @@ DROP TABLE t1,t2; ...@@ -2600,7 +2649,7 @@ DROP TABLE t1,t2;
# #
# Bug#16110: insert permitted into view col w/o default value # Bug#16110 insert permitted into view col w/o default value
# #
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL); CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
CREATE VIEW v1 AS SELECT a, b FROM t1; CREATE VIEW v1 AS SELECT a, b FROM t1;
...@@ -2608,7 +2657,7 @@ CREATE VIEW v1 AS SELECT a, b FROM t1; ...@@ -2608,7 +2657,7 @@ CREATE VIEW v1 AS SELECT a, b FROM t1;
INSERT INTO v1 (b) VALUES (2); INSERT INTO v1 (b) VALUES (2);
SET SQL_MODE = STRICT_ALL_TABLES; SET SQL_MODE = STRICT_ALL_TABLES;
--error 1423 --error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v1 (b) VALUES (4); INSERT INTO v1 (b) VALUES (4);
SET SQL_MODE = ''; SET SQL_MODE = '';
...@@ -2617,8 +2666,9 @@ SELECT * FROM t1; ...@@ -2617,8 +2666,9 @@ SELECT * FROM t1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #18243: expression over a view column that with the REVERSE function # Bug#18243 expression over a view column that with the REVERSE function
# #
CREATE TABLE t1 (firstname text, surname text); CREATE TABLE t1 (firstname text, surname text);
...@@ -2633,21 +2683,23 @@ SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")), ...@@ -2633,21 +2683,23 @@ SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")),
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #19714: wrong type of a view column specified by an expressions over ints # Bug#19714 wrong type of a view column specified by an expressions over ints
# #
CREATE TABLE t1 (i int, j int); CREATE TABLE t1 (i int, j int);
CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1; CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1;
DESCRIBE v1; DESCRIBE v1;
CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1; CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
DESCRIBE t2; DESCRIBE t2;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Bug #17526: views with TRIM functions # Bug#17526 views with TRIM functions
# #
CREATE TABLE t1 (s varchar(10)); CREATE TABLE t1 (s varchar(10));
...@@ -2658,20 +2710,21 @@ CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1; ...@@ -2658,20 +2710,21 @@ CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1;
SELECT * FROM v1; SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
SELECT TRIM(LEADING 'y' FROM s) FROM t1; SELECT TRIM(LEADING 'y' FROM s) FROM t1;
CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1; CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1;
SELECT * FROM v1; SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
SELECT TRIM(TRAILING 'y' FROM s) FROM t1; SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1; CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
SELECT * FROM v1; SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
#Bug #21080: ALTER VIEW makes user restate SQL SECURITY mode, and ALGORITHM # Bug#21080 ALTER VIEW makes user restate SQL SECURITY mode, and ALGORITHM
# #
CREATE TABLE t1 (x INT, y INT); CREATE TABLE t1 (x INT, y INT);
CREATE ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1; CREATE ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
...@@ -2682,8 +2735,10 @@ SHOW CREATE VIEW v1; ...@@ -2682,8 +2735,10 @@ SHOW CREATE VIEW v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE
# clause is called
# Bug#21086 server crashes when VIEW defined with a SELECT with COLLATE
# clause is called
# #
CREATE TABLE t1 (s1 char); CREATE TABLE t1 (s1 char);
INSERT INTO t1 VALUES ('Z'); INSERT INTO t1 VALUES ('Z');
...@@ -2700,19 +2755,20 @@ SELECT s1 FROM t1; ...@@ -2700,19 +2755,20 @@ SELECT s1 FROM t1;
DROP VIEW v1, v2; DROP VIEW v1, v2;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #11551: Asymmetric + undocumented behaviour of DROP VIEW and DROP TABLE # Bug#11551 Asymmetric + undocumented behaviour of DROP VIEW and DROP TABLE
# #
CREATE TABLE t1 (id INT); CREATE TABLE t1 (id INT);
CREATE VIEW v1 AS SELECT id FROM t1; CREATE VIEW v1 AS SELECT id FROM t1;
SHOW TABLES; SHOW TABLES;
--error 1051 --error ER_BAD_TABLE_ERROR
DROP VIEW v2,v1; DROP VIEW v2,v1;
SHOW TABLES; SHOW TABLES;
CREATE VIEW v1 AS SELECT id FROM t1; CREATE VIEW v1 AS SELECT id FROM t1;
--error 1347 --error ER_WRONG_OBJECT
DROP VIEW t1,v1; DROP VIEW t1,v1;
SHOW TABLES; SHOW TABLES;
...@@ -2721,13 +2777,14 @@ DROP TABLE t1; ...@@ -2721,13 +2777,14 @@ DROP TABLE t1;
DROP VIEW IF EXISTS v1; DROP VIEW IF EXISTS v1;
--enable_warnings --enable_warnings
# #
# Bug #21261: Wrong access rights was required for an insert to a view # Bug#21261 Wrong access rights was required for an insert to a view
# #
CREATE DATABASE bug21261DB; CREATE DATABASE bug21261DB;
USE bug21261DB; USE bug21261DB;
CONNECT (root,localhost,root,,bug21261DB); connect (root,localhost,root,,bug21261DB);
CONNECTION root; connection root;
CREATE TABLE t1 (x INT); CREATE TABLE t1 (x INT);
CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1; CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
...@@ -2736,34 +2793,41 @@ GRANT INSERT, UPDATE ON t1 TO 'user21261'@'localhost'; ...@@ -2736,34 +2793,41 @@ GRANT INSERT, UPDATE ON t1 TO 'user21261'@'localhost';
CREATE TABLE t2 (y INT); CREATE TABLE t2 (y INT);
GRANT SELECT ON t2 TO 'user21261'@'localhost'; GRANT SELECT ON t2 TO 'user21261'@'localhost';
CONNECT (user21261, localhost, user21261,, bug21261DB); connect (user21261, localhost, user21261,, bug21261DB);
CONNECTION user21261; connection user21261;
INSERT INTO v1 (x) VALUES (5); INSERT INTO v1 (x) VALUES (5);
UPDATE v1 SET x=1; UPDATE v1 SET x=1;
CONNECTION root; connection root;
GRANT SELECT ON v1 TO 'user21261'@'localhost'; GRANT SELECT ON v1 TO 'user21261'@'localhost';
GRANT SELECT ON t1 TO 'user21261'@'localhost'; GRANT SELECT ON t1 TO 'user21261'@'localhost';
CONNECTION user21261; connection user21261;
UPDATE v1,t2 SET x=1 WHERE x=y; UPDATE v1,t2 SET x=1 WHERE x=y;
CONNECTION root; connection root;
SELECT * FROM t1; SELECT * FROM t1;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user21261'@'localhost'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user21261'@'localhost';
DROP USER 'user21261'@'localhost'; DROP USER 'user21261'@'localhost';
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
DROP DATABASE bug21261DB; DROP DATABASE bug21261DB;
connection default;
USE test; USE test;
disconnect root;
disconnect user21261;
# #
# Bug #15950: NOW() optimized away in VIEWs # Bug#15950 NOW() optimized away in VIEWs
# #
create table t1 (f1 datetime); create table t1 (f1 datetime);
create view v1 as select * from t1 where f1 between now() and now() + interval 1 minute; create view v1 as select * from t1 where f1 between now() and now() + interval 1 minute;
show create view v1; show create view v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Test for BUG#16899: Possible buffer overflow in handling of DEFINER-clause. # Test for Bug#16899 Possible buffer overflow in handling of DEFINER-clause.
# #
# Prepare. # Prepare.
...@@ -2790,8 +2854,7 @@ DROP TABLE t1; ...@@ -2790,8 +2854,7 @@ DROP TABLE t1;
# #
# BUG#17591: Updatable view not possible with trigger or stored # Bug#17591 Updatable view not possible with trigger or stored function
# function
# #
# During prelocking phase we didn't update lock type of view tables, # During prelocking phase we didn't update lock type of view tables,
# hence READ lock was always requested. # hence READ lock was always requested.
...@@ -2835,11 +2898,12 @@ DROP FUNCTION f2; ...@@ -2835,11 +2898,12 @@ DROP FUNCTION f2;
DROP VIEW v1, v2; DROP VIEW v1, v2;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #5500: wrong select_type in EXPLAIN output for queries over views # Bug#5500 wrong select_type in EXPLAIN output for queries over views
# #
CREATE TABLE t1 (s1 int); CREATE TABLE t1 (s1 int);
CREATE VIEW v1 AS SELECT * FROM t1; CREATE VIEW v1 AS SELECT * FROM t1;
EXPLAIN SELECT * FROM t1; EXPLAIN SELECT * FROM t1;
...@@ -2847,34 +2911,36 @@ EXPLAIN SELECT * FROM v1; ...@@ -2847,34 +2911,36 @@ EXPLAIN SELECT * FROM v1;
INSERT INTO t1 VALUES (1), (3), (2); INSERT INTO t1 VALUES (1), (3), (2);
EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1); EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1); EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #5505: Wrong error message on INSERT into a view # Bug#5505 Wrong error message on INSERT into a view
# #
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select s1 as a, s1 as b from t1; create view v1 as select s1 as a, s1 as b from t1;
--error 1471 --error ER_NON_INSERTABLE_TABLE
insert into v1 values (1,1); insert into v1 values (1,1);
update v1 set a = 5; update v1 set a = 5;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #21646: view qith a subquery in ON expression # Bug#21646 view qith a subquery in ON expression
# #
CREATE TABLE t1(pk int PRIMARY KEY); CREATE TABLE t1(pk int PRIMARY KEY);
CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int); CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
CREATE ALGORITHM=MERGE VIEW v1 AS CREATE ALGORITHM=MERGE VIEW v1 AS
SELECT t1.* SELECT t1.*
FROM t1 JOIN t2 FROM t1 JOIN t2
ON t2.fk = t1.pk AND ON t2.fk = t1.pk AND
t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org); t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
SHOW WARNINGS; SHOW WARNINGS;
SHOW CREATE VIEW v1; SHOW CREATE VIEW v1;
...@@ -2884,8 +2950,7 @@ DROP TABLE t1, t2; ...@@ -2884,8 +2950,7 @@ DROP TABLE t1, t2;
# #
# Bug#19111: TRIGGERs selecting from a VIEW on the firing base table # Bug#19111 TRIGGERs selecting from a VIEW on the firing base table fail
# fail
# #
# Allow to select from a view on a table being modified in a trigger # Allow to select from a view on a table being modified in a trigger
# and stored function, since plain select is allowed there. # and stored function, since plain select is allowed there.
...@@ -2916,23 +2981,24 @@ DROP FUNCTION f1; ...@@ -2916,23 +2981,24 @@ DROP FUNCTION f1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #16813 (WITH CHECK OPTION doesn't work with UPDATE) # Bug#16813 (WITH CHECK OPTION doesn't work with UPDATE)
# #
CREATE TABLE t1(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL); CREATE TABLE t1(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL);
CREATE VIEW v1 AS SELECT id, val FROM t1 WHERE val >= 1 AND val <= 5 WITH CHECK OPTION; CREATE VIEW v1 AS SELECT id, val FROM t1 WHERE val >= 1 AND val <= 5 WITH CHECK OPTION;
INSERT INTO v1 (val) VALUES (2); INSERT INTO v1 (val) VALUES (2);
INSERT INTO v1 (val) VALUES (4); INSERT INTO v1 (val) VALUES (4);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
INSERT INTO v1 (val) VALUES (6); INSERT INTO v1 (val) VALUES (6);
-- error 1369 -- error ER_VIEW_CHECK_FAILED
UPDATE v1 SET val=6 WHERE id=2; UPDATE v1 SET val=6 WHERE id=2;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#22584: last_insert_id not updated after inserting a record # Bug#22584 last_insert_id not updated after inserting a record
# through a updatable view # through a updatable view
# #
# We still do not update LAST_INSERT_ID if AUTO_INCREMENT column is # We still do not update LAST_INSERT_ID if AUTO_INCREMENT column is
...@@ -2968,8 +3034,9 @@ SELECT * FROM t1; ...@@ -2968,8 +3034,9 @@ SELECT * FROM t1;
DROP VIEW v1, v2; DROP VIEW v1, v2;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #25580: !0 as an operand in a select expression of a view # Bug#25580 !0 as an operand in a select expression of a view
# #
CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL; CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL;
...@@ -2980,8 +3047,9 @@ SELECT * FROM v; ...@@ -2980,8 +3047,9 @@ SELECT * FROM v;
DROP VIEW v; DROP VIEW v;
# #
# BUG#24293: '\Z' token is not handled correctly in views # Bug#24293 '\Z' token is not handled correctly in views
# #
--disable_warnings --disable_warnings
...@@ -2995,8 +3063,9 @@ SHOW CREATE VIEW v1; ...@@ -2995,8 +3063,9 @@ SHOW CREATE VIEW v1;
DROP VIEW v1; DROP VIEW v1;
# #
# Bug #26124: BETWEEN over a view column of the DATETIME type # Bug#26124 BETWEEN over a view column of the DATETIME type
# #
CREATE TABLE t1 (mydate DATETIME); CREATE TABLE t1 (mydate DATETIME);
...@@ -3011,8 +3080,9 @@ SELECT * FROM v1 WHERE mydate BETWEEN '2007-01-01' AND '2007-01-31'; ...@@ -3011,8 +3080,9 @@ SELECT * FROM v1 WHERE mydate BETWEEN '2007-01-01' AND '2007-01-31';
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #25931: update of a multi-table view with check option # Bug#25931 update of a multi-table view with check option
# #
CREATE TABLE t1 (a int); CREATE TABLE t1 (a int);
...@@ -3024,7 +3094,7 @@ CREATE VIEW v1 AS ...@@ -3024,7 +3094,7 @@ CREATE VIEW v1 AS
SELECT t2.b FROM t1,t2 WHERE t1.a = t2.b WITH CHECK OPTION; SELECT t2.b FROM t1,t2 WHERE t1.a = t2.b WITH CHECK OPTION;
SELECT * FROM v1; SELECT * FROM v1;
--error 1369 --error ER_VIEW_CHECK_FAILED
UPDATE v1 SET b=3; UPDATE v1 SET b=3;
SELECT * FROM v1; SELECT * FROM v1;
SELECT * FROM t1; SELECT * FROM t1;
...@@ -3033,8 +3103,9 @@ SELECT * FROM t2; ...@@ -3033,8 +3103,9 @@ SELECT * FROM t2;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm. # Bug#12122 Views with ORDER BY can't be resolved using MERGE algorithm.
# #
create table t1(f1 int, f2 int); create table t1(f1 int, f2 int);
insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2); insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2);
...@@ -3048,7 +3119,7 @@ drop view v1; ...@@ -3048,7 +3119,7 @@ drop view v1;
drop table t1; drop table t1;
# #
# Bug#26209: queries with GROUP BY and ORDER BY using views # Bug#26209 queries with GROUP BY and ORDER BY using views
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
...@@ -3067,9 +3138,9 @@ SELECT code, COUNT(DISTINCT country) FROM v1 GROUP BY code ORDER BY MAX(id); ...@@ -3067,9 +3138,9 @@ SELECT code, COUNT(DISTINCT country) FROM v1 GROUP BY code ORDER BY MAX(id);
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#25897: Some queries are no longer possible after a CREATE VIEW # Bug#25897 Some queries are no longer possible after a CREATE VIEW fails
# fails
# #
--disable_warnings --disable_warnings
DROP VIEW IF EXISTS v1; DROP VIEW IF EXISTS v1;
...@@ -3083,9 +3154,9 @@ eval CREATE VIEW v1 AS $query; ...@@ -3083,9 +3154,9 @@ eval CREATE VIEW v1 AS $query;
--echo # Previously the following would fail. --echo # Previously the following would fail.
eval $query; eval $query;
# #
# Bug#24532: The return data type of IS TRUE is different from similar # Bug#24532 The return data type of IS TRUE is different from similar operations
# operations
# #
--disable_warnings --disable_warnings
...@@ -3170,8 +3241,9 @@ drop view view_24532_a; ...@@ -3170,8 +3241,9 @@ drop view view_24532_a;
drop view view_24532_b; drop view view_24532_b;
drop table table_24532; drop table table_24532;
# #
# Bug#26560: view using subquery with a reference to an outer alias # Bug#26560 view using subquery with a reference to an outer alias
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
...@@ -3182,7 +3254,7 @@ INSERT INTO t1 (lid, name) VALUES ...@@ -3182,7 +3254,7 @@ INSERT INTO t1 (lid, name) VALUES
(1, 'YES'), (2, 'NO'); (1, 'YES'), (2, 'NO');
CREATE TABLE t2 ( CREATE TABLE t2 (
id int NOT NULL PRIMARY KEY, id int NOT NULL PRIMARY KEY,
gid int NOT NULL, gid int NOT NULL,
lid int NOT NULL, lid int NOT NULL,
dt date dt date
...@@ -3210,8 +3282,9 @@ SELECT * FROM v1; ...@@ -3210,8 +3282,9 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP table t1,t2; DROP table t1,t2;
# #
# Bug#27786: Inconsistent Operation Performing UNION On View With ORDER BY # Bug#27786 Inconsistent Operation Performing UNION On View With ORDER BY
# #
CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3);
CREATE VIEW v1 AS SELECT a FROM t1 ORDER BY a; CREATE VIEW v1 AS SELECT a FROM t1 ORDER BY a;
...@@ -3226,8 +3299,9 @@ EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a; ...@@ -3226,8 +3299,9 @@ EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #27921 View ignores precision for CAST() # Bug#27921 View ignores precision for CAST()
# #
CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col; CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col;
SELECT * FROM v1; SELECT * FROM v1;
...@@ -3238,9 +3312,10 @@ CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col; ...@@ -3238,9 +3312,10 @@ CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col;
SHOW CREATE VIEW v1; SHOW CREATE VIEW v1;
DROP VIEW v1; DROP VIEW v1;
# #
# Bug #28716: CHECK OPTION expression is evaluated over expired record buffers # Bug#28716 CHECK OPTION expression is evaluated over expired record buffers
# when VIEW is updated via temporary tables # when VIEW is updated via temporary tables
# #
CREATE TABLE t1 (a INT); CREATE TABLE t1 (a INT);
CREATE TABLE t2 (b INT, c INT DEFAULT 0); CREATE TABLE t2 (b INT, c INT DEFAULT 0);
...@@ -3254,9 +3329,10 @@ SELECT * FROM v1; ...@@ -3254,9 +3329,10 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Bug #28561: update on multi-table view with CHECK OPTION and # Bug#28561 update on multi-table view with CHECK OPTION and a subquery
# a subquery in WHERE condition # in WHERE condition
# #
CREATE TABLE t1 (id int); CREATE TABLE t1 (id int);
...@@ -3264,8 +3340,8 @@ CREATE TABLE t2 (id int, c int DEFAULT 0); ...@@ -3264,8 +3340,8 @@ CREATE TABLE t2 (id int, c int DEFAULT 0);
INSERT INTO t1 (id) VALUES (1); INSERT INTO t1 (id) VALUES (1);
INSERT INTO t2 (id) VALUES (1); INSERT INTO t2 (id) VALUES (1);
CREATE VIEW v1 AS CREATE VIEW v1 AS
SELECT t2.c FROM t1, t2 SELECT t2.c FROM t1, t2
WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION; WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
UPDATE v1 SET c=1; UPDATE v1 SET c=1;
...@@ -3273,9 +3349,10 @@ UPDATE v1 SET c=1; ...@@ -3273,9 +3349,10 @@ UPDATE v1 SET c=1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Bug #27827: CHECK OPTION ignores ON conditions when updating # Bug#27827 CHECK OPTION ignores ON conditions when updating
# a multi-table view with CHECK OPTION. # a multi-table view with CHECK OPTION.
# #
CREATE TABLE t1 (a1 INT, c INT DEFAULT 0); CREATE TABLE t1 (a1 INT, c INT DEFAULT 0);
...@@ -3291,14 +3368,14 @@ CREATE VIEW v1 AS ...@@ -3291,14 +3368,14 @@ CREATE VIEW v1 AS
SELECT t1.a1, t1.c FROM t1 JOIN t2 ON t1.a1=t2.a2 AND t1.c < 3 SELECT t1.a1, t1.c FROM t1 JOIN t2 ON t1.a1=t2.a2 AND t1.c < 3
WITH CHECK OPTION; WITH CHECK OPTION;
SELECT * FROM v1; SELECT * FROM v1;
--error 1369 --error ER_VIEW_CHECK_FAILED
UPDATE v1 SET c=3; UPDATE v1 SET c=3;
PREPARE t FROM 'UPDATE v1 SET c=3'; PREPARE t FROM 'UPDATE v1 SET c=3';
--error 1369 --error ER_VIEW_CHECK_FAILED
EXECUTE t; EXECUTE t;
--error 1369 --error ER_VIEW_CHECK_FAILED
EXECUTE t; EXECUTE t;
--error 1369 --error ER_VIEW_CHECK_FAILED
INSERT INTO v1(a1, c) VALUES (3, 3); INSERT INTO v1(a1, c) VALUES (3, 3);
UPDATE v1 SET c=1 WHERE a1=1; UPDATE v1 SET c=1 WHERE a1=1;
SELECT * FROM v1; SELECT * FROM v1;
...@@ -3309,14 +3386,14 @@ CREATE VIEW v2 AS SELECT t1.a1, t1.c ...@@ -3309,14 +3386,14 @@ CREATE VIEW v2 AS SELECT t1.a1, t1.c
JOIN (t3 JOIN t4 ON t3.a3=t4.a4) JOIN (t3 JOIN t4 ON t3.a3=t4.a4)
ON t2.a2=t3.a3 WITH CHECK OPTION; ON t2.a2=t3.a3 WITH CHECK OPTION;
SELECT * FROM v2; SELECT * FROM v2;
--error 1369 --error ER_VIEW_CHECK_FAILED
UPDATE v2 SET c=3; UPDATE v2 SET c=3;
PREPARE t FROM 'UPDATE v2 SET c=3'; PREPARE t FROM 'UPDATE v2 SET c=3';
--error 1369 --error ER_VIEW_CHECK_FAILED
EXECUTE t; EXECUTE t;
--error 1369 --error ER_VIEW_CHECK_FAILED
EXECUTE t; EXECUTE t;
--error 1369 --error ER_VIEW_CHECK_FAILED
INSERT INTO v2(a1, c) VALUES (3, 3); INSERT INTO v2(a1, c) VALUES (3, 3);
UPDATE v2 SET c=2 WHERE a1=1; UPDATE v2 SET c=2 WHERE a1=1;
SELECT * FROM v2; SELECT * FROM v2;
...@@ -3325,10 +3402,11 @@ SELECT * FROM t1; ...@@ -3325,10 +3402,11 @@ SELECT * FROM t1;
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
# #
# Bug #29104: assertion abort for a query with a view column reference # Bug#29104 assertion abort for a query with a view column reference
# in the GROUP BY list and a condition requiring the value # in the GROUP BY list and a condition requiring the value
# of another view column to be equal to a constant # of another view column to be equal to a constant
# #
CREATE TABLE t1 (a int, b int); CREATE TABLE t1 (a int, b int);
...@@ -3349,9 +3427,10 @@ EXPLAIN SELECT a, SUM(b) FROM v1 WHERE a=1 GROUP BY a; ...@@ -3349,9 +3427,10 @@ EXPLAIN SELECT a, SUM(b) FROM v1 WHERE a=1 GROUP BY a;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #
# Bug #29392: SELECT over a multi-table view with ORDER BY # Bug#29392 SELECT over a multi-table view with ORDER BY
# selecting the same view column with two different aliases # selecting the same view column with two different aliases
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
...@@ -3375,7 +3454,7 @@ CREATE TABLE t3 ( ...@@ -3375,7 +3454,7 @@ CREATE TABLE t3 (
INDEX idx_app_name(app_name) INDEX idx_app_name(app_name)
); );
CREATE VIEW v1 AS CREATE VIEW v1 AS
SELECT profile.person_id AS person_id SELECT profile.person_id AS person_id
FROM t1 profile, t2 userrole, t3 role FROM t1 profile, t2 userrole, t3 role
WHERE userrole.person_id = profile.person_id AND WHERE userrole.person_id = profile.person_id AND
...@@ -3390,35 +3469,37 @@ INSERT INTO t1 VALUES ...@@ -3390,35 +3469,37 @@ INSERT INTO t1 VALUES
INSERT INTO t2 VALUES INSERT INTO t2 VALUES
(1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10); (1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
INSERT INTO t3 VALUES INSERT INTO t3 VALUES
(1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'), (1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
(3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'), (3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
(5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'), (5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
(7,'SOC_USER','SOCCANS'),(8,'CAYIT_USER','CAYITCANS'), (7,'SOC_USER','SOCCANS'),(8,'CAYIT_USER','CAYITCANS'),
(9,'RTOS_DCFSPOS_SUPERVISOR','RTOS'); (9,'RTOS_DCFSPOS_SUPERVISOR','RTOS');
EXPLAIN SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6; EXPLAIN SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6; SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
# #
# Bug#30020: Insufficient check led to a wrong info provided by the # Bug#30020 Insufficient check led to a wrong info provided by the
# information schema table. # information schema table.
# #
create table t1 (i int); create table t1 (i int);
insert into t1 values (1), (2), (1), (3), (2), (4); insert into t1 values (1), (2), (1), (3), (2), (4);
create view v1 as select distinct i from t1; create view v1 as select distinct i from t1;
select * from v1; select * from v1;
select table_name, is_updatable from information_schema.views select table_name, is_updatable from information_schema.views
where table_name = 'v1'; where table_name = 'v1';
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #28701: SELECTs from VIEWs completely ignore USE/FORCE KEY, allowing # Bug#28701 SELECTs from VIEWs completely ignore USE/FORCE KEY, allowing
# invalid statements # invalid statements
# #
CREATE TABLE t1 (a INT); CREATE TABLE t1 (a INT);
...@@ -3436,7 +3517,7 @@ DROP TABLE t1; ...@@ -3436,7 +3517,7 @@ DROP TABLE t1;
# #
# Bug #28702: VIEWs defined with USE/FORCE KEY ignore that request # Bug#28702 VIEWs defined with USE/FORCE KEY ignore that request
# #
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0, CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
PRIMARY KEY(a), KEY (b)); PRIMARY KEY(a), KEY (b));
...@@ -3456,9 +3537,10 @@ DROP VIEW v2; ...@@ -3456,9 +3537,10 @@ DROP VIEW v2;
DROP VIEW v3; DROP VIEW v3;
DROP TABLE t1; DROP TABLE t1;
--echo # --echo #
--echo # Bug#29477: Not all fields of the target table were checked to have --echo # Bug#29477 Not all fields of the target table were checked to have
--echo # a default value when inserting into a view. --echo # a default value when inserting into a view.
--echo # --echo #
create table t1(f1 int, f2 int not null); create table t1(f1 int, f2 int not null);
create view v1 as select f1 from t1; create view v1 as select f1 from t1;
...@@ -3471,29 +3553,31 @@ set @@sql_mode=@old_mode; ...@@ -3471,29 +3553,31 @@ set @@sql_mode=@old_mode;
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# Bug #33389: Selecting from a view into a table from within SP or trigger # Bug#33389 Selecting from a view into a table from within SP or trigger
# crashes server # crashes server
# #
create table t1 (a int, key(a)); create table t1 (a int, key(a));
create table t2 (c int); create table t2 (c int);
create view v1 as select a b from t1; create view v1 as select a b from t1;
create view v2 as select 1 a from t2, v1 where c in create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a); (select 1 from t1 where b = a);
insert into t1 values (1), (1); insert into t1 values (1), (1);
insert into t2 values (1), (1); insert into t2 values (1), (1);
prepare stmt from "select * from v2 where a = 1"; prepare stmt from "select * from v2 where a = 1";
execute stmt; execute stmt;
drop view v1, v2; drop view v1, v2;
drop table t1, t2; drop table t1, t2;
# #
# Bug #33049: Assert while running test-as3ap test(mysql-bench suite) # Bug#33049 Assert while running test-as3ap test(mysql-bench suite)
# #
CREATE TABLE t1 (a INT); CREATE TABLE t1 (a INT);
...@@ -3508,7 +3592,7 @@ DROP TABLE t1; ...@@ -3508,7 +3592,7 @@ DROP TABLE t1;
########################################################################### ###########################################################################
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
--echo # -- Bug#34337: Server crash when Altering a view using a table name. --echo # -- Bug#34337 Server crash when Altering a view using a table name.
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
--echo --echo
...@@ -3538,8 +3622,8 @@ DROP TABLE t1; ...@@ -3538,8 +3622,8 @@ DROP TABLE t1;
########################################################################### ###########################################################################
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
--echo # -- Bug#35193: VIEW query is rewritten without "FROM DUAL", --echo # -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
--echo # -- causing syntax error --echo # -- causing syntax error
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
--echo --echo
...@@ -3561,15 +3645,16 @@ DROP VIEW v1; ...@@ -3561,15 +3645,16 @@ DROP VIEW v1;
########################################################################### ###########################################################################
# #
# Bug#39040: valgrind errors/crash when creating views with binlog logging # Bug#39040 valgrind errors/crash when creating views with binlog logging
# enabled # enabled
# #
# Bug is visible only when running in valgrind with binary logging. # Bug is visible only when running in valgrind with binary logging.
CREATE VIEW v1 AS SELECT 1; CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1; DROP VIEW v1;
# #
# Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error # Bug#33461 SELECT ... FROM <view> USE INDEX (...) throws an error
# #
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2)); CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2));
......
# Can't test with embedded server # Can't test with embedded server
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
# simple test of grants # simple test of grants
grant create view on test.* to test@localhost; grant create view on test.* to test@localhost;
show grants for test@localhost; show grants for test@localhost;
...@@ -26,19 +29,19 @@ grant create view,select on test.* to mysqltest_1@localhost; ...@@ -26,19 +29,19 @@ grant create view,select on test.* to mysqltest_1@localhost;
connect (user1,localhost,mysqltest_1,,test); connect (user1,localhost,mysqltest_1,,test);
connection user1; connection user1;
-- error ER_SPECIFIC_ACCESS_DENIED_ERROR --error ER_SPECIFIC_ACCESS_DENIED_ERROR
create definer=root@localhost view v1 as select * from mysqltest.t1; create definer=root@localhost view v1 as select * from mysqltest.t1;
create view v1 as select * from mysqltest.t1; create view v1 as select * from mysqltest.t1;
# try to modify view without DROP privilege on it # try to modify view without DROP privilege on it
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
alter view v1 as select * from mysqltest.t1; alter view v1 as select * from mysqltest.t1;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
create or replace view v1 as select * from mysqltest.t1; create or replace view v1 as select * from mysqltest.t1;
# no CRETE VIEW privilege # no CRETE VIEW privilege
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
create view mysqltest.v2 as select * from mysqltest.t1; create view mysqltest.v2 as select * from mysqltest.t1;
# no SELECT privilege # no SELECT privilege
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
create view v2 as select * from mysqltest.t2; create view v2 as select * from mysqltest.t2;
connection root; connection root;
...@@ -48,7 +51,7 @@ show create view v1; ...@@ -48,7 +51,7 @@ show create view v1;
grant create view,drop,select on test.* to mysqltest_1@localhost; grant create view,drop,select on test.* to mysqltest_1@localhost;
connection user1; connection user1;
# following 'use' command is workaround of bug #9582 and should be removed # following 'use' command is workaround of Bug#9582 and should be removed
# when that bug will be fixed # when that bug will be fixed
use test; use test;
alter view v1 as select * from mysqltest.t1; alter view v1 as select * from mysqltest.t1;
...@@ -76,7 +79,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost; ...@@ -76,7 +79,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
connection user1; connection user1;
select c from mysqltest.v1; select c from mysqltest.v1;
# there are no privileges on column 'd' # there are no privileges on column 'd'
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
select d from mysqltest.v1; select d from mysqltest.v1;
connection root; connection root;
...@@ -96,7 +99,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost; ...@@ -96,7 +99,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
connection user1; connection user1;
select c from mysqltest.v1; select c from mysqltest.v1;
# there are no privileges on column 'd' # there are no privileges on column 'd'
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
select d from mysqltest.v1; select d from mysqltest.v1;
connection root; connection root;
...@@ -111,7 +114,7 @@ connection root; ...@@ -111,7 +114,7 @@ connection root;
--disable_warnings --disable_warnings
create database mysqltest; create database mysqltest;
--enable_warnings --enable_warnings
#prepare views and tables # prepare views and tables
create table mysqltest.t1 (a int, b int); create table mysqltest.t1 (a int, b int);
create table mysqltest.t2 (a int, b int); create table mysqltest.t2 (a int, b int);
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1; create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
...@@ -133,21 +136,21 @@ select c from mysqltest.v4; ...@@ -133,21 +136,21 @@ select c from mysqltest.v4;
show columns from mysqltest.v1; show columns from mysqltest.v1;
show columns from mysqltest.v2; show columns from mysqltest.v2;
# but explain/show do not # but explain/show do not
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v1; explain select c from mysqltest.v1;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v1; show create view mysqltest.v1;
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v2; explain select c from mysqltest.v2;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v2; show create view mysqltest.v2;
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v3; explain select c from mysqltest.v3;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v3; show create view mysqltest.v3;
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v4; explain select c from mysqltest.v4;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v4; show create view mysqltest.v4;
# allow to see one of underlying table # allow to see one of underlying table
...@@ -156,19 +159,19 @@ grant select on mysqltest.t1 to mysqltest_1@localhost; ...@@ -156,19 +159,19 @@ grant select on mysqltest.t1 to mysqltest_1@localhost;
connection user1; connection user1;
# EXPLAIN of view on above table works # EXPLAIN of view on above table works
explain select c from mysqltest.v1; explain select c from mysqltest.v1;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v1; show create view mysqltest.v1;
explain select c from mysqltest.v2; explain select c from mysqltest.v2;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v2; show create view mysqltest.v2;
# but other EXPLAINs do not # but other EXPLAINs do not
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v3; explain select c from mysqltest.v3;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v3; show create view mysqltest.v3;
-- error 1345 --error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v4; explain select c from mysqltest.v4;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v4; show create view mysqltest.v4;
# allow to see any view in mysqltest database # allow to see any view in mysqltest database
...@@ -222,14 +225,14 @@ select * from t1; ...@@ -222,14 +225,14 @@ select * from t1;
update v2 set a=a+c; update v2 set a=a+c;
select * from t1; select * from t1;
# no rights on column # no rights on column
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c; update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c;
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
update v2 set c=a+c; update v2 set c=a+c;
# no rights for view # no rights for view
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c; update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
update v3 set a=a+c; update v3 set a=a+c;
use test; use test;
...@@ -263,9 +266,9 @@ select * from t1; ...@@ -263,9 +266,9 @@ select * from t1;
delete v1 from t2,v1 where t2.x=v1.c; delete v1 from t2,v1 where t2.x=v1.c;
select * from t1; select * from t1;
# no rights for view # no rights for view
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
delete v2 from t2,v2 where t2.x=v2.c; delete v2 from t2,v2 where t2.x=v2.c;
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
delete from v2 where c < 4; delete from v2 where c < 4;
use test; use test;
...@@ -299,9 +302,9 @@ select * from t1; ...@@ -299,9 +302,9 @@ select * from t1;
insert into v1 select x,y from t2; insert into v1 select x,y from t2;
select * from t1; select * from t1;
# no rights for view # no rights for view
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
insert into v2 values (5,6); insert into v2 values (5,6);
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
insert into v2 select x,y from t2; insert into v2 select x,y from t2;
use test; use test;
...@@ -329,10 +332,10 @@ connection user1; ...@@ -329,10 +332,10 @@ connection user1;
create view v1 as select * from mysqltest.t1; create view v1 as select * from mysqltest.t1;
create view v2 as select b from mysqltest.t2; create view v2 as select b from mysqltest.t2;
# There are not rights on mysqltest.v1 # There are not rights on mysqltest.v1
-- error 1142 --error ER_TABLEACCESS_DENIED_ERROR
create view mysqltest.v1 as select * from mysqltest.t1; create view mysqltest.v1 as select * from mysqltest.t1;
# There are not any rights on mysqltest.t2.a # There are not any rights on mysqltest.t2.a
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
create view v3 as select a from mysqltest.t2; create view v3 as select a from mysqltest.t2;
# give CREATE VIEW privileges (without any privileges for result column) # give CREATE VIEW privileges (without any privileges for result column)
...@@ -352,13 +355,13 @@ create view mysqltest.v3 as select b from mysqltest.t2; ...@@ -352,13 +355,13 @@ create view mysqltest.v3 as select b from mysqltest.t2;
# Expression need select privileges # Expression need select privileges
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
create view v4 as select b+1 from mysqltest.t2; create view v4 as select b+1 from mysqltest.t2;
connection root; connection root;
grant create view,update,select on test.* to mysqltest_1@localhost; grant create view,update,select on test.* to mysqltest_1@localhost;
connection user1; connection user1;
-- error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
create view v4 as select b+1 from mysqltest.t2; create view v4 as select b+1 from mysqltest.t2;
connection root; connection root;
...@@ -411,7 +414,7 @@ connection root; ...@@ -411,7 +414,7 @@ connection root;
# check view definer information # check view definer information
show create view v1; show create view v1;
revoke select on mysqltest.t1 from mysqltest_1@localhost; revoke select on mysqltest.t1 from mysqltest_1@localhost;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v1; select * from v1;
grant select on mysqltest.t1 to mysqltest_1@localhost; grant select on mysqltest.t1 to mysqltest_1@localhost;
select * from v1; select * from v1;
...@@ -420,7 +423,7 @@ drop view v1; ...@@ -420,7 +423,7 @@ drop view v1;
drop database mysqltest; drop database mysqltest;
# #
# rights on execution of view underlying functiond (BUG#9505) # rights on execution of view underlying functiond (Bug#9505)
# #
connection root; connection root;
--disable_warnings --disable_warnings
...@@ -453,11 +456,11 @@ connection user1; ...@@ -453,11 +456,11 @@ connection user1;
use mysqltest; use mysqltest;
select * from v1; select * from v1;
select * from v2; select * from v2;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v3; select * from v3;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v4; select * from v4;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v5; select * from v5;
use test; use test;
...@@ -505,13 +508,13 @@ use test; ...@@ -505,13 +508,13 @@ use test;
connection root; connection root;
create view v5 as select * from v1; create view v5 as select * from v1;
revoke execute on function f2 from mysqltest_1@localhost; revoke execute on function f2 from mysqltest_1@localhost;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v1; select * from v1;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v2; select * from v2;
select * from v3; select * from v3;
select * from v4; select * from v4;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v5; select * from v5;
drop view v1, v2, v3, v4, v5; drop view v1, v2, v3, v4, v5;
...@@ -549,13 +552,13 @@ use test; ...@@ -549,13 +552,13 @@ use test;
connection root; connection root;
revoke select on t1 from mysqltest_1@localhost; revoke select on t1 from mysqltest_1@localhost;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v1; select * from v1;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v2; select * from v2;
select * from v3; select * from v3;
select * from v4; select * from v4;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v5; select * from v5;
#drop view v1, v2, v3, v4, v5; #drop view v1, v2, v3, v4, v5;
...@@ -588,11 +591,11 @@ connection user1; ...@@ -588,11 +591,11 @@ connection user1;
use mysqltest; use mysqltest;
select * from v1; select * from v1;
select * from v2; select * from v2;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v3; select * from v3;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v4; select * from v4;
-- error ER_VIEW_INVALID --error ER_VIEW_INVALID
select * from v5; select * from v5;
use test; use test;
...@@ -604,7 +607,7 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost; ...@@ -604,7 +607,7 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
drop database mysqltest; drop database mysqltest;
# #
# BUG#14256: definer in view definition is not fully qualified # Bug#14256 definer in view definition is not fully qualified
# #
--disable_warnings --disable_warnings
drop view if exists v1; drop view if exists v1;
...@@ -641,6 +644,7 @@ drop view v1; ...@@ -641,6 +644,7 @@ drop view v1;
select @v1def1, @v1def2, @v1def1=@v1def2; select @v1def1, @v1def2, @v1def1=@v1def2;
connection root; connection root;
disconnect test14256;
drop user test14256; drop user test14256;
# Restore the anonymous users. # Restore the anonymous users.
...@@ -650,8 +654,8 @@ flush privileges; ...@@ -650,8 +654,8 @@ flush privileges;
drop table t1; drop table t1;
# #
# BUG#14726: freeing stack variable in case of an error of opening # Bug#14726 freeing stack variable in case of an error of opening a view when
# a view when we have locked tables with LOCK TABLES statement. # we have locked tables with LOCK TABLES statement.
# #
connection root; connection root;
--disable_warnings --disable_warnings
...@@ -668,7 +672,7 @@ connection user1; ...@@ -668,7 +672,7 @@ connection user1;
use mysqltest; use mysqltest;
LOCK TABLES v1 READ; LOCK TABLES v1 READ;
-- error ER_TABLEACCESS_DENIED_ERROR --error ER_TABLEACCESS_DENIED_ERROR
SHOW CREATE TABLE v1; SHOW CREATE TABLE v1;
UNLOCK TABLES; UNLOCK TABLES;
use test; use test;
...@@ -679,7 +683,7 @@ drop user mysqltest_1@localhost; ...@@ -679,7 +683,7 @@ drop user mysqltest_1@localhost;
drop database mysqltest; drop database mysqltest;
# #
# switch to default connaction # switch to default connection
# #
disconnect user1; disconnect user1;
disconnect root; disconnect root;
...@@ -696,7 +700,7 @@ drop view v1; ...@@ -696,7 +700,7 @@ drop view v1;
drop view v2; drop view v2;
# #
# Bug#18681: View privileges are broken # Bug#18681 View privileges are broken
# #
CREATE DATABASE mysqltest1; CREATE DATABASE mysqltest1;
CREATE USER readonly@localhost; CREATE USER readonly@localhost;
...@@ -717,54 +721,55 @@ GRANT UPDATE,SELECT ON mysqltest1.v_tus TO readonly@localhost; ...@@ -717,54 +721,55 @@ GRANT UPDATE,SELECT ON mysqltest1.v_tus TO readonly@localhost;
GRANT DELETE ON mysqltest1.v_td TO readonly@localhost; GRANT DELETE ON mysqltest1.v_td TO readonly@localhost;
GRANT DELETE,SELECT ON mysqltest1.v_tds TO readonly@localhost; GRANT DELETE,SELECT ON mysqltest1.v_tds TO readonly@localhost;
CONNECT (n1,localhost,readonly,,); connect (n1,localhost,readonly,,);
CONNECTION n1; connection n1;
--error 1356 --error ER_VIEW_INVALID
SELECT * FROM mysqltest1.v_t1; SELECT * FROM mysqltest1.v_t1;
--error 1356 --error ER_VIEW_INVALID
INSERT INTO mysqltest1.v_t1 VALUES(4); INSERT INTO mysqltest1.v_t1 VALUES(4);
--error 1356 --error ER_VIEW_INVALID
DELETE FROM mysqltest1.v_t1 WHERE x = 1; DELETE FROM mysqltest1.v_t1 WHERE x = 1;
--error 1356 --error ER_VIEW_INVALID
UPDATE mysqltest1.v_t1 SET x = 3 WHERE x = 2; UPDATE mysqltest1.v_t1 SET x = 3 WHERE x = 2;
--error 1356 --error ER_VIEW_INVALID
UPDATE mysqltest1.v_t1 SET x = 3; UPDATE mysqltest1.v_t1 SET x = 3;
--error 1356 --error ER_VIEW_INVALID
DELETE FROM mysqltest1.v_t1; DELETE FROM mysqltest1.v_t1;
--error 1356 --error ER_VIEW_INVALID
SELECT 1 FROM mysqltest1.v_t1; SELECT 1 FROM mysqltest1.v_t1;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.t1; SELECT * FROM mysqltest1.t1;
SELECT * FROM mysqltest1.v_ts; SELECT * FROM mysqltest1.v_ts;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.v_ts, mysqltest1.t1 WHERE mysqltest1.t1.x = mysqltest1.v_ts.x; SELECT * FROM mysqltest1.v_ts, mysqltest1.t1 WHERE mysqltest1.t1.x = mysqltest1.v_ts.x;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.v_ti; SELECT * FROM mysqltest1.v_ti;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
INSERT INTO mysqltest1.v_ts VALUES (100); INSERT INTO mysqltest1.v_ts VALUES (100);
INSERT INTO mysqltest1.v_ti VALUES (100); INSERT INTO mysqltest1.v_ti VALUES (100);
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
UPDATE mysqltest1.v_ts SET x= 200 WHERE x = 100; UPDATE mysqltest1.v_ts SET x= 200 WHERE x = 100;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
UPDATE mysqltest1.v_ts SET x= 200; UPDATE mysqltest1.v_ts SET x= 200;
UPDATE mysqltest1.v_tu SET x= 200 WHERE x = 100; UPDATE mysqltest1.v_tu SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tus SET x= 200 WHERE x = 100; UPDATE mysqltest1.v_tus SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tu SET x= 200; UPDATE mysqltest1.v_tu SET x= 200;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_ts WHERE x= 200; DELETE FROM mysqltest1.v_ts WHERE x= 200;
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_ts; DELETE FROM mysqltest1.v_ts;
--error 1143 --error ER_COLUMNACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_td WHERE x= 200; DELETE FROM mysqltest1.v_td WHERE x= 200;
DELETE FROM mysqltest1.v_tds WHERE x= 200; DELETE FROM mysqltest1.v_tds WHERE x= 200;
DELETE FROM mysqltest1.v_td; DELETE FROM mysqltest1.v_td;
CONNECTION default; connection default;
disconnect n1;
DROP VIEW mysqltest1.v_tds; DROP VIEW mysqltest1.v_tds;
DROP VIEW mysqltest1.v_td; DROP VIEW mysqltest1.v_td;
DROP VIEW mysqltest1.v_tus; DROP VIEW mysqltest1.v_tus;
...@@ -777,21 +782,21 @@ DROP USER readonly@localhost; ...@@ -777,21 +782,21 @@ DROP USER readonly@localhost;
DROP DATABASE mysqltest1; DROP DATABASE mysqltest1;
# #
# BUG#14875: Bad view DEFINER makes SHOW CREATE VIEW fail # Bug#14875 Bad view DEFINER makes SHOW CREATE VIEW fail
# #
CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t1 (a INT PRIMARY KEY);
INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t1 VALUES (1), (2), (3);
CREATE DEFINER = 'no-such-user'@localhost VIEW v AS SELECT a from t1; CREATE DEFINER = 'no-such-user'@localhost VIEW v AS SELECT a from t1;
#--warning 1448 #--warning ER_VIEW_OTHER_USER
SHOW CREATE VIEW v; SHOW CREATE VIEW v;
--error 1449 --error ER_NO_SUCH_USER
SELECT * FROM v; SELECT * FROM v;
DROP VIEW v; DROP VIEW v;
DROP TABLE t1; DROP TABLE t1;
USE test; USE test;
# #
# Bug#20363: Create view on just created view is now denied # Bug#20363 Create view on just created view is now denied
# #
eval CREATE USER mysqltest_db1@localhost identified by 'PWD'; eval CREATE USER mysqltest_db1@localhost identified by 'PWD';
eval GRANT ALL ON mysqltest_db1.* TO mysqltest_db1@localhost WITH GRANT OPTION; eval GRANT ALL ON mysqltest_db1.* TO mysqltest_db1@localhost WITH GRANT OPTION;
...@@ -822,6 +827,7 @@ SELECT * FROM view2; ...@@ -822,6 +827,7 @@ SELECT * FROM view2;
SELECT * from view3; SELECT * from view3;
connection default; connection default;
disconnect session1;
DROP VIEW mysqltest_db1.view3; DROP VIEW mysqltest_db1.view3;
DROP VIEW mysqltest_db1.view2; DROP VIEW mysqltest_db1.view2;
DROP VIEW mysqltest_db1.view1; DROP VIEW mysqltest_db1.view1;
...@@ -829,8 +835,8 @@ DROP TABLE mysqltest_db1.t1; ...@@ -829,8 +835,8 @@ DROP TABLE mysqltest_db1.t1;
DROP SCHEMA mysqltest_db1; DROP SCHEMA mysqltest_db1;
DROP USER mysqltest_db1@localhost; DROP USER mysqltest_db1@localhost;
# #
# BUG#20482: failure on Create join view with sources views/tables # Bug#20482 failure on Create join view with sources views/tables
# in different schemas # in different schemas
# #
--disable_warnings --disable_warnings
CREATE DATABASE test1; CREATE DATABASE test1;
...@@ -840,7 +846,7 @@ CREATE DATABASE test2; ...@@ -840,7 +846,7 @@ CREATE DATABASE test2;
CREATE TABLE test1.t0 (a VARCHAR(20)); CREATE TABLE test1.t0 (a VARCHAR(20));
CREATE TABLE test2.t1 (a VARCHAR(20)); CREATE TABLE test2.t1 (a VARCHAR(20));
CREATE VIEW test2.t3 AS SELECT * FROM test1.t0; CREATE VIEW test2.t3 AS SELECT * FROM test1.t0;
CREATE OR REPLACE VIEW test.v1 AS CREATE OR REPLACE VIEW test.v1 AS
SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb; SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb;
DROP VIEW test.v1; DROP VIEW test.v1;
...@@ -851,8 +857,8 @@ DROP DATABASE test1; ...@@ -851,8 +857,8 @@ DROP DATABASE test1;
# #
# BUG#20570: CURRENT_USER() in a VIEW with SQL SECURITY DEFINER # Bug#20570 CURRENT_USER() in a VIEW with SQL SECURITY DEFINER returns
# returns invoker name # invoker name
# #
--disable_warnings --disable_warnings
DROP VIEW IF EXISTS v1; DROP VIEW IF EXISTS v1;
...@@ -911,7 +917,7 @@ DROP USER mysqltest_u1@localhost; ...@@ -911,7 +917,7 @@ DROP USER mysqltest_u1@localhost;
# #
# Bug#17254: Error for DEFINER security on VIEW provides too much info # Bug#17254 Error for DEFINER security on VIEW provides too much info
# #
connect (root,localhost,root,,); connect (root,localhost,root,,);
connection root; connection root;
...@@ -935,12 +941,12 @@ DROP USER def_17254@localhost; ...@@ -935,12 +941,12 @@ DROP USER def_17254@localhost;
connect (inv,localhost,inv_17254,,db17254); connect (inv,localhost,inv_17254,,db17254);
connection inv; connection inv;
--echo for a user --echo for a user
--error 1142 --error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM v1; SELECT * FROM v1;
connection root; connection root;
--echo for a superuser --echo for a superuser
--error 1449 --error ER_NO_SUCH_USER
SELECT * FROM v1; SELECT * FROM v1;
DROP USER inv_17254@localhost; DROP USER inv_17254@localhost;
DROP DATABASE db17254; DROP DATABASE db17254;
...@@ -949,7 +955,7 @@ disconnect inv; ...@@ -949,7 +955,7 @@ disconnect inv;
# #
# BUG#24404: strange bug with view+permission+prepared statement # Bug#24404 strange bug with view+permission+prepared statement
# #
--disable_warnings --disable_warnings
DROP DATABASE IF EXISTS mysqltest_db1; DROP DATABASE IF EXISTS mysqltest_db1;
...@@ -1017,8 +1023,8 @@ DROP USER mysqltest_u1@localhost; ...@@ -1017,8 +1023,8 @@ DROP USER mysqltest_u1@localhost;
DROP USER mysqltest_u2@localhost; DROP USER mysqltest_u2@localhost;
# #
# Bug#26813: The SUPER privilege is wrongly required to alter a view created # Bug#26813 The SUPER privilege is wrongly required to alter a view created
# by another user. # by another user.
# #
connection root; connection root;
CREATE DATABASE db26813; CREATE DATABASE db26813;
...@@ -1050,7 +1056,7 @@ DROP DATABASE db26813; ...@@ -1050,7 +1056,7 @@ DROP DATABASE db26813;
disconnect u1; disconnect u1;
--echo # --echo #
--echo # Bug#29908: A user can gain additional access through the ALTER VIEW. --echo # Bug#29908 A user can gain additional access through the ALTER VIEW.
--echo # --echo #
connection root; connection root;
CREATE DATABASE mysqltest_29908; CREATE DATABASE mysqltest_29908;
...@@ -1095,7 +1101,7 @@ disconnect u2; ...@@ -1095,7 +1101,7 @@ disconnect u2;
--echo ####################################################################### --echo #######################################################################
# #
# BUG#24040: Create View don't succed with "all privileges" on a database. # Bug#24040 Create View don't succed with "all privileges" on a database.
# #
# Prepare. # Prepare.
...@@ -1179,10 +1185,16 @@ SELECT * FROM mysqltest1.t4; ...@@ -1179,10 +1185,16 @@ SELECT * FROM mysqltest1.t4;
# Cleanup. # Cleanup.
-- disconnect bug24040_con disconnect bug24040_con;
DROP DATABASE mysqltest1; DROP DATABASE mysqltest1;
DROP DATABASE mysqltest2; DROP DATABASE mysqltest2;
DROP USER mysqltest_u1@localhost; DROP USER mysqltest_u1@localhost;
connection default;
disconnect root;
--echo End of 5.0 tests. --echo End of 5.0 tests.
# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
-- source include/not_embedded.inc -- source include/not_embedded.inc
# #
# Bug #8731: wait_timeout does not work on Mac OS X # Bug#8731 wait_timeout does not work on Mac OS X
# #
...@@ -87,6 +87,7 @@ while (!`select @aborted_clients`) ...@@ -87,6 +87,7 @@ while (!`select @aborted_clients`)
} }
} }
--enable_query_log --enable_query_log
disconnect wait_con;
connection con1; connection con1;
# When the connection is closed in this way, the error code should # When the connection is closed in this way, the error code should
...@@ -97,3 +98,5 @@ select 2; ...@@ -97,3 +98,5 @@ select 2;
--enable_reconnect --enable_reconnect
select 3; select 3;
disconnect con1; disconnect con1;
# The last connect is to keep tools checking the current test happy.
connect (default,localhost,root,,test,,);
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
# WL#1756 # WL#1756
# #
-- source include/have_innodb.inc -- source include/have_innodb.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings --disable_warnings
drop table if exists t1, t2; drop table if exists t1, t2;
--enable_warnings --enable_warnings
...@@ -14,10 +18,10 @@ xa rollback 'test1'; ...@@ -14,10 +18,10 @@ xa rollback 'test1';
select * from t1; select * from t1;
xa start 'test2'; xa start 'test2';
--error 1399 --error ER_XAER_RMFAIL
xa start 'test-bad'; xa start 'test-bad';
insert t1 values (20); insert t1 values (20);
--error 1399 --error ER_XAER_RMFAIL
xa prepare 'test2'; xa prepare 'test2';
xa end 'test2'; xa end 'test2';
xa prepare 'test2'; xa prepare 'test2';
...@@ -27,22 +31,22 @@ select * from t1; ...@@ -27,22 +31,22 @@ select * from t1;
xa start 'testa','testb'; xa start 'testa','testb';
insert t1 values (30); insert t1 values (30);
--error 1399 --error ER_XAER_RMFAIL
commit; commit;
xa end 'testa','testb'; xa end 'testa','testb';
--error 1399 --error ER_XAER_RMFAIL
begin; begin;
--error 1399 --error ER_XAER_RMFAIL
create table t2 (a int); create table t2 (a int);
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
connection con1; connection con1;
--error 1440 --error ER_XAER_DUPID
xa start 'testa','testb'; xa start 'testa','testb';
--error 1440 --error ER_XAER_DUPID
xa start 'testa','testb', 123; xa start 'testa','testb', 123;
# gtrid [ , bqual [ , formatID ] ] # gtrid [ , bqual [ , formatID ] ]
...@@ -51,7 +55,7 @@ insert t1 values (40); ...@@ -51,7 +55,7 @@ insert t1 values (40);
xa end 'testb',' 0@P`',11; xa end 'testb',' 0@P`',11;
xa prepare 'testb',0x2030405060,11; xa prepare 'testb',0x2030405060,11;
--error 1399 --error ER_XAER_RMFAIL
start transaction; start transaction;
xa recover; xa recover;
...@@ -64,11 +68,11 @@ xa prepare 'testa','testb'; ...@@ -64,11 +68,11 @@ xa prepare 'testa','testb';
xa recover; xa recover;
--error 1397 --error ER_XAER_NOTA
xa commit 'testb',0x2030405060,11; xa commit 'testb',0x2030405060,11;
xa rollback 'testa','testb'; xa rollback 'testa','testb';
--error 1064 --error ER_PARSE_ERROR
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
select * from t1; select * from t1;
...@@ -119,3 +123,7 @@ xa start 'a','c'; ...@@ -119,3 +123,7 @@ xa start 'a','c';
drop table t1; drop table t1;
--echo End of 5.0 tests --echo End of 5.0 tests
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment