This is an automated email from the ASF dual-hosted git repository.
colegreer 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 e9540e3514 [TINKERPOP-3236] Expand grammar argument types for coin and
pagerank steps to numericArgument (#3331)
e9540e3514 is described below
commit e9540e35145672cecfe2062c0d6ac7edc23bd839
Author: Cole Greer <[email protected]>
AuthorDate: Mon Mar 23 16:55:53 2026 -0700
[TINKERPOP-3236] Expand grammar argument types for coin and pagerank steps
to numericArgument (#3331)
Expanding the grammar to allow any numeric arguments in coin() and
pagerank() to better match groovy and other language variants.
---
CHANGELOG.asciidoc | 1 +
.../gremlin/language/grammar/ArgumentVisitor.java | 10 +++++-----
.../language/grammar/DefaultGremlinBaseVisitor.java | 2 +-
.../language/grammar/GenericLiteralVisitor.java | 4 ++--
.../language/grammar/TraversalMethodVisitor.java | 4 ++--
.../gremlin/language/grammar/ArgumentVisitorTest.java | 2 +-
gremlin-language/src/main/antlr4/Gremlin.g4 | 8 ++++----
.../gremlin/test/features/filter/Coin.feature | 18 +++++++++++++++++-
8 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 26c33cbc84..f1ff7a13f8 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -30,6 +30,7 @@
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Fixed bug in `SubgraphStrategy` where specifying `edges` and `vertices`
filters that had `map`-type steps could generate an error.
* Fixed bug in `ReservedKeysVerificationStrategy` where `AddPropertyStep` was
not triggering proper validations.
* Fixed bug in `mergeE` where `onCreate` validation of invalid static argument
overrides did not trigger until traversal runtime.
+* Expand grammar argument types for `coin` and `pagerank` steps to
`numericArgument` from `floatArgument`.
* Added `closeSessionPostGraphOp` to the Gremlin Server settings to indicate
that the `Session` should be closed on either a successful commit or rollback.
* Added `SessionedChildClient` that borrows connections from a different
`Client` for use with `Sessions`.
* Added `reuseConnectionsForSessions` to Java GLV settings to decide whether
to use `SessionedChildClient` for remote transactions.
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
index a461896fa7..9b7212c638 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
@@ -66,8 +66,8 @@ public class ArgumentVisitor extends
DefaultGremlinBaseVisitor<Object> {
/**
* Wrapper to visit function for float types.
*/
- public Number parseNumber(final GremlinParser.FloatArgumentContext ctx) {
- return (Number) visitFloatArgument(ctx);
+ public Number parseNumber(final GremlinParser.NumericArgumentContext ctx) {
+ return (Number) visitNumericArgument(ctx);
}
/**
@@ -240,9 +240,9 @@ public class ArgumentVisitor extends
DefaultGremlinBaseVisitor<Object> {
}
@Override
- public Object visitFloatArgument(final GremlinParser.FloatArgumentContext
ctx) {
- if (ctx.floatLiteral() != null) {
- return antlr.genericVisitor.parseFloating(ctx.floatLiteral());
+ public Object visitNumericArgument(final
GremlinParser.NumericArgumentContext ctx) {
+ if (ctx.numericLiteral() != null) {
+ return antlr.genericVisitor.parseNumeric(ctx.numericLiteral());
} else {
return visitVariable(ctx.variable());
}
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 c0432ddd83..3582444ab6 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
@@ -1462,7 +1462,7 @@ public class DefaultGremlinBaseVisitor<T> extends
AbstractParseTreeVisitor<T> im
/**
* {@inheritDoc}
*/
- @Override public T visitFloatArgument(final
GremlinParser.FloatArgumentContext ctx) { notImplemented(ctx); return null; }
+ @Override public T visitNumericArgument(final
GremlinParser.NumericArgumentContext ctx) { notImplemented(ctx); return null; }
/**
* {@inheritDoc}
*/
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 d7f87f298a..a4d5a8b641 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
@@ -63,8 +63,8 @@ public class GenericLiteralVisitor extends
DefaultGremlinBaseVisitor<Object> {
/**
* Parse floating literal context and return a floating type number.
*/
- public Number parseFloating(final GremlinParser.FloatLiteralContext
floatLiteral) {
- return (Number) visitFloatLiteral(floatLiteral);
+ public Number parseNumeric(final GremlinParser.NumericLiteralContext
numericLiteral) {
+ return (Number) visitNumericLiteral(numericLiteral);
}
/**
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 6dcafe2e65..222af839e3 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
@@ -443,7 +443,7 @@ public class TraversalMethodVisitor extends
TraversalRootVisitor<GraphTraversal>
*/
@Override
public GraphTraversal visitTraversalMethod_coin(final
GremlinParser.TraversalMethod_coinContext ctx) {
- return graphTraversal.coin(((Number)
antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument())).doubleValue());
+ return graphTraversal.coin(((Number)
antlr.argumentVisitor.visitNumericArgument(ctx.numericArgument())).doubleValue());
}
/**
@@ -1228,7 +1228,7 @@ public class TraversalMethodVisitor extends
TraversalRootVisitor<GraphTraversal>
*/
@Override
public GraphTraversal visitTraversalMethod_pageRank_double(final
GremlinParser.TraversalMethod_pageRank_doubleContext ctx) {
- return graphTraversal.pageRank(((Number)
antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument())).doubleValue());
+ return graphTraversal.pageRank(((Number)
antlr.argumentVisitor.visitNumericArgument(ctx.numericArgument())).doubleValue());
}
/**
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
index 8c2472eebc..4c64c1804d 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
@@ -178,7 +178,7 @@ public class ArgumentVisitorTest {
});
} else if (clazz.equals(Float.class)) {
assertParsing(() -> {
- final GremlinParser.FloatArgumentContext ctx =
parser.floatArgument();
+ final GremlinParser.NumericArgumentContext ctx =
parser.numericArgument();
return antlrToLanguage.argumentVisitor.parseNumber(ctx);
});
} else if (clazz.equals(String.class)) {
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4
b/gremlin-language/src/main/antlr4/Gremlin.g4
index 35a4b934e0..0b7a224790 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -409,7 +409,7 @@ traversalMethod_coalesce
;
traversalMethod_coin
- : 'coin' LPAREN floatArgument RPAREN
+ : 'coin' LPAREN numericArgument RPAREN
;
traversalMethod_combine
@@ -668,7 +668,7 @@ traversalMethod_outV
traversalMethod_pageRank
: 'pageRank' LPAREN RPAREN #traversalMethod_pageRank_Empty
- | 'pageRank' LPAREN floatArgument RPAREN #traversalMethod_pageRank_double
+ | 'pageRank' LPAREN numericArgument RPAREN #traversalMethod_pageRank_double
;
traversalMethod_path
@@ -1486,8 +1486,8 @@ integerArgument
| variable
;
-floatArgument
- : floatLiteral
+numericArgument
+ : numericLiteral
| variable
;
diff --git
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
index 9bb65dc517..145b94a426 100644
---
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
+++
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
@@ -18,7 +18,7 @@
@StepClassFilter @StepCoin
Feature: Step - coin()
- Scenario: g_V_coinX1X
+ Scenario: g_V_coinX1_0X
Given the modern graph
And the traversal of
"""
@@ -34,6 +34,22 @@ Feature: Step - coin()
| v[ripple] |
| v[peter] |
+ Scenario: g_V_coinX1X
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().coin(1)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
+
Scenario: g_V_coinX0X
Given the modern graph
And the traversal of