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