summaryrefslogtreecommitdiff
path: root/mysql-test/r/ps_11bugs.result
diff options
context:
space:
mode:
authorunknown <cmiller@zippy.cornsilk.net>2006-10-04 11:19:23 -0400
committerunknown <cmiller@zippy.cornsilk.net>2006-10-04 11:19:23 -0400
commitf60ea28841ee37627e1997850ad0a5c5bd311bc2 (patch)
tree6bde75c017094861446ff2261cdd8cd31de0e850 /mysql-test/r/ps_11bugs.result
parent00820e2b0aafe2d90b5ba8b56698ada25069af43 (diff)
downloadmariadb-git-f60ea28841ee37627e1997850ad0a5c5bd311bc2.tar.gz
Bug#19356: Assert on undefined @uservar in prepared statement execute
The executing code had a safety assertion so that it refused to free Items that it didn't create. However, there is a case, undefined user variables, which would put Items into the list to be freed. Instead, do something that is more risky in expectation that the code will be refactored soon, as Kostja wants to do: Remove the assertions from prepare() and execute(). Put one assertion at a higher level, before stmt->set_params_from_vars(), which may then create new to-be-freed Items . mysql-test/r/ps_11bugs.result: Create tests to prove that undefined variables work, as keys and not, and that variables explicitly assigned to Null work. mysql-test/t/ps_11bugs.test: Create tests to prove that undefined variables work, as keys and not, and that variables explicitly assigned to Null work. sql/sql_prepare.cc: Move a safety assertion up one level and higher, because there is legitimately a case where thd->free_list is not NULL going into Prepared_statement::{prepare,execute} methods. Kostja plans to refactor this code so that it is both safe and works. (Now it works, but isn't very safe.)
Diffstat (limited to 'mysql-test/r/ps_11bugs.result')
-rw-r--r--mysql-test/r/ps_11bugs.result33
1 files changed, 33 insertions, 0 deletions
diff --git a/mysql-test/r/ps_11bugs.result b/mysql-test/r/ps_11bugs.result
index c849c25d646..ebe161f46b3 100644
--- a/mysql-test/r/ps_11bugs.result
+++ b/mysql-test/r/ps_11bugs.result
@@ -130,3 +130,36 @@ prepare st_18492 from 'select * from t1 where 3 in (select (1+1) union select 1)
execute st_18492;
a
drop table t1;
+create table t1 (a int, b varchar(4));
+create table t2 (a int, b varchar(4), primary key(a));
+prepare stmt1 from 'insert into t1 (a, b) values (?, ?)';
+prepare stmt2 from 'insert into t2 (a, b) values (?, ?)';
+set @intarg= 11;
+set @varchararg= '2222';
+execute stmt1 using @intarg, @varchararg;
+execute stmt2 using @intarg, @varchararg;
+set @intarg= 12;
+execute stmt1 using @intarg, @UNDEFINED;
+execute stmt2 using @intarg, @UNDEFINED;
+set @intarg= 13;
+execute stmt1 using @UNDEFINED, @varchararg;
+execute stmt2 using @UNDEFINED, @varchararg;
+ERROR 23000: Column 'a' cannot be null
+set @intarg= 14;
+set @nullarg= Null;
+execute stmt1 using @UNDEFINED, @nullarg;
+execute stmt2 using @nullarg, @varchararg;
+ERROR 23000: Column 'a' cannot be null
+select * from t1;
+a b
+11 2222
+12 NULL
+NULL 2222
+NULL NULL
+select * from t2;
+a b
+11 2222
+12 NULL
+drop table t1;
+drop table t2;
+End of 5.0 tests.