#
# The purpose of this test is to exercise anything related to table locking:
#
# DDL, FLUSH, LOCK/UNLOCK, transactions
#
# 

query:
	ddl | dml | lock |
	ddl | dml | lock |
	ddl | dml | lock |
	ddl | dml | lock |
	ddl | dml | lock |
	ddl | dml | lock |
	ddl | dml | lock |
	transaction;

transaction:
	START TRANSACTION | COMMIT | ROLLBACK | SAVEPOINT A | ROLLBACK TO SAVEPOINT A ;

ddl:
	ALTER online ignore TABLE _table ENGINE = engine ;

dml:
	PREPARE st1 FROM " dml2 " ; EXECUTE st1 ; DEALLOCATE PREPARE st1 |
	dml2;

dml2:
	union | select | insert_replace | update | delete ;

union:
	select UNION select ;

select:
	SELECT high_priority sql_buffer_result sql_cache A . _field
	FROM _table AS A LEFT JOIN _table AS B USING (`pk`)
	LIMIT _digit
#	procedure
#	into
	for_update_lock_in_share_mode;

procedure:
	PROCEDURE ANALYSE(10, 2000);

into:
	INTO OUTFILE _tmpnam | 
	INTO DUMPFILE _tmpnam ;
#	INTO _letter ;

for_update_lock_in_share_mode:
	| FOR UPDATE | LOCK IN SHARE MODE ;

insert_replace:
	insert_replace2 low_priority_delayed_high_priority INTO _table ( _field ) select on_duplicate_key_update |
	insert_replace2 low_priority_delayed_high_priority INTO _table ( _field ) VALUES ( _digit ) on_duplicate_key_update ;

insert_replace2:
	INSERT | REPLACE ;

on_duplicate_key_update:
	| ON DUPLICATE KEY UPDATE _field = _digit ;

delete:
	DELETE low_priority quick ignore FROM _table WHERE `pk` > _digit LIMIT _digit |
	DELETE low_priority quick ignore A , B FROM _table AS A LEFT JOIN _table AS B USING (`pk`) LIMIT _digit ;

update:
	UPDATE low_priority ignore _table SET _field = _digit WHERE `pk` > _digit LIMIT _digit ;

quick:
	| QUICK ;

engine:
	MEMORY | MyISAM | InnoDB ;

online:
	ONLINE | ;

lock:
	LOCK TABLE lock_list |
	UNLOCK TABLES ;

flush:
	FLUSH TABLES WITH READ LOCK |
	FLUSH TABLE _table , _table ;

lock_list:
	lock_item |
	lock_item , lock_item ;

lock_item:
	_table lock_type ;

lock_type:
	READ local |
	low_priority WRITE ;

local:
	LOCAL | ;

low_priority:
	LOW_PRIORITY | ;

high_priority:
	HIGH_PRIORITY | ;

sql_buffer_result:
	SQL_BUFFER_RESULT | ;

sql_cache:
	SQL_CACHE | SQL_NO_CACHE | ;

low_priority_delayed_high_priority:

#	LOW_PRIORITY |
 DELAYED
# | HIGH_PRIORITY 
;

ignore:
	IGNORE | ;
