This script returns empty set:
This happens because:
- The first decimal value 0.671437 (in INSERT) gets converted to float. Then, the value of the float field 'f' gets converted to double on comparison.
- The second decimal value 0.671437 (which is on the right side of the comparison) gets converted to double directly, without float
in the middle.
So the two sides of the comparison represent results of different type conversion sequences:
Note, all three type conversions involved in this script:
We'll fix the float type handler to compare two float values as floats rather than as doubles.
Note, comparison between FLOAT and non-FLOAT will still be performed as DOUBLE.
After this change, it will be possible to rewrite the above script as follows:
so both sides of the comparison will be results of DECIMAL->FLOAT conversion, without any double representation on the way. The script will return the inserted value.