mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	into mysql.com:/home/my/mysql-5.0 BitKeeper/etc/ignore: auto-union BitKeeper/deleted/.del-ctype_cp932.test: Auto merged BitKeeper/deleted/.del-isam.test~834fb0ee8196c445: Auto merged include/thr_lock.h: Auto merged mysql-test/t/alias.test: Auto merged mysql-test/t/alter_table.test: Auto merged mysql-test/t/archive.test: Auto merged mysql-test/t/backup.test: Auto merged mysql-test/t/bool.test: Auto merged mysql-test/t/connect.test: Auto merged mysql-test/t/count_distinct2.test: Auto merged mysql-test/t/create.test: Auto merged mysql-test/t/ctype_many.test: Auto merged mysql-test/t/ctype_ucs_binlog.test: Auto merged mysql-test/t/date_formats.test: Auto merged mysql-test/t/delayed.test: Auto merged mysql-test/t/derived.test: Auto merged mysql-test/t/distinct.test: Auto merged mysql-test/t/drop.test: Auto merged mysql-test/t/endspace.test: Auto merged mysql-test/t/flush.test: Auto merged mysql-test/t/fulltext.test: Auto merged mysql-test/t/fulltext_order_by.test: Auto merged mysql-test/t/func_compress.test: Auto merged mysql-test/t/func_concat.test: Auto merged mysql-test/t/func_date_add.test: Auto merged mysql-test/t/func_equal.test: Auto merged mysql-test/t/func_if.test: Auto merged mysql-test/t/func_sapdb.test: Auto merged mysql-test/t/func_set.test: Auto merged mysql-test/t/func_str.test: Auto merged mysql-test/t/gis-rtree.test: Auto merged mysql-test/t/gis.test: Auto merged mysql-test/t/grant.test: Auto merged mysql-test/t/grant2.test: Auto merged mysql-test/t/grant_cache.test: Auto merged mysql-test/t/heap.test: Auto merged mysql-test/t/heap_btree.test: Auto merged mysql-test/t/heap_hash.test: Auto merged mysql-test/t/init_connect.test: Auto merged mysql-test/t/insert_select.test: Auto merged mysql-test/t/insert_update.test: Auto merged mysql-test/t/key.test: Auto merged mysql-test/t/keywords.test: Auto merged mysql-test/t/limit.test: Auto merged mysql-test/t/lock.test: Auto merged mysql-test/t/lowercase_table.test: Auto merged mysql-test/t/lowercase_table3.test: Auto merged mysql-test/t/merge.test: Auto merged mysql-test/t/mix_innodb_myisam_binlog.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/mysqlbinlog2.test: Auto merged mysql-test/t/ndb_alter_table.test: Auto merged mysql-test/t/ndb_autodiscover.test: Auto merged mysql-test/t/ndb_charset.test: Auto merged mysql-test/t/ndb_grant.later: Auto merged mysql-test/t/ndb_index_ordered.test: Auto merged mysql-test/t/ndb_index_unique.test: Auto merged mysql-test/t/ndb_restore.test: Auto merged mysql-test/t/ndb_types.test: Auto merged mysql-test/t/ndb_update.test: Auto merged mysql-test/t/null.test: Auto merged mysql-test/t/null_key.test: Auto merged mysql-test/t/olap.test: Auto merged mysql-test/t/openssl_1.test: Auto merged mysql-test/t/order_by.test: Auto merged mysql-test/t/ps.test: Auto merged mysql-test/t/ps_1general.test: Auto merged mysql-test/t/ps_4heap.test: Auto merged mysql-test/t/ps_5merge.test: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/replace.test: Auto merged mysql-test/t/row.test: Auto merged mysql-test/t/rpl000001.test: Auto merged mysql-test/t/rpl000015.test: Auto merged mysql-test/t/rpl000017.test: Auto merged mysql-test/t/rpl000018.test: Auto merged mysql-test/t/rpl_EE_error.test: Auto merged mysql-test/t/rpl_change_master.test: Auto merged mysql-test/t/rpl_charset.test: Auto merged mysql-test/t/rpl_create_database.test: Auto merged mysql-test/t/rpl_ddl.test: Auto merged mysql-test/t/rpl_deadlock.test: Auto merged mysql-test/t/rpl_empty_master_crash.test: Auto merged mysql-test/t/rpl_error_ignored_table.test: Auto merged mysql-test/t/rpl_flush_log_loop.test: Auto merged mysql-test/t/rpl_flush_tables.test: Auto merged mysql-test/t/rpl_get_lock.test: Auto merged mysql-test/t/rpl_heap.test: Auto merged mysql-test/t/rpl_loaddata.test: Auto merged mysql-test/t/rpl_loaddata_rule_m.test: Auto merged mysql-test/t/rpl_log.test: Auto merged mysql-test/t/rpl_log_pos.test: Auto merged mysql-test/t/rpl_max_relay_size.test: Auto merged mysql-test/t/rpl_multi_query.test: Auto merged mysql-test/t/rpl_openssl.test: Auto merged mysql-test/t/rpl_redirect.test: Auto merged mysql-test/t/rpl_relayrotate.test: Auto merged mysql-test/t/rpl_replicate_do.test: Auto merged mysql-test/t/rpl_reset_slave.test: Auto merged mysql-test/t/rpl_server_id2.test: Auto merged mysql-test/t/rpl_temporary.test: Auto merged mysql-test/t/rpl_timezone.test: Auto merged mysql-test/t/rpl_user_variables.test: Auto merged mysql-test/t/show_check.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/symlink.test: Auto merged mysql-test/t/synchronization.test: Auto merged mysql-test/t/system_mysql_db.test: Auto merged mysql-test/t/system_mysql_db_fix.test: Auto merged mysql-test/t/temp_table.test: Auto merged mysql-test/t/timezone2.test: Auto merged mysql-test/t/timezone_grant.test: Auto merged mysql-test/t/type_float.test: Auto merged mysql-test/t/type_ranges.test: Auto merged mysql-test/t/type_timestamp.test: Auto merged mysql-test/t/union.test: Auto merged mysql-test/t/update.test: Auto merged mysql-test/t/user_var-binlog.test: Auto merged mysql-test/t/warnings.test: Auto merged mysys/thr_lock.c: Auto merged sql/slave.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_select.cc: Auto merged support-files/mysql.spec.sh: Auto merged BitKeeper/deleted/.del-rpl_trunc_binlog.test~961b1f6ac73d37c8: Simple merge mysql-test/r/ps_grant.result: Simple merge mysql-test/t/analyse.test: Simple merge mysql-test/t/auto_increment.test: Simple merge mysql-test/t/bdb.test: Simple merge mysql-test/t/bigint.test: Simple merge mysql-test/t/case.test: Simple merge mysql-test/t/cast.test: Simple merge mysql-test/t/check.test: Simple merge mysql-test/t/count_distinct.test: Simple merge mysql-test/t/ctype_latin1_de.test: Simple merge mysql-test/t/ctype_uca.test: Simple merge mysql-test/t/ctype_ucs.test: Simple merge mysql-test/t/ctype_utf8.test: Simple merge mysql-test/t/delete.test: Simple merge mysql-test/t/flush_block_commit.test: Simple merge mysql-test/t/func_default.test: Simple merge mysql-test/t/func_gconcat.test: Simple merge mysql-test/t/func_group.test: Aligned code with 4.1 mysql-test/t/func_in.test: Simple merge mysql-test/t/func_math.test: Simple merge mysql-test/t/func_misc.test: Simple merge mysql-test/t/func_test.test: Simple merge mysql-test/t/func_time.test: Simple merge mysql-test/t/group_by.test: Simple merge mysql-test/t/having.test: Simple merge mysql-test/t/innodb.test: Simple merge mysql-test/t/insert.test: Simple merge mysql-test/t/join_outer.test: Simple merge mysql-test/t/kill.test: Simple merge mysql-test/t/loaddata.test: Simple merge mysql-test/t/lock_multi.test: Simple merge mysql-test/t/multi_update.test: Simple merge mysql-test/t/mysqlbinlog.test: Simple merge mysql-test/t/mysqldump.test: Aligned code with 4.1 mysql-test/t/mysqltest.test: Simple merge mysql-test/t/ndb_basic.test: Simple merge mysql-test/t/ndb_cache.test: Simple merge mysql-test/t/ndb_subquery.test: Simple merge mysql-test/t/ps_grant.test: Simple merge mysql-test/t/range.test: Simple merge mysql-test/t/rpl_drop_temp.test: Simple merge mysql-test/t/rpl_loaddata_rule_s.test: Simple merge mysql-test/t/rpl_loaddatalocal.test: Simple merge mysql-test/t/rpl_rotate_logs.test: Simple merge mysql-test/t/rpl_until.test: Simple merge mysql-test/t/rpl_variables.test: Simple merge mysql-test/t/select.test: Simple merge mysql-test/t/sql_mode.test: Simple merge mysql-test/t/type_blob.test: Simple merge mysql-test/t/type_decimal.test: Simple merge mysql-test/t/user_var.test: Simple merge mysql-test/t/variables.test: Simple merge sql/lock.cc: Simple optimization sql/mysql_priv.h: Simple merge sql/sql_table.cc: Simple merge sql/table.cc: Simple merge sql/unireg.cc: Simple merge
		
			
				
	
	
		
			935 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			935 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ###################### ps_general.test #######################
 | |
