• Alexey Kopytov's avatar
    Fix for bug #43432: Union on floats does unnecessary rounding · 0b60184b
    Alexey Kopytov authored
      
    UNION could convert fixed-point FLOAT(M,D)/DOUBLE(M,D) columns  
    to FLOAT/DOUBLE when aggregating data types from the SELECT  
    substatements. While there is nothing particularly wrong with  
    this behavior, especially when M is greater than the hardware  
    precision limits, it could be confusing in cases when all  
    SELECT statements in a union have the same  
    FLOAT(M,D)/DOUBLE(M,D) columns with equal precision  
    specifications listed in the same position.  
      
    Since the manual is quite vague on what data type should be  
    returned in such cases, the bug was fixed by implementing the  
    most 'expected' behavior: do not convert FLOAT(M,D)/DOUBLE(M,D)  
    to anything else if all SELECT statements in a UNION have the  
    same precision for that column.  
    
    mysql-test/r/union.result:
      Added a test case for bug #43432.
    mysql-test/t/union.test:
      Added a test case for bug #43432.
    sql/field.cc:
      Replaced FLT_DIG+6 and DBL_DIG+7 with a symbolic constant.
    sql/item.cc:
      Do not convert FLOAT(M,D)/DOUBLE(M,D) 
      to anything else if all SELECT statements in a UNION have the 
      same precision for that column.
    sql/mysql_priv.h:
      Added a symbolic constant for FLT_DIG+6 and DBL_DIG+7.
    0b60184b
union.test 34.6 KB