>Description:
When attempting to select a result set by subtracting the value
of an unsigned INT column against UNIX_TIMESTAMP() the result set
is invalid.
>How-To-Repeat:
Test case:
mysql> create table t (ts int unsigned not null); insert into t values
(1008884715), (1008886691), (1008887691);
Query OK, 0 rows affected (0.05 sec)
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select (ts - unix_timestamp()) from t;
+-------------------------+
| (ts - unix_timestamp()) |
+-------------------------+
| 18446744073709551463 |
| 1823 |
| 2823 |
+-------------------------+
3 rows in set (0.01 sec)
mysql> alter table t modify ts int;
Query OK, 3 rows affected (0.19 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select (ts - unix_timestamp()) from t;
+-------------------------+
| (ts - unix_timestamp()) |
+-------------------------+
| -174 |
| 1802 |
| 2802 |
+-------------------------+
3 rows in set (0.01 sec)
mysql> alter table t modify ts int unsigned;
Query OK, 3 rows affected (0.24 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select (ts - unix_timestamp()) from t;
+-------------------------+
| (ts - unix_timestamp()) |
+-------------------------+
| 18446744073709551421 |
| 1781 |
| 2781 |
+-------------------------+
3 rows in set (0.00 sec)
mysql> set @ts=0; select @ts:=ts, (@ts - unix_timestamp()+0) from t;
Query OK, 0 rows affected (0.00 sec)
+------------+----------------------------+
| @ts:=ts | (@ts - unix_timestamp()+0) |
+------------+----------------------------+
| 1008884715 | -290 |
| 1008886691 | 1686 |
| 1008887691 | 2686 |
+------------+----------------------------+
3 rows in set (0.01 sec)
>Fix:
As shown above this can be correct by using a variable which I believe recasts
the
result set as a signed int.
This problem first appeared in 4.0.0-alpha and has been verified by multiple
people.
>Submitter-Id:
>Originator: Colin Faber
>Organization:
fpsn.net, Inc.
>MySQL support: none
>Synopsis: subtraction on an unsigned INT column against UNIX_TIMESTAMP() returns
>an invalid result set when the resulting value is below zero.
>Severity: serious
>Priority: high
>Category: mysql
>Class: sw-bug
>Release: mysql-4.0.0-alpha (Source distribution)
>Environment:
System:
FreeBSD 4.3-STABLE - SMP
GCC:
Using builtin specs.
gcc version 2.95.3 [FreeBSD] 20010315 (release)
Compilation info: CC='gcc' CFLAGS='' CXX='c++' CXXFLAGS=''
LDFLAGS=''
LIBC:
-r--r--r-- 1 root wheel 1202644 Jul 15 23:17 /usr/lib/libc.a
lrwxr-xr-x 1 root wheel 9 Jul 15 23:17 /usr/lib/libc.so -> libc.so.4
lrwxr-xr-x 1 root wheel 9 May 18 2001 /usr/lib/libc.so.3 ->
libc.so.4
-r--r--r-- 1 root wheel 570968 Jul 15 23:17 /usr/lib/libc.so.4
Configure command:
./configure --prefix=/usr/local/mysql
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php