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

Runtime generated code should evaluate constant expression once in doSetup method

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 0.4.0
    • None
    • None

    Description

      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.

      Attachments

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

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: