You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2016/11/23 01:36:47 UTC
[30/50] [abbrv] tinkerpop git commit: fixed up the hasXXX() methods
to account of P and Object differently. Will go through and create a
TraversalHelper.addHasContainer() method which will left append or right
append depending on Traversal state. this wi
fixed up the hasXXX() methods to account of P and Object differently. Will go through and create a TraversalHelper.addHasContainer() method which will left append or right append depending on Traversal state. this will simplify methods signficiantly.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/05bfb029
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/05bfb029
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/05bfb029
Branch: refs/heads/TINKERPOP-1529-variant2
Commit: 05bfb029c20fd21cba468b4bf25cbab322526807
Parents: 8c1391c
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Nov 14 13:46:00 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Nov 16 05:43:45 2016 -0700
----------------------------------------------------------------------
.../traversal/dsl/graph/GraphTraversal.java | 114 +++++++++++++++----
.../gremlin/process/traversal/dsl/graph/__.java | 43 +++++--
.../traversal/step/filter/HasStepTest.java | 12 +-
3 files changed, 128 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/05bfb029/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
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 e875513..7543c32 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
@@ -147,8 +147,10 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -994,38 +996,106 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(new NotStep<>(this.asAdmin(), __.values(propertyKey)));
}
- public default GraphTraversal<S, E> has(final T accessor, final Object value, final Object... values) {
- if (value instanceof Object[]) {
- final Object[] arr = (Object[]) value;
- if (values.length == 0) {
- if (arr.length == 1) {
- return has(accessor, P.eq(arr[0]));
+ public default GraphTraversal<S, E> hasLabel(final String label, final String... otherLabels) {
+ final String[] labels = new String[otherLabels.length + 1];
+ labels[0] = label;
+ System.arraycopy(otherLabels, 0, labels, 1, otherLabels.length);
+ this.asAdmin().getBytecode().addStep(Symbols.hasLabel, labels);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.label.getAccessor(), labels.length == 1 ? P.eq(labels[0]) : P.within(labels)));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.label.getAccessor(), labels.length == 1 ? P.eq(labels[0]) : P.within(labels))));
+ }
+
+ public default GraphTraversal<S, E> hasLabel(final P<String> predicate) {
+ this.asAdmin().getBytecode().addStep(Symbols.hasLabel, predicate);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.label.getAccessor(), predicate));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.label.getAccessor(), predicate)));
+ }
+
+ public default GraphTraversal<S, E> hasId(final Object id, final Object... otherIds) {
+ if (id instanceof P)
+ return this.hasId((P) id);
+ else {
+ final List<Object> ids = new ArrayList<>();
+ if (id.getClass().isArray()) {
+ for (final Object i : (Object[]) id) {
+ ids.add(i);
}
- return has(accessor, P.within(arr));
- }
- } else if (values.length == 0) {
- return has(accessor, value instanceof P ? (P) value : P.eq(value));
+ } else
+ ids.add(id);
+ Collections.addAll(ids, otherIds);
+ this.asAdmin().getBytecode().addStep(Symbols.hasId, ids.toArray());
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.id.getAccessor(), ids.size() == 1 ? P.eq(ids.get(0)) : P.within(ids)));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.id.getAccessor(), ids.size() == 1 ? P.eq(ids.get(0)) : P.within(ids))));
}
- final Object[] objects = new Object[values.length + 1];
- objects[0] = value;
- System.arraycopy(values, 0, objects, 1, values.length);
- return has(accessor, P.within(objects));
}
- public default GraphTraversal<S, E> hasLabel(final Object value, final Object... values) {
- return has(T.label, value, values);
+ public default GraphTraversal<S, E> hasId(final P<Object> predicate) {
+ this.asAdmin().getBytecode().addStep(Symbols.hasId, predicate);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.id.getAccessor(), predicate));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.id.getAccessor(), predicate)));
+ }
+
+ public default GraphTraversal<S, E> hasKey(final String label, final String... otherLabels) {
+ final String[] labels = new String[otherLabels.length + 1];
+ labels[0] = label;
+ System.arraycopy(otherLabels, 0, labels, 1, otherLabels.length);
+ this.asAdmin().getBytecode().addStep(Symbols.hasKey, labels);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.key.getAccessor(), labels.length == 1 ? P.eq(labels[0]) : P.within(labels)));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.key.getAccessor(), labels.length == 1 ? P.eq(labels[0]) : P.within(labels))));
}
- public default GraphTraversal<S, E> hasId(final Object value, final Object... values) {
- return has(T.id, value, values);
+ public default GraphTraversal<S, E> hasKey(final P<String> predicate) {
+ this.asAdmin().getBytecode().addStep(Symbols.hasKey, predicate);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.key.getAccessor(), predicate));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.key.getAccessor(), predicate)));
}
- public default GraphTraversal<S, E> hasKey(final Object value, final Object... values) {
- return has(T.key, value, values);
+ public default GraphTraversal<S, E> hasValue(final Object value, final Object... otherValues) {
+ if (value instanceof P)
+ return this.hasValue((P) value);
+ else {
+ final List<Object> values = new ArrayList<>();
+ if (value.getClass().isArray()) {
+ for (final Object v : (Object[]) value) {
+ values.add(v);
+ }
+ } else
+ values.add(value);
+ Collections.addAll(values, otherValues);
+ this.asAdmin().getBytecode().addStep(Symbols.hasValue, values.toArray());
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.value.getAccessor(), values.size() == 1 ? P.eq(values.get(0)) : P.within(values)));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.value.getAccessor(), values.size() == 1 ? P.eq(values.get(0)) : P.within(values))));
+ }
}
- public default GraphTraversal<S, E> hasValue(final Object value, final Object... values) {
- return has(T.value, value, values);
+ public default GraphTraversal<S, E> hasValue(final P<Object> predicate) {
+ this.asAdmin().getBytecode().addStep(Symbols.hasValue, predicate);
+ if (this.asAdmin().getEndStep() instanceof HasContainerHolder) {
+ ((HasContainerHolder) this.asAdmin().getEndStep()).addHasContainer(new HasContainer(T.value.getAccessor(), predicate));
+ return this;
+ } else
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), new HasContainer(T.value.getAccessor(), predicate)));
}
public default GraphTraversal<S, E> is(final P<E> predicate) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/05bfb029/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 83739d8..dfd5878 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -661,31 +661,45 @@ public class __ {
}
/**
- * @see GraphTraversal#has(T, Object, Object...)
+ * @see GraphTraversal#hasLabel(String, String...)
*/
- public static <A> GraphTraversal<A, A> has(final T accessor, final Object value, Object... values) {
- return __.<A>start().has(accessor, value, values);
+ public static <A> GraphTraversal<A, A> hasLabel(final String label, String... otherLabels) {
+ return __.<A>start().hasLabel(label, otherLabels);
}
/**
- * @see GraphTraversal#hasLabel(Object, Object...)
+ * @see GraphTraversal#hasLabel(P)
*/
- public static <A> GraphTraversal<A, A> hasLabel(final Object value, Object... values) {
- return __.<A>start().hasLabel(value, values);
+ public static <A> GraphTraversal<A, A> hasLabel(final P<String> predicate) {
+ return __.<A>start().hasLabel(predicate);
}
/**
* @see GraphTraversal#hasId(Object, Object...)
*/
- public static <A> GraphTraversal<A, A> hasId(final Object value, Object... values) {
- return __.<A>start().hasId(value, values);
+ public static <A> GraphTraversal<A, A> hasId(final Object id, Object... otherIds) {
+ return __.<A>start().hasId(id, otherIds);
}
/**
- * @see GraphTraversal#hasKey(Object, Object...)
+ * @see GraphTraversal#hasId(P)
*/
- public static <A> GraphTraversal<A, A> hasKey(final Object value, Object... values) {
- return __.<A>start().hasKey(value, values);
+ public static <A> GraphTraversal<A, A> hasId(final P<Object> predicate) {
+ return __.<A>start().hasId(predicate);
+ }
+
+ /**
+ * @see GraphTraversal#hasKey(String, String...)
+ */
+ public static <A> GraphTraversal<A, A> hasKey(final String label, String... otherLabels) {
+ return __.<A>start().hasKey(label, otherLabels);
+ }
+
+ /**
+ * @see GraphTraversal#hasKey(P)
+ */
+ public static <A> GraphTraversal<A, A> hasKey(final P<String> predicate) {
+ return __.<A>start().hasKey(predicate);
}
/**
@@ -696,6 +710,13 @@ public class __ {
}
/**
+ * @see GraphTraversal#hasValue(P)
+ */
+ public static <A> GraphTraversal<A, A> hasValue(final P<Object> predicate) {
+ return __.<A>start().hasValue(predicate);
+ }
+
+ /**
* @see GraphTraversal#where(String, P)
*/
public static <A> GraphTraversal<A, A> where(final String startKey, final P<String> predicate) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/05bfb029/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
index 63c843d..215d6c1 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
@@ -75,22 +75,18 @@ public class HasStepTest extends StepTest {
// hasLabel(Object label, Object... moreLabels) should be compatible with hasLabel(Object... labels)
Arrays.asList(
__.hasLabel("person"),
- __.hasLabel(eq("person")),
- __.hasLabel(new String[]{"person"})),
+ __.hasLabel(eq("person"))),
Arrays.asList(
__.hasLabel("person", "software"),
- __.hasLabel(within("person", "software")),
- __.hasLabel(new String[]{"person", "software"})),
+ __.hasLabel(within("person", "software"))),
// hasKey(Object key, Object... moreKeys) should be compatible with hasKey(Object... keys)
Arrays.asList(
__.hasKey("name"),
- __.hasKey(eq("name")),
- __.hasKey(new String[]{"name"})),
+ __.hasKey(eq("name"))),
Arrays.asList(
__.hasKey("name", "age"),
- __.hasKey(within("name", "age")),
- __.hasKey(new String[]{"name", "age"})),
+ __.hasKey(within("name", "age"))),
// hasValue(Object value, Object... moreValues) should be compatible with hasValue(Object... values)
Arrays.asList(