• Tor Didriksen's avatar
    Bug#13463415 63502: INCORRECT RESULTS OF BIGINT AND DECIMAL COMPARISON · 042bd151
    Tor Didriksen authored
    Bug#11758543 50756: BIGINT '100' MATCHES 1.001E2
    
    Expressions of the form
          BIGINT_COL <compare> <non-integer constant>
    
          should be done either as decimal, or float.
    
          Currently however, such comparisons are done as int,
          which means that the constant may be truncated,
          and yield false positives/negatives for all queries
          where compare is '>' '<' '>=' '<=' '=' '!='.
    
          BIGINT_COL IN <list of contstants>
          and
          BIGINT_COL BETWEEN <constant> AND <constant>
          are also affected.
    
    
    
    mysql-test/r/bigint.result:
      New tests.
    mysql-test/r/func_in.result:
      BIGINT <=> string comparison should be done as float,
      so a warning for the value 'abc' is appropriate.
    mysql-test/t/bigint.test:
      New tests.
    sql/item_cmpfunc.cc:
      In convert_constant_item() we verify that the constant item
      can be stored in the given field.
      For BIGINT columns (MYSQL_TYPE_LONGLONG) we must verify that the
      stored constant value is actually comparable as int,
      i.e. that the value was not truncated.
      
      For between: compare as int only if both arguments convert correctly to int.
    042bd151
item_cmpfunc.cc 148 KB