| #                                                            #
 | |
| #   basic and miscellaneous tests for prepared statements    #
 | |
| #                                                            #
 | |
| ##############################################################
 | |
| 
 | |
| #    
 | |
| # NOTE: PLEASE SEE THE DETAILED DESCRIPTION AT THE BOTTOM OF THIS FILE
 | |
| #       BEFORE ADDING NEW TEST CASES HERE !!!
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t5, t6, t7, t8;
 | |
| drop database if exists mysqltest ;
 | |
| 
 | |
| # Cleanup from other tests
 | |
| drop database if exists client_test_db;
 | |
| drop database if exists testtets;
 | |
| drop table if exists t1Aa,t2Aa,v1Aa,v2Aa;
 | |
| drop view if exists t1Aa,t2Aa,v1Aa,v2Aa;
 | |
| --enable_warnings
 | |
| 
 | |
| --disable_query_log
 | |
| select '------ basic tests ------' as test_sequence ;
 | |
| --enable_query_log
 | |
| 
 | |
| let $type= 'MYISAM' ;
 | |
| # create the tables (t1 and t9) used in many tests
 | |
| --source include/ps_create.inc
 | |
| # insert data into these tables
 | |
| --source include/ps_renew.inc
 | |
| 
 | |
| 
 | |
| ################ The basic functions ################
 | |
| 
 | |
| # 1. PREPARE stmt_name FROM <preparable statement>;
 | |
| #    <preparable statement> ::=
 | |
| #     'literal_stmt' |
 | |
| #     @variable_ref_stmt.
 | |
| #    The statement may contain question marks as placeholders for parameters.
 | |
| #
 | |
| #    Bind a statement name to a string containing a SQL statement and
 | |
| #    send it to the server. The server will parse the statement and
 | |
| #    reply with "Query Ok" or an error message.
 | |
| #
 | |
| PREPARE stmt FROM ' select * from t1 where a = ? ' ;
 | |
| 
 | |
| # 2. EXECUTE stmt_name [USING @var [, @var ]];
 | |
| #    Current values of supplied variables are used as parameters.
 | |
| #
 | |
| #    Send the server the order to execute the statement and supply values
 | |
| #    for the input parameters needed.
 | |
| #    If no error occurs the server reply will be identical to the reply for
 | |
| #    the query used in PREPARE with question marks replaced with values of
 | |
| #    the input variables.
 | |
| #
 | |
| SET @var= 2 ;
 | |
| EXECUTE stmt USING @var ;
 | |
| #    The non prepared statement with the same server reply would be:
 | |
| select * from t1 where a = @var ;
 | |
| 
 | |
| # 3. DEALLOCATE PREPARE stmt_name;
 | |
| #
 | |
| #    Send the server the order to drop the parse informations.
 | |
| #    The server will reply with "Query Ok" or an error message.
 | |
| DEALLOCATE PREPARE stmt ;
 | |
| 
 | |
| ################ PREPARE ################
 | |
| # prepare without parameter
 | |
| prepare stmt1 from ' select 1 as my_col ' ;
 | |
| # prepare with parameter
 | |
| prepare stmt1 from ' select ? as my_col ' ;
 | |
| # prepare must fail (incomplete statements/wrong syntax)
 | |
| --error 1064
 | |
| prepare ;
 | |
| --error 1064
 | |
| prepare stmt1 ;
 | |
| --error 1064
 | |
| prepare stmt1 from ;
 | |
| --error 1064
 | |
| prepare_garbage stmt1 from ' select 1 ' ;
 | |
| --error 1064
 | |
| prepare stmt1 from_garbage ' select 1 ' ;
 | |
| --error 1064
 | |
| prepare stmt1 from ' select_garbage 1 ' ;
 | |
| --error 1064
 | |
| prepare from ' select 1 ' ;
 | |
| --error 1064
 | |
| prepare stmt1 ' select 1 ' ;
 | |
| --error 1064
 | |
| prepare ? from ' select ? as my_col ' ;
 | |
| # statement in variable
 | |
| set @arg00='select 1 as my_col';
 | |
| prepare stmt1 from @arg00;
 | |
| # prepare must fail (query variable is empty)
 | |
| set @arg00='';
 | |
| --error 1065
 | |
| prepare stmt1 from @arg00;
 | |
| set @arg00=NULL;
 | |
| # prepare must fail (query variable is NULL)
 | |
| --error 1064
 | |
| prepare stmt1 from @arg01;
 | |
| 
 | |
| prepare stmt1 from ' select * from t1 where a <= 2 ' ;
 | |
| # prepare must fail (column x does not exist)
 | |
| --error 1054
 | |
| prepare stmt1 from ' select * from t1 where x <= 2 ' ;
 | |
| # cases derived from client_test.c: test_null()
 | |
| # prepare must fail (column x does not exist)
 | |
| --error 1054
 | |
| prepare stmt1 from ' insert into t1(a,x) values(?,?) ' ;
 | |
| --error 1054
 | |
| prepare stmt1 from ' insert into t1(x,a) values(?,?) ' ;
 | |
| --disable_warnings
 | |
| drop table if exists not_exist ;
 | |
| --enable_warnings
 | |
| # prepare must fail (table does not exist)
 | |
| --error 1146
 | |
| prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
 | |
| 
 | |
| # case derived from client_test.c: test_prepare_syntax()
 | |
| # prepare must fail (incomplete statement)
 | |
| --error 1064
 | |
| prepare stmt1 from ' insert into t1 values(? ' ;
 | |
| --error 1064
 | |
| prepare stmt1 from ' select a, b from t1
 | |
|                      where a=? and where ' ;
 | |
| 
 | |
| ################ EXECUTE ################
 | |
| # execute must fail (statement never_prepared never prepared)
 | |
| --error 1243
 | |
| execute never_prepared ;
 | |
| # execute must fail (prepare stmt1 just failed,
 | |
| #         but there was a successful prepare of stmt1 before)
 | |
| prepare stmt1 from ' select * from t1 where a <= 2 ' ;
 | |
| --error 1146
 | |
| prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
 | |
| --error 1243
 | |
| execute stmt1 ;
 | |
| 
 | |
| # drop the table between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   b char(30),
 | |
|   c int
 | |
| );
 | |
| insert into t5( a, b, c) values( 1, 'original table', 1);
 | |
| prepare stmt2 from ' select * from t5 ' ;
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # execute must fail (table was dropped after prepare)
 | |
| --error 1146
 | |
| execute stmt2 ;
 | |
| # cases derived from client_test.c: test_select_prepare()
 | |
| # 1. drop + create table (same column names/types/order) 
 | |
| # between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   b char(30),
 | |
|   c int
 | |
| );
 | |
| insert into t5( a, b, c) values( 9, 'recreated table', 9);
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # 2. drop + create table (same column names/types but different order)
 | |
| # between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   c int,
 | |
|   b char(30)
 | |
| );
 | |
| insert into t5( a, b, c) values( 9, 'recreated table', 9);
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # 3. drop + create table (same column names/types/order+extra column) 
 | |
| # between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   b char(30),
 | |
|   c int,
 | |
|   d timestamp default current_timestamp
 | |
| );
 | |
| insert into t5( a, b, c) values( 9, 'recreated table', 9);
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # 4. drop + create table (same column names/types, different order +
 | |
| # additional column) between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   d timestamp default current_timestamp,
 | |
|   b char(30),
 | |
