mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	These are only 5.0's fixes being merged. 5.1 and 6.0 Unix-removals will occur in different patches.
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Test case(s) in this file contain(s) GRANT/REVOKE statements, which are not
 | 
						|
# supported in embedded server. So, this test should not be run on embedded
 | 
						|
# server.
 | 
						|
 | 
						|
-- source include/not_embedded.inc
 | 
						|
 | 
						|
###########################################################################
 | 
						|
#
 | 
						|
# Tests for WL#2818:
 | 
						|
#   - Check that triggers created w/o DEFINER information work well:
 | 
						|
#     - create the first trigger;
 | 
						|
#     - manually remove definer information from corresponding TRG file;
 | 
						|
#     - create the second trigger (the first trigger will be reloaded; check
 | 
						|
#       that we receive a warning);
 | 
						|
#     - check that the triggers loaded correctly;
 | 
						|
#
 | 
						|
###########################################################################
 | 
						|
 | 
						|
#
 | 
						|
# Prepare environment.
 | 
						|
#
 | 
						|
 | 
						|
DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%';
 | 
						|
DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%';
 | 
						|
DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%';
 | 
						|
DELETE FROM mysql.columns_priv WHERE User LIKE 'mysqltest_%';
 | 
						|
FLUSH PRIVILEGES;
 | 
						|
 | 
						|
--disable_warnings
 | 
						|
DROP DATABASE IF EXISTS mysqltest_db1;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
CREATE DATABASE mysqltest_db1;
 | 
						|
 | 
						|
CREATE USER mysqltest_dfn@localhost;
 | 
						|
CREATE USER mysqltest_inv@localhost;
 | 
						|
 | 
						|
GRANT CREATE, TRIGGER ON mysqltest_db1.* TO mysqltest_dfn@localhost;
 | 
						|
 | 
						|
#
 | 
						|
# Create a table and the first trigger.
 | 
						|
#
 | 
						|
 | 
						|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
 | 
						|
--connection wl2818_definer_con
 | 
						|
--echo
 | 
						|
--echo ---> connection: wl2818_definer_con
 | 
						|
 | 
						|
CREATE TABLE t1(num_value INT);
 | 
						|
CREATE TABLE t2(user_str TEXT);
 | 
						|
 | 
						|
CREATE TRIGGER wl2818_trg1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES(CURRENT_USER());
 | 
						|
 | 
						|
#
 | 
						|
# Remove definers from TRG file.
 | 
						|
#
 | 
						|
 | 
						|
--echo
 | 
						|
--echo ---> patching t1.TRG...
 | 
						|
 | 
						|
# Here we remove definers.  This is somewhat complex than the original test
 | 
						|
# Previously, the test only used grep -v 'definers=' t1.TRG, but grep is not
 | 
						|
# portable and we have to load the file into a table, exclude the definers line,
 | 
						|
# then load the data to an outfile to accomplish the same effect
 | 
						|
 | 
						|
--disable_query_log
 | 
						|
--connection default
 | 
						|
CREATE TABLE patch (a blob);
 | 
						|
let $MYSQLD_DATADIR = `select @@datadir`;
 | 
						|
eval LOAD DATA LOCAL INFILE '$MYSQLD_DATADIR/mysqltest_db1/t1.TRG' INTO TABLE patch;
 | 
						|
# remove original t1.TRG file so SELECT INTO OUTFILE won't fail
 | 
						|
--remove_file $MYSQLD_DATADIR/mysqltest_db1/t1.TRG
 | 
						|
eval SELECT SUBSTRING_INDEX(a,'definers=',1) INTO OUTFILE
 | 
						|
 '$MYSQLD_DATADIR/mysqltest_db1/t1.TRG' 
 | 
						|
FROM patch;
 | 
						|
DROP TABLE patch;
 | 
						|
--connection wl2818_definer_con
 | 
						|
--enable_query_log
 | 
						|
 | 
						|
#
 | 
						|
# Create a new trigger.
 | 
						|
#
 | 
						|
 | 
						|
--echo
 | 
						|
 | 
						|
CREATE TRIGGER wl2818_trg2 AFTER INSERT ON t1
 | 
						|
  FOR EACH ROW
 | 
						|
    INSERT INTO t2 VALUES(CURRENT_USER());
 | 
						|
 | 
						|
--echo
 | 
						|
 | 
						|
SELECT trigger_name, definer FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name;
 | 
						|
 | 
						|
--echo
 | 
						|
 | 
						|
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name;
 | 
						|
 | 
						|
# Clean up
 | 
						|
DROP TRIGGER wl2818_trg1;
 | 
						|
DROP TRIGGER wl2818_trg2;
 | 
						|
disconnect wl2818_definer_con;
 | 
						|
connection default;
 | 
						|
use mysqltest_db1;
 | 
						|
DROP TABLE t1;
 | 
						|
DROP TABLE t2;
 | 
						|
DROP USER mysqltest_dfn@localhost;
 | 
						|
DROP USER mysqltest_inv@localhost;
 | 
						|
DROP DATABASE mysqltest_db1;
 | 
						|
 |