rpl_tmp_table_and_DDL.test 4.8 KB
Newer Older
H
hustjieke 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
#
# This test verify if executing DDL statement before trying to manipulate
# a temporary table causes row-based replication to break with error 'table
# does not exist'.
#

# CREATE TABLE when a temporary table is open.
CREATE TEMPORARY TABLE t1 (a INT);
EVAL CREATE TABLE t2 (a INT, b INT) ENGINE= $ENGINE_TYPE;
INSERT INTO t1 VALUES (1);

# CREATE EVENT when a temporary table is open.
CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO SELECT 1;
INSERT INTO t1 VALUES (1);

# ALTER EVENT when a temporary table is open.
ALTER EVENT e1 ON SCHEDULE EVERY 20 HOUR DO SELECT 1;
INSERT INTO t1 VALUES (1);

# DROP EVENT when a temporary table is open.
DROP EVENT IF EXISTS e1;
INSERT INTO t1 VALUES (1);

# CREATE PROCEDURE when a temporary table is open.
CREATE PROCEDURE p1() SELECT 1;
INSERT INTO t1 VALUES (1);

# Alter PROCEDURE when a temporary table is open.
ALTER PROCEDURE p1 SQL SECURITY INVOKER;
INSERT INTO t1 VALUES (1);

# CREATE FUNCTION when a temporary table is open.
CREATE FUNCTION f1() RETURNS INT RETURN 123;
INSERT INTO t1 VALUES (1);

# ALTER FUNCTION when a temporary table is open.
ALTER FUNCTION f1 SQL SECURITY INVOKER;
INSERT INTO t1 VALUES (1);

# CREATE DATABASE when a temporary table is open.
CREATE DATABASE mysqltest1;
INSERT INTO t1 VALUES (1);

# DROP DATABASE when a temporary table is open.
DROP DATABASE mysqltest1;
INSERT INTO t1 VALUES (1);

# CREATE USER when a temporary table is open.
CREATE USER test_1@localhost;
INSERT INTO t1 VALUES (1);

# GRANT select on table to user when a temporary table is open.
GRANT SELECT ON t2 TO test_1@localhost;
INSERT INTO t1 VALUES (1);

# GRANT all on function to user  when a temporary table is open.
GRANT ALL ON f1 TO test_1@localhost;
INSERT INTO t1 VALUES (1);

# GRANT all on procedure to user when a temporary table is open.
GRANT ALL ON p1 TO test_1@localhost;
INSERT INTO t1 VALUES (1);

# GRANT usage on *.* to user when a temporary table is open.
GRANT USAGE ON *.* TO test_1@localhost;
INSERT INTO t1 VALUES (1);

# REVOKE ALL PRIVILEGES on function to user when a temporary table is open.
REVOKE ALL PRIVILEGES ON f1 FROM test_1@localhost;
INSERT INTO t1 VALUES (1);

# REVOKE ALL PRIVILEGES on procedure to user when a temporary table is open.
REVOKE ALL PRIVILEGES ON p1 FROM test_1@localhost;
INSERT INTO t1 VALUES (1);

# REVOKE ALL PRIVILEGES on table to user when a temporary table is open.
REVOKE ALL PRIVILEGES ON t2 FROM test_1@localhost;
INSERT INTO t1 VALUES (1);

# REVOKE usage on *.* from user when a temporary table is open.
REVOKE USAGE ON *.* FROM test_1@localhost;
INSERT INTO t1 VALUES (1);

# RENAME USER when a temporary table is open.
RENAME USER test_1@localhost TO test_2@localhost;
INSERT INTO t1 VALUES (1);

# DROP USER when a temporary table is open.
DROP USER test_2@localhost;
INSERT INTO t1 VALUES (1);

# Test ACL statement in sub statement
DELIMITER |;
CREATE PROCEDURE p2()
BEGIN
    # CREATE USER when a temporary table is open. 
    CREATE TEMPORARY TABLE t3 (a INT);
    CREATE USER test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # GRANT select on table to user when a temporary table is open.
    GRANT SELECT ON t2 TO test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # GRANT all on function to user  when a temporary table is open.
    GRANT ALL ON f1 TO test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # GRANT all on procedure to user when a temporary table is open.
    GRANT ALL ON p1 TO test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # GRANT usage on *.* to user  when a temporary table is open.
    GRANT USAGE ON *.* TO test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # REVOKE ALL PRIVILEGES on function to user when a temporary table is open.
    REVOKE ALL PRIVILEGES ON f1 FROM test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # REVOKE ALL PRIVILEGES on procedure to user when a temporary table is open.
    REVOKE ALL PRIVILEGES ON p1 FROM test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # REVOKE ALL PRIVILEGES on table to user when a temporary table is open.
    REVOKE ALL PRIVILEGES ON t2 FROM test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # REVOKE usage on *.* from user when a temporary table is open.
    REVOKE USAGE ON *.* FROM test_2@localhost;
    INSERT INTO t1 VALUES (1);

    # RENAME USER when a temporary table is open.
    RENAME USER test_2@localhost TO test_3@localhost;
    INSERT INTO t1 VALUES (1);

    # DROP USER when a temporary table is open.
    DROP USER test_3@localhost;
    INSERT INTO t1 VALUES (1);
    DROP TEMPORARY TABLE t3;
END |
DELIMITER ;|

# DROP PROCEDURE when a temporary table is open.
DROP PROCEDURE p1;
INSERT INTO t1 VALUES (1);
DROP PROCEDURE p2;
INSERT INTO t1 VALUES (1);

# DROP FUNCTION when a temporary table is open.
DROP FUNCTION f1;
INSERT INTO t1 VALUES (1);

# DROP TABLE when a temporary table is open.
DROP TABLE t2;
INSERT INTO t1 VALUES (1);

DROP TEMPORARY TABLE t1;