206 lines
6.3 KiB
Plaintext
206 lines
6.3 KiB
Plaintext
|
|
--echo #
|
|
--echo # WL#11864 Implement I_S.VIEW_TABLE_USAGE and I_S.VIEW_ROUTINE_USAGE
|
|
--echo #
|
|
|
|
--echo # Basic schema definition used by test cases.
|
|
CREATE DATABASE db1;
|
|
USE db1;
|
|
|
|
CREATE TABLE t1 (c1 INT);
|
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
|
CREATE FUNCTION f2() RETURNS INT RETURN 2;
|
|
CREATE VIEW v1 AS SELECT f1() AS f1;
|
|
CREATE VIEW v2 AS SELECT f1, f2() AS f2 FROM v1;
|
|
CREATE VIEW v3 AS SELECT c1, f2 FROM t1, v2;
|
|
|
|
|
|
--echo # Case 1: Show table and views used by view v2 and v3.
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--echo # Case 2: Show routines used by views.
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1';
|
|
|
|
|
|
--echo # Case 3: Rename the column of t1 and list view dependency.
|
|
--echo # The query should throw warning on view v3.
|
|
ALTER TABLE t1 RENAME COLUMN c1 TO c2;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' AND VIEW_NAME='v3';
|
|
ALTER TABLE t1 RENAME COLUMN c2 TO c1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' AND VIEW_NAME='v3';
|
|
|
|
|
|
--echo # Case 4: Drop function f1 and list dependency.
|
|
--echo # The query should throw warning on view v1.
|
|
DROP FUNCTION f1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1' AND TABLE_NAME='v1';
|
|
CREATE FUNCTION f1() RETURNS INT return 1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1' AND TABLE_NAME='v1';
|
|
|
|
|
|
--echo # Case 5: Access checks.
|
|
|
|
CREATE USER 'testuser'@'localhost';
|
|
|
|
--echo # 5.1 Grant permission on v2, but not v1. VIEW_TABLE_USAGE will not
|
|
--echo # list any entry because user has no permission on v1.
|
|
GRANT ALL ON db1.v2 TO 'testuser'@'localhost';
|
|
--connect (con1,localhost,testuser,,db1)
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--echo # 5.2 Give permission on v1 and that VIEW_TABLE_USAGE shows v2 entry.
|
|
--connection default
|
|
GRANT ALL ON db1.v1 TO 'testuser'@'localhost';
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--echo # 5.3 VIEW_ROUTINE_USAGE does not list v1, as it have no grant on f1.
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1';
|
|
|
|
--echo # 5.4 Grant access to f1 and check that VIEW_ROUTINE_USAGE shows it.
|
|
--connection default
|
|
GRANT EXECUTE ON FUNCTION db1.f1 TO 'testuser'@'localhost';
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1';
|
|
|
|
--echo # 5.5 Grant access on v3, see that dependency 't1' is not listed.
|
|
--connection default
|
|
GRANT ALL ON db1.v3 TO 'testuser'@'localhost';
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--echo # 5.6 Grant access on t1, see that dependency 't1' is listed.
|
|
--connection default
|
|
GRANT SELECT on db1.t1 TO 'testuser'@'localhost';
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--disconnect con1
|
|
--connection default
|
|
DROP USER 'testuser'@'localhost';
|
|
|
|
--echo # Cleanup
|
|
DROP FUNCTION f1;
|
|
DROP FUNCTION f2;
|
|
DROP VIEW v1, v2, v3;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo # Case 6:
|
|
--echo # 6.1 Rename table t1 to t2 and list view dependency.
|
|
--echo # The query should throw warning on view v1.
|
|
CREATE TABLE t1 (c1 INT);
|
|
CREATE VIEW v1 AS SELECT c1 FROM t1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
RENAME TABLE t1 to t2;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
RENAME TABLE t2 to t1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--echo # 6.2 Drop table t1 and list view dependency.
|
|
DROP TABLE t1;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
DROP VIEW v1;
|
|
|
|
|
|
--echo # Case 7: List dependent table and function names
|
|
--echo # that are permitted to the current user.
|
|
CREATE USER testuser1@localhost;
|
|
GRANT CREATE ON db1.* TO testuser1@localhost;
|
|
GRANT SELECT ON db1.* TO testuser1@localhost;
|
|
GRANT CREATE VIEW ON db1.* TO testuser1@localhost;
|
|
GRANT CREATE ROUTINE ON db1.* TO testuser1@localhost;
|
|
GRANT DROP ON db1.* TO testuser1@localhost;
|
|
|
|
CREATE USER testuser2@localhost;
|
|
GRANT CREATE ON db1.* TO testuser2@localhost;
|
|
GRANT SELECT ON db1.* TO testuser2@localhost;
|
|
GRANT CREATE VIEW ON db1.* TO testuser2@localhost;
|
|
GRANT CREATE ROUTINE ON db1.* TO testuser2@localhost;
|
|
GRANT DROP ON db1.* TO testuser2@localhost;
|
|
|
|
--connect (con1,localhost,testuser1,,db1)
|
|
CREATE TABLE t1(c1 INT);
|
|
CREATE VIEW v1 AS SELECT c1 FROM t1;
|
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
|
CREATE VIEW v2 AS SELECT f1();
|
|
|
|
--connect (con2,localhost,testuser2,,db1)
|
|
CREATE TABLE t2(c1 INT);
|
|
CREATE VIEW v3 AS SELECT c1 FROM t2;
|
|
CREATE FUNCTION f2() RETURNS INT RETURN 1;
|
|
CREATE VIEW v4 AS SELECT f2();
|
|
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1';
|
|
|
|
--connection con2
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_ROUTINE_USAGE
|
|
WHERE TABLE_SCHEMA='db1';
|
|
|
|
--connection con1
|
|
DROP VIEW v1,v2;
|
|
DROP FUNCTION f1;
|
|
DROP TABLE t1;
|
|
--disconnect con1
|
|
|
|
--connection con2
|
|
DROP VIEW v3,v4;
|
|
DROP FUNCTION f2;
|
|
DROP TABLE t2;
|
|
--disconnect con2
|
|
|
|
--connection default
|
|
DROP USER testuser1@localhost;
|
|
DROP USER testuser2@localhost;
|
|
|
|
|
|
--echo # Case 8: Revoke view privilege
|
|
CREATE USER testuser1@localhost;
|
|
CREATE TABLE t1(c1 INT);
|
|
CREATE VIEW v1 AS SELECT c1 FROM t1;
|
|
GRANT ALL ON db1.v1 TO testuser1@localhost;
|
|
GRANT ALL ON db1.t1 TO testuser1@localhost;
|
|
|
|
--connect (con1,localhost,testuser1,,db1)
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
|
|
--connection default
|
|
REVOKE ALL ON db1.v1 FROM testuser1@localhost;
|
|
|
|
--connection con1
|
|
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
|
|
WHERE VIEW_SCHEMA='db1' ORDER BY VIEW_NAME, TABLE_NAME;
|
|
--disconnect con1
|
|
|
|
--connection default
|
|
REVOKE ALL ON db1.t1 FROM testuser1@localhost;
|
|
DROP USER testuser1@localhost;
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
|
|
|
|
DROP DATABASE db1;
|