|   c int
 | |
| );
 | |
| insert into t5( a, b, c) values( 9, 'recreated table', 9);
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # 5. drop + create table (same column names/order, different types)
 | |
| # between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   a timestamp default '2004-02-29 18:01:59',
 | |
|   b char(30),
 | |
|   c int
 | |
| );
 | |
| insert into t5( b, c) values( 'recreated table', 9);
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| # 6. drop + create table (same column types/order, different names) 
 | |
| # between prepare and execute
 | |
| create table t5
 | |
| (
 | |
|   f1 int primary key,
 | |
|   f2 char(30),
 | |
|   f3 int
 | |
| );
 | |
| insert into t5( f1, f2, f3) values( 9, 'recreated table', 9);
 | |
| --error 1054
 | |
| execute stmt2 ;
 | |
| drop table t5 ;
 | |
| 
 | |
| # execute without parameter
 | |
| prepare stmt1 from ' select * from t1 where a <= 2 ' ;
 | |
| execute stmt1 ;
 | |
| # execute with parameter
 | |
| set @arg00=1 ;
 | |
| set @arg01='two' ;
 | |
| prepare stmt1 from ' select * from t1 where a <= ? ' ;
 | |
| execute stmt1 using @arg00;
 | |
| # execute must fail (too small number of parameters)
 | |
| --error 1210
 | |
| execute stmt1 ;
 | |
| # execute must fail (too big number of parameters)
 | |
| --error 1210
 | |
| execute stmt1 using @arg00, @arg01;
 | |
| # execute must fail (parameter is not set)
 | |
| execute stmt1 using @not_set;
 | |
| 
 | |
| ################ DEALLOCATE ################
 | |
| # deallocate must fail (the statement 'never_prepared' was never prepared)
 | |
| --error 1243
 | |
| deallocate prepare never_prepared ;
 | |
| # deallocate must fail (prepare stmt1 just failed,
 | |
| #         but there was a successful prepare before)
 | |
| prepare stmt1 from ' select * from t1 where a <= 2 ' ;
 | |
| --error 1146
 | |
| prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
 | |
| --error 1243
 | |
| deallocate prepare stmt1;
 | |
| create table t5
 | |
| (
 | |
|   a int primary key,
 | |
|   b char(10)
 | |
| );
 | |
| prepare stmt2 from ' select a,b from t5 where a <= 2 ' ;
 | |
| drop table t5 ;
 | |
| # deallocate prepared statement where the table was dropped after prepare
 | |
| deallocate prepare stmt2;
 | |
| 
 | |
| ## parallel use of more than one prepared statement handlers
 | |
| # switch between different queries
 | |
| prepare stmt1 from ' select a from t1 where a <= 2 ' ;
 | |
| prepare stmt2 from ' select b from t1 where a <= 2 ' ;
 | |
| execute stmt2 ;
 | |
| execute stmt1 ;
 | |
| # switch between statement handlers of the same query
 | |
| prepare stmt1 from ' select a from t1 where a <= 2 ' ;
 | |
| prepare stmt2 from ' select a from t1 where a <= 2 ' ;
 | |
| execute stmt2 ;
 | |
| execute stmt1 ;
 | |
| deallocate prepare stmt1 ;
 | |
| # Will the deallocate of stmt1 with the same query affect stmt2 ?
 | |
| execute stmt2 ;
 | |
| 
 | |
| --disable_query_log
 | |
| select '------ show and misc tests ------' as test_sequence ;
 | |
| --enable_query_log
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t2;
 | |
| --enable_warnings
 | |
| create table t2 
 | |
| (
 | |
|   a int primary key, b char(10)
 | |
| );
 | |
| 
 | |
| ################ SHOW COMMANDS ################
 | |
| prepare stmt4 from ' show databases ';
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show tables from test like ''t2%'' ';
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show columns from t2 where field in (select ?) ';
 | |
| SET @arg00="a";
 | |
| execute stmt4 using @arg00;
 | |
| SET @arg00="b";
 | |
| execute stmt4 using @arg00;
 | |
| SET @arg00=1;
 | |
| execute stmt4 using @arg00;
 | |
| 
 | |
| prepare stmt4 from ' show columns from t2 from test like ''a%'' ';
 | |
| execute stmt4;
 | |
| create index t2_idx on t2(b);
 | |
| prepare stmt4 from ' show index from t2 from test ';
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show table status from test like ''t2%'' ';
 | |
| # egalize date and time values
 | |
| --replace_column 8 # 12 # 13 # 14 #
 | |
| # Bug#4288 : prepared statement 'show table status ..', wrong output on execute
 | |
| execute stmt4;
 | |
| # try the same with the big table
 | |
| prepare stmt4 from ' show table status from test like ''t9%'' ';
 | |
| # egalize date and time values
 | |
| --replace_column 8 # 12 # 13 # 14 #
 | |
| # Bug#4288
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show status like ''Threads_running'' ';
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show variables like ''sql_mode'' ';
 | |
| execute stmt4;
 | |
| prepare stmt4 from ' show engine bdb logs ';
 | |
| # The output depends on the history (actions of the bdb engine).
 | |
| # That is the reason why, we switch the output here off.
 | |
| #   (The real output will be tested in ps_6bdb.test)
 | |
| # --replace_result $MYSQL_TEST_DIR TEST_DIR
 | |
| --disable_result_log
 | |
| execute stmt4;
 | |
| --enable_result_log
 | |
| prepare stmt4 from ' show grants for user ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show create table t2 ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show master status ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show master logs ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show slave status ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show warnings limit 20 ';
 | |
| --error 1295
 | |
