Bug #33851 | Passing UNSIGNED param to EXECUTE returns ERROR 1210 | ||
---|---|---|---|
Submitted: | 13 Jan 2008 18:15 | Modified: | 15 Mar 2008 10:53 |
Reporter: | Ross Smith | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Prepared statements | Severity: | S3 (Non-critical) |
Version: | 5.0.54, 5.0.45-community-nt-log | OS: | Windows (XP SP2) |
Assigned to: | Davi Arnaut | CPU Architecture: | Any |
Tags: | 1210, regression |
[13 Jan 2008 18:15]
Ross Smith
[14 Jan 2008 4:39]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with MySQL 5.0.54 also.
[22 Jan 2008 1:27]
Ross Smith
I think http://bugs.mysql.com/bug.php?id=33859 refers to the same bug
[19 Feb 2008 16:58]
Davi Arnaut
A reduced test case: SET @limit = CONVERT(10, DECIMAL); PREPARE stmt FROM "SELECT 1 LIMIT ?"; EXECUTE stmt USING @limit; DEALLOCATE PREPARE stmt;
[27 Feb 2008 23:16]
Konstantin Osipov
Regression caused by a fix for Bug#28464
[28 Feb 2008 2:59]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/43125 ChangeSet@1.2591, 2008-02-27 23:59:18-03:00, davi@mysql.com +9 -0 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.
[28 Feb 2008 17:56]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/43167 ChangeSet@1.2591, 2008-02-28 11:34:08-03:00, davi@mysql.com +11 -0 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.
[28 Feb 2008 22:31]
Davi Arnaut
Queued in 5.0-runtime
[28 Feb 2008 22:41]
Davi Arnaut
Note that if the converted or the original value is negative, the error will be thrown (1210 - Incorrect arguments to EXECUTE).
[3 Mar 2008 18:14]
Bugs System
Pushed into 5.0.58
[3 Mar 2008 18:18]
Bugs System
Pushed into 5.1.24-rc
[3 Mar 2008 18:18]
Bugs System
Pushed into 6.0.5-alpha
[15 Mar 2008 10:53]
Jon Stephens
Documented bugfix in the 5.0.58, 5.1.24, and 6.0.5 changelogs as follows: Passing anything other than a integer to a LIMIT clause in a prepared statement would fail. (This limitation was introduced to avoid replication problems; for example, replicating the statement with a string argument would cause a parse failure in the slave). Now, arguments to the LIMIT clause are converted to integer values, and these converted values are used when logging the statement. Changed category from SP to PS to reflect the actual circumstances of the bug.
[2 Apr 2008 17:53]
Jon Stephens
Fix also noted in the 5.1.23-ndb-6.3.11 changelog.