[ 
https://issues.apache.org/jira/browse/TINKERPOP-3058?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jan updated TINKERPOP-3058:
---------------------------
    Description: 
Implementing our own 
[GremlinDSL|https://tinkerpop.apache.org/docs/current/reference/#gremlin-java-dsl]
 we encounter a `StackoverFlowError` as soon as we use `or` in the @GremlinDsl 
interface.

The same condition works fine if defined directly in the query.
It also works as soon as we remove the or from the condition.
{code:java}
@GremlinDsl(traversalSource = "com.corp.foo.gremlin.CustomGraphTraversalSource")
public interface CustomTraversalDsl<S, E> extends GraphTraversal.Admin<S, E> {

    default GraphTraversal<S, Vertex> outWithOr() {
        return out()
            .or(
                has("key"),
                has("key", false)
            );
    }

    default GraphTraversal<S, Vertex> outWithoutOr() {
        return out()
            .has("key")
            .has("key", false);
    }
}

g.V().where(outWithoutOr()).next(); -> works fine 

g.V().where(out().or(has("key"), has("key", false))).next() -> works fine

g.V().where(outWithOr()).next(); -> 

java.lang.StackOverflowError
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.hasStepOfAssignableClass(TraversalHelper.java:349)
        at 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy.apply(ConnectiveStrategy.java:63)
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:503)
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:491){code}
 

  was:
Implementing our own 
[GremlinDSL|https://tinkerpop.apache.org/docs/current/reference/#gremlin-java-dsl]
 we encounter a `StackoverFlowError` as soon as we use `or` in the @GremlinDsl 
interface.

The same condition works fine if defined directly in the query.
It also works as soon as we remove the or from the condition.
{code:java}
@GremlinDsl(traversalSource = "com.corp.foo.gremlin.CustomGraphTraversalSource")
public interface CustomTraversalDsl<S, E> extends GraphTraversal.Admin<S, E> {

    default GraphTraversal<S, Vertex> outWithOr() {
        return out()
            .or(
                has("key"),
                has("key", false)
            );
    }

    default GraphTraversal<S, Vertex> outWithoutOr() {
        return out()
            .has("key")
            .has("key", false);
    }
}

g.V().where(outWithoutOr()).next(); -> works fine 
g.V().where(out().or(has("key"), has("key", false))).next() -> works fine

g.V().where(outWithOr()).next(); -> 

java.lang.StackOverflowError
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.hasStepOfAssignableClass(TraversalHelper.java:349)
        at 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy.apply(ConnectiveStrategy.java:63)
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:503)
        at 
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:491){code}
 


> StackOverFlowError when using `or` in Custom Gremlin DSL
> --------------------------------------------------------
>
>                 Key: TINKERPOP-3058
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-3058
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: tinkergraph
>    Affects Versions: 3.6.4
>            Reporter: Jan
>            Priority: Major
>
> Implementing our own 
> [GremlinDSL|https://tinkerpop.apache.org/docs/current/reference/#gremlin-java-dsl]
>  we encounter a `StackoverFlowError` as soon as we use `or` in the 
> @GremlinDsl interface.
> The same condition works fine if defined directly in the query.
> It also works as soon as we remove the or from the condition.
> {code:java}
> @GremlinDsl(traversalSource = 
> "com.corp.foo.gremlin.CustomGraphTraversalSource")
> public interface CustomTraversalDsl<S, E> extends GraphTraversal.Admin<S, E> {
>     default GraphTraversal<S, Vertex> outWithOr() {
>         return out()
>             .or(
>                 has("key"),
>                 has("key", false)
>             );
>     }
>     default GraphTraversal<S, Vertex> outWithoutOr() {
>         return out()
>             .has("key")
>             .has("key", false);
>     }
> }
> g.V().where(outWithoutOr()).next(); -> works fine 
> g.V().where(out().or(has("key"), has("key", false))).next() -> works fine
> g.V().where(outWithOr()).next(); -> 
> java.lang.StackOverflowError
>       at 
> org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.hasStepOfAssignableClass(TraversalHelper.java:349)
>       at 
> org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy.apply(ConnectiveStrategy.java:63)
>       at 
> org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:503)
>       at 
> org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.applyTraversalRecursively(TraversalHelper.java:491){code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to