Stamatis Zampetakis created CALCITE-5332:
--------------------------------------------

             Summary: Configuring PruneEmptyRules is cumbersome
                 Key: CALCITE-5332
                 URL: https://issues.apache.org/jira/browse/CALCITE-5332
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.32.0
            Reporter: Stamatis Zampetakis
            Assignee: Stamatis Zampetakis
             Fix For: 1.33.0


After CALCITE-4787/CALCITE-4839 (release 1.28.0) it is pretty complicated to 
create new PruneEmptyRule instances with slightly different configurations.

The most common use-case is to modify a rule, for instance 
[PruneEmptyProject|https://github.com/apache/calcite/blob/2c30a56158cdd351d35725006bc1f76bb6aac75b/core/src/main/java/org/apache/calcite/rel/rules/PruneEmptyRules.java#L178],
 and change the operands to enlarge or restrict the matching scope; e.g., 
instead of matching the general {{Project.class}} match only 
{{HiveProject.class}}.

At the moment this task is not straightforward for various reasons.

We cannot create the new rule by obtaining the configuration from the existing 
instance (e.g., PROJECT_INSTANCE) cause the latter is declared as RelOptRule. 
Unless we cast the instance to {{RelRule}} we cannot get access to its 
configuration and change it.

{{ImmutableRemoveEmptySingleRuleConfig}} is package private as every other 
immutable class so again we cannot start from there.

The constructors of {{RemoveEmptySingleRule}} are either deprecated or package 
private so cannot/should not be used.

[RemoveEmptySingleRuleConfig|https://github.com/apache/calcite/blob/2c30a56158cdd351d35725006bc1f76bb6aac75b/core/src/main/java/org/apache/calcite/rel/rules/PruneEmptyRules.java#L351]
 does not provide a {{DEFAULT}} configuration instance.

The only way "recommended" way to create a new rule instance at the moment is 
to implement the respective config interface. This is unnecessary and requires 
quite a bit of work if the consumer is not using the immutables library 
annotation processor.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to