Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-346

Runtime generated code should evaluate constant expression once in doSetup method



    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.4.0
    • Component/s: None
    • Labels:


      Currently, when runtime CodeGenerator logic generates class to evaluate an expression, it would put the code in doEval() method, regardless of whether the expression is a constant, or part of the expression is a constant. This means the generated code for the constant expression will be executed once for every record, in stead of once for each record batch.

      For a constant expression, we should put the code in doSetup() method, so that it will be executed once per record batch. Doing so would improve runtime code efficiency.

      In addition, for some function call expression, if the arguments are constant, we may want to refer to the constant arguments in doSetup(). For instance, given function : regexp_replae(input_string, regex, replace), if regex is a constant (eg : regexp_replace(varcharcol, "a[bc]", "XYZ") ), the implementation of regexp_replace would use the constant to build a java.Pattern in doSetup(), and repeatedly use that java.Pattern object in doEval() for each record. This requires CodeGenerator to make the constant arguments accessible to doSetup() method for function call.


        1. Drill_346.4.patch.txt
          51 kB
          Jinfeng Ni
        2. genAdd_constant_Drill-346.java
          2 kB
          Jinfeng Ni
        3. genAdd_constant_master.java
          2 kB
          Jinfeng Ni



            • Assignee:
              jni Jinfeng Ni
              jni Jinfeng Ni
            • Votes:
              0 Vote for this issue
              2 Start watching this issue


              • Created: