blob: cebd3b9f3ec042da8c9d1c07aa6e014d9f7c2d14 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>RelMdUtil (Apache Calcite calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.calcite.rel.metadata, class: RelMdUtil">
<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.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../../../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flexBox">
<header role="banner" class="flexHeader">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">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">Help</a></li>
</ul>
<div class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="skipNav"><a id="skip.navbar.top">
<!-- -->
</a></div>
</nav>
</header>
<div class="flexContent">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.rel.metadata</a></div>
<h1 title="Class RelMdUtil" class="title">Class RelMdUtil</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">java.lang.Object</a>
<div class="inheritance">org.apache.calcite.rel.metadata.RelMdUtil</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">RelMdUtil</span>
extends <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></pre>
<div class="block">RelMdUtil provides utility methods used by the metadata provider methods.</div>
</section>
<section class="summary">
<ul class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../sql/SqlFunction.html" title="class in org.apache.calcite.sql">SqlFunction</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARTIFICIAL_SELECTIVITY_FUNC">ARTIFICIAL_SELECTIVITY_FUNC</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addEpsilon(double)">addEpsilon</a></span>&#8203;(double&nbsp;d)</code></th>
<td class="colLast">
<div class="block">Add an epsilon to the value passed in.</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsDefinitelyUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsDefinitelyUnique</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsDefinitelyUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">areColumnsDefinitelyUnique</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;colMask)</code></th>
<td class="colLast">
<div class="block">Returns true if the columns represented in a bit mask are definitely
known to form a unique column set.</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsDefinitelyUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsDefinitelyUniqueWhenNullsFiltered</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsDefinitelyUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">areColumnsDefinitelyUniqueWhenNullsFiltered</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;colMask)</code></th>
<td class="colLast">
<div class="block">Returns true if the columns represented in a bit mask are definitely
known to form a unique column set, when nulls have been filtered from
the columns.</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang" class="externalLink">Boolean</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsUnique</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang" class="externalLink">Boolean</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areColumnsUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsUniqueWhenNullsFiltered</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#capInfinity(java.lang.Double)">capInfinity</a></span>&#8203;(<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;d)</code></th>
<td class="colLast">
<div class="block">Caps a double value at Double.MAX_VALUE if it's currently infinity</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#cardOfProjExpr(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Project,org.apache.calcite.rex.RexNode)">cardOfProjExpr</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&nbsp;rel,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;expr)</code></th>
<td class="colLast">
<div class="block">Computes the cardinality of a particular expression from the projection
list.</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkInputForCollationAndLimit(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelCollation,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">checkInputForCollationAndLimit</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;input,
<a href="../RelCollation.html" title="interface in org.apache.calcite.rel">RelCollation</a>&nbsp;collation,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;offset,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;fetch)</code></th>
<td class="colLast">
<div class="block">Returns whether a relational expression is already sorted and has fewer
rows than the sum of offset and limit.</div>
</td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearCache(org.apache.calcite.rel.RelNode)">clearCache</a></span>&#8203;(<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Removes cached metadata values for specified RelNode.</div>
</td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeSemiJoinSelectivity(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,java.util.List,java.util.List)">computeSemiJoinSelectivity</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;factRel,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;dimRel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a>&gt;&nbsp;factKeyList,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a>&gt;&nbsp;dimKeyList)</code></th>
<td class="colLast">
<div class="block">Computes the selectivity of a semijoin filter if it is applied on a fact
table.</div>
</td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeSemiJoinSelectivity(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.core.Join)">computeSemiJoinSelectivity</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;factRel,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;dimRel,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Computes the selectivity of a semijoin filter if it is applied on a fact
table.</div>
</td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#estimateFilteredRows(org.apache.calcite.rel.RelNode,org.apache.calcite.rex.RexNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">estimateFilteredRows</a></span>&#8203;(<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;child,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#estimateFilteredRows(org.apache.calcite.rel.RelNode,org.apache.calcite.rex.RexProgram,org.apache.calcite.rel.metadata.RelMetadataQuery)">estimateFilteredRows</a></span>&#8203;(<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;child,
<a href="../../rex/RexProgram.html" title="class in org.apache.calcite.rex">RexProgram</a>&nbsp;program,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinDistinctRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.core.JoinRelType,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rex.RexNode,boolean)">getJoinDistinctRowCount</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;joinRel,
<a href="../core/JoinRelType.html" title="enum in org.apache.calcite.rel.core">JoinRelType</a>&nbsp;joinType,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate,
boolean&nbsp;useMaxNdv)</code></th>
<td class="colLast">
<div class="block">Computes the number of distinct rows for a set of keys returned from a
join.</div>
</td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinPopulationSize(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">getJoinPopulationSize</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;join_,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey)</code></th>
<td class="colLast">
<div class="block">Computes the population size for a set of keys returned from a join.</div>
</td>
</tr>
<tr class="rowColor" id="i17">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getJoinRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Join,org.apache.calcite.rex.RexNode)">getJoinRowCount</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;join,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition)</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</td>
</tr>
<tr class="altColor" id="i18">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMinusRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Minus)">getMinusRowCount</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Minus.html" title="class in org.apache.calcite.rel.core">Minus</a>&nbsp;minus)</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Minus.html" title="class in org.apache.calcite.rel.core"><code>Minus</code></a>.</div>
</td>
</tr>
<tr class="rowColor" id="i19">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSelectivityValue(org.apache.calcite.rex.RexNode)">getSelectivityValue</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;artificialSelectivityFuncNode)</code></th>
<td class="colLast">
<div class="block">Returns the selectivity value stored in a call.</div>
</td>
</tr>
<tr class="altColor" id="i20">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSemiJoinDistinctRowCount(org.apache.calcite.rel.core.Join,org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rex.RexNode)">getSemiJoinDistinctRowCount</a></span>&#8203;(<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;semiJoinRel,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</code></th>
<td class="colLast">
<div class="block">Computes the number of distinct rows for a set of keys returned from a
semi-join.</div>
</td>
</tr>
<tr class="rowColor" id="i21">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getUnionAllRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Union)">getUnionAllRowCount</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core">Union</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>
(before duplicates are eliminated).</div>
</td>
</tr>
<tr class="altColor" id="i22">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#guessSelectivity(org.apache.calcite.rex.RexNode)">guessSelectivity</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</code></th>
<td class="colLast">
<div class="block">Returns default estimates for selectivities, in the absence of stats.</div>
</td>
</tr>
<tr class="rowColor" id="i23">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#guessSelectivity(org.apache.calcite.rex.RexNode,boolean)">guessSelectivity</a></span>&#8203;(<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate,
boolean&nbsp;artificialOnly)</code></th>
<td class="colLast">
<div class="block">Returns default estimates for selectivities, in the absence of stats.</div>
</td>
</tr>
<tr class="altColor" id="i24">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#linear(int,int,int,double,double)">linear</a></span>&#8203;(int&nbsp;x,
int&nbsp;minX,
int&nbsp;maxX,
double&nbsp;minY,
double&nbsp;maxY)</code></th>
<td class="colLast">
<div class="block">Returns a point on a line.</div>
</td>
</tr>
<tr class="rowColor" id="i25">
<td class="colFirst"><code>static <a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#makeSemiJoinSelectivityRexNode(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Join)">makeSemiJoinSelectivityRexNode</a></span>&#8203;(<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;rel)</code></th>
<td class="colLast">
<div class="block">Creates a RexNode that stores a selectivity value corresponding to the
selectivity of a semijoin.</div>
</td>
</tr>
<tr class="altColor" id="i26">
<td class="colFirst"><code>static <a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#minusPreds(org.apache.calcite.rex.RexBuilder,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">minusPreds</a></span>&#8203;(<a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred1,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred2)</code></th>
<td class="colLast">
<div class="block">Takes the difference between two predicates, removing from the first any
predicates also in the second.</div>
</td>
</tr>
<tr class="rowColor" id="i27">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#numDistinctVals(java.lang.Double,java.lang.Double)">numDistinctVals</a></span>&#8203;(<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;domainSize,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;numSelected)</code></th>
<td class="colLast">
<div class="block">Returns the number of distinct values provided numSelected are selected
where there are domainSize distinct values.</div>
</td>
</tr>
<tr class="altColor" id="i28">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setAggChildKeys(org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rel.core.Aggregate,org.apache.calcite.util.ImmutableBitSet.Builder)">setAggChildKeys</a></span>&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core">Aggregate</a>&nbsp;aggRel,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;childKey)</code></th>
<td class="colLast">
<div class="block">Takes a bitmap representing a set of input references and extracts the
ones that reference the group by columns in an aggregate.</div>
</td>
</tr>
<tr class="rowColor" id="i29">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setLeftRightBitmaps(org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.util.ImmutableBitSet.Builder,org.apache.calcite.util.ImmutableBitSet.Builder,int)">setLeftRightBitmaps</a></span>&#8203;(<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;leftMask,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;rightMask,
int&nbsp;nFieldsOnLeft)</code></th>
<td class="colLast">
<div class="block">Separates a bit-mask representing a join into masks representing the left
and right inputs into the join.</div>
</td>
</tr>
<tr class="altColor" id="i30">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#splitCols(java.util.List,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.util.ImmutableBitSet.Builder,org.apache.calcite.util.ImmutableBitSet.Builder)">splitCols</a></span>&#8203;(<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;projExprs,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;baseCols,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;projCols)</code></th>
<td class="colLast">
<div class="block">Forms two bitmaps by splitting the columns in a bitmap according to
whether or not the column references the child input or is an expression.</div>
</td>
</tr>
<tr class="rowColor" id="i31">
<td class="colFirst"><code>static <a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unionPreds(org.apache.calcite.rex.RexBuilder,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">unionPreds</a></span>&#8203;(<a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred1,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred2)</code></th>
<td class="colLast">
<div class="block">AND's two predicates together, either of which may be null, removing
redundant filters.</div>
</td>
</tr>
<tr class="altColor" id="i32">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validatePercentage(java.lang.Double)">validatePercentage</a></span>&#8203;(<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;result)</code></th>
<td class="colLast">
<div class="block">Validate the <code>result</code> represents a percentage number,
e.g.</div>
</td>
</tr>
<tr class="rowColor" id="i33">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateResult(java.lang.Double)">validateResult</a></span>&#8203;(<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;result)</code></th>
<td class="colLast">
<div class="block">Validates the <code>result</code> is valid.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<li class="blockList">
<section class="fieldDetails"><a id="field.detail">
<!-- -->
</a>
<h2>Field Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="ARTIFICIAL_SELECTIVITY_FUNC">ARTIFICIAL_SELECTIVITY_FUNC</a></h3>
<div class="memberSignature"><span class="modifiers">public static final</span>&nbsp;<span class="returnType"><a href="../../sql/SqlFunction.html" title="class in org.apache.calcite.sql">SqlFunction</a></span>&nbsp;<span class="memberName">ARTIFICIAL_SELECTIVITY_FUNC</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="makeSemiJoinSelectivityRexNode(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Join)">makeSemiJoinSelectivityRexNode</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></span>&nbsp;<span class="memberName">makeSemiJoinSelectivityRexNode</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;rel)</span></div>
<div class="block">Creates a RexNode that stores a selectivity value corresponding to the
selectivity of a semijoin. This can be added to a filter to simulate the
effect of the semijoin during costing, but should never appear in a real
plan since it has no physical implementation.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - the semijoin of interest</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>constructed rexnode</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getSelectivityValue(org.apache.calcite.rex.RexNode)">getSelectivityValue</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">getSelectivityValue</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;artificialSelectivityFuncNode)</span></div>
<div class="block">Returns the selectivity value stored in a call.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>artificialSelectivityFuncNode</code> - Call containing the selectivity value</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>selectivity value</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="computeSemiJoinSelectivity(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.core.Join)">computeSemiJoinSelectivity</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">computeSemiJoinSelectivity</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;factRel,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;dimRel,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;rel)</span></div>
<div class="block">Computes the selectivity of a semijoin filter if it is applied on a fact
table. The computation is based on the selectivity of the dimension
table/columns and the number of distinct values in the fact table
columns.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factRel</code> - fact table participating in the semijoin</dd>
<dd><code>dimRel</code> - dimension table participating in the semijoin</dd>
<dd><code>rel</code> - semijoin rel</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>calculated selectivity</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="computeSemiJoinSelectivity(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelNode,java.util.List,java.util.List)">computeSemiJoinSelectivity</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">computeSemiJoinSelectivity</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;factRel,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;dimRel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a>&gt;&nbsp;factKeyList,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang" class="externalLink">Integer</a>&gt;&nbsp;dimKeyList)</span></div>
<div class="block">Computes the selectivity of a semijoin filter if it is applied on a fact
table. The computation is based on the selectivity of the dimension
table/columns and the number of distinct values in the fact table
columns.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factRel</code> - fact table participating in the semijoin</dd>
<dd><code>dimRel</code> - dimension table participating in the semijoin</dd>
<dd><code>factKeyList</code> - LHS keys used in the filter</dd>
<dd><code>dimKeyList</code> - RHS keys used in the filter</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>calculated selectivity</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsDefinitelyUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">areColumnsDefinitelyUnique</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">areColumnsDefinitelyUnique</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;colMask)</span></div>
<div class="block">Returns true if the columns represented in a bit mask are definitely
known to form a unique column set.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - the relational expression that the column mask corresponds
to</dd>
<dd><code>colMask</code> - bit mask containing columns that will be tested for
uniqueness</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if bit mask represents a unique column set; false if not (or
if no metadata is available)</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsUnique</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang" class="externalLink">Boolean</a></span>&nbsp;<span class="memberName">areColumnsUnique</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsDefinitelyUnique(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsDefinitelyUnique</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">areColumnsDefinitelyUnique</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsDefinitelyUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">areColumnsDefinitelyUniqueWhenNullsFiltered</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">areColumnsDefinitelyUniqueWhenNullsFiltered</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;colMask)</span></div>
<div class="block">Returns true if the columns represented in a bit mask are definitely
known to form a unique column set, when nulls have been filtered from
the columns.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - the relational expression that the column mask corresponds
to</dd>
<dd><code>colMask</code> - bit mask containing columns that will be tested for
uniqueness</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if bit mask represents a unique column set; false if not (or
if no metadata is available)</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsUniqueWhenNullsFiltered</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang" class="externalLink">Boolean</a></span>&nbsp;<span class="memberName">areColumnsUniqueWhenNullsFiltered</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="areColumnsDefinitelyUniqueWhenNullsFiltered(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,java.util.List)">areColumnsDefinitelyUniqueWhenNullsFiltered</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">areColumnsDefinitelyUniqueWhenNullsFiltered</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel,
<a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexInputRef.html" title="class in org.apache.calcite.rex">RexInputRef</a>&gt;&nbsp;columnRefs)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setLeftRightBitmaps(org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.util.ImmutableBitSet.Builder,org.apache.calcite.util.ImmutableBitSet.Builder,int)">setLeftRightBitmaps</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setLeftRightBitmaps</span>&#8203;(<span class="arguments"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;leftMask,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;rightMask,
int&nbsp;nFieldsOnLeft)</span></div>
<div class="block">Separates a bit-mask representing a join into masks representing the left
and right inputs into the join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>groupKey</code> - original bit-mask</dd>
<dd><code>leftMask</code> - left bit-mask to be set</dd>
<dd><code>rightMask</code> - right bit-mask to be set</dd>
<dd><code>nFieldsOnLeft</code> - number of fields in the left input</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="numDistinctVals(java.lang.Double,java.lang.Double)">numDistinctVals</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">numDistinctVals</span>&#8203;(<span class="arguments"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;domainSize,
<a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;numSelected)</span></div>
<div class="block">Returns the number of distinct values provided numSelected are selected
where there are domainSize distinct values.
<p>Note that in the case where domainSize == numSelected, it's not true
that the return value should be domainSize. If you pick 100 random values
between 1 and 100, you'll most likely end up with fewer than 100 distinct
values, because you'll pick some values more than once.
The implementation is an unbiased estimation of the number of distinct values
by performing a number of selections (with replacement) from a universe set.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>domainSize</code> - size of the universe set.</dd>
<dd><code>numSelected</code> - the number of selections.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the expected number of distinct values.</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="capInfinity(java.lang.Double)">capInfinity</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">capInfinity</span>&#8203;(<span class="arguments"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;d)</span></div>
<div class="block">Caps a double value at Double.MAX_VALUE if it's currently infinity</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>d</code> - the Double object</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the double value if it's not infinity; else Double.MAX_VALUE</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="guessSelectivity(org.apache.calcite.rex.RexNode)">guessSelectivity</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">guessSelectivity</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</span></div>
<div class="block">Returns default estimates for selectivities, in the absence of stats.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>predicate</code> - predicate for which selectivity will be computed; null
means true, so gives selectity of 1.0</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>estimated selectivity</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="guessSelectivity(org.apache.calcite.rex.RexNode,boolean)">guessSelectivity</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">guessSelectivity</span>&#8203;(<span class="arguments"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate,
boolean&nbsp;artificialOnly)</span></div>
<div class="block">Returns default estimates for selectivities, in the absence of stats.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>predicate</code> - predicate for which selectivity will be computed;
null means true, so gives selectity of 1.0</dd>
<dd><code>artificialOnly</code> - return only the selectivity contribution from
artificial nodes</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>estimated selectivity</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="unionPreds(org.apache.calcite.rex.RexBuilder,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">unionPreds</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></span>&nbsp;<span class="memberName">unionPreds</span>&#8203;(<span class="arguments"><a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred1,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred2)</span></div>
<div class="block">AND's two predicates together, either of which may be null, removing
redundant filters.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rexBuilder</code> - rexBuilder used to construct AND'd RexNode</dd>
<dd><code>pred1</code> - first predicate</dd>
<dd><code>pred2</code> - second predicate</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>AND'd predicate or individual predicates if one is null</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="minusPreds(org.apache.calcite.rex.RexBuilder,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">minusPreds</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a></span>&nbsp;<span class="memberName">minusPreds</span>&#8203;(<span class="arguments"><a href="../../rex/RexBuilder.html" title="class in org.apache.calcite.rex">RexBuilder</a>&nbsp;rexBuilder,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred1,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;pred2)</span></div>
<div class="block">Takes the difference between two predicates, removing from the first any
predicates also in the second.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rexBuilder</code> - rexBuilder used to construct AND'd RexNode</dd>
<dd><code>pred1</code> - first predicate</dd>
<dd><code>pred2</code> - second predicate</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>MINUS'd predicate list</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setAggChildKeys(org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rel.core.Aggregate,org.apache.calcite.util.ImmutableBitSet.Builder)">setAggChildKeys</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setAggChildKeys</span>&#8203;(<span class="arguments"><a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../core/Aggregate.html" title="class in org.apache.calcite.rel.core">Aggregate</a>&nbsp;aggRel,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;childKey)</span></div>
<div class="block">Takes a bitmap representing a set of input references and extracts the
ones that reference the group by columns in an aggregate.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>groupKey</code> - the original bitmap</dd>
<dd><code>aggRel</code> - the aggregate</dd>
<dd><code>childKey</code> - sets bits from groupKey corresponding to group by columns</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="splitCols(java.util.List,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.util.ImmutableBitSet.Builder,org.apache.calcite.util.ImmutableBitSet.Builder)">splitCols</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">splitCols</span>&#8203;(<span class="arguments"><a href="https://docs.oracle.com/javase/9/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&gt;&nbsp;projExprs,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;baseCols,
<a href="../../util/ImmutableBitSet.Builder.html" title="class in org.apache.calcite.util">ImmutableBitSet.Builder</a>&nbsp;projCols)</span></div>
<div class="block">Forms two bitmaps by splitting the columns in a bitmap according to
whether or not the column references the child input or is an expression.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>projExprs</code> - Project expressions</dd>
<dd><code>groupKey</code> - Bitmap whose columns will be split</dd>
<dd><code>baseCols</code> - Bitmap representing columns from the child input</dd>
<dd><code>projCols</code> - Bitmap representing non-child columns</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="cardOfProjExpr(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Project,org.apache.calcite.rex.RexNode)">cardOfProjExpr</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">cardOfProjExpr</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Project.html" title="class in org.apache.calcite.rel.core">Project</a>&nbsp;rel,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;expr)</span></div>
<div class="block">Computes the cardinality of a particular expression from the projection
list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - RelNode corresponding to the project</dd>
<dd><code>expr</code> - projection expression</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>cardinality</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinPopulationSize(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.util.ImmutableBitSet)">getJoinPopulationSize</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">getJoinPopulationSize</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;join_,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey)</span></div>
<div class="block">Computes the population size for a set of keys returned from a join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>join_</code> - Join relational operator</dd>
<dd><code>groupKey</code> - Keys to compute the population for</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>computed population size</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="addEpsilon(double)">addEpsilon</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">addEpsilon</span>&#8203;(<span class="arguments">double&nbsp;d)</span></div>
<div class="block">Add an epsilon to the value passed in.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getSemiJoinDistinctRowCount(org.apache.calcite.rel.core.Join,org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rex.RexNode)">getSemiJoinDistinctRowCount</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">getSemiJoinDistinctRowCount</span>&#8203;(<span class="arguments"><a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;semiJoinRel,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate)</span></div>
<div class="block">Computes the number of distinct rows for a set of keys returned from a
semi-join.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>semiJoinRel</code> - RelNode representing the semi-join</dd>
<dd><code>mq</code> - metadata query</dd>
<dd><code>groupKey</code> - keys that the distinct row count will be computed for</dd>
<dd><code>predicate</code> - join predicate</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>number of distinct rows</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinDistinctRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.core.JoinRelType,org.apache.calcite.util.ImmutableBitSet,org.apache.calcite.rex.RexNode,boolean)">getJoinDistinctRowCount</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">getJoinDistinctRowCount</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;joinRel,
<a href="../core/JoinRelType.html" title="enum in org.apache.calcite.rel.core">JoinRelType</a>&nbsp;joinType,
<a href="../../util/ImmutableBitSet.html" title="class in org.apache.calcite.util">ImmutableBitSet</a>&nbsp;groupKey,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;predicate,
boolean&nbsp;useMaxNdv)</span></div>
<div class="block">Computes the number of distinct rows for a set of keys returned from a
join. Also known as NDV (number of distinct values).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>joinRel</code> - RelNode representing the join</dd>
<dd><code>joinType</code> - type of join</dd>
<dd><code>groupKey</code> - keys that the distinct row count will be computed for</dd>
<dd><code>predicate</code> - join predicate</dd>
<dd><code>useMaxNdv</code> - If true use formula <code>max(left NDV, right NDV)</code>,
otherwise use <code>left NDV * right NDV</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>number of distinct rows</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getUnionAllRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Union)">getUnionAllRowCount</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">getUnionAllRowCount</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Union.html" title="class in org.apache.calcite.rel.core">Union</a>&nbsp;rel)</span></div>
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Union.html" title="class in org.apache.calcite.rel.core"><code>Union</code></a>
(before duplicates are eliminated).</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getMinusRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Minus)">getMinusRowCount</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">getMinusRowCount</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Minus.html" title="class in org.apache.calcite.rel.core">Minus</a>&nbsp;minus)</span></div>
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Minus.html" title="class in org.apache.calcite.rel.core"><code>Minus</code></a>.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getJoinRowCount(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.core.Join,org.apache.calcite.rex.RexNode)">getJoinRowCount</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">getJoinRowCount</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../core/Join.html" title="class in org.apache.calcite.rel.core">Join</a>&nbsp;join,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition)</span></div>
<div class="block">Returns an estimate of the number of rows returned by a <a href="../core/Join.html" title="class in org.apache.calcite.rel.core"><code>Join</code></a>.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="estimateFilteredRows(org.apache.calcite.rel.RelNode,org.apache.calcite.rex.RexProgram,org.apache.calcite.rel.metadata.RelMetadataQuery)">estimateFilteredRows</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">estimateFilteredRows</span>&#8203;(<span class="arguments"><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;child,
<a href="../../rex/RexProgram.html" title="class in org.apache.calcite.rex">RexProgram</a>&nbsp;program,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="estimateFilteredRows(org.apache.calcite.rel.RelNode,org.apache.calcite.rex.RexNode,org.apache.calcite.rel.metadata.RelMetadataQuery)">estimateFilteredRows</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">estimateFilteredRows</span>&#8203;(<span class="arguments"><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;child,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;condition,
<a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq)</span></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="linear(int,int,int,double,double)">linear</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">double</span>&nbsp;<span class="memberName">linear</span>&#8203;(<span class="arguments">int&nbsp;x,
int&nbsp;minX,
int&nbsp;maxX,
double&nbsp;minY,
double&nbsp;maxY)</span></div>
<div class="block">Returns a point on a line.
<p>The result is always a value between <code>minY</code> and <code>maxY</code>,
even if <code>x</code> is not between <code>minX</code> and <code>maxX</code>.
<p>Examples:<ul>
<li><code>linear(0, 0, 10, 100, 200</code>} returns 100 because 0 is minX
<li><code>linear(5, 0, 10, 100, 200</code>} returns 150 because 5 is
mid-way between minX and maxX
<li><code>linear(5, 0, 10, 100, 200</code>} returns 160
<li><code>linear(10, 0, 10, 100, 200</code>} returns 200 because 10 is maxX
<li><code>linear(-2, 0, 10, 100, 200</code>} returns 100 because -2 is
less than minX and is therefore treated as minX
<li><code>linear(12, 0, 10, 100, 200</code>} returns 100 because 12 is
greater than maxX and is therefore treated as maxX
</ul></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="checkInputForCollationAndLimit(org.apache.calcite.rel.metadata.RelMetadataQuery,org.apache.calcite.rel.RelNode,org.apache.calcite.rel.RelCollation,org.apache.calcite.rex.RexNode,org.apache.calcite.rex.RexNode)">checkInputForCollationAndLimit</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">checkInputForCollationAndLimit</span>&#8203;(<span class="arguments"><a href="RelMetadataQuery.html" title="class in org.apache.calcite.rel.metadata">RelMetadataQuery</a>&nbsp;mq,
<a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;input,
<a href="../RelCollation.html" title="interface in org.apache.calcite.rel">RelCollation</a>&nbsp;collation,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;offset,
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex">RexNode</a>&nbsp;fetch)</span></div>
<div class="block">Returns whether a relational expression is already sorted and has fewer
rows than the sum of offset and limit.
<p>If this is the case, it is safe to push down a
<a href="../core/Sort.html" title="class in org.apache.calcite.rel.core"><code>Sort</code></a> with limit and optional offset.</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="validatePercentage(java.lang.Double)">validatePercentage</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">validatePercentage</span>&#8203;(<span class="arguments"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;result)</span></div>
<div class="block">Validate the <code>result</code> represents a percentage number,
e.g. the value interval is [0.0, 1.0].</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the <code>result</code> is a percentage number</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/AssertionError.html?is-external=true" title="class or interface in java.lang" class="externalLink">AssertionError</a></code> - if the validation fails</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="validateResult(java.lang.Double)">validateResult</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a></span>&nbsp;<span class="memberName">validateResult</span>&#8203;(<span class="arguments"><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang" class="externalLink">Double</a>&nbsp;result)</span></div>
<div class="block">Validates the <code>result</code> is valid.
<p>Never let the result go below 1, as it will result in incorrect
calculations if the row-count is used as the denominator in a
division expression. Also, cap the value at the max double value
to avoid calculations using infinity.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the corrected value from the <code>result</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/9/docs/api/java/lang/AssertionError.html?is-external=true" title="class or interface in java.lang" class="externalLink">AssertionError</a></code> - if the <code>result</code> is negative</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="clearCache(org.apache.calcite.rel.RelNode)">clearCache</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">clearCache</span>&#8203;(<span class="arguments"><a href="../RelNode.html" title="interface in org.apache.calcite.rel">RelNode</a>&nbsp;rel)</span></div>
<div class="block">Removes cached metadata values for specified RelNode.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rel</code> - RelNode whose cached metadata should be removed</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if cache for the provided RelNode was not empty</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">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">Help</a></li>
</ul>
<div class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &copy; 2012-2020 Apache Software Foundation. All Rights Reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>