GitHub user ottobackwards opened a pull request:

    https://github.com/apache/metron/pull/814

    METRON-1277 Add match statement to Stellar language 

    as discussed on the dev list:  [Stellar support for switch/case style 
conditionals](http://mail-archives.apache.org/mod_mbox/metron-dev/201710.mbox/%3ccappqhk0j4bpvmppznqpzeu2jtbuxhw8yheng0lmbbl_vw+x...@mail.gmail.com%3e)
    
    This PR adds 'match' capability to the stellar language.  This is very 
similar to the Scala match feature.
    
    FROM THE README: 
    ### Stellar Language Match Expression
    
    Stellar provides the capability to write match expressions, which are 
similar to switch statements commonly found in c like languages, but more like
    Scala's match.
    
    The syntax is:
    * `match{ logical_expression1 : {evaluation expression1}, 
logical_expression2 : {evaluation_expression2}` : A match expression with no 
default
    * `match{ logical_expression1 : {evaluation expression1}, 
logical_expression2 : {evaluation_expression2}, default : default_expression}` 
: A match expression with a default expression
    
    Where:
    
    * `logical_expression` is a Stellar expression that evaluates to true or 
false.  For instance `var > 0` or `var > 0 AND var2 == 'foo'`
    * `evaluation_expression` is any Stellar Expression 
    
    > Currently the MAP() function is not supported
    
    > Lambda expressions are supported, but they must be no argument lambdas 
such as `() -> STATEMENT`
    
    * Only the first clause that evaluates to true will be executed.
    * The match must return some value.  In other words, a default should be 
provided unless the logical_expressions are posed such that
    one will always evaluate to true.  Failure to do this will result in an 
error.
    
    
    ## Review items
    
    * more test cases
    * help with issue with MAP() function
    * correctness of short circuit / grammar
    
    
    This PR does not
    * add the aliasing of long variables
    * support variable arg lambda
    * work with the MAP() function as an evaluation clause
    
    
    ## Testing
    
    from the Stellar shell execute various statements involving match such as: 
    
    ```bash
    ttofowler@Winterfell [13:01:16] 
[~/src/apache/forks/metron/metron-stellar/stellar-common] [stellar_match]
    -> % mvn exec:java \
       -Dexec.mainClass="org.apache.metron.stellar.common.shell.StellarShell" 
-Dexec.args="-l src/test/resources/log4j.properties"
    [INFO] Scanning for projects...
    [INFO]
    [INFO] 
------------------------------------------------------------------------
    [INFO] Building stellar-common 0.4.1
    [INFO] 
------------------------------------------------------------------------
    [INFO]
    [INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ stellar-common ---
    Stellar, Go!
    Please note that functions are loading lazily in the background and will be 
unavailable until loaded fully.
    [Stellar]>>> Functions loaded, you may refer to functions now...
    [Stellar]>>> foo := 1
    [Stellar]>>> match{foo == 1 : TO_UPPER('ok')}
    OK
    [Stellar]>>>
    ```
    
    
    
    ### For all changes:
    - [x] Is there a JIRA ticket associated with this PR? If not one needs to 
be created at [Metron 
Jira](https://issues.apache.org/jira/browse/METRON/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel).
 
    - [x] Does your PR title start with METRON-XXXX where XXXX is the JIRA 
number you are trying to resolve? Pay particular attention to the hyphen "-" 
character.
    - [x] Has your PR been rebased against the latest commit within the target 
branch (typically master)?
    
    
    ### For code changes:
    - [ ] Have you included steps to reproduce the behavior or problem that is 
being changed or addressed?
    - [x] Have you included steps or a guide to how the change may be verified 
and tested manually?
    - [x] Have you ensured that the full suite of tests and checks have been 
executed in the root metron folder via:
      ```
      mvn -q clean integration-test install && build_utils/verify_licenses.sh 
      ```
    
    - [x] Have you written or updated unit tests and or integration tests to 
verify your changes?
    - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)? 
    - [ ] Have you verified the basic functionality of the build by building 
and running locally with Vagrant full-dev environment or the equivalent?
    
    ### For documentation related changes:
    - [x] Have you ensured that format looks appropriate for the output in 
which it is rendered by building and verifying the site-book? If not then run 
the following commands and the verify changes via 
`site-book/target/site/index.html`:
    
      ```
      cd site-book
      mvn site
      ```


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ottobackwards/metron stellar_match

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/metron/pull/814.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #814
    
----

----


---

Reply via email to