You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Florin Mihaila (JIRA)" <ji...@apache.org> on 2016/09/30 15:57:21 UTC
[jira] [Commented] (TINKERPOP-1484) Bad interaction of long-typed
vertex properties with TinkerGraph indexes
[ https://issues.apache.org/jira/browse/TINKERPOP-1484?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15536333#comment-15536333 ]
Florin Mihaila commented on TINKERPOP-1484:
-------------------------------------------
> I don't know how we would make all this work better offhand. Smarter indices? We have similar annoyances with ids and .equals. I won't close this yet in case anyone has ideas for what could be done to make this less confusing.
Thank you for your explanation. I don't know whether it's possible/desirable for the TinkerGraph indexes to do what the in-memory filtering does, but until a fix is proposed by someone familiar with the implementation, given that a simple workaround exists, I would like to suggest the inclusion of a line in the TinkerPop documentation on indexes to help users avoid this trap.
> Bad interaction of long-typed vertex properties with TinkerGraph indexes
> ------------------------------------------------------------------------
>
> Key: TINKERPOP-1484
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1484
> Project: TinkerPop
> Issue Type: Bug
> Components: tinkergraph
> Affects Versions: 3.2.2, 3.2.3
> Environment: macOS Sierra (v10.12), jdk 1.8.0_102-b14
> Reporter: Florin Mihaila
> Priority: Minor
>
> In graphs with indexed properties, queries fail on certain vertices (but not all) with properties of type long.
>
> The following code reproduces the bug:
>
> {code:title=bug.groovy}
> graph = TinkerGraph.open()
> graph.createIndex('other', Vertex.class) // (A)
> graph.createIndex('prop', Vertex.class) // (B)
>
> v = graph.addVertex()
> v.property('prop', (long)1)
> v.property('other', 0)
>
> v = graph.addVertex()
> v.property('prop', 12345678910)
> v.property('other', 1)
>
> g = graph.traversal()
> {code}
>
> The verbatim console session:
>
> {noformat}
> $ bin/gremlin.sh bug.groovy
>
> \,,,/
> (o o)
> -----oOOo-(3)-oOOo-----
> plugin activated: tinkerpop.server
> plugin activated: tinkerpop.utilities
> plugin activated: tinkerpop.tinkergraph
> gremlin> g.V().valueMap()
> ==>[other:[0],prop:[1]]
> ==>[other:[1],prop:[12345678910]]
> gremlin> g.V().has('prop', 1) // (1)
> gremlin> g.V().has('prop', (long)1) // (2)
> ==>v[0]
> gremlin> g.V().has('other', 0).has('prop', 1) // (3)
> ==>v[0]
> gremlin> g.V().has('prop', 12345678910) // (4)
> ==>v[3]
> gremlin>
>
> {noformat}
>
> h4. Observations:
> 1. The node is _not_ found, although it's there.
> 2. The node _is_ found if the property value is explicitly cast to long.
> 3. The node _is_ found if the graph is queried on another indexed property first.
> 4. The node _is_ found if the property value is wider than an int.
>
> h4. Variations:
> v1. If the 'other' property is not indexed (line A), query (2) fails.
> v2. If the 'prop' property is not indexed (line B), all queries succeed!
>
> Tested on freshly built tinkerpop distributions, versions 3.2.2 and 3.2.3.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)