You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Ed Berezitsky (JIRA)" <ji...@apache.org> on 2018/05/08 03:46:00 UTC
[jira] [Comment Edited] (NIFI-5141) ValidateRecord considers a
record invalid if it has an integer value and schema says double, even if
strict type checking is disabled
[ 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)