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

ASF GitHub Bot commented on TINKERPOP-2742:
-------------------------------------------

li-boxuan opened a new pull request, #1657:
URL: https://github.com/apache/tinkerpop/pull/1657

   Currently, Graph::getCardinality only takes a vertex property key as the 
parameter,
   which sometimes is limited for the graph provider to make a proper choice
   about the cardinality of the vertex property. This commit overloads this 
method
   which takes both the property key and values as parameters so that the graph
   provider can hopefully make a better choice. For example, a graph provider 
can
   use list/set cardinality when it sees multiple values and uses single
   cardinality when it only sees one value. This is particularly useful when 
loading
   a graph using the IO step without a pre-defined schema.




> IO read may use wrong cardinality for property
> ----------------------------------------------
>
>                 Key: TINKERPOP-2742
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2742
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: io
>            Reporter: Boxuan Li
>            Priority: Major
>
> g.io(...).read() might lose list/set properties. See the example below:
> {noformat}
> gremlin> graph = TinkerGraph.open()
> ==>tinkergraph[vertices:0 edges:0]
> gremlin> g = graph.traversal()
> ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
> gremlin> v1 = g.addV().property("feature0", "0.0").property("feature0", 
> "1.1").next()
> ==>v[0]
> gremlin> g.V().valueMap()
> ==>[feature0:[0.0,1.1]]
> gremlin> g.io("graph.json").write().iterate()
> gremlin> g.V().drop()
> gremlin> g.io("graph.json").read().iterate()
> gremlin> g.V().valueMap()
> ==>[feature0:[1.1]]{noformat}
> By verifying "graph.json", I am sure the write() step works fine. The problem 
> is with read() step.
> In 
> [https://github.com/apache/tinkerpop/blob/5fdc7d3b5174f73475ca1a48920d5dec614ffc0e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/Attachable.java#L294-L298,]
>  it relies on the host graph to decide the cardinality for the given property 
> key. In TinkerGraph, `features().vertex().getCardinality(anything)` always 
> returns default cardinality SINGLE (unless otherwise configured), which means 
> all vertex properties are created with SINGLE cardinality, even if the graph 
> file itself contains multiple values for that property, as shown in the above 
> case.
>  
> I presume TinkerGraph is not the only one who suffers from this problem. For 
> example, for JanusGraph, if the default automatic schema maker is enabled, 
> and a property wasn't defined explicitly, then SINGLE cardinality is returned 
> by default. In this case, the loaded graph will be "wrong" in the sense that 
> it turns LIST/SET values into a SINGLE value.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to