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
The following commit(s) were added to refs/heads/gvalue by this push:
new 92ba9361df wip - hasLabel(String, String...) fixes, more GValue utility
92ba9361df is described below
commit 92ba9361df30ec59b7ea46315b0f4d45a0372af1
Author: Stephen Mallette <[email protected]>
AuthorDate: Wed Aug 21 15:35:01 2024 -0400
wip - hasLabel(String, String...) fixes, more GValue utility
---
.../language/grammar/GenericLiteralVisitor.java | 14 +++
.../language/grammar/TraversalMethodVisitor.java | 27 +++++-
.../translator/DotNetTranslateVisitor.java | 2 +-
.../traversal/dsl/graph/GraphTraversal.java | 2 +-
.../gremlin/process/traversal/step/GType.java | 40 ++++----
.../gremlin/process/traversal/step/GValue.java | 55 ++++++++++-
.../process/traversal/step/map/AddEdgeStep.java | 4 +-
.../process/traversal/step/map/GraphStep.java | 4 +-
.../strategy/decoration/ElementIdStrategy.java | 7 +-
.../language/translator/GremlinTranslatorTest.java | 9 ++
.../gremlin/process/traversal/step/GValueTest.java | 102 +++++++++++++++++++++
.../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 11 ++-
gremlin-go/driver/cucumber/gremlin.go | 3 +-
.../gremlin-javascript/test/cucumber/gremlin.js | 3 +-
gremlin-python/src/main/python/radish/gremlin.py | 3 +-
.../gremlin/test/features/map/Conjoin.feature | 4 +-
.../traversal/step/sideEffect/Neo4jGraphStep.java | 4 +-
.../traversal/step/sideEffect/TinkerGraphStep.java | 4 +-
18 files changed, 253 insertions(+), 45 deletions(-)
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
index f29c563d3b..d3a16d6d01 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
@@ -658,4 +658,18 @@ public class GenericLiteralVisitor extends
DefaultGremlinBaseVisitor<Object> {
else
return StringEscapeUtils.unescapeJava(stripQuotes(ctx.getText()));
}
+
+ @Override
+ public Object[] visitStringLiteralVarargs(final
GremlinParser.StringLiteralVarargsContext ctx) {
+ if (ctx == null) {
+ return new Object[0];
+ }
+ return ctx.children
+ .stream()
+ .filter(Objects::nonNull)
+ .filter(p -> p instanceof
GremlinParser.StringNullableArgumentContext)
+ .map(p -> (GremlinParser.StringNullableArgumentContext) p)
+ .map(antlr.argumentVisitor::visitStringNullableArgument)
+ .toArray(Object[]::new);
+ }
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
index daf72820d4..9878b96a9a 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
@@ -28,6 +28,7 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality;
+import java.util.Arrays;
import java.util.Map;
import java.util.function.BiFunction;
@@ -756,10 +757,30 @@ public class TraversalMethodVisitor extends
TraversalRootVisitor<GraphTraversal>
@Override
public GraphTraversal visitTraversalMethod_hasLabel_String_String(final
GremlinParser.TraversalMethod_hasLabel_String_StringContext ctx) {
if (ctx.getChildCount() == 4) {
- return
graphTraversal.hasLabel(antlr.argumentVisitor.parseString(ctx.stringNullableArgument()));
+ final Object literalOrVar =
antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument());
+ if (GValue.valueInstanceOf(literalOrVar, GType.STRING))
+ return graphTraversal.hasLabel((GValue) literalOrVar);
+ else
+ return graphTraversal.hasLabel((String) literalOrVar);
} else {
- return
graphTraversal.hasLabel(antlr.argumentVisitor.parseString(ctx.stringNullableArgument()),
-
antlr.genericVisitor.parseStringVarargs(ctx.stringLiteralVarargs()));
+ Object literalOrVar =
antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument());
+ Object[] literalOrVars =
antlr.genericVisitor.visitStringLiteralVarargs(ctx.stringLiteralVarargs());
+
+ // if any are GValue then they all need to be GValue to call
hasLabel
+ if (literalOrVar instanceof GValue ||
Arrays.stream(literalOrVars).anyMatch(lov -> lov instanceof GValue)) {
+ literalOrVar = GValue.of(literalOrVar);
+ literalOrVars =
Arrays.stream(literalOrVars).map(GValue::of).toArray();
+ }
+
+ // since we normalized above to gvalue or literal we can just test
the first arg for gvalue-ness
+ if (GValue.valueInstanceOf(literalOrVar, GType.STRING)) {
+ final GValue[] gvalueLiteralOrVars = literalOrVars == null ?
null : Arrays.stream(literalOrVars).map(o -> (GValue) o).toArray(GValue[]::new);
+ return graphTraversal.hasLabel((GValue) literalOrVar,
(GValue[]) literalOrVars);
+ } else {
+ // convert object array to string array
+ final String[] stringLiteralOrVars = literalOrVars == null ?
null : Arrays.stream(literalOrVars).map(o -> (String) o).toArray(String[]::new);
+ return graphTraversal.hasLabel((String) literalOrVar,
stringLiteralOrVars);
+ }
}
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
index f4607ae087..df2c6b4d91 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
@@ -873,7 +873,7 @@ public class DotNetTranslateVisitor extends
AbstractTranslateVisitor {
@Override
public Void visitTraversalMethod_option_Object_Traversal(final
GremlinParser.TraversalMethod_option_Object_TraversalContext ctx) {
- if (ctx.genericLiteralArgument().genericLiteral().traversalMerge() !=
null) {
+ if (ctx.genericLiteralArgument().genericLiteral() != null &&
ctx.genericLiteralArgument().genericLiteral().traversalMerge() != null) {
visit(ctx.getChild(0));
sb.append("(");
visit(ctx.genericLiteralArgument());
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 a7379fd914..4473eac1f7 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
@@ -447,7 +447,7 @@ public interface GraphTraversal<S, E> extends Traversal<S,
E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#has-step"
target="_blank">Reference Documentation - Has Step</a>
* @since 3.2.2
*/
- public default GraphTraversal<S, E> hasLabel(final Object label, final
Object... otherLabels) {
+ public default GraphTraversal<S, E> hasLabel(final GValue<String>
label, final GValue<String>... otherLabels) {
this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.hasLabel, label,
otherLabels);
// groovy evaluation seems to do strange things with varargs given
hasLabel(null, null). odd someone would
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GType.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GType.java
index 58c1fdfe4d..4c8777d290 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GType.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GType.java
@@ -33,23 +33,31 @@ import java.util.Set;
* An enum that describes types that are used in the Gremlin language.
*/
public enum GType {
- BIG_DECIMAL,
- BIG_INTEGER,
- BOOLEAN,
- DOUBLE,
- EDGE,
- INTEGER,
- LIST,
- LONG,
- MAP,
- PATH,
- PROPERTY,
- SET,
- STRING,
- UNKNOWN,
- VERTEX;
+ BIG_DECIMAL(BigDecimal.class),
+ BIG_INTEGER(BigInteger.class),
+ BOOLEAN(Boolean.class),
+ DOUBLE(Double.class),
+ EDGE(Edge.class),
+ INTEGER(Integer.class),
+ LIST(List.class),
+ LONG(Long.class),
+ MAP(Map.class),
+ PATH(Path.class),
+ PROPERTY(Property.class),
+ SET(Set.class),
+ STRING(String.class),
+ UNKNOWN(null),
+ VERTEX(Vertex.class);
- GType() {}
+ private Class<?> javaType;
+
+ GType(final Class<?> javaType) {
+ this.javaType = javaType;
+ }
+
+ public Class<?> getJavaType() {
+ return this.javaType;
+ }
/**
* Returns {@code true} if the type is a number.
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
index da0694acdc..6f5c6223f6 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
@@ -21,16 +21,17 @@ package org.apache.tinkerpop.gremlin.process.traversal.step;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.Set;
/**
@@ -113,21 +114,25 @@ public class GValue<V> implements Cloneable, Serializable
{
}
/**
- * Create a new {@code Var} from a particular value but without the
specified name.
+ * Create a new {@code Var} from a particular value but without the
specified name. If the argument provide is
+ * already a {@code GValue} then it is returned as-is.
*
* @param value the value of the variable
*/
public static <V> GValue<V> of(final V value) {
+ if (value instanceof GValue) return (GValue) value;
return new GValue<>(GType.getType(value), value);
}
/**
- * Create a new {@code Var} with the specified name and value.
+ * Create a new {@code Var} with the specified name and value.. If the
argument provide is already a
+ * {@code GValue} then it is returned as-is.
*
* @param name the name of the variable
* @param value the value of the variable
*/
public static <V> GValue<V> of(final String name, final V value) {
+ if (value instanceof GValue) throw new IllegalArgumentException("value
cannot be a GValue");
return new GValue<>(name, GType.getType(value), value);
}
@@ -326,4 +331,48 @@ public class GValue<V> implements Cloneable, Serializable {
public static GValue<Property> ofProperty(final String name, final
Property value) {
return new GValue<>(name, GType.PROPERTY, value);
}
+
+ /**
+ * Tests if the object is a {@link GValue} and if so, checks the type of
the value against the provided
+ * {@link GType}.
+ */
+ public static boolean valueInstanceOf(final Object o, final GType type) {
+ return o instanceof GValue && ((GValue) o).getType() == type;
+ }
+
+ /**
+ * Checks the type of the object against the provided {@link GType}. If
the object is a {@link GValue} then it
+ * can directly check the type, otherwise it will test the given object's
class itself using the mappign on the
+ * {@link GType}.
+ */
+ public static boolean instanceOf(final Object o, final GType type) {
+ // todo: is this right for null?
+ if (null == o)
+ return false;
+ else if (o instanceof GValue)
+ return ((GValue) o).getType() == type;
+ else
+ return o.getClass().isAssignableFrom(type.getJavaType());
+ }
+
+ /**
+ * Returns {@code true} if the object is a collection or a {@link GValue}
that contains a {@link Collection}.
+ */
+ public static boolean instanceOfCollection(final Object o) {
+ return o instanceof Collection || (o instanceof GValue && ((GValue)
o).getType().isCollection());
+ }
+
+ /**
+ * Returns {@code true} if the object is an element or a {@link GValue}
that contains an {@link Element}.
+ */
+ public static boolean instanceOfElement(final Object o) {
+ return o instanceof Element || (o instanceof GValue && ((GValue)
o).getType().isElement());
+ }
+
+ /**
+ * Returns {@code true} if the object is a number or a {@link GValue} that
contains a number.
+ */
+ public static boolean instanceOfNumber(final Object o) {
+ return o instanceof Number || (o instanceof GValue && ((GValue)
o).getType().isNumeric());
+ }
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index 82c7f3893b..39c37bf9f5 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -114,7 +114,7 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge>
edgeLabel, e.getMessage()));
}
- if (!(theTo instanceof Vertex) && (theTo instanceof GValue &&
((GValue) theTo).getType() != GType.VERTEX))
+ if (!(theTo instanceof Vertex) || (theTo instanceof GValue &&
((GValue) theTo).getType() != GType.VERTEX))
throw new IllegalStateException(String.format(
"The value given to addE(%s).to() must resolve to a Vertex
but %s was specified instead", edgeLabel,
null == theTo ? "null" :
theTo.getClass().getSimpleName()));
@@ -128,7 +128,7 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge>
edgeLabel, e.getMessage()));
}
- if (!(theFrom instanceof Vertex) && (theFrom instanceof GValue &&
((GValue) theTo).getType() != GType.VERTEX))
+ if (!(theFrom instanceof Vertex) || (theFrom instanceof GValue &&
((GValue) theTo).getType() != GType.VERTEX))
throw new IllegalStateException(String.format(
"The value given to addE(%s).to() must resolve to a Vertex
but %s was specified instead", edgeLabel,
null == theFrom ? "null" :
theFrom.getClass().getSimpleName()));
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
index 784ef087f3..0a4635240a 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
@@ -144,7 +144,7 @@ public class GraphStep<S, E extends Element> extends
AbstractStep<S, E> implemen
/**
* Get the ids associated with this step. If there are {@link GValue}
objects present they will be returned
- * alongside literal ids. Prefer {@link #getResolvedIds()} if you prefer
to work with literal ids only.
+ * alongside literal ids. Prefer {@link #getIdsAsValues()} if you prefer
to work with literal ids only.
*/
public GValue[] getIds() {
return this.ids;
@@ -153,7 +153,7 @@ public class GraphStep<S, E extends Element> extends
AbstractStep<S, E> implemen
/**
* Gets the ids associated with this step as literal values rather than
{@link GValue} objects.
*/
- public Object[] getResolvedIds() {
+ public Object[] getIdsAsValues() {
if (legacyLogicForPassingNoIds) return null;
return resolveToValues(this.ids);
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
index 65cda70de0..13ee50ece2 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
@@ -92,11 +92,12 @@ public final class ElementIdStrategy extends
AbstractTraversalStrategy<Traversal
// note that it is then only necessary to replace the step if the
id is a non-element. other tests
// in the suite validate that items in getIds() is uniform so it
is ok to just test the first item
// in the list.
- if (graphStep.getIds().length > 0 && !(graphStep.getIds()[0]
instanceof Element)) {
+ final Object[] ids = graphStep.getIdsAsValues();
+ if (ids.length > 0 && !(ids[0] instanceof Element)) {
if (graphStep instanceof HasContainerHolder)
- ((HasContainerHolder) graphStep).addHasContainer(new
HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds()))));
+ ((HasContainerHolder) graphStep).addHasContainer(new
HasContainer(this.idPropertyKey, P.within(Arrays.asList(ids))));
else
- TraversalHelper.insertAfterStep(new HasStep(traversal, new
HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds())))),
graphStep, traversal);
+ TraversalHelper.insertAfterStep(new HasStep(traversal, new
HasContainer(this.idPropertyKey, P.within(Arrays.asList(ids)))), graphStep,
traversal);
graphStep.clearIds();
}
}
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
index 558df4dc13..ed68e16140 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
@@ -1036,6 +1036,15 @@ public class GremlinTranslatorTest {
"g.mergeV(new LinkedHashMap<Object, Object>() {{
put(\"name\", \"alice\"); put(T.label, \"person\"); }}).option(Merge.onCreate,
new LinkedHashMap<Object, Object>() {{ put(\"age\", Cardinality.single(81));
}})",
"g.mergeV(new Map([[\"name\", \"alice\"],
[T.label, \"person\"]])).option(Merge.onCreate, new Map([[\"age\",
CardinalityValue.single(81)]]))",
"g.merge_v({ 'name': 'alice', T.label: 'person'
}).option(Merge.on_create, { 'age': CardinalityValue.single(81) })"},
+
{"g.V().branch(__.label().is(\"person\").count()).option(xx1,
__.values(\"age\")).option(xx2, __.values(\"lang\")).option(xx2,
__.values(\"name\")).option(Pick.any, __.label())",
+ null,
+
"g.V().branch(__.label().is(string0).count()).option(xx1,
__.values(string1)).option(xx2, __.values(string2)).option(xx2,
__.values(string3)).option(Pick.any, __.label())",
+
"g.V().Branch<object>(__.Label().Is(\"person\").Count()).Option(xx1,
__.Values<object>(\"age\")).Option(xx2,
__.Values<object>(\"lang\")).Option(xx2,
__.Values<object>(\"name\")).Option(Pick.Any, __.Label())",
+
"g.V().Branch(gremlingo.T__.Label().Is(\"person\").Count()).Option(xx1,
gremlingo.T__.Values(\"age\")).Option(xx2,
gremlingo.T__.Values(\"lang\")).Option(xx2,
gremlingo.T__.Values(\"name\")).Option(gremlingo.Pick.Any,
gremlingo.T__.Label())",
+ null,
+ null,
+ null,
+
"g.V().branch(__.label().is_('person').count()).option(xx1,
__.values('age')).option(xx2, __.values('lang')).option(xx2,
__.values('name')).option(Pick.any_, __.label())"},
{"g.V().toList()",
null,
null,
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
index f4ae56dff8..07f3fe7f7e 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
@@ -37,10 +37,25 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.mock;
public class GValueTest {
+ @Test
+ public void shouldReturnAnExistingGValue() {
+ final GValue<Integer> gValue = GValue.of(123);
+ final Object returnedGValue = GValue.of(gValue);
+ assertEquals(gValue, returnedGValue);
+ assertSame(gValue, returnedGValue);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldReturnAnExistInTypedGValue() {
+ final Object gValue = GValue.of("x", 123);
+ GValue.of("x", gValue);
+ }
+
@Test
public void shouldCreateGValueFromValue() {
final GValue<Integer> gValue = GValue.of(123);
@@ -313,4 +328,91 @@ public class GValueTest {
assertEquals("varName", gValue.getName());
assertThat(gValue.isVariable(), is(true));
}
+
+ @Test
+ public void shouldBeAnInstanceOf() {
+ assertThat(GValue.instanceOf(GValue.of("string"), GType.STRING),
is(true));
+ assertThat(GValue.instanceOf(GValue.ofInteger(1), GType.INTEGER),
is(true));
+ assertThat(GValue.instanceOf("string", GType.STRING), is(true));
+ assertThat(GValue.instanceOf(1, GType.INTEGER), is(true));
+ }
+
+ @Test
+ public void shouldNotBeAnInstanceOf() {
+ assertThat(GValue.instanceOf(GValue.of("string"), GType.INTEGER),
is(false));
+ assertThat(GValue.instanceOf(GValue.ofInteger(1), GType.STRING),
is(false));
+ assertThat(GValue.instanceOf("string", GType.INTEGER), is(false));
+ assertThat(GValue.instanceOf(1, GType.STRING), is(false));
+ }
+
+ @Test
+ public void shouldBeAnInstanceOfCollection() {
+
assertThat(GValue.instanceOfCollection(GValue.of(Arrays.asList("string"))),
is(true));
+ assertThat(GValue.instanceOfCollection(GValue.ofSet(new
HashSet(Arrays.asList("string")))), is(true));
+ assertThat(GValue.instanceOfCollection(Arrays.asList("string")),
is(true));
+ assertThat(GValue.instanceOfCollection(new
HashSet(Arrays.asList("string"))), is(true));
+ }
+
+ @Test
+ public void shouldNotBeAnInstanceOfCollection() {
+ assertThat(GValue.instanceOfCollection(GValue.of(new HashMap())),
is(false));
+ assertThat(GValue.instanceOfCollection(GValue.ofInteger(1)),
is(false));
+ assertThat(GValue.instanceOfCollection(new HashMap()), is(false));
+ assertThat(GValue.instanceOfCollection(1), is(false));
+ }
+
+ @Test
+ public void shouldBeAnInstanceOfNumber() {
+ assertThat(GValue.instanceOfNumber(GValue.of(1)), is(true));
+ assertThat(GValue.instanceOfNumber(GValue.of(1L)), is(true));
+ assertThat(GValue.instanceOfNumber(GValue.of(1D)), is(true));
+
assertThat(GValue.instanceOfNumber(GValue.of(BigInteger.valueOf((1L)))),
is(true));
+
assertThat(GValue.instanceOfNumber(GValue.of(BigDecimal.valueOf((1.0)))),
is(true));
+ assertThat(GValue.instanceOfNumber(GValue.ofInteger(1)), is(true));
+ assertThat(GValue.instanceOfNumber(GValue.ofLong(1L)), is(true));
+ assertThat(GValue.instanceOfNumber(GValue.ofDouble(1D)), is(true));
+
assertThat(GValue.instanceOfNumber(GValue.ofBigInteger(BigInteger.valueOf((1L)))),
is(true));
+
assertThat(GValue.instanceOfNumber(GValue.ofBigDecimal(BigDecimal.valueOf((1.0)))),
is(true));
+ }
+
+ @Test
+ public void shouldNotBeAnInstanceOfNumber() {
+ assertThat(GValue.instanceOfNumber(GValue.of("string")), is(false));
+
assertThat(GValue.instanceOfNumber(GValue.of(Arrays.asList("string"))),
is(false));
+ }
+
+ @Test
+ public void shouldBeAnInstanceOfElement() {
+
assertThat(GValue.instanceOfElement(GValue.ofVertex(mock(Vertex.class))),
is(true));
+ assertThat(GValue.instanceOfElement(GValue.ofEdge(mock(Edge.class))),
is(true));
+ }
+
+ @Test
+ public void shouldNotBeAnInstanceOfElement() {
+ assertThat(GValue.instanceOfElement(GValue.of("string")), is(false));
+
assertThat(GValue.instanceOfElement(GValue.of(Arrays.asList("string"))),
is(false));
+ }
+
+ @Test
+ public void valueInstanceOfShouldReturnTrueForMatchingType() {
+ GValue<Integer> gValue = GValue.of(123);
+ assertThat(GValue.valueInstanceOf(gValue, GType.INTEGER), is(true));
+ }
+
+ @Test
+ public void valueInstanceOfShouldReturnFalseForNonMatchingType() {
+ GValue<Integer> gValue = GValue.of(123);
+ assertThat(GValue.valueInstanceOf(gValue, GType.STRING), is(false));
+ }
+
+ @Test
+ public void valueInstanceOfShouldReturnFalseForNonGValueObject() {
+ String nonGValue = "test";
+ assertThat(GValue.valueInstanceOf(nonGValue, GType.STRING), is(false));
+ }
+
+ @Test
+ public void valueInstanceOfShouldReturnFalseForNullObject() {
+ assertThat(GValue.valueInstanceOf(null, GType.STRING), is(false));
+ }
}
\ No newline at end of file
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index c8cb66068e..8d2fa79fa9 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -62,17 +62,17 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
new Dictionary<string, List<Func<GraphTraversalSource,
IDictionary<string, object>, ITraversal>>>
{
{"g_V_branchXlabel_eq_person__a_bX_optionXa__ageX_optionXb__langX_optionXb__nameX",
new List<Func<GraphTraversalSource, IDictionary<string, object>,
ITraversal>>()}, // skipping as it contains a lambda
-
{"g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Branch<object>(__.Label().Is("person").Count()).Option(p["xx1"],
(ITraversal) __.Values<object>("age")).Option(p["xx2"], (ITraversal)
__.Values<object>("lang")).Option(p["xx2"], (ITraversal)
__.Values<object>("name"))}},
-
{"g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Branch<object>(__.Label().Is("person").Count()).Option(p["xx1"],
(ITraversal) __.Values<object>("age")).Option(p["xx2"], (ITraversal)
__.Values<object>("lang")).Option(p["xx2"], (ITraversal)
__.Values<object>("name")).Option(Pick.Any, __.Label())}},
+
{"g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Branch<object>(__.Label().Is("person").Count()).Option(p["xx1"],
__.Values<object>("age")).Option(p["xx2"],
__.Values<object>("lang")).Option(p["xx2"], __.Values<object>("name"))}},
+
{"g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Branch<object>(__.Label().Is("person").Count()).Option(p["xx1"],
__.Values<object>("age")).Option(p["xx2"],
__.Values<object>("lang")).Option(p["xx2"],
__.Values<object>("name")).Option(Pick.Any, __.Label())}},
{"g_V_branchXageX_optionXltX30X__youngX_optionXgtX30X__oldX_optionXnone__on_the_edgeX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().HasLabel("person").Branch<object>(__.Values<object>("age")).Option(P.Lt(30),
__.Constant<object>("young")).Option(P.Gt(30),
__.Constant<object>("old")).Option(Pick.None, __.Constant<object>("on the
edge"))}},
{"g_V_branchXidentityX_optionXhasLabelXsoftwareX__inXcreatedX_name_order_foldX_optionXhasXname_vadasX__ageX_optionXneqX123X__bothE_countX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Branch<object>(__.Identity()).Option(__.HasLabel("software"),
__.In("created").Values<object>("name").Order().Fold()).Option(__.Has("name",
"vadas"), __.Values<object>("age")).Option(P.Neq(123), __.BothE().Count())}},
- {"g_V_chooseXout_countX_optionX2L_nameX_optionX3L_ageX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Choose<object>(__.Out().Count()).Option(p["xx1"], (ITraversal)
__.Values<object>("name")).Option(p["xx2"], (ITraversal)
__.Values<object>("age"))}},
+ {"g_V_chooseXout_countX_optionX2L_nameX_optionX3L_ageX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Choose<object>(__.Out().Count()).Option(p["xx1"],
__.Values<object>("name")).Option(p["xx2"], __.Values<object>("age"))}},
{"g_V_chooseXlabel_eqXpersonX__outXknowsX__inXcreatedXX_name",
new List<Func<GraphTraversalSource, IDictionary<string, object>,
ITraversal>>()}, // skipping as it contains a lambda
{"g_V_chooseXhasLabelXpersonX_and_outXcreatedX__outXknowsX__identityX_name",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Choose<object>(__.HasLabel("person").And().Out("created"),
__.Out("knows"), __.Identity()).Values<object>("name")}},
{"g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Choose<object>(__.Label()).Option("blah",
__.Out("knows")).Option("bleep", __.Out("created")).Option(Pick.None,
__.Identity()).Values<object>("name")}},
{"g_V_chooseXoutXknowsX_count_isXgtX0XX__outXknowsXX_name", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Choose<object>(__.Out("knows").Count().Is(P.Gt(0)),
__.Out("knows")).Values<object>("name")}},
{"g_V_hasLabelXpersonX_asXp1X_chooseXoutEXknowsX__outXknowsXX_asXp2X_selectXp1_p2X_byXnameX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().HasLabel("person").As("p1").Choose<object>(__.OutE("knows"),
__.Out("knows")).As("p2").Select<object>("p1", "p2").By("name")}},
-
{"g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().HasLabel("person").Choose<object>(__.Values<object>("age")).Option(p["xx1"],
(ITraversal) __.Constant<object>("young")).Option(Pick.None,
__.Constant<object>("old")).GroupCount<object>()}},
+
{"g_V_hasLabelXpersonX_chooseXageX__optionX27L__constantXyoungXX_optionXnone__constantXoldXX_groupCount",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().HasLabel("person").Choose<object>(__.Values<object>("age")).Option(p["xx1"],
__.Constant<object>("young")).Option(Pick.None,
__.Constant<object>("old")).GroupCount<object>()}},
{"g_injectX1X_chooseXisX1X__constantX10Xfold__foldX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.Inject<object>(p["xx2"]).Choose<object>(__.Is(p["xx2"]),
__.Constant<object>(p["xx1"]).Fold(), __.Fold<object>())}},
{"g_injectX2X_chooseXisX1X__constantX10Xfold__foldX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.Inject<object>(p["xx3"]).Choose<object>(__.Is(p["xx2"]),
__.Constant<object>(p["xx1"]).Fold(), __.Fold<object>())}},
{"g_V_localXpropertiesXlocationX_order_byXvalueX_limitX2XX_value", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().Local<object>(__.Properties<object>("location").Order().By(T.Value,
Order.Asc).Range<object>(0, 2)).Value<object>()}},
@@ -632,7 +632,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{"g_V_valuesXnameX_conjoinX1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("name").Conjoin("1")}},
{"g_V_valuesXnonexistantX_fold_conjoinX_X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("nonexistant").Fold().Conjoin(";")}},
{"g_V_valuesXnameX_order_fold_conjoinX_X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("name").Order().Fold().Conjoin("_")}},
- {"g_V_valuesXageX_order_fold_conjoinX_X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("age").Order().Fold().Conjoin(";")}},
+ {"g_V_valuesXageX_order_fold_conjoinXsemicolonX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("age").Order().Fold().Conjoin(";")}},
+ {"g_V_valuesXageX_order_fold_conjoinXslashX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().Values<object>("age").Order().Fold().Conjoin(p["xx1"])}},
{"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().Out().Path().By(__.Values<object>("name").ToUpper()).Conjoin("MARKO")}},
{"g_injectXmarkoX_conjoinX_X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.Inject<object>(p["xx1"]).Conjoin("-")}},
{"g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.V().ValueMap<object,
object>("location").Select<object>(Column.Values).Unfold<object>().Order(Scope.Local).Conjoin("1")}},
diff --git a/gremlin-go/driver/cucumber/gremlin.go
b/gremlin-go/driver/cucumber/gremlin.go
index dce86e0083..0e61b25ecd 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -603,7 +603,8 @@ var translationMap = map[string][]func(g
*gremlingo.GraphTraversalSource, p map[
"g_V_valuesXnameX_conjoinX1X": {func(g *gremlingo.GraphTraversalSource, p
map[string]interface{}) *gremlingo.GraphTraversal {return
g.V().Values("name").Conjoin("1")}},
"g_V_valuesXnonexistantX_fold_conjoinX_X": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Values("nonexistant").Fold().Conjoin(";")}},
"g_V_valuesXnameX_order_fold_conjoinX_X": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Values("name").Order().Fold().Conjoin("_")}},
- "g_V_valuesXageX_order_fold_conjoinX_X": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Values("age").Order().Fold().Conjoin(";")}},
+ "g_V_valuesXageX_order_fold_conjoinXsemicolonX": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Values("age").Order().Fold().Conjoin(";")}},
+ "g_V_valuesXageX_order_fold_conjoinXslashX": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Values("age").Order().Fold().Conjoin(p["xx1"])}},
"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX": {func(g
*gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().Out().Path().By(gremlingo.T__.Values("name").ToUpper()).Conjoin("MARKO")}},
"g_injectXmarkoX_conjoinX_X": {func(g *gremlingo.GraphTraversalSource, p
map[string]interface{}) *gremlingo.GraphTraversal {return
g.Inject(p["xx1"]).Conjoin("-")}},
"g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X":
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.V().ValueMap("location").Select(gremlingo.Column.Values).Unfold().Order(gremlingo.Scope.Local).Conjoin("1")}},
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 1843c681c9..79211b5282 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -624,7 +624,8 @@ const gremlins = {
g_V_valuesXnameX_conjoinX1X: [function({g}) { return
g.V().values("name").conjoin("1") }],
g_V_valuesXnonexistantX_fold_conjoinX_X: [function({g}) { return
g.V().values("nonexistant").fold().conjoin(";") }],
g_V_valuesXnameX_order_fold_conjoinX_X: [function({g}) { return
g.V().values("name").order().fold().conjoin("_") }],
- g_V_valuesXageX_order_fold_conjoinX_X: [function({g}) { return
g.V().values("age").order().fold().conjoin(";") }],
+ g_V_valuesXageX_order_fold_conjoinXsemicolonX: [function({g}) { return
g.V().values("age").order().fold().conjoin(";") }],
+ g_V_valuesXageX_order_fold_conjoinXslashX: [function({g, xx1}) { return
g.V().values("age").order().fold().conjoin(xx1) }],
g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX: [function({g}) {
return g.V().out().path().by(__.values("name").toUpper()).conjoin("MARKO") }],
g_injectXmarkoX_conjoinX_X: [function({g, xx1}) { return
g.inject(xx1).conjoin("-") }],
g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X:
[function({g}) { return
g.V().valueMap("location").select(Column.values).unfold().order(Scope.local).conjoin("1")
}],
diff --git a/gremlin-python/src/main/python/radish/gremlin.py
b/gremlin-python/src/main/python/radish/gremlin.py
index 9dc39a5360..53556e70b6 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -606,7 +606,8 @@ world.gremlins = {
'g_V_valuesXnameX_conjoinX1X': [(lambda
g:g.V().values('name').conjoin('1'))],
'g_V_valuesXnonexistantX_fold_conjoinX_X': [(lambda
g:g.V().values('nonexistant').fold().conjoin(';'))],
'g_V_valuesXnameX_order_fold_conjoinX_X': [(lambda
g:g.V().values('name').order().fold().conjoin('_'))],
- 'g_V_valuesXageX_order_fold_conjoinX_X': [(lambda
g:g.V().values('age').order().fold().conjoin(';'))],
+ 'g_V_valuesXageX_order_fold_conjoinXsemicolonX': [(lambda
g:g.V().values('age').order().fold().conjoin(';'))],
+ 'g_V_valuesXageX_order_fold_conjoinXslashX': [(lambda g,
xx1=None:g.V().values('age').order().fold().conjoin(xx1))],
'g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX': [(lambda
g:g.V().out().path().by(__.values('name').to_upper()).conjoin('MARKO'))],
'g_injectXmarkoX_conjoinX_X': [(lambda g,
xx1=None:g.inject(xx1).conjoin('-'))],
'g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X':
[(lambda
g:g.V().value_map('location').select(Column.values).unfold().order(Scope.local).conjoin('1'))],
diff --git
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
index 4c9cdb483b..8f05f14f0d 100644
---
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
+++
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
@@ -59,7 +59,7 @@ Feature: Step - conjoin()
| result |
| josh_lop_marko_peter_ripple_vadas |
- Scenario: g_V_valuesXageX_order_fold_conjoinX_X
+ Scenario: g_V_valuesXageX_order_fold_conjoinXsemicolonX
Given the modern graph
And the traversal of
"""
@@ -70,7 +70,7 @@ Feature: Step - conjoin()
| result |
| 27;29;32;35 |
- Scenario: g_V_valuesXageX_order_fold_conjoinX_X
+ Scenario: g_V_valuesXageX_order_fold_conjoinXslashX
Given the modern graph
And using the parameter xx1 defined as "/"
And the traversal of
diff --git
a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/Neo4jGraphStep.java
b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/Neo4jGraphStep.java
index abd0a6b801..90d7327cc7 100644
---
a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/Neo4jGraphStep.java
+++
b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/Neo4jGraphStep.java
@@ -66,7 +66,7 @@ public final class Neo4jGraphStep<S, E extends Element>
extends GraphStep<S, E>
private Iterator<? extends Edge> edges() {
if (null == this.ids)
return Collections.emptyIterator();
- return
IteratorUtils.filter(this.getTraversal().getGraph().get().edges(this.getResolvedIds()),
edge -> HasContainer.testAll(edge, this.hasContainers));
+ return
IteratorUtils.filter(this.getTraversal().getGraph().get().edges(this.getIdsAsValues()),
edge -> HasContainer.testAll(edge, this.hasContainers));
}
private Iterator<? extends Vertex> vertices() {
@@ -76,7 +76,7 @@ public final class Neo4jGraphStep<S, E extends Element>
extends GraphStep<S, E>
// ids are present, filter on them first
if (ids.length > 0)
- return IteratorUtils.filter(graph.vertices(this.getResolvedIds()),
vertex -> HasContainer.testAll(vertex, hasContainers));
+ return IteratorUtils.filter(graph.vertices(this.getIdsAsValues()),
vertex -> HasContainer.testAll(vertex, hasContainers));
////// do index lookups //////
graph.tx().readWrite();
// get a label being search on
diff --git
a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
index 9715c0e4e4..5a3d59e80b 100644
---
a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
+++
b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
@@ -71,7 +71,7 @@ public final class TinkerGraphStep<S, E extends Element>
extends GraphStep<S, E>
final AbstractTinkerGraph graph = (AbstractTinkerGraph)
this.getTraversal().getGraph().get();
final HasContainer indexedContainer = getIndexKey(Edge.class);
Iterator<Edge> iterator;
- final Object[] resolvedIds = this.getResolvedIds();
+ final Object[] resolvedIds = this.getIdsAsValues();
// ids are present, filter on them first
if (null == resolvedIds)
iterator = Collections.emptyIterator();
@@ -94,7 +94,7 @@ public final class TinkerGraphStep<S, E extends Element>
extends GraphStep<S, E>
final AbstractTinkerGraph graph = (AbstractTinkerGraph)
this.getTraversal().getGraph().get();
final HasContainer indexedContainer = getIndexKey(Vertex.class);
Iterator<? extends Vertex> iterator;
- final Object[] resolvedIds = this.getResolvedIds();
+ final Object[] resolvedIds = this.getIdsAsValues();
// ids are present, filter on them first
if (null == resolvedIds)
iterator = Collections.emptyIterator();