Excellent point Julian, and thank you for the swift reply. We'll keep tinkering in this space to see what we can find.
Thank you, Austin On Fri, 4 Oct 2024 at 00:47, Julian Hyde <jh...@apache.org> wrote: > No, that would not be acceptable. EnumerableInterpretable#getBindable > is a package-protected method with no javadoc or tests. If you "relax" > the visibility modifier it becomes a public API and Calcite committers > are responsible for maintaining its behavior in perpetuity. > > You need to come up with a better proposal that is a net benefit to > Calcite. > > > On Thu, Oct 3, 2024 at 5:54 AM Austin Richardson > <austin.richard...@teampicnic.com.invalid> wrote: > > > > Hi Stamatis, > > > > Thank you for the reply. > > > > For some additional context: we're experimenting with this > > (de)serialisation because we're interested in storing optimised query > plans > > in a distributed cache. Another idea we're exploring is caching the > > generated source code for those query plans, and then compiling it > > as-needed later. If possible, we'd like to re-use the Calcite code > > responsible for this, though we'd need to relax the visibility modifier > of > > EnumerableInterpretable#getBindable > > < > https://github.com/apache/calcite/blob/b1308feff49c8b747b3bbb52e1519d334bc984ec/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpretable.java#L134 > > > > from > > package-private to public so it'd be invokable from our code. > > > > Do you have any thoughts on whether that'd be acceptable? > > > > Thank you, > > Austin > > > > On Tue, 1 Oct 2024 at 09:10, Stamatis Zampetakis <zabe...@gmail.com> > wrote: > > > > > Hey Austin, > > > > > > Indeed the most popular serialization/deserialization method for query > > > plans is by using the RelJsonReader and RelJsonWriter. However, we are > > > lacking a bit of test coverage around this feature so when new > > > RelNodes are added it's easy to miss the required changes. Moreover, > > > it's quite common for other projects to plug-in their own custom > > > RelNode's so serialization happens outside the classes present in > > > calcite core. We would happily accept contributions in this area so > > > feel free to create a JIRA ticket and submit a PR. > > > > > > Best, > > > Stamatis > > > > > > On Mon, Sep 30, 2024 at 11:55 AM Austin Richardson > > > <austin.richard...@teampicnic.com.invalid> wrote: > > > > > > > > Hi Calcite devs, > > > > > > > > Our team is currently experimenting with ideas for serialising and > > > > deserialising optimised query plans using RelJsonWriter and > > > RelJsonReader. > > > > We noticed this is possible for pre-optimisation logical plans, but > ran > > > > into issues when trying to do so for post-optimisation execution > plans. > > > For > > > > example, LogicalJoin implements the required constructor for > > > serialisation > > > > here > > > > < > > > > https://calcite.apache.org/javadocAggregate/org/apache/calcite/rel/logical/LogicalJoin.html#%3Cinit%3E(org.apache.calcite.rel.RelInput) > > > >, > > > > but the specific JOIN implementations (e.g. > > > EnumerableBatchNestedLoopJoin) > > > > do not. > > > > > > > > Considering this, is there a preferred way for serialising and > > > > deserialising optimised query plans? We wanted to ensure we aren’t > > > missing > > > > something here. > > > > > > > > Thank you, > > > > > > > > Austin > > > >