[
https://issues.apache.org/jira/browse/NIFI-5141?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16466738#comment-16466738
]
Ed Berezitsky edited comment on NIFI-5141 at 5/8/18 3:45 AM:
-------------------------------------------------------------
[~markap14],
this bug affected two methods: _DataTypeUtils.isFloatTypeCompatible_ and
_DataTypeUtils.isDoubleTypeCompatible_.
Reproduced for both successfully. After applying patch both methods return
desired results for format with numbers having digits after period (i.e.
"13.45") and for integer/long looking number (i.e. "13"). But it still doesn't
return "true" for numbers that have period, but don't have digits after it,
i.e. "13.", while Double.parseDouble("13.") parses such values correctly. I
think, regex for double/floats should support that format as well.
I would recommend to add one more pattern to support that:
{code:java}
private static final String doubleRegex =
OptionalSign +
"(" +
Infinity + "|" +
NotANumber + "|"+
"(" + Base10Digits + OptionalBase10Decimal + ")" + "|" +
"(" + Base10Digits + "\\." + ")" + "|" + // recommend to add this
pattern
"(" + Base10Digits + OptionalBase10Decimal + Base10Exponent + ")" +
"|" +
"(" + Base10Decimal + OptionalBase10Exponent + ")" +
")";
{code}
Before:
System.out.println(DataTypeUtils.isFloatTypeCompatible("13")); -->
{color:#ff0000}false{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13")); -->
{color:#ff0000}false{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.")); -->
{color:#ff0000}false{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.")); -->
{color:#ff0000}false{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".13")); --> true
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".13")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".")); --> false
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".")); --> false
After:
System.out.println(DataTypeUtils.isFloatTypeCompatible("13")); -->
{color:#14892c}true{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13")); -->
{color:#14892c}true{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.")); -->
{color:#d04437}false — recommended update fixes this{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.")); -->
{color:#d04437}false — recommended update fixes this{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".13")); --> true
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".13")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".")); --> false
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".")); --> false
was (Author: bdesert):
[~markap14],
this bug affected two methods: _DataTypeUtils.isFloatTypeCompatible_ and
_DataTypeUtils.isDoubleTypeCompatible_.
Reproduced for both successfully. After applying patch both methods return
desired results for format with numbers having digits after period (i.e.
"13.45"). But it still doesn't return "true" for numbers that have period, but
don't have digits after it, i.e. "13.", while Double.parseDouble("13.") parses
such values correctly. I think, regex for double/floats should support that
format as well.
I would recommend to add one more pattern to support that:
{code:java}
private static final String doubleRegex =
OptionalSign +
"(" +
Infinity + "|" +
NotANumber + "|"+
"(" + Base10Digits + OptionalBase10Decimal + ")" + "|" +
"(" + Base10Digits + "\\." + ")" + "|" + // recommend to add this
pattern
"(" + Base10Digits + OptionalBase10Decimal + Base10Exponent + ")" +
"|" +
"(" + Base10Decimal + OptionalBase10Exponent + ")" +
")";
{code}
Before:
System.out.println(DataTypeUtils.isFloatTypeCompatible("13")); -->
{color:#FF0000}false{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13")); -->
{color:#FF0000}false{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.")); -->
{color:#FF0000}false{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.")); -->
{color:#FF0000}false{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".13")); --> true
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".13")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".")); --> false
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".")); --> false
After:
System.out.println(DataTypeUtils.isFloatTypeCompatible("13")); -->
{color:#14892c}true{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13")); -->
{color:#14892c}true{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.")); -->
{color:#d04437}false — recommended update fixes this{color}
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.")); -->
{color:#d04437}false — recommended update fixes this{color}
System.out.println(DataTypeUtils.isFloatTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isDoubleTypeCompatible("13.0")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".13")); --> true
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".13")); -->
true
System.out.println(DataTypeUtils.isFloatTypeCompatible(".")); --> false
System.out.println(DataTypeUtils.isDoubleTypeCompatible(".")); --> false
> ValidateRecord considers a record invalid if it has an integer value and
> schema says double, even if strict type checking is disabled
> -------------------------------------------------------------------------------------------------------------------------------------
>
> Key: NIFI-5141
> URL: https://issues.apache.org/jira/browse/NIFI-5141
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Reporter: Mark Payne
> Assignee: Mark Payne
> Priority: Major
> Labels: Record, beginner, newbie, validation
> Fix For: 1.7.0
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)