Hi Ayaka, I agree with Benchao, you can look at this article to get a sense on why a data structure allowing node substitution is useful in query planning: https://www.querifylabs.com/blog/memoization-in-cost-based-optimizers
Best regards, Alessandro On Wed, 21 Feb 2024 at 05:55, Benchao Li <libenc...@apache.org> wrote: > Ayaka, > > Per my understanding, HepRelVertex is used to make RelNode changeable > easily, you can see more about HepRelVertex#replaceRel, it is used to > change one RelNode to another after some rules applied and new equal > node produced. In this way, we can easily change subgraphs of the > original DAG after performing some RBO rules. > > > Ayaka Kamisato <cyborgz1...@gmail.com> 于2024年2月19日周一 19:29写道: > > > > I'm studying Calcite recently and I found that RelNode Tree would be > > converted to a DAG composed by HepRelVertex and Edge before the RBO rules > > execution, and I don't understand why this step is necessary since > RelNode > > tree is a DAG essentially. > > > > -- > > Best, > Benchao Li >