| prepare stmt4 from ' show errors limit 20 ';
 | |
| prepare stmt4 from ' show storage engines ';
 | |
| --replace_column 2 YES/NO
 | |
| execute stmt4;
 | |
| 
 | |
| ################ MISC STUFF ################
 | |
| ## get a warning and an error
 | |
| # cases derived from client_test.c: test_warnings(), test_errors()
 | |
| --disable_warnings
 | |
| drop table if exists t5;
 | |
| --enable_warnings
 | |
| prepare stmt1 from ' drop table if exists t5 ' ;
 | |
| execute stmt1 ;
 | |
| prepare stmt1 from ' drop table t5 ' ;
 | |
| --error 1051
 | |
| execute stmt1 ;
 | |
| 
 | |
| ## SELECT @@version
 | |
| # cases derived from client_test.c: test_select_version()
 | |
| #
 | |
| # TODO: Metadata check is temporary disabled here, because metadata of 
 | |
| # this statement also depends on @@version contents and you can't apply
 | |
| # replace_column and replace_result to it. It will be enabled again when 
 | |
| # support of replace_column and replace_result on metadata will be
 | |
| # implemented.
 | |
| #
 | |
| #--enable_metadata
 | |
| prepare stmt1 from ' SELECT @@version ' ;
 | |
| # egalize the version
 | |
| --replace_column 1 <version>
 | |
| execute stmt1 ;
 | |
| #--disable_metadata
 | |
| 
 | |
| ## do @var:= and set @var=
 | |
| # cases derived from client_test.c: test_do_set()
 | |
| prepare stmt_do from ' do @var:=  (1 in (select a from t1)) ' ;
 | |
| prepare stmt_set from ' set @var= (1 in (select a from t1)) ' ;
 | |
| let $1= 3 ;
 | |
| while ($1)
 | |
| {
 | |
|   execute stmt_do ;
 | |
|   --disable_query_log
 | |
|   select @var as 'content of @var is:' ;
 | |
|   --enable_query_log
 | |
|   execute stmt_set ;
 | |
|   --disable_query_log
 | |
|   select @var as 'content of @var is:' ;
 | |
|   --enable_query_log
 | |
|   dec $1 ;
 | |
| }
 | |
| # the same test with a table containing one column and 'select *'
 | |
| --disable_warnings
 | |
| drop table if exists t5 ;
 | |
| --enable_warnings
 | |
| create table t5 (a int) ;
 | |
| prepare stmt_do from ' do @var:=  (1 in (select a from t5)) ' ;
 | |
| prepare stmt_set from ' set @var= (1 in (select a from t5)) ' ;
 | |
| let $1= 3 ;
 | |
| while ($1)
 | |
| {
 | |
|   execute stmt_do ;
 | |
|   --disable_query_log
 | |
|   select @var as 'content of @var is:' ;
 | |
|   --enable_query_log
 | |
|   execute stmt_set ;
 | |
|   --disable_query_log
 | |
|   select @var as 'content of @var is:' ;
 | |
|   --enable_query_log
 | |
|   dec $1 ;
 | |
| }
 | |
| drop table t5 ;
 | |
| deallocate prepare stmt_do ;
 | |
| deallocate prepare stmt_set ;
 | |
| 
 | |
| ## nonsense like prepare of prepare,execute or deallocate
 | |
| --error 1064
 | |
| prepare stmt1 from ' prepare stmt2 from '' select 1 ''  ' ;
 | |
| --error 1064
 | |
| prepare stmt1 from ' execute stmt2 ' ;
 | |
| --error 1064
 | |
| prepare stmt1 from ' deallocate prepare never_prepared ' ;
 | |
| 
 | |
| ## switch the database connection
 | |
| --error 1295
 | |
| prepare stmt4 from ' use test ' ;
 | |
| 
 | |
| ## create/drop database
 | |
| --error 1295
 | |
| prepare stmt3 from ' create database mysqltest ';
 | |
| create database mysqltest ;
 | |
| --error 1295
 | |
| prepare stmt3 from ' drop database mysqltest ';
 | |
| drop database mysqltest ;
 | |
| 
 | |
| #### table related commands
 | |
| ## describe
 | |
| prepare stmt3 from ' describe t2 ';
 | |
| execute stmt3;
 | |
| drop table t2 ;
 | |
| --error 1146
 | |
| execute stmt3;
 | |
| ## lock/unlock
 | |
| --error 1295
 | |
| prepare stmt3 from ' lock tables t1 read ' ;
 | |
| --error 1295
 | |
| prepare stmt3 from ' unlock tables ' ;
 | |
| ## Load/Unload table contents
 | |
| --error 1295
 | |
| prepare stmt1 from ' load data infile ''data.txt''
 | |
| into table t1 fields terminated by ''\t'' ';
 | |
| prepare stmt1 from ' select * into outfile ''data.txt'' from t1 ';
 | |
| execute stmt1 ;
 | |
| ## 
 | |
| --error 1295
 | |
| prepare stmt1 from ' optimize table t1 ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' analyze table t1 ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' checksum table t1 ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' repair table t1 ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' restore table t1 from ''data.txt'' ' ;
 | |
| ## handler
 | |
| --error 1295
 | |
| prepare stmt1 from ' handler t1 open ';
 | |
| 
 | |
| 
 | |
| ## commit/rollback
 | |
| prepare stmt3 from ' commit ' ;
 | |
| prepare stmt3 from ' rollback ' ;
 | |
| 
 | |
| 
 | |
| ## switch the sql_mode
 | |
| prepare stmt4 from ' SET sql_mode=ansi ';
 | |
| execute stmt4;
 | |
| # check if the sql_mode is now ansi
 | |
