blob: d179be6880bfc2657887947126a199b67523ac0e [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>RelRule (Apache Calcite API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.calcite.plan, class: RelRule">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<div class="about-language"><b>Apache Calcite</b></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li>Method</li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.plan</a></div>
<h1 title="Class RelRule" class="title">Class RelRule&lt;C extends <a href="RelRule.Config.html" title="interface in org.apache.calcite.plan">RelRule.Config</a>&gt;</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance"><a href="RelOptRule.html" title="class in org.apache.calcite.plan">org.apache.calcite.plan.RelOptRule</a>
<div class="inheritance">org.apache.calcite.plan.RelRule&lt;C&gt;</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>C</code> - Configuration type</dd>
</dl>
<dl class="notes">
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="volcano/AbstractConverter.ExpandConversionRule.html" title="class in org.apache.calcite.plan.volcano">AbstractConverter.ExpandConversionRule</a></code>, <code><a href="../rel/rules/AbstractJoinExtractFilterRule.html" title="class in org.apache.calcite.rel.rules">AbstractJoinExtractFilterRule</a></code>, <code><a href="../rel/rules/AggregateCaseToFilterRule.html" title="class in org.apache.calcite.rel.rules">AggregateCaseToFilterRule</a></code>, <code><a href="../rel/rules/AggregateExpandDistinctAggregatesRule.html" title="class in org.apache.calcite.rel.rules">AggregateExpandDistinctAggregatesRule</a></code>, <code><a href="../rel/rules/AggregateExpandWithinDistinctRule.html" title="class in org.apache.calcite.rel.rules">AggregateExpandWithinDistinctRule</a></code>, <code><a href="../rel/rules/AggregateExtractProjectRule.html" title="class in org.apache.calcite.rel.rules">AggregateExtractProjectRule</a></code>, <code><a href="../rel/rules/AggregateFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateFilterTransposeRule</a></code>, <code><a href="../rel/rules/AggregateJoinJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinJoinRemoveRule</a></code>, <code><a href="../rel/rules/AggregateJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinRemoveRule</a></code>, <code><a href="../rel/rules/AggregateJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateJoinTransposeRule</a></code>, <code><a href="../rel/rules/AggregateMergeRule.html" title="class in org.apache.calcite.rel.rules">AggregateMergeRule</a></code>, <code><a href="../rel/rules/AggregateProjectConstantToDummyJoinRule.html" title="class in org.apache.calcite.rel.rules">AggregateProjectConstantToDummyJoinRule</a></code>, <code><a href="../rel/rules/AggregateProjectMergeRule.html" title="class in org.apache.calcite.rel.rules">AggregateProjectMergeRule</a></code>, <code><a href="../rel/rules/AggregateProjectPullUpConstantsRule.html" title="class in org.apache.calcite.rel.rules">AggregateProjectPullUpConstantsRule</a></code>, <code><a href="../rel/rules/AggregateReduceFunctionsRule.html" title="class in org.apache.calcite.rel.rules">AggregateReduceFunctionsRule</a></code>, <code><a href="../rel/rules/AggregateRemoveRule.html" title="class in org.apache.calcite.rel.rules">AggregateRemoveRule</a></code>, <code><a href="../rel/rules/AggregateStarTableRule.html" title="class in org.apache.calcite.rel.rules">AggregateStarTableRule</a></code>, <code><a href="../rel/rules/AggregateUnionAggregateRule.html" title="class in org.apache.calcite.rel.rules">AggregateUnionAggregateRule</a></code>, <code><a href="../rel/rules/AggregateUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">AggregateUnionTransposeRule</a></code>, <code><a href="../rel/rules/AggregateValuesRule.html" title="class in org.apache.calcite.rel.rules">AggregateValuesRule</a></code>, <code><a href="../interpreter/Bindables.BindableTableScanRule.html" title="class in org.apache.calcite.interpreter">Bindables.BindableTableScanRule</a></code>, <code><a href="../rel/rules/CalcMergeRule.html" title="class in org.apache.calcite.rel.rules">CalcMergeRule</a></code>, <code><a href="../rel/rules/CalcRemoveRule.html" title="class in org.apache.calcite.rel.rules">CalcRemoveRule</a></code>, <code><a href="../rel/rules/CalcSplitRule.html" title="class in org.apache.calcite.rel.rules">CalcSplitRule</a></code>, <code><a href="../adapter/cassandra/CassandraRules.CassandraFilterRule.html" title="class in org.apache.calcite.adapter.cassandra">CassandraRules.CassandraFilterRule</a></code>, <code><a href="../adapter/cassandra/CassandraRules.CassandraLimitRule.html" title="class in org.apache.calcite.adapter.cassandra">CassandraRules.CassandraLimitRule</a></code>, <code><a href="../adapter/cassandra/CassandraRules.CassandraSortRule.html" title="class in org.apache.calcite.adapter.cassandra">CassandraRules.CassandraSortRule</a></code>, <code><a href="../rel/rules/CoerceInputsRule.html" title="class in org.apache.calcite.rel.rules">CoerceInputsRule</a></code>, <code><a href="CommonRelSubExprRule.html" title="class in org.apache.calcite.plan">CommonRelSubExprRule</a></code>, <code><a href="../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert">ConverterRule</a></code>, <code><a href="../adapter/csv/CsvProjectTableScanRule.html" title="class in org.apache.calcite.adapter.csv">CsvProjectTableScanRule</a></code>, <code><a href="../adapter/file/CsvProjectTableScanRule.html" title="class in org.apache.calcite.adapter.file">CsvProjectTableScanRule</a></code>, <code><a href="../rel/rules/DateRangeRules.FilterDateRangeRule.html" title="class in org.apache.calcite.rel.rules">DateRangeRules.FilterDateRangeRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidAggregateProjectRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidAggregateProjectRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidAggregateRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidAggregateRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidFilterRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidFilterRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidHavingFilterRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidHavingFilterRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidPostAggregationProjectRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidPostAggregationProjectRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidProjectRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidProjectRule</a></code>, <code><a href="../adapter/druid/DruidRules.DruidSortRule.html" title="class in org.apache.calcite.adapter.druid">DruidRules.DruidSortRule</a></code>, <code><a href="../adapter/enumerable/EnumerableBatchNestedLoopJoinRule.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableBatchNestedLoopJoinRule</a></code>, <code><a href="../adapter/enumerable/EnumerableFilterToCalcRule.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableFilterToCalcRule</a></code>, <code><a href="../adapter/enumerable/EnumerableLimitRule.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableLimitRule</a></code>, <code><a href="../adapter/enumerable/EnumerableLimitSortRule.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableLimitSortRule</a></code>, <code><a href="../adapter/enumerable/EnumerableMergeUnionRule.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableMergeUnionRule</a></code>, <code><a href="../rel/rules/ExchangeRemoveConstantKeysRule.html" title="class in org.apache.calcite.rel.rules">ExchangeRemoveConstantKeysRule</a></code>, <code><a href="../rel/rules/FilterAggregateTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterAggregateTransposeRule</a></code>, <code><a href="../rel/rules/FilterCalcMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterCalcMergeRule</a></code>, <code><a href="../rel/rules/FilterCorrelateRule.html" title="class in org.apache.calcite.rel.rules">FilterCorrelateRule</a></code>, <code><a href="../rel/rules/FilterFlattenCorrelatedConditionRule.html" title="class in org.apache.calcite.rel.rules">FilterFlattenCorrelatedConditionRule</a></code>, <code><a href="../rel/rules/FilterJoinRule.html" title="class in org.apache.calcite.rel.rules">FilterJoinRule</a></code>, <code><a href="../rel/rules/FilterMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterMergeRule</a></code>, <code><a href="../rel/rules/FilterMultiJoinMergeRule.html" title="class in org.apache.calcite.rel.rules">FilterMultiJoinMergeRule</a></code>, <code><a href="../rel/rules/FilterProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterProjectTransposeRule</a></code>, <code><a href="../rel/rules/FilterRemoveIsNotDistinctFromRule.html" title="class in org.apache.calcite.rel.rules">FilterRemoveIsNotDistinctFromRule</a></code>, <code><a href="../rel/rules/FilterSetOpTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterSetOpTransposeRule</a></code>, <code><a href="../rel/rules/FilterTableFunctionTransposeRule.html" title="class in org.apache.calcite.rel.rules">FilterTableFunctionTransposeRule</a></code>, <code><a href="../rel/rules/FilterTableScanRule.html" title="class in org.apache.calcite.rel.rules">FilterTableScanRule</a></code>, <code><a href="../rel/rules/FilterToCalcRule.html" title="class in org.apache.calcite.rel.rules">FilterToCalcRule</a></code>, <code><a href="../adapter/geode/rel/GeodeRules.GeodeFilterRule.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeRules.GeodeFilterRule</a></code>, <code><a href="../adapter/geode/rel/GeodeRules.GeodeSortLimitRule.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeRules.GeodeSortLimitRule</a></code>, <code><a href="../adapter/innodb/InnodbRules.InnodbFilterRule.html" title="class in org.apache.calcite.adapter.innodb">InnodbRules.InnodbFilterRule</a></code>, <code><a href="../adapter/innodb/InnodbRules.InnodbSortFilterRule.html" title="class in org.apache.calcite.adapter.innodb">InnodbRules.InnodbSortFilterRule</a></code>, <code><a href="../adapter/innodb/InnodbRules.InnodbSortTableScanRule.html" title="class in org.apache.calcite.adapter.innodb">InnodbRules.InnodbSortTableScanRule</a></code>, <code><a href="../rel/rules/IntersectToDistinctRule.html" title="class in org.apache.calcite.rel.rules">IntersectToDistinctRule</a></code>, <code><a href="../rel/rules/JoinAddRedundantSemiJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinAddRedundantSemiJoinRule</a></code>, <code><a href="../rel/rules/JoinAssociateRule.html" title="class in org.apache.calcite.rel.rules">JoinAssociateRule</a></code>, <code><a href="../rel/rules/JoinCommuteRule.html" title="class in org.apache.calcite.rel.rules">JoinCommuteRule</a></code>, <code><a href="../rel/rules/JoinDeriveIsNotNullFilterRule.html" title="class in org.apache.calcite.rel.rules">JoinDeriveIsNotNullFilterRule</a></code>, <code><a href="../rel/rules/JoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinProjectTransposeRule</a></code>, <code><a href="../rel/rules/JoinPushExpressionsRule.html" title="class in org.apache.calcite.rel.rules">JoinPushExpressionsRule</a></code>, <code><a href="../rel/rules/JoinPushThroughJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinPushThroughJoinRule</a></code>, <code><a href="../rel/rules/JoinPushTransitivePredicatesRule.html" title="class in org.apache.calcite.rel.rules">JoinPushTransitivePredicatesRule</a></code>, <code><a href="../rel/rules/JoinToCorrelateRule.html" title="class in org.apache.calcite.rel.rules">JoinToCorrelateRule</a></code>, <code><a href="../rel/rules/JoinToMultiJoinRule.html" title="class in org.apache.calcite.rel.rules">JoinToMultiJoinRule</a></code>, <code><a href="../rel/rules/JoinUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">JoinUnionTransposeRule</a></code>, <code><a href="../rel/rules/LoptOptimizeJoinRule.html" title="class in org.apache.calcite.rel.rules">LoptOptimizeJoinRule</a></code>, <code><a href="../rel/rules/MatchRule.html" title="class in org.apache.calcite.rel.rules">MatchRule</a></code>, <code><a href="../rel/rules/MaterializedViewFilterScanRule.html" title="class in org.apache.calcite.rel.rules">MaterializedViewFilterScanRule</a></code>, <code><a href="../rel/rules/materialize/MaterializedViewRule.html" title="class in org.apache.calcite.rel.rules.materialize">MaterializedViewRule</a></code>, <code><a href="../rel/rules/MultiJoinOptimizeBushyRule.html" title="class in org.apache.calcite.rel.rules">MultiJoinOptimizeBushyRule</a></code>, <code><a href="../piglet/PigToSqlAggregateRule.html" title="class in org.apache.calcite.piglet">PigToSqlAggregateRule</a></code>, <code><a href="../rel/rules/ProjectAggregateMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectAggregateMergeRule</a></code>, <code><a href="../rel/rules/ProjectCalcMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectCalcMergeRule</a></code>, <code><a href="../rel/rules/ProjectCorrelateTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectCorrelateTransposeRule</a></code>, <code><a href="../rel/rules/ProjectFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectFilterTransposeRule</a></code>, <code><a href="../rel/rules/ProjectJoinJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinJoinRemoveRule</a></code>, <code><a href="../rel/rules/ProjectJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinRemoveRule</a></code>, <code><a href="../rel/rules/ProjectJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectJoinTransposeRule</a></code>, <code><a href="../rel/rules/ProjectMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectMergeRule</a></code>, <code><a href="../rel/rules/ProjectMultiJoinMergeRule.html" title="class in org.apache.calcite.rel.rules">ProjectMultiJoinMergeRule</a></code>, <code><a href="../rel/rules/ProjectRemoveRule.html" title="class in org.apache.calcite.rel.rules">ProjectRemoveRule</a></code>, <code><a href="../rel/rules/ProjectSetOpTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectSetOpTransposeRule</a></code>, <code><a href="../rel/rules/ProjectTableScanRule.html" title="class in org.apache.calcite.rel.rules">ProjectTableScanRule</a></code>, <code><a href="../rel/rules/ProjectToCalcRule.html" title="class in org.apache.calcite.rel.rules">ProjectToCalcRule</a></code>, <code><a href="../rel/rules/ProjectToWindowRule.html" title="class in org.apache.calcite.rel.rules">ProjectToWindowRule</a></code>, <code><a href="../rel/rules/ProjectWindowTransposeRule.html" title="class in org.apache.calcite.rel.rules">ProjectWindowTransposeRule</a></code>, <code><a href="../rel/rules/PruneEmptyRules.PruneEmptyRule.html" title="class in org.apache.calcite.rel.rules">PruneEmptyRules.PruneEmptyRule</a></code>, <code><a href="../rel/rules/ReduceDecimalsRule.html" title="class in org.apache.calcite.rel.rules">ReduceDecimalsRule</a></code>, <code><a href="../rel/rules/ReduceExpressionsRule.html" title="class in org.apache.calcite.rel.rules">ReduceExpressionsRule</a></code>, <code><a href="../sql2rel/RelDecorrelator.AdjustProjectForCountAggregateRule.html" title="class in org.apache.calcite.sql2rel">RelDecorrelator.AdjustProjectForCountAggregateRule</a></code>, <code><a href="../sql2rel/RelDecorrelator.RemoveCorrelationForScalarAggregateRule.html" title="class in org.apache.calcite.sql2rel">RelDecorrelator.RemoveCorrelationForScalarAggregateRule</a></code>, <code><a href="../sql2rel/RelDecorrelator.RemoveCorrelationForScalarProjectRule.html" title="class in org.apache.calcite.sql2rel">RelDecorrelator.RemoveCorrelationForScalarProjectRule</a></code>, <code><a href="../sql2rel/RelDecorrelator.RemoveSingleAggregateRule.html" title="class in org.apache.calcite.sql2rel">RelDecorrelator.RemoveSingleAggregateRule</a></code>, <code><a href="../rel/rules/SemiJoinFilterTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinFilterTransposeRule</a></code>, <code><a href="../rel/rules/SemiJoinJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinJoinTransposeRule</a></code>, <code><a href="../rel/rules/SemiJoinProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinProjectTransposeRule</a></code>, <code><a href="../rel/rules/SemiJoinRemoveRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRemoveRule</a></code>, <code><a href="../rel/rules/SemiJoinRule.html" title="class in org.apache.calcite.rel.rules">SemiJoinRule</a></code>, <code><a href="../rel/rules/SortJoinCopyRule.html" title="class in org.apache.calcite.rel.rules">SortJoinCopyRule</a></code>, <code><a href="../rel/rules/SortJoinTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortJoinTransposeRule</a></code>, <code><a href="../rel/rules/SortProjectTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortProjectTransposeRule</a></code>, <code><a href="../rel/rules/SortRemoveConstantKeysRule.html" title="class in org.apache.calcite.rel.rules">SortRemoveConstantKeysRule</a></code>, <code><a href="../rel/rules/SortRemoveRule.html" title="class in org.apache.calcite.rel.rules">SortRemoveRule</a></code>, <code><a href="../rel/rules/SortUnionTransposeRule.html" title="class in org.apache.calcite.rel.rules">SortUnionTransposeRule</a></code>, <code><a href="../rel/rules/SpatialRules.FilterHilbertRule.html" title="class in org.apache.calcite.rel.rules">SpatialRules.FilterHilbertRule</a></code>, <code><a href="../adapter/splunk/SplunkPushDownRule.html" title="class in org.apache.calcite.adapter.splunk">SplunkPushDownRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaAggregateTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaAggregateTransposeRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaFilterTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaFilterTransposeRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaJoinTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaJoinTransposeRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaProjectTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaProjectTransposeRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaSortTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaSortTransposeRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaTableScanRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaTableScanRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaTableScanToEmptyRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaTableScanToEmptyRule</a></code>, <code><a href="../rel/stream/StreamRules.DeltaUnionTransposeRule.html" title="class in org.apache.calcite.rel.stream">StreamRules.DeltaUnionTransposeRule</a></code>, <code><a href="../rel/rules/SubQueryRemoveRule.html" title="class in org.apache.calcite.rel.rules">SubQueryRemoveRule</a></code>, <code><a href="../rel/rules/TableScanRule.html" title="class in org.apache.calcite.rel.rules">TableScanRule</a></code>, <code><a href="../rel/convert/TraitMatchingRule.html" title="class in org.apache.calcite.rel.convert">TraitMatchingRule</a></code>, <code><a href="../rel/rules/UnionEliminatorRule.html" title="class in org.apache.calcite.rel.rules">UnionEliminatorRule</a></code>, <code><a href="../rel/rules/UnionMergeRule.html" title="class in org.apache.calcite.rel.rules">UnionMergeRule</a></code>, <code><a href="../rel/rules/UnionPullUpConstantsRule.html" title="class in org.apache.calcite.rel.rules">UnionPullUpConstantsRule</a></code>, <code><a href="../rel/rules/UnionToDistinctRule.html" title="class in org.apache.calcite.rel.rules">UnionToDistinctRule</a></code>, <code><a href="../rel/rules/ValuesReduceRule.html" title="class in org.apache.calcite.rel.rules">ValuesReduceRule</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public abstract class </span><span class="element-name type-name-label">RelRule&lt;C extends <a href="RelRule.Config.html" title="interface in org.apache.calcite.plan">RelRule.Config</a>&gt;</span>
<span class="extends-implements">extends <a href="RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></span></div>
<div class="block">Rule that is parameterized via a configuration.
<p>Eventually (before Calcite version 2.0), this class will replace
<a href="RelOptRule.html" title="class in org.apache.calcite.plan"><code>RelOptRule</code></a>. Constructors of <code>RelOptRule</code> are deprecated, so new
rule classes should extend <code>RelRule</code>, not <code>RelOptRule</code>.
Next, we will deprecate <code>RelOptRule</code>, so that variables that reference
rules will be of type <code>RelRule</code>.
<p><b>Guidelines for writing rules</b>
<p>1. If your rule is a sub-class of
<a href="../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert"><code>ConverterRule</code></a>
and does not need any extra properties,
there's no need to create an <code>interface Config</code> inside your class.
In your class, create a constant
<code>public static final Config DEFAULT_CONFIG</code>. Goto step 5.
<p>2. If your rule is not a sub-class of
<a href="../rel/convert/ConverterRule.html" title="class in org.apache.calcite.rel.convert"><code>ConverterRule</code></a>,
create an inner <code>interface Config extends RelRule.Config</code> and
annotate it with <code>@Value.Immutable</code>. Note, if your inner class
is two levels deep (e.g. top-level Rule with Config inside), we recommend
you annotate the outer class with <code>@Value.Enclosing</code> which will
instruct the annotation processor to put your generated value class
inside a new Immutable outer class. If your rule is three levels deep,
the best thing to do is give your class a unique name to avoid any
generated code class name overlaps.
Implement <a href="RelRule.Config.html#toRule()"><code>toRule</code></a> using a <code>default</code> method:
<blockquote>
<code>
&#x40;Override default CsvProjectTableScanRule toRule() {<br>
&nbsp;&nbsp;return new CsvProjectTableScanRule(this);<br>
}
</code>
</blockquote>
<p>3. For each configuration property, create a pair of methods in your
<code>Config</code> interface. For example, for a property <code>foo</code> of type
<code>int</code>, create methods <code>foo</code> and <code>withFoo</code>:
<blockquote><pre><code>
&#x2f;** Returns foo. *&#x2f;
int foo();
&#x2f;** Sets {&#x40;link #foo}. *&#x2f;
Config withFoo(int x);
</code></pre></blockquote>
<p>4. In your <code>Config</code> interface, create a <code>DEFAULT</code> constant
that represents the most typical configuration of your rule. This default
will leverage the Immutables class generated by the Annotation Processor
based on the annotation you provided above. For example,
<code>CsvProjectTableScanRule.Config</code> has the following:
<blockquote><pre><code>
Config DEFAULT = ImmutableCsvProjectTableScanRule.Config.builder()
.withOperandSupplier(b0 -&gt;
b0.operand(LogicalProject.class).oneInput(b1 -&gt;
b1.operand(CsvTableScan.class).noInputs()))
.build();
</code></pre></blockquote>
<p>5. Do not create an <code>INSTANCE</code> constant inside your rule.
Instead, create a named instance of your rule, with default configuration,
in a holder class. The holder class must not be a sub-class of
<code>RelOptRule</code> (otherwise cyclic class-loading issues may arise).
Generally it will be called <code><i>Xxx</i>Rules</code>, for example
<code>CsvRules</code>. The rule instance is named after your rule, and is based
on the default config (<code>Config.DEFAULT</code>, or <code>DEFAULT_CONFIG</code> for
converter rules):
<blockquote><pre><code>
&#x2f;** Rule that matches a {&#x40;code Project} on a
* {&#x40;code CsvTableScan} and pushes down projects if possible. *&#x2f;
public static final CsvProjectTableScanRule PROJECT_SCAN =
CsvProjectTableScanRule.Config.DEFAULT.toRule();
</code></pre></blockquote></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="RelRule.Config.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.Config</a></code></div>
<div class="col-last even-row-color">
<div class="block">Rule configuration.</div>
</div>
<div class="col-first odd-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="RelRule.Done.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.Done</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Indicates that an operand is complete.</div>
</div>
<div class="col-first even-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="RelRule.MatchHandler.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.MatchHandler</a>&lt;<a href="RelRule.MatchHandler.html" title="type parameter in RelRule.MatchHandler">R</a> extends <a href="RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a>&gt;</code></div>
<div class="col-last even-row-color">
<div class="block">Callback interface that helps you avoid creating sub-classes of
<a href="RelRule.html" title="class in org.apache.calcite.plan"><code>RelRule</code></a> that differ only in implementations of
<a href="RelOptRule.html#onMatch(org.apache.calcite.plan.RelOptRuleCall)"><code>RelOptRule.onMatch(RelOptRuleCall)</code></a> method.</div>
</div>
<div class="col-first odd-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="RelRule.OperandBuilder.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.OperandBuilder</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Callback to create an operand.</div>
</div>
<div class="col-first even-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="RelRule.OperandDetailBuilder.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.OperandDetailBuilder</a>&lt;<a href="RelRule.OperandDetailBuilder.html" title="type parameter in RelRule.OperandDetailBuilder">R</a> extends <a href="../rel/RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;</code></div>
<div class="col-last even-row-color">
<div class="block">Add details about an operand, such as its inputs.</div>
</div>
<div class="col-first odd-row-color"><code>static interface&nbsp;</code></div>
<div class="col-second odd-row-color"><code><a href="RelRule.OperandTransform.html" class="type-name-link" title="interface in org.apache.calcite.plan">RelRule.OperandTransform</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Function that creates an operand.</div>
</div>
</div>
<div class="inherited-list">
<h2 id="nested-classes-inherited-from-class-org.apache.calcite.plan.RelOptRule">Nested classes/interfaces inherited from class&nbsp;org.apache.calcite.plan.<a href="RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h2>
<code><a href="RelOptRule.ConverterRelOptRuleOperand.html" title="class in org.apache.calcite.plan">RelOptRule.ConverterRelOptRuleOperand</a></code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final <a href="RelRule.html" title="type parameter in RelRule">C</a></code></div>
<div class="col-second even-row-color"><code><a href="#config" class="member-name-link">config</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.apache.calcite.plan.RelOptRule">Fields inherited from class&nbsp;org.apache.calcite.plan.<a href="RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h3>
<code><a href="RelOptRule.html#description">description</a>, <a href="RelOptRule.html#operands">operands</a>, <a href="RelOptRule.html#relBuilderFactory">relBuilderFactory</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected </code></div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(C)" class="member-name-link">RelRule</a><wbr>(<a href="RelRule.html" title="type parameter in RelRule">C</a>&nbsp;config)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates a RelRule.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.calcite.plan.RelOptRule">Methods inherited from class&nbsp;org.apache.calcite.plan.<a href="RelOptRule.html" title="class in org.apache.calcite.plan">RelOptRule</a></h3>
<code><a href="RelOptRule.html#any()">any</a>, <a href="RelOptRule.html#convert(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTrait)">convert</a>, <a href="RelOptRule.html#convert(org.apache.calcite.rel.RelNode,org.apache.calcite.plan.RelTraitSet)">convert</a>, <a href="RelOptRule.html#convertList(java.util.List,org.apache.calcite.plan.RelTrait)">convertList</a>, <a href="RelOptRule.html#convertOperand(java.lang.Class,com.google.common.base.Predicate,org.apache.calcite.plan.RelTrait)">convertOperand</a>, <a href="RelOptRule.html#convertOperand(java.lang.Class,java.util.function.Predicate,org.apache.calcite.plan.RelTrait)">convertOperand</a>, <a href="RelOptRule.html#equals(java.lang.Object)">equals</a>, <a href="RelOptRule.html#equals(org.apache.calcite.plan.RelOptRule)">equals</a>, <a href="RelOptRule.html#getOperand()">getOperand</a>, <a href="RelOptRule.html#getOperands()">getOperands</a>, <a href="RelOptRule.html#getOutConvention()">getOutConvention</a>, <a href="RelOptRule.html#getOutTrait()">getOutTrait</a>, <a href="RelOptRule.html#hashCode()">hashCode</a>, <a href="RelOptRule.html#matches(org.apache.calcite.plan.RelOptRuleCall)">matches</a>, <a href="RelOptRule.html#none()">none</a>, <a href="RelOptRule.html#onMatch(org.apache.calcite.plan.RelOptRuleCall)">onMatch</a>, <a href="RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operand</a>, <a href="RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,com.google.common.base.Predicate,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,com.google.common.base.Predicate,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operand</a>, <a href="RelOptRule.html#operand(java.lang.Class,org.apache.calcite.plan.RelTrait,org.apache.calcite.plan.RelOptRuleOperandChildren)">operand</a>, <a href="RelOptRule.html#operandJ(java.lang.Class,org.apache.calcite.plan.RelTrait,java.util.function.Predicate,org.apache.calcite.plan.RelOptRuleOperandChildren)">operandJ</a>, <a href="RelOptRule.html#operandJ(java.lang.Class,org.apache.calcite.plan.RelTrait,java.util.function.Predicate,org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">operandJ</a>, <a href="RelOptRule.html#some(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">some</a>, <a href="RelOptRule.html#toString()">toString</a>, <a href="RelOptRule.html#unordered(org.apache.calcite.plan.RelOptRuleOperand,org.apache.calcite.plan.RelOptRuleOperand...)">unordered</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="config">
<h3>config</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="RelRule.html" title="type parameter in RelRule">C</a> extends <a href="RelRule.Config.html" title="interface in org.apache.calcite.plan">RelRule.Config</a></span>&nbsp;<span class="element-name">config</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(C)">
<h3 id="&lt;init&gt;(org.apache.calcite.plan.RelRule.Config)">RelRule</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="element-name">RelRule</span><wbr><span class="parameters">(<a href="RelRule.html" title="type parameter in RelRule">C</a>&nbsp;config)</span></div>
<div class="block">Creates a RelRule.</div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &copy; 2012-2023 Apache Software Foundation. All Rights Reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>