blob: 17366d327fb8ca8f33933bf1e053782bf28913ad [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>ReturnTypes (Apache Calcite API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ReturnTypes (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":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 = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= 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="class-use/ReturnTypes.html">Use</a></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>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.calcite.sql.type</a></div>
<h2 title="Class ReturnTypes" class="title">Class ReturnTypes</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.sql.type.ReturnTypes</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public abstract class <span class="typeNameLabel">ReturnTypes</span>
extends java.lang.Object</pre>
<div class="block">A collection of return-type inference strategies.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<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>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#AGG_SUM">AGG_SUM</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for SUM aggregate function inferred from the
operand type, and nullable if the call occurs within a "GROUP BY ()"
query.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#AGG_SUM_EMPTY_IS_ZERO">AGG_SUM_EMPTY_IS_ZERO</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for $SUM0 aggregate function inferred from the
operand type.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0">ARG0</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_FORCE_NULLABLE">ARG0_FORCE_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based), with nulls always allowed.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_INTERVAL">ARG0_INTERVAL</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_INTERVAL_NULLABLE">ARG0_INTERVAL_NULLABLE</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_NULLABLE">ARG0_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_NULLABLE_IF_EMPTY">ARG0_NULLABLE_IF_EMPTY</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based), and nullable if the call occurs within a
"GROUP BY ()" query.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_NULLABLE_VARYING">ARG0_NULLABLE_VARYING</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is VARYING the
type of the first argument.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG0_OR_EXACT_NO_SCALE">ARG0_OR_EXACT_NO_SCALE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_SCALE0"><code>DECIMAL_SCALE0</code></a> with a fallback to <a href="#ARG0"><code>ARG0</code></a> This rule
is used for floor, ceiling.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG1">ARG1</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #1 (0-based).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG1_NULLABLE">ARG1_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #1 (0-based).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG2">ARG2</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
operand #2 (0-based).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ARG2_NULLABLE">ARG2_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the type of
operand #2 (0-based).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#AVG_AGG_FUNCTION">AVG_AGG_FUNCTION</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BIGINT">BIGINT</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is a Bigint</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BIGINT_FORCE_NULLABLE">BIGINT_FORCE_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is a nullable
Bigint</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BIGINT_NULLABLE">BIGINT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is an Bigint
with nulls allowed if any of the operands allow nulls.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BOOLEAN">BOOLEAN</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Boolean.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BOOLEAN_FORCE_NULLABLE">BOOLEAN_FORCE_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is a nullable
Boolean.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BOOLEAN_NOT_NULL">BOOLEAN_NOT_NULL</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Boolean
not null.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BOOLEAN_NULLABLE">BOOLEAN_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Boolean,
with nulls allowed if any of the operands allow nulls.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#BOOLEAN_NULLABLE_OPTIMIZED">BOOLEAN_NULLABLE_OPTIMIZED</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy with similar effect to <a href="#BOOLEAN_NULLABLE"><code>BOOLEAN_NULLABLE</code></a>,
which is more efficient, but can only be used if all arguments are
BOOLEAN.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#COLUMN_LIST">COLUMN_LIST</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "COLUMN_LIST".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#COVAR_REGR_FUNCTION">COVAR_REGR_FUNCTION</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#CURSOR">CURSOR</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "CURSOR".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DATE">DATE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Date.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DATE_NULLABLE">DATE_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is nullable
Date.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_PRODUCT">DECIMAL_PRODUCT</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
product of two exact numeric operands where at least one of the operands
is a decimal.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_PRODUCT_NULLABLE">DECIMAL_PRODUCT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#DECIMAL_PRODUCT"><code>DECIMAL_PRODUCT</code></a> but returns with nullability if any of
the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_QUOTIENT">DECIMAL_QUOTIENT</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
product of two exact numeric operands where at least one of the operands
is a decimal.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_QUOTIENT_NULLABLE">DECIMAL_QUOTIENT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#DECIMAL_QUOTIENT"><code>DECIMAL_QUOTIENT</code></a> but returns with nullability if any of
the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_SCALE0">DECIMAL_SCALE0</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for a call where the first argument is a decimal.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_SUM">DECIMAL_SUM</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
sum of two exact numeric operands where at least one of the operands is a
decimal.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DECIMAL_SUM_NULLABLE">DECIMAL_SUM_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#DECIMAL_SUM"><code>DECIMAL_SUM</code></a> but returns with nullability if any
of the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DOUBLE">DOUBLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Double.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DOUBLE_NULLABLE">DOUBLE_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Double with
nulls allowed if any of the operands allow nulls.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DYADIC_STRING_SUM_PRECISION">DYADIC_STRING_SUM_PRECISION</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
the same type as the input types but with the combined length of the
two first types
if types are of char type the type with the highest coercibility will
be used
result is varying if either input is; otherwise fixed
</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DYADIC_STRING_SUM_PRECISION_NULLABLE">DYADIC_STRING_SUM_PRECISION_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#DYADIC_STRING_SUM_PRECISION"><code>DYADIC_STRING_SUM_PRECISION</code></a> and using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DYADIC_STRING_SUM_PRECISION_NULLABLE_VARYING">DYADIC_STRING_SUM_PRECISION_NULLABLE_VARYING</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#DYADIC_STRING_SUM_PRECISION"><code>DYADIC_STRING_SUM_PRECISION</code></a> and using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a>,
<a href="SqlTypeTransforms.html#TO_VARYING"><code>SqlTypeTransforms.TO_VARYING</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#FRACTIONAL_RANK">FRACTIONAL_RANK</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for the <code>CUME_DIST</code> and <code>PERCENT_RANK</code>
aggregate functions.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#HISTOGRAM">HISTOGRAM</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for Histogram agg support</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#INTEGER">INTEGER</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is an Integer.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#INTEGER_NULLABLE">INTEGER_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is an Integer
with nulls allowed if any of the operands allow nulls.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#INTEGER_QUOTIENT_NULLABLE">INTEGER_QUOTIENT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a> and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#LEAST_RESTRICTIVE">LEAST_RESTRICTIVE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is using its
operands biggest type, using the SQL:1999 rules described in "Data types
of results of aggregations".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET">MULTISET</a></span></code></th>
<td class="colLast">
<div class="block">Returns the same type as the multiset carries.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET_ELEMENT_NULLABLE">MULTISET_ELEMENT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Returns the element type of a multiset</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET_NULLABLE">MULTISET_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Same as <a href="#MULTISET"><code>MULTISET</code></a> but returns with nullability if any of the
operands is nullable.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET_PROJECT_ONLY">MULTISET_PROJECT_ONLY</a></span></code></th>
<td class="colLast">
<div class="block">Returns the type of the only column of a multiset.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET_PROJECT0">MULTISET_PROJECT0</a></span></code></th>
<td class="colLast">
<div class="block">Returns a multiset of column #0 of a multiset.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MULTISET_RECORD">MULTISET_RECORD</a></span></code></th>
<td class="colLast">
<div class="block">Returns a multiset of the first column of a multiset.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#NULLABLE_SUM">NULLABLE_SUM</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_SUM_NULLABLE"><code>DECIMAL_SUM_NULLABLE</code></a> with a fallback to <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>
These rules are used for addition and subtraction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PRODUCT_NULLABLE">PRODUCT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_PRODUCT_NULLABLE"><code>DECIMAL_PRODUCT_NULLABLE</code></a> with a fallback to
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a>
and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#QUOTIENT_NULLABLE">QUOTIENT_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_QUOTIENT_NULLABLE"><code>DECIMAL_QUOTIENT_NULLABLE</code></a> with a fallback to
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a> and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a> These rules
are used for division.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RANK">RANK</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy for the <code>NTILE</code>, <code>RANK</code>,
<code>DENSE_RANK</code>, and <code>ROW_NUMBER</code> aggregate functions.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RECORD_TO_SCALAR">RECORD_TO_SCALAR</a></span></code></th>
<td class="colLast">
<div class="block">Returns the field type of a structured type which has only one field.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#SCOPE">SCOPE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy where the expression is assumed to be registered
as a <a href="../validate/SqlValidatorNamespace.html" title="interface in org.apache.calcite.sql.validate"><code>SqlValidatorNamespace</code></a>, and
therefore the result type of the call is the type of that namespace.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#TIME">TIME</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is Time(0).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#TIME_NULLABLE">TIME_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy whereby the result type of a call is nullable
Time(0).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#TO_MULTISET">TO_MULTISET</a></span></code></th>
<td class="colLast">
<div class="block">Returns a multiset type.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#VARCHAR_2000">VARCHAR_2000</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "VARCHAR(2000)".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#VARCHAR_2000_NULLABLE">VARCHAR_2000_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "VARCHAR(2000)" with nulls
allowed if any of the operands allow nulls.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#VARCHAR_4">VARCHAR_4</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "VARCHAR(4)".</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#VARCHAR_4_NULLABLE">VARCHAR_4_NULLABLE</a></span></code></th>
<td class="colLast">
<div class="block">Type-inference strategy that always returns "VARCHAR(4)" with nulls
allowed if any of the operands allow nulls.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">ReturnTypes</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<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>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="SqlTypeTransformCascade.html" title="class in org.apache.calcite.sql.type">SqlTypeTransformCascade</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#cascade(org.apache.calcite.sql.type.SqlReturnTypeInference,org.apache.calcite.sql.type.SqlTypeTransform...)">cascade</a></span>&#8203;(<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a>&nbsp;rule,
<a href="SqlTypeTransform.html" title="interface in org.apache.calcite.sql.type">SqlTypeTransform</a>...&nbsp;transforms)</code></th>
<td class="colLast">
<div class="block">Creates a return-type inference that applies a rule then a sequence of
transforms.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="SqlReturnTypeInferenceChain.html" title="class in org.apache.calcite.sql.type">SqlReturnTypeInferenceChain</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#chain(org.apache.calcite.sql.type.SqlReturnTypeInference...)">chain</a></span>&#8203;(<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a>...&nbsp;rules)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static <a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#explicit(org.apache.calcite.rel.type.RelDataType)">explicit</a></span>&#8203;(<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</code></th>
<td class="colLast">
<div class="block">Creates an inference rule which returns a copy of a given data type.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static <a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#explicit(org.apache.calcite.rel.type.RelProtoDataType)">explicit</a></span>&#8203;(<a href="../../rel/type/RelProtoDataType.html" title="interface in org.apache.calcite.rel.type">RelProtoDataType</a>&nbsp;protoType)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static <a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#explicit(org.apache.calcite.sql.type.SqlTypeName)">explicit</a></span>&#8203;(<a href="SqlTypeName.html" title="enum in org.apache.calcite.sql.type">SqlTypeName</a>&nbsp;typeName)</code></th>
<td class="colLast">
<div class="block">Creates an inference rule which returns a type with no precision or scale,
such as <code>DATE</code>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static <a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#explicit(org.apache.calcite.sql.type.SqlTypeName,int)">explicit</a></span>&#8203;(<a href="SqlTypeName.html" title="enum in org.apache.calcite.sql.type">SqlTypeName</a>&nbsp;typeName,
int&nbsp;precision)</code></th>
<td class="colLast">
<div class="block">Creates an inference rule which returns a type with precision but no scale,
such as <code>VARCHAR(100)</code>.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="ARG0">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based).</div>
</li>
</ul>
<a id="ARG0_NULLABLE_VARYING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_NULLABLE_VARYING</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_NULLABLE_VARYING</pre>
<div class="block">Type-inference strategy whereby the result type of a call is VARYING the
type of the first argument. The length returned is the same as length of
the first argument. If any of the other operands are nullable the
returned type will also be nullable. First Arg must be of string type.</div>
</li>
</ul>
<a id="ARG0_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based). If any of the other operands are nullable the
returned type will also be nullable.</div>
</li>
</ul>
<a id="ARG0_FORCE_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_FORCE_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_FORCE_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based), with nulls always allowed.</div>
</li>
</ul>
<a id="ARG0_INTERVAL">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_INTERVAL</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_INTERVAL</pre>
</li>
</ul>
<a id="ARG0_INTERVAL_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_INTERVAL_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_INTERVAL_NULLABLE</pre>
</li>
</ul>
<a id="ARG0_NULLABLE_IF_EMPTY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_NULLABLE_IF_EMPTY</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_NULLABLE_IF_EMPTY</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #0 (0-based), and nullable if the call occurs within a
"GROUP BY ()" query. E.g. in "select sum(1) as s from empty", s may be
null.</div>
</li>
</ul>
<a id="ARG1">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG1</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG1</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #1 (0-based).</div>
</li>
</ul>
<a id="ARG1_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG1_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG1_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
the operand #1 (0-based). If any of the other operands are nullable the
returned type will also be nullable.</div>
</li>
</ul>
<a id="ARG2">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG2</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG2</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
operand #2 (0-based).</div>
</li>
</ul>
<a id="ARG2_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG2_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG2_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the type of
operand #2 (0-based). If any of the other operands are nullable the
returned type will also be nullable.</div>
</li>
</ul>
<a id="BOOLEAN">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BOOLEAN</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BOOLEAN</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Boolean.</div>
</li>
</ul>
<a id="BOOLEAN_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BOOLEAN_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BOOLEAN_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Boolean,
with nulls allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="BOOLEAN_NULLABLE_OPTIMIZED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BOOLEAN_NULLABLE_OPTIMIZED</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BOOLEAN_NULLABLE_OPTIMIZED</pre>
<div class="block">Type-inference strategy with similar effect to <a href="#BOOLEAN_NULLABLE"><code>BOOLEAN_NULLABLE</code></a>,
which is more efficient, but can only be used if all arguments are
BOOLEAN.</div>
</li>
</ul>
<a id="BOOLEAN_FORCE_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BOOLEAN_FORCE_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BOOLEAN_FORCE_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is a nullable
Boolean.</div>
</li>
</ul>
<a id="BOOLEAN_NOT_NULL">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BOOLEAN_NOT_NULL</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BOOLEAN_NOT_NULL</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Boolean
not null.</div>
</li>
</ul>
<a id="DATE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DATE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DATE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Date.</div>
</li>
</ul>
<a id="DATE_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DATE_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DATE_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is nullable
Date.</div>
</li>
</ul>
<a id="TIME">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TIME</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> TIME</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Time(0).</div>
</li>
</ul>
<a id="TIME_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TIME_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> TIME_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is nullable
Time(0).</div>
</li>
</ul>
<a id="DOUBLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DOUBLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DOUBLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Double.</div>
</li>
</ul>
<a id="DOUBLE_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DOUBLE_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DOUBLE_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is Double with
nulls allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="INTEGER">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INTEGER</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> INTEGER</pre>
<div class="block">Type-inference strategy whereby the result type of a call is an Integer.</div>
</li>
</ul>
<a id="INTEGER_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INTEGER_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> INTEGER_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is an Integer
with nulls allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="BIGINT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BIGINT</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BIGINT</pre>
<div class="block">Type-inference strategy whereby the result type of a call is a Bigint</div>
</li>
</ul>
<a id="BIGINT_FORCE_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BIGINT_FORCE_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BIGINT_FORCE_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is a nullable
Bigint</div>
</li>
</ul>
<a id="BIGINT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BIGINT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> BIGINT_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is an Bigint
with nulls allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="VARCHAR_4">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VARCHAR_4</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> VARCHAR_4</pre>
<div class="block">Type-inference strategy that always returns "VARCHAR(4)".</div>
</li>
</ul>
<a id="VARCHAR_4_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VARCHAR_4_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> VARCHAR_4_NULLABLE</pre>
<div class="block">Type-inference strategy that always returns "VARCHAR(4)" with nulls
allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="VARCHAR_2000">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VARCHAR_2000</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> VARCHAR_2000</pre>
<div class="block">Type-inference strategy that always returns "VARCHAR(2000)".</div>
</li>
</ul>
<a id="VARCHAR_2000_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>VARCHAR_2000_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> VARCHAR_2000_NULLABLE</pre>
<div class="block">Type-inference strategy that always returns "VARCHAR(2000)" with nulls
allowed if any of the operands allow nulls.</div>
</li>
</ul>
<a id="HISTOGRAM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HISTOGRAM</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> HISTOGRAM</pre>
<div class="block">Type-inference strategy for Histogram agg support</div>
</li>
</ul>
<a id="CURSOR">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CURSOR</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> CURSOR</pre>
<div class="block">Type-inference strategy that always returns "CURSOR".</div>
</li>
</ul>
<a id="COLUMN_LIST">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>COLUMN_LIST</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> COLUMN_LIST</pre>
<div class="block">Type-inference strategy that always returns "COLUMN_LIST".</div>
</li>
</ul>
<a id="LEAST_RESTRICTIVE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LEAST_RESTRICTIVE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> LEAST_RESTRICTIVE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is using its
operands biggest type, using the SQL:1999 rules described in "Data types
of results of aggregations". These rules are used in union, except,
intersect, case and other places.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../util/Glossary.html#SQL99"><code>SQL:1999 Part 2 Section 9.3</code></a></dd>
</dl>
</li>
</ul>
<a id="MULTISET">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET</pre>
<div class="block">Returns the same type as the multiset carries. The multiset type returned
is the least restrictive of the call's multiset operands</div>
</li>
</ul>
<a id="TO_MULTISET">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TO_MULTISET</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> TO_MULTISET</pre>
<div class="block">Returns a multiset type.
<p>For example, given <code>INTEGER</code>, returns
<code>INTEGER MULTISET</code>.</div>
</li>
</ul>
<a id="MULTISET_ELEMENT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET_ELEMENT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET_ELEMENT_NULLABLE</pre>
<div class="block">Returns the element type of a multiset</div>
</li>
</ul>
<a id="MULTISET_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET_NULLABLE</pre>
<div class="block">Same as <a href="#MULTISET"><code>MULTISET</code></a> but returns with nullability if any of the
operands is nullable.</div>
</li>
</ul>
<a id="MULTISET_PROJECT_ONLY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET_PROJECT_ONLY</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET_PROJECT_ONLY</pre>
<div class="block">Returns the type of the only column of a multiset.
<p>For example, given <code>RECORD(x INTEGER) MULTISET</code>, returns
<code>INTEGER MULTISET</code>.</div>
</li>
</ul>
<a id="INTEGER_QUOTIENT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INTEGER_QUOTIENT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> INTEGER_QUOTIENT_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a> and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>. These rules
are used for integer division.</div>
</li>
</ul>
<a id="DECIMAL_SCALE0">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_SCALE0</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_SCALE0</pre>
<div class="block">Type-inference strategy for a call where the first argument is a decimal.
The result type of a call is a decimal with a scale of 0, and the same
precision and nullability as the first argument.</div>
</li>
</ul>
<a id="ARG0_OR_EXACT_NO_SCALE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ARG0_OR_EXACT_NO_SCALE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> ARG0_OR_EXACT_NO_SCALE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_SCALE0"><code>DECIMAL_SCALE0</code></a> with a fallback to <a href="#ARG0"><code>ARG0</code></a> This rule
is used for floor, ceiling.</div>
</li>
</ul>
<a id="DECIMAL_PRODUCT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_PRODUCT</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_PRODUCT</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
product of two exact numeric operands where at least one of the operands
is a decimal.</div>
</li>
</ul>
<a id="DECIMAL_PRODUCT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_PRODUCT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_PRODUCT_NULLABLE</pre>
<div class="block">Same as <a href="#DECIMAL_PRODUCT"><code>DECIMAL_PRODUCT</code></a> but returns with nullability if any of
the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</li>
</ul>
<a id="PRODUCT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PRODUCT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> PRODUCT_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_PRODUCT_NULLABLE"><code>DECIMAL_PRODUCT_NULLABLE</code></a> with a fallback to
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a>
and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>.
These rules are used for multiplication.</div>
</li>
</ul>
<a id="DECIMAL_QUOTIENT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_QUOTIENT</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_QUOTIENT</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
product of two exact numeric operands where at least one of the operands
is a decimal.</div>
</li>
</ul>
<a id="DECIMAL_QUOTIENT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_QUOTIENT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_QUOTIENT_NULLABLE</pre>
<div class="block">Same as <a href="#DECIMAL_QUOTIENT"><code>DECIMAL_QUOTIENT</code></a> but returns with nullability if any of
the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</li>
</ul>
<a id="QUOTIENT_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>QUOTIENT_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> QUOTIENT_NULLABLE</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_QUOTIENT_NULLABLE"><code>DECIMAL_QUOTIENT_NULLABLE</code></a> with a fallback to
<a href="#ARG0_INTERVAL_NULLABLE"><code>ARG0_INTERVAL_NULLABLE</code></a> and <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a> These rules
are used for division.</div>
</li>
</ul>
<a id="DECIMAL_SUM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_SUM</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_SUM</pre>
<div class="block">Type-inference strategy whereby the result type of a call is the decimal
sum of two exact numeric operands where at least one of the operands is a
decimal. Let p1, s1 be the precision and scale of the first operand Let
p2, s2 be the precision and scale of the second operand Let p, s be the
precision and scale of the result, Then the result type is a decimal
with:
<ul>
<li>s = max(s1, s2)</li>
<li>p = max(p1 - s1, p2 - s2) + s + 1</li>
</ul>
<p>p and s are capped at their maximum values</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../util/Glossary.html#SQL2003"><code>SQL:2003 Part 2 Section 6.26</code></a></dd>
</dl>
</li>
</ul>
<a id="DECIMAL_SUM_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DECIMAL_SUM_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DECIMAL_SUM_NULLABLE</pre>
<div class="block">Same as <a href="#DECIMAL_SUM"><code>DECIMAL_SUM</code></a> but returns with nullability if any
of the operands is nullable by using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a>.</div>
</li>
</ul>
<a id="NULLABLE_SUM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NULLABLE_SUM</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> NULLABLE_SUM</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<a href="#DECIMAL_SUM_NULLABLE"><code>DECIMAL_SUM_NULLABLE</code></a> with a fallback to <a href="#LEAST_RESTRICTIVE"><code>LEAST_RESTRICTIVE</code></a>
These rules are used for addition and subtraction.</div>
</li>
</ul>
<a id="DYADIC_STRING_SUM_PRECISION">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DYADIC_STRING_SUM_PRECISION</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DYADIC_STRING_SUM_PRECISION</pre>
<div class="block">Type-inference strategy whereby the result type of a call is
<ul>
<li>the same type as the input types but with the combined length of the
two first types</li>
<li>if types are of char type the type with the highest coercibility will
be used</li>
<li>result is varying if either input is; otherwise fixed
</ul>
<p>Pre-requisites:
<ul>
<li>input types must be of the same string type
<li>types must be comparable without casting
</ul></div>
</li>
</ul>
<a id="DYADIC_STRING_SUM_PRECISION_NULLABLE_VARYING">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DYADIC_STRING_SUM_PRECISION_NULLABLE_VARYING</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DYADIC_STRING_SUM_PRECISION_NULLABLE_VARYING</pre>
<div class="block">Same as <a href="#DYADIC_STRING_SUM_PRECISION"><code>DYADIC_STRING_SUM_PRECISION</code></a> and using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a>,
<a href="SqlTypeTransforms.html#TO_VARYING"><code>SqlTypeTransforms.TO_VARYING</code></a>.</div>
</li>
</ul>
<a id="DYADIC_STRING_SUM_PRECISION_NULLABLE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DYADIC_STRING_SUM_PRECISION_NULLABLE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> DYADIC_STRING_SUM_PRECISION_NULLABLE</pre>
<div class="block">Same as <a href="#DYADIC_STRING_SUM_PRECISION"><code>DYADIC_STRING_SUM_PRECISION</code></a> and using
<a href="SqlTypeTransforms.html#TO_NULLABLE"><code>SqlTypeTransforms.TO_NULLABLE</code></a></div>
</li>
</ul>
<a id="SCOPE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SCOPE</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> SCOPE</pre>
<div class="block">Type-inference strategy where the expression is assumed to be registered
as a <a href="../validate/SqlValidatorNamespace.html" title="interface in org.apache.calcite.sql.validate"><code>SqlValidatorNamespace</code></a>, and
therefore the result type of the call is the type of that namespace.</div>
</li>
</ul>
<a id="MULTISET_PROJECT0">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET_PROJECT0</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET_PROJECT0</pre>
<div class="block">Returns a multiset of column #0 of a multiset. For example, given
<code>RECORD(x INTEGER, y DATE) MULTISET</code>, returns <code>INTEGER
MULTISET</code>.</div>
</li>
</ul>
<a id="MULTISET_RECORD">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MULTISET_RECORD</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> MULTISET_RECORD</pre>
<div class="block">Returns a multiset of the first column of a multiset. For example, given
<code>INTEGER MULTISET</code>, returns <code>RECORD(x INTEGER)
MULTISET</code>.</div>
</li>
</ul>
<a id="RECORD_TO_SCALAR">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RECORD_TO_SCALAR</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> RECORD_TO_SCALAR</pre>
<div class="block">Returns the field type of a structured type which has only one field. For
example, given <code>RECORD(x INTEGER)</code> returns <code>INTEGER</code>.</div>
</li>
</ul>
<a id="AGG_SUM">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>AGG_SUM</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> AGG_SUM</pre>
<div class="block">Type-inference strategy for SUM aggregate function inferred from the
operand type, and nullable if the call occurs within a "GROUP BY ()"
query. E.g. in "select sum(x) as s from empty", s may be null. Also,
with the default implementation of RelDataTypeSystem, s has the same
type name as x.</div>
</li>
</ul>
<a id="AGG_SUM_EMPTY_IS_ZERO">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>AGG_SUM_EMPTY_IS_ZERO</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> AGG_SUM_EMPTY_IS_ZERO</pre>
<div class="block">Type-inference strategy for $SUM0 aggregate function inferred from the
operand type. By default the inferred type is identical to the operand
type. E.g. in "select $sum0(x) as s from empty", s has the same type as
x.</div>
</li>
</ul>
<a id="FRACTIONAL_RANK">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>FRACTIONAL_RANK</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> FRACTIONAL_RANK</pre>
<div class="block">Type-inference strategy for the <code>CUME_DIST</code> and <code>PERCENT_RANK</code>
aggregate functions.</div>
</li>
</ul>
<a id="RANK">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RANK</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> RANK</pre>
<div class="block">Type-inference strategy for the <code>NTILE</code>, <code>RANK</code>,
<code>DENSE_RANK</code>, and <code>ROW_NUMBER</code> aggregate functions.</div>
</li>
</ul>
<a id="AVG_AGG_FUNCTION">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>AVG_AGG_FUNCTION</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> AVG_AGG_FUNCTION</pre>
</li>
</ul>
<a id="COVAR_REGR_FUNCTION">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>COVAR_REGR_FUNCTION</h4>
<pre>public static final&nbsp;<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a> COVAR_REGR_FUNCTION</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ReturnTypes</h4>
<pre>private&nbsp;ReturnTypes()</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="chain(org.apache.calcite.sql.type.SqlReturnTypeInference...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>chain</h4>
<pre class="methodSignature">public static&nbsp;<a href="SqlReturnTypeInferenceChain.html" title="class in org.apache.calcite.sql.type">SqlReturnTypeInferenceChain</a>&nbsp;chain&#8203;(<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a>...&nbsp;rules)</pre>
</li>
</ul>
<a id="cascade(org.apache.calcite.sql.type.SqlReturnTypeInference,org.apache.calcite.sql.type.SqlTypeTransform...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cascade</h4>
<pre class="methodSignature">public static&nbsp;<a href="SqlTypeTransformCascade.html" title="class in org.apache.calcite.sql.type">SqlTypeTransformCascade</a>&nbsp;cascade&#8203;(<a href="SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type">SqlReturnTypeInference</a>&nbsp;rule,
<a href="SqlTypeTransform.html" title="interface in org.apache.calcite.sql.type">SqlTypeTransform</a>...&nbsp;transforms)</pre>
<div class="block">Creates a return-type inference that applies a rule then a sequence of
transforms.</div>
</li>
</ul>
<a id="explicit(org.apache.calcite.rel.type.RelProtoDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>explicit</h4>
<pre class="methodSignature">public static&nbsp;<a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a>&nbsp;explicit&#8203;(<a href="../../rel/type/RelProtoDataType.html" title="interface in org.apache.calcite.rel.type">RelProtoDataType</a>&nbsp;protoType)</pre>
</li>
</ul>
<a id="explicit(org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>explicit</h4>
<pre class="methodSignature">public static&nbsp;<a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a>&nbsp;explicit&#8203;(<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</pre>
<div class="block">Creates an inference rule which returns a copy of a given data type.</div>
</li>
</ul>
<a id="explicit(org.apache.calcite.sql.type.SqlTypeName)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>explicit</h4>
<pre class="methodSignature">public static&nbsp;<a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a>&nbsp;explicit&#8203;(<a href="SqlTypeName.html" title="enum in org.apache.calcite.sql.type">SqlTypeName</a>&nbsp;typeName)</pre>
<div class="block">Creates an inference rule which returns a type with no precision or scale,
such as <code>DATE</code>.</div>
</li>
</ul>
<a id="explicit(org.apache.calcite.sql.type.SqlTypeName,int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>explicit</h4>
<pre class="methodSignature">public static&nbsp;<a href="ExplicitReturnTypeInference.html" title="class in org.apache.calcite.sql.type">ExplicitReturnTypeInference</a>&nbsp;explicit&#8203;(<a href="SqlTypeName.html" title="enum in org.apache.calcite.sql.type">SqlTypeName</a>&nbsp;typeName,
int&nbsp;precision)</pre>
<div class="block">Creates an inference rule which returns a type with precision but no scale,
such as <code>VARCHAR(100)</code>.</div>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<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="class-use/ReturnTypes.html">Use</a></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>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2012&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>