[ 
https://issues.apache.org/jira/browse/TINKERPOP-2186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

stephen mallette closed TINKERPOP-2186.
---------------------------------------
    Resolution: Not A Problem

I say "not a problem" but it's more like I have a workaround - you have to wrap 
the array you want in an array and it works:

{code}
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal().withRemote(new 
EmbeddedRemoteConnection(graph.traversal()))
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV("A").property("p", [[ "A" ] as String[]] as Object[]).iterate()
gremlin> g.addV("A").property("p", [[ "A", "B", "C" ] as String[]] as 
Object[]).iterate()
gremlin> g.V().valueMap(true).toList()
==>[p:[[A]],id:0,label:A]
==>[p:[[A, B, C]],id:2,label:A]
gremlin> g.V().values("p").map{it.get().getClass()}
==>class [Ljava.lang.String;
==>class [Ljava.lang.String;
{code}

The trick is that bytecode has to deal with those varargs steps and it doesn't 
know whether your string array is to be called as varargs or explicitly as a 
single array object. I don't know how we can resolve that programmatically, so 
i think we have to rely on the explicit definition by way of the wrapping in 
the {{Object[]}}


> Wrong translation to bytecode from array value
> ----------------------------------------------
>
>                 Key: TINKERPOP-2186
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2186
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.4.1
>            Reporter: Pavel
>            Assignee: stephen mallette
>            Priority: Major
>
>  Sample of code
> {code:java}
>  Graph graph = TinkerGraph.open();
>  GraphTraversalSource traversal = graph.traversal().withRemote(new 
> EmbeddedRemoteConnection(graph.traversal()));
> traversal.addV("A").property("p", new String[] { "A" }).iterate();
>  traversal.addV("A").property("p", new String[] { "A", "B", "C" }).iterate();
>  System.out.println(traversal.V().valueMap(true).toList());
> {code}
> Result 
> {code:java}
> [{p=[A], id=0, label=A}, {p=[A], id=2, label=A}]
> {code}
> Actual bytecode
> {code}
> [[], [addV(A), property(p, A)]]
> [[], [addV(A), property(p, A, B, C)]]
> {code}
> But expected
> {code}
> [[], [addV(A), property(p, [A])]]
> [[], [addV(A), property(p, [A, B, C])]]
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to