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

xiazcy pushed a commit to branch steps-taking-traversal-poc
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 8e87651de4a633c95c943e7238a22e94c663a4e7
Author: Yang Xia <[email protected]>
AuthorDate: Wed May 20 16:39:12 2026 -0700

    use P.eq() semantics instead of P.with() for has(key, traversal)
---
 .../tinkerpop/gremlin/process/traversal/step/filter/HasStep.java | 9 +++++----
 .../tinkerpop/gremlin/test/features/filter/HasTraversal.feature  | 2 --
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
index 07e15f5fd7..65b7eebc89 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStep.java
@@ -110,9 +110,9 @@ public class HasStep<S extends Element> extends 
FilterStep<S> implements HasCont
                 if (hc.getTraversalValue() != null) {
                     final List<Object> results = 
collectTraversalResults(traverser, hc.getTraversalValue());
                     if (results.isEmpty()) return false;
-                    // Get the property value to test against
+                    // Get the property value to test against — takes first 
result, ignores extras
                     final Object propertyValue = 
getPropertyValueFromProperty(property, hc.getKey());
-                    if (!P.within(results).test(propertyValue)) return false;
+                    if (!P.eq(results.get(0)).test(propertyValue)) return 
false;
                 } else if (hc.getPredicate() != null && 
hc.getPredicate().hasTraversal()) {
                     hc.getPredicate().resolve(traverser);
                     if (hc.getPredicate().isResolvedEmpty()) return false;
@@ -133,12 +133,13 @@ public class HasStep<S extends Element> extends 
FilterStep<S> implements HasCont
     private boolean testHasContainer(final Traverser.Admin<S> traverser, final 
HasContainer hc, final Element element) {
         if (hc.hasTraversal()) {
             if (hc.getTraversalValue() != null) {
-                // Direct traversal value: evaluate and use P.within(results)
+                // Direct traversal value: evaluate and use P.eq(first result) 
— takes first, ignores extras
+                // Consistent with by(traversal) which also takes the first 
result silently.
                 final List<Object> results = 
collectTraversalResults(traverser, hc.getTraversalValue());
                 if (results.isEmpty()) return false;
                 final Object propertyValue = getPropertyValue(element, 
hc.getKey());
                 if (propertyValue == null) return false;
-                return P.within(results).test(propertyValue);
+                return P.eq(results.get(0)).test(propertyValue);
             } else if (hc.getPredicate() != null && 
hc.getPredicate().hasTraversal()) {
                 // Predicate with embedded traversal: resolve then test 
normally
                 hc.getPredicate().resolve(traverser);
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature
index a0fb83ae23..3f2f924af2 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature
@@ -43,7 +43,6 @@ Feature: Step - has() with traversal arguments
     Then the result should be unordered
       | result |
       | v[vadas] |
-      | v[josh] |
 
   @GraphComputerVerificationMidVNotSupported
   Scenario: g_V_hasXage_VXvid1X_outXknowsX_valuesXageXX
@@ -57,7 +56,6 @@ Feature: Step - has() with traversal arguments
     Then the result should be unordered
       | result |
       | v[vadas] |
-      | v[josh] |
 
   @GraphComputerVerificationMidVNotSupported
   Scenario: g_V_hasXname_VXvid1X_valuesXnonexistentXX

Reply via email to