Bug #32122 decimal fields and CASE-assertion failed: scale >= 0 && precision > 0 &&scale <=
Submitted: 5 Nov 2007 17:47 Modified: 7 Nov 2007 13:00
Reporter: Shane Bester (Platinum Quality Contributor) Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Data Types Severity:S1 (Critical)
Version:5.0.50,5.1.23 OS:Any
Assigned to: Assigned Account CPU Architecture:Any
Tags: assert, case, decimal

[5 Nov 2007 17:47] Shane Bester
Description:
Similar to the recently closed Bug #31471 except this is relating to the CASE() clause.

071105 19:42:03 [Note] mysqld: ready for connections.
Version: '5.1.23-beta-debug'  socket: ''  port: 3306  Source distribution
Assertion failed: scale >= 0 && precision > 0 && scale <= precision, file decimal.c, line 1462

mysqld.exe!_NMSG_WRITE
mysqld.exe!abort
mysqld.exe!_wassert
mysqld.exe!decimal_bin_size
mysqld.exe!my_decimal_get_binary_size
mysqld.exe!Field_new_decimal::Field_new_decimal
mysqld.exe!create_tmp_field_from_item
mysqld.exe!create_tmp_field
mysqld.exe!create_tmp_table
mysqld.exe!JOIN::optimize
mysqld.exe!mysql_select
mysqld.exe!handle_select
mysqld.exe!execute_sqlcom_select
mysqld.exe!mysql_execute_command
mysqld.exe!mysql_parse
mysqld.exe!dispatch_command
mysqld.exe!do_command
mysqld.exe!handle_one_connection
mysqld.exe!pthread_start
mysqld.exe!_callthreadstart
mysqld.exe!_threadstart

How to repeat:
drop table if exists `t1`;
create table `t1` (`a` decimal (1,0) zerofill)engine=myisam;
insert ignore into `t1` set `a` = '-1.1111';
insert ignore into `t1` set `a` = '-1.1111';
select distinct ((case (1) when (1) then (`a`) end)) from `t1`;
[7 Nov 2007 13:00] Ramil Kalimullin
The issue is fixed by patch for bug #30782: "Truncated UNSIGNED BIGINT columns only in SELECT w/CASE, JOIN, and ORDER BY". Marking as a duplicate.