[ 
https://issues.apache.org/jira/browse/CALCITE-3947?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17093818#comment-17093818
 ] 

Julian Hyde commented on CALCITE-3947:
--------------------------------------

Thanks [~hyuan].

Sorry I didn't get further than "maybe". But when I'm triaging 500 emails every 
morning I don't have much time.

The point I wanted to make was this. {{LinkedHashSet}} is a more costly data 
structure, in terms of time and space, than {{HashSet}}. It needs to be 
justified.

The only code that needs a predictable iteration order on the set is the code 
that creates operands. That code would be better if it sorted the classes by 
name, rather than by insertion order. That is, in some sense, more 
deterministic, and also more useful.

> AbstractRelOptPlanner.classes should be LinkedHashSet so that rule match 
> order is deterministic across runs
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-3947
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3947
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Botong Huang
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> AbstractRelOptPlanner.classes is used by subClasses() to determine things to 
> put into VolcanoPlanner.classOperands, which is then used in 
> VolcanoPlanner.fireRules(). Since AbstractRelOptPlanner.classes is now a 
> HashSet, its iteration order is not deterministic across runs, making 
> debugging hard. It should be LinkedHashSet just like many other fields in the 
> planner.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to