fixed a bug in LambdaRestrictionStrategy where named @ steps were considered lambda. Came up with a different way to check lambdas in .toString(). Works for Groovy, Java, and Python.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/beae74c4 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/beae74c4 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/beae74c4 Branch: refs/heads/TINKERPOP-1784 Commit: beae74c43505d1f7732f92a500dc58fc4b142af1 Parents: 1cd042b Author: Marko A. Rodriguez <[email protected]> Authored: Mon Oct 2 15:23:33 2017 -0600 Committer: Marko A. Rodriguez <[email protected]> Committed: Mon Oct 2 15:23:33 2017 -0600 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../verification/LambdaRestrictionStrategy.java | 14 +++++++------- .../verification/LambdaRestrictionStrategyTest.java | 6 ++++++ 3 files changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/beae74c4/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index e48dfb5..f1ad017 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima [[release-3-2-7]] === TinkerPop 3.2.7 (Release Date: NOT OFFICIALLY RELEASED YET) +* Fixed a bug in `LambdaRestrictionStrategy` where named steps with `@` were being considered lambdas. * `ReferenceVertex` was missing its `label()` string. `ReferenceElement` now supports all label handling. * Added `GraphHelper.cloneElements(Graph original, Graph clone)` to the `gremlin-test` module to quickly clone a graph. * Bump to GMavenPlus 1.6. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/beae74c4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java index 33b29ff..134a852 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java @@ -61,19 +61,19 @@ public final class LambdaRestrictionStrategy extends AbstractTraversalStrategy<T throw new VerificationException("The provided traversal contains a lambda step: " + step, traversal); if (step instanceof ComparatorHolder) { for (final Pair<Traversal.Admin<Object, Comparable>, Comparator<Comparable>> comparator : ((ComparatorHolder<Object, Comparable>) step).getComparators()) { - final String comparatorString = comparator.toString(); - if (comparatorString.contains("$") || comparatorString.contains("@")) + if (hasLambda(comparator.toString())) throw new VerificationException("The provided step contains a lambda comparator: " + step, traversal); } } - if (step instanceof SackValueStep) { - final String sackString = ((SackValueStep) step).getSackFunction().toString(); - if (sackString.contains("$") || sackString.contains("@")) - throw new VerificationException("The provided step contains a lambda bi-function: " + step, traversal); - } + if (step instanceof SackValueStep && hasLambda(((SackValueStep) step).getSackFunction().toString())) + throw new VerificationException("The provided step contains a lambda bi-function: " + step, traversal); } } + private final boolean hasLambda(final String objectString) { + return objectString.contains("$") || objectString.toLowerCase().contains("lambda"); + } + public static LambdaRestrictionStrategy instance() { return INSTANCE; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/beae74c4/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java index 9bb251c..1804ddf 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java @@ -24,8 +24,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy; import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies; import org.apache.tinkerpop.gremlin.structure.Column; +import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,6 +36,7 @@ import org.junit.runners.Parameterized; import java.util.Arrays; import static org.apache.tinkerpop.gremlin.process.traversal.Operator.sum; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -63,6 +66,8 @@ public class LambdaRestrictionStrategyTest { // {"sack(sum).by('age')", __.sack(sum).by("age"), true}, {"sack{a,b -> a+b}.by('age')", __.sack((a, b) -> (int) a + (int) b).by("age"), false}, + // + {"order().by(outE('rating').values('stars').mean()).profile()", __.order().by(outE("ratings").values("stars").mean()).profile(), true} }); } @@ -78,6 +83,7 @@ public class LambdaRestrictionStrategyTest { @Test public void shouldBeVerifiedIllegal() { final TraversalStrategies strategies = new DefaultTraversalStrategies(); + strategies.addStrategies(ProfileStrategy.instance()); strategies.addStrategies(LambdaRestrictionStrategy.instance()); traversal.asAdmin().setStrategies(strategies); if (allow) {
