Bug #7498 User variable SET saves SIGNED BIGINT as UNSIGNED BIGINT

Submitted: 22 Dec 2004 23:12 Modified: 15 Aug 2006 3:18
Reporter: Arnout Veenman Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S2 (Serious)
Version:4.0.17 OS:Any (all)
Assigned to: Magnus Blåudd CPU Architecture:Any

[22 Dec 2004 23:12] Arnout Veenman
Description:
When SETting a user variable from an UNSIGNED BIGINT(20) field, it's being converted/stored in the user variable as a SIGNED BIGINT(20) value.

How to repeat:
CREATE TABLE `bigfailure` (
`afield` BIGINT UNSIGNED NOT NULL 
);
INSERT INTO `bigfailure` VALUES (18446744071710965857);

SET @a := (SELECT afield FROM bigfailure);
SELECT @a
[23 Dec 2004 6:53] Hartmut Holzgraefe
mysql> SELECT @a := afield FROM bigfailure;
+--------------+
| @a := afield |
+--------------+
|  -1998585759 |
+--------------+
1 row in set (0.10 sec)
[23 Dec 2004 10:08] Heikki Tuuri
Hi!

Changing the category to 'MySQL Server' because the problem hardly is InnoDB-related.

--Heikki
[9 Aug 2005 14:34] Mark Matthews
Please retest to determine platform-specificness.
[13 Aug 2005 7:20] Vasily Kishkin
I tested on Linux SUSE 9.3 and Windows 2003. I have same result for both cases:

mysql> SELECT @a
    -> ;
+-------------+
| @a          |
+-------------+
| -1998585759 |
+-------------+
[16 May 2006 10:41] Magnus Blåudd
Occurs both in 4.1 and 5.0
[30 May 2006 8:35] Magnus Blåudd
This looks like two problems:

1. The "subselect_single_select_engine" returns no unsigned flag. This can be seen with the below query which dowsn't return any rows.
mysql> select * from bigfailure where afield = (SELECT afield FROM bigfailure); 
Empty set (0.02 sec)

2. The Item_func_set/get_user_var does not care about the unsigned flag.
mysql> set @a=18446744071710965857;
Query OK, 0 rows affected (0.01 sec)

mysql> select @a;
+-------------+
| @a          |
+-------------+
| -1998585759 |
+-------------+
[8 Jun 2006 11:03] 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/7383
[8 Jun 2006 12:15] Magnus Blåudd
Need to check how this will work in 5.0 before proceeding with reviewing the patch. Maybe I make a new one for 4.1 that better works with 5.0
[8 Jun 2006 13:41] 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/7393
[9 Jun 2006 15:05] Magnus Blåudd
Will fix this from 5.0 and up. Found a problem in combination with ps_protocol. The compare functions to use for a subselect is determined at prepare phase, when the value has not yet been converted into a Item_cache_int and thus it's not known that the Item is unsigned. This makes the compare function 'compare_int_signed_unsigned' to be selected, it should be 'compare_int_unsigned'
[9 Jun 2006 17:36] 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/7455
[14 Jun 2006 10:32] Alexander Barkov
Magnus, the patch looks ok to me.
If Serg is busy, feel free to set me as a reviewer.
[20 Jul 2006 11:43] Magnus Blåudd
Pushed to 5.0.25
[9 Aug 2006 12:54] Jon Stephens
Documented bugfix in 5.0.25 changelog.

Need to know if/when this is pushed to 5.1. Thanks!
[14 Aug 2006 21:28] Konstantin Osipov
Merged into 5.1.12
[15 Aug 2006 3:17] Paul DuBois
Noted in 5.1.12 changelog.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.046 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.