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

    https://github.com/apache/drill/pull/1001#discussion_r146708658
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/SqlPatternContainsMatcher.java
 ---
    @@ -17,37 +17,166 @@
      */
     package org.apache.drill.exec.expr.fn.impl;
     
    -public class SqlPatternContainsMatcher implements SqlPatternMatcher {
    +public final class SqlPatternContainsMatcher implements SqlPatternMatcher {
       final String patternString;
       CharSequence charSequenceWrapper;
       final int patternLength;
    +  final MatcherFcn matcherFcn;
     
       public SqlPatternContainsMatcher(String patternString, CharSequence 
charSequenceWrapper) {
    -    this.patternString = patternString;
    +    this.patternString       = patternString;
         this.charSequenceWrapper = charSequenceWrapper;
    -    patternLength = patternString.length();
    +    patternLength            = patternString.length();
    +
    +    // The idea is to write loops with simple condition checks to allow 
the Java Hotspot achieve
    +    // better optimizations (especially vectorization)
    +    if (patternLength == 1) {
    +      matcherFcn = new Matcher1();
    --- End diff --
    
    Padma, I have two reasons to follow the added complexity
    1) The new code is encapsulated within the Contains matching logic; doesn't 
increase code complexity
    2) 
    o I created a test with the original match logic, pattern and input were 
Strings though passed as CharSequence
    o Ran the test with the new and old method (1 billion iterations) on MacOS
    o pattern length 
    o The old match method performed in 43sec where as the new one performed in 
15sec
    o The reason for the speedup is the custom matcher functions have less 
instructions (load and comparison)


---

Reply via email to