| select 'a' || 'b' ;
 | |
| prepare stmt4 from ' SET sql_mode="" ';
 | |
| execute stmt4;
 | |
| # check if the sql_mode is not ansi
 | |
| select '2' || '3' ;
 | |
| # Will a switch of the sqlmode affect the execution of already prepared 
 | |
| # statements ?
 | |
| prepare stmt5 from ' select ''2'' || ''3'' ' ;
 | |
| execute stmt5;
 | |
| SET sql_mode=ansi;
 | |
| execute stmt5;
 | |
| SET sql_mode="";
 | |
| 
 | |
| --error 1295
 | |
| prepare stmt1 from ' flush local privileges ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' reset query cache ' ;
 | |
| --error 1295
 | |
| prepare stmt1 from ' KILL 0 ';
 | |
| 
 | |
| ## simple explain
 | |
| # cases derived from client_test.c: test_explain_bug()
 | |
| prepare stmt1 from ' explain select a from t1 order by b ';
 | |
| # PS protocol gives slightly different metadata
 | |
| --disable_ps_protocol
 | |
| --enable_metadata
 | |
| execute stmt1;
 | |
| --disable_metadata
 | |
| SET @arg00=1 ;
 | |
| prepare stmt1 from ' explain select a from t1 where a > ? order by b ';
 | |
| --enable_metadata
 | |
| execute stmt1 using @arg00;
 | |
| --disable_metadata
 | |
| --enable_ps_protocol
 | |
| 
 | |
| ## parameters with probably problematic characters (quote, double  quote)
 | |
| # cases derived from client_test.c: test_logs()
 | |
| # try if 
 | |
| --disable_warnings
 | |
| drop table if exists t2;
 | |
| --enable_warnings
 | |
| create table t2 (id smallint, name varchar(20)) ;
 | |
| prepare stmt1 from ' insert into t2 values(?, ?) ' ;
 | |
| set @id= 9876 ;
 | |
| set @arg00= 'MySQL - Open Source Database' ;
 | |
| set @arg01= "'" ;
 | |
| set @arg02= '"' ;
 | |
| set @arg03= "my'sql'" ;
 | |
| set @arg04= 'my"sql"' ;
 | |
| insert into t2 values ( @id , @arg00 );
 | |
| insert into t2 values ( @id , @arg01 );
 | |
| insert into t2 values ( @id , @arg02 );
 | |
| insert into t2 values ( @id , @arg03 );
 | |
| insert into t2 values ( @id , @arg04 );
 | |
| prepare stmt1 from ' select * from t2 where id= ? and name= ? ';
 | |
| execute stmt1 using @id, @arg00 ;
 | |
| execute stmt1 using @id, @arg01 ;
 | |
| execute stmt1 using @id, @arg02 ;
 | |
| execute stmt1 using @id, @arg03 ;
 | |
| execute stmt1 using @id, @arg04 ;
 | |
| drop table t2;
 | |
| 
 | |
| ################ CREATE/DROP/ALTER/RENAME TESTS ################
 | |
| --disable_query_log
 | |
| select '------ create/drop/alter/rename tests ------' as test_sequence ;
 | |
| --enable_query_log
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t2, t3;
 | |
| --enable_warnings
 | |
| 
 | |
| ## DROP TABLE
 | |
| prepare stmt_drop from ' drop table if exists t2 ' ;
 | |
| --disable_warnings
 | |
| execute stmt_drop;
 | |
| --enable_warnings
 | |
| 
 | |
| ## CREATE TABLE
 | |
| prepare stmt_create from ' create table t2 (
 | |
|                              a int primary key, b char(10)) ';
 | |
| execute stmt_create;
 | |
| prepare stmt3 from ' create table t3 like t2 ';
 | |
| execute stmt3;
 | |
| drop table t3;
 | |
| 
 | |
| ## CREATE TABLE .. SELECT
 | |
| set @arg00=1;
 | |
| prepare stmt3 from ' create table t3 (m int) select ? as m ' ;
 | |
| # Bug#4280 server hangs, prepared "create table .. as select ? .."
 | |
| execute stmt3 using @arg00;
 | |
| select m from t3;
 | |
| drop table t3;
 | |
| 
 | |
| prepare stmt3 from ' create index t2_idx on t2(b) ';
 | |
| prepare stmt3 from ' drop index t2_idx on t2 ' ; 
 | |
| prepare stmt3 from ' alter table t2 drop primary key ';
 | |
| 
 | |
| ## RENAME TABLE
 | |
| --disable_warnings
 | |
| drop table if exists new_t2;
 | |
| --enable_warnings
 | |
| prepare stmt3 from ' rename table t2 to new_t2 ';
 | |
| execute stmt3;
 | |
| --error 1050
 | |
| execute stmt3;
 | |
| rename table new_t2 to t2;
 | |
| drop table t2;
 | |
| ## RENAME more than on TABLE within one statement
 | |
| # cases derived from client_test.c: test_rename()
 | |
| prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ;
 | |
| create table t5 (a int) ;
 | |
| # rename must fail, t7 does not exist
 | |
| # Clean up the filename here because embedded server reports whole path
 | |
| --replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / t7.frm t7
 | |
| --error 1017
 | |
| execute stmt1 ;
 | |
| create table t7 (a int) ;
 | |
| # rename, t5 -> t6 and t7 -> t8
 | |
| execute stmt1 ;
 | |
| # rename must fail, t5 and t7 does not exist t6 and t8 already exist
 | |
| --error 1050
 | |
| execute stmt1 ;
 | |
| rename table t6 to t5, t8 to t7 ;
 | |
