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?