Currently we use a part of Calcite "Bindables" to evaluate expressions at the execution time. Using it we
- lose a control on how expressions are evaluated
- cannot implement several important optimizations, like "keepBinary"
- can use only Object as a row, which causes a lot of array copy operations and unnecessary allocations at the execution time
- suffer from delays, which go from expressions compilation process when it's more efficient to start from interpretation and compile an expression on repeatable execution only
We need to implement expressions interpreter and our own expression compiler taking Ignite specifics in consideration.