| # rename, t5 -> t6 and t7 -> t8
 | |
| execute stmt1 ;
 | |
| drop table t6, t8 ;
 | |
| 
 | |
| 
 | |
| ################ BIG STATEMENT TESTS ################
 | |
| --disable_query_log
 | |
| select '------ big statement tests ------' as test_sequence ;
 | |
| --enable_query_log
 | |
| # The following tests use huge numbers of lines, characters or parameters
 | |
| # per prepared statement.
 | |
| # I assume the server and also the client (mysqltest) are stressed.
 | |
| #
 | |
| # Attention: The limits used are NOT derived from the manual
 | |
| #            or other sources.
 | |
| 
 | |
| ## many lines ( 50 )
 | |
| let $my_stmt= select 'ABC' as my_const_col from t1 where
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 AND
 | |
| 1 = 1 ;
 | |
| eval ($my_stmt) ;
 | |
| eval prepare stmt1 from "$my_stmt" ;
 | |
| execute stmt1 ;
 | |
| execute stmt1 ;
 | |
| 
 | |
| ## many characters ( about 1400 )
 | |
| 
 | |
| let $my_stmt= select 'ABC' as my_const_col FROM t1 WHERE
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
 | |
| '1234567890123456789012345678901234567890123456789012345678901234567890'
 | |
| = '1234567890123456789012345678901234567890123456789012345678901234567890' ;
 | |
| eval ($my_stmt) ;
 | |
| eval prepare stmt1 from "$my_stmt" ;
 | |
| execute stmt1 ;
 | |
| execute stmt1 ;
 | |
| 
 | |
| 
 | |
| ## many parameters ( 50 )
 | |
| --disable_query_log
 | |
| set @arg00= 1;
 | |
| set @arg01= 1; 
 | |
| set @arg02= 1;
 | |
| set @arg03= 1; 
 | |
| set @arg04= 1;
 | |
| set @arg05= 1; 
 | |
| set @arg06= 1;
 | |
| set @arg07= 1;
 | |
| set @arg10= 1;
 | |
| set @arg11= 1; 
 | |
| set @arg12= 1;
 | |
| set @arg13= 1; 
 | |
| set @arg14= 1;
 | |
| set @arg15= 1; 
 | |
| set @arg16= 1;
 | |
| set @arg17= 1; 
 | |
| set @arg20= 1;
 | |
| set @arg21= 1; 
 | |
| set @arg22= 1;
 | |
| set @arg23= 1; 
 | |
| set @arg24= 1;
 | |
| set @arg25= 1; 
 | |
| set @arg26= 1;
 | |
| set @arg27= 1; 
 | |
| set @arg30= 1;
 | |
| set @arg31= 1; 
 | |
| set @arg32= 1;
 | |
| set @arg33= 1; 
 | |
| set @arg34= 1;
 | |
| set @arg35= 1; 
 | |
| set @arg36= 1;
 | |
| set @arg37= 1; 
 | |
| set @arg40= 1;
 | |
| set @arg41= 1; 
 | |
| set @arg42= 1;
 | |
| set @arg43= 1; 
 | |
| set @arg44= 1;
 | |
| set @arg45= 1; 
 | |
| set @arg46= 1;
 | |
| set @arg47= 1; 
 | |
| set @arg50= 1;
 | |
| set @arg51= 1; 
 | |
| set @arg52= 1;
 | |
| set @arg53= 1; 
 | |
| set @arg54= 1;
 | |
| set @arg55= 1; 
 | |
| set @arg56= 1;
 | |
| set @arg57= 1; 
 | |
| set @arg60= 1;
 | |
| set @arg61= 1;
 | |
| --enable_query_log
 | |
| 
 | |
| select 'ABC' as my_const_col FROM t1 WHERE
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
 | |
| @arg00=@arg00 ;
 | |
| prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
 | |
|  ? = ?  ' ;
 | |
| execute stmt1 using 
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
 | |
| @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
 | |
| @arg00, @arg00;
 | |
| execute stmt1 using 
 | |
| @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, 
 | |
| @arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17,
 | |
| @arg20, @arg21, @arg22, @arg23, @arg24, @arg25, @arg26, @arg27, 
 | |
| @arg30, @arg31, @arg32, @arg33, @arg34, @arg35, @arg36, @arg37, 
 | |
| @arg40, @arg41, @arg42, @arg43, @arg44, @arg45, @arg46, @arg47, 
 | |
| @arg50, @arg51, @arg52, @arg53, @arg54, @arg55, @arg56, @arg57, 
 | |
| @arg60, @arg61 ;
 | |
| 
 | |
| # cases derived from client_test.c: test_mem_overun()
 | |
| --disable_warnings
 | |
| drop table if exists t5 ;
 | |
| --enable_warnings
 | |
| 
 | |
| set @col_num= 1000 ;
 | |
| 
 | |
| --disable_query_log
 | |
| set @string= 'create table t5( ' ;
 | |
| let $1=`select @col_num - 1` ;
 | |
| while ($1)
 | |
| {
 | |
|   eval set @string= concat(@string, 'c$1 int,') ;
 | |
|   dec $1 ;
 | |
| }
 | |
| set @string= concat(@string, 'c0 int)' );
 | |
| --enable_query_log
 | |
| select @string as "" ;
 | |
| prepare stmt1 from @string ;
 | |
| execute stmt1 ;
 | |
| 
 | |
| --disable_query_log
 | |
| set @string= 'insert into t5 values(' ;
 | |
| let $1=`select @col_num - 1` ;
 | |
| while ($1)
 | |
| {
 | |
|   eval set @string= concat(@string, '1 ,') ;
 | |
|   dec $1 ;
 | |
| }
 | |
