This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch comparator-fix
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 637d84535aa37a6f0ffd16d626e406e19c57341c
Author: Stephen Mallette <[email protected]>
AuthorDate: Tue Feb 10 17:03:47 2026 +0000

    Fixed issue with Gremlin semantics around comparability
    
    Allowed different size collections to be comparable.
---
 CHANGELOG.asciidoc                                         |  3 ++-
 .../tinkerpop/gremlin/util/GremlinValueComparator.java     |  3 ---
 .../tinkerpop/gremlin/process/traversal/CompareTest.java   | 14 ++++++++++++++
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 22f3c2218f..e82b21c3b5 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 This release also includes changes from <<release-3-7-6, 3.7.6>>.
 
 * Fixed bug in pre-repeat() `emit()/until()` where `emit()` and `until()` 
traversers weren't added to the results.
+* Fixed bug in `GremlinValueComparator` that prevented collections of 
differing sizes from being comparable.
 * Expose serialization functions for alternative transport protocols in 
gremlin-go
 * Improved Gremlint formatting to keep the first argument for a step on the 
same line if line breaks were required to meet max line length.
 * Improved Gremlint formatting to do greedy argument packing when possible so 
that more arguments can appear on a single line.
@@ -35,7 +36,7 @@ This release also includes changes from <<release-3-7-6, 
3.7.6>>.
 
 This release also includes changes from <<release-3-7-5, 3.7.5>>.
 
-* Added a Gremln MCP server.
+* Added a Gremlin MCP server.
 * Added the Air Routes 1.0 dataset to the set of available samples packaged 
with distributions.
 * Added a minimal distribution for `tinkergraph-gremlin` using the `min` 
classifier that doesn't include the sample datasets.
 * Removed `AggregateLocalStep` and `aggregate(Scope, String)`, and renamed 
`AggregateGlobalStep` to `AggregateStep`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/GremlinValueComparator.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/GremlinValueComparator.java
index 2f6e374d24..5d98d6e8ad 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/GremlinValueComparator.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/GremlinValueComparator.java
@@ -370,9 +370,6 @@ public abstract class GremlinValueComparator implements 
Comparator<Object> {
                 return false;
             }
         }
-        if (fi.hasNext() || si.hasNext()) {
-            return false;
-        }
         return true;
     }
 
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
index 38633df8cd..280544cf0b 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
@@ -249,6 +249,20 @@ public class CompareTest {
                 {Compare.gt, asMap(1.0, "foo", 2.0, "bar"), asMap(2, "bar", 1, 
"foo"), false},
                 {Compare.gte, asMap(1.0, "foo", 2.0, "bar"), asMap(2, "bar", 
1, "foo"), true},
 
+                // Lists of different sizes should be comparable and sort 
lexicographically
+                {Compare.lt, asList(1, 2, 3), asList(1, 2, 3, 4), true},
+                {Compare.gt, asList(1, 2, 3), asList(1, 2, 3, 4), false},
+                {Compare.lt, asList(1, 2, 4), asList(1, 2, 3, 4), false},
+                {Compare.gt, asList(1, 2, 4), asList(1, 2, 3, 4), true},
+
+                // Sets compare by sorted contents; different sizes remain 
comparable
+                {Compare.lt, asSet(1, 2, 3), asSet(1, 2, 3, 4), true},
+                {Compare.gt, asSet(1, 2, 4), asSet(1, 2, 3, 4), true},
+
+                // Maps compare by sorted entry-set; different sizes remain 
comparable
+                {Compare.lt, asMap(1, 1, 2, 2, 3, 3), asMap(1, 1, 2, 2, 3, 3, 
4, 4), true},
+                {Compare.gt, asMap(1, 1, 2, 2, 3, 3, 4, 4), asMap(1, 1, 2, 2, 
3, 3), true},
+
         }));
         // Compare Numbers of mixed types.
         final List<Object> one = Arrays.asList(1, 1l, 1d, 1f, BigDecimal.ONE, 
BigInteger.ONE);

Reply via email to