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

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # SQL Syntax for Prepared Statements test
  3. #
  4. --disable_warnings
  5. drop table if exists t1,t2;
  6. --enable_warnings
  7. create table t1
  8. (
  9.   a int primary key,
  10.   b char(10)
  11. );
  12. insert into t1 values (1,'one');
  13. insert into t1 values (2,'two');
  14. insert into t1 values (3,'three');
  15. insert into t1 values (4,'four');
  16. # basic functionality
  17. set @a=2;
  18. prepare stmt1 from 'select * from t1 where a <= ?';
  19. execute stmt1 using @a;
  20. set @a=3;
  21. execute stmt1 using @a;
  22. # non-existant statement
  23. --error 1243
  24. deallocate prepare no_such_statement;
  25. --error 1210
  26. execute stmt1;
  27. # Nesting ps commands is not allowed: 
  28. --error 1064
  29. prepare stmt2 from 'prepare nested_stmt from "select 1"';
  30. --error 1064
  31. prepare stmt2 from 'execute stmt1';
  32. --error 1064
  33. prepare stmt2 from 'deallocate prepare z';
  34. # PS insert 
  35. prepare stmt3 from 'insert into t1 values (?,?)';
  36. set @arg1=5, @arg2='five';
  37. execute stmt3 using @arg1, @arg2;
  38. select * from t1 where a>3;
  39. # PS update 
  40. prepare stmt4 from 'update t1 set a=? where b=?';
  41. set @arg1=55, @arg2='five';
  42. execute stmt4 using @arg1, @arg2;
  43. select * from t1 where a>3;
  44. # PS create/delete
  45. prepare stmt4 from 'create table t2 (a int)';
  46. execute stmt4;
  47. prepare stmt4 from 'drop table t2';
  48. execute stmt4;
  49. # Do something that will cause error
  50. --error 1051
  51. execute stmt4;
  52. # placeholders in result field names.
  53. prepare stmt5 from 'select ? + a from t1';
  54. set @a=1;
  55. execute stmt5 using @a;
  56. execute stmt5 using @no_such_var;
  57. set @nullvar=1;
  58. set @nullvar=NULL;
  59. execute stmt5 using @nullvar;
  60. set @nullvar2=NULL;
  61. execute stmt5 using @nullvar2;
  62. # Check that multiple SQL statements are disabled inside PREPARE
  63. --error 1064
  64. prepare stmt6 from 'select 1; select2';
  65. --error 1064
  66. prepare stmt6 from 'insert into t1 values (5,"five"); select2';
  67. # This shouldn't parse
  68. --error 1064
  69. explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';
  70. create table t2
  71. (
  72.   a int
  73. );
  74. insert into t2 values (0);
  75. # parameter is NULL
  76. set @arg00=NULL ;
  77. prepare stmt1 from 'select 1 FROM t2 where a=?' ;
  78. execute stmt1 using @arg00 ;
  79. # prepare using variables:
  80. --error 1064
  81. prepare stmt1 from @nosuchvar;
  82. set @ivar= 1234;
  83. --error 1064
  84. prepare stmt1 from @ivar;
  85. set @fvar= 123.4567;
  86. --error 1064
  87. prepare stmt1 from @fvar;
  88. drop table t1,t2;
  89. #
  90. # Bug #4105: Server crash on attempt to prepare a statement with character
  91. # set introducer
  92. #
  93. PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?";
  94. set @var='A';
  95. EXECUTE stmt1 USING @var;
  96. DEALLOCATE PREPARE stmt1;
  97. #
  98. # BUG#3486:  FOUND_ROWS() fails inside stored procedure [and prepared statement]
  99. #
  100. create table t1 (id int);
  101. prepare stmt1 from "select FOUND_ROWS()";
  102. select SQL_CALC_FOUND_ROWS * from t1;
  103. # Expect 0
  104. execute stmt1;
  105. insert into t1 values (1);
  106. select SQL_CALC_FOUND_ROWS * from t1;
  107. # Expect 1
  108. execute stmt1;
  109. # Expect 0
  110. execute stmt1;
  111. deallocate prepare stmt1;
  112. drop table t1;
  113. #
  114. # prepared EXPLAIN
  115. #
  116. create table t1 
  117. (
  118.   c1  tinyint, c2  smallint, c3  mediumint, c4  int,
  119.   c5  integer, c6  bigint, c7  float, c8  double,
  120.   c9  double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
  121.   c13 date, c14 datetime, c15 timestamp(14), c16 time,
  122.   c17 year, c18 bit, c19 bool, c20 char,
  123.   c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
  124.   c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
  125.   c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
  126.   c32 set('monday', 'tuesday', 'wednesday')
  127. ) engine = MYISAM ;
  128. create table t2 like t1;
  129. set @stmt= ' explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25 ' ;
  130. prepare stmt1 from @stmt ;
  131. execute stmt1 ;
  132. execute stmt1 ;
  133. explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25;
  134. deallocate prepare stmt1;
  135. drop tables t1,t2;
  136. #
  137. # parameters from variables (for field creation)
  138. #
  139. set @arg00=1;
  140. prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;
  141. execute stmt1 ;
  142. select m from t1;
  143. drop table t1;
  144. prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;
  145. execute stmt1 using @arg00;
  146. select m from t1;
  147. deallocate prepare stmt1;
  148. drop table t1;
  149. #
  150. # eq() for parameters
  151. #
  152. create table t1 (id int(10) unsigned NOT NULL default '0',
  153.                  name varchar(64) NOT NULL default '',
  154.                  PRIMARY KEY  (id), UNIQUE KEY `name` (`name`));
  155. insert into t1 values (1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7');
  156. prepare stmt1 from 'select name from t1 where id=? or id=?';
  157. set @id1=1,@id2=6;
  158. execute stmt1 using @id1, @id2;
  159. select name from t1 where id=1 or id=6;
  160. deallocate prepare stmt1;
  161. drop table t1;
  162. #
  163. # SHOW TABLE STATUS test
  164. #
  165. create table t1 ( a int primary key, b varchar(30)) engine = MYISAM ;
  166. prepare stmt1 from ' show table status from test like ''t1%'' ';
  167. --replace_column 8 4294967295 12 # 13 # 14 #
  168. execute stmt1;
  169. --replace_column 8 4294967295 12 # 13 # 14 #
  170. show table status from test like 't1%' ;
  171. deallocate prepare stmt1 ;
  172. drop table t1;
  173. #
  174. # Bug#4912 "mysqld crashs in case a statement is executed a second time":
  175. # negation elimination should work once and not break prepared statements
  176. create table t1(a varchar(2), b varchar(3));
  177. prepare stmt1 from "select a, b from t1 where (not (a='aa' and b < 'zzz'))";
  178. execute stmt1;
  179. execute stmt1;
  180. deallocate prepare stmt1;
  181. drop table t1;
  182. #
  183. # Bug#5034 "prepared "select 1 into @arg15", second execute crashes
  184. # server".
  185. # Check that descendands of select_result can be reused in prepared 
  186. # statements or are correctly created and deleted on each execute
  187. #
  188. prepare stmt1 from "select 1 into @var";
  189. execute stmt1;
  190. execute stmt1;
  191. prepare stmt1 from "create table t1 select 1 as i";
  192. execute stmt1;
  193. drop table t1;
  194. execute stmt1;
  195. prepare stmt1 from "insert into t1 select i from t1";
  196. execute stmt1;
  197. execute stmt1;
  198. prepare stmt1 from "select * from t1 into outfile 'f1.txt'";
  199. execute stmt1;
  200. deallocate prepare stmt1;
  201. drop table t1;
  202. # BUG#5242 "Prepared statement names are case sensitive"
  203. #
  204. prepare stmt1 from 'select 1';
  205. prepare STMT1 from 'select 2';
  206. execute sTmT1;
  207. deallocate prepare StMt1;
  208. --error 1243
  209. deallocate prepare Stmt1;
  210. # also check that statement names are in right charset.
  211. set names utf8;
  212. prepare `眉` from 'select 1234';
  213. execute `眉` ;
  214. set names latin1;
  215. execute `黗;
  216. set names default;
  217. # BUG#4368 "select * from t1 where a like ?" crashes server if a is in utf8
  218. # and ? is in latin1
  219. # Check that Item converting latin1 to utf8 (for LIKE function) is created
  220. # in memory of prepared statement.
  221. #
  222. create table t1 (a varchar(10)) charset=utf8;
  223. insert into t1 (a) values ('yahoo');
  224. set character_set_connection=latin1;
  225. prepare stmt from 'select a from t1 where a like ?';
  226. set @var='google';
  227. execute stmt using @var;
  228. execute stmt using @var;
  229. deallocate prepare stmt;
  230. drop table t1;
  231. # BUG#5510 "inserting Null in AutoIncrement primary key Column Fails" 
  232. # (prepared statements) 
  233. # The cause: misuse of internal MySQL 'Field' API.
  234. create table t1 (a bigint(20) not null primary key auto_increment);
  235. insert into t1 (a) values (null);
  236. select * from t1;
  237. prepare stmt from "insert into t1 (a) values (?)";
  238. set @var=null;
  239. execute stmt using @var;
  240. select * from t1;
  241. drop table t1;
  242. #
  243. # check the same for timestamps
  244. #
  245. create table t1 (a timestamp not null);
  246. prepare stmt from "insert into t1 (a) values (?)";
  247. execute stmt using @var;
  248. --disable_result_log
  249. select * from t1;
  250. --enable_result_log
  251. deallocate prepare stmt;
  252. drop table t1;
  253. # BUG#5688 "Upgraded 4.1.5 Server seg faults" # (prepared statements)
  254. # The test case speaks for itself.
  255. # Just another place where we used wrong memory root for Items created
  256. # during statement prepare.
  257. prepare stmt from "select 'abc' like convert('abc' using utf8)";
  258. execute stmt;
  259. execute stmt;
  260. deallocate prepare stmt;
  261. # BUG#5748 "Prepared statement with BETWEEN and bigint values crashes
  262. # mysqld". Just another place where an item tree modification must be 
  263. # rolled back.
  264. create table t1 ( a bigint );
  265. prepare stmt from 'select a from t1 where a between ? and ?';
  266. set @a=1;
  267. execute stmt using @a, @a;
  268. execute stmt using @a, @a;
  269. execute stmt using @a, @a;
  270. drop table t1;
  271. deallocate prepare stmt;
  272. #
  273. # Bug #5987 subselect in bool function crashes server (prepared statements):
  274. # don't overwrite transformed subselects with old arguments of a bool
  275. # function.
  276. #
  277. create table t1 (a int);
  278. prepare stmt from "select * from t1 where 1 > (1 in (SELECT * FROM t1))";
  279. execute stmt;
  280. execute stmt;
  281. execute stmt;
  282. drop table t1;
  283. deallocate prepare stmt;
  284. #
  285. # Test case for Bug#6042 "constants propogation works only once (prepared
  286. # statements): check that the query plan changes whenever we change
  287. # placeholder value.
  288. #
  289. create table t1 (a int, b int);
  290. insert into t1 (a, b) values (1,1), (1,2), (2,1), (2,2);
  291. prepare stmt from
  292. "explain select * from t1 where t1.a=2 and t1.a=t1.b and t1.b > 1 + ?";
  293. --replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
  294. set @v=5;
  295. execute stmt using @v;
  296. --replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
  297. set @v=0;
  298. execute stmt using @v;
  299. --replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
  300. set @v=5;
  301. execute stmt using @v;
  302. drop table t1;
  303. deallocate prepare stmt;
  304. #
  305. # A test case for Bug#5985 prepare stmt from "select rand(?)" crashes
  306. # server. Check that Item_func_rand is prepared-statements friendly.
  307. #
  308. create table t1 (a int);
  309. insert into t1 (a) values (1), (2), (3), (4);
  310. set @precision=10000000000;
  311. --replace_column 1 - 3 -
  312. select rand(), 
  313.        cast(rand(10)*@precision as unsigned integer) from t1;
  314. prepare stmt from
  315. "select rand(), 
  316.         cast(rand(10)*@precision as unsigned integer),
  317.         cast(rand(?)*@precision as unsigned integer) from t1";
  318. set @var=1;
  319. --replace_column 1 - 3 -
  320. execute stmt using @var;
  321. set @var=2;
  322. --replace_column 1 -
  323. execute stmt using @var;
  324. set @var=3;
  325. --replace_column 1 -
  326. execute stmt using @var;
  327. drop table t1;
  328. deallocate prepare stmt;
  329. #
  330. # A test case for Bug#6050 "EXECUTE stmt reports ambiguous fieldnames with
  331. # identical tables from different schemata"
  332. # Check that field name resolving in prepared statements works OK.
  333. #
  334. create database mysqltest1;
  335. create table t1 (a int);
  336. create table mysqltest1.t1 (a int);
  337. select * from t1, mysqltest1.t1;
  338. prepare stmt from "select * from t1, mysqltest1.t1";
  339. execute stmt;
  340. execute stmt;
  341. execute stmt;
  342. drop table t1;
  343. drop table mysqltest1.t1;
  344. drop database mysqltest1;
  345. deallocate prepare stmt; 
  346. select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2';
  347. prepare stmt from
  348. "select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'";
  349. execute stmt;
  350. execute stmt;
  351. execute stmt;
  352. deallocate prepare stmt;
  353. #
  354. # Test CREATE TABLE ... SELECT (Bug #6094)
  355. #
  356. create table t1 (a int); 
  357. insert into t1 values (1),(2),(3);
  358. create table t2 select * from t1;
  359. prepare stmt FROM 'create table t2 select * from t1';
  360. drop table t2;
  361. execute stmt;
  362. drop table t2;
  363. execute stmt;
  364. --error 1050
  365. execute stmt;
  366. drop table t2;
  367. execute stmt;
  368. drop table t1,t2;
  369. deallocate prepare stmt;
  370. #
  371. # Bug#6088 "FOUND_ROWS returns wrong values for prepared statements when
  372. # LIMIT is used"
  373. create table t1 (a int);
  374. insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
  375. prepare stmt from "select sql_calc_found_rows * from t1 limit 2";
  376. execute stmt;
  377. select found_rows();
  378. execute stmt;
  379. select found_rows();
  380. execute stmt;
  381. select found_rows();
  382. deallocate prepare stmt;
  383. drop table t1;
  384. #
  385. # Bug#6047 "permission problem when executing mysql_stmt_execute with derived
  386. # table"
  387. #
  388. CREATE TABLE t1 (N int, M tinyint); 
  389. INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0);
  390. PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2';
  391. EXECUTE stmt;
  392. DEALLOCATE PREPARE stmt;
  393. DROP TABLE t1;
  394. # Bug#6297 "prepared statement, wrong handling of <parameter> IS NULL"
  395. # Test that placeholders work with IS NULL/IS NOT NULL clauses. 
  396. #
  397. prepare stmt from "select ? is null, ? is not null, ?";
  398. select @no_such_var is null, @no_such_var is not null, @no_such_var;
  399. execute stmt using @no_such_var, @no_such_var, @no_such_var;
  400. set @var='abc';
  401. select @var is null, @var is not null, @var;
  402. execute stmt using @var, @var, @var;
  403. set @var=null;
  404. select @var is null, @var is not null, @var;
  405. execute stmt using @var, @var, @var;
  406. # Bug#6873 "PS, having with subquery, crash during execute"
  407. # check that if we modify having subtree, we update JOIN->having pointer
  408. #
  409. create table t1 (pnum char(3));
  410. create table t2 (pnum char(3));
  411. prepare stmt from "select pnum from t2 having pnum in (select 'p1' from t1)";
  412. execute stmt;
  413. execute stmt;
  414. execute stmt;
  415. deallocate prepare stmt;
  416. drop table t1, t2;
  417. #
  418. # Bug #6089: FOUND_ROWS returns wrong values when no table/view is used 
  419. #
  420. prepare stmt from "SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0";
  421. execute stmt;
  422. SELECT FOUND_ROWS();
  423. execute stmt;                                                                   
  424. SELECT FOUND_ROWS();                                                            
  425. deallocate prepare stmt;
  426. #
  427. # Bug#9096 "select doesn't return all matched records if prepared statements
  428. # is used"
  429. # The bug was is bad co-operation of the optimizer's algorithm which determines
  430. # which keys can be used to execute a query, constants propagation
  431. # part of the optimizer and parameter markers used by prepared statements.
  432. drop table if exists t1;
  433. create table t1 (c1 int(11) not null, c2 int(11) not null,
  434.              primary key  (c1,c2), key c2 (c2), key c1 (c1));
  435. insert into t1 values (200887, 860);
  436. insert into t1 values (200887, 200887);
  437. select * from t1 where (c1=200887 and c2=200887) or c2=860;
  438. prepare stmt from
  439. "select * from t1 where (c1=200887 and c2=200887) or c2=860";
  440. execute stmt;
  441. prepare stmt from
  442. "select * from t1 where (c1=200887 and c2=?) or c2=?";
  443. set @a=200887, @b=860;
  444. # this query did not return all matching rows
  445. execute stmt using @a, @b;
  446. deallocate prepare stmt;
  447. drop table t1;
  448. #
  449. # Bug#9777 - another occurrence of the problem stated in Bug#9096:
  450. # we can not compare basic constants by their names, because a placeholder
  451. # is a basic constant while his name is always '?'
  452. #
  453. create table t1 (
  454.    id bigint(20) not null auto_increment,
  455.    code varchar(20) character set utf8 collate utf8_bin not null default '',
  456.    company_name varchar(250) character set utf8 collate utf8_bin default null,
  457.    setup_mode tinyint(4) default null,
  458.    start_date datetime default null,
  459.    primary key  (id), unique key code (code)
  460. );
  461. create table t2 (
  462.    id bigint(20) not null auto_increment,
  463.    email varchar(250) character set utf8 collate utf8_bin default null,
  464.    name varchar(250) character set utf8 collate utf8_bin default null,
  465.    t1_id bigint(20) default null,
  466.    password varchar(250) character set utf8 collate utf8_bin default null,
  467.    primary_contact tinyint(4) not null default '0',
  468.    email_opt_in tinyint(4) not null default '1',
  469.    primary key  (id), unique key email (email), key t1_id (t1_id),
  470.    constraint t2_fk1 foreign key (t1_id) references t1 (id)
  471. );
  472. insert into t1 values
  473. (1, 'demo', 'demo s', 0, current_date()),
  474. (2, 'code2', 'name 2', 0, current_date()),
  475. (3, 'code3', 'name 3', 0, current_date());
  476. insert into t2 values
  477. (2, 'email1', 'name1', 3, 'password1', 0, 0),
  478. (3, 'email2', 'name1', 1, 'password2', 1, 0),
  479. (5, 'email3', 'name3', 2, 'password3', 0, 0);
  480. prepare stmt from 'select t2.id from t2, t1 where (t1.id=? and t2.t1_id=t1.id)';
  481. set @a=1;
  482. execute stmt using @a;
  483. select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);
  484. deallocate prepare stmt;
  485. drop table t1, t2;
  486. #
  487. # Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT
  488. # UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ...
  489. # SELECT with UNION".
  490. #
  491. create table t1 (id int);
  492. prepare stmt from "insert into t1 (id) select id from t1 union select id from t1";
  493. execute stmt;
  494. execute stmt;
  495. deallocate prepare stmt;
  496. drop table t1;
  497. #
  498. # Bug#11458 "Prepared statement with subselects return random data":
  499. # drop PARAM_TABLE_BIT from the list of tables used by a subquery
  500. #
  501. create table t1 (
  502.   id int(11) unsigned not null primary key auto_increment,
  503.   partner_id varchar(35) not null,
  504.   t1_status_id int(10) unsigned
  505. );
  506. insert into t1 values ("1", "partner1", "10"), ("2", "partner2", "10"),
  507.                       ("3", "partner3", "10"), ("4", "partner4", "10");
  508. create table t2 (
  509.   id int(11) unsigned not null default '0',
  510.   t1_line_id int(11) unsigned not null default '0',
  511.   article_id varchar(20),
  512.   sequence int(11) not null default '0',
  513.   primary key  (id,t1_line_id)
  514. );
  515. insert into t2 values ("1", "1", "sup", "0"), ("2", "1", "sup", "1"),
  516.                       ("2", "2", "sup", "2"), ("2", "3", "sup", "3"),
  517.                       ("2", "4", "imp", "4"), ("3", "1", "sup", "0"),
  518.                       ("4", "1", "sup", "0");
  519. create table t3 (
  520.   id int(11) not null default '0',
  521.   preceeding_id int(11) not null default '0',
  522.   primary key  (id,preceeding_id)
  523. );
  524. create table t4 (
  525.   user_id varchar(50) not null,
  526.   article_id varchar(20) not null,
  527.   primary key  (user_id,article_id)
  528. );
  529. insert into t4 values("nicke", "imp");
  530. prepare stmt from
  531. 'select distinct t1.partner_id
  532. from t1 left join t3 on t1.id = t3.id
  533.      left join t1 pp on pp.id = t3.preceeding_id
  534. where
  535.   exists (
  536.     select *
  537.     from t2 as pl_inner
  538.     where pl_inner.id = t1.id
  539.     and pl_inner.sequence <= (
  540.       select min(sequence) from t2 pl_seqnr
  541.       where pl_seqnr.id = t1.id
  542.     )
  543.     and exists (
  544.       select * from t4
  545.       where t4.article_id = pl_inner.article_id
  546.       and t4.user_id = ?
  547.     )
  548.   )
  549.   and t1.id = ?
  550. group by t1.id
  551. having count(pp.id) = 0';
  552. set @user_id = 'nicke';
  553. set @id = '2';
  554. execute stmt using @user_id, @id;
  555. execute stmt using @user_id, @id;
  556. deallocate prepare stmt;
  557. drop table t1, t2, t3, t4;
  558. #
  559. # Bug#9379: make sure that Item::collation is reset when one sets
  560. # a parameter marker from a string variable.
  561. #
  562. prepare stmt from 'select ?=?';
  563. set @a='CHRISTINE           ';
  564. set @b='CHRISTINE';
  565. execute stmt using @a, @b;
  566. execute stmt using @a, @b;
  567. set @a=1, @b=2;
  568. execute stmt using @a, @b;
  569. set @a='CHRISTINE           ';
  570. set @b='CHRISTINE';
  571. execute stmt using @a, @b;
  572. deallocate prepare stmt;
  573. #
  574. # Bug#9442 Set parameter make query fail if column character set is UCS2
  575. #
  576. create table t1 (utext varchar(20) character set ucs2);
  577. insert into t1 values ("lily");
  578. insert into t1 values ("river");
  579. prepare stmt from 'select utext from t1 where utext like ?';
  580. set @param1='%%';
  581. execute stmt using @param1;
  582. execute stmt using @param1;
  583. select utext from t1 where utext like '%%';
  584. drop table t1;
  585. deallocate prepare stmt;
  586. #
  587. # Bug#11299 "prepared statement makes wrong SQL syntax in binlog which stops
  588. # replication": check that errouneous queries with placeholders are not
  589. # allowed
  590. #
  591. create table t1 (a int);
  592. --error 1064
  593. prepare stmt from "select ??";
  594. --error 1064
  595. prepare stmt from "select ?FROM t1";
  596. --error 1064
  597. prepare stmt from "select FROM t1 WHERE?=1";
  598. --error 1064
  599. prepare stmt from "update t1 set a=a+?WHERE 1";
  600. --disable_ps_protocol
  601. --error 1064
  602. select ?;
  603. --error 1064
  604. select ??;
  605. --error 1064
  606. select ? from t1;
  607. --enable_ps_protocol
  608. drop table t1;
  609. #
  610. # Bug#9359 "Prepared statements take snapshot of system vars at PREPARE
  611. # time"
  612. #
  613. prepare stmt from "select @@time_zone";
  614. execute stmt;
  615. set @@time_zone:='Japan';
  616. execute stmt;
  617. prepare stmt from "select @@tx_isolation";
  618. execute stmt;
  619. set transaction isolation level read committed;
  620. execute stmt;
  621. set transaction isolation level serializable;
  622. execute stmt;
  623. set @@tx_isolation=default;
  624. execute stmt;
  625. deallocate prepare stmt;
  626. #
  627. # Bug#14410 "Crash in Enum or Set type in CREATE TABLE and PS/SP"
  628. #
  629. # Part I. Make sure the typelib for ENUM is created in the statement memory
  630. # root.
  631. prepare stmt from "create temporary table t1 (letter enum('','a','b','c')
  632. not null)";
  633. execute stmt;
  634. drop table t1;
  635. execute stmt;
  636. drop table t1;
  637. execute stmt;
  638. drop table t1;
  639. # Part II. Make sure that when the default value is converted to UTF-8,
  640. # the new item is # created in the statement memory root.
  641. set names latin1;
  642. prepare stmt from "create table t1 (a enum('test') default 'test')
  643.  character set utf8";
  644. execute stmt;
  645. drop table t1;
  646. execute stmt;
  647. drop table t1;
  648. execute stmt;
  649. drop table t1;
  650. # Cleanup
  651. set names default;
  652. deallocate prepare stmt;
  653. # End of 4.1 tests