I'm working on pushing down filtering. In my own Filter rel impl, I see 
`condition` is represented as a RexCall, with the appropriate operations and 
operands.

e.g. where id = 1 AND (photoCount > 0 OR quantity > 0) builds up a RexCall tree 
with AND as the root op.

To implement filtering, I need a method like:
def passesFilter(expr: RexCall, fields: Map[String, Any]): Boolean

As I scan my table, I'd check passesFilter for each row, passing in a Map with 
keys id, photoCount and quantity in this case.

In reality, I'd probably use a translator (implements RexVisitorImpl) to turn 
the RexCall into a data structure that's easier to work with in Scala. However, 
looking through Calcite source, I see some things like RexExecutor, which led 
me to wonder:

Is there anything in Calcite that can help me define `passesFilter` without me 
having to manually walk an expression tree and evaluate the conditions? The 
built-in Filter implementation must be doing this already, but I'm not sure how 
or if I can reuse that.

Thanks,
Trevor

Reply via email to