mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Bug#33851 Passing UNSIGNED param to EXECUTE returns ERROR 1210
The problem is that passing anything other than a integer to a limit clause in a prepared statement would fail. This limitation was introduced to avoid replication problems (e.g: replicating the statement with a string argument would cause a parse failure in the slave). The solution is to convert arguments to the limit clause to a integer value and use this converted value when persisting the query to the log. mysql-test/r/limit.result: Update test case result. mysql-test/r/ps.result: Add test case result for Bug#33851 mysql-test/r/rpl_user_variables.result: Test case result for replication of prepared statement with limit clause. mysql-test/t/limit.test: Test parameters to limit clause. mysql-test/t/ps.test: Add test case for Bug#33851 mysql-test/t/rpl_user_variables.test: Test replication of a parameter which value is converted. sql/item.cc: Convert value to integer if it's a parameter to a limit clause. sql/item.h: Flag signal that item is a parameter to a limit clause. sql/item_func.cc: Const member functions, object is not mutated. sql/sql_class.h: Const member functions, object is not mutated. sql/sql_yacc.yy: Flag that item is a parameter to a limit clause.
This commit is contained in:
@ -1861,4 +1861,34 @@ prepare stmt from "create view v1 as select * from t1";
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
prepare stmt from "select ?";
|
||||
set @arg= 123456789.987654321;
|
||||
select @arg;
|
||||
@arg
|
||||
123456789.987654321
|
||||
execute stmt using @arg;
|
||||
?
|
||||
123456789.987654321
|
||||
set @arg= "string";
|
||||
select @arg;
|
||||
@arg
|
||||
string
|
||||
execute stmt using @arg;
|
||||
?
|
||||
string
|
||||
set @arg= 123456;
|
||||
select @arg;
|
||||
@arg
|
||||
123456
|
||||
execute stmt using @arg;
|
||||
?
|
||||
123456
|
||||
set @arg= cast(-12345.54321 as decimal(20, 10));
|
||||
select @arg;
|
||||
@arg
|
||||
-12345.5432100000
|
||||
execute stmt using @arg;
|
||||
?
|
||||
-12345.5432100000
|
||||
deallocate prepare stmt;
|
||||
End of 5.0 tests.
|
||||
|
Reference in New Issue
Block a user