Jinfeng Ni created DRILL-346:
--------------------------------
Summary: Runtime generated code should evaluate constant
expression once in doSetup method
Key: DRILL-346
URL: https://issues.apache.org/jira/browse/DRILL-346
Project: Apache Drill
Issue Type: Bug
Reporter: Jinfeng Ni
Assignee: Jinfeng Ni
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.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)