Hi,

Spent a bunch of time researching and staring at code today to understand
the code compilation path within Calcite. I started down this path because
we noticed whenever we changed the `startDate` or `endDate` for the query
it went through compilation process again. We expected it to use the
previous classes `bind` it with the new RexLiterals. I was *hoping*  the
RexLiterals were passed into the `bind()` method but that does not appear
to be the main goal of `DataContext` objects.

We also found the trick Kylin did to improve their query compilation with
prepared statements:
https://issues.apache.org/jira/browse/KYLIN-3434 but PreparedStatement is
stateful and I don't believe a good way to solve this issue.

I would like to propose a change to Calcite so that Filters are passed into
the `bind()` call alongside or within DataContext. This would allow the
`EnumerableRel` implementations to reference the `Filters` as arguments.
This -- I believe -- would cause any change to the filters to use
the previously compiled class instead of generating a brand new one.

I am emailing everyone on this list for two reasons:
1. Is this a bad idea ?
2. I don't have a design yet so would love any ideas. Should we stick more
stuff into `DataContext`? Should `EnumerableRel` have another method that
is used to gather these RexLiterals?

Reply via email to