EvalNode just has eval() method to evaluate some tuples. It does not have any method to prepare actual execution.
For example, FieldEval should know an actual field index of an input tuple. This process is also performed in eval() method.
It has some problems:
- eval() method should involve two works, and it does different behavior with some flag or null check.
- 'if condition' in eval() method for different behaviors involves unnecessary branches, causing performance degradation.
So, we should add bind(Schema) method to EvalNode and then move some preparation code from eval() to bind(Schame) method.
Also, we should refactor the signature eval(Schema, Tuple) to eval(Tuple).