(tinkerpop) branch 3.7-dev updated (73fe63bb51 -> 2f54a5413f)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 73fe63bb51 Reverted antlr upgrade - doens't support builds on JDK8 after 4.9 add 2f54a5413f Added way to check if the specified label was user defined CTR No new revisions were added by this update. Summary of changes: CHANGELOG.asciidoc | 1 + .../gremlin/process/traversal/step/map/AddVertexStartStep.java | 8 .../gremlin/process/traversal/step/map/AddVertexStep.java | 10 ++ 3 files changed, 19 insertions(+)
(tinkerpop) branch master updated: Added way to check if the specified label was user defined CTR
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/master by this push: new 2f54a5413f Added way to check if the specified label was user defined CTR new dd41ffbe6b Merge branch '3.7-dev' 2f54a5413f is described below commit 2f54a5413f066ba30ead88f4980d0ff9c9e0135c Author: Stephen Mallette AuthorDate: Thu Oct 3 11:36:05 2024 -0400 Added way to check if the specified label was user defined CTR --- CHANGELOG.asciidoc | 1 + .../gremlin/process/traversal/step/map/AddVertexStartStep.java | 8 .../gremlin/process/traversal/step/map/AddVertexStep.java | 10 ++ 3 files changed, 19 insertions(+) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 2d7efd06b1..60359aa8e8 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -38,6 +38,7 @@ This release also includes changes from <>. * Added getter method to `ConcatStep`, `ConjoinStep`, `SplitGlobalStep` and `SplitLocalStep` for their private fields. * Fixed older driver GraphBinary compatibility problems where using `ReferenceElementStrategy`, properties on elements returned as `null` instead of empty `List`. * Gremlin Server docker containers shutdown gracefully when receiving a SIGTERM. +* Added 'userProvidedLabel' property to detect if the default label was supplied explicitly or not. * Added DefaultIdManager.STRING for proper string id creation/handling. * Allowed specification of an `Operator` as a reducer in `withSideEffect` when parsing with the grammar. * Fixed bug in Bytecode build logic where duplicate strategies were added instead of replacing the existing ones. diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java index 3ca6efff08..fd52f445e8 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStep.java @@ -50,15 +50,22 @@ public class AddVertexStartStep extends AbstractStep private Parameters parameters = new Parameters(); private boolean first = true; private CallbackRegistry callbackRegistry; +private boolean userProvidedLabel; public AddVertexStartStep(final Traversal.Admin traversal, final String label) { super(traversal); this.parameters.set(this, T.label, null == label ? Vertex.DEFAULT_LABEL : label); +userProvidedLabel = label != null; } public AddVertexStartStep(final Traversal.Admin traversal, final Traversal vertexLabelTraversal) { super(traversal); this.parameters.set(this, T.label, null == vertexLabelTraversal ? Vertex.DEFAULT_LABEL : vertexLabelTraversal); +userProvidedLabel = vertexLabelTraversal != null; +} + +public boolean hasUserProvidedLabel() { +return userProvidedLabel; } @Override @@ -142,6 +149,7 @@ public class AddVertexStartStep extends AbstractStep public AddVertexStartStep clone() { final AddVertexStartStep clone = (AddVertexStartStep) super.clone(); clone.parameters = this.parameters.clone(); +clone.userProvidedLabel = this.userProvidedLabel; return clone; } } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java index 80597ca86c..0dfb55c2a1 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStep.java @@ -45,15 +45,22 @@ public class AddVertexStep extends ScalarMapStep private Parameters parameters = new Parameters(); private CallbackRegistry callbackRegistry; +private boolean userProvidedLabel; public AddVertexStep(final Traversal.Admin traversal, final String label) { super(traversal); this.parameters.set(this, T.label, null == label ? Vertex.DEFAULT_LABEL : label); +userProvidedLabel = label != null; } public AddVertexStep(final Traversal.Admin traversal, final Traversal.Admin vertexLabelTraversal) { super(traversal); this.parameters.set(this, T.label, null == vertexLabelTraversal ? Vertex.DEFAULT_LABEL : vertexLabelTraversal); +userProvidedLabel = vertexLabelTraversal != null; +} + +public boolean hasUserProvidedLabel() { +return userProvidedLabel; } @Overrid
(tinkerpop) branch 3.7-dev updated (6c8f7ffca7 -> 73fe63bb51)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 6c8f7ffca7 Bumped to ANTLR 4.13.2 add 73fe63bb51 Reverted antlr upgrade - doens't support builds on JDK8 after 4.9 No new revisions were added by this update. Summary of changes: CHANGELOG.asciidoc | 1 - pom.xml| 2 +- 2 files changed, 1 insertion(+), 2 deletions(-)
(tinkerpop) 02/02: Merge branch '3.7-dev'
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit b7c9ddda16a3d059b2a677f578f131a7124187b6 Merge: 38b7a6b872 73fe63bb51 Author: Stephen Mallette AuthorDate: Mon Sep 30 13:18:12 2024 -0400 Merge branch '3.7-dev' CHANGELOG.asciidoc | 1 - pom.xml| 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --cc pom.xml index dcb147d8f0,4e3071dc77..57d6a5a92e --- a/pom.xml +++ b/pom.xml @@@ -150,9 -151,9 +150,9 @@@ limitations under the License https://github.com/apache/tinkerpop - 4.13.2 + 4.9.1 2.3.1 -3.2.2 +4.4 2.9.0 2.6 2.8.0
(tinkerpop) branch master updated (38b7a6b872 -> b7c9ddda16)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 38b7a6b872 Merge branch '3.7-dev' new 73fe63bb51 Reverted antlr upgrade - doens't support builds on JDK8 after 4.9 new b7c9ddda16 Merge branch '3.7-dev' The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 1 - pom.xml| 2 +- 2 files changed, 1 insertion(+), 2 deletions(-)
(tinkerpop) 01/02: Reverted antlr upgrade - doens't support builds on JDK8 after 4.9
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 73fe63bb518853174787b10ee077ed2e7c3f0bfc Author: Stephen Mallette AuthorDate: Mon Sep 30 13:17:01 2024 -0400 Reverted antlr upgrade - doens't support builds on JDK8 after 4.9 --- CHANGELOG.asciidoc | 1 - pom.xml| 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 393a42e601..2d7efd06b1 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -38,7 +38,6 @@ This release also includes changes from <>. * Added getter method to `ConcatStep`, `ConjoinStep`, `SplitGlobalStep` and `SplitLocalStep` for their private fields. * Fixed older driver GraphBinary compatibility problems where using `ReferenceElementStrategy`, properties on elements returned as `null` instead of empty `List`. * Gremlin Server docker containers shutdown gracefully when receiving a SIGTERM. -* Bumped to ANTLR 4.13.2. * Added DefaultIdManager.STRING for proper string id creation/handling. * Allowed specification of an `Operator` as a reducer in `withSideEffect` when parsing with the grammar. * Fixed bug in Bytecode build logic where duplicate strategies were added instead of replacing the existing ones. diff --git a/pom.xml b/pom.xml index 62c1557605..4e3071dc77 100644 --- a/pom.xml +++ b/pom.xml @@ -151,7 +151,7 @@ limitations under the License. https://github.com/apache/tinkerpop -4.13.2 +4.9.1 2.3.1 3.2.2 2.9.0
(tinkerpop) branch 3.7-dev updated (9d9eb90e97 -> 6c8f7ffca7)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 9d9eb90e97 CTR fix tag/feature names for gherkin feature files add 6c8f7ffca7 Bumped to ANTLR 4.13.2 No new revisions were added by this update. Summary of changes: CHANGELOG.asciidoc | 11 ++- pom.xml| 2 +- 2 files changed, 7 insertions(+), 6 deletions(-)
(tinkerpop) 01/02: Bumped to ANTLR 4.13.2
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 6c8f7ffca761c434c048393202a09249317f9316 Author: Stephen Mallette AuthorDate: Mon Sep 30 12:07:20 2024 -0400 Bumped to ANTLR 4.13.2 --- CHANGELOG.asciidoc | 11 ++- pom.xml| 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index edc3e10996..393a42e601 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -26,18 +26,19 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima This release also includes changes from <>. * Refactored mutation events registration by moving reusable code from relevant steps to `EventUtil` -* Open `NoOpBarrierStep` for extensibility (removed `final` keyword). +* Opened `NoOpBarrierStep` for extensibility (removed `final` keyword). * Deprecated public constructor for `SeedStrategy` in favor of builder pattern to be consistent with other strategies. -* Allow specifying a customized Spark app name. +* Allowed specification of a customized Spark app name. * Added getter method to `CoinStep` for its probability field. * Attempted to detect JDK version for Gremlin Console to avoid problems with Java 17 if `neo4j-gremlin` is used. * Fixed so that `TrimGlobalStep` and `TrimLocalStep` have the same character control handling as `Ltrim` and `Rtrim` -* Fix a bug in `MaxLocalStep`, `MinLocalStep`, `MeanLocalStep` and `SumLocalStep` that it throws `NoSuchElementException` when encounters an empty iterator as input. -* Fix cases where Map keys of incomparable types could panic in `gremlin-go`. +* Fixed a bug in `MaxLocalStep`, `MinLocalStep`, `MeanLocalStep` and `SumLocalStep` that it throws `NoSuchElementException` when encounters an empty iterator as input. +* Fixed cases where Map keys of incomparable types could panic in `gremlin-go`. * Fixed an issue where missing necessary parameters for logging, resulting in '%!x(MISSING)' output in `gremlin-go`. * Added getter method to `ConcatStep`, `ConjoinStep`, `SplitGlobalStep` and `SplitLocalStep` for their private fields. -* When using `ReferenceElementStrategy` with `GraphBinaryV1`, properties on elements will be returned as `null` instead of empty list, to stay compatible with older drivers. +* Fixed older driver GraphBinary compatibility problems where using `ReferenceElementStrategy`, properties on elements returned as `null` instead of empty `List`. * Gremlin Server docker containers shutdown gracefully when receiving a SIGTERM. +* Bumped to ANTLR 4.13.2. * Added DefaultIdManager.STRING for proper string id creation/handling. * Allowed specification of an `Operator` as a reducer in `withSideEffect` when parsing with the grammar. * Fixed bug in Bytecode build logic where duplicate strategies were added instead of replacing the existing ones. diff --git a/pom.xml b/pom.xml index 4e3071dc77..62c1557605 100644 --- a/pom.xml +++ b/pom.xml @@ -151,7 +151,7 @@ limitations under the License. https://github.com/apache/tinkerpop -4.9.1 +4.13.2 2.3.1 3.2.2 2.9.0
(tinkerpop) branch master updated (b4d62b2020 -> 38b7a6b872)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from b4d62b2020 Merge branch '3.7-dev' new 6c8f7ffca7 Bumped to ANTLR 4.13.2 new 38b7a6b872 Merge branch '3.7-dev' The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 11 ++- pom.xml| 2 +- 2 files changed, 7 insertions(+), 6 deletions(-)
(tinkerpop) 02/02: Merge branch '3.7-dev'
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 38b7a6b872dd8eb7405a4eb1574c804268149968 Merge: b4d62b2020 6c8f7ffca7 Author: Stephen Mallette AuthorDate: Mon Sep 30 12:07:49 2024 -0400 Merge branch '3.7-dev' CHANGELOG.asciidoc | 11 ++- pom.xml| 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --cc pom.xml index 57d6a5a92e,62c1557605..dcb147d8f0 --- a/pom.xml +++ b/pom.xml @@@ -150,9 -151,9 +150,9 @@@ limitations under the License https://github.com/apache/tinkerpop - 4.9.1 + 4.13.2 2.3.1 -3.2.2 +4.4 2.9.0 2.6 2.8.0
(tinkerpop) branch 3.7-dev updated: Fixed changelog formatting CTR
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/3.7-dev by this push: new a67d87db33 Fixed changelog formatting CTR a67d87db33 is described below commit a67d87db33feede422364da82f7700d132b92595 Author: Stephen Mallette AuthorDate: Wed Sep 4 07:04:25 2024 -0400 Fixed changelog formatting CTR --- CHANGELOG.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index f20ba908f8..76810fa315 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -37,7 +37,7 @@ This release also includes changes from <>. * Fixed an issue where missing necessary parameters for logging, resulting in '%!x(MISSING)' output in `gremlin-go`. * Added getter method to `ConcatStep`, `ConjoinStep`, `SplitGlobalStep` and `SplitLocalStep` for their private fields. * Gremlin Server docker containers shutdown gracefully when receiving a SIGTERM. -* TINKERPOP-3080 Support to specify Operator as a reducer in withSideEffect when parsing with the grammar +* Allowed specification of an `Operator` as a reducer in `withSideEffect` when parsing with the grammar. [[release-3-7-2]] === TinkerPop 3.7.2 (April 8, 2024)
(tinkerpop) branch gvalue updated: wip - refactoring, tests, comments
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 682cb4b050 wip - refactoring, tests, comments 682cb4b050 is described below commit 682cb4b0500a25bedac233fa33303daedb15b74c Author: Stephen Mallette AuthorDate: Wed Aug 28 11:29:18 2024 -0400 wip - refactoring, tests, comments --- .../tinkerpop/gremlin/jsr223/JavaTranslator.java | 5 + .../language/grammar/TraversalMethodVisitor.java | 2 +- .../tinkerpop/gremlin/process/traversal/P.java | 8 +- .../gremlin/process/traversal/step/GValue.java | 73 +--- .../process/traversal/step/filter/CoinStep.java| 4 - .../process/traversal/step/map/GraphStep.java | 4 +- .../process/traversal/step/map/VertexStep.java | 2 +- .../traversal/step/sideEffect/InjectStep.java | 2 +- .../optimization/InlineFilterStrategy.java | 2 +- .../tinkerpop/gremlin/util/CollectionUtil.java | 23 +++- .../gremlin/process/traversal/step/GValueTest.java | 131 + .../tinkerpop/gremlin/util/CollectionUtilTest.java | 110 + 12 files changed, 306 insertions(+), 60 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java index 96a4450309..8ac0b507f3 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java @@ -338,6 +338,11 @@ public final class JavaTranslator> methodCache) { if (methodCache.isEmpty()) { for (final Method method : delegate.getClass().getMethods()) { + +// skip GValue arguments as they make selecting the right method ambiguous for the translator. in any +// event a GValue shouldn't get here since bytecode can't carry it. also, bytecode is gone in 4.0.0 +// so this will be deleted anyway. mostly adding this exception so the tests can continue to pass until +// that removal completes. final boolean freeOfGValue = Arrays.stream(method.getParameters()). noneMatch(p -> p.getType() == GValue.class || p.getType().getComponentType() == GValue.class); if (freeOfGValue) { 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 ce010e326e..4d28a0b8e9 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 @@ -765,7 +765,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor // 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(); +literalOrVars = GValue.ensureGValues(literalOrVars); } // since we normalized above to gvalue or literal we can just test the first arg for gvalue-ness diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 622a3c3e3a..a878bbb839 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -82,13 +82,7 @@ public class P implements Predicate, Serializable, Cloneable { } else { // this might be a bunch of GValue that need to be resolved. zomg if (this.value instanceof List) { -return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(o -> { -if (o instanceof GValue) { -return ((GValue) o).get(); -} else { -return o; -} -}).collect(Collectors.toList())); +return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(GValue::valueOf).collect(Collectors.toList())); } else { return this.biPredicate.test(testValue, this.value); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/G
(tinkerpop) branch gvalue-3.7 updated: prevented JavaTranslator from using GValue
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new 95c3d66f45 prevented JavaTranslator from using GValue 95c3d66f45 is described below commit 95c3d66f455ecabe5a1fe15c1beb574c6f451892 Author: Stephen Mallette AuthorDate: Tue Aug 27 16:15:21 2024 -0400 prevented JavaTranslator from using GValue --- .../org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java| 10 -- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java index 1641d823bc..96a4450309 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.CardinalityValueTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy; @@ -38,6 +39,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -336,8 +338,12 @@ public final class JavaTranslator> methodCache) { if (methodCache.isEmpty()) { for (final Method method : delegate.getClass().getMethods()) { -final List list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>()); -list.add(new ReflectedMethod(method)); +final boolean freeOfGValue = Arrays.stream(method.getParameters()). +noneMatch(p -> p.getType() == GValue.class || p.getType().getComponentType() == GValue.class); +if (freeOfGValue) { +final List list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>()); +list.add(new ReflectedMethod(method)); +} } GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache); }
(tinkerpop) 02/03: wip - removed admin interface methods - doesn't work nice
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 commit d27f15bee0dcf3de1b398f0426f81c7cc5db782f Author: Stephen Mallette AuthorDate: Tue Aug 27 12:38:32 2024 -0400 wip - removed admin interface methods - doesn't work nice --- .../traversal/dsl/graph/GraphTraversal.java| 867 + .../traversal/dsl/graph/GraphTraversalSource.java | 105 +-- .../gremlin/process/traversal/dsl/graph/__.java| 114 +++ .../gremlin/process/traversal/step/GValue.java | 42 + .../process/traversal/step/map/GraphStep.java | 10 +- .../process/traversal/step/map/VertexStep.java | 16 +- .../traversal/step/sideEffect/InjectStep.java | 8 +- .../process/traversal/step/util/AbstractStep.java | 44 -- .../optimization/InlineFilterStrategy.java | 2 +- .../tinkerpop/gremlin/util/CollectionUtil.java | 21 + .../traversal/translator/DotNetTranslatorTest.java | 2 +- 11 files changed, 598 insertions(+), 633 deletions(-) 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 eaa9692cae..fca7bd4196 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 @@ -205,8 +205,10 @@ import org.apache.tinkerpop.gremlin.structure.PropertyType; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import org.apache.tinkerpop.gremlin.util.CollectionUtil; import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -243,463 +245,6 @@ public interface GraphTraversal extends Traversal { */ public interface Admin extends Traversal.Admin, GraphTraversal { -/** - * Filter the E object given a biased coin toss. For internal use for parameterization features. - * - * @param probability the probability that the object will pass through the filter - * @return the traversal with an appended {@link CoinStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#coin-step"; target="_blank">Reference Documentation - Coin Step - * @since 3.7.3 - */ -public default GraphTraversal coin(final GValue probability) { -this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.coin, probability); -return this.asAdmin().addStep(new CoinStep<>(this.asAdmin(), probability)); -} - -/** - * Map any object to a fixed E value. For internal use for parameterization features. - * - * @return the traversal with an appended {@link ConstantStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#constant-step"; target="_blank">Reference Documentation - Constant Step - * @since 3.7.3 - */ -public default GraphTraversal constant(final GValue e) { - this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.constant, e); -return this.asAdmin().addStep(new ConstantStep(this.asAdmin(), e)); -} - -/** - * Map the {@link Vertex} to its adjacent vertices given a direction and edge labels. The arguments for the - * labels must be either a {@code String} or a {@link GValue}. For internal use for parameterization. - * - * @param direction the direction to traverse from the current vertex - * @param edgeLabels the edge labels to traverse - * @return the traversal with an appended {@link VertexStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#vertex-steps"; target="_blank">Reference Documentation - Vertex Step - * @since 3.7.3 - */ -public default GraphTraversal to(final Direction direction, final Object... edgeLabels) { -this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.to, direction, edgeLabels); -return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, direction, edgeLabels)); -} - -/** - * Map the {@link Vertex} to its outgoing adjacent vertices given the edge labels. The arguments for the - * labels must be either a {@code String} or a {@link GValue}. For internal use for parameterization. - * - * @param edgeLabels the edge labels to traver
(tinkerpop) 03/03: wip - moved all the params out of admin interfaces - not working
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 commit ed1ad59c652fdcbef7b9dc754182c22a0c277a59 Author: Stephen Mallette AuthorDate: Tue Aug 27 16:06:14 2024 -0400 wip - moved all the params out of admin interfaces - not working --- .../tinkerpop/gremlin/jsr223/JavaTranslator.java | 10 +- .../grammar/TraversalSourceSpawnMethodVisitor.java | 8 +- .../traversal/dsl/graph/GraphTraversal.java| 118 + .../traversal/dsl/graph/GraphTraversalSource.java | 30 ++ .../gremlin/process/traversal/dsl/graph/__.java| 63 +++ .../traversal/step/sideEffect/InjectStep.java | 2 +- .../traversal/step/map/ConjoinStepTest.java| 2 +- 7 files changed, 225 insertions(+), 8 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java index 1641d823bc..96a4450309 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.CardinalityValueTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy; @@ -38,6 +39,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -336,8 +338,12 @@ public final class JavaTranslator> methodCache) { if (methodCache.isEmpty()) { for (final Method method : delegate.getClass().getMethods()) { -final List list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>()); -list.add(new ReflectedMethod(method)); +final boolean freeOfGValue = Arrays.stream(method.getParameters()). +noneMatch(p -> p.getType() == GValue.class || p.getType().getComponentType() == GValue.class); +if (freeOfGValue) { +final List list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>()); +list.add(new ReflectedMethod(method)); +} } GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java index 2758ea429c..02fb654451 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java @@ -123,7 +123,7 @@ public class TraversalSourceSpawnMethodVisitor extends DefaultGremlinBaseVisitor public GraphTraversal visitTraversalSourceSpawnMethod_mergeV_Map(final GremlinParser.TraversalSourceSpawnMethod_mergeV_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) -return this.traversalSource.asAdmin().mergeV((GValue) literalOrVar); +return this.traversalSource.mergeV((GValue) literalOrVar); else return this.traversalSource.mergeV((Map) literalOrVar); } @@ -151,7 +151,7 @@ public class TraversalSourceSpawnMethodVisitor extends DefaultGremlinBaseVisitor public GraphTraversal visitTraversalSourceSpawnMethod_mergeE_Map(final GremlinParser.TraversalSourceSpawnMethod_mergeE_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) -return this.traversalSource.asAdmin().mergeE((GValue) literalOrVar); +return this.traversalSource.mergeE((GValue) literalOrVar); else return this.traversalSource.mergeE((Map) literalOrVar);
(tinkerpop) 01/03: wip - added consistent getter naming
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 commit 441edc186ada8414d70020b0f261849cb9720cb9 Author: Stephen Mallette AuthorDate: Tue Aug 27 07:57:48 2024 -0400 wip - added consistent getter naming --- .../tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java | 6 +- .../tinkerpop/gremlin/process/traversal/step/map/CombineStep.java | 4 .../tinkerpop/gremlin/process/traversal/step/map/ConjoinStep.java | 6 +- .../gremlin/process/traversal/step/map/ConstantStep.java | 5 - .../gremlin/process/traversal/step/map/DifferenceStep.java| 6 +- .../gremlin/process/traversal/step/map/DisjunctStep.java | 6 +- .../gremlin/process/traversal/step/map/IntersectStep.java | 8 ++-- .../tinkerpop/gremlin/process/traversal/step/map/MergeStep.java | 6 +- .../tinkerpop/gremlin/process/traversal/step/map/ProductStep.java | 6 +- .../gremlin/process/traversal/step/sideEffect/InjectStep.java | 4 ++-- .../gremlin/sparql/process/traversal/strategy/SparqlStrategy.java | 3 +-- 11 files changed, 47 insertions(+), 13 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java index f9cfda6399..33b3c80944 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java @@ -58,7 +58,11 @@ public final class CoinStep extends FilterStep implements Seedable { random.setSeed(seed); } -public GValue getProbability() { +public double getProbability() { +return probability.get(); +} + +public GValue getProbabilityGValue() { return probability; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CombineStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CombineStep.java index 587b7a7c72..67c120c03a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CombineStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CombineStep.java @@ -69,6 +69,10 @@ public final class CombineStep extends ScalarMapStep> implement return (null == valueTraversal) ? Collections.emptyList() : Collections.singletonList(valueTraversal); } +public Object getParameter() { +return parameterItems.get(); +} + public GValue getParameterItems() { return parameterItems; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConjoinStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConjoinStep.java index 94457df007..e6bb27a2e7 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConjoinStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConjoinStep.java @@ -71,7 +71,11 @@ public final class ConjoinStep extends ScalarMapStep implements Li } } -public GValue getDelimiter() { +public String getDelimiter() { +return this.delimiter.get(); +} + +public GValue getDelimiterGValue() { return this.delimiter; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConstantStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConstantStep.java index 2145f7e966..3646b599b2 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConstantStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConstantStep.java @@ -41,7 +41,10 @@ public class ConstantStep extends ScalarMapStep { this.constant = null == constant ? GValue.of(null) : constant; } -public GValue getConstant() { +public E getConstant() { +return this.constant.get(); +} +public GValue getConstantGValue() { return this.constant; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DifferenceStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DifferenceStep.java index 87f44f8639..27922b984e 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DifferenceStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DifferenceStep.java @@ -53,7 +53,11 @@ public final cl
(tinkerpop) branch gvalue updated (3a2034a033 -> ed1ad59c65)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 3a2034a033 wip - added param to has(string, string, object) new 441edc186a wip - added consistent getter naming new d27f15bee0 wip - removed admin interface methods - doesn't work nice new ed1ad59c65 wip - moved all the params out of admin interfaces - not working The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../tinkerpop/gremlin/jsr223/JavaTranslator.java | 10 +- .../grammar/TraversalSourceSpawnMethodVisitor.java |8 +- .../traversal/dsl/graph/GraphTraversal.java| 1027 ++-- .../traversal/dsl/graph/GraphTraversalSource.java | 135 ++- .../gremlin/process/traversal/dsl/graph/__.java| 177 .../gremlin/process/traversal/step/GValue.java | 42 + .../process/traversal/step/filter/CoinStep.java|6 +- .../process/traversal/step/map/CombineStep.java|4 + .../process/traversal/step/map/ConjoinStep.java|6 +- .../process/traversal/step/map/ConstantStep.java |5 +- .../process/traversal/step/map/DifferenceStep.java |6 +- .../process/traversal/step/map/DisjunctStep.java |6 +- .../process/traversal/step/map/GraphStep.java | 10 +- .../process/traversal/step/map/IntersectStep.java |8 +- .../process/traversal/step/map/MergeStep.java |6 +- .../process/traversal/step/map/ProductStep.java|6 +- .../process/traversal/step/map/VertexStep.java | 16 +- .../traversal/step/sideEffect/InjectStep.java | 14 +- .../process/traversal/step/util/AbstractStep.java | 44 - .../optimization/InlineFilterStrategy.java |2 +- .../tinkerpop/gremlin/util/CollectionUtil.java | 21 + .../traversal/step/map/ConjoinStepTest.java|2 +- .../traversal/translator/DotNetTranslatorTest.java |2 +- .../process/traversal/strategy/SparqlStrategy.java |3 +- 24 files changed, 891 insertions(+), 675 deletions(-)
(tinkerpop) branch gvalue-3.7 updated: wip - removed admin interface methods - doesn't work nice
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new c6abf2a789 wip - removed admin interface methods - doesn't work nice c6abf2a789 is described below commit c6abf2a789359e782147ffecdbd5a6b83b1c49aa Author: Stephen Mallette AuthorDate: Tue Aug 27 12:38:32 2024 -0400 wip - removed admin interface methods - doesn't work nice --- .../traversal/dsl/graph/GraphTraversal.java| 750 +++-- .../traversal/dsl/graph/GraphTraversalSource.java | 72 +- .../gremlin/process/traversal/dsl/graph/__.java| 113 .../gremlin/process/traversal/step/GValue.java | 42 ++ .../process/traversal/step/map/GraphStep.java | 10 +- .../process/traversal/step/map/VertexStep.java | 16 +- .../traversal/step/sideEffect/InjectStep.java | 10 +- .../process/traversal/step/util/AbstractStep.java | 44 -- .../optimization/InlineFilterStrategy.java | 2 +- .../tinkerpop/gremlin/util/CollectionUtil.java | 21 + .../traversal/translator/DotNetTranslatorTest.java | 2 +- 11 files changed, 598 insertions(+), 484 deletions(-) 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 9e38327b86..b64f379d76 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 @@ -203,8 +203,10 @@ import org.apache.tinkerpop.gremlin.structure.PropertyType; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import org.apache.tinkerpop.gremlin.util.CollectionUtil; import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -241,346 +243,6 @@ public interface GraphTraversal extends Traversal { */ public interface Admin extends Traversal.Admin, GraphTraversal { -/** - * Filter the E object given a biased coin toss. For internal use for parameterization features. - * - * @param probability the probability that the object will pass through the filter - * @return the traversal with an appended {@link CoinStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#coin-step"; target="_blank">Reference Documentation - Coin Step - * @since 3.7.3 - */ -public default GraphTraversal coin(final GValue probability) { -this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.coin, probability); -return this.asAdmin().addStep(new CoinStep<>(this.asAdmin(), probability)); -} - -/** - * Map any object to a fixed E value. For internal use for parameterization features. - * - * @return the traversal with an appended {@link ConstantStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#constant-step"; target="_blank">Reference Documentation - Constant Step - * @since 3.7.3 - */ -public default GraphTraversal constant(final GValue e) { - this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.constant, e); -return this.asAdmin().addStep(new ConstantStep(this.asAdmin(), e)); -} - -/** - * Map the {@link Vertex} to its adjacent vertices given a direction and edge labels. The arguments for the - * labels must be either a {@code String} or a {@link GValue}. For internal use for parameterization. - * - * @param direction the direction to traverse from the current vertex - * @param edgeLabels the edge labels to traverse - * @return the traversal with an appended {@link VertexStep}. - * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#vertex-steps"; target="_blank">Reference Documentation - Vertex Step - * @since 3.7.3 - */ -public default GraphTraversal to(final Direction direction, final Object... edgeLabels) { -this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.to, direction, edgeLabels); -return this.asAdmin().addStep(new VertexStep<>(this.asAdmin(), Vertex.class, direction, edgeLabels)); -} - -/** - * Map the {@link Vertex} to its outgoing adjacent vertices given the edge labels. The argu
(tinkerpop) branch gvalue-3.7 updated: backport some renaming and other cleanup
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new d1fb04cf8e backport some renaming and other cleanup d1fb04cf8e is described below commit d1fb04cf8e2b71ba518830122d2edc85dc312345 Author: Stephen Mallette AuthorDate: Mon Aug 26 20:00:38 2024 -0400 backport some renaming and other cleanup --- .../traversal/lambda/ConstantTraversal.java| 2 +- .../process/traversal/step/filter/CoinStep.java| 6 +- .../process/traversal/step/map/GraphStep.java | 84 +- .../traversal/step/sideEffect/InjectStep.java | 6 +- .../traversal/step/sideEffect/TinkerGraphStep.java | 16 +++-- 5 files changed, 71 insertions(+), 43 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java index 3bac69ce48..35e0dcedc6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java @@ -45,7 +45,7 @@ public final class ConstantTraversal extends AbstractLambdaTraversal return this.end.get(); } -public GValue getEnd() { +public GValue getEndGValue() { return end; } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java index e220952200..e997511a92 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinStep.java @@ -71,11 +71,11 @@ public final class CoinStep extends FilterStep implements Seedable { long newBulk = 0l; if (traverser.bulk() < 100) { for (int i = 0; i < traverser.bulk(); i++) { -if (this.probability.get() >= random.nextDouble()) +if (this.getProbability() >= random.nextDouble()) newBulk++; } } else { -newBulk = Math.round(this.probability.get() * traverser.bulk()); +newBulk = Math.round(this.getProbability() * traverser.bulk()); } if (0 == newBulk) return false; traverser.setBulk(newBulk); @@ -89,7 +89,7 @@ public final class CoinStep extends FilterStep implements Seedable { @Override public int hashCode() { -return super.hashCode() ^ Double.hashCode(this.probability.get()); +return super.hashCode() ^ Double.hashCode(this.getProbability()); } @Override 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 ee151aed12..f22683fd14 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 @@ -43,7 +43,9 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Iterator; +import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Supplier; /** @@ -54,7 +56,8 @@ public class GraphStep extends AbstractStep implemen protected Parameters parameters = new Parameters(); protected final Class returnClass; -protected Object[] ids; +protected GValue[] ids; +protected boolean legacyLogicForPassingNoIds = false; protected transient Supplier> iteratorSupplier; protected boolean isStart; protected boolean done = false; @@ -65,29 +68,45 @@ public class GraphStep extends AbstractStep implemen public GraphStep(final Traversal.Admin traversal, final Class returnClass, final boolean isStart, final Object... ids) { super(traversal); this.returnClass = returnClass; -this.ids = (ids != null && ids.length == 1 && ids[0] instanceof Collection) ? ((Collection) ids[0]).toArray(new Object[((Collection) ids[0]).size()]) : ids; + +// if ids is a single collection like g.V(['a','b','c']), then unroll it into an array of ids +this.ids = convertToGValues(tryUnrollSingleCollectionArgument(ids)); + this.isStart = isStart; this.iteratorSupplier = () -> (Iterator) (Vertex.class.isAssignableFrom(this.returnClass) ?
(tinkerpop) branch gvalue updated: wip - added param to has(string, string, object)
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 3a2034a033 wip - added param to has(string, string, object) 3a2034a033 is described below commit 3a2034a033f058307e3c0a9eacfb5da2c7bea7db Author: Stephen Mallette AuthorDate: Mon Aug 26 18:02:11 2024 -0400 wip - added param to has(string, string, object) --- .../language/grammar/TraversalMethodVisitor.java | 13 +--- .../traversal/dsl/graph/GraphTraversal.java| 16 +++ .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 2 ++ gremlin-go/driver/cucumber/gremlin.go | 2 ++ .../gremlin-javascript/test/cucumber/gremlin.js| 2 ++ gremlin-python/src/main/python/radish/gremlin.py | 2 ++ .../gremlin/test/features/filter/Has.feature | 24 ++ 7 files changed, 58 insertions(+), 3 deletions(-) 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 38aa65f6b2..ce010e326e 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 @@ -836,9 +836,16 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_has_String_String_Object(final GremlinParser.TraversalMethod_has_String_String_ObjectContext ctx) { -return graphTraversal.has(antlr.argumentVisitor.parseString(ctx.stringNullableArgument(0)), - antlr.argumentVisitor.parseString(ctx.stringNullableArgument(1)), - antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument(0)); +if (GValue.valueInstanceOf(literalOrVar, GType.STRING)) { +return graphTraversal.has((GValue) literalOrVar, + antlr.argumentVisitor.parseString(ctx.stringNullableArgument(1)), + antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument())); +} else { +return graphTraversal.has((String) literalOrVar, + antlr.argumentVisitor.parseString(ctx.stringNullableArgument(1)), + antlr.argumentVisitor.visitGenericLiteralArgument(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 b526d87b46..eaa9692cae 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 @@ -684,6 +684,22 @@ public interface GraphTraversal extends Traversal { return this.asAdmin().addStep(step); } +/** + * Filters vertices, edges and vertex properties based on their properties. + * + * @param label the label of the {@link Element} + * @param propertyKey the key of the property to filter on + * @param value the value to compare the accessor value to for equality + * @return the traversal with an appended {@link HasStep} + * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#has-step"; target="_blank">Reference Documentation - Has Step + * @since 4.0.0 + */ +public default GraphTraversal has(final GValue label, final String propertyKey, final Object value) { +this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.has, label.get(), propertyKey, value); +TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(T.label.getAccessor(), P.eq(label))); +return TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(propertyKey, value instanceof P ? (P) value : P.eq(value))); +} + @Override public default GraphTraversal.Admin addStep(final Step step) { return (GraphTraversal.Admin) Traversal.Admin.super.addStep((Step) step); diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index caf09a049d..5e8664226b 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.N
(tinkerpop) 07/13: wip - refactoring around mu steps
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 commit c13a3646e528d268c1f29c184cd68443e85a9dd8 Author: Stephen Mallette AuthorDate: Thu Aug 22 13:27:02 2024 -0400 wip - refactoring around mu steps --- .../language/grammar/TraversalMethodVisitor.java | 28 - .../grammar/TraversalSourceSpawnMethodVisitor.java | 8 +-- .../gremlin/process/traversal/Operator.java| 8 +-- .../gremlin/process/traversal/step/GValue.java | 23 +++- .../process/traversal/step/map/AddEdgeStep.java| 8 +-- .../gremlin/process/traversal/step/GValueTest.java | 66 +- 6 files changed, 106 insertions(+), 35 deletions(-) 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 9878b96a9a..b9cb2e5642 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 @@ -93,7 +93,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeV((GValue>) literalOrVar); else return graphTraversal.mergeV((Map) literalOrVar); @@ -129,7 +129,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeE((GValue>) literalOrVar); else return graphTraversal.mergeE((Map) literalOrVar); @@ -456,12 +456,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_coin(final GremlinParser.TraversalMethod_coinContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument()); -if (literalOrVar instanceof Number) -return graphTraversal.coin(((Number) literalOrVar).doubleValue()); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType().isNumeric()) +if (GValue.valueInstanceOfNumeric(literalOrVar)) return graphTraversal.coin((GValue) literalOrVar); else -throw new IllegalArgumentException("coin argument must be a double"); +return graphTraversal.coin(((Number) literalOrVar).doubleValue()); } @@ -657,12 +655,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public Traversal visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitStructureVertexArgument(ctx.structureVertexArgument()); -if (literalOrVar instanceof Vertex) -return graphTraversal.from((Vertex) literalOrVar); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.VERTEX) +if (GValue.valueInstanceOf(literalOrVar, GType.VERTEX)) return graphTraversal.from((GValue) literalOrVar); else -throw new IllegalArgumentException("from argument must be a vertex"); +return graphTraversal.from((Vertex) literalOrVar); } /** @@ -1197,7 +1193,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.option(antlr.argumentVisitor.parseMerge(ctx
(tinkerpop) 05/13: wip
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 commit c489ea35f4ce58fd984a92ea83f419d3817c754e Author: Stephen Mallette AuthorDate: Thu Aug 8 16:24:37 2024 -0400 wip --- .../tinkerpop/gremlin/process/traversal/P.java | 20 +--- .../process/traversal/dsl/graph/GraphTraversal.java | 7 +++ .../gremlin/process/traversal/step/GValue.java | 4 ++-- .../process/traversal/step/map/GraphStep.java| 13 + .../process/traversal/step/util/AbstractStep.java| 19 ++- .../process/traversal/step/util/HasContainer.java| 6 -- .../gremlin/process/traversal/step/GValueTest.java | 4 ++-- .../traversal/step/sideEffect/TinkerGraphStep.java | 14 -- 8 files changed, 71 insertions(+), 16 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 56e1946368..622a3c3e3a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -25,7 +25,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.OrP; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; /** * Predefined {@code Predicate} values that can be used to define filters to {@code has()} and {@code where()}. @@ -75,10 +77,22 @@ public class P implements Predicate, Serializable, Cloneable { @Override public boolean test(final V testValue) { -if (this.value instanceof GValue) +if (this.value instanceof GValue) { return this.biPredicate.test(testValue, ((GValue) this.value).get()); -else -return this.biPredicate.test(testValue, this.value); +} else { +// this might be a bunch of GValue that need to be resolved. zomg +if (this.value instanceof List) { +return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(o -> { +if (o instanceof GValue) { +return ((GValue) o).get(); +} else { +return o; +} +}).collect(Collectors.toList())); +} else { +return this.biPredicate.test(testValue, this.value); +} +} } @Override 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 da60cdcd7e..e7be61ae45 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 @@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPathVertexProgramStep; +import org.apache.tinkerpop.gremlin.process.traversal.Contains; import org.apache.tinkerpop.gremlin.process.traversal.DT; import org.apache.tinkerpop.gremlin.process.traversal.Failure; import org.apache.tinkerpop.gremlin.process.traversal.Merge; @@ -2837,6 +2838,12 @@ public interface GraphTraversal extends Traversal { } else { this.asAdmin().getBytecode().addStep(Symbols.hasId, id, otherIds); +// the logic for dealing with hasId([]) is sketchy historically, just trying to maintain what we were +// originally testing prior to GValue. +if (id instanceof GValue && ((GValue) id).getType().isCollection()) { +return TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(T.id.getAccessor(), new P(Contains.within, id))); +} + //using ArrayList given P.within() turns all arguments into lists final List ids = new ArrayList<>(); if (id instanceof Object[]) { 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 41caaea1a2..da0694acdc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java +++ b/grem
(tinkerpop) 08/13: wip - add values getter on inject
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 commit 7323e8ccd1c6129eff7cf10543e70dd86b88d7ba Author: Stephen Mallette AuthorDate: Thu Aug 22 14:02:19 2024 -0400 wip - add values getter on inject --- .../gremlin/process/traversal/step/sideEffect/InjectStep.java | 7 +++ .../gremlin/sparql/process/traversal/strategy/SparqlStrategy.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java index cc3a970f93..4102cfdd57 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java @@ -55,4 +55,11 @@ public final class InjectStep extends StartStep { public GValue[] getInjections() { return this.injections; } + +/** + * Gets the injections of the step but unwraps the {@link GValue}. + */ +public S[] getInjectionsAsValues() { +return (S[]) resolveToValues(this.injections); +} } diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java index a4a95cc1c1..f4938fb219 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java @@ -71,7 +71,7 @@ public class SparqlStrategy extends AbstractTraversalStrategy
(tinkerpop) 02/13: Get rid of P as a parameter in gherkin
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 commit c33151aea6d6690b718ba3daa3959072ad7853ee Author: Stephen Mallette AuthorDate: Tue Jul 30 10:26:35 2024 -0400 Get rid of P as a parameter in gherkin P can't really be used that way in the grammar so doesn't make sense to test that way. --- .../Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs| 7 --- .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 8 gremlin-go/driver/cucumber/cucumberSteps_test.go | 15 +-- gremlin-go/driver/cucumber/gremlin.go | 8 .../gremlin-javascript/test/cucumber/feature-steps.js | 4 .../gremlin-javascript/test/cucumber/gremlin.js | 8 gremlin-python/src/main/python/radish/feature_steps.py| 11 --- gremlin-python/src/main/python/radish/gremlin.py | 8 .../apache/tinkerpop/gremlin/features/StepDefinition.java | 5 - .../tinkerpop/gremlin/test/features/filter/HasId.feature | 13 + 10 files changed, 22 insertions(+), 65 deletions(-) diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs index 98f8b0b5b4..98d49d8df7 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs @@ -115,13 +115,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin _parameters.Add(name, parsedValue); } -[Given("using the parameter (\\w+) of P.(\\w+)\\(\"(.*)\"\\)")] -public void UsingParameterP(string name, string pval, string value) -{ -var parsedValue = ParseValue(value.Replace("\\\"", "\""), _graphName!); -_parameters.Add(name, new P(pval, parsedValue)); -} - [Given("the traversal of")] public void TranslateTraversal(string traversalText) { diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index bd0a8e7469..c8cb66068e 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -268,9 +268,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasXlabel_isXpersonXX", new List, ITraversal>> {(g,p) =>g.V().Has(T.Label, __.Is("person"))}}, {"g_V_hasXname_nullX", new List, ITraversal>> {(g,p) =>g.V().Has("name", (object) null)}}, {"g_V_hasIdXemptyX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(p["xx1"])).Count()}}, + {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Within(new List { })).Count()}}, + {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Without(new List { })).Count()}}, + {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(P.Within(new List { }))).Count()}}, {"g_V_hasIdXnullX", new List, ITraversal>> {(g,p) =>g.V().HasId(null)}}, {"g_V_hasIdXeqXnullXX", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Eq(null))}}, {"g_V_hasIdX2_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid2"], null)}}, @@ -278,7 +278,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasIdX1AsString_2AsString_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"], p["vid2"], null)}}, {"g_V_hasIdXnull_2X", new List, ITraversal>> {(g,p) =>g.V().HasId(null, p["vid2"])}}, {"g_V_hasIdX1X_hasIdX2X", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"]).HasId(p["vid2"])}}, - {"g_V_in_hasIdXneqX1XX", new List, ITraversal>> {(g,p) =>g.V().In().HasId(p["xx1"])}}, +
(tinkerpop) 04/13: wip
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 commit 7da00f720a81a35baf190a5b111cffc3d273dc15 Author: Stephen Mallette AuthorDate: Wed Aug 7 15:06:28 2024 -0400 wip --- .../grammar/DefaultGremlinBaseVisitor.java | 12 +-- .../language/grammar/TraversalMethodVisitor.java | 100 ++ .../grammar/TraversalSourceSpawnMethodVisitor.java | 15 ++- .../translator/DotNetTranslateVisitor.java | 23 ++-- .../language/translator/TranslateVisitor.java | 5 - .../gremlin/process/traversal/Operator.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 117 - .../traversal/dsl/graph/GraphTraversalSource.java | 32 +- .../gremlin/process/traversal/step/GValue.java | 9 +- .../process/traversal/step/map/AddEdgeStep.java| 9 +- .../process/traversal/step/map/CallStep.java | 36 +-- .../process/traversal/step/map/ConstantStep.java | 2 +- .../process/traversal/step/map/DifferenceStep.java | 16 ++- .../process/traversal/step/map/DisjunctStep.java | 12 ++- .../process/traversal/step/map/ProductStep.java| 15 ++- .../traversal/step/sideEffect/InjectStep.java | 2 +- .../strategy/decoration/SideEffectStrategy.java| 7 +- gremlin-language/src/main/antlr4/Gremlin.g4| 7 +- .../tinkerpop/gremlin/features/StepDefinition.java | 25 ++--- 19 files changed, 331 insertions(+), 123 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java index 3bfb22d17b..f32e40e44b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java @@ -414,11 +414,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -854,11 +854,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -1395,10 +1395,6 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im * {@inheritDoc} */ @Override public T visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { notImplemented(ctx); return null; } - /** -* {@inheritDoc} -*/ - @Override public T visitTraversalMethod_option_Merge_Traversal(final GremlinParser.TraversalMethod_option_Merge_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ 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 fe500e6210..daf72820d4 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 @@ -25,14 +25,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import
(tinkerpop) 09/13: wip - fixed .NET translator for conjoin
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 commit c6228f9859362480e93710e3dae278371ffd6e88 Author: Stephen Mallette AuthorDate: Sun Aug 25 09:51:42 2024 -0400 wip - fixed .NET translator for conjoin --- .../translator/DotNetTranslateVisitor.java | 10 + .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 24 +++--- 2 files changed, 22 insertions(+), 12 deletions(-) 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 df2c6b4d91..c7699c2345 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 @@ -929,6 +929,16 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { } } +@Override +public Void visitTraversalMethod_conjoin_String(final GremlinParser.TraversalMethod_conjoin_StringContext ctx) { +final String step = ctx.getChild(0).getText(); +sb.append(convertToPascalCase(step)); +sb.append("((string) "); +visit(ctx.stringArgument()); +sb.append(")"); +return null; +} + @Override public Void visitTraversalMethod_propertyMap(final GremlinParser.TraversalMethod_propertyMapContext ctx) { return handleGenerics(ctx); diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index 8d2fa79fa9..611b56f2db 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -628,18 +628,18 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label()).Concat(__.Select("a").InV().Values("name"))}}, {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label(), __.Select("a").InV().Values("name"))}}, {"g_addVXconstantXprefix_X_concatXVX1X_labelX_label", new List, ITraversal>> {(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("software").Property("name", "ripple [...] - {"g_injectXnullX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.Inject(null).Conjoin("1")}}, - {"g_V_valuesXnameX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Conjoin("1")}}, - {"g_V_valuesXnonexistantX_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("nonexistant").Fold().Conjoin(";")}}, - {"g_V_valuesXnameX_order_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Order().Fold().Conjoin("_")}}, - {"g_V_valuesXageX_order_fold_conjoinXsemicolonX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(";")}}, - {"g_V_valuesXageX_order_fold_conjoinXslashX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(p["xx1"])}}, - {"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new List, ITraversal>> {(g,p) =>g.V().Out().Path().By(__.Values("name").ToUpper()).Conjoin("MARKO")}}, - {"g_injectXmarkoX_conjoinX_X", new List, ITraversal>> {(g,p) =>g.Inject(p["xx1"]).Conjoin("-")}}, - {"g_V_
(tinkerpop) 12/13: wip - refactoring to use GValue static methods for instanceOf checks
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 commit 050f59c2bb6c51fe1f932d5903d111ca0d62e14f Author: Stephen Mallette AuthorDate: Mon Aug 26 12:50:30 2024 -0400 wip - refactoring to use GValue static methods for instanceOf checks --- .../apache/tinkerpop/gremlin/process/traversal/step/GValue.java| 1 - .../gremlin/process/traversal/step/util/HasContainer.java | 4 ++-- .../traversal/strategy/optimization/InlineFilterStrategy.java | 7 ++- gremlin-go/driver/cucumber/gremlin.go | 2 ++ 4 files changed, 6 insertions(+), 8 deletions(-) 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 f7692d6866..cb18dec8b9 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 @@ -367,7 +367,6 @@ public class GValue implements Cloneable, Serializable { * {@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) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java index d456b09df6..35689f8367 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java @@ -156,11 +156,11 @@ public class HasContainer implements Serializable, Cloneable, Predicate if (predicateValue instanceof Collection) { final Collection collection = (Collection) predicateValue; if (!collection.isEmpty()) { -return ((Collection) predicateValue).stream().allMatch(c -> null == c || c instanceof String || (c instanceof GValue && ((GValue) c).getType() == GType.STRING)); +return ((Collection) predicateValue).stream().allMatch(c -> null == c || GValue.instanceOf(c, GType.STRING)); } } -return predicateValue instanceof String || (predicateValue instanceof GValue && ((GValue) predicateValue).getType() == GType.STRING); +return GValue.instanceOf(predicateValue, GType.STRING); } return false; diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java index 5ff63b3e0f..f7ff96009d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java @@ -129,9 +129,7 @@ public final class InlineFilterStrategy extends AbstractTraversalStrategy edgeLabels = new ArrayList<>(); for (final HasContainer hasContainer : new ArrayList<>(step.getHasContainers())) { if (hasContainer.getKey().equals(T.label.getAccessor())) { -if (hasContainer.getBiPredicate() == Compare.eq && -(hasContainer.getValue() instanceof String || -(hasContainer.getValue() instanceof GValue && ((GValue) hasContainer.getValue()).getType() == GType.STRING)) && +if (hasContainer.getBiPredicate() == Compare.eq && GValue.instanceOf(hasContainer.getValue(), GType.STRING) && edgeLabels.isEmpty()) { edgeLabels.add(hasContainer.getValue()); step.removeHasContainer(hasContainer); @@ -145,8 +143,7 @@ public final class InlineFilterStrategy extends AbstractTraversalStrategy> orps = ((OrP) hasContainer.getPredicate()).getPredicates(); final List newEdges = new ArrayList<>(); for (int i = 0; i < orps.size(); i++) { -if (orps.get(i).getBiPredicate() == Compare.eq && (orps.get(i).getValue() instanceof String || -(orps.get(i).getValue() instanceof GValue && ((GValue) orps.get(i).getValue()).getType() == GType.STRING))) +if
(tinkerpop) 01/13: wip - params
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 commit 39c31aa131772c40f2b0c2ea2a62e64f3f505a3a Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 +- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 +++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 ++ .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 ++- .../gremlin/process/traversal/Bytecode.java| 10 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 270 + .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GType.java | 81 ++ .../gremlin/process/traversal/step/GValue.java | 321 + .../process/traversal/step/filter/CoinStep.java| 28 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../traversal/step/map/MergeVertexStep.java| 5 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 ++- 34 files changed, 1666 insertions(+), 120 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try { return GremlinQueryParser.parse(script, antlr); diff --git a/greml
(tinkerpop) 11/13: wip - translator fix for .NET
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 commit 7b496ca70cb9e29278ad47620dcf1a510b686d87 Author: Stephen Mallette AuthorDate: Mon Aug 26 08:22:01 2024 -0400 wip - translator fix for .NET --- .../translator/DotNetTranslateVisitor.java | 37 -- .../language/translator/GremlinTranslatorTest.java | 20 +++- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 20 ++-- .../gremlin-javascript/test/cucumber/gremlin.js| 2 ++ gremlin-python/src/main/python/radish/gremlin.py | 2 ++ 5 files changed, 69 insertions(+), 12 deletions(-) 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 c7699c2345..aaec8988e4 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 @@ -740,10 +740,36 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { sb.append(")"); return null; } else { -return super.visitTraversalMethod_hasLabel_String_String(ctx); +final String step = ctx.getChild(0).getText(); +sb.append(convertToPascalCase(step)); +sb.append("("); +tryAppendCastToString(ctx.stringNullableArgument()); +visit(ctx.stringNullableArgument()); + +// more arguments to come +if (!ctx.stringLiteralVarargs().isEmpty()) sb.append(", "); +visit(ctx.stringLiteralVarargs()); + +sb.append(")"); +return null; } } +@Override +public Void visitStringLiteralVarargs(final GremlinParser.StringLiteralVarargsContext ctx) { +for (int ix = 0; ix < ctx.getChildCount(); ix++) { +final ParseTree pt = ctx.getChild(ix); +if (pt instanceof GremlinParser.StringNullableArgumentContext) { +GremlinParser.StringNullableArgumentContext sna = (GremlinParser.StringNullableArgumentContext) pt; +tryAppendCastToString(sna); +visit(sna); +} else { +visit(pt); +} +}; +return null; +} + @Override public Void visitTraversalMethod_index(final GremlinParser.TraversalMethod_indexContext ctx) { return handleGenerics(ctx); @@ -933,7 +959,8 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { public Void visitTraversalMethod_conjoin_String(final GremlinParser.TraversalMethod_conjoin_StringContext ctx) { final String step = ctx.getChild(0).getText(); sb.append(convertToPascalCase(step)); -sb.append("((string) "); +sb.append("("); +tryAppendCastToString(ctx.stringArgument()); visit(ctx.stringArgument()); sb.append(")"); return null; @@ -1154,6 +1181,12 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { } } +private void tryAppendCastToString(final GremlinParser.StringArgumentContext ctx) { +if (ctx.variable() != null || ctx.stringLiteral() != null) { +sb.append("(string) "); +} +} + private void tryAppendCastToString(final GremlinParser.StringNullableArgumentContext ctx) { if (ctx.variable() != null || ctx.stringNullableLiteral().NullLiteral() != null) { sb.append("(string) "); 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 ed68e16140..619d578a3c 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 @@ -697,7 +697,7 @@ public class GremlinTranslatorTest { {"g.V().hasLabel(null, 'software', 'class')", null, "g.V().hasLabel(string0, string1, string2)", -"g.V().HasLabel(null, \"software\", \"class\")", +"g.V().HasLabel((string) null, \"software\", \"class\")", "g.V().HasLabel(nil, \"software\", \"class\")",
(tinkerpop) 03/13: wip
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 commit 52350507869a69e2512a02a45304550824364dc0 Author: Stephen Mallette AuthorDate: Wed Jul 31 16:15:58 2024 -0400 wip --- .../language/grammar/TraversalMethodVisitor.java | 61 + .../grammar/TraversalSourceSpawnMethodVisitor.java | 14 +++- .../traversal/dsl/graph/GraphTraversal.java| 72 +++ .../traversal/dsl/graph/GraphTraversalSource.java | 46 + .../gremlin/process/traversal/step/GType.java | 16 - .../gremlin/process/traversal/step/GValue.java | 5 +- .../process/traversal/step/filter/CoinStep.java| 6 +- .../process/traversal/step/map/CombineStep.java| 11 +-- .../process/traversal/step/map/ConjoinStep.java| 17 +++-- .../process/traversal/step/map/ConstantStep.java | 6 +- .../process/traversal/step/map/GraphStep.java | 80 +- .../process/traversal/step/map/IntersectStep.java | 11 +-- .../traversal/step/sideEffect/InjectStep.java | 14 ++-- .../process/traversal/step/util/AbstractStep.java | 27 .../process/traversal/util/ListFunction.java | 16 ++--- .../gremlin/process/traversal/step/GValueTest.java | 30 .../tinkerpop/gremlin/features/StepDefinition.java | 32 +++-- .../apache/tinkerpop/gremlin/features/World.java | 9 +++ .../gremlin/test/features/map/Conjoin.feature | 12 .../traversal/step/sideEffect/Neo4jGraphStep.java | 4 +- .../traversal/step/sideEffect/TinkerGraphStep.java | 4 +- .../tinkerpop/gremlin/tinkergraph/TinkerWorld.java | 5 ++ 22 files changed, 382 insertions(+), 116 deletions(-) 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 4f523c092f..fe500e6210 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 @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GType; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality; +import java.util.Collection; import java.util.Map; import java.util.function.BiFunction; @@ -40,11 +41,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor /** * This object is used to append the traversal methods. */ -private final GraphTraversal graphTraversal; +private final GraphTraversal.Admin graphTraversal; public TraversalMethodVisitor(final GremlinAntlrToJava antlr, final GraphTraversal graphTraversal) { super(antlr, graphTraversal); -this.graphTraversal = graphTraversal; +this.graphTraversal = graphTraversal.asAdmin(); } /** @@ -92,7 +93,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { -return this.graphTraversal.mergeV(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeV((GValue>) literalOrVar); +else +return graphTraversal.mergeV((Map) literalOrVar); } /** @@ -124,7 +129,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { -return this.graphTraversal.mergeE(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeE((GValue>) literalOrVar); +else +return graphTraversal.mergeE((Map) literalOrVar); } /** @@ -435,7 +444,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_combine_Object(final GremlinParser.TraversalMethod_combine_ObjectContext ctx) { -return graphTraversal.combine(antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgume
(tinkerpop) 13/13: wip - fixup after rebase
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 commit 85cd6a9eca67efdd624ff66694eb0897e7ee5a97 Author: Stephen Mallette AuthorDate: Mon Aug 26 15:15:20 2024 -0400 wip - fixup after rebase --- .../process/traversal/dsl/graph/GraphTraversal.java | 4 ++-- .../process/traversal/step/map/MergeElementStep.java | 14 +++--- .../gremlin/process/traversal/step/map/MergeStep.java | 19 ++- 3 files changed, 27 insertions(+), 10 deletions(-) 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 a226978a2a..b526d87b46 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 @@ -590,13 +590,13 @@ public interface GraphTraversal extends Traversal { /** * Merges the list traverser and list argument. Also known as union. * - * @return the traversal with an appended {@link TraversalMergeStep}. + * @return the traversal with an appended {@link MergeStep}. * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#merge-step"; target="_blank">Reference Documentation - Merge Step * @since 3.7.3 */ public default GraphTraversal merge(final GValue values) { this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.merge, values); -return this.asAdmin().addStep(new TraversalMergeStep<>(this.asAdmin(), values)); +return this.asAdmin().addStep(new MergeStep<>(this.asAdmin(), values)); } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java index 44e954fb31..6835387c5e 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java @@ -35,6 +35,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.Deleting; +import org.apache.tinkerpop.gremlin.process.traversal.step.GType; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent; import org.apache.tinkerpop.gremlin.process.traversal.step.Writing; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Parameters; @@ -80,6 +82,11 @@ public abstract class MergeElementStep extends FlatMapStep validate(mergeMap, false); } +public MergeElementStep(final Traversal.Admin traversal, final boolean isStart, final GValue mergeMap) { +this(traversal, isStart, new ConstantTraversal<>(mergeMap)); +validate(mergeMap.get(), false); +} + public MergeElementStep(final Traversal.Admin traversal, final boolean isStart, final Traversal.Admin mergeTraversal) { super(traversal); @@ -279,7 +286,7 @@ public abstract class MergeElementStep extends FlatMapStep op, allowedTokens, k)); } if (k == T.label) { -if (!(v instanceof String)) { +if (!(GValue.instanceOf(v, GType.STRING))) { throw new IllegalArgumentException(String.format( "%s() and option(onCreate) args expect T.label value to be of String - found: %s", op, v.getClass().getSimpleName())); @@ -318,7 +325,8 @@ public abstract class MergeElementStep extends FlatMapStep * null Map == empty Map */ protected Map materializeMap(final Traverser.Admin traverser, Traversal.Admin mapTraversal) { -Map map = (Map) TraversalUtil.apply(traverser, mapTraversal); +final Object o = TraversalUtil.apply(traverser, mapTraversal); +Map map = GValue.getFrom(o); // PartitionStrategy uses parameters as a mechanism for setting the partition key. trying to be as specific // as possible here wrt parameters usage to avoid misuse @@ -360,7 +368,7 @@ public abstract class MergeElementStep extends FlatMapStep return id != null ?
(tinkerpop) 10/13: wip - fixed hasLabel(String, String...) for params
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 commit 6da219f2edae58ad2f734b25aa356772030db35f Author: Stephen Mallette AuthorDate: Sun Aug 25 10:29:19 2024 -0400 wip - fixed hasLabel(String, String...) for params --- .../language/grammar/TraversalMethodVisitor.java | 2 +- .../gremlin/test/features/filter/HasLabel.feature | 28 ++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 b9cb2e5642..38aa65f6b2 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 @@ -771,7 +771,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor // 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); +return graphTraversal.hasLabel((GValue) literalOrVar, (GValue[]) gvalueLiteralOrVars); } else { // convert object array to string array final String[] stringLiteralOrVars = literalOrVars == null ? null : Arrays.stream(literalOrVars).map(o -> (String) o).toArray(String[]::new); diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature index 470019f36d..2da655e7e6 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature @@ -87,6 +87,34 @@ Feature: Step - hasLabel() When iterated to list Then the result should be empty + Scenario: g_V_hasLabelXpersonvarX_hasLabelXsoftwareX +Given the modern graph +And using the parameter xx1 defined as "person" +And the traversal of +""" +g.V().hasLabel(xx1).hasLabel("software") +""" +When iterated to list +Then the result should be empty + + Scenario: g_V_hasLabelXpersonvar_softwarevarX +Given the modern graph +And using the parameter xx1 defined as "person" +And using the parameter xx2 defined as "software" +And the traversal of +""" +g.V().hasLabel(xx1,xx2) +""" +When iterated to list +Then the result should be unordered + | result | + | v[marko] | + | v[vadas] | + | v[josh] | + | v[peter] | + | v[lop] | + | v[ripple] | + Scenario: g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20_andXltX29X_orXeqX35_name Given the modern graph And the traversal of
(tinkerpop) 06/13: wip - hasLabel(String, String...) fixes, more GValue utility
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 commit a7cb7c629c9d45a65af272d68562a18b916e735f Author: Stephen Mallette 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 { 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 @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 instance
(tinkerpop) branch gvalue updated (56c7297e5e -> 85cd6a9eca)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 56c7297e5e wip - translator fix for .NET discard e217e9dcae wip - fixed hasLabel(String, String...) for params discard 523a68bea5 wip - fixed .NET translator for conjoin discard 45aa4ab1f9 wip - add values getter on inject discard 9f560e0818 wip - refactoring around mu steps discard 555f3c743a wip - hasLabel(String, String...) fixes, more GValue utility discard 21f4fe37e8 wip discard 2671097d94 wip discard 9f82114678 wip discard 8bd0770157 Get rid of P as a parameter in gherkin discard 47f3de100c wip - params add dafc54e4d9 Renamed steps around "merge" for better consistency. add c1e07eb316 Merge pull request #2725 from apache/merge-rename new 39c31aa131 wip - params new c33151aea6 Get rid of P as a parameter in gherkin new 5235050786 wip new 7da00f720a wip new c489ea35f4 wip new a7cb7c629c wip - hasLabel(String, String...) fixes, more GValue utility new c13a3646e5 wip - refactoring around mu steps new 7323e8ccd1 wip - add values getter on inject new c6228f9859 wip - fixed .NET translator for conjoin new 6da219f2ed wip - fixed hasLabel(String, String...) for params new 7b496ca70c wip - translator fix for .NET new 050f59c2bb wip - refactoring to use GValue static methods for instanceOf checks new 85cd6a9eca wip - fixup after rebase This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (56c7297e5e) \ N -- N -- N refs/heads/gvalue (85cd6a9eca) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 13 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 + .../traversal/dsl/graph/GraphTraversal.java| 10 +- .../gremlin/process/traversal/step/GValue.java | 1 - .../process/traversal/step/map/MergeEdgeStep.java | 4 +- .../map/{MergeStep.java => MergeElementStep.java} | 30 +- .../process/traversal/step/map/MergeStep.java | 402 - .../traversal/step/map/MergeVertexStep.java| 4 +- .../traversal/step/map/TraversalMergeStep.java | 136 --- .../process/traversal/step/util/HasContainer.java | 4 +- .../optimization/InlineFilterStrategy.java | 7 +- .../process/traversal/util/BytecodeHelper.java | 4 +- ...versalMergeStepTest.java => MergeStepTest.java} | 2 +- gremlin-go/driver/cucumber/gremlin.go | 2 + 13 files changed, 101 insertions(+), 507 deletions(-) copy gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/{MergeStep.java => MergeElementStep.java} (93%) delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TraversalMergeStep.java rename gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/{TraversalMergeStepTest.java => MergeStepTest.java} (98%)
(tinkerpop) branch merge-rename deleted (was dafc54e4d9)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch merge-rename in repository https://gitbox.apache.org/repos/asf/tinkerpop.git was dafc54e4d9 Renamed steps around "merge" for better consistency. The revisions that were on this branch are still contained in other references; therefore, this change does not discard any commits from the repository.
(tinkerpop) branch master updated (54926bdee0 -> c1e07eb316)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 54926bdee0 Merge branch '3.7-dev' add dafc54e4d9 Renamed steps around "merge" for better consistency. new c1e07eb316 Merge pull request #2725 from apache/merge-rename The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 + .../traversal/dsl/graph/GraphTraversal.java| 6 +- .../process/traversal/step/map/MergeEdgeStep.java | 4 +- .../map/{MergeStep.java => MergeElementStep.java} | 15 +- .../process/traversal/step/map/MergeStep.java | 388 - .../traversal/step/map/MergeVertexStep.java| 4 +- .../traversal/step/map/TraversalMergeStep.java | 126 --- .../process/traversal/util/BytecodeHelper.java | 4 +- ...versalMergeStepTest.java => MergeStepTest.java} | 2 +- 9 files changed, 85 insertions(+), 466 deletions(-) copy gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/{MergeStep.java => MergeElementStep.java} (96%) delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TraversalMergeStep.java rename gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/{TraversalMergeStepTest.java => MergeStepTest.java} (98%)
(tinkerpop) 01/01: Merge pull request #2725 from apache/merge-rename
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit c1e07eb316a308da4f2b2ec2787c453d6ecc932f Merge: 54926bdee0 dafc54e4d9 Author: Stephen Mallette AuthorDate: Mon Aug 26 09:12:16 2024 -0400 Merge pull request #2725 from apache/merge-rename Renamed steps around "merge" for better consistency. CHANGELOG.asciidoc | 2 + .../traversal/dsl/graph/GraphTraversal.java| 6 +- .../process/traversal/step/map/MergeEdgeStep.java | 4 +- .../map/{MergeStep.java => MergeElementStep.java} | 15 +- .../process/traversal/step/map/MergeStep.java | 388 - .../traversal/step/map/MergeVertexStep.java| 4 +- .../traversal/step/map/TraversalMergeStep.java | 126 --- .../process/traversal/util/BytecodeHelper.java | 4 +- ...versalMergeStepTest.java => MergeStepTest.java} | 2 +- 9 files changed, 85 insertions(+), 466 deletions(-)
(tinkerpop) 04/11: wip
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 commit 2671097d94d05e967cd3dcb74fc01f761d1c9d33 Author: Stephen Mallette AuthorDate: Wed Aug 7 15:06:28 2024 -0400 wip --- .../grammar/DefaultGremlinBaseVisitor.java | 12 +-- .../language/grammar/TraversalMethodVisitor.java | 100 ++ .../grammar/TraversalSourceSpawnMethodVisitor.java | 15 ++- .../translator/DotNetTranslateVisitor.java | 23 ++-- .../language/translator/TranslateVisitor.java | 5 - .../gremlin/process/traversal/Operator.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 117 - .../traversal/dsl/graph/GraphTraversalSource.java | 32 +- .../gremlin/process/traversal/step/GValue.java | 9 +- .../process/traversal/step/map/AddEdgeStep.java| 9 +- .../process/traversal/step/map/CallStep.java | 36 +-- .../process/traversal/step/map/ConstantStep.java | 2 +- .../process/traversal/step/map/DifferenceStep.java | 16 ++- .../process/traversal/step/map/DisjunctStep.java | 12 ++- .../process/traversal/step/map/ProductStep.java| 15 ++- .../traversal/step/map/TraversalMergeStep.java | 3 +- .../traversal/step/sideEffect/InjectStep.java | 2 +- .../strategy/decoration/SideEffectStrategy.java| 7 +- gremlin-language/src/main/antlr4/Gremlin.g4| 7 +- .../tinkerpop/gremlin/features/StepDefinition.java | 25 ++--- 20 files changed, 333 insertions(+), 124 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java index 3bfb22d17b..f32e40e44b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java @@ -414,11 +414,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -854,11 +854,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -1395,10 +1395,6 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im * {@inheritDoc} */ @Override public T visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { notImplemented(ctx); return null; } - /** -* {@inheritDoc} -*/ - @Override public T visitTraversalMethod_option_Merge_Traversal(final GremlinParser.TraversalMethod_option_Merge_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ 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 fe500e6210..daf72820d4 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 @@ -25,14 +25,12 @@ import
(tinkerpop) 02/11: Get rid of P as a parameter in gherkin
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 commit 8bd077015773f317ed381ff719946815f8d0d20f Author: Stephen Mallette AuthorDate: Tue Jul 30 10:26:35 2024 -0400 Get rid of P as a parameter in gherkin P can't really be used that way in the grammar so doesn't make sense to test that way. --- .../Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs| 7 --- .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 8 gremlin-go/driver/cucumber/cucumberSteps_test.go | 15 +-- gremlin-go/driver/cucumber/gremlin.go | 8 .../gremlin-javascript/test/cucumber/feature-steps.js | 4 .../gremlin-javascript/test/cucumber/gremlin.js | 8 gremlin-python/src/main/python/radish/feature_steps.py| 11 --- gremlin-python/src/main/python/radish/gremlin.py | 8 .../apache/tinkerpop/gremlin/features/StepDefinition.java | 5 - .../tinkerpop/gremlin/test/features/filter/HasId.feature | 13 + 10 files changed, 22 insertions(+), 65 deletions(-) diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs index 98f8b0b5b4..98d49d8df7 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs @@ -115,13 +115,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin _parameters.Add(name, parsedValue); } -[Given("using the parameter (\\w+) of P.(\\w+)\\(\"(.*)\"\\)")] -public void UsingParameterP(string name, string pval, string value) -{ -var parsedValue = ParseValue(value.Replace("\\\"", "\""), _graphName!); -_parameters.Add(name, new P(pval, parsedValue)); -} - [Given("the traversal of")] public void TranslateTraversal(string traversalText) { diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index bd0a8e7469..c8cb66068e 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -268,9 +268,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasXlabel_isXpersonXX", new List, ITraversal>> {(g,p) =>g.V().Has(T.Label, __.Is("person"))}}, {"g_V_hasXname_nullX", new List, ITraversal>> {(g,p) =>g.V().Has("name", (object) null)}}, {"g_V_hasIdXemptyX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(p["xx1"])).Count()}}, + {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Within(new List { })).Count()}}, + {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Without(new List { })).Count()}}, + {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(P.Within(new List { }))).Count()}}, {"g_V_hasIdXnullX", new List, ITraversal>> {(g,p) =>g.V().HasId(null)}}, {"g_V_hasIdXeqXnullXX", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Eq(null))}}, {"g_V_hasIdX2_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid2"], null)}}, @@ -278,7 +278,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasIdX1AsString_2AsString_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"], p["vid2"], null)}}, {"g_V_hasIdXnull_2X", new List, ITraversal>> {(g,p) =>g.V().HasId(null, p["vid2"])}}, {"g_V_hasIdX1X_hasIdX2X", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"]).HasId(p["vid2"])}}, - {"g_V_in_hasIdXneqX1XX", new List, ITraversal>> {(g,p) =>g.V().In().HasId(p["xx1"])}}, +
(tinkerpop) 07/11: wip - refactoring around mu steps
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 commit 9f560e081852bfc14c440f29d2f21bf8a5e3179f Author: Stephen Mallette AuthorDate: Thu Aug 22 13:27:02 2024 -0400 wip - refactoring around mu steps --- .../language/grammar/TraversalMethodVisitor.java | 28 - .../grammar/TraversalSourceSpawnMethodVisitor.java | 8 +-- .../gremlin/process/traversal/Operator.java| 8 +-- .../gremlin/process/traversal/step/GValue.java | 23 +++- .../process/traversal/step/map/AddEdgeStep.java| 8 +-- .../gremlin/process/traversal/step/GValueTest.java | 66 +- 6 files changed, 106 insertions(+), 35 deletions(-) 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 9878b96a9a..b9cb2e5642 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 @@ -93,7 +93,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeV((GValue>) literalOrVar); else return graphTraversal.mergeV((Map) literalOrVar); @@ -129,7 +129,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeE((GValue>) literalOrVar); else return graphTraversal.mergeE((Map) literalOrVar); @@ -456,12 +456,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_coin(final GremlinParser.TraversalMethod_coinContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument()); -if (literalOrVar instanceof Number) -return graphTraversal.coin(((Number) literalOrVar).doubleValue()); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType().isNumeric()) +if (GValue.valueInstanceOfNumeric(literalOrVar)) return graphTraversal.coin((GValue) literalOrVar); else -throw new IllegalArgumentException("coin argument must be a double"); +return graphTraversal.coin(((Number) literalOrVar).doubleValue()); } @@ -657,12 +655,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public Traversal visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitStructureVertexArgument(ctx.structureVertexArgument()); -if (literalOrVar instanceof Vertex) -return graphTraversal.from((Vertex) literalOrVar); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.VERTEX) +if (GValue.valueInstanceOf(literalOrVar, GType.VERTEX)) return graphTraversal.from((GValue) literalOrVar); else -throw new IllegalArgumentException("from argument must be a vertex"); +return graphTraversal.from((Vertex) literalOrVar); } /** @@ -1197,7 +1193,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.option(antlr.argumentVisitor.parseMerge(ctx
(tinkerpop) 10/11: wip - fixed hasLabel(String, String...) for params
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 commit e217e9dcaecac9044305b1e280db75f4e45c810c Author: Stephen Mallette AuthorDate: Sun Aug 25 10:29:19 2024 -0400 wip - fixed hasLabel(String, String...) for params --- .../language/grammar/TraversalMethodVisitor.java | 2 +- .../gremlin/test/features/filter/HasLabel.feature | 28 ++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 b9cb2e5642..38aa65f6b2 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 @@ -771,7 +771,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor // 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); +return graphTraversal.hasLabel((GValue) literalOrVar, (GValue[]) gvalueLiteralOrVars); } else { // convert object array to string array final String[] stringLiteralOrVars = literalOrVars == null ? null : Arrays.stream(literalOrVars).map(o -> (String) o).toArray(String[]::new); diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature index 470019f36d..2da655e7e6 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature @@ -87,6 +87,34 @@ Feature: Step - hasLabel() When iterated to list Then the result should be empty + Scenario: g_V_hasLabelXpersonvarX_hasLabelXsoftwareX +Given the modern graph +And using the parameter xx1 defined as "person" +And the traversal of +""" +g.V().hasLabel(xx1).hasLabel("software") +""" +When iterated to list +Then the result should be empty + + Scenario: g_V_hasLabelXpersonvar_softwarevarX +Given the modern graph +And using the parameter xx1 defined as "person" +And using the parameter xx2 defined as "software" +And the traversal of +""" +g.V().hasLabel(xx1,xx2) +""" +When iterated to list +Then the result should be unordered + | result | + | v[marko] | + | v[vadas] | + | v[josh] | + | v[peter] | + | v[lop] | + | v[ripple] | + Scenario: g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20_andXltX29X_orXeqX35_name Given the modern graph And the traversal of
(tinkerpop) 03/11: wip
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 commit 9f82114678e6cb07f0afdf52251a6040dde9d528 Author: Stephen Mallette AuthorDate: Wed Jul 31 16:15:58 2024 -0400 wip --- .../language/grammar/TraversalMethodVisitor.java | 61 + .../grammar/TraversalSourceSpawnMethodVisitor.java | 14 +++- .../traversal/dsl/graph/GraphTraversal.java| 72 +++ .../traversal/dsl/graph/GraphTraversalSource.java | 46 + .../gremlin/process/traversal/step/GType.java | 16 - .../gremlin/process/traversal/step/GValue.java | 5 +- .../process/traversal/step/filter/CoinStep.java| 6 +- .../process/traversal/step/map/CombineStep.java| 11 +-- .../process/traversal/step/map/ConjoinStep.java| 17 +++-- .../process/traversal/step/map/ConstantStep.java | 6 +- .../process/traversal/step/map/GraphStep.java | 80 +- .../process/traversal/step/map/IntersectStep.java | 11 +-- .../process/traversal/step/map/MergeStep.java | 5 +- .../traversal/step/map/TraversalMergeStep.java | 19 +++-- .../traversal/step/sideEffect/InjectStep.java | 14 ++-- .../process/traversal/step/util/AbstractStep.java | 27 .../process/traversal/util/ListFunction.java | 16 ++--- .../gremlin/process/traversal/step/GValueTest.java | 30 .../tinkerpop/gremlin/features/StepDefinition.java | 32 +++-- .../apache/tinkerpop/gremlin/features/World.java | 9 +++ .../gremlin/test/features/map/Conjoin.feature | 12 .../traversal/step/sideEffect/Neo4jGraphStep.java | 4 +- .../traversal/step/sideEffect/TinkerGraphStep.java | 4 +- .../tinkerpop/gremlin/tinkergraph/TinkerWorld.java | 5 ++ 24 files changed, 399 insertions(+), 123 deletions(-) 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 4f523c092f..fe500e6210 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 @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GType; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality; +import java.util.Collection; import java.util.Map; import java.util.function.BiFunction; @@ -40,11 +41,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor /** * This object is used to append the traversal methods. */ -private final GraphTraversal graphTraversal; +private final GraphTraversal.Admin graphTraversal; public TraversalMethodVisitor(final GremlinAntlrToJava antlr, final GraphTraversal graphTraversal) { super(antlr, graphTraversal); -this.graphTraversal = graphTraversal; +this.graphTraversal = graphTraversal.asAdmin(); } /** @@ -92,7 +93,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { -return this.graphTraversal.mergeV(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeV((GValue>) literalOrVar); +else +return graphTraversal.mergeV((Map) literalOrVar); } /** @@ -124,7 +129,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { -return this.graphTraversal.mergeE(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeE((GValue>) literalOrVar); +else +return graphTraversal.mergeE((Map) literalOrVar); } /** @@ -435,7 +444,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_combine_Object(final GremlinParser.TraversalMethod_combine_ObjectContext
(tinkerpop) 01/11: wip - params
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 commit 47f3de100ce68b93fe3f8ae6e76ef708f4513cbf Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 +- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 +++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 ++ .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 ++- .../gremlin/process/traversal/Bytecode.java| 10 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 270 + .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GType.java | 81 ++ .../gremlin/process/traversal/step/GValue.java | 321 + .../process/traversal/step/filter/CoinStep.java| 28 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 18 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 ++- 35 files changed, 1682 insertions(+), 122 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try {
(tinkerpop) 06/11: wip - hasLabel(String, String...) fixes, more GValue utility
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 commit 555f3c743a1c4c20d1daddfbe319e215b76e Author: Stephen Mallette 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 { 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 @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 instance
(tinkerpop) 09/11: wip - fixed .NET translator for conjoin
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 commit 523a68bea51c8bbea562bce3236c9d75262888ad Author: Stephen Mallette AuthorDate: Sun Aug 25 09:51:42 2024 -0400 wip - fixed .NET translator for conjoin --- .../translator/DotNetTranslateVisitor.java | 10 + .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 24 +++--- 2 files changed, 22 insertions(+), 12 deletions(-) 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 df2c6b4d91..c7699c2345 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 @@ -929,6 +929,16 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { } } +@Override +public Void visitTraversalMethod_conjoin_String(final GremlinParser.TraversalMethod_conjoin_StringContext ctx) { +final String step = ctx.getChild(0).getText(); +sb.append(convertToPascalCase(step)); +sb.append("((string) "); +visit(ctx.stringArgument()); +sb.append(")"); +return null; +} + @Override public Void visitTraversalMethod_propertyMap(final GremlinParser.TraversalMethod_propertyMapContext ctx) { return handleGenerics(ctx); diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index 8d2fa79fa9..611b56f2db 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -628,18 +628,18 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label()).Concat(__.Select("a").InV().Values("name"))}}, {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label(), __.Select("a").InV().Values("name"))}}, {"g_addVXconstantXprefix_X_concatXVX1X_labelX_label", new List, ITraversal>> {(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("software").Property("name", "ripple [...] - {"g_injectXnullX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.Inject(null).Conjoin("1")}}, - {"g_V_valuesXnameX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Conjoin("1")}}, - {"g_V_valuesXnonexistantX_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("nonexistant").Fold().Conjoin(";")}}, - {"g_V_valuesXnameX_order_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Order().Fold().Conjoin("_")}}, - {"g_V_valuesXageX_order_fold_conjoinXsemicolonX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(";")}}, - {"g_V_valuesXageX_order_fold_conjoinXslashX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(p["xx1"])}}, - {"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new List, ITraversal>> {(g,p) =>g.V().Out().Path().By(__.Values("name").ToUpper()).Conjoin("MARKO")}}, - {"g_injectXmarkoX_conjoinX_X", new List, ITraversal>> {(g,p) =>g.Inject(p["xx1"]).Conjoin("-")}}, - {"g_V_
(tinkerpop) branch gvalue updated (dbab822241 -> 56c7297e5e)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard dbab822241 wip - fixed .NET translator for conjoin discard 90edbea254 wip - add values getter on inject discard 8d2e9239a9 wip - refactoring around mu steps discard 92ba9361df wip - hasLabel(String, String...) fixes, more GValue utility discard ee43de1be5 wip discard 1eec10961d wip discard 3775b6fe71 wip discard ce8a452549 Get rid of P as a parameter in gherkin discard 6fffb2a6f6 wip - params add 8b1c70a307 CTR TINKERPOP-3106 updated to compose v2 by changing docker-compose to docker compose add 47513acc43 Merge remote-tracking branch 'origin/3.6-dev' into 3.7-dev add cd07120f79 Merge remote-tracking branch 'origin/3.7-dev' add af793543f9 Adding a public getter for Repeat Loop Name add ea13a735d1 Merge pull request #2736 add fceffb19f1 Regression: Graceful shutdowns for GremlinServer (#2712) add 54926bdee0 Merge branch '3.7-dev' new 47f3de100c wip - params new 8bd0770157 Get rid of P as a parameter in gherkin new 9f82114678 wip new 2671097d94 wip new 21f4fe37e8 wip new 555f3c743a wip - hasLabel(String, String...) fixes, more GValue utility new 9f560e0818 wip - refactoring around mu steps new 45aa4ab1f9 wip - add values getter on inject new 523a68bea5 wip - fixed .NET translator for conjoin new e217e9dcae wip - fixed hasLabel(String, String...) for params new 56c7297e5e wip - translator fix for .NET This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (dbab822241) \ N -- N -- N refs/heads/gvalue (56c7297e5e) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 11 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 ++ docker/build.sh| 12 +++ .../dev/developer/development-environment.asciidoc | 12 +++ .../language/grammar/TraversalMethodVisitor.java | 2 +- .../translator/DotNetTranslateVisitor.java | 37 -- .../process/traversal/step/branch/RepeatStep.java | 4 +++ .../language/translator/GremlinTranslatorTest.java | 20 +++- gremlin-dotnet/docker-compose.yml | 2 -- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 20 ++-- gremlin-dotnet/test/pom.xml| 6 ++-- gremlin-go/docker-compose.yml | 2 -- gremlin-go/driver/README.md| 8 ++--- gremlin-go/pom.xml | 6 ++-- gremlin-go/run.sh | 4 +-- gremlin-javascript/pom.xml | 6 ++-- .../gremlin-javascript/docker-compose.yml | 2 -- .../gremlin-javascript/test/cucumber/gremlin.js| 2 ++ gremlin-python/docker-compose.yml | 2 -- gremlin-python/pom.xml | 18 +-- gremlin-python/src/main/python/radish/gremlin.py | 2 ++ gremlin-server/src/main/bin/gremlin-server.sh | 2 +- .../src/main/docker/docker-entrypoint.sh | 10 +- .../gremlin/test/features/filter/HasLabel.feature | 28 23 files changed, 145 insertions(+), 64 deletions(-)
(tinkerpop) 05/11: wip
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 commit 21f4fe37e8c176093feac22a68a51c867eeae55d Author: Stephen Mallette AuthorDate: Thu Aug 8 16:24:37 2024 -0400 wip --- .../tinkerpop/gremlin/process/traversal/P.java | 20 +--- .../process/traversal/dsl/graph/GraphTraversal.java | 7 +++ .../gremlin/process/traversal/step/GValue.java | 4 ++-- .../process/traversal/step/map/GraphStep.java| 13 + .../process/traversal/step/util/AbstractStep.java| 19 ++- .../process/traversal/step/util/HasContainer.java| 6 -- .../gremlin/process/traversal/step/GValueTest.java | 4 ++-- .../traversal/step/sideEffect/TinkerGraphStep.java | 14 -- 8 files changed, 71 insertions(+), 16 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 56e1946368..622a3c3e3a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -25,7 +25,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.OrP; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; /** * Predefined {@code Predicate} values that can be used to define filters to {@code has()} and {@code where()}. @@ -75,10 +77,22 @@ public class P implements Predicate, Serializable, Cloneable { @Override public boolean test(final V testValue) { -if (this.value instanceof GValue) +if (this.value instanceof GValue) { return this.biPredicate.test(testValue, ((GValue) this.value).get()); -else -return this.biPredicate.test(testValue, this.value); +} else { +// this might be a bunch of GValue that need to be resolved. zomg +if (this.value instanceof List) { +return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(o -> { +if (o instanceof GValue) { +return ((GValue) o).get(); +} else { +return o; +} +}).collect(Collectors.toList())); +} else { +return this.biPredicate.test(testValue, this.value); +} +} } @Override 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 0a392fc334..a7379fd914 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 @@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPathVertexProgramStep; +import org.apache.tinkerpop.gremlin.process.traversal.Contains; import org.apache.tinkerpop.gremlin.process.traversal.DT; import org.apache.tinkerpop.gremlin.process.traversal.Failure; import org.apache.tinkerpop.gremlin.process.traversal.Merge; @@ -2837,6 +2838,12 @@ public interface GraphTraversal extends Traversal { } else { this.asAdmin().getBytecode().addStep(Symbols.hasId, id, otherIds); +// the logic for dealing with hasId([]) is sketchy historically, just trying to maintain what we were +// originally testing prior to GValue. +if (id instanceof GValue && ((GValue) id).getType().isCollection()) { +return TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(T.id.getAccessor(), new P(Contains.within, id))); +} + //using ArrayList given P.within() turns all arguments into lists final List ids = new ArrayList<>(); if (id instanceof Object[]) { 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 41caaea1a2..da0694acdc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java +++ b/grem
(tinkerpop) 11/11: wip - translator fix for .NET
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 commit 56c7297e5e9614f17399aafc6c16ca6a37673f0d Author: Stephen Mallette AuthorDate: Mon Aug 26 08:22:01 2024 -0400 wip - translator fix for .NET --- .../translator/DotNetTranslateVisitor.java | 37 -- .../language/translator/GremlinTranslatorTest.java | 20 +++- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 20 ++-- .../gremlin-javascript/test/cucumber/gremlin.js| 2 ++ gremlin-python/src/main/python/radish/gremlin.py | 2 ++ 5 files changed, 69 insertions(+), 12 deletions(-) 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 c7699c2345..aaec8988e4 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 @@ -740,10 +740,36 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { sb.append(")"); return null; } else { -return super.visitTraversalMethod_hasLabel_String_String(ctx); +final String step = ctx.getChild(0).getText(); +sb.append(convertToPascalCase(step)); +sb.append("("); +tryAppendCastToString(ctx.stringNullableArgument()); +visit(ctx.stringNullableArgument()); + +// more arguments to come +if (!ctx.stringLiteralVarargs().isEmpty()) sb.append(", "); +visit(ctx.stringLiteralVarargs()); + +sb.append(")"); +return null; } } +@Override +public Void visitStringLiteralVarargs(final GremlinParser.StringLiteralVarargsContext ctx) { +for (int ix = 0; ix < ctx.getChildCount(); ix++) { +final ParseTree pt = ctx.getChild(ix); +if (pt instanceof GremlinParser.StringNullableArgumentContext) { +GremlinParser.StringNullableArgumentContext sna = (GremlinParser.StringNullableArgumentContext) pt; +tryAppendCastToString(sna); +visit(sna); +} else { +visit(pt); +} +}; +return null; +} + @Override public Void visitTraversalMethod_index(final GremlinParser.TraversalMethod_indexContext ctx) { return handleGenerics(ctx); @@ -933,7 +959,8 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { public Void visitTraversalMethod_conjoin_String(final GremlinParser.TraversalMethod_conjoin_StringContext ctx) { final String step = ctx.getChild(0).getText(); sb.append(convertToPascalCase(step)); -sb.append("((string) "); +sb.append("("); +tryAppendCastToString(ctx.stringArgument()); visit(ctx.stringArgument()); sb.append(")"); return null; @@ -1154,6 +1181,12 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { } } +private void tryAppendCastToString(final GremlinParser.StringArgumentContext ctx) { +if (ctx.variable() != null || ctx.stringLiteral() != null) { +sb.append("(string) "); +} +} + private void tryAppendCastToString(final GremlinParser.StringNullableArgumentContext ctx) { if (ctx.variable() != null || ctx.stringNullableLiteral().NullLiteral() != null) { sb.append("(string) "); 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 ed68e16140..619d578a3c 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 @@ -697,7 +697,7 @@ public class GremlinTranslatorTest { {"g.V().hasLabel(null, 'software', 'class')", null, "g.V().hasLabel(string0, string1, string2)", -"g.V().HasLabel(null, \"software\", \"class\")", +"g.V().HasLabel((string) null, \"software\", \"class\")", "g.V().HasLabel(nil, \"software\", \"class\")",
(tinkerpop) 08/11: wip - add values getter on inject
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 commit 45aa4ab1f9b808a9526c275f5b6b5ff3c59e297a Author: Stephen Mallette AuthorDate: Thu Aug 22 14:02:19 2024 -0400 wip - add values getter on inject --- .../gremlin/process/traversal/step/sideEffect/InjectStep.java | 7 +++ .../gremlin/sparql/process/traversal/strategy/SparqlStrategy.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java index cc3a970f93..4102cfdd57 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java @@ -55,4 +55,11 @@ public final class InjectStep extends StartStep { public GValue[] getInjections() { return this.injections; } + +/** + * Gets the injections of the step but unwraps the {@link GValue}. + */ +public S[] getInjectionsAsValues() { +return (S[]) resolveToValues(this.injections); +} } diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java index a4a95cc1c1..f4938fb219 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java @@ -71,7 +71,7 @@ public class SparqlStrategy extends AbstractTraversalStrategy
(tinkerpop) branch gvalue updated: wip - fixed .NET translator for conjoin
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 dbab822241 wip - fixed .NET translator for conjoin dbab822241 is described below commit dbab822241484bcabafce7214ba12cb3e9523edb Author: Stephen Mallette AuthorDate: Sun Aug 25 09:51:42 2024 -0400 wip - fixed .NET translator for conjoin --- .../translator/DotNetTranslateVisitor.java | 10 + .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 24 +++--- 2 files changed, 22 insertions(+), 12 deletions(-) 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 df2c6b4d91..c7699c2345 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 @@ -929,6 +929,16 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { } } +@Override +public Void visitTraversalMethod_conjoin_String(final GremlinParser.TraversalMethod_conjoin_StringContext ctx) { +final String step = ctx.getChild(0).getText(); +sb.append(convertToPascalCase(step)); +sb.append("((string) "); +visit(ctx.stringArgument()); +sb.append(")"); +return null; +} + @Override public Void visitTraversalMethod_propertyMap(final GremlinParser.TraversalMethod_propertyMapContext ctx) { return handleGenerics(ctx); diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index 8d2fa79fa9..611b56f2db 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -628,18 +628,18 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label()).Concat(__.Select("a").InV().Values("name"))}}, {"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX", new List, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values("name").Concat(__.Select("a").Label(), __.Select("a").InV().Values("name"))}}, {"g_addVXconstantXprefix_X_concatXVX1X_labelX_label", new List, ITraversal>> {(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("software").Property("name", "ripple [...] - {"g_injectXnullX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.Inject(null).Conjoin("1")}}, - {"g_V_valuesXnameX_conjoinX1X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Conjoin("1")}}, - {"g_V_valuesXnonexistantX_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("nonexistant").Fold().Conjoin(";")}}, - {"g_V_valuesXnameX_order_fold_conjoinX_X", new List, ITraversal>> {(g,p) =>g.V().Values("name").Order().Fold().Conjoin("_")}}, - {"g_V_valuesXageX_order_fold_conjoinXsemicolonX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(";")}}, - {"g_V_valuesXageX_order_fold_conjoinXslashX", new List, ITraversal>> {(g,p) =>g.V().Values("age").Order().Fold().Conjoin(p["xx1"])}}, - {"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new List, ITraversal>> {(g,p) =>g.V().Out().Path().By(__.Values("name").ToUpper()).Conjoin("MARKO")}}
(tinkerpop) branch gvalue updated: wip - add values getter on inject
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 90edbea254 wip - add values getter on inject 90edbea254 is described below commit 90edbea254feba2e7e7e7ccdc60aef6cfd3cd5be Author: Stephen Mallette AuthorDate: Thu Aug 22 14:02:19 2024 -0400 wip - add values getter on inject --- .../gremlin/process/traversal/step/sideEffect/InjectStep.java | 7 +++ .../gremlin/sparql/process/traversal/strategy/SparqlStrategy.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java index cc3a970f93..4102cfdd57 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectStep.java @@ -55,4 +55,11 @@ public final class InjectStep extends StartStep { public GValue[] getInjections() { return this.injections; } + +/** + * Gets the injections of the step but unwraps the {@link GValue}. + */ +public S[] getInjectionsAsValues() { +return (S[]) resolveToValues(this.injections); +} } diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java index a4a95cc1c1..f4938fb219 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java @@ -71,7 +71,7 @@ public class SparqlStrategy extends AbstractTraversalStrategy
(tinkerpop) branch gvalue updated: wip - refactoring around mu steps
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 8d2e9239a9 wip - refactoring around mu steps 8d2e9239a9 is described below commit 8d2e9239a90236a80f95fa6b956a8113e7bf4ea8 Author: Stephen Mallette AuthorDate: Thu Aug 22 13:27:02 2024 -0400 wip - refactoring around mu steps --- .../language/grammar/TraversalMethodVisitor.java | 28 - .../grammar/TraversalSourceSpawnMethodVisitor.java | 8 +-- .../gremlin/process/traversal/Operator.java| 8 +-- .../gremlin/process/traversal/step/GValue.java | 23 +++- .../process/traversal/step/map/AddEdgeStep.java| 8 +-- .../gremlin/process/traversal/step/GValueTest.java | 66 +- 6 files changed, 106 insertions(+), 35 deletions(-) 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 9878b96a9a..b9cb2e5642 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 @@ -93,7 +93,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeV((GValue>) literalOrVar); else return graphTraversal.mergeV((Map) literalOrVar); @@ -129,7 +129,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeE((GValue>) literalOrVar); else return graphTraversal.mergeE((Map) literalOrVar); @@ -456,12 +456,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_coin(final GremlinParser.TraversalMethod_coinContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument()); -if (literalOrVar instanceof Number) -return graphTraversal.coin(((Number) literalOrVar).doubleValue()); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType().isNumeric()) +if (GValue.valueInstanceOfNumeric(literalOrVar)) return graphTraversal.coin((GValue) literalOrVar); else -throw new IllegalArgumentException("coin argument must be a double"); +return graphTraversal.coin(((Number) literalOrVar).doubleValue()); } @@ -657,12 +655,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public Traversal visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitStructureVertexArgument(ctx.structureVertexArgument()); -if (literalOrVar instanceof Vertex) -return graphTraversal.from((Vertex) literalOrVar); -else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.VERTEX) +if (GValue.valueInstanceOf(literalOrVar, GType.VERTEX)) return graphTraversal.from((GValue) literalOrVar); else -throw new IllegalArgumentException("from argument must be a vertex"); +return graphTraversal.from((Vertex) literalOrVar); } /** @@ -1197,7 +1193,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @Override public GraphTraversal visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); -if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GTyp
(tinkerpop) branch gvalue-3.7 updated: backported hasLabel() improvements, additional GValue/GType features, fixed validations in addE
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new 2b64618ba3 backported hasLabel() improvements, additional GValue/GType features, fixed validations in addE 2b64618ba3 is described below commit 2b64618ba3030daa9044060642f3b6f1a81ed57d Author: Stephen Mallette AuthorDate: Thu Aug 22 10:43:30 2024 -0400 backported hasLabel() improvements, additional GValue/GType features, fixed validations in addE --- .../language/grammar/GenericLiteralVisitor.java| 14 +++ .../language/grammar/TraversalMethodVisitor.java | 27 ++-- .../traversal/dsl/graph/GraphTraversal.java| 2 +- .../gremlin/process/traversal/step/GType.java | 40 +++--- .../gremlin/process/traversal/step/GValue.java | 49 ++ .../process/traversal/step/map/AddEdgeStep.java| 5 ++- 6 files changed, 115 insertions(+), 22 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 7b841de87c..493b247aa8 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 @@ -643,4 +643,18 @@ public class GenericLiteralVisitor extends DefaultGremlinBaseVisitor { 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 d9b256dccb..81b0ccd750 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 @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GType; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; @@ -721,10 +722,30 @@ public class TraversalMethodVisitor extends TraversalRootVisitor @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 : Arra
(tinkerpop) branch gvalue updated: wip - hasLabel(String, String...) fixes, more GValue utility
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 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 { 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 @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()); + +//
(tinkerpop) branch gvalue-3.7 updated: Backported fix from gvalue branch to ensure that the Admin interface is being used
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new 8a7d051d23 Backported fix from gvalue branch to ensure that the Admin interface is being used 8a7d051d23 is described below commit 8a7d051d233baf210ae442378234699863abc161 Author: Stephen Mallette AuthorDate: Wed Aug 21 15:47:03 2024 -0400 Backported fix from gvalue branch to ensure that the Admin interface is being used --- .../tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java| 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 536dd13e55..d9b256dccb 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 @@ -42,11 +42,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor /** * This object is used to append the traversal methods. */ -private final GraphTraversal graphTraversal; +private final GraphTraversal.Admin graphTraversal; public TraversalMethodVisitor(final GremlinAntlrToJava antlr, final GraphTraversal graphTraversal) { super(antlr, graphTraversal); -this.graphTraversal = graphTraversal; +this.graphTraversal = graphTraversal.asAdmin(); } /**
(tinkerpop) branch merge-rename updated: Renamed steps around "merge" for better consistency.
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch merge-rename in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/merge-rename by this push: new dafc54e4d9 Renamed steps around "merge" for better consistency. dafc54e4d9 is described below commit dafc54e4d98bd4585574490c1358adcab33aa934 Author: Stephen Mallette AuthorDate: Mon Aug 19 07:52:04 2024 -0400 Renamed steps around "merge" for better consistency. TraveralMergeStep should have been MergeStep but that name was in use already as a base class for mergeV/E. Renamed that base class to MergeElementStep allowing merge() to use MergeStep. --- CHANGELOG.asciidoc | 2 + .../traversal/dsl/graph/GraphTraversal.java| 6 +- .../process/traversal/step/map/MergeEdgeStep.java | 4 +- .../map/{MergeStep.java => MergeElementStep.java} | 15 +- .../process/traversal/step/map/MergeStep.java | 388 - .../traversal/step/map/MergeVertexStep.java| 4 +- .../traversal/step/map/TraversalMergeStep.java | 126 --- .../process/traversal/util/BytecodeHelper.java | 4 +- ...versalMergeStepTest.java => MergeStepTest.java} | 2 +- 9 files changed, 85 insertions(+), 466 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index ee232e9fc1..50ecb2d21c 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -35,6 +35,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima * Added new list filtering step `none()`. * Added support for `Set` in GraphSON and GraphBinary serialization for `gremlin-javascript`, where it previously just converted to array. * Added `Set` syntax in `gremlin-language`. +* Renamed `MergeStep` to `MergeElementStep` as it is a base class to `mergeV()` and `mergeE()`. +* Renamed `TraversalMergeStep` of `merge()` to `MergeStep` for consistency. * Removed the deprecated `withGraph()` option from `AnonymousTraversalSource`. * Removed the `gremlin-archetype` module in favor of newer sample applications in each GLV's `examples` folder. * Bumped to `commons-collection4`. 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 aa364e4fc4..09e5f5eeb8 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 @@ -163,7 +163,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToUpperGlobalStep import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToUpperLocalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMergeStep; +import org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalSelectStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.TrimGlobalStep; @@ -1939,13 +1939,13 @@ public interface GraphTraversal extends Traversal { /** * Merges the list traverser and list argument. Also known as union. * - * @return the traversal with an appended {@link TraversalMergeStep}. + * @return the traversal with an appended {@link MergeStep}. * @see http://tinkerpop.apache.org/docs/${project.version}/reference/#merge-step"; target="_blank">Reference Documentation - Merge Step * @since 3.7.1 */ public default GraphTraversal merge(final Object values) { this.asAdmin().getBytecode().addStep(Symbols.merge, values); -return this.asAdmin().addStep(new TraversalMergeStep<>(this.asAdmin(), values)); +return this.asAdmin().addStep(new MergeStep<>(this.asAdmin(), values)); } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java index a5747fdfa0..bb22d218e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java @@ -52,12 +52,12 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outV; /** * Implementation for the {@code mergeE()} step coverin
(tinkerpop) branch merge-rename created (now 418d049939)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch merge-rename in repository https://gitbox.apache.org/repos/asf/tinkerpop.git at 418d049939 Merge branch '3.7-dev' No new revisions were added by this update.
(tinkerpop) 01/01: wip
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-redux-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 02fbda155c27dea12225fd98b148399fdb46147f Author: Stephen Mallette AuthorDate: Sun Aug 18 13:55:46 2024 -0400 wip --- .../tinkerpop/gremlin/jsr223/JavaTranslator.java | 6 + .../strategy/decoration/VertexProgramStrategy.java | 1 + .../gremlin/process/traversal/Bytecode.java| 8 +- .../process/traversal/TraversalStrategies.java | 2 + .../traversal/dsl/graph/GraphTraversal.java| 280 - .../traversal/dsl/graph/GraphTraversalSource.java | 68 +++- .../ConstantGVTraversal.java} | 42 +- .../process/traversal/step/filter/HasStep.java | 3 +- .../process/traversal/step/filter/IsStep.java | 3 +- .../process/traversal/step/map/ConstantStep.java | 7 +- .../process/traversal/step/map/GraphStep.java | 4 +- .../process/traversal/step/map/MergeStep.java | 7 +- .../traversal/step/map/MergeVertexStep.java| 1 + .../traversal/step/sideEffect/AddPropertyStep.java | 4 +- .../traversal/step/sideEffect/InjectStep.java | 3 +- .../gremlin/process/traversal/step/util/GType.java | 95 + .../process/traversal/step/util/GValue.java| 443 + .../process/traversal/step/util/GValueStep.java| 93 + .../process/traversal/step/util/HasContainer.java | 4 + .../step/util/structure/filter/HasStepGV.java | 74 .../util/structure/filter/HasStepStructure.java| 25 ++ .../structure/filter/IsStepGV.java}| 38 +- .../util/structure/filter/IsStepStructure.java | 25 ++ .../step/util/structure/map/AddEdgeStepGV.java | 59 +++ .../util/structure/map/AddEdgeStepStructure.java | 27 ++ .../structure/map/ConstantStepGV.java} | 37 +- .../util/structure/map/ConstantStepStructure.java | 23 ++ .../step/util/structure/map/GraphStepGV.java | 62 +++ .../util/structure/map/GraphStepStructure.java | 28 ++ .../step/util/structure/map/MergeEdgeStepGV.java | 94 + .../structure/map/MergeElementStepStructure.java | 44 ++ .../step/util/structure/map/MergeVertexStepGV.java | 95 + .../step/util/structure/map/VertexStepGV.java | 67 .../util/structure/map/VertexStepStructure.java| 30 ++ .../structure/sideEffect/AddPropertyStepGV.java| 54 +++ .../sideEffect/AddPropertyStepStructure.java | 28 ++ .../structure/sideEffect/InjectStepGV.java}| 38 +- .../structure/sideEffect/InjectStepStructure.java | 23 ++ .../strategy/decoration/ConnectiveStrategy.java| 1 - .../decoration/GValueReplacementStrategy.java | 97 + .../process/traversal/util/TraversalHelper.java| 40 +- .../apache/tinkerpop/gremlin/util/ArrayUtil.java | 42 ++ 42 files changed, 1980 insertions(+), 145 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java index 1641d823bc..09e5818933 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java @@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.lambda.CardinalityValueTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy; import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper; @@ -38,6 +39,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -336,6 +338,10 @@ public final class JavaTranslator> methodCache) { if (methodCache.isEmpty()) { for (final Method method : delegate.getClass().getMethods()) { +// skip any methods that use GValue as it can't be used remotely or be translated +if (Arrays.stream(method.getParameters()).anyMatch(p -> p.getType().equals(GValue.class))) { +continue; +} final List list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>()); list.add(new ReflectedMethod(method)); } diff --git a/gremlin-core/src/main/java/
(tinkerpop) branch gvalue-redux-3.7 created (now 02fbda155c)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue-redux-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git at 02fbda155c wip This branch includes the following new commits: new 02fbda155c wip The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
(tinkerpop) branch gvalue-3.7 updated: Brought back some changes from gvalue branch bound to master
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/gvalue-3.7 by this push: new f70d0d5f26 Brought back some changes from gvalue branch bound to master f70d0d5f26 is described below commit f70d0d5f264160f03aa270983ce30fb5252f9070 Author: Stephen Mallette AuthorDate: Thu Aug 15 09:32:41 2024 -0400 Brought back some changes from gvalue branch bound to master --- .../gremlin/process/traversal/Operator.java| 2 +- .../tinkerpop/gremlin/process/traversal/P.java | 20 ++- .../traversal/dsl/graph/GraphTraversal.java| 64 ++ .../traversal/dsl/graph/GraphTraversalSource.java | 43 +++ .../gremlin/process/traversal/step/GType.java | 18 +- .../gremlin/process/traversal/step/GValue.java | 20 +-- .../traversal/step/sideEffect/InjectStep.java | 18 +++--- .../process/traversal/step/util/AbstractStep.java | 43 +++ .../process/traversal/step/util/HasContainer.java | 6 +- .../strategy/decoration/SideEffectStrategy.java| 7 ++- .../gremlin/process/traversal/step/GValueTest.java | 34 ++-- 11 files changed, 236 insertions(+), 39 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java index b4d3cb23a0..3100084294 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java @@ -186,7 +186,7 @@ public enum Operator implements BinaryOperator { if (a instanceof Map && b instanceof Map) ((Map) a).putAll((Map) b); -else if (a instanceof Collection && a instanceof Collection) +else if (a instanceof Collection && b instanceof Collection) ((Collection) a).addAll((Collection) b); else throw new IllegalArgumentException(String.format("Objects must be both of Map or Collection: a=%s b=%s", diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 56e1946368..622a3c3e3a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -25,7 +25,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.OrP; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; /** * Predefined {@code Predicate} values that can be used to define filters to {@code has()} and {@code where()}. @@ -75,10 +77,22 @@ public class P implements Predicate, Serializable, Cloneable { @Override public boolean test(final V testValue) { -if (this.value instanceof GValue) +if (this.value instanceof GValue) { return this.biPredicate.test(testValue, ((GValue) this.value).get()); -else -return this.biPredicate.test(testValue, this.value); +} else { +// this might be a bunch of GValue that need to be resolved. zomg +if (this.value instanceof List) { +return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(o -> { +if (o instanceof GValue) { +return ((GValue) o).get(); +} else { +return o; +} +}).collect(Collectors.toList())); +} else { +return this.biPredicate.test(testValue, this.value); +} +} } @Override 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 3d9cd3e088..c49eadaf7d 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 @@ -458,6 +458,30 @@ public interface GraphTraversal extends Traversal { return TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(T.label.getAccessor(), labels.length == 1 ? P.eq(labels[0]) : P.within(labels))); } +/** + * This is a step modulator to a {@link TraversalOptionParent} like {@code choose()} or {@code mergeV()} wh
(tinkerpop) 02/02: wip
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 commit ee43de1be589c9b5de12397201c6174756c5b1e1 Author: Stephen Mallette AuthorDate: Thu Aug 8 16:24:37 2024 -0400 wip --- .../tinkerpop/gremlin/process/traversal/P.java | 20 +--- .../process/traversal/dsl/graph/GraphTraversal.java | 7 +++ .../gremlin/process/traversal/step/GValue.java | 4 ++-- .../process/traversal/step/map/GraphStep.java| 13 + .../process/traversal/step/util/AbstractStep.java| 19 ++- .../process/traversal/step/util/HasContainer.java| 6 -- .../gremlin/process/traversal/step/GValueTest.java | 4 ++-- .../traversal/step/sideEffect/TinkerGraphStep.java | 14 -- 8 files changed, 71 insertions(+), 16 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 56e1946368..622a3c3e3a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -25,7 +25,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.OrP; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; /** * Predefined {@code Predicate} values that can be used to define filters to {@code has()} and {@code where()}. @@ -75,10 +77,22 @@ public class P implements Predicate, Serializable, Cloneable { @Override public boolean test(final V testValue) { -if (this.value instanceof GValue) +if (this.value instanceof GValue) { return this.biPredicate.test(testValue, ((GValue) this.value).get()); -else -return this.biPredicate.test(testValue, this.value); +} else { +// this might be a bunch of GValue that need to be resolved. zomg +if (this.value instanceof List) { +return this.biPredicate.test(testValue, (V) ((List) this.value).stream().map(o -> { +if (o instanceof GValue) { +return ((GValue) o).get(); +} else { +return o; +} +}).collect(Collectors.toList())); +} else { +return this.biPredicate.test(testValue, this.value); +} +} } @Override 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 0a392fc334..a7379fd914 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 @@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep; import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPathVertexProgramStep; +import org.apache.tinkerpop.gremlin.process.traversal.Contains; import org.apache.tinkerpop.gremlin.process.traversal.DT; import org.apache.tinkerpop.gremlin.process.traversal.Failure; import org.apache.tinkerpop.gremlin.process.traversal.Merge; @@ -2837,6 +2838,12 @@ public interface GraphTraversal extends Traversal { } else { this.asAdmin().getBytecode().addStep(Symbols.hasId, id, otherIds); +// the logic for dealing with hasId([]) is sketchy historically, just trying to maintain what we were +// originally testing prior to GValue. +if (id instanceof GValue && ((GValue) id).getType().isCollection()) { +return TraversalHelper.addHasContainer(this.asAdmin(), new HasContainer(T.id.getAccessor(), new P(Contains.within, id))); +} + //using ArrayList given P.within() turns all arguments into lists final List ids = new ArrayList<>(); if (id instanceof Object[]) { 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 41caaea1a2..da0694acdc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java +++ b/grem
(tinkerpop) 01/02: wip
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 commit 1eec10961d99e68f49c2393ac36e6a15507008d2 Author: Stephen Mallette AuthorDate: Wed Aug 7 15:06:28 2024 -0400 wip --- .../grammar/DefaultGremlinBaseVisitor.java | 12 +-- .../language/grammar/TraversalMethodVisitor.java | 100 ++ .../grammar/TraversalSourceSpawnMethodVisitor.java | 15 ++- .../translator/DotNetTranslateVisitor.java | 23 ++-- .../language/translator/TranslateVisitor.java | 5 - .../gremlin/process/traversal/Operator.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 117 - .../traversal/dsl/graph/GraphTraversalSource.java | 32 +- .../gremlin/process/traversal/step/GValue.java | 9 +- .../process/traversal/step/map/AddEdgeStep.java| 9 +- .../process/traversal/step/map/CallStep.java | 36 +-- .../process/traversal/step/map/ConstantStep.java | 2 +- .../process/traversal/step/map/DifferenceStep.java | 16 ++- .../process/traversal/step/map/DisjunctStep.java | 12 ++- .../process/traversal/step/map/ProductStep.java| 15 ++- .../traversal/step/map/TraversalMergeStep.java | 3 +- .../traversal/step/sideEffect/InjectStep.java | 2 +- .../strategy/decoration/SideEffectStrategy.java| 7 +- gremlin-language/src/main/antlr4/Gremlin.g4| 7 +- .../tinkerpop/gremlin/features/StepDefinition.java | 25 ++--- 20 files changed, 333 insertions(+), 124 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java index 3bfb22d17b..f32e40e44b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java @@ -414,11 +414,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_from_Vertex(final GremlinParser.TraversalMethod_from_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_from_Traversal(final GremlinParser.TraversalMethod_from_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -854,11 +854,11 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ - @Override public T visitTraversalMethod_to_Vertex(final GremlinParser.TraversalMethod_to_VertexContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalMethod_to_Traversal(final GremlinParser.TraversalMethod_to_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ @@ -1395,10 +1395,6 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im * {@inheritDoc} */ @Override public T visitTraversalMethod_option_Merge_Map(final GremlinParser.TraversalMethod_option_Merge_MapContext ctx) { notImplemented(ctx); return null; } - /** -* {@inheritDoc} -*/ - @Override public T visitTraversalMethod_option_Merge_Traversal(final GremlinParser.TraversalMethod_option_Merge_TraversalContext ctx) { notImplemented(ctx); return null; } /** * {@inheritDoc} */ 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 fe500e6210..daf72820d4 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 @@ -25,14 +25,12 @@ import
(tinkerpop) branch gvalue updated (3775b6fe71 -> ee43de1be5)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 3775b6fe71 wip new 1eec10961d wip new ee43de1be5 wip The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../grammar/DefaultGremlinBaseVisitor.java | 12 +- .../language/grammar/TraversalMethodVisitor.java | 100 ++--- .../grammar/TraversalSourceSpawnMethodVisitor.java | 15 ++- .../translator/DotNetTranslateVisitor.java | 23 ++-- .../language/translator/TranslateVisitor.java | 5 - .../gremlin/process/traversal/Operator.java| 10 +- .../tinkerpop/gremlin/process/traversal/P.java | 20 +++- .../traversal/dsl/graph/GraphTraversal.java| 124 - .../traversal/dsl/graph/GraphTraversalSource.java | 32 +- .../gremlin/process/traversal/step/GValue.java | 13 ++- .../process/traversal/step/map/AddEdgeStep.java| 9 +- .../process/traversal/step/map/CallStep.java | 36 -- .../process/traversal/step/map/ConstantStep.java | 2 +- .../process/traversal/step/map/DifferenceStep.java | 16 ++- .../process/traversal/step/map/DisjunctStep.java | 12 +- .../process/traversal/step/map/GraphStep.java | 13 +++ .../process/traversal/step/map/ProductStep.java| 15 ++- .../traversal/step/map/TraversalMergeStep.java | 3 +- .../traversal/step/sideEffect/InjectStep.java | 2 +- .../process/traversal/step/util/AbstractStep.java | 19 +++- .../process/traversal/step/util/HasContainer.java | 6 +- .../strategy/decoration/SideEffectStrategy.java| 7 +- .../gremlin/process/traversal/step/GValueTest.java | 4 +- gremlin-language/src/main/antlr4/Gremlin.g4| 7 +- .../tinkerpop/gremlin/features/StepDefinition.java | 25 +++-- .../traversal/step/sideEffect/TinkerGraphStep.java | 14 ++- 26 files changed, 404 insertions(+), 140 deletions(-)
(tinkerpop) 03/03: wip
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 commit 3775b6fe71298d6131ed19e9b1cf96d978e486c5 Author: Stephen Mallette AuthorDate: Wed Jul 31 16:15:58 2024 -0400 wip --- .../language/grammar/TraversalMethodVisitor.java | 61 + .../grammar/TraversalSourceSpawnMethodVisitor.java | 14 +++- .../traversal/dsl/graph/GraphTraversal.java| 72 +++ .../traversal/dsl/graph/GraphTraversalSource.java | 46 + .../gremlin/process/traversal/step/GType.java | 16 - .../gremlin/process/traversal/step/GValue.java | 5 +- .../process/traversal/step/filter/CoinStep.java| 6 +- .../process/traversal/step/map/CombineStep.java| 11 +-- .../process/traversal/step/map/ConjoinStep.java| 17 +++-- .../process/traversal/step/map/ConstantStep.java | 6 +- .../process/traversal/step/map/GraphStep.java | 80 +- .../process/traversal/step/map/IntersectStep.java | 11 +-- .../process/traversal/step/map/MergeStep.java | 5 +- .../traversal/step/map/TraversalMergeStep.java | 19 +++-- .../traversal/step/sideEffect/InjectStep.java | 14 ++-- .../process/traversal/step/util/AbstractStep.java | 27 .../process/traversal/util/ListFunction.java | 16 ++--- .../gremlin/process/traversal/step/GValueTest.java | 30 .../tinkerpop/gremlin/features/StepDefinition.java | 32 +++-- .../apache/tinkerpop/gremlin/features/World.java | 9 +++ .../gremlin/test/features/map/Conjoin.feature | 12 .../traversal/step/sideEffect/Neo4jGraphStep.java | 4 +- .../traversal/step/sideEffect/TinkerGraphStep.java | 4 +- .../tinkerpop/gremlin/tinkergraph/TinkerWorld.java | 5 ++ 24 files changed, 399 insertions(+), 123 deletions(-) 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 4f523c092f..fe500e6210 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 @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GType; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality; +import java.util.Collection; import java.util.Map; import java.util.function.BiFunction; @@ -40,11 +41,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor /** * This object is used to append the traversal methods. */ -private final GraphTraversal graphTraversal; +private final GraphTraversal.Admin graphTraversal; public TraversalMethodVisitor(final GremlinAntlrToJava antlr, final GraphTraversal graphTraversal) { super(antlr, graphTraversal); -this.graphTraversal = graphTraversal; +this.graphTraversal = graphTraversal.asAdmin(); } /** @@ -92,7 +93,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeV_Map(final GremlinParser.TraversalMethod_mergeV_MapContext ctx) { -return this.graphTraversal.mergeV(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeV((GValue>) literalOrVar); +else +return graphTraversal.mergeV((Map) literalOrVar); } /** @@ -124,7 +129,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_mergeE_Map(final GremlinParser.TraversalMethod_mergeE_MapContext ctx) { -return this.graphTraversal.mergeE(antlr.argumentVisitor.parseMap(ctx.genericLiteralMapNullableArgument())); +final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); +if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.MAP) +return graphTraversal.mergeE((GValue>) literalOrVar); +else +return graphTraversal.mergeE((Map) literalOrVar); } /** @@ -435,7 +444,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_combine_Object(final GremlinParser.TraversalMethod_combine_ObjectContext
(tinkerpop) branch gvalue updated (71adcf4d5f -> 3775b6fe71)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 71adcf4d5f wip - params add 4d9347088d Fixes neo4j when used with jdk17 CTR add e6e6e9beac Merge branch '3.7-dev' add 14ce7be463 fix java feature test tag CTR add 859894261c Bump Polly from 8.4.0 to 8.4.1 in /gremlin-dotnet add 98e5b3e9fb Bump xunit from 2.8.1 to 2.9.0 in /gremlin-dotnet add 2c6d334e37 Merge branch 'dependabot/nuget/gremlin-dotnet/3.6-dev/xunit-2.9.0' into 3.6-dev add d6e4a2d0dd Bump xunit.runner.visualstudio from 2.8.1 to 2.8.2 in /gremlin-dotnet add ce6caa155d Merge branch 'dependabot/nuget/gremlin-dotnet/3.6-dev/xunit.runner.visualstudio-2.8.2' into 3.6-dev add 37d865d237 Merge branch '3.6-dev' into 3.7-dev add f4b636ced2 Merge branch '3.7-dev' add 812bc1de78 Add getter for private fields to Concat, Conjoin, SplitGlobal/Local Step (#2687) add 2bfd44b97f Merge branch '3.7-dev' add ef466de995 improvement: add necessary parameters for logging (#2684) add 5697d0735d Merge branch '3.7-dev' add 33d5cf8f69 Fixed up some formatting and confusing upgrade notes CTR add 93879c826d Merge branch '3.7-dev' add 39d7ed100c added configuration for logging level for Gremlin Console in Windows (#2694) add 97e1c7ada0 Merge branch '3.6-dev' into 3.7-dev add 14604a563a Merge branch '3.7-dev' add b382a1c751 Remove redundant six dependency (#2692) add a846d88d19 Merge branch '3.6-dev' into 3.7-dev add 418d049939 Merge branch '3.7-dev' new 6fffb2a6f6 wip - params new ce8a452549 Get rid of P as a parameter in gherkin new 3775b6fe71 wip This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (71adcf4d5f) \ N -- N -- N refs/heads/gvalue (3775b6fe71) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 17 +- docs/src/reference/implementations-neo4j.asciidoc | 3 + docs/src/upgrade/release-3.7.x.asciidoc| 23 +- gremlin-console/src/main/bin/gremlin-java8.bat | 13 +- gremlin-console/src/main/bin/gremlin.bat | 13 +- gremlin-console/src/main/bin/gremlin.sh| 6 + .../language/grammar/TraversalMethodVisitor.java | 61 +++- .../grammar/TraversalSourceSpawnMethodVisitor.java | 14 +- .../gremlin/process/traversal/Bytecode.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 330 - .../traversal/dsl/graph/GraphTraversalSource.java | 46 +++ .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GType.java | 16 +- .../gremlin/process/traversal/step/GValue.java | 184 +++- .../process/traversal/step/filter/CoinStep.java| 8 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/CombineStep.java| 11 +- .../process/traversal/step/map/ConcatStep.java | 8 + .../process/traversal/step/map/ConjoinStep.java| 19 +- .../process/traversal/step/map/ConstantStep.java | 17 +- .../process/traversal/step/map/GraphStep.java | 74 +++-- .../process/traversal/step/map/IntersectStep.java | 11 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 23 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../traversal/step/map/SplitGlobalStep.java| 4 + .../process/traversal/step/map/SplitLocalStep.java | 4 + .../traversal/step/map/TraversalMergeStep.java | 19 +- .../process/traversal/step/map/VertexStep.java | 37 ++- .../traversal/step/sideEffect/InjectStep.java | 14 +- .../process/traversal/step/util/AbstractStep.java | 27 ++ .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../
(tinkerpop) 01/03: wip - params
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 commit 6fffb2a6f6f4720429e1c48e76e796d7eb891f05 Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 +- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 +++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 ++ .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 ++- .../gremlin/process/traversal/Bytecode.java| 10 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 270 + .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GType.java | 81 ++ .../gremlin/process/traversal/step/GValue.java | 321 + .../process/traversal/step/filter/CoinStep.java| 28 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 18 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 ++- 35 files changed, 1682 insertions(+), 122 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try {
(tinkerpop) 02/03: Get rid of P as a parameter in gherkin
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 commit ce8a452549f5a3f647cbfb1fa2fc8037030d1f97 Author: Stephen Mallette AuthorDate: Tue Jul 30 10:26:35 2024 -0400 Get rid of P as a parameter in gherkin P can't really be used that way in the grammar so doesn't make sense to test that way. --- .../Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs| 7 --- .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 8 gremlin-go/driver/cucumber/cucumberSteps_test.go | 15 +-- gremlin-go/driver/cucumber/gremlin.go | 8 .../gremlin-javascript/test/cucumber/feature-steps.js | 4 .../gremlin-javascript/test/cucumber/gremlin.js | 8 gremlin-python/src/main/python/radish/feature_steps.py| 11 --- gremlin-python/src/main/python/radish/gremlin.py | 8 .../apache/tinkerpop/gremlin/features/StepDefinition.java | 5 - .../tinkerpop/gremlin/test/features/filter/HasId.feature | 13 + 10 files changed, 22 insertions(+), 65 deletions(-) diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs index 98f8b0b5b4..98d49d8df7 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs @@ -115,13 +115,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin _parameters.Add(name, parsedValue); } -[Given("using the parameter (\\w+) of P.(\\w+)\\(\"(.*)\"\\)")] -public void UsingParameterP(string name, string pval, string value) -{ -var parsedValue = ParseValue(value.Replace("\\\"", "\""), _graphName!); -_parameters.Add(name, new P(pval, parsedValue)); -} - [Given("the traversal of")] public void TranslateTraversal(string traversalText) { diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index bd0a8e7469..c8cb66068e 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -268,9 +268,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasXlabel_isXpersonXX", new List, ITraversal>> {(g,p) =>g.V().Has(T.Label, __.Is("person"))}}, {"g_V_hasXname_nullX", new List, ITraversal>> {(g,p) =>g.V().Has("name", (object) null)}}, {"g_V_hasIdXemptyX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, - {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(p["xx1"])).Count()}}, + {"g_V_hasIdXwithinXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Within(new List { })).Count()}}, + {"g_V_hasIdXwithoutXemptyXX_count", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Without(new List { })).Count()}}, + {"g_V_notXhasIdXwithinXemptyXXX_count", new List, ITraversal>> {(g,p) =>g.V().Not(__.HasId(P.Within(new List { }))).Count()}}, {"g_V_hasIdXnullX", new List, ITraversal>> {(g,p) =>g.V().HasId(null)}}, {"g_V_hasIdXeqXnullXX", new List, ITraversal>> {(g,p) =>g.V().HasId(P.Eq(null))}}, {"g_V_hasIdX2_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid2"], null)}}, @@ -278,7 +278,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasIdX1AsString_2AsString_nullX", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"], p["vid2"], null)}}, {"g_V_hasIdXnull_2X", new List, ITraversal>> {(g,p) =>g.V().HasId(null, p["vid2"])}}, {"g_V_hasIdX1X_hasIdX2X", new List, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"]).HasId(p["vid2"])}}, - {"g_V_in_hasIdXneqX1XX", new List, ITraversal>> {(g,p) =>g.V().In().HasId(p["xx1"])}}, +
(tinkerpop) 01/01: wip - params
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 139073888b9d91f0e8fa9c9d90ace28198914a30 Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 +- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 +++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 ++ .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 ++- .../gremlin/process/traversal/Bytecode.java| 10 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 270 + .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GType.java | 81 ++ .../gremlin/process/traversal/step/GValue.java | 321 + .../process/traversal/step/filter/CoinStep.java| 28 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 18 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 ++- 35 files changed, 1682 insertions(+), 122 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try {
(tinkerpop) branch gvalue-3.7 updated (8b97ff5998 -> 139073888b)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 8b97ff5998 wip - params discard 5d34e4edf9 wip - params add 39d7ed100c added configuration for logging level for Gremlin Console in Windows (#2694) add 97e1c7ada0 Merge branch '3.6-dev' into 3.7-dev add b382a1c751 Remove redundant six dependency (#2692) add a846d88d19 Merge branch '3.6-dev' into 3.7-dev new 139073888b wip - params This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (8b97ff5998) \ N -- N -- N refs/heads/gvalue-3.7 (139073888b) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 ++ gremlin-console/src/main/bin/gremlin-java8.bat | 13 - gremlin-console/src/main/bin/gremlin.bat | 13 - gremlin-python/docker-compose.yml | 2 +- gremlin-python/src/main/python/examples/requirements.txt | 1 - gremlin-python/src/main/python/setup.cfg | 3 --- gremlin-python/src/main/python/setup.py| 7 +-- .../main/python/tests/structure/io/test_graphsonV2d0.py| 12 ++-- .../main/python/tests/structure/io/test_graphsonV3d0.py| 14 +++--- 9 files changed, 41 insertions(+), 26 deletions(-)
(tinkerpop) 02/02: wip - params
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 8b97ff5998f666fafdb768d7f57aa07dda2bc2ad Author: Stephen Mallette AuthorDate: Mon Jul 29 16:06:03 2024 -0400 wip - params --- .../gremlin/process/traversal/Bytecode.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 258 - .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GValue.java | 179 +++- .../process/traversal/step/filter/CoinStep.java| 2 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 18 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 + .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + 23 files changed, 1009 insertions(+), 51 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java index 5b88cea5fc..862ee98bd9 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java @@ -19,6 +19,7 @@ package org.apache.tinkerpop.gremlin.process.traversal; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy; import org.apache.tinkerpop.gremlin.structure.util.StringFactory; import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; @@ -295,8 +296,13 @@ public class Bytecode implements Cloneable, Serializable { if (null != variable) return new Binding<>(variable, convertArgument(argument, false)); } -// -if (argument instanceof Traversal) { + +// a GValue gets converted to its value because we don't serialize it. it really doesn't have anything to do +// with bytecode/remoting. it's an internal construct related to parsing with the grammar that is leaking +// over here. in 4.x with bytecode removed, we won't need to worry about this. +if (argument instanceof GValue) +return convertArgument(((GValue) argument).get(), false); +else if (argument instanceof Traversal) { // prevent use of "g" to spawn child traversals if (((Traversal) argument).asAdmin().getTraversalSource().isPresent()) throw new IllegalStateException(String.format( 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 103ad64255..3d9cd3e088 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 @@ -47,7 +47,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.lambda.TrueTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating; import org.apache.tinkerpop.gremlin.process.traversal.step.Configuring; import org.apache.tinkerpop.gremlin.process.traversal.step.FromToModulating; -import org.apache.tinkerpop.gremlin.process.traversal.step.GType; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating; import org.apache.tinkerpop.gremlin.process.traversal.step.ReadWriting; @@ -243,7 +242,7 @@ public interface GraphTraversal extends Traversal { public interface Admin extends Traversal.Admin, GraphTraversal { /** - * Filter the E object given a biased coin toss. + * Filter the E object given a biased coin toss. For interna
(tinkerpop) 01/02: wip - params
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 5d34e4edf989354d1ca1c97a2f4f18d3aada5e1f Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 ++- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 ++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 + .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 42 ++ .../gremlin/process/traversal/step/GType.java | 81 +++ .../gremlin/process/traversal/step/GValue.java | 148 + .../process/traversal/step/filter/CoinStep.java| 26 +++- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 +++-- 15 files changed, 691 insertions(+), 89 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try { return GremlinQueryParser.parse(script, antlr); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java new file mode 100644 index 00..1be1f3d448 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java @@ -0,0 +1,40 @@ +/* + * 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 lan
(tinkerpop) branch gvalue-3.7 updated (216b8b10c3 -> 8b97ff5998)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 216b8b10c3 wip - params add 859894261c Bump Polly from 8.4.0 to 8.4.1 in /gremlin-dotnet add 98e5b3e9fb Bump xunit from 2.8.1 to 2.9.0 in /gremlin-dotnet add 2c6d334e37 Merge branch 'dependabot/nuget/gremlin-dotnet/3.6-dev/xunit-2.9.0' into 3.6-dev add d6e4a2d0dd Bump xunit.runner.visualstudio from 2.8.1 to 2.8.2 in /gremlin-dotnet add ce6caa155d Merge branch 'dependabot/nuget/gremlin-dotnet/3.6-dev/xunit.runner.visualstudio-2.8.2' into 3.6-dev add 37d865d237 Merge branch '3.6-dev' into 3.7-dev add 812bc1de78 Add getter for private fields to Concat, Conjoin, SplitGlobal/Local Step (#2687) add ef466de995 improvement: add necessary parameters for logging (#2684) add 33d5cf8f69 Fixed up some formatting and confusing upgrade notes CTR new 5d34e4edf9 wip - params new 8b97ff5998 wip - params This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (216b8b10c3) \ N -- N -- N refs/heads/gvalue-3.7 (8b97ff5998) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 + docs/src/upgrade/release-3.7.x.asciidoc| 23 +- .../gremlin/process/traversal/Bytecode.java| 10 +- .../traversal/dsl/graph/GraphTraversal.java| 258 - .../traversal/lambda/ConstantTraversal.java| 15 +- .../gremlin/process/traversal/step/GValue.java | 179 +++- .../process/traversal/step/filter/CoinStep.java| 2 +- .../process/traversal/step/map/AddEdgeStep.java| 6 + .../process/traversal/step/map/AddVertexStep.java | 5 + .../process/traversal/step/map/ConcatStep.java | 8 + .../process/traversal/step/map/ConjoinStep.java| 4 + .../process/traversal/step/map/ConstantStep.java | 19 +- .../process/traversal/step/map/GraphStep.java | 30 +- .../process/traversal/step/map/MergeEdgeStep.java | 5 + .../process/traversal/step/map/MergeStep.java | 18 +- .../traversal/step/map/MergeVertexStep.java| 5 + .../traversal/step/map/SplitGlobalStep.java| 4 + .../process/traversal/step/map/SplitLocalStep.java | 4 + .../process/traversal/step/map/VertexStep.java | 37 ++- .../process/traversal/step/util/Parameters.java| 21 +- .../strategy/decoration/SubgraphStrategy.java | 2 +- .../optimization/AdjacentToIncidentStrategy.java | 2 +- .../optimization/IncidentToAdjacentStrategy.java | 2 +- .../optimization/InlineFilterStrategy.java | 20 +- .../gremlin/structure/io/gryo/GryoVersion.java | 12 +- .../gremlin/process/traversal/step/GTypeTest.java | 77 + .../gremlin/process/traversal/step/GValueTest.java | 316 + .../traversal/step/util/ParametersTest.java| 11 + .../translator/JavascriptTranslatorTest.java | 8 + gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- .../Gremlin.Net.IntegrationTest.csproj | 4 +- .../Gremlin.Net.Template.IntegrationTest.csproj| 4 +- .../Gremlin.Net.UnitTest.csproj| 4 +- gremlin-go/driver/graphBinary.go | 2 +- gremlin-go/driver/graphBinary_test.go | 2 +- 35 files changed, 1047 insertions(+), 76 deletions(-) create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GTypeTest.java create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
(tinkerpop) branch 3.7-dev updated (ef466de995 -> 33d5cf8f69)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from ef466de995 improvement: add necessary parameters for logging (#2684) add 33d5cf8f69 Fixed up some formatting and confusing upgrade notes CTR No new revisions were added by this update. Summary of changes: docs/src/upgrade/release-3.7.x.asciidoc | 23 +++ 1 file changed, 7 insertions(+), 16 deletions(-)
(tinkerpop) branch master updated: Fixed up some formatting and confusing upgrade notes CTR
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/master by this push: new 33d5cf8f69 Fixed up some formatting and confusing upgrade notes CTR new 93879c826d Merge branch '3.7-dev' 33d5cf8f69 is described below commit 33d5cf8f695941499283290141948de17764cfc0 Author: Stephen Mallette AuthorDate: Fri Jul 19 16:03:46 2024 -0400 Fixed up some formatting and confusing upgrade notes CTR --- docs/src/upgrade/release-3.7.x.asciidoc | 23 +++ 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/docs/src/upgrade/release-3.7.x.asciidoc b/docs/src/upgrade/release-3.7.x.asciidoc index 9ddac7c018..4dda8ba74d 100644 --- a/docs/src/upgrade/release-3.7.x.asciidoc +++ b/docs/src/upgrade/release-3.7.x.asciidoc @@ -30,7 +30,6 @@ complete list of all the modifications that are part of this release. === Upgrading for Users - == TinkerPop 3.7.2 *Release Date: April 8, 2024* @@ -38,18 +37,6 @@ complete list of all the modifications that are part of this release. Please see the link:https://github.com/apache/tinkerpop/blob/3.7.2/CHANGELOG.asciidoc#release-3-7-2[changelog] for a complete list of all the modifications that are part of this release. -=== Upgrading for Users - - Notice: Renaming `none()` step to `discard()` in 4.0.0 -`none()`, which is primarily used by `iterate()` to discard traversal results in remote contexts, will be renamed to -`discard()` in release 4.0.0. - -=== Upgrading for Providers - - Notice: Renaming NoneStep to DiscardStep in 4.0.0 -NoneStep, which is primarily used by `iterate()` to discard traversal results in remote contexts, will be renamed to -DiscardStep in release 4.0.0 to make room for a list filtering NoneStep. - == TinkerPop 3.7.1 *Release Date: November 20, 2023* @@ -59,8 +46,9 @@ complete list of all the modifications that are part of this release. === Upgrading for Users String Manipulation Steps -This version introduces the following new string manipulation steps `asString()`, `length()`, `toLower()`, `toUpper()`, `trim()`, -`lTrim()`, `rTrim()`, `reverse()`, `replace()`, `split()`, `substring()`, and `format()`, as well as modifications to the `concat()` step introduced in 3.7.0. +This version introduces the following new string manipulation steps `asString()`, `length()`, `toLower()`, `toUpper()`, +`trim()`, `lTrim()`, `rTrim()`, `reverse()`, `replace()`, `split()`, `substring()`, and `format()`, as well as +modifications to the `concat()` step introduced in 3.7.0. = Updates to String Step concat(): Concat has been modified to take traversal varargs instead of a single traversal. Users no longer have to chain @@ -73,7 +61,10 @@ gremlin> g.V(1).outE().as("a").V(1).values("name").concat(select("a").label(), s ==>markoknowsjosh -A notable breaking change from 3.7.0 is that we have output order of `inject()` as a child of `concat()` to be consistent with other parent steps. Any 3.7.0 uses of `concat(inject(X))` should change to `concat(constant(X))` to retain the old semantics. +A notable breaking change from 3.7.0 is that we have output order of `inject()` as a child of `concat()` to be +consistent with other parent steps. Any 3.7.0 uses of `concat(inject(X))` should change to `concat(constant(X))` to +retain the old semantics. + [source,text] // 3.7.0
(tinkerpop) branch master-http-v3 created (now acc940f51b)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master-http-v3 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git at acc940f51b Retain v3 serializers and related code This branch includes the following new commits: new acc940f51b Retain v3 serializers and related code The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
(tinkerpop) branch gvalue-3.7 created (now 216b8b10c3)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git at 216b8b10c3 wip - params This branch includes the following new commits: new 216b8b10c3 wip - params The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
(tinkerpop) 01/01: wip - params
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch gvalue-3.7 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 216b8b10c32f79ca3d875120af6308d975faed52 Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 ++- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 ++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 + .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 42 ++ .../gremlin/process/traversal/step/GType.java | 81 +++ .../gremlin/process/traversal/step/GValue.java | 148 + .../process/traversal/step/filter/CoinStep.java| 26 +++- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 +++-- 15 files changed, 691 insertions(+), 89 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try { return GremlinQueryParser.parse(script, antlr); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java new file mode 100644 index 00..1be1f3d448 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java @@ -0,0 +1,40 @@ +/* + * 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 lan
(tinkerpop) branch gvalue updated (3f9b30f452 -> 71adcf4d5f)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 3f9b30f452 wip - parameters new 71adcf4d5f wip - params This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (3f9b30f452) \ N -- N -- N refs/heads/gvalue (71adcf4d5f) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 ++- .../VariableResolverCustomizer.java} | 29 ++--- .../gremlin/jsr223/VariableResolverPlugin.java | 95 + .../language/grammar/TraversalMethodVisitor.java | 2 +- .../gremlin/process/traversal/step/GType.java | 54 +++--- .../gremlin/process/traversal/step/GValue.java | 24 +++-- .../gremlin/jsr223/VariableResolverPluginTest.java | 117 + .../tinkergraph/structure/TinkerGraphPlayTest.java | 5 +- 8 files changed, 299 insertions(+), 44 deletions(-) copy gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/{process/traversal/util/TraversalObjectFunction.java => jsr223/VariableResolverCustomizer.java} (54%) create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverPlugin.java create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverPluginTest.java
(tinkerpop) 01/01: wip - params
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 commit 71adcf4d5fd48dc1e326e506233649828c366221 Author: Stephen Mallette AuthorDate: Fri Jul 12 10:48:20 2024 -0400 wip - params --- .../gremlin/jsr223/GremlinLangScriptEngine.java| 17 ++- .../gremlin/jsr223/VariableResolverCustomizer.java | 40 ++ .../gremlin/jsr223/VariableResolverPlugin.java | 95 + .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 42 ++ .../gremlin/process/traversal/step/GType.java | 81 +++ .../gremlin/process/traversal/step/GValue.java | 148 + .../process/traversal/step/filter/CoinStep.java| 26 +++- .../gremlin/structure/VertexProperty.java | 3 - .../gremlin/jsr223/VariableResolverPluginTest.java | 117 .../language/grammar/ArgumentVisitorTest.java | 116 .../language/grammar/GremlinQueryParserTest.java | 8 +- .../tinkergraph/structure/TinkerGraphPlayTest.java | 33 +++-- 15 files changed, 691 insertions(+), 89 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java index 842d4daa32..6ef141e8e5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java @@ -33,7 +33,11 @@ import javax.script.ScriptException; import javax.script.SimpleBindings; import java.io.IOException; import java.io.Reader; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; /** * A {@link GremlinScriptEngine} implementation that evaluates Gremlin scripts using {@code gremlin-language}. As it @@ -53,6 +57,8 @@ import java.util.Map; public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine { private volatile GremlinScriptEngineFactory factory; +private final Function, VariableResolver> variableResolverMaker; + /** * Creates a new instance using no {@link Customizer}. */ @@ -61,6 +67,15 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre } public GremlinLangScriptEngine(final Customizer... customizers) { +final List listOfCustomizers = Arrays.asList(customizers); + +// this ScriptEngine really only supports the VariableResolverCustomizer to configure the VariableResolver +// and can't configure it more than once. first one wins +final Optional opt = listOfCustomizers.stream().filter(c -> c instanceof VariableResolverCustomizer).findFirst(); +variableResolverMaker = opt.isPresent() ? +((VariableResolverCustomizer) opt.get()).getVariableResolverMaker() : +VariableResolver.DirectVariableResolver::new; + } @Override @@ -108,7 +123,7 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre final Map m = context.getBindings(ScriptContext.ENGINE_SCOPE); final GremlinAntlrToJava antlr = new GremlinAntlrToJava((GraphTraversalSource) o, -new VariableResolver.DefaultVariableResolver(m)); +variableResolverMaker.apply(m)); try { return GremlinQueryParser.parse(script, antlr); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java new file mode 100644 index 00..1be1f3d448 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java @@ -0,0 +1,40 @@ +/* + * 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 lan
(tinkerpop) branch 3.7-dev updated (a65bcd8761 -> 4d9347088d)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from a65bcd8761 Merge branch '3.6-dev' into 3.7-dev add 4d9347088d Fixes neo4j when used with jdk17 CTR No new revisions were added by this update. Summary of changes: CHANGELOG.asciidoc| 13 +++-- docs/src/reference/implementations-neo4j.asciidoc | 3 +++ gremlin-console/src/main/bin/gremlin.sh | 6 ++ 3 files changed, 16 insertions(+), 6 deletions(-)
(tinkerpop) branch master updated: Fixes neo4j when used with jdk17 CTR
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git The following commit(s) were added to refs/heads/master by this push: new 4d9347088d Fixes neo4j when used with jdk17 CTR new e6e6e9beac Merge branch '3.7-dev' 4d9347088d is described below commit 4d9347088d0ec0e5f5d87ab78358d687620ca4d5 Author: Stephen Mallette AuthorDate: Fri Jul 12 11:25:03 2024 -0400 Fixes neo4j when used with jdk17 CTR --- CHANGELOG.asciidoc| 13 +++-- docs/src/reference/implementations-neo4j.asciidoc | 3 +++ gremlin-console/src/main/bin/gremlin.sh | 6 ++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 18820da91b..629d5f6109 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -26,12 +26,13 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima This release also includes changes from <>. * Refactored mutation events registration by moving reusable code from relevant steps to `EventUtil` -* Open `NoOpBarrierStep` for extensibility (removed `final` keyword) +* Open `NoOpBarrierStep` for extensibility (removed `final` keyword). * Deprecated public constructor for `SeedStrategy` in favor of builder pattern to be consistent with other strategies. -* Allow specifying a customized Spark app name -* CoinStep has a getter method for its probability field -* Fixed so that TrimGlobalStep and TrimLocalStep have the same character control handling as Ltrim and Rtrim -* Fix a bug in MaxLocalStep, MinLocalStep, MeanLocalStep and SumLocalStep that it throws NoSuchElementException when encounters an empty iterator as input. +* Allow specifying a customized Spark app name. +* Added getter method to `CoinStep` for its probability field. +* Attempted to detect JDK version for Gremlin Console to avoid problems with Java 17 if `neo4j-gremlin` is used. +* Fixed so that `TrimGlobalStep` and `TrimLocalStep` have the same character control handling as `Ltrim` and `Rtrim` +* Fix a bug in `MaxLocalStep`, `MinLocalStep`, `MeanLocalStep` and `SumLocalStep` that it throws `NoSuchElementException` when encounters an empty iterator as input. * Fix cases where Map keys of incomparable types could panic in `gremlin-go`. [[release-3-7-2]] @@ -102,7 +103,7 @@ This release also includes changes from <> and <https://tinkerpop.apache.org/providers.html[TinkerPop site]. +WARNING: Neo4j-Gremlin can work with JDK17, but requires the use of the `--add-opens` flag to be provided to the JVM +as follows: `--add-opens=java.base/sun.nio.ch=ALL-UNNAMED`. + [source,xml] diff --git a/gremlin-console/src/main/bin/gremlin.sh b/gremlin-console/src/main/bin/gremlin.sh index 9fbd8a0e05..36dcb4dd5c 100755 --- a/gremlin-console/src/main/bin/gremlin.sh +++ b/gremlin-console/src/main/bin/gremlin.sh @@ -108,6 +108,12 @@ if [ -n "$SCRIPT_DEBUG" ]; then set -x fi +# Try to detect JDK version and add specific flag for JDK 17 to allow use of neo4j-gremlin +JAVA_VERSION=$($JAVA -version 2>&1 | awk -F '"' '/version/ {print $2}') +if [[ "$JAVA_VERSION" == 17* ]]; then +JVM_OPTS+=( "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" ) +fi + # Start the JVM, execute the application, and return its exit code # shellcheck disable=SC2068 exec $JAVA ${JVM_OPTS[@]} org.apache.tinkerpop.gremlin.console.Console "$@"
(tinkerpop) 01/01: wip - parameters
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 commit 3f9b30f452b09cec4c80e33f67ff724cfc5a1963 Author: Stephen Mallette AuthorDate: Wed Jul 10 15:49:35 2024 -0400 wip - parameters --- .../language/grammar/TraversalMethodVisitor.java | 11 +- .../gremlin/language/grammar/VariableResolver.java | 37 +- .../tinkerpop/gremlin/process/traversal/P.java | 6 +- .../traversal/dsl/graph/GraphTraversal.java| 42 +++ .../gremlin/process/traversal/step/GType.java | 59 + .../gremlin/process/traversal/step/GValue.java | 138 + .../process/traversal/step/filter/CoinStep.java| 26 +++- .../gremlin/structure/VertexProperty.java | 3 - .../language/grammar/ArgumentVisitorTest.java | 116 - .../language/grammar/GremlinQueryParserTest.java | 8 +- .../tinkergraph/structure/TinkerGraphPlayTest.java | 30 +++-- 11 files changed, 388 insertions(+), 88 deletions(-) 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 440bd502c8..d183445b9a 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 @@ -23,6 +23,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.Order; import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.step.GType; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality; import java.util.Map; @@ -441,7 +443,14 @@ public class TraversalMethodVisitor extends TraversalRootVisitor */ @Override public GraphTraversal visitTraversalMethod_coin(final GremlinParser.TraversalMethod_coinContext ctx) { -return graphTraversal.coin(((Number) antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument())).doubleValue()); +final Object literalOrVar = antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument()); +if (literalOrVar instanceof Number) +return graphTraversal.coin(((Number) literalOrVar).doubleValue()); +else if (literalOrVar instanceof GValue && ((GValue) literalOrVar).getType() == GType.DOUBLE) +return graphTraversal.asAdmin().coin((GValue) literalOrVar); +else +throw new IllegalArgumentException("coin() argument must be a double"); + } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/VariableResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/VariableResolver.java index a97bd4b646..e017808faf 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/VariableResolver.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/VariableResolver.java @@ -18,24 +18,25 @@ */ package org.apache.tinkerpop.gremlin.language.grammar; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import java.util.Map; import java.util.function.BiFunction; /** * Resolves parameters in Gremlin to objects. */ -public interface VariableResolver extends BiFunction { +public interface VariableResolver extends BiFunction { /** * This function resolves a variable name and the given parsers context to an object. */ @Override -Object apply(final String varName, final GremlinParser.VariableContext variableContext); +T apply(final String varName, final GremlinParser.VariableContext variableContext); /** * This {@link VariableResolver} implementation throws exceptions for all variable names. */ -class NoVariableResolver implements VariableResolver { +class NoVariableResolver implements VariableResolver { private static NoVariableResolver instance = new NoVariableResolver(); public static VariableResolver instance() { @@ -48,12 +49,35 @@ public interface VariableResolver extends BiFunction> { + +private final Map variables; + +public DefaultVariableResolver(final Map variables) { +this.variables = variables; +} + +@Override +public GValue apply(final String s, final GremlinParser.VariableContext variableContext) { +if (!variables.containsKey(s)) { +throw new VariableResolverException(String.format("No
(tinkerpop) branch gvalue created (now 3f9b30f452)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch gvalue in repository https://gitbox.apache.org/repos/asf/tinkerpop.git at 3f9b30f452 wip - parameters This branch includes the following new commits: new 3f9b30f452 wip - parameters The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
(tinkerpop) branch dependabot/nuget/gremlin-dotnet/3.6-dev/System.Text.Json-8.0.4 deleted (was fc1d778071)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch dependabot/nuget/gremlin-dotnet/3.6-dev/System.Text.Json-8.0.4 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git was fc1d778071 Bump System.Text.Json from 8.0.3 to 8.0.4 in /gremlin-dotnet The revisions that were on this branch are still contained in other references; therefore, this change does not discard any commits from the repository.
(tinkerpop) branch 3.6-dev updated (e4d2e72e5a -> fc1d778071)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.6-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from e4d2e72e5a Merge pull request #2622 add fc1d778071 Bump System.Text.Json from 8.0.3 to 8.0.4 in /gremlin-dotnet No new revisions were added by this update. Summary of changes: gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(tinkerpop) branch 3.7-dev updated (746222412a -> a65bcd8761)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 746222412a Update CHANGELOG entry for PR#2673 CTR add fc1d778071 Bump System.Text.Json from 8.0.3 to 8.0.4 in /gremlin-dotnet add a65bcd8761 Merge branch '3.6-dev' into 3.7-dev No new revisions were added by this update. Summary of changes: gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(tinkerpop) 01/02: Merge branch '3.6-dev' into 3.7-dev
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit a65bcd87616828eedf6d4470e40da60e6027f82e Merge: 746222412a fc1d778071 Author: Stephen Mallette AuthorDate: Wed Jul 10 07:50:39 2024 -0400 Merge branch '3.6-dev' into 3.7-dev gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(tinkerpop) branch master updated (38c05d80b8 -> d8089a1d43)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 38c05d80b8 Merge branch '3.7-dev' add fc1d778071 Bump System.Text.Json from 8.0.3 to 8.0.4 in /gremlin-dotnet new a65bcd8761 Merge branch '3.6-dev' into 3.7-dev new d8089a1d43 Merge branch '3.7-dev' The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(tinkerpop) 02/02: Merge branch '3.7-dev'
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit d8089a1d43d8724d046aa7b886186a304b2990cf Merge: 38c05d80b8 a65bcd8761 Author: Stephen Mallette AuthorDate: Wed Jul 10 07:53:52 2024 -0400 Merge branch '3.7-dev' gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(tinkerpop) branch 3.7-dev updated (53f4572e19 -> dc8f203ea3)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch 3.7-dev in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 53f4572e19 Merge branch '3.6-dev' into 3.7-dev add 42a14801fa Not throwing NoSuchElementException when encountering an empty iterator input in local Number operations add e47f360624 Merge branch 'pr-2665' into 3.7-dev add d391ce8c55 TrimGlobalStep handles unicode characters as Ltrim and Rtrim add dc8f203ea3 Merge branch 'pr-2666' into 3.7-dev No new revisions were added by this update. Summary of changes: CHANGELOG.asciidoc | 2 ++ .../traversal/step/map/LTrimGlobalStep.java| 12 ++- .../process/traversal/step/map/LTrimLocalStep.java | 11 +-- .../process/traversal/step/map/MaxLocalStep.java | 23 -- .../process/traversal/step/map/MeanLocalStep.java | 37 -- .../process/traversal/step/map/MinLocalStep.java | 23 -- .../traversal/step/map/RTrimGlobalStep.java| 12 ++- .../process/traversal/step/map/RTrimLocalStep.java | 11 +-- .../process/traversal/step/map/SumLocalStep.java | 32 --- .../process/traversal/step/map/TrimGlobalStep.java | 6 ++-- .../process/traversal/step/map/TrimLocalStep.java | 2 +- .../traversal/step/util/StringLocalStep.java | 21 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 13 ++-- gremlin-go/driver/cucumber/gremlin.go | 13 ++-- .../gremlin-javascript/test/cucumber/gremlin.js| 13 ++-- gremlin-python/src/main/python/radish/gremlin.py | 13 ++-- .../gremlin/test/features/map/LTrim.feature| 20 +++- .../gremlin/test/features/map/Max.feature | 15 + .../gremlin/test/features/map/Mean.feature | 17 +- .../gremlin/test/features/map/Min.feature | 15 + .../gremlin/test/features/map/RTrim.feature| 20 +++- .../gremlin/test/features/map/Sum.feature | 17 +- .../gremlin/test/features/map/Trim.feature | 20 +++- 23 files changed, 261 insertions(+), 107 deletions(-)
(tinkerpop) branch master updated (9592a02587 -> 2b3b743b0d)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 9592a02587 Merge branch '3.7-dev' add 42a14801fa Not throwing NoSuchElementException when encountering an empty iterator input in local Number operations new e47f360624 Merge branch 'pr-2665' into 3.7-dev add d391ce8c55 TrimGlobalStep handles unicode characters as Ltrim and Rtrim new dc8f203ea3 Merge branch 'pr-2666' into 3.7-dev new 2b3b743b0d Merge branch '3.7-dev' The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 2 ++ .../traversal/step/map/LTrimGlobalStep.java| 12 ++- .../process/traversal/step/map/LTrimLocalStep.java | 11 +-- .../process/traversal/step/map/MaxLocalStep.java | 23 -- .../process/traversal/step/map/MeanLocalStep.java | 37 -- .../process/traversal/step/map/MinLocalStep.java | 23 -- .../traversal/step/map/RTrimGlobalStep.java| 12 ++- .../process/traversal/step/map/RTrimLocalStep.java | 11 +-- .../process/traversal/step/map/SumLocalStep.java | 32 --- .../process/traversal/step/map/TrimGlobalStep.java | 6 ++-- .../process/traversal/step/map/TrimLocalStep.java | 2 +- .../traversal/step/util/StringLocalStep.java | 21 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 13 ++-- gremlin-go/driver/cucumber/gremlin.go | 13 ++-- .../gremlin-javascript/test/cucumber/gremlin.js| 13 ++-- gremlin-python/src/main/python/radish/gremlin.py | 13 ++-- .../gremlin/test/features/map/LTrim.feature| 20 +++- .../gremlin/test/features/map/Max.feature | 15 + .../gremlin/test/features/map/Mean.feature | 17 +- .../gremlin/test/features/map/Min.feature | 15 + .../gremlin/test/features/map/RTrim.feature| 20 +++- .../gremlin/test/features/map/Sum.feature | 17 +- .../gremlin/test/features/map/Trim.feature | 20 +++- 23 files changed, 261 insertions(+), 107 deletions(-)
(tinkerpop) 02/03: Merge branch 'pr-2666' into 3.7-dev
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit dc8f203ea3e2e3ad4b21a41db6c2d16dbaad63e2 Merge: e47f360624 d391ce8c55 Author: Stephen Mallette AuthorDate: Fri Jun 28 07:15:41 2024 -0400 Merge branch 'pr-2666' into 3.7-dev CHANGELOG.asciidoc | 1 + .../process/traversal/step/map/LTrimGlobalStep.java | 12 +++- .../process/traversal/step/map/LTrimLocalStep.java | 11 +-- .../process/traversal/step/map/RTrimGlobalStep.java | 12 +++- .../process/traversal/step/map/RTrimLocalStep.java | 11 +-- .../process/traversal/step/map/TrimGlobalStep.java | 6 +++--- .../process/traversal/step/map/TrimLocalStep.java | 2 +- .../traversal/step/util/StringLocalStep.java| 21 + .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 9 ++--- gremlin-go/driver/cucumber/gremlin.go | 9 ++--- .../gremlin-javascript/test/cucumber/gremlin.js | 9 ++--- gremlin-python/src/main/python/radish/gremlin.py| 9 ++--- .../gremlin/test/features/map/LTrim.feature | 20 +++- .../gremlin/test/features/map/RTrim.feature | 20 +++- .../gremlin/test/features/map/Trim.feature | 20 +++- 15 files changed, 115 insertions(+), 57 deletions(-) diff --cc CHANGELOG.asciidoc index a558889161,1930bdfcad..eada449247 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@@ -30,7 -30,7 +30,8 @@@ This release also includes changes fro * Deprecated public constructor for `SeedStrategy` in favor of builder pattern to be consistent with other strategies. * Allow specifying a customized Spark app name * CoinStep has a getter method for its probability field + * Fixed so that TrimGlobalStep and TrimLocalStep have the same character control handling as Ltrim and Rtrim +* Fix a bug in MaxLocalStep, MinLocalStep, MeanLocalStep and SumLocalStep that it throws NoSuchElementException when encounters an empty iterator as input. [[release-3-7-2]] === TinkerPop 3.7.2 (April 8, 2024)
(tinkerpop) 01/03: Merge branch 'pr-2665' into 3.7-dev
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit e47f36062468a2a1f4445a2cc0020b4656542cde Merge: 53f4572e19 42a14801fa Author: Stephen Mallette AuthorDate: Fri Jun 28 06:57:47 2024 -0400 Merge branch 'pr-2665' into 3.7-dev CHANGELOG.asciidoc | 1 + .../process/traversal/step/map/MaxLocalStep.java | 23 -- .../process/traversal/step/map/MeanLocalStep.java | 37 -- .../process/traversal/step/map/MinLocalStep.java | 23 -- .../process/traversal/step/map/SumLocalStep.java | 32 --- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 4 +++ gremlin-go/driver/cucumber/gremlin.go | 4 +++ .../gremlin-javascript/test/cucumber/gremlin.js| 4 +++ gremlin-python/src/main/python/radish/gremlin.py | 4 +++ .../gremlin/test/features/map/Max.feature | 15 + .../gremlin/test/features/map/Mean.feature | 17 +- .../gremlin/test/features/map/Min.feature | 15 + .../gremlin/test/features/map/Sum.feature | 17 +- 13 files changed, 146 insertions(+), 50 deletions(-)
(tinkerpop) branch TINKERPOP-3023 deleted (was 05078b8d47)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch TINKERPOP-3023 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git was 05078b8d47 TINKERPOP-3023 Addeed Set syntax in grammar The revisions that were on this branch are still contained in other references; therefore, this change does not discard any commits from the repository.
(tinkerpop) 01/01: Merge pull request #2662 from apache/TINKERPOP-3023
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit a088008af8183e383a48797e2b47a43abf6635a8 Merge: 93674cd3c0 05078b8d47 Author: Stephen Mallette AuthorDate: Thu Jun 27 10:07:41 2024 -0400 Merge pull request #2662 from apache/TINKERPOP-3023 TINKERPOP-3023 Addeed Set syntax in grammar CHANGELOG.asciidoc | 4 +- .../grammar/DefaultGremlinBaseVisitor.java | 19 +++-- .../language/grammar/GenericLiteralVisitor.java| 13 +++ .../translator/AnonymizedTranslatorVisitor.java| 6 ++ .../translator/DotNetTranslateVisitor.java | 13 +++ .../language/translator/GoTranslateVisitor.java| 14 .../language/translator/JavaTranslateVisitor.java | 15 .../translator/JavascriptTranslateVisitor.java | 13 +++ .../translator/PythonTranslateVisitor.java | 13 +++ .../language/translator/TranslateVisitor.java | 5 ++ .../grammar/GeneralLiteralVisitorTest.java | 96 -- .../language/translator/GremlinTranslatorTest.java | 9 ++ .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 7 +- gremlin-go/driver/cucumber/gremlin.go | 7 +- .../structure/io/binary/internals/AnySerializer.js | 1 + .../structure/io/binary/internals/SetSerializer.js | 29 ++- .../lib/structure/io/type-serializers.ts | 11 +++ .../test/cucumber/feature-steps.js | 5 +- .../gremlin-javascript/test/cucumber/gremlin.js| 7 +- .../graphbinary/ArraySerializerTestTemplate.js | 6 +- .../unit/graphbinary/SetSerializerTestTemplate.js | 31 +-- gremlin-language/src/main/antlr4/Gremlin.g4| 6 ++ gremlin-python/src/main/python/radish/gremlin.py | 7 +- .../test/features/sideEffect/Aggregate.feature | 20 +++-- .../test/features/sideEffect/Inject.feature| 40 - .../gremlin/test/features/sideEffect/Store.feature | 20 +++-- 26 files changed, 368 insertions(+), 49 deletions(-)
(tinkerpop) branch master updated (93674cd3c0 -> a088008af8)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git from 93674cd3c0 Merge branch '3.7-dev' add 05078b8d47 TINKERPOP-3023 Addeed Set syntax in grammar new a088008af8 Merge pull request #2662 from apache/TINKERPOP-3023 The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: CHANGELOG.asciidoc | 4 +- .../grammar/DefaultGremlinBaseVisitor.java | 19 +++-- .../language/grammar/GenericLiteralVisitor.java| 13 +++ .../translator/AnonymizedTranslatorVisitor.java| 6 ++ .../translator/DotNetTranslateVisitor.java | 13 +++ .../language/translator/GoTranslateVisitor.java| 14 .../language/translator/JavaTranslateVisitor.java | 15 .../translator/JavascriptTranslateVisitor.java | 13 +++ .../translator/PythonTranslateVisitor.java | 13 +++ .../language/translator/TranslateVisitor.java | 5 ++ .../grammar/GeneralLiteralVisitorTest.java | 96 -- .../language/translator/GremlinTranslatorTest.java | 9 ++ .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 7 +- gremlin-go/driver/cucumber/gremlin.go | 7 +- .../structure/io/binary/internals/AnySerializer.js | 1 + .../structure/io/binary/internals/SetSerializer.js | 29 ++- .../lib/structure/io/type-serializers.ts | 11 +++ .../test/cucumber/feature-steps.js | 5 +- .../gremlin-javascript/test/cucumber/gremlin.js| 7 +- .../graphbinary/ArraySerializerTestTemplate.js | 6 +- .../unit/graphbinary/SetSerializerTestTemplate.js | 31 +-- gremlin-language/src/main/antlr4/Gremlin.g4| 6 ++ gremlin-python/src/main/python/radish/gremlin.py | 7 +- .../test/features/sideEffect/Aggregate.feature | 20 +++-- .../test/features/sideEffect/Inject.feature| 40 - .../gremlin/test/features/sideEffect/Store.feature | 20 +++-- 26 files changed, 368 insertions(+), 49 deletions(-)
(tinkerpop) branch TINKERPOP-3023 updated (764d323f2a -> 05078b8d47)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch TINKERPOP-3023 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 764d323f2a TINKERPOP-3023 Addeed Set syntax in grammar add 7ff2fdb765 Add latency test to ProfilingApplication add 4a9019d543 Merge pull request #2660 add 93674cd3c0 Merge branch '3.7-dev' add 05078b8d47 TINKERPOP-3023 Addeed Set syntax in grammar This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (764d323f2a) \ N -- N -- N refs/heads/TINKERPOP-3023 (05078b8d47) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. No new revisions were added by this update. Summary of changes: .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 1 + .../gremlin/driver/util/ProfilingApplication.java | 136 - gremlin-go/driver/cucumber/gremlin.go | 1 + .../gremlin-javascript/test/cucumber/gremlin.js| 1 + gremlin-python/src/main/python/radish/gremlin.py | 1 + .../test/features/sideEffect/Inject.feature| 14 ++- 6 files changed, 121 insertions(+), 33 deletions(-)
(tinkerpop) branch TINKERPOP-3023 updated (168dc335b4 -> 764d323f2a)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch TINKERPOP-3023 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard 168dc335b4 TINKERPOP-3023 Addeed Set syntax in grammar add 764d323f2a TINKERPOP-3023 Addeed Set syntax in grammar This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (168dc335b4) \ N -- N -- N refs/heads/TINKERPOP-3023 (764d323f2a) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. No new revisions were added by this update. Summary of changes: .../grammar/DefaultGremlinBaseVisitor.java | 14 - .../language/grammar/GenericLiteralVisitor.java| 2 ++ .../grammar/GeneralLiteralVisitorTest.java | 34 +- 3 files changed, 42 insertions(+), 8 deletions(-)
(tinkerpop) branch TINKERPOP-3023 updated (d84251d2d3 -> 168dc335b4)
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a change to branch TINKERPOP-3023 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git discard d84251d2d3 TINKERPOP-3023 Addeed Set syntax in grammar new 168dc335b4 TINKERPOP-3023 Addeed Set syntax in grammar This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (d84251d2d3) \ N -- N -- N refs/heads/TINKERPOP-3023 (168dc335b4) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omit" are not gone; other references still refer to them. Any revisions marked "discard" are gone forever. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../language/grammar/GeneralLiteralVisitorTest.java | 11 +-- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 2 ++ gremlin-go/driver/cucumber/gremlin.go| 2 ++ .../test/cucumber/feature-steps.js | 5 + .../gremlin-javascript/test/cucumber/gremlin.js | 2 ++ gremlin-python/src/main/python/radish/gremlin.py | 2 ++ .../test/features/sideEffect/Aggregate.feature | 20 +--- .../gremlin/test/features/sideEffect/Store.feature | 20 +--- 8 files changed, 44 insertions(+), 20 deletions(-)
(tinkerpop) 01/01: TINKERPOP-3023 Addeed Set syntax in grammar
This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-3023 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git commit 168dc335b473b17867fb64c196d7243d2f0f421b Author: Stephen Mallette AuthorDate: Fri Jun 21 15:05:07 2024 -0400 TINKERPOP-3023 Addeed Set syntax in grammar Updated translators and serializers as needed. For the latter, particular attention was needed for Javascript where Set was being serialized as array essentially. --- CHANGELOG.asciidoc | 4 +- .../grammar/DefaultGremlinBaseVisitor.java | 7 ++- .../language/grammar/GenericLiteralVisitor.java| 11 .../translator/AnonymizedTranslatorVisitor.java| 6 +++ .../translator/DotNetTranslateVisitor.java | 13 + .../language/translator/GoTranslateVisitor.java| 14 + .../language/translator/JavaTranslateVisitor.java | 15 ++ .../translator/JavascriptTranslateVisitor.java | 13 + .../translator/PythonTranslateVisitor.java | 13 + .../language/translator/TranslateVisitor.java | 5 ++ .../grammar/GeneralLiteralVisitorTest.java | 62 +++--- .../language/translator/GremlinTranslatorTest.java | 9 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 6 ++- gremlin-go/driver/cucumber/gremlin.go | 6 ++- .../structure/io/binary/internals/AnySerializer.js | 1 + .../structure/io/binary/internals/SetSerializer.js | 29 +- .../lib/structure/io/type-serializers.ts | 11 .../test/cucumber/feature-steps.js | 5 +- .../gremlin-javascript/test/cucumber/gremlin.js| 6 ++- .../graphbinary/ArraySerializerTestTemplate.js | 6 +-- .../unit/graphbinary/SetSerializerTestTemplate.js | 31 +-- gremlin-language/src/main/antlr4/Gremlin.g4| 6 +++ gremlin-python/src/main/python/radish/gremlin.py | 6 ++- .../test/features/sideEffect/Aggregate.feature | 20 --- .../test/features/sideEffect/Inject.feature| 28 +- .../gremlin/test/features/sideEffect/Store.feature | 20 --- 26 files changed, 311 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 6a1a0b49b1..32b7e7dfd0 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -33,6 +33,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima * Added `with()` on `AnonymousTraversalSource` to cover both embedded and remote creation options. * Renamed the traversal discarding `none()` step to `discard()`. * Added new list filtering step `none()`. +* Added support for `Set` in GraphSON and GraphBinary serialization for `gremlin-javascript`, where it previously just converted to array. +* Added `Set` syntax in `gremlin-language`. * Removed the deprecated `withGraph()` option from `AnonymousTraversalSource`. * Removed the `gremlin-archetype` module in favor of newer sample applications in each GLV's `examples` folder. * Bumped to `commons-collection4`. @@ -41,7 +43,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima * Modified the Gremlin ANTLR grammar to more dynamically interact with any strategies registered globally to the `TraversalStrategies` cache sets. * Made `new` keyword optional in the Gremlin grammar. * Added TypeScript & ECMAScript module support. -* Improved graph structures type definitions in TypeScript +* Improved graph structures type definitions in TypeScript. == TinkerPop 3.7.0 (Gremfir Master of the Pan Flute) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java index 6682c15bd5..fb5c3d24d4 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java @@ -1728,6 +1728,9 @@ public class DefaultGremlinBaseVisitor extends AbstractParseTreeVisitor im /** * {@inheritDoc} */ - @Override - public T visitTraversalBarrier(final GremlinParser.TraversalBarrierContext ctx) { notImplemented(ctx); return null; } + @Override public T visitTraversalBarrier(final GremlinParser.TraversalBarrierContext ctx) { notImplemented(ctx); return null; } + /** +* {@inheritDoc} +*/ + @Override public T visitGenericLiteralSet(final GremlinParser.GenericLiteralSetContext ctx) { return null; } } \ No newline at end of file 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 c6db0ec1d4..2e0cbbe751 1006