SEND-PR: -*- send-pr -*-
SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
SEND-PR: will all comments (text enclosed in `<' and `>').
SEND-PR:
From: root
To: [EMAIL PROTECTED]
Subject:        Bug with CASE expression in Update statement

>Description:
        CASE WHEN expression used in UPDATE statement gives wrong result.
>How-To-Repeat:
DROP TABLE IF EXISTS Eric;
 
CREATE TABLE Eric (ID         INTEGER NOT NULL PRIMARY KEY,
                   Company_ID INTEGER NULL);
 
INSERT INTO Eric VALUES ( 1,      -1);
INSERT INTO Eric VALUES ( 2,      -1);
INSERT INTO Eric VALUES ( 3,       1);
INSERT INTO Eric VALUES ( 4,       1);
INSERT INTO Eric VALUES ( 5,      10);
INSERT INTO Eric VALUES ( 6,      10);
INSERT INTO Eric VALUES ( 7, 1000000);
INSERT INTO Eric VALUES ( 8, 1000000);
INSERT INTO Eric VALUES ( 9,      10);
INSERT INTO Eric VALUES (10,      10);
 
SELECT Company_ID,
       COUNT(*)
  FROM Eric
 GROUP BY Company_ID;
 
+------------+----------+
| Company_ID | COUNT(*) |
+------------+----------+
|         -1 |        2 |
|          1 |        2 |
|         10 |        4 |
|    1000000 |        2 |
+------------+----------+
4 rows in set (0.00 sec)
 
mysql> UPDATE Eric SET Company_ID =
CASE WHEN Company_ID <= 0 OR Company_ID >= 500000000
    THEN NULL
    ELSE Company_ID + 1000000000
    END;
 
Query OK, 10 rows affected (0.01 sec)
Rows matched: 10  Changed: 10  Warnings: 0
 
mysql> SELECT Company_ID,
              COUNT(*)
    FROM Eric
    GROUP BY Company_ID;
 
+------------+----------+
| Company_ID | COUNT(*) |
+------------+----------+
|       NULL |       10 |
+------------+----------+
1 row in set (0.00 sec)

>Fix:
UPDATE Eric
        SET Company_ID = IF(Company_ID <= 0 OR Company_ID >= 500000000, 
                NULL, Company_ID + 1000000000);

>Submitter-Id:  <submitter ID>
>Originator:    Robert Berman
>Organization:
 Peregrine Systems, Inc.
 Ottawa, ON, Canada K2C 3V4
 Tel: (613) 274-6813, FAX: (513) 723-7209
>MySQL support: [none | licence | email support | extended email support ]
        email support
>Synopsis:      Bug with CASE expression in Update statement
>Severity:      non-critical
>Priority:      medium
>Category:      mysql
>Class:         sw-bug
>Release:       mysql-3.23.52 (Source distribution)
>Server: /usr/mysql/bin/mysqladmin  Ver 8.23 Distrib 3.23.52, for 
pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          3.23.52
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 3 days 2 hours 17 min 6 sec

Threads: 6  Questions: 4801651  Slow queries: 3  Opens: 134778  Flush tables: 
129  Open tables: 128 Queries per second avg: 17.955
>Environment:
        <machine, os, target, libraries (multiple lines)>
System: Linux 172-22-5-24.localdomain 2.4.20 #1 Fri Nov 29 09:37:13 EST 2002 
i686 unknown
Architecture: i686

Some paths:  /usr/bin/perl

Compilation info: CC='gcc'  CFLAGS='-mcpu=pentiumpro'  CXX='g++'  
CXXFLAGS='-mcpu=pentiumpro -fno-exceptions -fno-rtti'  LDFLAGS=''
LIBC: 
lrwxrwxrwx    1 root     root           13 Dec  6 11:21 /lib/libc.so.6 -> 
libc-2.2.3.so
-rwxr-xr-x    1 root     root      1193256 Sep 26  2001 /lib/libc-2.2.3.so
-rw-r--r--    1 root     root     24976516 Aug 31  2001 /usr/lib/libc.a
-rw-r--r--    1 root     root          190 Aug 31  2001 /usr/lib/libc.so
Configure command: ./configure --enable-assembler CFLAGS=-mcpu=pentiumpro 
'CXXFLAGS=-mcpu=pentiumpro -fno-exceptions -fno-rtti' CXX=g++


---------------------------------------------------------------------
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

Reply via email to