That is old code. The generated code depends on knowing all types of rel node, so all the code must be regenerated after discovering a new type or rel node. Apache calcite main does not have this requirement.
James On Sun, Jan 16, 2022 at 4:35 PM guangyuan wang <wangguangy...@apache.org> wrote: > Yes, I can. > Here is the link: > > https://github.com/apache/calcite/blob/7655bd735f10de5be1eca8bb9af475b3b2ac63b6/core/src/main/java/org/apache/calcite/rel/metadata/JaninoRelMetadataProvider.java#L481 > > Jacques Nadeau <jacq...@apache.org> 于2022年1月17日周一 03:09写道: > > > Can you please provide a url link to the line of code you are referring > to > > in github? > > > > On Sat, Jan 15, 2022, 5:52 PM guangyuan wang <wangguangy...@apache.org> > > wrote: > > > > > Thank you very much for your answer. > > > I'm reading source code these days, I'm a little confused about the " > > > JaninoRelMetadataProvider.revise()" method. > > > So I'd like to know the reason why invalidate all of the caches of > > HANDLERS > > > when adding a new RelNode class to ALL_RELS. > > > > > > Jacques Nadeau <jacq...@apache.org> 于2022年1月16日周日 02:04写道: > > > > > > > I should you produce a test case that represents the specific concern > > you > > > > have as opposed to proposing a snippet of code. I'm not sure what you > > > > propose is necessary. I think their is implicit expected logic that a > > > > revise should only influence an exception outcome, not a value > outcome. > > > > Only value outcomes are cached so I don't see where there would be a > > > > problem. > > > > > > > > If you're revising value outcomes based on revise call (not just > > > exception > > > > outcomes), I think you're probably breaking the expected contract. (I > > say > > > > think here because I don't think docs make this clear and wasn't the > > > person > > > > that wrote the original code.) > > > > > > > > On Sat, Jan 15, 2022, 3:23 AM guangyuan wang < > wangguangy...@apache.org > > > > > > > wrote: > > > > > > > > > Dear community > > > > > > > > > > Why should invalidate all of the caches of HANDLERS when adding a > new > > > > > RelNode class in JaninoRelMetadataProvider.revise() method? > > > > > > > > > > The Codes are below: > > > > > > > > > > package org.apache.calcite.rel.metadata > > > > > > > > > > public class JaninoRelMetadataProvider implements > > RelMetadataProvider { > > > > > > > > > > synchronized <M extends Metadata, H extends MetadataHandler<M>> H > > > revise( > > > > > > > > > > Class<? extends RelNode> rClass, MetadataDef<M> def) { > > > > > if (ALL_RELS.add(rClass)) { > > > > > HANDLERS.invalidateAll(); > > > > > } > > > > > //noinspection unchecked > > > > > return (H) create(def); > > > > > } > > > > > > > > > > } > > > > > > > > > > > > > > >