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

Julian Hyde edited comment on CALCITE-2658 at 12/4/18 2:03 AM:
---------------------------------------------------------------

Reviewing PR 921 ExchangeRemoveConstantKeysRule:
* You have mutable state inside the rule, {{hashDistribution}}. Can you remove 
that? Rule instances need to be thread-safe.
* I think you should change Distributions.hash to return a singleton 
distribution if the keys are empty (and change its javadoc).
* Can you add more description to the rules' javadoc about what 'removing 
constant keys' means. Maybe a SQL example.
* Maybe I'm paranoid, but simplifyDistributionKeys seems to be allocating 
rather a lot of objects. Rather than speculatively creating {{RexInputRef}} 
objects, could you look for constants of type {{RexInputRef}} and then see 
whether that bit is a distribution key. And check whether you can simplify 
before you start to simplify.


was (Author: julianhyde):
Reviewing PR 921 ExchangeRemoveConstantKeysRule:
* You have mutable state inside the rule, {{hashDistribution}}. Can you remove 
that? Rule instances need to be thread-safe.
* I think you should change Distributions.hash to return a singleton 
distribution if the keys are empty (and change its javadoc).
* Can you add more description to the rules' javadoc about what 'removing 
constant keys' means. Maybe a SQL example.
* Maybe I'm paranoid, but simplifyDistributionKeys seems to be allocating 
rather a lot of objects. Rather than speculatively creating {{RexInputRef}}s, 
could you look for {{RexInputRef}}s that are constants and then see whether 
that bit is set in the distribution. And check whether you can simplify before 
you start to simplify.

> Introducing more ReduceExpressionRules
> --------------------------------------
>
>                 Key: CALCITE-2658
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2658
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.17.0
>            Reporter: Chunwei Lei
>            Assignee: Julian Hyde
>            Priority: Major
>             Fix For: 1.18.0
>
>
> It is useful to have rules reducing Exchange/Sort/SortExchange keys, e.g.,
> SELECT key,value FROM (SELECT 1 AS key, value FROM src) r DISTRIBUTE BY key;
> can be reduced to 
> SELECT 1 AS key, value FROM src;    # Since singleton requirement may already 
> required by SELECT.
> SELECT key,value FROM (SELECT 1 AS key, value FROM src) r ORDER BY key;
> can be reduced to
> SELECT 1 AS key, value FROM src;    # Since ordering on constant is useless.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to