ps_1general.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:28k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. ###################### ps_general.test #######################
  2. #                                                            #
  3. #   basic and miscellaneous tests for prepared statements    #
  4. #                                                            #
  5. ##############################################################
  6. #    
  7. # NOTE: PLEASE SEE THE DETAILED DESCRIPTION AT THE BOTTOM OF THIS FILE
  8. #       BEFORE ADDING NEW TEST CASES HERE !!!
  9. --disable_warnings
  10. drop table if exists t5, t6, t7, t8;
  11. drop database if exists mysqltest ;
  12. drop database if exists client_test_db;
  13. --enable_warnings
  14. --disable_query_log
  15. select '------ basic tests ------' as test_sequence ;
  16. --enable_query_log
  17. let $type= 'MYISAM' ;
  18. # create the tables (t1 and t9) used in many tests
  19. --source include/ps_create.inc
  20. # insert data into these tables
  21. --source include/ps_renew.inc
  22. ################ The basic functions ################
  23. # 1. PREPARE stmt_name FROM <preparable statement>;
  24. #    <preparable statement> ::=
  25. #     'literal_stmt' |
  26. #     @variable_ref_stmt.
  27. #    The statement may contain question marks as placeholders for parameters.
  28. #
  29. #    Bind a statement name to a string containing a SQL statement and
  30. #    send it to the server. The server will parse the statement and
  31. #    reply with "Query Ok" or an error message.
  32. #
  33. PREPARE stmt FROM ' select * from t1 where a = ? ' ;
  34. # 2. EXECUTE stmt_name [USING @var [, @var ]];
  35. #    Current values of supplied variables are used as parameters.
  36. #
  37. #    Send the server the order to execute the statement and supply values
  38. #    for the input parameters needed.
  39. #    If no error occurs the server reply will be identical to the reply for
  40. #    the query used in PREPARE with question marks replaced with values of
  41. #    the input variables.
  42. #
  43. SET @var= 2 ;
  44. EXECUTE stmt USING @var ;
  45. #    The non prepared statement with the same server reply would be:
  46. select * from t1 where a = @var ;
  47. # 3. DEALLOCATE PREPARE stmt_name;
  48. #
  49. #    Send the server the order to drop the parse informations.
  50. #    The server will reply with "Query Ok" or an error message.
  51. DEALLOCATE PREPARE stmt ;
  52. ################ PREPARE ################
  53. # prepare without parameter
  54. prepare stmt1 from ' select 1 as my_col ' ;
  55. # prepare with parameter
  56. prepare stmt1 from ' select ? as my_col ' ;
  57. # prepare must fail (incomplete statements/wrong syntax)
  58. --error 1064
  59. prepare ;
  60. --error 1064
  61. prepare stmt1 ;
  62. --error 1064
  63. prepare stmt1 from ;
  64. --error 1064
  65. prepare_garbage stmt1 from ' select 1 ' ;
  66. --error 1064
  67. prepare stmt1 from_garbage ' select 1 ' ;
  68. --error 1064
  69. prepare stmt1 from ' select_garbage 1 ' ;
  70. --error 1064
  71. prepare from ' select 1 ' ;
  72. --error 1064
  73. prepare stmt1 ' select 1 ' ;
  74. --error 1064
  75. prepare ? from ' select ? as my_col ' ;
  76. # statement in variable
  77. set @arg00='select 1 as my_col';
  78. prepare stmt1 from @arg00;
  79. # prepare must fail (query variable is empty)
  80. set @arg00='';
  81. --error 1065
  82. prepare stmt1 from @arg00;
  83. set @arg00=NULL;
  84. # prepare must fail (query variable is NULL)
  85. --error 1064
  86. prepare stmt1 from @arg01;
  87. prepare stmt1 from ' select * from t1 where a <= 2 ' ;
  88. # prepare must fail (column x does not exist)
  89. --error 1054
  90. prepare stmt1 from ' select * from t1 where x <= 2 ' ;
  91. # cases derived from client_test.c: test_null()
  92. # prepare must fail (column x does not exist)
  93. --error 1054
  94. prepare stmt1 from ' insert into t1(a,x) values(?,?) ' ;
  95. --error 1054
  96. prepare stmt1 from ' insert into t1(x,a) values(?,?) ' ;
  97. --disable_warnings
  98. drop table if exists not_exist ;
  99. --enable_warnings
  100. # prepare must fail (table does not exist)
  101. --error 1146
  102. prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
  103. # case derived from client_test.c: test_prepare_syntax()
  104. # prepare must fail (incomplete statement)
  105. --error 1064
  106. prepare stmt1 from ' insert into t1 values(? ' ;
  107. --error 1064
  108. prepare stmt1 from ' select a, b from t1
  109.                      where a=? and where ' ;
  110. ################ EXECUTE ################
  111. # execute must fail (statement never_prepared never prepared)
  112. --error 1243
  113. execute never_prepared ;
  114. # execute must fail (prepare stmt1 just failed,
  115. #         but there was a successful prepare of stmt1 before)
  116. prepare stmt1 from ' select * from t1 where a <= 2 ' ;
  117. --error 1146
  118. prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
  119. --error 1243
  120. execute stmt1 ;
  121. # drop the table between prepare and execute
  122. create table t5
  123. (
  124.   a int primary key,
  125.   b char(30),
  126.   c int
  127. );
  128. insert into t5( a, b, c) values( 1, 'original table', 1);
  129. prepare stmt2 from ' select * from t5 ' ;
  130. execute stmt2 ;
  131. drop table t5 ;
  132. # execute must fail (table was dropped after prepare)
  133. --error 1146
  134. execute stmt2 ;
  135. # cases derived from client_test.c: test_select_prepare()
  136. # 1. drop + create table (same column names/types/order) 
  137. # between prepare and execute
  138. create table t5
  139. (
  140.   a int primary key,
  141.   b char(30),
  142.   c int
  143. );
  144. insert into t5( a, b, c) values( 9, 'recreated table', 9);
  145. execute stmt2 ;
  146. drop table t5 ;
  147. # 2. drop + create table (same column names/types but different order)
  148. # between prepare and execute
  149. create table t5
  150. (
  151.   a int primary key,
  152.   c int,
  153.   b char(30)
  154. );
  155. insert into t5( a, b, c) values( 9, 'recreated table', 9);
  156. execute stmt2 ;
  157. drop table t5 ;
  158. # 3. drop + create table (same column names/types/order+extra column) 
  159. # between prepare and execute
  160. create table t5
  161. (
  162.   a int primary key,
  163.   b char(30),
  164.   c int,
  165.   d timestamp default current_timestamp
  166. );
  167. insert into t5( a, b, c) values( 9, 'recreated table', 9);
  168. execute stmt2 ;
  169. drop table t5 ;
  170. # 4. drop + create table (same column names/types, different order +
  171. # additional column) between prepare and execute
  172. create table t5
  173. (
  174.   a int primary key,
  175.   d timestamp default current_timestamp,
  176.   b char(30),
  177.   c int
  178. );
  179. insert into t5( a, b, c) values( 9, 'recreated table', 9);
  180. execute stmt2 ;
  181. drop table t5 ;
  182. # 5. drop + create table (same column names/order, different types)
  183. # between prepare and execute
  184. create table t5
  185. (
  186.   a timestamp default '2004-02-29 18:01:59',
  187.   b char(30),
  188.   c int
  189. );
  190. insert into t5( b, c) values( 'recreated table', 9);
  191. execute stmt2 ;
  192. drop table t5 ;
  193. # 6. drop + create table (same column types/order, different names) 
  194. # between prepare and execute
  195. create table t5
  196. (
  197.   f1 int primary key,
  198.   f2 char(30),
  199.   f3 int
  200. );
  201. insert into t5( f1, f2, f3) values( 9, 'recreated table', 9);
  202. --error 1054
  203. execute stmt2 ;
  204. drop table t5 ;
  205. # execute without parameter
  206. prepare stmt1 from ' select * from t1 where a <= 2 ' ;
  207. execute stmt1 ;
  208. # execute with parameter
  209. set @arg00=1 ;
  210. set @arg01='two' ;
  211. prepare stmt1 from ' select * from t1 where a <= ? ' ;
  212. execute stmt1 using @arg00;
  213. # execute must fail (too small number of parameters)
  214. --error 1210
  215. execute stmt1 ;
  216. # execute must fail (too big number of parameters)
  217. --error 1210
  218. execute stmt1 using @arg00, @arg01;
  219. # execute must fail (parameter is not set)
  220. execute stmt1 using @not_set;
  221. ################ DEALLOCATE ################
  222. # deallocate must fail (the statement 'never_prepared' was never prepared)
  223. --error 1243
  224. deallocate prepare never_prepared ;
  225. # deallocate must fail (prepare stmt1 just failed,
  226. #         but there was a successful prepare before)
  227. prepare stmt1 from ' select * from t1 where a <= 2 ' ;
  228. --error 1146
  229. prepare stmt1 from ' select * from not_exist where a <= 2 ' ;
  230. --error 1243
  231. deallocate prepare stmt1;
  232. create table t5
  233. (
  234.   a int primary key,
  235.   b char(10)
  236. );
  237. prepare stmt2 from ' select a,b from t5 where a <= 2 ' ;
  238. drop table t5 ;
  239. # deallocate prepared statement where the table was dropped after prepare
  240. deallocate prepare stmt2;
  241. ## parallel use of more than one prepared statement handlers
  242. # switch between different queries
  243. prepare stmt1 from ' select a from t1 where a <= 2 ' ;
  244. prepare stmt2 from ' select b from t1 where a <= 2 ' ;
  245. execute stmt2 ;
  246. execute stmt1 ;
  247. # switch between statement handlers of the same query
  248. prepare stmt1 from ' select a from t1 where a <= 2 ' ;
  249. prepare stmt2 from ' select a from t1 where a <= 2 ' ;
  250. execute stmt2 ;
  251. execute stmt1 ;
  252. deallocate prepare stmt1 ;
  253. # Will the deallocate of stmt1 with the same query affect stmt2 ?
  254. execute stmt2 ;
  255. --disable_query_log
  256. select '------ show and misc tests ------' as test_sequence ;
  257. --enable_query_log
  258. --disable_warnings
  259. drop table if exists t2;
  260. --enable_warnings
  261. create table t2 
  262. (
  263.   a int primary key, b char(10)
  264. );
  265. ################ SHOW COMMANDS ################
  266. prepare stmt4 from ' show databases ';
  267. execute stmt4;
  268. prepare stmt4 from ' show tables from test like ''t2%'' ';
  269. execute stmt4;
  270. prepare stmt4 from ' show columns from t2 from test like ''a%'' ';
  271. execute stmt4;
  272. create index t2_idx on t2(b);
  273. prepare stmt4 from ' show index from t2 from test ';
  274. execute stmt4;
  275. prepare stmt4 from ' show table status from test like ''t2%'' ';
  276. # egalize date and time values
  277. --replace_column 12 # 13 # 14 #
  278. --replace_result 2147483647 64424509439
  279. # Bug#4288 : prepared statement 'show table status ..', wrong output on execute
  280. execute stmt4;
  281. # try the same with the big table
  282. prepare stmt4 from ' show table status from test like ''t9%'' ';
  283. # egalize date and time values
  284. --replace_column 12 # 13 # 14 #
  285. --replace_result 2147483647 4294967295
  286. # Bug#4288
  287. execute stmt4;
  288. prepare stmt4 from ' show status like ''Threads_running'' ';
  289. execute stmt4;
  290. prepare stmt4 from ' show variables like ''sql_mode'' ';
  291. execute stmt4;
  292. prepare stmt4 from ' show engine bdb logs ';
  293. # The output depends on the history (actions of the bdb engine).
  294. # That is the reason why, we switch the output here off.
  295. #   (The real output will be tested in ps_6bdb.test)
  296. # --replace_result $MYSQL_TEST_DIR TEST_DIR
  297. --disable_result_log
  298. execute stmt4;
  299. --enable_result_log
  300. prepare stmt4 from ' show grants for user ';
  301. --error 1295
  302. prepare stmt4 from ' show create table t2 ';
  303. --error 1295
  304. prepare stmt4 from ' show master status ';
  305. --error 1295
  306. prepare stmt4 from ' show master logs ';
  307. --error 1295
  308. prepare stmt4 from ' show slave status ';
  309. --error 1295
  310. prepare stmt4 from ' show warnings limit 20 ';
  311. --error 1295
  312. prepare stmt4 from ' show errors limit 20 ';
  313. prepare stmt4 from ' show storage engines ';
  314. --replace_column 2 YES/NO
  315. execute stmt4;
  316. ################ MISC STUFF ################
  317. ## get a warning and an error
  318. # cases derived from client_test.c: test_warnings(), test_errors()
  319. --disable_warnings
  320. drop table if exists t5;
  321. --enable_warnings
  322. prepare stmt1 from ' drop table if exists t5 ' ;
  323. execute stmt1 ;
  324. prepare stmt1 from ' drop table t5 ' ;
  325. --error 1051
  326. execute stmt1 ;
  327. ## SELECT @@version
  328. # cases derived from client_test.c: test_select_version()
  329. #
  330. # TODO: Metadata check is temporary disabled here, because metadata of 
  331. # this statement also depends on @@version contents and you can't apply
  332. # replace_column and replace_result to it. It will be enabled again when 
  333. # support of replace_column and replace_result on metadata will be
  334. # implemented.
  335. #
  336. #--enable_metadata
  337. prepare stmt1 from ' SELECT @@version ' ;
  338. # egalize the version
  339. --replace_column 1 <version>
  340. execute stmt1 ;
  341. #--disable_metadata
  342. ## do @var:= and set @var=
  343. # cases derived from client_test.c: test_do_set()
  344. prepare stmt_do from ' do @var:=  (1 in (select a from t1)) ' ;
  345. prepare stmt_set from ' set @var= (1 in (select a from t1)) ' ;
  346. let $1= 3 ;
  347. while ($1)
  348. {
  349.   execute stmt_do ;
  350.   --disable_query_log
  351.   select @var as 'content of @var is:' ;
  352.   --enable_query_log
  353.   execute stmt_set ;
  354.   --disable_query_log
  355.   select @var as 'content of @var is:' ;
  356.   --enable_query_log
  357.   dec $1 ;
  358. }
  359. # the same test with a table containing one column and 'select *'
  360. --disable_warnings
  361. drop table if exists t5 ;
  362. --enable_warnings
  363. create table t5 (a int) ;
  364. prepare stmt_do from ' do @var:=  (1 in (select a from t5)) ' ;
  365. prepare stmt_set from ' set @var= (1 in (select a from t5)) ' ;
  366. let $1= 3 ;
  367. while ($1)
  368. {
  369.   execute stmt_do ;
  370.   --disable_query_log
  371.   select @var as 'content of @var is:' ;
  372.   --enable_query_log
  373.   execute stmt_set ;
  374.   --disable_query_log
  375.   select @var as 'content of @var is:' ;
  376.   --enable_query_log
  377.   dec $1 ;
  378. }
  379. drop table t5 ;
  380. deallocate prepare stmt_do ;
  381. deallocate prepare stmt_set ;
  382. ## nonsense like prepare of prepare,execute or deallocate
  383. --error 1064
  384. prepare stmt1 from ' prepare stmt2 from '' select 1 ''  ' ;
  385. --error 1064
  386. prepare stmt1 from ' execute stmt2 ' ;
  387. --error 1064
  388. prepare stmt1 from ' deallocate prepare never_prepared ' ;
  389. ## switch the database connection
  390. --error 1295
  391. prepare stmt4 from ' use test ' ;
  392. ## create/drop database
  393. --error 1295
  394. prepare stmt3 from ' create database mysqltest ';
  395. create database mysqltest ;
  396. --error 1295
  397. prepare stmt3 from ' drop database mysqltest ';
  398. drop database mysqltest ;
  399. ## grant/revoke + drop user
  400. --error 1295
  401. prepare stmt3 from ' grant all on test.t1 to drop_user@localhost
  402. identified by ''looser'' ';
  403. grant all on test.t1 to drop_user@localhost
  404. identified by 'looser' ;
  405. --error 1295
  406. prepare stmt3 from ' revoke all privileges on test.t1 from 
  407. drop_user@localhost ';
  408. revoke all privileges on test.t1 from drop_user@localhost ;
  409. --error 1295
  410. prepare stmt3 from ' drop user drop_user@localhost ';
  411. drop user drop_user@localhost;
  412. #### table related commands
  413. ## describe
  414. prepare stmt3 from ' describe t2 ';
  415. execute stmt3;
  416. drop table t2 ;
  417. --error 1146
  418. execute stmt3;
  419. ## lock/unlock
  420. --error 1295
  421. prepare stmt3 from ' lock tables t1 read ' ;
  422. --error 1295
  423. prepare stmt3 from ' unlock tables ' ;
  424. ## Load/Unload table contents
  425. --error 1295
  426. prepare stmt1 from ' load data infile ''data.txt''
  427. into table t1 fields terminated by ''t'' ';
  428. prepare stmt1 from ' select * into outfile ''data.txt'' from t1 ';
  429. execute stmt1 ;
  430. ## 
  431. --error 1295
  432. prepare stmt1 from ' optimize table t1 ' ;
  433. --error 1295
  434. prepare stmt1 from ' analyze table t1 ' ;
  435. --error 1295
  436. prepare stmt1 from ' checksum table t1 ' ;
  437. --error 1295
  438. prepare stmt1 from ' repair table t1 ' ;
  439. --error 1295
  440. prepare stmt1 from ' restore table t1 from ''data.txt'' ' ;
  441. ## handler
  442. --error 1295
  443. prepare stmt1 from ' handler t1 open ';
  444. ## commit/rollback
  445. --error 1295
  446. prepare stmt3 from ' commit ' ;
  447. --error 1295
  448. prepare stmt3 from ' rollback ' ;
  449. ## switch the sql_mode
  450. prepare stmt4 from ' SET sql_mode=ansi ';
  451. execute stmt4;
  452. # check if the sql_mode is now ansi
  453. select 'a' || 'b' ;
  454. prepare stmt4 from ' SET sql_mode="" ';
  455. execute stmt4;
  456. # check if the sql_mode is not ansi
  457. select 'a' || 'b' ;
  458. # Will a switch of the sqlmode affect the execution of already prepared 
  459. # statements ?
  460. prepare stmt5 from ' select ''a'' || ''b'' ' ;
  461. execute stmt5;
  462. SET sql_mode=ansi;
  463. execute stmt5;
  464. SET sql_mode="";
  465. --error 1295
  466. prepare stmt1 from ' flush local privileges ' ;
  467. --error 1295
  468. prepare stmt1 from ' reset query cache ' ;
  469. --error 1295
  470. prepare stmt1 from ' KILL 0 ';
  471. ## simple explain
  472. # cases derived from client_test.c: test_explain_bug()
  473. prepare stmt1 from ' explain select a from t1 order by b ';
  474. # PS protocol gives slightly different metadata
  475. --disable_ps_protocol
  476. --enable_metadata
  477. execute stmt1;
  478. --disable_metadata
  479. SET @arg00=1 ;
  480. prepare stmt1 from ' explain select a from t1 where a > ? order by b ';
  481. --enable_metadata
  482. execute stmt1 using @arg00;
  483. --disable_metadata
  484. --enable_ps_protocol
  485. ## parameters with probably problematic characters (quote, double  quote)
  486. # cases derived from client_test.c: test_logs()
  487. # try if 
  488. --disable_warnings
  489. drop table if exists t2;
  490. --enable_warnings
  491. create table t2 (id smallint, name varchar(20)) ;
  492. prepare stmt1 from ' insert into t2 values(?, ?) ' ;
  493. set @id= 9876 ;
  494. set @arg00= 'MySQL - Open Source Database' ;
  495. set @arg01= "'" ;
  496. set @arg02= '"' ;
  497. set @arg03= "my'sql'" ;
  498. set @arg04= 'my"sql"' ;
  499. insert into t2 values ( @id , @arg00 );
  500. insert into t2 values ( @id , @arg01 );
  501. insert into t2 values ( @id , @arg02 );
  502. insert into t2 values ( @id , @arg03 );
  503. insert into t2 values ( @id , @arg04 );
  504. prepare stmt1 from ' select * from t2 where id= ? and name= ? ';
  505. execute stmt1 using @id, @arg00 ;
  506. execute stmt1 using @id, @arg01 ;
  507. execute stmt1 using @id, @arg02 ;
  508. execute stmt1 using @id, @arg03 ;
  509. execute stmt1 using @id, @arg04 ;
  510. drop table t2;
  511. ################ CREATE/DROP/ALTER/RENAME TESTS ################
  512. --disable_query_log
  513. select '------ create/drop/alter/rename tests ------' as test_sequence ;
  514. --enable_query_log
  515. --disable_warnings
  516. drop table if exists t2, t3;
  517. --enable_warnings
  518. ## DROP TABLE
  519. prepare stmt_drop from ' drop table if exists t2 ' ;
  520. --disable_warnings
  521. execute stmt_drop;
  522. --enable_warnings
  523. ## CREATE TABLE
  524. prepare stmt_create from ' create table t2 (
  525.                              a int primary key, b char(10)) ';
  526. execute stmt_create;
  527. prepare stmt3 from ' create table t3 like t2 ';
  528. execute stmt3;
  529. drop table t3;
  530. ## CREATE TABLE .. SELECT
  531. set @arg00=1;
  532. prepare stmt3 from ' create table t3 (m int) select ? as m ' ;
  533. # Bug#4280 server hangs, prepared "create table .. as select ? .."
  534. execute stmt3 using @arg00;
  535. select m from t3;
  536. drop table t3;
  537. --error 1295
  538. prepare stmt3 from ' create index t2_idx on t2(b) ';
  539. --error 1295
  540. prepare stmt3 from ' drop index t2_idx on t2 ' ; 
  541. --error 1295
  542. prepare stmt3 from ' alter table t2 drop primary key ';
  543. ## RENAME TABLE
  544. --disable_warnings
  545. drop table if exists new_t2;
  546. --enable_warnings
  547. prepare stmt3 from ' rename table t2 to new_t2 ';
  548. execute stmt3;
  549. --error 1050
  550. execute stmt3;
  551. rename table new_t2 to t2;
  552. drop table t2;
  553. ## RENAME more than on TABLE within one statement
  554. # cases derived from client_test.c: test_rename()
  555. prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ;
  556. create table t5 (a int) ;
  557. # rename must fail, t7 does not exist
  558. # Clean up the filename here because embedded server reports whole path
  559. --replace_result \ / $MYSQL_TEST_DIR . /var/master-data/ /
  560. --error 1017
  561. execute stmt1 ;
  562. create table t7 (a int) ;
  563. # rename, t5 -> t6 and t7 -> t8
  564. execute stmt1 ;
  565. # rename must fail, t5 and t7 does not exist t6 and t8 already exist
  566. --error 1050
  567. execute stmt1 ;
  568. rename table t6 to t5, t8 to t7 ;
  569. # rename, t5 -> t6 and t7 -> t8
  570. execute stmt1 ;
  571. drop table t6, t8 ;
  572. ################ BIG STATEMENT TESTS ################
  573. --disable_query_log
  574. select '------ big statement tests ------' as test_sequence ;
  575. --enable_query_log
  576. # The following tests use huge numbers of lines, characters or parameters
  577. # per prepared statement.
  578. # I assume the server and also the client (mysqltest) are stressed.
  579. #
  580. # Attention: The limits used are NOT derived from the manual
  581. #            or other sources.
  582. ## many lines ( 50 )
  583. let $my_stmt= select 'ABC' as my_const_col from t1 where
  584. 1 = 1 AND
  585. 1 = 1 AND
  586. 1 = 1 AND
  587. 1 = 1 AND
  588. 1 = 1 AND
  589. 1 = 1 AND
  590. 1 = 1 AND
  591. 1 = 1 AND
  592. 1 = 1 AND
  593. 1 = 1 AND
  594. 1 = 1 AND
  595. 1 = 1 AND
  596. 1 = 1 AND
  597. 1 = 1 AND
  598. 1 = 1 AND
  599. 1 = 1 AND
  600. 1 = 1 AND
  601. 1 = 1 AND
  602. 1 = 1 AND
  603. 1 = 1 AND
  604. 1 = 1 AND
  605. 1 = 1 AND
  606. 1 = 1 AND
  607. 1 = 1 AND
  608. 1 = 1 AND
  609. 1 = 1 AND
  610. 1 = 1 AND
  611. 1 = 1 AND
  612. 1 = 1 AND
  613. 1 = 1 AND
  614. 1 = 1 AND
  615. 1 = 1 AND
  616. 1 = 1 AND
  617. 1 = 1 AND
  618. 1 = 1 AND
  619. 1 = 1 AND
  620. 1 = 1 AND
  621. 1 = 1 AND
  622. 1 = 1 AND
  623. 1 = 1 AND
  624. 1 = 1 AND
  625. 1 = 1 AND
  626. 1 = 1 AND
  627. 1 = 1 AND
  628. 1 = 1 AND
  629. 1 = 1 AND
  630. 1 = 1 AND
  631. 1 = 1 AND
  632. 1 = 1 ;
  633. eval ($my_stmt) ;
  634. eval prepare stmt1 from "$my_stmt" ;
  635. execute stmt1 ;
  636. execute stmt1 ;
  637. ## many characters ( about 1400 )
  638. let $my_stmt= select 'ABC' as my_const_col FROM t1 WHERE
  639. '1234567890123456789012345678901234567890123456789012345678901234567890'
  640. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  641. '1234567890123456789012345678901234567890123456789012345678901234567890'
  642. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  643. '1234567890123456789012345678901234567890123456789012345678901234567890'
  644. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  645. '1234567890123456789012345678901234567890123456789012345678901234567890'
  646. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  647. '1234567890123456789012345678901234567890123456789012345678901234567890'
  648. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  649. '1234567890123456789012345678901234567890123456789012345678901234567890'
  650. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  651. '1234567890123456789012345678901234567890123456789012345678901234567890'
  652. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  653. '1234567890123456789012345678901234567890123456789012345678901234567890'
  654. = '1234567890123456789012345678901234567890123456789012345678901234567890' AND
  655. '1234567890123456789012345678901234567890123456789012345678901234567890'
  656. = '1234567890123456789012345678901234567890123456789012345678901234567890' ;
  657. eval ($my_stmt) ;
  658. eval prepare stmt1 from "$my_stmt" ;
  659. execute stmt1 ;
  660. execute stmt1 ;
  661. ## many parameters ( 50 )
  662. --disable_query_log
  663. set @arg00= 1;
  664. set @arg01= 1; 
  665. set @arg02= 1;
  666. set @arg03= 1; 
  667. set @arg04= 1;
  668. set @arg05= 1; 
  669. set @arg06= 1;
  670. set @arg07= 1;
  671. set @arg10= 1;
  672. set @arg11= 1; 
  673. set @arg12= 1;
  674. set @arg13= 1; 
  675. set @arg14= 1;
  676. set @arg15= 1; 
  677. set @arg16= 1;
  678. set @arg17= 1; 
  679. set @arg20= 1;
  680. set @arg21= 1; 
  681. set @arg22= 1;
  682. set @arg23= 1; 
  683. set @arg24= 1;
  684. set @arg25= 1; 
  685. set @arg26= 1;
  686. set @arg27= 1; 
  687. set @arg30= 1;
  688. set @arg31= 1; 
  689. set @arg32= 1;
  690. set @arg33= 1; 
  691. set @arg34= 1;
  692. set @arg35= 1; 
  693. set @arg36= 1;
  694. set @arg37= 1; 
  695. set @arg40= 1;
  696. set @arg41= 1; 
  697. set @arg42= 1;
  698. set @arg43= 1; 
  699. set @arg44= 1;
  700. set @arg45= 1; 
  701. set @arg46= 1;
  702. set @arg47= 1; 
  703. set @arg50= 1;
  704. set @arg51= 1; 
  705. set @arg52= 1;
  706. set @arg53= 1; 
  707. set @arg54= 1;
  708. set @arg55= 1; 
  709. set @arg56= 1;
  710. set @arg57= 1; 
  711. set @arg60= 1;
  712. set @arg61= 1;
  713. --enable_query_log
  714. select 'ABC' as my_const_col FROM t1 WHERE
  715. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  716. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  717. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  718. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  719. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  720. @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and @arg00=@arg00 and
  721. @arg00=@arg00 ;
  722. prepare stmt1 from ' select ''ABC'' as my_const_col FROM t1 WHERE
  723.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  724.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  725.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  726.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  727.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  728.  ? = ?  and  ? = ?  and  ? = ?  and  ? = ?  and
  729.  ? = ?  ' ;
  730. execute stmt1 using 
  731. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  732. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  733. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  734. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  735. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  736. @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  737. @arg00, @arg00;
  738. execute stmt1 using 
  739. @arg00, @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, 
  740. @arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17,
  741. @arg20, @arg21, @arg22, @arg23, @arg24, @arg25, @arg26, @arg27, 
  742. @arg30, @arg31, @arg32, @arg33, @arg34, @arg35, @arg36, @arg37, 
  743. @arg40, @arg41, @arg42, @arg43, @arg44, @arg45, @arg46, @arg47, 
  744. @arg50, @arg51, @arg52, @arg53, @arg54, @arg55, @arg56, @arg57, 
  745. @arg60, @arg61 ;
  746. # cases derived from client_test.c: test_mem_overun()
  747. --disable_warnings
  748. drop table if exists t5 ;
  749. --enable_warnings
  750. set @col_num= 1000 ;
  751. --disable_query_log
  752. set @string= 'create table t5( ' ;
  753. let $1=`select @col_num - 1` ;
  754. while ($1)
  755. {
  756.   eval set @string= concat(@string, 'c$1 int,') ;
  757.   dec $1 ;
  758. }
  759. set @string= concat(@string, 'c0 int)' );
  760. --enable_query_log
  761. select @string as "" ;
  762. prepare stmt1 from @string ;
  763. execute stmt1 ;
  764. --disable_query_log
  765. set @string= 'insert into t5 values(' ;
  766. let $1=`select @col_num - 1` ;
  767. while ($1)
  768. {
  769.   eval set @string= concat(@string, '1 ,') ;
  770.   dec $1 ;
  771. }
  772. eval set @string= concat(@string, '1 )') ;
  773. --enable_query_log
  774. select @string as "" ;
  775. prepare stmt1 from @string ;
  776. execute stmt1 ;
  777. prepare stmt1 from ' select * from t5 ' ;
  778. --enable_metadata
  779. # prevent too long lines
  780. --vertical_results
  781. --disable_result_log
  782. execute stmt1 ;
  783. --enable_result_log
  784. --disable_metadata
  785. --horizontal_results
  786. drop table t5 ;
  787. ##### RULES OF THUMB TO PRESERVE THE SYSTEMATICS OF THE PS TEST CASES #####
  788. #
  789. # 0. You  don't have the time to 
  790. #    - read and pay attention to these rules of thumb
  791. #    - accept that QA may move your test case to a different place
  792. #      (I will not change your code!!) .
  793. #    Please append your test case to
  794. #        t/ps.test
  795. #
  796. # 1. You have more time and want to get as much value from you test case as
  797. #    possible. Please try to make the following decisions:
  798. #
  799. #    Will the execution or result of the sub test case depend on the
  800. #    properties of a storage engine ?
  801. #
  802. #      NO   --> alter t/ps_1general.test (Example: Command with syntax error)
  803. #               If you need a table, please try to use
  804. #               t1               - very simple table
  805. #               t9 - table with nearly all available column types
  806. #               whenever possible.
  807. #
  808. #               The structure and the content of these tables can be found in
  809. #               include/ps_create.inc  CREATE TABLE ...
  810. #               include/ps_renew.inc   DELETE all rows and INSERT some rows
  811. #
  812. #               Both tables are managed by the same storage engine.
  813. #               The type of the storage engine is stored in the variable 
  814. #               '$type' .  In ps_1general.test $type is set to 'MYISAM'.
  815. #    
  816. #               Please feel free to source ps_create.inc or ps_renew.inc
  817. #               whenever you think it helps. But please restore the original
  818. #               state of these tables after your tests, because the following
  819. #               statements may depend on it.
  820. #
  821. #      YES
  822. #       |
  823. #       |
  824. #    Is it possible to apply the sub test case to all table types ?
  825. #      YES  --> alter include/ps_query.inc   (for SELECTs)
  826. #                     include/ps_modify.inc  (for INSERT/UPDATE/DELETE)
  827. #                     include/ps_modify1.inc (also for INSERT/UPDATE/DELETE,
  828. #                                but t/ps_5merge.test will not source that file)
  829. #               Please try to find an appropriate place within the file.
  830. #               It would be nice if we have some systematics in the
  831. #               order of the sub test cases (if possible).
  832. #
  833. #               Please be aware, that
  834. #                  include: ps_query.inc, ps_modify.inc, ps_modify1.inc
  835. #               will be sourced by several test case files stored within the 
  836. #               subdirectory 't'. So every change here will affect several test
  837. #               cases.
  838. #
  839. #      NO
  840. #       |
  841. #       |
  842. #    Append the sub test case to the appropriate 
  843. #                  ps_<number><table type>.test  .
  844. #
  845. # 2. The current structure of the PS tests
  846. #
  847. #    t/ps_1general.test     Check of basic PS features, SHOW commands and DDL
  848. #                           The tests should not depend on the table type.
  849. #
  850. #    t/ps_2myisam           Check of PS on tables of type MYISAM .
  851. #    t/ps_3innodb           Check of PS on tables of type InnoDB .
  852. #    ...
  853. #    t/ps_6bdb              Check of PS on tables of type BDB .
  854. #         All storage engine related tests use the variable $type to hold the
  855. #         name of the storage engine.        
  856. #
  857. #    include/ps_query.inc   test cases with SELECT/... 
  858. #                           These test cases should not modify the content or
  859. #                           the structure (DROP/ALTER..) of the tables
  860. #                           't1' and 't9'.
  861. #    include/ps_modify.inc  test cases with INSERT/UPDATE/... 
  862. #                           These test cases should not modify the structure 
  863. #                           (DROP/ALTER..) of the tables
  864. #                           't1' and 't9'.
  865. #         These two test sequences will be applied to all table types .
  866. #
  867. #    include/ps_modify1.inc test cases with INSERT/UPDATE/...
  868. #         This test sequences will be applied to all table types 
  869. #         except MERGE tables.
  870. #
  871. #    include/ps_create.inc  DROP and CREATE of the tables 
  872. #                             't1' and 't9' .
  873. #    include/ps_renew.inc   DELETE all rows and INSERT some rows, that means
  874. #                           recreate the original content of these tables.
  875. #         Please do not alter the commands concerning these two tables.
  876. #
  877. #  Please feel free and encouraged to exploit the current code sharing
  878. #  mechanism of the 'ps_<number><table type>' test cases. It is an convenient
  879. #  way to check all storage engines.
  880. #
  881. #  Thank you for reading these rules of thumb.
  882. #
  883. #     Matthias
  884. # End of 4.1 tests