You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@metron.apache.org by cestella <gi...@git.apache.org> on 2017/09/08 20:19:20 UTC

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

GitHub user cestella opened a pull request:

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

    METRON-1168: Add SUBSTRING method to stellar

    ## Contributor Comments
    
    Add `SUBSTRING` function to stellar.
    
    Testing:
    Open up the REPL and play with `SUBSTRING`
    
    ## Pull Request Checklist
    
    Thank you for submitting a contribution to Apache Metron.  
    Please refer to our [Development Guidelines](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=61332235) for the complete guide to follow for contributions.  
    Please refer also to our [Build Verification Guidelines](https://cwiki.apache.org/confluence/display/METRON/Verifying+Builds?show-miniview) for complete smoke testing guides.  
    
    
    In order to streamline the review of the contribution we ask you follow these guidelines and ask you to double check the following:
    
    ### For all changes:
    - [ ] 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). 
    - [ ] 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.
    - [ ] Has your PR been rebased against the latest commit within the target branch (typically master)?
    
    
    ### For code changes:
    - [x] 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?
    - [x] 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)? 
    - [x] 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
      ```
    
    #### Note:
    Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible.
    It is also recommended that [travis-ci](https://travis-ci.org) is set up for your personal repository such that your branches are built there before submitting a pull request.
    


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

    $ git pull https://github.com/cestella/incubator-metron substring

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

    https://github.com/apache/metron/pull/742.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 #742
    
----
commit 93f88f0095bba80edf55f9b808787686f13a76a3
Author: cstella <ce...@gmail.com>
Date:   2017-09-08T20:13:10Z

    Add substring method

commit 10db1804276b32a8a6ed0ddf93c79401dafba829
Author: cstella <ce...@gmail.com>
Date:   2017-09-08T20:17:52Z

    updating readme.

----


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137894087
  
    --- Diff: metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---
    @@ -408,6 +408,19 @@ public void testAppendIfMissing() throws Exception {
     
       }
     
    +  @Test
    +  public void testSubstring() throws Exception {
    +    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
    +    Assert.assertEquals("metron", run("SUBSTRING(s, 7)", variables));
    +    Assert.assertEquals("me", run("SUBSTRING(s, 7, 9)", variables));
    +    Assert.assertNull(run("SUBSTRING(null, 6, 9)", new HashMap<>()));
    --- End diff --
    
    yep


---

[GitHub] metron issue #742: METRON-1168: Add SUBSTRING method to stellar

Posted by justinleet <gi...@git.apache.org>.
Github user justinleet commented on the issue:

    https://github.com/apache/metron/pull/742
  
    +1, thanks a lot for the contribution.  And for catching that we never actually had this


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by ottobackwards <gi...@git.apache.org>.
Github user ottobackwards commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913052
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    +      }
    +      String var = strings.get(0) == null?null: (String) strings.get(0);
    +      Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
    --- End diff --
    
    Type validation?


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

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


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by justinleet <gi...@git.apache.org>.
Github user justinleet commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137883199
  
    --- Diff: metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---
    @@ -408,6 +408,19 @@ public void testAppendIfMissing() throws Exception {
     
       }
     
    +  @Test
    +  public void testSubstring() throws Exception {
    +    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
    +    Assert.assertEquals("metron", run("SUBSTRING(s, 7)", variables));
    +    Assert.assertEquals("me", run("SUBSTRING(s, 7, 9)", variables));
    +    Assert.assertNull(run("SUBSTRING(null, 6, 9)", new HashMap<>()));
    --- End diff --
    
    Can you add a test for start being explicitly null, and another one for end being explicitly null?  I mostly care about start being null, since that's a case not present in Java, given that int can't be null.


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by ottobackwards <gi...@git.apache.org>.
Github user ottobackwards commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137912941
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    +      }
    +      String var = strings.get(0) == null?null: (String) strings.get(0);
    +      Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
    +      Integer end = null;
    +      if(strings.size() > 2) {
    +         end = strings.get(2) == null ? null : (Integer) strings.get(2);
    +      }
    +      if(var == null || start == null) {
    --- End diff --
    
    We are again looking at the behavior with regards to invalid arguments, exception vs default return....   We need some clarification document.  It seems to come up every addition to Stellar


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913498
  
    --- Diff: metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---
    @@ -408,6 +408,23 @@ public void testAppendIfMissing() throws Exception {
     
       }
     
    +  @Test
    +  public void testSubstring() throws Exception {
    +    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
    --- End diff --
    
    Agreed, we should expect an exception in that case.


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913487
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    +      }
    +      String var = strings.get(0) == null?null: (String) strings.get(0);
    +      Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
    +      Integer end = null;
    +      if(strings.size() > 2) {
    +         end = strings.get(2) == null ? null : (Integer) strings.get(2);
    +      }
    +      if(var == null || start == null) {
    --- End diff --
    
    Well, this is consistent throughout stellar functions, if the value is null, we pass back null.  If it's invalid input structurally (i.e. not the correct number of arguments), then an exception is returned.  We should add a little blurb that talks about this in the stellar-common README.md


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913436
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    --- End diff --
    
    Yeah, I was following the leader with `CHOMP`, but I agree, I will correct this in a follow-on JIRA with the rest of your issues covered.


---

[GitHub] metron issue #742: METRON-1168: Add SUBSTRING method to stellar

Posted by ottobackwards <gi...@git.apache.org>.
Github user ottobackwards commented on the issue:

    https://github.com/apache/metron/pull/742
  
    sounds good to me.  Thanks for the contribution!  I'm jealous I didn't think of it first.


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by ottobackwards <gi...@git.apache.org>.
Github user ottobackwards commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913079
  
    --- Diff: metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---
    @@ -408,6 +408,23 @@ public void testAppendIfMissing() throws Exception {
     
       }
     
    +  @Test
    +  public void testSubstring() throws Exception {
    +    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
    --- End diff --
    
    To go with type validation, tests with passing down incorrect types.
    
    like : SUBSTRING(s,'7',9)


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by ottobackwards <gi...@git.apache.org>.
Github user ottobackwards commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137912849
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    --- End diff --
    
    The [] is not consistent with other functions #nit


---

[GitHub] metron pull request #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:

    https://github.com/apache/metron/pull/742#discussion_r137913443
  
    --- Diff: metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---
    @@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
         }
       }
     
    +  @Stellar( name="SUBSTRING"
    +          , description = "Returns a substring of a string"
    +          , params = {
    +                "input - The string to take the substring of",
    +                "start - The starting position (0-based and inclusive)",
    +                "end? - The ending position (0-based and exclusive)"
    +                     }
    +          , returns = "The substring of the input"
    +  )
    +  public static class Substring extends BaseStellarFunction {
    +
    +    @Override
    +    public Object apply(List<Object> strings) {
    +
    +      if(strings == null || strings.size() < 2 ) {
    +        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
    +      }
    +      String var = strings.get(0) == null?null: (String) strings.get(0);
    +      Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
    --- End diff --
    
    Agreed


---

[GitHub] metron issue #742: METRON-1168: Add SUBSTRING method to stellar

Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on the issue:

    https://github.com/apache/metron/pull/742
  
    I am going to create a follow-on PR to this to address your issues.


---