[ 
https://issues.apache.org/jira/browse/TINKERPOP-2904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17711135#comment-17711135
 ] 

Cole Greer commented on TINKERPOP-2904:
---------------------------------------

I took a quick look here and I believe this is the expected behaviour. 
`GremlinTypeErrorException` is part of the new ternary boolean logic introduced 
in 3.6 which is detailed 
[here|[https://tinkerpop.apache.org/docs/current/dev/provider/#_ternary_boolean_logics].]
 `GremlinTypeErrorException` represents the error state of the ternary boolean.

Pulling a quote from the docs:
{panel}
How this {{ERROR}} result is handled is Graph provider dependent. For the 
reference implementation, {{ERROR}} is an internal representation only and will 
not be propagated back to the client as an exception - it will eventually hit a 
binary reduction operation and be reduced to {{FALSE}} (thus quietly filters 
the solution that produced the {{{}ERROR{}}}).
{panel}
In the reference implementation the `GremlinTypeErrorException` is only 
intended to be used internally and should be swallowed before results are 
returned. The expected result of `g.inject(Double.NaN).is(gt(3))` is null. 
`NaN>3` evaluates to `Error` which reduces to `False`.

> Forget to throw GremlinTypeErrorException when using is(predicate) to compare 
> NaN 
> ----------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2904
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2904
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.5.5
>            Reporter: Miracy Cavendish
>            Priority: Critical
>
> By the design of Gremlin, an exception should be thrown when compared with 
> NaN.
> However, I found that when using ```is(predicate)``` to compare, the 
> exception is always swallowed, and this issue occurs on all GDBs support 
> Gremlin, such as "g.inject(Double.NaN).is(gt(3))"
> {code:java}
> public static final GremlinValueComparator COMPARABILITY = new 
> GremlinValueComparator() {
>         /**
>          * Compare two Gremlin value objects per the Comparability semantics. 
> Throws type errors for NaN comparison
>          * and for cross-type comparison (including nulltype).
>          *
>          * Use this method for P.lt/lte/gt/gte.
>          */
>         @Override
>         public int compare(final Object f, final Object s) {
>             // For Compare, NaN always produces ERROR
>             if (eitherAreNaN(f, s))
>                 throwTypeError();
>             // For Compare we do not cross type boundaries, including null
>             if (!comparable(f, s))
>                 throwTypeError();
>             // comparable(f, s) assures that type(f) == type(s)
>             final Type type = Type.type(f);
>             return comparator(type).compare(f, s);
>         }
> ... {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to