Skip to content

Commit

Permalink
upgrade to tinkerpop apache
Browse files Browse the repository at this point in the history
  • Loading branch information
pieter committed Feb 20, 2015
1 parent 960caa4 commit b5ae2e4
Show file tree
Hide file tree
Showing 88 changed files with 412 additions and 308 deletions.
6 changes: 3 additions & 3 deletions pom.xml
Expand Up @@ -133,19 +133,19 @@
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tinkerpop</groupId>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-core</artifactId>
<!--<version>3.0.0.M7</version>-->
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tinkerpop</groupId>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-groovy</artifactId>
<!--<version>3.0.0.M7</version>-->
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tinkerpop</groupId>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-test</artifactId>
<!--<version>3.0.0.M7</version>-->
<version>3.0.0-SNAPSHOT</version>
Expand Down
4 changes: 2 additions & 2 deletions sqlg-core/pom.xml
Expand Up @@ -12,11 +12,11 @@

<dependencies>
<dependency>
<groupId>com.tinkerpop</groupId>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-core</artifactId>
</dependency>
<dependency>
<groupId>com.tinkerpop</groupId>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-groovy</artifactId>
</dependency>
<dependency>
Expand Down
Expand Up @@ -3,7 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
Expand Down
@@ -1,13 +1,12 @@
package org.umlg.sqlg.strategy;

import com.tinkerpop.gremlin.process.Step;
import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.TraversalEngine;
import com.tinkerpop.gremlin.process.graph.traversal.step.HasContainerHolder;
import com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GraphStep;
import com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import com.tinkerpop.gremlin.process.graph.traversal.strategy.AbstractTraversalStrategy;
import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.HasContainerHolder;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GraphStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.umlg.sqlg.structure.SqlgGraphStep;

