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

ASF GitHub Bot commented on METRON-980:
---------------------------------------

Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/606#discussion_r119838484
  
    --- Diff: 
metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java
 ---
    @@ -634,6 +679,40 @@ public void testLogicalFunctions() throws Exception {
         Assert.assertTrue(runPredicate("not(IN_SUBNET(ip_dst_addr, 
'192.168.0.0/24'))", v-> variableMap.get(v)));
       }
     
    +  @Test
    +  public void testShortCircuit_conditional() throws Exception {
    +    Assert.assertEquals("foo", run("if true then 'foo' else 
THROW('expression')", new HashMap<>()));
    +    Assert.assertEquals("foo", run("true ? 'foo' : THROW('expression')", 
new HashMap<>()));
    +    Assert.assertEquals("foo", run("if false then THROW('exception') else 
'foo'", new HashMap<>()));
    +    Assert.assertEquals("foo", run("false ? THROW('exception') : 'foo'", 
new HashMap<>()));
    +    Assert.assertEquals(true, run("RET_TRUE(if true then 'foo' else 
THROW('expression'))", new HashMap<>()));
    +    Assert.assertEquals("foo", run("if true or (true or THROW('if 
exception')) then 'foo' else THROW('expression')", new HashMap<>()));
    +    Assert.assertEquals("foo", run("if true or (false or THROW('if 
exception')) then 'foo' else THROW('expression')", new HashMap<>()));
    +    Assert.assertEquals("foo", run("if NOT(true or (false or THROW('if 
exception'))) then THROW('expression') else 'foo'", new HashMap<>()));
    +    Assert.assertEquals("foo", run("if NOT('metron' in [ 'metron', 
'metronicus'] ) then THROW('expression') else 'foo'", new HashMap<>()));
    +  }
    +
    +  @Test
    +  public void testShortCircuit_boolean() throws Exception {
    +    Assert.assertTrue(runPredicate("'metron' in ['metron', 'metronicus', 
'mortron'] or (true or THROW('exception'))", x -> null));
    --- End diff --
    
    Isn't that too many closing parens after the throw?


> Short circuit operations for Stellar
> ------------------------------------
>
>                 Key: METRON-980
>                 URL: https://issues.apache.org/jira/browse/METRON-980
>             Project: Metron
>          Issue Type: Improvement
>            Reporter: Casey Stella
>            Assignee: Casey Stella
>
> Stellar does not currently contain short circuit operations.  In most 
> languages, this is an important optimization, but for Stellar on Metron, this 
> is a requirement due to the fact that some variables may be null legitimately 
> and we cannot create multi-line conditionals or temporary variables at the 
> moment.
> The short circuit operations supported:
> * short circuited `or` (e.g. true or FUNC(...) would never execute FUNC)
> * short circuited `and` (e.g. false and FUNC(...) would never execute FUNC)
> * short circuited if/then/else (e.g. if true then FUNC(...) else FUNC2(...) 
> will never call FUNC2)



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to