blob: 5b89406c6b151809527e8504939c33dee309adea [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>RelNode (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.rel, interface: RelNode">
<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 evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
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>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></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.rel</a></div>
<h1 title="Interface RelNode" class="title">Interface RelNode</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Superinterfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Cloneable.html" title="class or interface in java.lang" class="external-link">Cloneable</a></code>, <code><a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a></code></dd>
</dl>
<dl class="notes">
<dt>All Known Subinterfaces:</dt>
<dd><code><a href="../interpreter/BindableRel.html" title="interface in org.apache.calcite.interpreter">BindableRel</a></code>, <code><a href="../adapter/cassandra/CassandraRel.html" title="interface in org.apache.calcite.adapter.cassandra">CassandraRel</a></code>, <code><a href="convert/Converter.html" title="interface in org.apache.calcite.rel.convert">Converter</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchRel.html" title="interface in org.apache.calcite.adapter.elasticsearch">ElasticsearchRel</a></code>, <code><a href="../adapter/enumerable/EnumerableRel.html" title="interface in org.apache.calcite.adapter.enumerable">EnumerableRel</a></code>, <code><a href="../adapter/geode/rel/GeodeRel.html" title="interface in org.apache.calcite.adapter.geode.rel">GeodeRel</a></code>, <code><a href="../adapter/innodb/InnodbRel.html" title="interface in org.apache.calcite.adapter.innodb">InnodbRel</a></code>, <code><a href="../interpreter/InterpretableRel.html" title="interface in org.apache.calcite.interpreter">InterpretableRel</a></code>, <code><a href="../adapter/jdbc/JdbcRel.html" title="interface in org.apache.calcite.adapter.jdbc">JdbcRel</a></code>, <code><a href="../adapter/mongodb/MongoRel.html" title="interface in org.apache.calcite.adapter.mongodb">MongoRel</a></code>, <code><a href="PhysicalNode.html" title="interface in org.apache.calcite.rel">PhysicalNode</a></code>, <code><a href="../adapter/pig/PigRel.html" title="interface in org.apache.calcite.adapter.pig">PigRel</a></code>, <code><a href="../sql2rel/RelStructuredTypeFlattener.SelfFlatteningRel.html" title="interface in org.apache.calcite.sql2rel">RelStructuredTypeFlattener.SelfFlatteningRel</a></code>, <code><a href="../adapter/spark/SparkRel.html" title="interface in org.apache.calcite.adapter.spark">SparkRel</a></code></dd>
</dl>
<dl class="notes">
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../plan/volcano/AbstractConverter.html" title="class in org.apache.calcite.plan.volcano">AbstractConverter</a></code>, <code><a href="AbstractRelNode.html" title="class in org.apache.calcite.rel">AbstractRelNode</a></code>, <code><a href="core/Aggregate.html" title="class in org.apache.calcite.rel.core">Aggregate</a></code>, <code><a href="../interpreter/Bindables.BindableAggregate.html" title="class in org.apache.calcite.interpreter">Bindables.BindableAggregate</a></code>, <code><a href="../interpreter/Bindables.BindableFilter.html" title="class in org.apache.calcite.interpreter">Bindables.BindableFilter</a></code>, <code><a href="../interpreter/Bindables.BindableIntersect.html" title="class in org.apache.calcite.interpreter">Bindables.BindableIntersect</a></code>, <code><a href="../interpreter/Bindables.BindableJoin.html" title="class in org.apache.calcite.interpreter">Bindables.BindableJoin</a></code>, <code><a href="../interpreter/Bindables.BindableMatch.html" title="class in org.apache.calcite.interpreter">Bindables.BindableMatch</a></code>, <code><a href="../interpreter/Bindables.BindableMinus.html" title="class in org.apache.calcite.interpreter">Bindables.BindableMinus</a></code>, <code><a href="../interpreter/Bindables.BindableProject.html" title="class in org.apache.calcite.interpreter">Bindables.BindableProject</a></code>, <code><a href="../interpreter/Bindables.BindableSort.html" title="class in org.apache.calcite.interpreter">Bindables.BindableSort</a></code>, <code><a href="../interpreter/Bindables.BindableTableScan.html" title="class in org.apache.calcite.interpreter">Bindables.BindableTableScan</a></code>, <code><a href="../interpreter/Bindables.BindableUnion.html" title="class in org.apache.calcite.interpreter">Bindables.BindableUnion</a></code>, <code><a href="../interpreter/Bindables.BindableValues.html" title="class in org.apache.calcite.interpreter">Bindables.BindableValues</a></code>, <code><a href="../interpreter/Bindables.BindableWindow.html" title="class in org.apache.calcite.interpreter">Bindables.BindableWindow</a></code>, <code><a href="BiRel.html" title="class in org.apache.calcite.rel">BiRel</a></code>, <code><a href="core/Calc.html" title="class in org.apache.calcite.rel.core">Calc</a></code>, <code><a href="../adapter/cassandra/CassandraFilter.html" title="class in org.apache.calcite.adapter.cassandra">CassandraFilter</a></code>, <code><a href="../adapter/cassandra/CassandraLimit.html" title="class in org.apache.calcite.adapter.cassandra">CassandraLimit</a></code>, <code><a href="../adapter/cassandra/CassandraProject.html" title="class in org.apache.calcite.adapter.cassandra">CassandraProject</a></code>, <code><a href="../adapter/cassandra/CassandraSort.html" title="class in org.apache.calcite.adapter.cassandra">CassandraSort</a></code>, <code><a href="../adapter/cassandra/CassandraTableScan.html" title="class in org.apache.calcite.adapter.cassandra">CassandraTableScan</a></code>, <code><a href="../adapter/cassandra/CassandraToEnumerableConverter.html" title="class in org.apache.calcite.adapter.cassandra">CassandraToEnumerableConverter</a></code>, <code><a href="stream/Chi.html" title="class in org.apache.calcite.rel.stream">Chi</a></code>, <code><a href="core/Collect.html" title="class in org.apache.calcite.rel.core">Collect</a></code>, <code><a href="convert/ConverterImpl.html" title="class in org.apache.calcite.rel.convert">ConverterImpl</a></code>, <code><a href="core/Correlate.html" title="class in org.apache.calcite.rel.core">Correlate</a></code>, <code><a href="../adapter/csv/CsvTableScan.html" title="class in org.apache.calcite.adapter.csv">CsvTableScan</a></code>, <code><a href="../adapter/file/CsvTableScan.html" title="class in org.apache.calcite.adapter.file">CsvTableScan</a></code>, <code><a href="stream/Delta.html" title="class in org.apache.calcite.rel.stream">Delta</a></code>, <code><a href="../adapter/druid/DruidQuery.html" title="class in org.apache.calcite.adapter.druid">DruidQuery</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchAggregate.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchAggregate</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchFilter.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchFilter</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchProject.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchProject</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchSort.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchSort</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchTableScan.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchTableScan</a></code>, <code><a href="../adapter/elasticsearch/ElasticsearchToEnumerableConverter.html" title="class in org.apache.calcite.adapter.elasticsearch">ElasticsearchToEnumerableConverter</a></code>, <code><a href="../adapter/enumerable/EnumerableAggregate.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableAggregate</a></code>, <code><a href="../adapter/enumerable/EnumerableAggregateBase.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableAggregateBase</a></code>, <code><a href="../adapter/enumerable/EnumerableBatchNestedLoopJoin.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableBatchNestedLoopJoin</a></code>, <code><a href="../adapter/enumerable/EnumerableBindable.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableBindable</a></code>, <code><a href="../adapter/enumerable/EnumerableCalc.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableCalc</a></code>, <code><a href="../adapter/enumerable/EnumerableCollect.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableCollect</a></code>, <code><a href="../adapter/enumerable/EnumerableCorrelate.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableCorrelate</a></code>, <code><a href="../adapter/enumerable/EnumerableFilter.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableFilter</a></code>, <code><a href="../adapter/enumerable/EnumerableHashJoin.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableHashJoin</a></code>, <code><a href="../adapter/enumerable/EnumerableInterpretable.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableInterpretable</a></code>, <code><a href="../adapter/enumerable/EnumerableInterpreter.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableInterpreter</a></code>, <code><a href="../adapter/enumerable/EnumerableIntersect.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableIntersect</a></code>, <code><a href="../adapter/enumerable/EnumerableLimit.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableLimit</a></code>, <code><a href="../adapter/enumerable/EnumerableLimitSort.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableLimitSort</a></code>, <code><a href="../adapter/enumerable/EnumerableMatch.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableMatch</a></code>, <code><a href="../adapter/enumerable/EnumerableMergeJoin.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableMergeJoin</a></code>, <code><a href="../adapter/enumerable/EnumerableMergeUnion.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableMergeUnion</a></code>, <code><a href="../adapter/enumerable/EnumerableMinus.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableMinus</a></code>, <code><a href="../adapter/enumerable/EnumerableNestedLoopJoin.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableNestedLoopJoin</a></code>, <code><a href="../adapter/enumerable/EnumerableProject.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableProject</a></code>, <code><a href="../adapter/enumerable/EnumerableRepeatUnion.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableRepeatUnion</a></code>, <code><a href="../adapter/enumerable/EnumerableSort.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableSort</a></code>, <code><a href="../adapter/enumerable/EnumerableSortedAggregate.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableSortedAggregate</a></code>, <code><a href="../adapter/enumerable/EnumerableTableFunctionScan.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableTableFunctionScan</a></code>, <code><a href="../adapter/enumerable/EnumerableTableModify.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableTableModify</a></code>, <code><a href="../adapter/enumerable/EnumerableTableScan.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableTableScan</a></code>, <code><a href="../adapter/enumerable/EnumerableTableSpool.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableTableSpool</a></code>, <code><a href="../adapter/spark/EnumerableToSparkConverter.html" title="class in org.apache.calcite.adapter.spark">EnumerableToSparkConverter</a></code>, <code><a href="../adapter/enumerable/EnumerableUncollect.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableUncollect</a></code>, <code><a href="../adapter/enumerable/EnumerableUnion.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableUnion</a></code>, <code><a href="../adapter/enumerable/EnumerableValues.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableValues</a></code>, <code><a href="../adapter/enumerable/EnumerableWindow.html" title="class in org.apache.calcite.adapter.enumerable">EnumerableWindow</a></code>, <code><a href="core/EquiJoin.html" title="class in org.apache.calcite.rel.core">EquiJoin</a></code>, <code><a href="rules/EquiJoin.html" title="class in org.apache.calcite.rel.rules">EquiJoin</a></code>, <code><a href="core/Exchange.html" title="class in org.apache.calcite.rel.core">Exchange</a></code>, <code><a href="core/Filter.html" title="class in org.apache.calcite.rel.core">Filter</a></code>, <code><a href="../adapter/geode/rel/GeodeAggregate.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeAggregate</a></code>, <code><a href="../adapter/geode/rel/GeodeFilter.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeFilter</a></code>, <code><a href="../adapter/geode/rel/GeodeProject.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeProject</a></code>, <code><a href="../adapter/geode/rel/GeodeSort.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeSort</a></code>, <code><a href="../adapter/geode/rel/GeodeTableScan.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeTableScan</a></code>, <code><a href="../adapter/geode/rel/GeodeToEnumerableConverter.html" title="class in org.apache.calcite.adapter.geode.rel">GeodeToEnumerableConverter</a></code>, <code><a href="../plan/hep/HepRelVertex.html" title="class in org.apache.calcite.plan.hep">HepRelVertex</a></code>, <code><a href="../adapter/innodb/InnodbFilter.html" title="class in org.apache.calcite.adapter.innodb">InnodbFilter</a></code>, <code><a href="../adapter/innodb/InnodbProject.html" title="class in org.apache.calcite.adapter.innodb">InnodbProject</a></code>, <code><a href="../adapter/innodb/InnodbSort.html" title="class in org.apache.calcite.adapter.innodb">InnodbSort</a></code>, <code><a href="../adapter/innodb/InnodbTableScan.html" title="class in org.apache.calcite.adapter.innodb">InnodbTableScan</a></code>, <code><a href="../adapter/innodb/InnodbToEnumerableConverter.html" title="class in org.apache.calcite.adapter.innodb">InnodbToEnumerableConverter</a></code>, <code><a href="../interpreter/InterpretableConverter.html" title="class in org.apache.calcite.interpreter">InterpretableConverter</a></code>, <code><a href="core/Intersect.html" title="class in org.apache.calcite.rel.core">Intersect</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcAggregate.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcAggregate</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcCalc.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcCalc</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcFilter.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcFilter</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcIntersect.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcIntersect</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcJoin.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcJoin</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcMinus.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcMinus</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcProject.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcProject</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcSort.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcSort</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcTableModify.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcTableModify</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcUnion.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcUnion</a></code>, <code><a href="../adapter/jdbc/JdbcRules.JdbcValues.html" title="class in org.apache.calcite.adapter.jdbc">JdbcRules.JdbcValues</a></code>, <code><a href="../adapter/jdbc/JdbcTableScan.html" title="class in org.apache.calcite.adapter.jdbc">JdbcTableScan</a></code>, <code><a href="../adapter/jdbc/JdbcToEnumerableConverter.html" title="class in org.apache.calcite.adapter.jdbc">JdbcToEnumerableConverter</a></code>, <code><a href="../adapter/spark/JdbcToSparkConverter.html" title="class in org.apache.calcite.adapter.spark">JdbcToSparkConverter</a></code>, <code><a href="core/Join.html" title="class in org.apache.calcite.rel.core">Join</a></code>, <code><a href="logical/LogicalAggregate.html" title="class in org.apache.calcite.rel.logical">LogicalAggregate</a></code>, <code><a href="logical/LogicalCalc.html" title="class in org.apache.calcite.rel.logical">LogicalCalc</a></code>, <code><a href="stream/LogicalChi.html" title="class in org.apache.calcite.rel.stream">LogicalChi</a></code>, <code><a href="logical/LogicalCorrelate.html" title="class in org.apache.calcite.rel.logical">LogicalCorrelate</a></code>, <code><a href="stream/LogicalDelta.html" title="class in org.apache.calcite.rel.stream">LogicalDelta</a></code>, <code><a href="logical/LogicalExchange.html" title="class in org.apache.calcite.rel.logical">LogicalExchange</a></code>, <code><a href="logical/LogicalFilter.html" title="class in org.apache.calcite.rel.logical">LogicalFilter</a></code>, <code><a href="logical/LogicalIntersect.html" title="class in org.apache.calcite.rel.logical">LogicalIntersect</a></code>, <code><a href="logical/LogicalJoin.html" title="class in org.apache.calcite.rel.logical">LogicalJoin</a></code>, <code><a href="logical/LogicalMatch.html" title="class in org.apache.calcite.rel.logical">LogicalMatch</a></code>, <code><a href="logical/LogicalMinus.html" title="class in org.apache.calcite.rel.logical">LogicalMinus</a></code>, <code><a href="logical/LogicalProject.html" title="class in org.apache.calcite.rel.logical">LogicalProject</a></code>, <code><a href="logical/LogicalRepeatUnion.html" title="class in org.apache.calcite.rel.logical">LogicalRepeatUnion</a></code>, <code><a href="logical/LogicalSnapshot.html" title="class in org.apache.calcite.rel.logical">LogicalSnapshot</a></code>, <code><a href="logical/LogicalSort.html" title="class in org.apache.calcite.rel.logical">LogicalSort</a></code>, <code><a href="logical/LogicalSortExchange.html" title="class in org.apache.calcite.rel.logical">LogicalSortExchange</a></code>, <code><a href="logical/LogicalTableFunctionScan.html" title="class in org.apache.calcite.rel.logical">LogicalTableFunctionScan</a></code>, <code><a href="logical/LogicalTableModify.html" title="class in org.apache.calcite.rel.logical">LogicalTableModify</a></code>, <code><a href="logical/LogicalTableScan.html" title="class in org.apache.calcite.rel.logical">LogicalTableScan</a></code>, <code><a href="logical/LogicalTableSpool.html" title="class in org.apache.calcite.rel.logical">LogicalTableSpool</a></code>, <code><a href="logical/LogicalUnion.html" title="class in org.apache.calcite.rel.logical">LogicalUnion</a></code>, <code><a href="logical/LogicalValues.html" title="class in org.apache.calcite.rel.logical">LogicalValues</a></code>, <code><a href="logical/LogicalWindow.html" title="class in org.apache.calcite.rel.logical">LogicalWindow</a></code>, <code><a href="core/Match.html" title="class in org.apache.calcite.rel.core">Match</a></code>, <code><a href="core/Minus.html" title="class in org.apache.calcite.rel.core">Minus</a></code>, <code><a href="../adapter/mongodb/MongoAggregate.html" title="class in org.apache.calcite.adapter.mongodb">MongoAggregate</a></code>, <code><a href="../adapter/mongodb/MongoFilter.html" title="class in org.apache.calcite.adapter.mongodb">MongoFilter</a></code>, <code><a href="../adapter/mongodb/MongoProject.html" title="class in org.apache.calcite.adapter.mongodb">MongoProject</a></code>, <code><a href="../adapter/mongodb/MongoSort.html" title="class in org.apache.calcite.adapter.mongodb">MongoSort</a></code>, <code><a href="../adapter/mongodb/MongoTableScan.html" title="class in org.apache.calcite.adapter.mongodb">MongoTableScan</a></code>, <code><a href="../adapter/mongodb/MongoToEnumerableConverter.html" title="class in org.apache.calcite.adapter.mongodb">MongoToEnumerableConverter</a></code>, <code><a href="rules/MultiJoin.html" title="class in org.apache.calcite.rel.rules">MultiJoin</a></code>, <code><a href="convert/NoneConverter.html" title="class in org.apache.calcite.rel.convert">NoneConverter</a></code>, <code><a href="../adapter/pig/PigAggregate.html" title="class in org.apache.calcite.adapter.pig">PigAggregate</a></code>, <code><a href="../adapter/pig/PigFilter.html" title="class in org.apache.calcite.adapter.pig">PigFilter</a></code>, <code><a href="../adapter/pig/PigJoin.html" title="class in org.apache.calcite.adapter.pig">PigJoin</a></code>, <code><a href="../adapter/pig/PigProject.html" title="class in org.apache.calcite.adapter.pig">PigProject</a></code>, <code><a href="../adapter/pig/PigTableScan.html" title="class in org.apache.calcite.adapter.pig">PigTableScan</a></code>, <code><a href="../adapter/pig/PigToEnumerableConverter.html" title="class in org.apache.calcite.adapter.pig">PigToEnumerableConverter</a></code>, <code><a href="core/Project.html" title="class in org.apache.calcite.rel.core">Project</a></code>, <code><a href="../plan/volcano/RelSubset.html" title="class in org.apache.calcite.plan.volcano">RelSubset</a></code>, <code><a href="core/RepeatUnion.html" title="class in org.apache.calcite.rel.core">RepeatUnion</a></code>, <code><a href="core/Sample.html" title="class in org.apache.calcite.rel.core">Sample</a></code>, <code><a href="core/SetOp.html" title="class in org.apache.calcite.rel.core">SetOp</a></code>, <code><a href="SingleRel.html" title="class in org.apache.calcite.rel">SingleRel</a></code>, <code><a href="core/Snapshot.html" title="class in org.apache.calcite.rel.core">Snapshot</a></code>, <code><a href="core/Sort.html" title="class in org.apache.calcite.rel.core">Sort</a></code>, <code><a href="core/SortExchange.html" title="class in org.apache.calcite.rel.core">SortExchange</a></code>, <code><a href="../adapter/spark/SparkRules.SparkCalc.html" title="class in org.apache.calcite.adapter.spark">SparkRules.SparkCalc</a></code>, <code><a href="../adapter/spark/SparkRules.SparkValues.html" title="class in org.apache.calcite.adapter.spark">SparkRules.SparkValues</a></code>, <code><a href="../adapter/spark/SparkToEnumerableConverter.html" title="class in org.apache.calcite.adapter.spark">SparkToEnumerableConverter</a></code>, <code><a href="../adapter/splunk/SplunkTableScan.html" title="class in org.apache.calcite.adapter.splunk">SplunkTableScan</a></code>, <code><a href="core/Spool.html" title="class in org.apache.calcite.rel.core">Spool</a></code>, <code><a href="../test/SqlToRelTestBase.CustomCorrelate.html" title="class in org.apache.calcite.test">SqlToRelTestBase.CustomCorrelate</a></code>, <code><a href="../schema/impl/StarTable.StarTableScan.html" title="class in org.apache.calcite.schema.impl">StarTable.StarTableScan</a></code>, <code><a href="core/TableFunctionScan.html" title="class in org.apache.calcite.rel.core">TableFunctionScan</a></code>, <code><a href="core/TableModify.html" title="class in org.apache.calcite.rel.core">TableModify</a></code>, <code><a href="core/TableScan.html" title="class in org.apache.calcite.rel.core">TableScan</a></code>, <code><a href="core/TableSpool.html" title="class in org.apache.calcite.rel.core">TableSpool</a></code>, <code><a href="core/Uncollect.html" title="class in org.apache.calcite.rel.core">Uncollect</a></code>, <code><a href="core/Union.html" title="class in org.apache.calcite.rel.core">Union</a></code>, <code><a href="core/Values.html" title="class in org.apache.calcite.rel.core">Values</a></code>, <code><a href="core/Window.html" title="class in org.apache.calcite.rel.core">Window</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">RelNode</span><span class="extends-implements">
extends <a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Cloneable.html" title="class or interface in java.lang" class="external-link">Cloneable</a></span></div>
<div class="block">A <code>RelNode</code> is a relational expression.
<p>Relational expressions process data, so their names are typically verbs:
Sort, Join, Project, Filter, Scan, Sample.
<p>A relational expression is not a scalar expression; see
<a href="../sql/SqlNode.html" title="class in org.apache.calcite.sql"><code>SqlNode</code></a> and <a href="../rex/RexNode.html" title="class in org.apache.calcite.rex"><code>RexNode</code></a>.</p>
<p>If this type of relational expression has some particular planner rules,
it should implement the <em>public static</em> method
<a href="AbstractRelNode.html#register(org.apache.calcite.plan.RelOptPlanner)"><code>AbstractRelNode.register(org.apache.calcite.plan.RelOptPlanner)</code></a>.</p>
<p>When a relational expression comes to be implemented, the system allocates
a <a href="../plan/RelImplementor.html" title="interface in org.apache.calcite.plan"><code>RelImplementor</code></a> to manage the process. Every
implementable relational expression has a <a href="../plan/RelTraitSet.html" title="class in org.apache.calcite.plan"><code>RelTraitSet</code></a> describing its
physical attributes. The RelTraitSet always contains a <a href="../plan/Convention.html" title="interface in org.apache.calcite.plan"><code>Convention</code></a>
describing how the expression passes data to its consuming
relational expression, but may contain other traits, including some applied
externally. Because traits can be applied externally, implementations of
RelNode should never assume the size or contents of their trait set (beyond
those traits configured by the RelNode itself).</p>
<p>For each calling-convention, there is a corresponding sub-interface of
RelNode. For example,
<code>org.apache.calcite.adapter.enumerable.EnumerableRel</code>
has operations to manage the conversion to a graph of
<code>org.apache.calcite.adapter.enumerable.EnumerableConvention</code>
calling-convention, and it interacts with a
<code>EnumerableRelImplementor</code>.</p>
<p>A relational expression is only required to implement its
calling-convention's interface when it is actually implemented, that is,
converted into a plan/program. This means that relational expressions which
cannot be implemented, such as converters, are not required to implement
their convention's interface.</p>
<p>Every relational expression must derive from <a href="AbstractRelNode.html" title="class in org.apache.calcite.rel"><code>AbstractRelNode</code></a>. (Why
have the <code>RelNode</code> interface, then? We need a root interface,
because an interface can only derive from an interface.)</p></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">Interface</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="RelNode.Context.html" class="type-name-link" title="interface in org.apache.calcite.rel">RelNode.Context</a></code></div>
<div class="col-last even-row-color">
<div class="block">Context of a relational expression, for purposes of checking validity.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button><button id="method-summary-table-tab5" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab5', 3)" class="table-tab">Default Methods</button><button id="method-summary-table-tab6" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab6', 3)" class="table-tab">Deprecated Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#accept(org.apache.calcite.rel.RelShuttle)" class="member-name-link">accept</a><wbr>(<a href="RelShuttle.html" title="interface in org.apache.calcite.rel">RelShuttle</a>&nbsp;shuttle)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Accepts a visit from a shuttle.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#accept(org.apache.calcite.rex.RexShuttle)" class="member-name-link">accept</a><wbr>(<a href="../rex/RexShuttle.html" title="class in org.apache.calcite.rex">RexShuttle</a>&nbsp;shuttle)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Accepts a visit from a shuttle.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#childrenAccept(org.apache.calcite.rel.RelVisitor)" class="member-name-link">childrenAccept</a><wbr>(<a href="RelVisitor.html" title="class in org.apache.calcite.rel">RelVisitor</a>&nbsp;visitor)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Interacts with the <a href="RelVisitor.html" title="class in org.apache.calcite.rel"><code>RelVisitor</code></a> in a
<a href="../util/Glossary.html#VISITOR_PATTERN"><code>visitor pattern</code></a> to
traverse the tree of relational expressions.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#collectVariablesSet(java.util.Set)" class="member-name-link">collectVariablesSet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;&nbsp;variableSet)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Collects variables set by this expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#collectVariablesUsed(java.util.Set)" class="member-name-link">collectVariablesUsed</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;&nbsp;variableSet)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Collects variables known to be used by this expression or its
descendants.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>@Nullable <a href="../plan/RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#computeSelfCost(org.apache.calcite.plan.RelOptPlanner,org.apache.calcite.rel.metadata.RelMetadataQuery)" class="member-name-link">computeSelfCost</a><wbr>(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner,
<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the cost of this plan (not including children).</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#copy(org.apache.calcite.plan.RelTraitSet,java.util.List)" class="member-name-link">copy</a><wbr>(<a href="../plan/RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traitSet,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;&nbsp;inputs)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Creates a copy of this relational expression, perhaps changing traits and
inputs.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#deepEquals(java.lang.Object)" class="member-name-link">deepEquals</a><wbr>(@Nullable <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>&nbsp;obj)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Deep equality check for RelNode digest.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#deepHashCode()" class="member-name-link">deepHashCode</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Compute deep hash code for RelNode digest.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>double</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#estimateRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery)" class="member-name-link">estimateRowCount</a><wbr>(<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns an estimate of the number of rows this relational expression will
return.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#explain()" class="member-name-link">explain</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Returns a relational expression string of this <code>RelNode</code>.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#explain(org.apache.calcite.rel.RelWriter)" class="member-name-link">explain</a><wbr>(<a href="RelWriter.html" title="interface in org.apache.calcite.rel">RelWriter</a>&nbsp;pw)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Describes the inputs and attributes of this relational expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#fieldIsNullable(int)" class="member-name-link">fieldIsNullable</a><wbr>(int&nbsp;i)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Returns whether a field is nullable.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>@Nullable <a href="../plan/Convention.html" title="interface in org.apache.calcite.plan">Convention</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getConvention()" class="member-name-link">getConvention</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Return the CallingConvention trait from this RelNode's
<a href="../plan/RelOptNode.html#getTraitSet()"><code>trait set</code></a>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>@Nullable <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getCorrelVariable()" class="member-name-link">getCorrelVariable</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the name of the variable which is to be implicitly set at runtime
each time a row is returned from the first input of this relational
expression; or null if there is no variable.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#getDigest()" class="member-name-link">getDigest</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Returns a digest string of this <code>RelNode</code>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getExpectedInputRowType(int)" class="member-name-link">getExpectedInputRowType</a><wbr>(int&nbsp;ordinalInParent)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the type of the rows expected for an input.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getInput(int)" class="member-name-link">getInput</a><wbr>(int&nbsp;i)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the <code>i</code><sup>th</sup> input relational expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getInputs()" class="member-name-link">getInputs</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns an array of this relational expression's inputs.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="../plan/RelDigest.html" title="interface in org.apache.calcite.plan">RelDigest</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getRelDigest()" class="member-name-link">getRelDigest</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns a digest of this <code>RelNode</code>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getRelTypeName()" class="member-name-link">getRelTypeName</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the name of this relational expression's class, sans package
name, for use in explain.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getRowType()" class="member-name-link">getRowType</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the type of the rows returned by this relational expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>@Nullable <a href="../plan/RelOptTable.html" title="interface in org.apache.calcite.plan">RelOptTable</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getTable()" class="member-name-link">getTable</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">If this relational expression represents an access to a table, returns
that table, otherwise returns null.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getVariablesSet()" class="member-name-link">getVariablesSet</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the variables that are set in this relational
expression but also used and therefore not available to parents of this
relational expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code>default boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5"><code><a href="#isEnforcer()" class="member-name-link">isEnforcer</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab5">
<div class="block">Indicates whether it is an enforcer operator, e.g.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#isValid(org.apache.calcite.util.Litmus,org.apache.calcite.rel.RelNode.Context)" class="member-name-link">isValid</a><wbr>(<a href="../util/Litmus.html" title="interface in org.apache.calcite.util">Litmus</a>&nbsp;litmus,
@Nullable <a href="RelNode.Context.html" title="interface in org.apache.calcite.rel">RelNode.Context</a>&nbsp;context)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns whether this relational expression is valid.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3 method-summary-table-tab6"><code>&lt;@Nullable M extends @Nullable <a href="metadata/Metadata.html" title="interface in org.apache.calcite.rel.metadata">Metadata</a>&gt;<br>M</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3 method-summary-table-tab6"><code><a href="#metadata(java.lang.Class,org.apache.calcite.rel.metadata.RelMetadataQuery)" class="member-name-link">metadata</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;@Nullable M&gt;&nbsp;metadataClass,
<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3 method-summary-table-tab6">
<div class="block"><span class="deprecated-label">Deprecated.</span>
<div class="deprecation-comment">Use <a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata"><code>RelMetadataQuery</code></a> via <a href="../plan/RelOptNode.html#getCluster()"><code>RelOptNode.getCluster()</code></a>.</div>
</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#onRegister(org.apache.calcite.plan.RelOptPlanner)" class="member-name-link">onRegister</a><wbr>(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Receives notification that this expression is about to be registered.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#recomputeDigest()" class="member-name-link">recomputeDigest</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Recomputes the digest.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#register(org.apache.calcite.plan.RelOptPlanner)" class="member-name-link">register</a><wbr>(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Registers any special rules specific to this kind of relational
expression.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#replaceInput(int,org.apache.calcite.rel.RelNode)" class="member-name-link">replaceInput</a><wbr>(int&nbsp;ordinalInParent,
<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;p)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Replaces the <code>ordinalInParent</code><sup>th</sup> input.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.calcite.plan.RelOptNode">Methods inherited from interface&nbsp;org.apache.calcite.plan.<a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a></h3>
<code><a href="../plan/RelOptNode.html#getCluster()">getCluster</a>, <a href="../plan/RelOptNode.html#getDescription()">getDescription</a>, <a href="../plan/RelOptNode.html#getId()">getId</a>, <a href="../plan/RelOptNode.html#getTraitSet()">getTraitSet</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getConvention()">
<h3>getConvention</h3>
<div class="member-signature"><span class="annotations">@Pure
</span><span class="return-type">@Nullable <a href="../plan/Convention.html" title="interface in org.apache.calcite.plan">Convention</a></span>&nbsp;<span class="element-name">getConvention</span>()</div>
<div class="block">Return the CallingConvention trait from this RelNode's
<a href="../plan/RelOptNode.html#getTraitSet()"><code>trait set</code></a>.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>this RelNode's CallingConvention</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getCorrelVariable()">
<h3>getCorrelVariable</h3>
<div class="member-signature"><span class="return-type">@Nullable <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">getCorrelVariable</span>()</div>
<div class="block">Returns the name of the variable which is to be implicitly set at runtime
each time a row is returned from the first input of this relational
expression; or null if there is no variable.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Name of correlating variable, or null</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getInput(int)">
<h3>getInput</h3>
<div class="member-signature"><span class="return-type"><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="element-name">getInput</span><wbr><span class="parameters">(int&nbsp;i)</span></div>
<div class="block">Returns the <code>i</code><sup>th</sup> input relational expression.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>i</code> - Ordinal of input</dd>
<dt>Returns:</dt>
<dd><code>i</code><sup>th</sup> input</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getRowType()">
<h3>getRowType</h3>
<div class="member-signature"><span class="return-type"><a href="type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></span>&nbsp;<span class="element-name">getRowType</span>()</div>
<div class="block">Returns the type of the rows returned by this relational expression.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../plan/RelOptNode.html#getRowType()">getRowType</a></code>&nbsp;in interface&nbsp;<code><a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getExpectedInputRowType(int)">
<h3>getExpectedInputRowType</h3>
<div class="member-signature"><span class="return-type"><a href="type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></span>&nbsp;<span class="element-name">getExpectedInputRowType</span><wbr><span class="parameters">(int&nbsp;ordinalInParent)</span></div>
<div class="block">Returns the type of the rows expected for an input. Defaults to
<a href="#getRowType()"><code>getRowType()</code></a>.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>ordinalInParent</code> - input's 0-based ordinal with respect to this
parent rel</dd>
<dt>Returns:</dt>
<dd>expected row type</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getInputs()">
<h3>getInputs</h3>
<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;</span>&nbsp;<span class="element-name">getInputs</span>()</div>
<div class="block">Returns an array of this relational expression's inputs. If there are no
inputs, returns an empty list, not <code>null</code>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../plan/RelOptNode.html#getInputs()">getInputs</a></code>&nbsp;in interface&nbsp;<code><a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a></code></dd>
<dt>Returns:</dt>
<dd>Array of this relational expression's inputs</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="estimateRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery)">
<h3>estimateRowCount</h3>
<div class="member-signature"><span class="return-type">double</span>&nbsp;<span class="element-name">estimateRowCount</span><wbr><span class="parameters">(<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</span></div>
<div class="block">Returns an estimate of the number of rows this relational expression will
return.
<p>NOTE jvs 29-Mar-2006: Don't call this method directly. Instead, use
<a href="metadata/RelMetadataQuery.html#getRowCount(org.apache.calcite.rel.RelNode)"><code>RelMetadataQuery.getRowCount(org.apache.calcite.rel.RelNode)</code></a>, which gives plugins a chance to
override the rel's default ideas about row count.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>mq</code> - Metadata query</dd>
<dt>Returns:</dt>
<dd>Estimate of the number of rows this relational expression will
return</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getVariablesSet()">
<h3>getVariablesSet</h3>
<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;</span>&nbsp;<span class="element-name">getVariablesSet</span>()</div>
<div class="block">Returns the variables that are set in this relational
expression but also used and therefore not available to parents of this
relational expression.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Names of variables which are set in this relational
expression</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="collectVariablesUsed(java.util.Set)">
<h3>collectVariablesUsed</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">collectVariablesUsed</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;&nbsp;variableSet)</span></div>
<div class="block">Collects variables known to be used by this expression or its
descendants. By default, no such information is available and must be
derived by analyzing sub-expressions, but some optimizer implementations
may insert special expressions which remember such information.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>variableSet</code> - receives variables used</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="collectVariablesSet(java.util.Set)">
<h3>collectVariablesSet</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">collectVariablesSet</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="core/CorrelationId.html" title="class in org.apache.calcite.rel.core">CorrelationId</a>&gt;&nbsp;variableSet)</span></div>
<div class="block">Collects variables set by this expression.
TODO: is this required?</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>variableSet</code> - receives variables known to be set by</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="childrenAccept(org.apache.calcite.rel.RelVisitor)">
<h3>childrenAccept</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">childrenAccept</span><wbr><span class="parameters">(<a href="RelVisitor.html" title="class in org.apache.calcite.rel">RelVisitor</a>&nbsp;visitor)</span></div>
<div class="block">Interacts with the <a href="RelVisitor.html" title="class in org.apache.calcite.rel"><code>RelVisitor</code></a> in a
<a href="../util/Glossary.html#VISITOR_PATTERN"><code>visitor pattern</code></a> to
traverse the tree of relational expressions.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>visitor</code> - Visitor that will traverse the tree of relational
expressions</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="computeSelfCost(org.apache.calcite.plan.RelOptPlanner,org.apache.calcite.rel.metadata.RelMetadataQuery)">
<h3>computeSelfCost</h3>
<div class="member-signature"><span class="return-type">@Nullable <a href="../plan/RelOptCost.html" title="interface in org.apache.calcite.plan">RelOptCost</a></span>&nbsp;<span class="element-name">computeSelfCost</span><wbr><span class="parameters">(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner,
<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</span></div>
<div class="block">Returns the cost of this plan (not including children). The base
implementation throws an error; derived classes should override.
<p>NOTE jvs 29-Mar-2006: Don't call this method directly. Instead, use
<a href="metadata/RelMetadataQuery.html#getNonCumulativeCost(org.apache.calcite.rel.RelNode)"><code>RelMetadataQuery.getNonCumulativeCost(org.apache.calcite.rel.RelNode)</code></a>, which gives plugins a
chance to override the rel's default ideas about cost.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>planner</code> - Planner for cost calculation</dd>
<dd><code>mq</code> - Metadata query</dd>
<dt>Returns:</dt>
<dd>Cost of this plan (not including children)</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="metadata(java.lang.Class,org.apache.calcite.rel.metadata.RelMetadataQuery)">
<h3>metadata</h3>
<div class="member-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Deprecated.html" title="class or interface in java.lang" class="external-link">@Deprecated</a>
</span><span class="type-parameters">&lt;@Nullable M extends @Nullable <a href="metadata/Metadata.html" title="interface in org.apache.calcite.rel.metadata">Metadata</a>&gt;</span>&nbsp;<span class="return-type">M</span>&nbsp;<span class="element-name">metadata</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a>&lt;@Nullable M&gt;&nbsp;metadataClass,
<a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span>
<div class="deprecation-comment">Use <a href="metadata/RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata"><code>RelMetadataQuery</code></a> via <a href="../plan/RelOptNode.html#getCluster()"><code>RelOptNode.getCluster()</code></a>.</div>
</div>
<div class="block">Returns a metadata interface.</div>
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>M</code> - Type of metadata being requested</dd>
<dt>Parameters:</dt>
<dd><code>metadataClass</code> - Metadata interface</dd>
<dd><code>mq</code> - Metadata query</dd>
<dt>Returns:</dt>
<dd>Metadata object that supplies the desired metadata (never null,
although if the information is not present the metadata object may
return null from all methods)</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="explain(org.apache.calcite.rel.RelWriter)">
<h3>explain</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">explain</span><wbr><span class="parameters">(<a href="RelWriter.html" title="interface in org.apache.calcite.rel">RelWriter</a>&nbsp;pw)</span></div>
<div class="block">Describes the inputs and attributes of this relational expression.
Each node should call <code>super.explain</code>, then call the
<a href="RelWriter.html#input(java.lang.String,org.apache.calcite.rel.RelNode)"><code>RelWriter.input(String, RelNode)</code></a>
and
<a href="RelWriter.html#item(java.lang.String,java.lang.Object)"><code>RelWriter.item(String, Object)</code></a>
methods for each input and attribute.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>pw</code> - Plan writer</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="explain()">
<h3>explain</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">explain</span>()</div>
<div class="block">Returns a relational expression string of this <code>RelNode</code>.
The string returned is the same as
<a href="../plan/RelOptUtil.html#toString(org.apache.calcite.rel.RelNode)"><code>RelOptUtil.toString(org.apache.calcite.rel.RelNode)</code></a>.
This method is intended mainly for use while debugging in an IDE,
as a convenient short-hand for RelOptUtil.toString.
We recommend that classes implementing this interface
do not override this method.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Relational expression string of this <code>RelNode</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="onRegister(org.apache.calcite.plan.RelOptPlanner)">
<h3>onRegister</h3>
<div class="member-signature"><span class="return-type"><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="element-name">onRegister</span><wbr><span class="parameters">(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner)</span></div>
<div class="block">Receives notification that this expression is about to be registered. The
implementation of this method must at least register all child
expressions.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>planner</code> - Planner that plans this relational node</dd>
<dt>Returns:</dt>
<dd>Relational expression that should be used by the planner</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getDigest()">
<h3>getDigest</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">getDigest</span>()</div>
<div class="block">Returns a digest string of this <code>RelNode</code>.
<p>Each call creates a new digest string,
so don't forget to cache the result if necessary.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../plan/RelOptNode.html#getDigest()">getDigest</a></code>&nbsp;in interface&nbsp;<code><a href="../plan/RelOptNode.html" title="interface in org.apache.calcite.plan">RelOptNode</a></code></dd>
<dt>Returns:</dt>
<dd>Digest string of this <code>RelNode</code></dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#getRelDigest()"><code>getRelDigest()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getRelDigest()">
<h3>getRelDigest</h3>
<div class="member-signature"><span class="annotations">@API(since="1.24",
status=INTERNAL)
</span><span class="return-type"><a href="../plan/RelDigest.html" title="interface in org.apache.calcite.plan">RelDigest</a></span>&nbsp;<span class="element-name">getRelDigest</span>()</div>
<div class="block">Returns a digest of this <code>RelNode</code>.
<p>INTERNAL USE ONLY. For use by the planner.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Digest of this <code>RelNode</code></dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#getDigest()"><code>getDigest()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="recomputeDigest()">
<h3>recomputeDigest</h3>
<div class="member-signature"><span class="annotations">@API(since="1.24",
status=INTERNAL)
</span><span class="return-type">void</span>&nbsp;<span class="element-name">recomputeDigest</span>()</div>
<div class="block">Recomputes the digest.
<p>INTERNAL USE ONLY. For use by the planner.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#getDigest()"><code>getDigest()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="deepEquals(java.lang.Object)">
<h3>deepEquals</h3>
<div class="member-signature"><span class="annotations">@EnsuresNonNullIf(expression="#1",
result=true)
</span><span class="return-type">boolean</span>&nbsp;<span class="element-name">deepEquals</span><wbr><span class="parameters">(@Nullable <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>&nbsp;obj)</span></div>
<div class="block">Deep equality check for RelNode digest.
<p>By default this method collects digest attributes from
explain terms, then compares each attribute pair.</p></div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Whether the 2 RelNodes are equivalent or have the same digest.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#deepHashCode()"><code>deepHashCode()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="deepHashCode()">
<h3>deepHashCode</h3>
<div class="member-signature"><span class="return-type">int</span>&nbsp;<span class="element-name">deepHashCode</span>()</div>
<div class="block">Compute deep hash code for RelNode digest.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#deepEquals(java.lang.Object)"><code>deepEquals(Object)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="replaceInput(int,org.apache.calcite.rel.RelNode)">
<h3>replaceInput</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">replaceInput</span><wbr><span class="parameters">(int&nbsp;ordinalInParent,
<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;p)</span></div>
<div class="block">Replaces the <code>ordinalInParent</code><sup>th</sup> input. You must
override this method if you override <a href="#getInputs()"><code>getInputs()</code></a>.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>ordinalInParent</code> - Position of the child input, 0 is the first</dd>
<dd><code>p</code> - New node that should be put at position <code>ordinalInParent</code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getTable()">
<h3>getTable</h3>
<div class="member-signature"><span class="return-type">@Nullable <a href="../plan/RelOptTable.html" title="interface in org.apache.calcite.plan">RelOptTable</a></span>&nbsp;<span class="element-name">getTable</span>()</div>
<div class="block">If this relational expression represents an access to a table, returns
that table, otherwise returns null.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>If this relational expression represents an access to a table,
returns that table, otherwise returns null</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getRelTypeName()">
<h3>getRelTypeName</h3>
<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">getRelTypeName</span>()</div>
<div class="block">Returns the name of this relational expression's class, sans package
name, for use in explain. For example, for a <code>
org.apache.calcite.rel.ArrayRel.ArrayReader</code>, this method returns
"ArrayReader".</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Name of this relational expression's class, sans package name,
for use in explain</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="isValid(org.apache.calcite.util.Litmus,org.apache.calcite.rel.RelNode.Context)">
<h3>isValid</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name">isValid</span><wbr><span class="parameters">(<a href="../util/Litmus.html" title="interface in org.apache.calcite.util">Litmus</a>&nbsp;litmus,
@Nullable <a href="RelNode.Context.html" title="interface in org.apache.calcite.rel">RelNode.Context</a>&nbsp;context)</span></div>
<div class="block">Returns whether this relational expression is valid.
<p>If assertions are enabled, this method is typically called with <code>
litmus</code> = <code>THROW</code>, as follows:
<blockquote>
<pre>assert rel.isValid(Litmus.THROW)</pre>
</blockquote>
<p>This signals that the method can throw an <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AssertionError.html" title="class or interface in java.lang" class="external-link"><code>AssertionError</code></a> if it
is not valid.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>litmus</code> - What to do if invalid</dd>
<dd><code>context</code> - Context for validity checking</dd>
<dt>Returns:</dt>
<dd>Whether relational expression is valid</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AssertionError.html" title="class or interface in java.lang" class="external-link">AssertionError</a></code> - if this relational expression is invalid and
litmus is THROW</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="copy(org.apache.calcite.plan.RelTraitSet,java.util.List)">
<h3>copy</h3>
<div class="member-signature"><span class="return-type"><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="element-name">copy</span><wbr><span class="parameters">(<a href="../plan/RelTraitSet.html" title="class in org.apache.calcite.plan">RelTraitSet</a>&nbsp;traitSet,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&gt;&nbsp;inputs)</span></div>
<div class="block">Creates a copy of this relational expression, perhaps changing traits and
inputs.
<p>Sub-classes with other important attributes are encouraged to create
variants of this method with more parameters.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>traitSet</code> - Trait set</dd>
<dd><code>inputs</code> - Inputs</dd>
<dt>Returns:</dt>
<dd>Copy of this relational expression, substituting traits and
inputs</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="register(org.apache.calcite.plan.RelOptPlanner)">
<h3>register</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">register</span><wbr><span class="parameters">(<a href="../plan/RelOptPlanner.html" title="interface in org.apache.calcite.plan">RelOptPlanner</a>&nbsp;planner)</span></div>
<div class="block">Registers any special rules specific to this kind of relational
expression.
<p>The planner calls this method this first time that it sees a
relational expression of this class. The derived class should call
<a href="../plan/RelOptPlanner.html#addRule(org.apache.calcite.plan.RelOptRule)"><code>RelOptPlanner.addRule(org.apache.calcite.plan.RelOptRule)</code></a> for each rule, and
then call <code>super.register</code>.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>planner</code> - Planner to be used to register additional relational
expressions</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="isEnforcer()">
<h3>isEnforcer</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isEnforcer</span>()</div>
<div class="block">Indicates whether it is an enforcer operator, e.g. PhysicalSort,
PhysicalHashDistribute, etc. As an enforcer, the operator must be
created only when required traitSet is not satisfied by its input.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>Whether it is an enforcer operator</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="accept(org.apache.calcite.rel.RelShuttle)">
<h3>accept</h3>
<div class="member-signature"><span class="return-type"><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="element-name">accept</span><wbr><span class="parameters">(<a href="RelShuttle.html" title="interface in org.apache.calcite.rel">RelShuttle</a>&nbsp;shuttle)</span></div>
<div class="block">Accepts a visit from a shuttle.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>shuttle</code> - Shuttle</dd>
<dt>Returns:</dt>
<dd>A copy of this node incorporating changes made by the shuttle to
this node's children</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="accept(org.apache.calcite.rex.RexShuttle)">
<h3>accept</h3>
<div class="member-signature"><span class="return-type"><a href="RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a></span>&nbsp;<span class="element-name">accept</span><wbr><span class="parameters">(<a href="../rex/RexShuttle.html" title="class in org.apache.calcite.rex">RexShuttle</a>&nbsp;shuttle)</span></div>
<div class="block">Accepts a visit from a shuttle. If the shuttle updates expression, then
a copy of the relation should be created. This new relation might have
a different row-type.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>shuttle</code> - Shuttle</dd>
<dt>Returns:</dt>
<dd>A copy of this node incorporating changes made by the shuttle to
this node's children</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="fieldIsNullable(int)">
<h3>fieldIsNullable</h3>
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">fieldIsNullable</span><wbr><span class="parameters">(int&nbsp;i)</span></div>
<div class="block">Returns whether a field is nullable.</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>