Re: What's the necessity of the HepRelVertex used in HepPlanner

2024-02-21 Thread Julian Hyde
Let’s suppose that the information in HepRelVertex could somehow be moved into 
the RelNode. (Since the data structure is a DAG it seems plausible.) Now each 
RelNode would contain mutable state that relates to the HEP planner’s 
algorithm. That state needs to be managed (e.g. reinitialized when starting a 
new planner phase). It also makes RelNodes mutable, which seems to give 
permission for people to start adding more mutable state. 

Also, remember that RelNodes and RelRules can be used, unchanged, by 
VolcanoPlanner. Externalizing the state makes this possible. 

When I started my career writing C, external lists seemed an extravagant use of 
memory. If a particular struct needed to be a member of 3 kinds of list, you 
added 3 pairs of next/previous pointers to each struct. One fewer indirection 
to get your data, but hours of debugging to manage the lifecycle. Internal 
state is usually a false economy. 

> On Feb 20, 2024, at 11:57 PM, Alessandro Solimando 
>  wrote:
> 
> 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  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  于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
>> 


Re: What's the necessity of the HepRelVertex used in HepPlanner

2024-02-20 Thread Alessandro Solimando
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  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  于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
>


Re: What's the necessity of the HepRelVertex used in HepPlanner

2024-02-20 Thread Benchao Li
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  于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


What's the necessity of the HepRelVertex used in HepPlanner

2024-02-19 Thread Ayaka Kamisato
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.