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)