mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Tests of synchronization of stored procedure execution.
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| #
 | |
| # Bug #30977 Concurrent statement using stored function and
 | |
| #            DROP FUNCTION breaks SBR
 | |
| #
 | |
| # A stored routine could change after dispatch_command()
 | |
| # but before a MDL lock is taken. This must be noticed and the
 | |
| # sp cache flushed so the correct version can be loaded.
 | |
| #
 | |
| connect  con2, localhost, root;
 | |
| connection default;
 | |
| CREATE FUNCTION f1() RETURNS INT RETURN 1;
 | |
| # Get f1 cached
 | |
| SELECT f1();
 | |
| f1()
 | |
| 1
 | |
| # Then start executing it again...
 | |
| SET DEBUG_SYNC= 'before_execute_sql_command SIGNAL before WAIT_FOR changed';
 | |
| # Sending:
 | |
| SELECT f1();
 | |
| connection con2;
 | |
| SET DEBUG_SYNC= 'now WAIT_FOR before';
 | |
| # ... but before f1 is locked, change it.
 | |
| DROP FUNCTION f1;
 | |
| CREATE FUNCTION f1() RETURNS INT RETURN 2;
 | |
| SET DEBUG_SYNC= 'now SIGNAL changed';
 | |
| # We should now get '2' and not '1'.
 | |
| connection default;
 | |
| # Reaping: SELECT f1()
 | |
| f1()
 | |
| 2
 | |
| disconnect con2;
 | |
| DROP FUNCTION f1;
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| #
 | |
| # Field translation items must be cleared in case of back-offs
 | |
| # for queries that use Information Schema tables. Otherwise 
 | |
| # memory allocated in fix_fields() for views may end up referring
 | |
| # to freed memory.
 | |
| #
 | |
| DROP FUNCTION IF EXISTS f1;
 | |
| connect  con2, localhost, root;
 | |
| connect  con3, localhost, root;
 | |
| connection default;
 | |
| CREATE FUNCTION f1() RETURNS INT RETURN 0;
 | |
| connection con2;
 | |
| SET DEBUG_SYNC= 'after_wait_locked_pname SIGNAL locked WAIT_FOR issued';
 | |
| # con2 will now have an x-lock on f1
 | |
| # Sending:
 | |
| ALTER FUNCTION f1 COMMENT 'comment';
 | |
| connection default;
 | |
| SET DEBUG_SYNC= 'now WAIT_FOR locked';
 | |
| # This query will block due to the x-lock on f1 and back-off
 | |
| SHOW OPEN TABLES WHERE f1()=0;
 | |
| connection con3;
 | |
| # Check that the IS query is blocked before releasing the x-lock
 | |
| SET DEBUG_SYNC= 'now SIGNAL issued';
 | |
| connection default;
 | |
| # Reaping: ALTER FUNCTION f1 COMMENT 'comment'
 | |
| DROP FUNCTION f1;
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| disconnect con2;
 | |
| disconnect con3;
 | |
| #
 | |
| # Bug #48246 assert in close_thread_table
 | |
| #
 | |
| CREATE TABLE t0 (b INTEGER);
 | |
| CREATE TABLE t1 (a INTEGER);
 | |
| CREATE FUNCTION f1(b INTEGER) RETURNS INTEGER RETURN 1;
 | |
| CREATE PROCEDURE p1() SELECT COUNT(f1(a)) FROM t1, t0;
 | |
| INSERT INTO t0 VALUES(1);
 | |
| INSERT INTO t1 VALUES(1), (2);
 | |
| connect  con2, localhost, root;
 | |
| CALL p1();
 | |
| COUNT(f1(a))
 | |
| 2
 | |
| SET DEBUG_SYNC= 'after_open_table_mdl_shared SIGNAL locked_t1 WAIT_FOR go_for_t0';
 | |
| # This call used to cause an assertion. MDL deadlock with upcoming
 | |
| # LOCK TABLES statement will cause back-off and retry.
 | |
| # A variable indicating if a prelocking list exists, used to be not
 | |
| # reset properly causing an eventual assert.
 | |
| # Sending:
 | |
| CALL p1();
 | |
| connection default;
 | |
| SET DEBUG_SYNC= 'now WAIT_FOR locked_t1';
 | |
| # Issue LOCK TABLES statement which will enter in MDL deadlock
 | |
| # with CALL statement and as result will cause it to perform
 | |
| # back-off and retry.
 | |
| SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL go_for_t0';
 | |
| LOCK TABLES t0 WRITE, t1 WRITE;
 | |
| UNLOCK TABLES;
 | |
| connection con2;
 | |
| # Reaping: CALL p1()
 | |
| COUNT(f1(a))
 | |
| 2
 | |
| connection default;
 | |
| disconnect con2;
 | |
| DROP PROCEDURE p1;
 | |
| DROP FUNCTION f1;
 | |
| DROP TABLES t0, t1;
 | |
| #
 | |
| # test for bug#11756013
 | |
| #
 | |
| DROP SCHEMA IF EXISTS s1;
 | |
| CREATE SCHEMA s1;
 | |
| CREATE PROCEDURE s1.p1() BEGIN END;
 | |
| connect  con3, localhost, root;
 | |
| SET DEBUG_SYNC='before_db_dir_check SIGNAL check_db WAIT_FOR dropped_schema';
 | |
| CALL s1.p1;
 | |
| connection default;
 | |
| SET DEBUG_SYNC='now WAIT_FOR check_db';
 | |
| DROP SCHEMA s1;
 | |
| SET DEBUG_SYNC='now SIGNAL dropped_schema';
 | |
| connection con3;
 | |
| ERROR 42000: Unknown database 's1'
 | |
| connection default;
 | |
| disconnect con3;
 | |
| SET DEBUG_SYNC = 'RESET';
 | 