| eval set @string= concat(@string, '1 )') ;
 | |
| --enable_query_log
 | |
| select @string as "" ;
 | |
| prepare stmt1 from @string ;
 | |
| execute stmt1 ;
 | |
| 
 | |
| prepare stmt1 from ' select * from t5 ' ;
 | |
| --enable_metadata
 | |
| # prevent too long lines
 | |
| --vertical_results
 | |
| --disable_result_log
 | |
| execute stmt1 ;
 | |
| --enable_result_log
 | |
| --disable_metadata
 | |
| --horizontal_results
 | |
| 
 | |
| drop table t5, t9;
 | |
| 
 | |
| ##### RULES OF THUMB TO PRESERVE THE SYSTEMATICS OF THE PS TEST CASES #####
 | |
| #
 | |
| # 0. You  don't have the time to 
 | |
| #    - read and pay attention to these rules of thumb
 | |
| #    - accept that QA may move your test case to a different place
 | |
| #      (I will not change your code!!) .
 | |
| #    Please append your test case to
 | |
| #        t/ps.test
 | |
| #
 | |
| # 1. You have more time and want to get as much value from you test case as
 | |
| #    possible. Please try to make the following decisions:
 | |
| #
 | |
| #    Will the execution or result of the sub test case depend on the
 | |
| #    properties of a storage engine ?
 | |
| #
 | |
| #      NO   --> alter t/ps_1general.test (Example: Command with syntax error)
 | |
| #               If you need a table, please try to use
 | |
| #               t1               - very simple table
 | |
| #               t9 - table with nearly all available column types
 | |
| #               whenever possible.
 | |
| #
 | |
| #               The structure and the content of these tables can be found in
 | |
| #               include/ps_create.inc  CREATE TABLE ...
 | |
| #               include/ps_renew.inc   DELETE all rows and INSERT some rows
 | |
| #
 | |
| #               Both tables are managed by the same storage engine.
 | |
| #               The type of the storage engine is stored in the variable 
 | |
| #               '$type' .  In ps_1general.test $type is set to 'MYISAM'.
 | |
| #    
 | |
| #               Please feel free to source ps_create.inc or ps_renew.inc
 | |
| #               whenever you think it helps. But please restore the original
 | |
| #               state of these tables after your tests, because the following
 | |
| #               statements may depend on it.
 | |
| #
 | |
| #      YES
 | |
| #       |
 | |
| #       |
 | |
| #    Is it possible to apply the sub test case to all table types ?
 | |
| #      YES  --> alter include/ps_query.inc   (for SELECTs)
 | |
| #                     include/ps_modify.inc  (for INSERT/UPDATE/DELETE)
 | |
| #                     include/ps_modify1.inc (also for INSERT/UPDATE/DELETE,
 | |
| #                                but t/ps_5merge.test will not source that file)
 | |
| #               Please try to find an appropriate place within the file.
 | |
| #               It would be nice if we have some systematics in the
 | |
| #               order of the sub test cases (if possible).
 | |
| #
 | |
| #               Please be aware, that
 | |
| #                  include: ps_query.inc, ps_modify.inc, ps_modify1.inc
 | |
| #               will be sourced by several test case files stored within the 
 | |
| #               subdirectory 't'. So every change here will affect several test
 | |
| #               cases.
 | |
| #
 | |
| #      NO
 | |
| #       |
 | |
| #       |
 | |
| #    Append the sub test case to the appropriate 
 | |
| #                  ps_<number><table type>.test  .
 | |
| #
 | |
| # 2. The current structure of the PS tests
 | |
| #
 | |
| #    t/ps_1general.test     Check of basic PS features, SHOW commands and DDL
 | |
| #                           The tests should not depend on the table type.
 | |
| #
 | |
| #    t/ps_2myisam           Check of PS on tables of type MYISAM .
 | |
| #    t/ps_3innodb           Check of PS on tables of type InnoDB .
 | |
| #    ...
 | |
| #    t/ps_6bdb              Check of PS on tables of type BDB .
 | |
| #         All storage engine related tests use the variable $type to hold the
 | |
| #         name of the storage engine.        
 | |
| #
 | |
| #    include/ps_query.inc   test cases with SELECT/... 
 | |
| #                           These test cases should not modify the content or
 | |
| #                           the structure (DROP/ALTER..) of the tables
 | |
| #                           't1' and 't9'.
 | |
| #    include/ps_modify.inc  test cases with INSERT/UPDATE/... 
 | |
| #                           These test cases should not modify the structure 
 | |
| #                           (DROP/ALTER..) of the tables
 | |
| #                           't1' and 't9'.
 | |
| #         These two test sequences will be applied to all table types .
 | |
| #
 | |
| #    include/ps_modify1.inc test cases with INSERT/UPDATE/...
 | |
| #         This test sequences will be applied to all table types 
 | |
| #         except MERGE tables.
 | |
| #
 | |
| #    include/ps_create.inc  DROP and CREATE of the tables 
 | |
| #                             't1' and 't9' .
 | |
| #    include/ps_renew.inc   DELETE all rows and INSERT some rows, that means
 | |
| #                           recreate the original content of these tables.
 | |
| #         Please do not alter the commands concerning these two tables.
 | |
| #
 | |
| #  Please feel free and encouraged to exploit the current code sharing
 | |
| #  mechanism of the 'ps_<number><table type>' test cases. It is an convenient
 | |
| #  way to check all storage engines.
 | |
| #
 | |
| #  Thank you for reading these rules of thumb.
 | |
| #
 | |
| #     Matthias
 | |
| 
 | |
| # End of 4.1 tests
 |