Andrew Kirk created TINKERPOP-2926: -------------------------------------- Summary: Gremlin-Java > An UnsupportedOperationException occurs on calling next() after a merge step with the option step modulator if the element does not exist Key: TINKERPOP-2926 URL: https://issues.apache.org/jira/browse/TINKERPOP-2926 Project: TinkerPop Issue Type: Bug Components: driver Affects Versions: 3.6.2 Reporter: Andrew Kirk Attachments: MergeTestApp.java
Using Gremlin-Java, when the option step modulator is used in combination with a merge step, an `UnsupportedOperationException` is thrown upon calling `next()` if the specified element does not already exist. Using an example from the docs, the following construct works fine in the console if the element does not already exist: {code:groovy} gremlin> g.mergeV([(T.id):300]). option(Merge.onCreate,[(T.label):'Dog', name:'Toby', age:10]). option(Merge.onMatch,[age:11]) {code} But, if we try to do the same thing in Java, we'll get an exception: {code:java} g.mergeV(Map.of(T.id, 300)) .option( Merge.onCreate, Map.of( T.label, "Dog", "name", "Toby", "age", 10 ) ) .option( Merge.onMatch, Map.of("age", 11) ) .next(); {code} Exception: {noformat} Exception in thread "main" java.lang.UnsupportedOperationException at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) at java.base/java.util.ImmutableCollections$AbstractImmutableMap.putAll(ImmutableCollections.java:1073) at org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeVertexStep.onCreateMap(MergeVertexStep.java:205) at org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeVertexStep.flatMap(MergeVertexStep.java:168) at org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapStep.processNextStart(FlatMapStep.java:49) at org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeStep.processNextStart(MergeStep.java:165) at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:135) at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:40) at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next(DefaultTraversal.java:249) at io.integralla.tinkerpop.poc.MergeWithOption.main(MergeWithOption.java:44) {noformat} If the element is first added (via an add or merge step), the merge with option works as expected. A full example is provided in the attached MergeTestApp.java -- This message was sent by Atlassian Jira (v8.20.10#820010)