[ 
https://issues.apache.org/jira/browse/TINKERPOP-1312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15301361#comment-15301361
 ] 

ASF GitHub Bot commented on TINKERPOP-1312:
-------------------------------------------

Github user okram commented on the pull request:

    
https://github.com/apache/incubator-tinkerpop/pull/320#issuecomment-221764771
  
    Can you add some more complex tests? For instance:
    
    ```
    out().count().is(0).as("a")
    ```
    
    Also, `RangeByIsCountStrategy` doesn't have `applyPrior()` of 
`AdjacentToIncidentStrategy`. Does that matter? That is:
    
    ```
    out().count().is(0) ->
    outE().count().is(0) ->
    not(outE())
    ```
    
    We want `not(outE())` NOT `not(out())`. Can you verify that such 
compilations happen?
    
    Also, why do you make a distinction between computer and standard engines 
for this strategy?
    
    I think you should copy that pattern in the other strategy tests that 
ensure proper `__()` compilations. We can go crazy on adding patterns to make 
sure compilations are as expected. E.g.:
    
    ```
      @Parameterized.Parameters(name = "{0}")
        public static Iterable<Object[]> generateTestParameters() {
    
            return Arrays.asList(new Traversal[][]{
                    {__.outE().count(), __.outE().count()},
                    {__.bothE("knows").count(), __.bothE("knows").count()},
                    {__.properties().count(), __.properties().count()},
                    {__.properties("name").count(), 
__.properties("name").count()},
                    {__.out().count(), __.outE().count()},
                    {__.in().count(), __.inE().count()},
                    {__.both().count(), __.bothE().count()},
                    {__.out("knows").count(), __.outE("knows").count()},
                    {__.out("knows", "likes").count(), __.outE("knows", 
"likes").count()},
                    {__.filter(__.out()), __.filter(__.outE())},
                    {__.where(__.not(__.out())), __.where(__.not(__.outE()))},
                    {__.where(__.out("knows")), __.where(__.outE("knows"))},
                    {__.values().count(), __.properties().count()},
                    {__.values("name").count(), __.properties("name").count()},
                    {__.where(__.values()), __.where(__.properties())},
                    {__.and(__.out(), __.in()), __.and(__.outE(), __.inE())},
                    {__.or(__.out(), __.in()), __.or(__.outE(), __.inE())},
                    {__.out().as("a").count(), __.outE().count()},   // TODO: 
is this good?
                    {__.where(__.as("a").out("knows").as("b")), 
__.where(__.as("a").out("knows").as("b"))}});
        }
    ```
    



> .count().is(0) is not properly optimized
> ----------------------------------------
>
>                 Key: TINKERPOP-1312
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1312
>             Project: TinkerPop
>          Issue Type: Improvement
>    Affects Versions: 3.2.0-incubating, 3.1.2-incubating
>            Reporter: Daniel Kuppitz
>            Assignee: Daniel Kuppitz
>             Fix For: 3.1.3, 3.2.1
>
>
> {{bla.count().is(0)}} gets optimized by {{RangeByIsCountStrategy}}, which 
> replaces it with {{bla.limit(1).count().is(0)}}. That's good, but we can do 
> even better by replacing it with {{__.not(bla)}}, which is a simple 
> {{.hasNext()}} instead of a {{RangeStep}} followed by a 
> {{ReducingBarrierStep}} ({{count()}}).
> Question is: should we do the replacement in {{RangeByIsCountStrategy}}? The 
> strategy will recognize the pattern, no matter if we use it for the 
> replacement or not; it's just that the strategy name is then no longer in 
> line with the the actual replacement (for this particular {{.count().is(0)}} 
> case) as it won't inject a {{RangeStep}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to