This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit e329a7bcc3de2a482851e69013ab4e878579d7e3 Author: Stephen Mallette <[email protected]> AuthorDate: Mon Aug 26 15:15:20 2024 -0400 wip - fixup after rebase --- .../process/traversal/dsl/graph/GraphTraversal.java | 4 ++-- .../process/traversal/step/map/MergeElementStep.java | 14 +++++++++++--- .../gremlin/process/traversal/step/map/MergeStep.java | 19 ++++++++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java index 375a9993b8..6342c981c6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java @@ -590,13 +590,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { /** * Merges the list traverser and list argument. Also known as union. * - * @return the traversal with an appended {@link TraversalMergeStep}. + * @return the traversal with an appended {@link MergeStep}. * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#merge-step" target="_blank">Reference Documentation - Merge Step</a> * @since 3.7.3 */ public default <E2> GraphTraversal<S, E2> merge(final GValue<Object> values) { this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.merge, values); - return this.asAdmin().addStep(new TraversalMergeStep<>(this.asAdmin(), values)); + return this.asAdmin().addStep(new MergeStep<>(this.asAdmin(), values)); } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java index 44e954fb31..6835387c5e 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java @@ -35,6 +35,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.Deleting; +import org.apache.tinkerpop.gremlin.process.traversal.step.GType; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent; import org.apache.tinkerpop.gremlin.process.traversal.step.Writing; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Parameters; @@ -80,6 +82,11 @@ public abstract class MergeElementStep<S, E, C> extends FlatMapStep<S, E> validate(mergeMap, false); } + public MergeElementStep(final Traversal.Admin traversal, final boolean isStart, final GValue<Map> mergeMap) { + this(traversal, isStart, new ConstantTraversal<>(mergeMap)); + validate(mergeMap.get(), false); + } + public MergeElementStep(final Traversal.Admin traversal, final boolean isStart, final Traversal.Admin mergeTraversal) { super(traversal); @@ -279,7 +286,7 @@ public abstract class MergeElementStep<S, E, C> extends FlatMapStep<S, E> op, allowedTokens, k)); } if (k == T.label) { - if (!(v instanceof String)) { + if (!(GValue.instanceOf(v, GType.STRING))) { throw new IllegalArgumentException(String.format( "%s() and option(onCreate) args expect T.label value to be of String - found: %s", op, v.getClass().getSimpleName())); @@ -318,7 +325,8 @@ public abstract class MergeElementStep<S, E, C> extends FlatMapStep<S, E> * null Map == empty Map */ protected Map materializeMap(final Traverser.Admin<S> traverser, Traversal.Admin<S, ?> mapTraversal) { - Map map = (Map) TraversalUtil.apply(traverser, mapTraversal); + final Object o = TraversalUtil.apply(traverser, mapTraversal); + Map map = GValue.getFrom(o); // PartitionStrategy uses parameters as a mechanism for setting the partition key. trying to be as specific // as possible here wrt parameters usage to avoid misuse @@ -360,7 +368,7 @@ public abstract class MergeElementStep<S, E, C> extends FlatMapStep<S, E> return id != null ? graph.traversal().V(id) : graph.traversal().V(); } - protected GraphTraversal searchVerticesLabelConstraint(GraphTraversal t, final String label) { + protected GraphTraversal searchVerticesLabelConstraint(final GraphTraversal t, final String label) { return label != null ? t.hasLabel(label) : t; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java index d11fdf0894..e40d11c71b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java @@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent; import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement; import org.apache.tinkerpop.gremlin.process.traversal.util.ListFunction; @@ -40,7 +41,7 @@ import java.util.Set; */ public final class MergeStep<S, E> extends ScalarMapStep<S, E> implements TraversalParent, ListFunction { private Traversal.Admin<S, E> valueTraversal; - private Object parameterItems; + private GValue<Object> parameterItems; public MergeStep(final Traversal.Admin traversal, final Object values) { super(traversal); @@ -48,10 +49,18 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, E> implements Traver if (values instanceof Traversal) { valueTraversal = integrateChild(((Traversal<S, E>) values).asAdmin()); } else { - parameterItems = values; + parameterItems = GValue.of(values);; } } + public Traversal.Admin<S, E> getValueTraversal() { + return valueTraversal; + } + + public GValue<Object> getParameterItems() { + return parameterItems; + } + @Override public String getStepName() { return "merge"; } @@ -61,7 +70,7 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, E> implements Traver final Map mapA = (incoming instanceof Map) ? (Map) incoming : null; if (mapA != null) { - final Object mapB = (valueTraversal != null) ? TraversalUtil.apply(traverser, valueTraversal) : parameterItems; + final Object mapB = (valueTraversal != null) ? TraversalUtil.apply(traverser, valueTraversal) : parameterItems.get(); if (!(mapB instanceof Map)) { throw new IllegalArgumentException( String.format( @@ -76,13 +85,13 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, E> implements Traver } else { final Collection listA = convertTraverserToCollection(traverser); - if (parameterItems instanceof Map) { + if (parameterItems != null && parameterItems.get() instanceof Map) { throw new IllegalArgumentException(getStepName() + " step type mismatch: expected argument to be Iterable but got Map"); } final Collection listB = (null != valueTraversal) ? convertTraversalToCollection(traverser, valueTraversal) - : convertArgumentToCollection(parameterItems); + : convertArgumentToCollection(parameterItems.get()); final Set elements = new HashSet();
