You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2019/04/29 17:04:49 UTC
[tinkerpop] branch tp4 updated: There are no more InitialFunctions.
If a FlatMapFunction implements Initializing then that means it can
generate an output that isn't dependent on input. This way,
we can have V() and mid-traversal V() without having two steps. Likewise for
db() and inject(). Created PathObjectMap which is for path('x').by()... it
will emit a single object,
not a Path. Lots of other cleanup and organization.
This is an automated email from the ASF dual-hosted git repository.
okram pushed a commit to branch tp4
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/tp4 by this push:
new 1494567 There are no more InitialFunctions. If a FlatMapFunction implements Initializing then that means it can generate an output that isn't dependent on input. This way, we can have V() and mid-traversal V() without having two steps. Likewise for db() and inject(). Created PathObjectMap which is for path('x').by()... it will emit a single object, not a Path. Lots of other cleanup and organization.
1494567 is described below
commit 1494567d9371d885ac9af7e435efff9621a87ca6
Author: Marko A. Rodriguez <ok...@gmail.com>
AuthorDate: Mon Apr 29 11:04:37 2019 -0600
There are no more InitialFunctions. If a FlatMapFunction implements Initializing then that means it can generate an output that isn't dependent on input. This way, we can have V() and mid-traversal V() without having two steps. Likewise for db() and inject(). Created PathObjectMap which is for path('x').by()... it will emit a single object, not a Path. Lots of other cleanup and organization.
---
.../language/gremlin/TraversalSource.java | 2 +-
.../tinkerpop/language/gremlin/TraversalUtil.java | 9 ++-
.../language/gremlin/core/CoreTraversal.java | 11 +--
.../apache/tinkerpop/language/gremlin/core/__.java | 6 +-
.../machine/bytecode/compiler/Argument.java | 3 -
.../bytecode/compiler/BytecodeCompiler.java | 6 +-
.../machine/bytecode/compiler/CoreCompiler.java | 16 ++--
.../machine/bytecode/compiler/FunctionType.java | 2 +-
.../machine/bytecode/compiler/MethodArgument.java | 93 ----------------------
.../DbInitial.java => flatmap/DbFlatMap.java} | 26 +++---
.../InjectFlatMap.java} | 24 ++++--
.../machine/function/initial/FlatMapInitial.java} | 18 ++---
.../initial/Initializing.java} | 9 +--
.../tinkerpop/machine/function/map/PathMap.java | 32 +++++---
.../machine/function/map/PathObjectMap.java | 65 +++++++++++++++
.../strategy/decoration/ExplainStrategy.java | 2 +-
.../apache/tinkerpop/machine/structure/TTuple.java | 2 +
.../tinkerpop/machine/structure/util/J2Tuple.java | 5 ++
.../tinkerpop/machine/structure/util/JTuple.java | 5 ++
.../machine/traverser/path/BasicPath.java | 6 --
.../machine/traverser/path/EmptyPath.java | 5 --
.../tinkerpop/machine/traverser/path/Path.java | 7 +-
.../tinkerpop/machine/processor/pipes/Pipes.java | 6 +-
.../bytecode/compiler/BlueprintsCompiler.java | 4 +-
.../blueprints/data/BlueprintsVertex.java | 5 ++
.../{initial => flatmap}/VerticesFlatMap.java | 16 ++--
.../provider/BlueprintsVerticesStrategy.java | 2 +-
.../machine/structure/jdbc/JDBCDatabase.java | 6 ++
.../tinkerpop/machine/structure/jdbc/JDBCRow.java | 10 +++
.../tinkerpop/machine/structure/jdbc/JDBCTest.java | 2 +-
30 files changed, 209 insertions(+), 196 deletions(-)
diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
index bcbf648..1b91203 100644
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
+++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
@@ -97,7 +97,7 @@ public class TraversalSource<C> implements Cloneable {
this.prepareSourceCode();
final Bytecode<C> bytecode = this.bytecode.clone();
final Coefficient<C> coefficient = this.coefficient.clone();
- bytecode.addInstruction(coefficient, Symbols.INITIAL, objects);
+ bytecode.addInstruction(coefficient, Symbols.INJECT, objects);
return new CoreTraversal<>(this.machine, bytecode, coefficient); // TODO
}
diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
index 25157fd..3f98959 100644
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
+++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
@@ -61,10 +61,11 @@ public final class TraversalUtil {
return args;
}
- public static Object[] addObjects(final Object[] original, final Object... updates) {
- final Object[] objects = new Object[original.length + updates.length];
- System.arraycopy(original, 0, objects, 0, original.length);
- System.arraycopy(updates, 0, objects, original.length, updates.length);
+ public static Object[] addObjects(final Object head, final Object[] original, final Object... updates) {
+ final Object[] objects = new Object[original.length + updates.length + 1];
+ objects[0] = head;
+ System.arraycopy(original, 0, objects, 1, original.length);
+ System.arraycopy(updates, 0, objects, original.length+1, updates.length);
return objects;
}
}
diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
index 86f2329..35c01ed 100644
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
+++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
@@ -63,8 +63,7 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
@Override
public Traversal<C, S, E> by(final String byString) {
- this.bytecode.addArgs(byString);
- return this;
+ return this.by(__.value(byString));
}
@Override
@@ -232,16 +231,12 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
@Override
public <R> Traversal<C, S, R> path(final String label) {
- this.addInstruction(Symbols.PATH, label, "|");
- return (Traversal) this.addInstruction(Symbols.VALUE, label);
+ return this.addInstruction(Symbols.PATH, label);
}
@Override
public Traversal<C, S, Path> path(final String label, final String... labels) {
- this.addInstruction(Symbols.PATH, label);
- this.bytecode.addArgs((Object[]) labels);
- this.bytecode.addArgs("|");
- return (Traversal) this;
+ return this.addInstruction(Symbols.PATH,TraversalUtil.addObjects(label,labels,"|"));
}
@Override
diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
index 77b3a40..e2f973f 100644
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
+++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
@@ -87,7 +87,7 @@ public class __ {
return __.<C, S>start().path();
}
- public static <C, S, R> Traversal<C, S, R> path(final String label) {
+ public static <C, S, E> Traversal<C, S, E> path(final String label) {
return __.<C, S>start().path(label);
}
@@ -106,4 +106,8 @@ public class __ {
public static <C, S, E> Traversal<C, S, E> union(final Traversal<C, S, E>... traversals) {
return __.<C, S>start().union(traversals);
}
+
+ public static <C, S, E> Traversal<C, S, E> value(final String key) {
+ return __.<C, S>start().value(key);
+ }
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
index 85f87c6..3931d58 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
@@ -22,7 +22,6 @@ import org.apache.tinkerpop.machine.bytecode.Bytecode;
import org.apache.tinkerpop.machine.traverser.Traverser;
import java.io.Serializable;
-import java.util.Arrays;
import java.util.Iterator;
/**
@@ -39,8 +38,6 @@ public interface Argument<E> extends Serializable, Cloneable {
public static <C, S, E> Argument<E> create(final Object... args) {
if (args[0] instanceof Bytecode)
return new BytecodeArgument<>((Bytecode<C>) args[0]);
- else if (args[0] instanceof String && ((String) args[0]).contains("::"))
- return new MethodArgument<>((String) args[0], Arrays.copyOfRange(args, 1, args.length));
else
return new ConstantArgument<>((E) args[0]);
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
index 50582bf..16cf912 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.machine.bytecode.compiler;
import org.apache.tinkerpop.machine.bytecode.Bytecode;
import org.apache.tinkerpop.machine.bytecode.Instruction;
import org.apache.tinkerpop.machine.function.CFunction;
+import org.apache.tinkerpop.machine.function.initial.FlatMapInitial;
+import org.apache.tinkerpop.machine.function.initial.Initializing;
import java.util.ArrayList;
import java.util.List;
@@ -33,7 +35,9 @@ public interface BytecodeCompiler {
public default <C> List<CFunction<C>> compile(final Bytecode<C> bytecode) {
final List<CFunction<C>> functions = new ArrayList<>();
for (final Instruction<C> instruction : bytecode.getInstructions()) {
- functions.add(this.compile(instruction));
+ final CFunction function = this.compile(instruction);
+ functions.add(functions.isEmpty() && bytecode.getParent().isEmpty() && function instanceof Initializing ?
+ new FlatMapInitial<>(function.coefficient(), function.label(), (Initializing) function) : function);
}
return functions;
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
index b77011b..69a23a4 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
@@ -30,12 +30,12 @@ import org.apache.tinkerpop.machine.function.filter.HasKeyFilter;
import org.apache.tinkerpop.machine.function.filter.HasKeyValueFilter;
import org.apache.tinkerpop.machine.function.filter.IdentityFilter;
import org.apache.tinkerpop.machine.function.filter.IsFilter;
+import org.apache.tinkerpop.machine.function.flatmap.DbFlatMap;
import org.apache.tinkerpop.machine.function.flatmap.EntriesFlatMap;
import org.apache.tinkerpop.machine.function.flatmap.FlatMapFlatMap;
+import org.apache.tinkerpop.machine.function.flatmap.InjectFlatMap;
import org.apache.tinkerpop.machine.function.flatmap.UnfoldFlatMap;
import org.apache.tinkerpop.machine.function.flatmap.ValuesFlatMap;
-import org.apache.tinkerpop.machine.function.initial.DbInitial;
-import org.apache.tinkerpop.machine.function.initial.InitialInitial;
import org.apache.tinkerpop.machine.function.map.ConstantMap;
import org.apache.tinkerpop.machine.function.map.IncrMap;
import org.apache.tinkerpop.machine.function.map.LoopsMap;
@@ -78,7 +78,7 @@ public final class CoreCompiler implements BytecodeCompiler {
put(Symbols.HAS_KEY_VALUE, FunctionType.FILTER);
put(Symbols.IDENTITY, FunctionType.FILTER);
put(Symbols.INCR, FunctionType.MAP);
- put(Symbols.INITIAL, FunctionType.INITIAL);
+ put(Symbols.INJECT, FunctionType.FLATMAP);
put(Symbols.IS, FunctionType.FILTER);
put(Symbols.JOIN, FunctionType.BARRIER);
put(Symbols.LOOPS, FunctionType.MAP);
@@ -89,12 +89,12 @@ public final class CoreCompiler implements BytecodeCompiler {
put(Symbols.REPEAT, FunctionType.BRANCH);
put(Symbols.SUM, FunctionType.REDUCE);
put(Symbols.UNFOLD, FunctionType.FLATMAP);
- put(Symbols.V, FunctionType.FLATMAP);
put(Symbols.VALUE, FunctionType.MAP);
put(Symbols.VALUES, FunctionType.FLATMAP);
//
put(Symbols.DB, FunctionType.FLATMAP);
+ put(Symbols.V, FunctionType.FLATMAP);
}};
@Override
@@ -124,8 +124,8 @@ public final class CoreCompiler implements BytecodeCompiler {
return IdentityFilter.compile(instruction);
case Symbols.INCR:
return IncrMap.compile(instruction);
- case Symbols.INITIAL:
- return InitialInitial.compile(instruction);
+ case Symbols.INJECT:
+ return InjectFlatMap.compile(instruction);
case Symbols.IS:
return IsFilter.compile(instruction);
case Symbols.JOIN:
@@ -151,7 +151,7 @@ public final class CoreCompiler implements BytecodeCompiler {
case Symbols.VALUES:
return ValuesFlatMap.compile(instruction);
case Symbols.DB:
- return DbInitial.compile(instruction);
+ return DbFlatMap.compile(instruction);
default:
return null;
}
@@ -205,7 +205,7 @@ public final class CoreCompiler implements BytecodeCompiler {
public static final String HAS_KEY_VALUE = "hasKeyValue";
public static final String IDENTITY = "identity";
public static final String INCR = "incr";
- public static final String INITIAL = "initial";
+ public static final String INJECT = "initial";
public static final String IS = "is";
public static final String JOIN = "join";
public static final String LOOPS = "loops";
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
index d3580d6..3ceca4b 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
@@ -23,6 +23,6 @@ package org.apache.tinkerpop.machine.bytecode.compiler;
*/
public enum FunctionType {
- BARRIER, INITIAL, MAP, FLATMAP, FILTER, REDUCE, BRANCH
+ BARRIER, MAP, FLATMAP, FILTER, REDUCE, BRANCH
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
deleted file mode 100644
index c2aef26..0000000
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.machine.bytecode.compiler;
-
-import org.apache.tinkerpop.machine.structure.TTuple;
-import org.apache.tinkerpop.machine.traverser.Traverser;
-import org.apache.tinkerpop.machine.util.IteratorUtils;
-import org.apache.tinkerpop.machine.util.NumberHelper;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class MethodArgument<E> implements Argument<E> {
-
- private final String method;
- private final Argument[] arguments;
-
- public MethodArgument(final String method, final Object... arguments) {
- this.method = method.split("::")[1];
- this.arguments = new Argument[arguments.length];
- for (int i = 0; i < arguments.length; i++) {
- this.arguments[i] = Argument.create(arguments[i]);
- }
- }
-
- @Override
- public <C, S> E mapArg(final Traverser<C, S> traverser) {
- if (this.method.equals("object"))
- return (E) traverser.object();
- else if (this.method.equals("count"))
- return (E) traverser.coefficient().count();
- else if (this.method.equals("keys"))
- return (E) ((Map) traverser.object()).keySet();
- else if (this.method.equals("get"))
- return (E) ((TTuple) traverser.object()).value(this.arguments[0].mapArg(traverser));
- else if (this.method.equals("add"))
- return (E) NumberHelper.add((Number) traverser.object(), (Number) this.arguments[0].mapArg(traverser));
- else
- throw new RuntimeException("Unknown method");
- }
-
- @Override
- public <C, S> Iterator<E> flatMapArg(final Traverser<C, S> traverser) {
- return IteratorUtils.of(this.mapArg(traverser));
- }
-
- @Override
- public <C, S> boolean filterArg(final Traverser<C, S> traverser) {
- return false;
- }
-
- @Override
- public int hashCode() {
- return this.method.hashCode() ^ Arrays.hashCode(this.arguments);
- }
-
- @Override
- public boolean equals(final Object object) {
- return object instanceof MethodArgument &&
- this.method.equals(((MethodArgument) object).method) &&
- Arrays.equals(this.arguments, ((MethodArgument) object).arguments);
- }
-
- @Override
- public MethodArgument<E> clone() {
- return this;
- }
-
- @Override
- public String toString() {
- return this.method + "(" + Arrays.toString(this.arguments) + ")";
- }
-}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/DbFlatMap.java
similarity index 70%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/DbFlatMap.java
index 246f072..a071ec7 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/DbFlatMap.java
@@ -16,39 +16,33 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.function.initial;
+package org.apache.tinkerpop.machine.function.flatmap;
import org.apache.tinkerpop.machine.bytecode.Instruction;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.InitialFunction;
-import org.apache.tinkerpop.machine.function.MapFunction;
+import org.apache.tinkerpop.machine.function.initial.Initializing;
import org.apache.tinkerpop.machine.structure.rdbms.TDatabase;
import org.apache.tinkerpop.machine.traverser.Traverser;
+import org.apache.tinkerpop.machine.util.IteratorUtils;
import org.apache.tinkerpop.machine.util.StringFactory;
import java.util.Iterator;
-import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class DbInitial<C, S> extends AbstractFunction<C> implements InitialFunction<C, TDatabase>, MapFunction<C, S, TDatabase> {
+public final class DbFlatMap<C, S> extends AbstractFunction<C> implements Initializing<C, S, TDatabase> {
private TDatabase database;
- private DbInitial(final Coefficient<C> coefficient, final String label, final TDatabase database) {
+ private DbFlatMap(final Coefficient<C> coefficient, final String label, final TDatabase database) {
super(coefficient, label);
this.database = database;
}
@Override
- public Iterator<TDatabase> get() {
- return List.of(this.database).iterator();
- }
-
- @Override
public int hashCode() {
return super.hashCode() ^ this.database.hashCode();
}
@@ -58,17 +52,17 @@ public final class DbInitial<C, S> extends AbstractFunction<C> implements Initia
return StringFactory.makeFunctionString(this, this.database);
}
- public static <C, S> DbInitial<C, S> compile(final Instruction<C> instruction) {
- return new DbInitial<>(instruction.coefficient(), instruction.label(), (TDatabase) instruction.args()[0]);
+ public static <C, S> DbFlatMap<C, S> compile(final Instruction<C> instruction) {
+ return new DbFlatMap<>(instruction.coefficient(), instruction.label(), (TDatabase) instruction.args()[0]);
}
@Override
- public TDatabase apply(final Traverser<C, S> traverser) {
- return this.database;
+ public Iterator<TDatabase> apply(final Traverser<C, S> traverser) {
+ return IteratorUtils.of(this.database);
}
@Override
- public DbInitial<C, S> clone() {
+ public DbFlatMap<C, S> clone() { // TODO
return this;
}
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/InitialInitial.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/InjectFlatMap.java
similarity index 67%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/InitialInitial.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/InjectFlatMap.java
index d043892..1635b2b 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/InitialInitial.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/InjectFlatMap.java
@@ -16,12 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.function.initial;
+package org.apache.tinkerpop.machine.function.flatmap;
import org.apache.tinkerpop.machine.bytecode.Instruction;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.InitialFunction;
+import org.apache.tinkerpop.machine.function.initial.Initializing;
+import org.apache.tinkerpop.machine.traverser.Traverser;
import org.apache.tinkerpop.machine.util.ArrayIterator;
import org.apache.tinkerpop.machine.util.StringFactory;
@@ -31,17 +32,17 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class InitialInitial<C, S> extends AbstractFunction<C> implements InitialFunction<C, S> {
+public final class InjectFlatMap<C, S, E> extends AbstractFunction<C> implements Initializing<C, S, E> {
- private final S[] objects;
+ private final E[] objects;
- private InitialInitial(final Coefficient<C> coefficient, final String label, final S... objects) {
+ private InjectFlatMap(final Coefficient<C> coefficient, final String label, final E... objects) {
super(coefficient, label);
this.objects = objects;
}
@Override
- public Iterator<S> get() {
+ public Iterator<E> apply(Traverser<C, S> traverser) {
return new ArrayIterator<>(this.objects);
}
@@ -55,7 +56,14 @@ public final class InitialInitial<C, S> extends AbstractFunction<C> implements I
return StringFactory.makeFunctionString(this, this.objects);
}
- public static <C, S> InitialInitial<C, S> compile(final Instruction<C> instruction) {
- return new InitialInitial<>(instruction.coefficient(), instruction.label(), (S[]) instruction.args());
+ @Override
+ public InjectFlatMap<C, S, E> clone() {
+ return this; // TODO
+ }
+
+ public static <C, S, E> InjectFlatMap<C, S, E> compile(final Instruction<C> instruction) {
+ return new InjectFlatMap<>(instruction.coefficient(), instruction.label(), (E[]) instruction.args());
}
+
+
}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/FlatMapInitial.java
similarity index 66%
copy from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/FlatMapInitial.java
index 2790291..2a2ca21 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/FlatMapInitial.java
@@ -16,29 +16,29 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.structure.blueprints.function.initial;
+package org.apache.tinkerpop.machine.function.initial;
-import org.apache.tinkerpop.machine.structure.graph.TVertex;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
import org.apache.tinkerpop.machine.function.InitialFunction;
-import org.apache.tinkerpop.machine.structure.blueprints.data.BlueprintsVertex;
-import org.apache.tinkerpop.machine.util.IteratorUtils;
+import org.apache.tinkerpop.machine.traverser.species.EmptyTraverser;
import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class VerticesFlatMap<C> extends AbstractFunction<C> implements InitialFunction<C, TVertex> {
+public final class FlatMapInitial<C, S> extends AbstractFunction<C> implements InitialFunction<C, S> {
- public VerticesFlatMap(final Coefficient<C> coefficient, final String label) {
+ private final Initializing<C, ?, S> function;
+
+ public FlatMapInitial(final Coefficient<C> coefficient, final String label, final Initializing<C, ?, S> function) {
super(coefficient, label);
+ this.function = function;
}
@Override
- public Iterator<TVertex> get() {
- return IteratorUtils.of(new BlueprintsVertex(), new BlueprintsVertex());
+ public Iterator<S> get() {
+ return this.function.apply(EmptyTraverser.instance());
}
-
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/Initializing.java
similarity index 82%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/Initializing.java
index d3580d6..782e1f3 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/Initializing.java
@@ -16,13 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.bytecode.compiler;
+package org.apache.tinkerpop.machine.function.initial;
+
+import org.apache.tinkerpop.machine.function.FlatMapFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public enum FunctionType {
-
- BARRIER, INITIAL, MAP, FLATMAP, FILTER, REDUCE, BRANCH
-
+public interface Initializing<C, S, E> extends FlatMapFunction<C, S, E> {
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
index 7702568..5aac466 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.machine.traverser.path.BasicPath;
import org.apache.tinkerpop.machine.traverser.path.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -82,20 +83,25 @@ public final class PathMap<C, S> extends AbstractFunction<C> implements MapFunct
return clone;
}
- public static <C, S> PathMap<C, S> compile(final Instruction<C> instruction) {
- final List<String> labels = new ArrayList<>();
- final List<Compilation<C, Object, Object>> compilations = new ArrayList<>();
- boolean processingLabels = true;
- for (final Object arg : instruction.args()) {
- if (arg.equals("|")) {
- processingLabels = false;
- continue;
+ public static <C, S, E> MapFunction<C, S, E> compile(final Instruction<C> instruction) {
+ if (Arrays.stream(instruction.args()).anyMatch("|"::equals)) {
+ final List<String> labels = new ArrayList<>();
+ final List<Compilation<C, Object, Object>> compilations = new ArrayList<>();
+ boolean processingLabels = true;
+ for (final Object arg : instruction.args()) {
+ if (arg.equals("|")) {
+ processingLabels = false;
+ continue;
+ }
+ if (processingLabels)
+ labels.add((String) arg);
+ else
+ compilations.add(Compilation.compile(arg));
}
- if (processingLabels)
- labels.add((String) arg);
- else
- compilations.add(Compilation.compile(arg));
+ return (MapFunction<C, S, E>) new PathMap<>(instruction.coefficient(), instruction.label(), labels, compilations);
+ } else {
+ return PathObjectMap.compile(instruction);
}
- return new PathMap<>(instruction.coefficient(), instruction.label(), labels, compilations);
+
}
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathObjectMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathObjectMap.java
new file mode 100644
index 0000000..b124ac1
--- /dev/null
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathObjectMap.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.function.map;
+
+import org.apache.tinkerpop.machine.bytecode.Instruction;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.coefficient.Coefficient;
+import org.apache.tinkerpop.machine.function.AbstractFunction;
+import org.apache.tinkerpop.machine.function.MapFunction;
+import org.apache.tinkerpop.machine.traverser.Traverser;
+import org.apache.tinkerpop.machine.traverser.path.Path;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class PathObjectMap<C, S, E> extends AbstractFunction<C> implements MapFunction<C, S, E> {
+
+ private final String pathLabel;
+ private Compilation<C, Object, Object> byCompilation;
+
+ private PathObjectMap(final Coefficient<C> coefficient, final String label, final String pathLabel, final Compilation<C, Object, Object> byCompilation) {
+ super(coefficient, label);
+ this.pathLabel = pathLabel;
+ this.byCompilation = byCompilation;
+ }
+
+ @Override
+ public E apply(final Traverser<C, S> traverser) {
+ final Object object = traverser.path().get(Path.Pop.last, this.pathLabel);
+ return (E) (null == this.byCompilation ? object : this.byCompilation.mapObject(object).object());
+ }
+
+
+ @Override
+ public int hashCode() {
+ return super.hashCode() ^ this.pathLabel.hashCode() ^ (null == this.byCompilation ? 1 : this.byCompilation.hashCode());
+ }
+
+ @Override
+ public PathObjectMap<C, S, E> clone() {
+ final PathObjectMap<C, S, E> clone = (PathObjectMap<C, S, E>) super.clone();
+ clone.byCompilation = null == this.byCompilation ? null : this.byCompilation.clone();
+ return clone;
+ }
+
+ public static <C, S, E> PathObjectMap<C, S, E> compile(final Instruction<C> instruction) {
+ return new PathObjectMap<>(instruction.coefficient(), instruction.label(), (String) instruction.args()[0], Compilation.compileOrNull(1, instruction.args()));
+ }
+}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
index d60cfff..65e02cb 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
@@ -50,7 +50,7 @@ public final class ExplainStrategy extends AbstractStrategy<Strategy.DecorationS
bytecode.getInstructions().clear();
bytecode.addInstruction(
(Coefficient<C>) LongCoefficient.create(),
- Symbols.INITIAL,
+ Symbols.INJECT,
ExplainStrategy.explainBytecode(clone));
}
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
index c324caf..cc4763d 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
@@ -41,6 +41,8 @@ public interface TTuple<K, V> {
public void remove(final K key);
+ public int size();
+
public Iterator<T2Tuple<K, V>> entries();
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java
index e94e138..aeffd07 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java
@@ -66,6 +66,11 @@ public final class J2Tuple<K, V> implements T2Tuple<K, V> {
}
@Override
+ public int size() {
+ return 1;
+ }
+
+ @Override
public Iterator<T2Tuple<K, V>> entries() {
return IteratorUtils.of(this);
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
index 7f59f9a..5966aa2 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
@@ -70,6 +70,11 @@ public class JTuple<K, V> implements TTuple<K, V> {
}
@Override
+ public int size() {
+ return this.map.size();
+ }
+
+ @Override
public Iterator<T2Tuple<K, V>> entries() {
return IteratorUtils.map(this.map.entrySet().iterator(), e -> new J2Tuple<>(e.getKey(), e.getValue()));
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/BasicPath.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/BasicPath.java
index 19c3736..5b7f078 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/BasicPath.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/BasicPath.java
@@ -19,7 +19,6 @@
package org.apache.tinkerpop.machine.traverser.path;
import org.apache.tinkerpop.machine.structure.util.T2Tuple;
-import org.apache.tinkerpop.machine.util.IteratorUtils;
import java.util.ArrayList;
import java.util.Iterator;
@@ -42,11 +41,6 @@ public final class BasicPath implements Path {
}
@Override
- public Object value(final String key) {
- return this.get(Pop.last, key);
- }
-
- @Override
public void set(final String key, final Object value) {
final int index = this.labels.indexOf(key);
if (-1 != index)
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/EmptyPath.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/EmptyPath.java
index b3b0a6d..e3039f1 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/EmptyPath.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/EmptyPath.java
@@ -40,11 +40,6 @@ public final class EmptyPath implements Path {
}
@Override
- public Object value(final String key) {
- throw new IllegalStateException("No objects in EmptyPath");
- }
-
- @Override
public void set(final String key, final Object value) {
}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/Path.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/Path.java
index cd911b5..0d06f73 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/Path.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/traverser/path/Path.java
@@ -25,7 +25,7 @@ import java.io.Serializable;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface Path extends Serializable, Cloneable, TTuple<String,Object> {
+public interface Path extends Serializable, Cloneable, TTuple<String, Object> {
public enum Pop {
first, last, all;
@@ -39,6 +39,11 @@ public interface Path extends Serializable, Cloneable, TTuple<String,Object> {
public Object get(final Pop pop, final String label);
+ @Override
+ public default Object value(final String key) {
+ return this.get(Pop.last, key);
+ }
+
public int size();
public Path clone();
diff --git a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
index f93f644..cc5a4cf 100644
--- a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
+++ b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
@@ -59,9 +59,7 @@ public final class Pipes<C, S, E> implements Processor<C, S, E> {
previousStep = this.startStep;
}
- if (this.steps.isEmpty() && function instanceof InitialFunction)
- nextStep = new InitialStep<>((InitialFunction<C, S>) function, compilation.getTraverserFactory()); // TODO: this is a hack for DB
- else if (function instanceof RepeatBranch)
+ if (function instanceof RepeatBranch)
nextStep = new RepeatStep<>(previousStep, (RepeatBranch<C, S>) function);
else if (function instanceof BranchFunction)
nextStep = new BranchStep<>(previousStep, (BranchFunction<C, S, E>) function);
@@ -71,6 +69,8 @@ public final class Pipes<C, S, E> implements Processor<C, S, E> {
nextStep = new FlatMapStep<>(previousStep, (FlatMapFunction<C, S, E>) function);
else if (function instanceof MapFunction)
nextStep = new MapStep<>(previousStep, (MapFunction<C, S, E>) function);
+ else if (function instanceof InitialFunction)
+ nextStep = new InitialStep<>((InitialFunction<C, S>) function, compilation.getTraverserFactory());
else if (function instanceof BarrierFunction)
nextStep = new BarrierStep<>(previousStep, (BarrierFunction<C, S, E, Object>) function, compilation.getTraverserFactory());
else if (function instanceof ReduceFunction)
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
index 06f77c1..eb3dc6c 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
@@ -23,7 +23,7 @@ import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
import org.apache.tinkerpop.machine.bytecode.compiler.FunctionType;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.CFunction;
-import org.apache.tinkerpop.machine.structure.blueprints.function.initial.VerticesFlatMap;
+import org.apache.tinkerpop.machine.structure.blueprints.function.flatmap.VerticesFlatMap;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -53,7 +53,7 @@ public final class BlueprintsCompiler implements BytecodeCompiler {
@Override
public FunctionType getFunctionType(final String op) {
- return op.equals(Symbols.BP_V) ? FunctionType.INITIAL : null;
+ return op.equals(Symbols.BP_V) ? FunctionType.FLATMAP : null;
}
public static class Symbols {
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
index fa08d24..120533e 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
@@ -69,6 +69,11 @@ public class BlueprintsVertex<V> implements TVertex<V>, Serializable {
}
@Override
+ public int size() {
+ return 0;
+ }
+
+ @Override
public V value(String key) {
return (V) "marko";
}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/flatmap/VerticesFlatMap.java
similarity index 79%
rename from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
rename to java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/flatmap/VerticesFlatMap.java
index 2790291..0f9c2e7 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/flatmap/VerticesFlatMap.java
@@ -16,13 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.structure.blueprints.function.initial;
+package org.apache.tinkerpop.machine.structure.blueprints.function.flatmap;
-import org.apache.tinkerpop.machine.structure.graph.TVertex;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.InitialFunction;
+import org.apache.tinkerpop.machine.function.FlatMapFunction;
import org.apache.tinkerpop.machine.structure.blueprints.data.BlueprintsVertex;
+import org.apache.tinkerpop.machine.structure.graph.TVertex;
+import org.apache.tinkerpop.machine.traverser.Traverser;
import org.apache.tinkerpop.machine.util.IteratorUtils;
import java.util.Iterator;
@@ -30,15 +31,20 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class VerticesFlatMap<C> extends AbstractFunction<C> implements InitialFunction<C, TVertex> {
+public class VerticesFlatMap<C, S> extends AbstractFunction<C> implements FlatMapFunction<C, S, TVertex> {
public VerticesFlatMap(final Coefficient<C> coefficient, final String label) {
super(coefficient, label);
}
@Override
- public Iterator<TVertex> get() {
+ public Iterator<TVertex> apply(final Traverser<C, S> traverser) {
return IteratorUtils.of(new BlueprintsVertex(), new BlueprintsVertex());
}
+ @Override
+ public VerticesFlatMap<C, S> clone() {
+ return this; // TODO;
+ }
+
}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
index 8cbe34f..6b18d77 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
@@ -38,6 +38,6 @@ public class BlueprintsVerticesStrategy extends AbstractStrategy<Strategy.Provid
temp = instruction;
}
if (null != temp)
- BytecodeUtil.replaceInstruction(bytecode, temp, new Instruction<>(temp.coefficient(), BlueprintsCompiler.Symbols.BP_V));
+ BytecodeUtil.replaceInstruction(bytecode, temp, new Instruction<>(temp.coefficient(), BlueprintsCompiler.Symbols.BP_V)); // TODO: as(label)
}
}
diff --git a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java
index ed57e74..b04e894 100644
--- a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.machine.structure.rdbms.TDatabase;
import org.apache.tinkerpop.machine.structure.rdbms.TTable;
import org.apache.tinkerpop.machine.structure.util.J2Tuple;
import org.apache.tinkerpop.machine.structure.util.T2Tuple;
+import org.apache.tinkerpop.machine.util.IteratorUtils;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -83,6 +84,11 @@ final class JDBCDatabase implements TDatabase {
}
@Override
+ public int size() {
+ return (int) IteratorUtils.count(this.entries());
+ }
+
+ @Override
public Iterator<T2Tuple<String, TTable>> entries() {
try {
final ResultSet result = this.connection.createStatement().executeQuery("SHOW TABLES");
diff --git a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java
index 2591553..36d2c96 100644
--- a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java
@@ -101,6 +101,16 @@ final class JDBCRow<V> implements TRow<V> {
}
@Override
+ public int size() {
+ try {
+ this.rows.absolute(this.rowId);
+ return this.rows.getMetaData().getColumnCount();
+ } catch (final SQLException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ }
+
+ @Override
public Iterator<T2Tuple<String, V>> entries() {
try {
this.rows.absolute(this.rowId);
diff --git a/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java b/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java
index 242bba7..6429f07 100644
--- a/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java
+++ b/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java
@@ -67,6 +67,6 @@ public class JDBCTest {
System.out.println(jdbc.db().values("people").toList());
System.out.println(jdbc.db().values("people").value("name").toList());
System.out.println(jdbc.db().values("people").entries().toList());
- System.out.println(jdbc.db().values("people").as("x").db().values("people").has("name", __.path("x").value("name")).as("y").path("x", "y").toList());
+ System.out.println(jdbc.db().values("people").as("x").db().values("people").has("name", __.path("x").by("name")).as("y").path("x", "y").toList());
}
}