/**
Expand All @@ -17,11 +16,13 @@
public class SqlgGraphStepStrategy extends AbstractTraversalStrategy {

private static final SqlgGraphStepStrategy INSTANCE = new SqlgGraphStepStrategy();
// private static final List<Class> CONSECUTIVE_STEPS_TO_REPLACE = Arrays.asList(VertexStep.class);
// private static final List<BiPredicate> SUPPORTED_BI_PREDICATE = Arrays.asList(Compare.eq);

private SqlgGraphStepStrategy() {
}

public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine traversalEngine) {
public void apply(final Traversal.Admin<?, ?> traversal) {
final Step<?, ?> startStep = traversal.getStartStep();
if (startStep instanceof GraphStep) {
final GraphStep<?> originalGraphStep = (GraphStep) startStep;
Expand All @@ -46,9 +47,58 @@ public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine t
}
currentStep = currentStep.getNextStep();
}

// //Replace all consecutive VertexStep and HasStep with one step
// Step previous = null;
// SqlgVertexStepCompiler sqlgVertexStepCompiler = null;
// List<Step> steps = new ArrayList<>(traversal.asAdmin().getSteps());
// ListIterator<Step> stepIterator = steps.listIterator();
// while (stepIterator.hasNext()) {
// Step step = stepIterator.next();
// if (CONSECUTIVE_STEPS_TO_REPLACE.contains(step.getClass())) {
// Pair<Step<?, ?>, List<HasContainer>> stepPair = Pair.of(step, new ArrayList<>());
// if (previous == null) {
// sqlgVertexStepCompiler = new SqlgVertexStepCompiler(traversal);
// TraversalHelper.replaceStep(step, sqlgVertexStepCompiler, traversal);
// collectHasSteps(stepIterator, traversal, stepPair);
// } else {
// traversal.removeStep(step);
// collectHasSteps(stepIterator, traversal, stepPair);
// }
// previous = step;
// sqlgVertexStepCompiler.addReplacedStep(stepPair);
// } else {
// previous = null;
// }
// }
}
}

// private void collectHasSteps(ListIterator<Step> iterator, Traversal.Admin<?, ?> traversal, Pair<Step<?, ?>, List<HasContainer>> stepPair) {
// //Collect the hasSteps
// while (iterator.hasNext()) {
// Step<?, ?> currentStep = iterator.next();
// if (currentStep instanceof HasContainerHolder && ((HasContainerHolder) currentStep).getHasContainers().size() != 1) {
// throw new IllegalStateException("Only handle HasContainerHolder with one HasContainer: BUG");
// }
// if (currentStep instanceof HasContainerHolder && SUPPORTED_BI_PREDICATE.contains(((HasContainerHolder) currentStep).getHasContainers().get(0).predicate)) {
// if (currentStep.getLabel().isPresent()) {
// final IdentityStep identityStep = new IdentityStep<>(traversal);
// identityStep.setLabel(currentStep.getLabel().get());
// TraversalHelper.insertAfterStep(identityStep, currentStep, traversal);
// }
// iterator.remove();
// traversal.removeStep(currentStep);
// stepPair.getValue().addAll(((HasContainerHolder) currentStep).getHasContainers());
// } else if (currentStep instanceof IdentityStep) {
// // do nothing
// } else {
// iterator.previous();
// break;
// }
// }
// }

public static SqlgGraphStepStrategy instance() {
return INSTANCE;
}
Expand Down
39 changes: 21 additions & 18 deletions sqlg-core/src/main/java/org/umlg/sqlg/strategy/SqlgVertexStep.java
@@ -1,13 +1,14 @@
package org.umlg.sqlg.strategy;

import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.FlatMapStep;
import com.tinkerpop.gremlin.process.graph.util.HasContainer;
import com.tinkerpop.gremlin.process.traversal.step.Reversible;
import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import com.tinkerpop.gremlin.structure.Direction;
import com.tinkerpop.gremlin.structure.Element;
import com.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.FlatMapStep;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.umlg.sqlg.structure.SqlgVertex;

import java.util.*;
Expand All @@ -29,16 +30,6 @@ public SqlgVertexStep(final Traversal.Admin traversal, final Class<E> returnClas
this.direction = direction;
this.edgeLabels = edgeLabels;
this.returnClass = returnClass;
if (Vertex.class.isAssignableFrom(this.returnClass))
this.setFunction(traverser -> {
if (this.hasContainers.isEmpty()) {
return (Iterator<E>) ((SqlgVertex)traverser.get()).vertices(Collections.emptyList(), this.direction, this.edgeLabels);
} else {
return (Iterator<E>) ((SqlgVertex)traverser.get()).vertices(hasContainers, this.direction, this.edgeLabels);
}
});
else
this.setFunction(traverser -> (Iterator<E>) traverser.get().iterators().edgeIterator(this.direction, this.edgeLabels));
}

public String toString() {
Expand All @@ -47,4 +38,16 @@ public String toString() {
TraversalHelper.makeStepString(this, this.direction, this.returnClass.getSimpleName().toLowerCase());
}

@Override
protected Iterator<E> flatMap(Traverser.Admin<Vertex> traverser) {
if (Vertex.class.isAssignableFrom(this.returnClass)) {
if (this.hasContainers.isEmpty()) {
return (Iterator<E>) ((SqlgVertex) traverser.get()).vertices(Collections.emptyList(), this.direction, this.edgeLabels);
} else {
return (Iterator<E>) ((SqlgVertex) traverser.get()).vertices(hasContainers, this.direction, this.edgeLabels);
}
} else {
return (Iterator<E>) traverser.get().iterators().edgeIterator(this.direction, this.edgeLabels);
}
}
}
@@ -1,14 +1,15 @@
package org.umlg.sqlg.strategy;

import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.FlatMapStep;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import com.tinkerpop.gremlin.process.graph.util.HasContainer;
import com.tinkerpop.gremlin.process.traversal.step.Reversible;
import com.tinkerpop.gremlin.structure.Element;
import com.tinkerpop.gremlin.structure.Vertex;
import com.tinkerpop.gremlin.structure.strategy.StrategyVertex;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.FlatMapStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.strategy.StrategyVertex;
import org.umlg.sqlg.structure.SqlgVertex;

import java.util.ArrayList;
Expand All @@ -25,14 +26,16 @@ public class SqlgVertexStepCompiler<E extends Element> extends FlatMapStep<Verte

public SqlgVertexStepCompiler(final Traversal.Admin traversal) {
super(traversal);
this.setFunction(traverser -> {
Vertex v = traverser.get();
if (v instanceof StrategyVertex) {
return (Iterator<E>) ((SqlgVertex)((StrategyVertex) traverser.get()).getBaseVertex()).elements(this.replacedSteps);
} else {
return (Iterator<E>) ((SqlgVertex) traverser.get()).elements(this.replacedSteps);
}
});
}

@Override
protected Iterator<E> flatMap(Traverser.Admin<Vertex> traverser) {
Vertex v = traverser.get();
if (v instanceof StrategyVertex) {
return (Iterator<E>) ((SqlgVertex)((StrategyVertex) traverser.get()).getBaseVertex()).elements(this.replacedSteps);
} else {
return (Iterator<E>) ((SqlgVertex) traverser.get()).elements(this.replacedSteps);
}
}

public void addReplacedStep(Pair<VertexStep, List<HasContainer>> stepPair) {
Expand Down
@@ -1,17 +1,17 @@
package org.umlg.sqlg.strategy;

import com.tinkerpop.gremlin.process.Step;
import com.tinkerpop.gremlin.process.Traversal;
import com.tinkerpop.gremlin.process.TraversalEngine;
import com.tinkerpop.gremlin.process.graph.traversal.step.HasContainerHolder;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import com.tinkerpop.gremlin.process.graph.traversal.strategy.AbstractTraversalStrategy;
import com.tinkerpop.gremlin.process.graph.util.HasContainer;
import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import com.tinkerpop.gremlin.structure.Compare;
import com.tinkerpop.gremlin.structure.Vertex;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.HasContainerHolder;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Compare;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.umlg.sqlg.structure.SqlgGraph;

import java.util.*;
Expand All @@ -28,16 +28,24 @@ public class SqlgVertexStepStrategy extends AbstractTraversalStrategy {
private SqlgGraph sqlgGraph;

public SqlgVertexStepStrategy(SqlgGraph sqlgGraph) {
this.sqlgGraph = sqlgGraph;
this.sqlgGraph = sqlgGraph;
}

@Override
public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine traversalEngine) {
public void apply(final Traversal.Admin<?, ?> traversal) {
if (this.sqlgGraph.features().supportsBatchMode() && this.sqlgGraph.tx().isInBatchMode()) {
List<VertexStep> vertexSteps = TraversalHelper.getStepsOfClass(VertexStep.class, traversal);

vertexSteps.forEach(
(s) -> TraversalHelper.replaceStep(s, new SqlgVertexStep(s.getTraversal(), s.getReturnClass(), s.getDirection(), s.getEdgeLabels()), traversal)
(s) -> {
SqlgVertexStep<Vertex> insertStep = new SqlgVertexStep<Vertex>(s.getTraversal(), s.getReturnClass(), s.getDirection(), s.getEdgeLabels());
TraversalHelper.replaceStep(
s,
insertStep,
traversal);
}
);

//The HasSteps following directly after a VertexStep is merged into the SqlgVertexStep
Set<Step> toRemove = new HashSet<>();
for (Step<?, ?> step : traversal.asAdmin().getSteps()) {
Expand Down Expand Up @@ -95,10 +103,10 @@ private void collectHasSteps(ListIterator<Step> iterator, Traversal.Admin<?, ?>
//Collect the hasSteps
while (iterator.hasNext()) {
Step<?, ?> currentStep = iterator.next();
if (currentStep instanceof HasContainerHolder && ((HasContainerHolder)currentStep).getHasContainers().size() != 1) {
if (currentStep instanceof HasContainerHolder && ((HasContainerHolder) currentStep).getHasContainers().size() != 1) {
throw new IllegalStateException("Only handle HasContainderHolder with one HasContainer: BUG");
}
if (currentStep instanceof HasContainerHolder && SUPPORTED_BI_PREDICATE.contains(((HasContainerHolder)currentStep).getHasContainers().get(0).predicate)) {
if (currentStep instanceof HasContainerHolder && SUPPORTED_BI_PREDICATE.contains(((HasContainerHolder) currentStep).getHasContainers().get(0).predicate)) {
if (currentStep.getLabel().isPresent()) {
final IdentityStep identityStep = new IdentityStep<>(traversal);
identityStep.setLabel(currentStep.getLabel().get());
Expand Down
@@ -1,8 +1,8 @@
package org.umlg.sqlg.structure;

import com.tinkerpop.gremlin.structure.Direction;
import com.tinkerpop.gremlin.structure.Edge;
import com.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
Expand Down
@@ -1,10 +1,10 @@
package org.umlg.sqlg.structure;

import com.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import com.tinkerpop.gremlin.process.graph.util.HasContainer;
import com.tinkerpop.gremlin.structure.Direction;
import com.tinkerpop.gremlin.structure.Edge;
import com.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.commons.lang3.tuple.Pair;

import java.sql.ResultSet;
Expand Down
@@ -1,6 +1,6 @@
package org.umlg.sqlg.structure;

import com.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Property;

import java.util.HashMap;
import java.util.Map;
Expand Down
@@ -1,8 +1,8 @@
package org.umlg.sqlg.structure;

import com.tinkerpop.gremlin.process.T;
import com.tinkerpop.gremlin.process.graph.util.HasContainer;
import com.tinkerpop.gremlin.structure.*;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
import org.apache.tinkerpop.gremlin.structure.*;
import org.apache.commons.lang3.tuple.Triple;

import java.sql.PreparedStatement;
Expand Down
4 changes: 2 additions & 2 deletions sqlg-core/src/main/java/org/umlg/sqlg/structure/SqlgEdge.java
@@ -1,7 +1,7 @@
package org.umlg.sqlg.structure;

import com.tinkerpop.gremlin.structure.*;
import com.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.structure.*;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
10 changes: 5 additions & 5 deletions sqlg-core/src/main/java/org/umlg/sqlg/structure/SqlgElement.java
@@ -1,11 +1,11 @@
package org.umlg.sqlg.structure;

import com.google.common.collect.Multimap;
import com.tinkerpop.gremlin.structure.Element;
import com.tinkerpop.gremlin.structure.Graph;
import com.tinkerpop.gremlin.structure.Property;
import com.tinkerpop.gremlin.structure.Vertex;
import com.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down

0 comments on commit b5ae2e4

Please sign in to comment.