blob: 243f4a79b7ef3503e75f9d33ef7b120538a19625 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>RelDataTypeFactoryImpl (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="RelDataTypeFactoryImpl (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":9,"i22":9,"i23":10,"i24":9,"i25":9,"i26":10,"i27":10,"i28":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance 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/RelDataTypeFactoryImpl.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><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="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.rel.type</a></div>
<h2 title="Class RelDataTypeFactoryImpl" class="title">Class RelDataTypeFactoryImpl</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.rel.type.RelDataTypeFactoryImpl</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="../../sql/type/SqlTypeFactoryImpl.html" title="class in org.apache.calcite.sql.type">SqlTypeFactoryImpl</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">RelDataTypeFactoryImpl</span>
extends java.lang.Object
implements <a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></pre>
<div class="block">Abstract base for implementations of <a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type"><code>RelDataTypeFactory</code></a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelDataTypeFactoryImpl.JavaType.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactoryImpl.JavaType</a></span></code></th>
<td class="colLast">
<div class="block">Type which is based upon a Java class.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RelDataTypeFactoryImpl.Key.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactoryImpl.Key</a></span></code></th>
<td class="colLast">
<div class="block">Key to the data type cache.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.calcite.rel.type.RelDataTypeFactory">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.calcite.rel.type.<a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></h3>
<code><a href="RelDataTypeFactory.Builder.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactory.Builder</a>, <a href="RelDataTypeFactory.FieldInfo.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfo</a>, <a href="RelDataTypeFactory.FieldInfoBuilder.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfoBuilder</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== 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>private static com.google.common.cache.LoadingCache&lt;java.lang.Object,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#CACHE">CACHE</a></span></code></th>
<td class="colLast">
<div class="block">Global cache.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static java.util.Map&lt;java.lang.Class,&#8203;<a href="RelDataTypeFamily.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFamily</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#CLASS_FAMILIES">CLASS_FAMILIES</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#typeSystem">typeSystem</a></span></code></th>
<td class="colLast">&nbsp;</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>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(org.apache.calcite.rel.type.RelDataTypeSystem)">RelDataTypeFactoryImpl</a></span>&#8203;(<a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a>&nbsp;typeSystem)</code></th>
<td class="colLast">
<div class="block">Creates a type factory.</div>
</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="t2" class="tableTab"><span><a href="javascript:show(2);">Instance 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>private static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addFields(org.apache.calcite.rel.type.RelDataType,java.util.List)">addFields</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
java.util.List&lt;<a href="RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;&nbsp;fieldList)</code></th>
<td class="colLast">
<div class="block">Adds all fields in <code>type</code> to <code>fieldList</code>,
renumbering the fields (if necessary) to ensure that their index
matches their position in the list.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="RelDataTypeFactory.FieldInfoBuilder.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfoBuilder</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#builder()">builder</a></span>()</code></th>
<td class="colLast">
<div class="block">Creates a
<a href="RelDataTypeFactory.FieldInfoBuilder.html" title="class in org.apache.calcite.rel.type"><code>RelDataTypeFactory.FieldInfoBuilder</code></a>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canonize(org.apache.calcite.rel.type.RelDataType)">canonize</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</code></th>
<td class="colLast">
<div class="block">Registers a type, or returns the existing type if it is already
registered.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canonize(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">canonize</a></span>&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;java.lang.String&gt;&nbsp;names,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canonize(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List,boolean)">canonize</a></span>&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;java.lang.String&gt;&nbsp;names,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types,
boolean&nbsp;nullable)</code></th>
<td class="colLast">
<div class="block">Looks up a type using a temporary key, and if not present, creates
a permanent key and type.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>private <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#copyRecordType(org.apache.calcite.rel.type.RelRecordType,boolean,boolean)">copyRecordType</a></span>&#8203;(<a href="RelRecordType.html" title="class in org.apache.calcite.rel.type">RelRecordType</a>&nbsp;type,
boolean&nbsp;ignoreNullable,
boolean&nbsp;nullable)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>private <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#copySimpleType(org.apache.calcite.rel.type.RelDataType,boolean)">copySimpleType</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
boolean&nbsp;nullable)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#copyType(org.apache.calcite.rel.type.RelDataType)">copyType</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</code></th>
<td class="colLast">
<div class="block">Duplicates a type, making a deep copy.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createDecimalProduct(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">createDecimalProduct</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</code></th>
<td class="colLast">
<div class="block">Infers the return type of a decimal multiplication.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createDecimalQuotient(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">createDecimalQuotient</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</code></th>
<td class="colLast">
<div class="block">Rules:
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
Let d be the number of whole digits in the result
Then the result type is a decimal with:
d = p1 - s1 + s2
s &lt; max(6, s1 + p2 + 1)
p = d + s
p and s are capped at their maximum values
</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createJavaType(java.lang.Class)">createJavaType</a></span>&#8203;(java.lang.Class&nbsp;clazz)</code></th>
<td class="colLast">
<div class="block">Creates a type that corresponds to a Java class.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createJoinType(org.apache.calcite.rel.type.RelDataType...)">createJoinType</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>...&nbsp;types)</code></th>
<td class="colLast">
<div class="block">Creates a cartesian product type.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(java.util.List)">createStructType</a></span>&#8203;(java.util.List&lt;? extends java.util.Map.Entry&lt;java.lang.String,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&gt;&nbsp;fieldList)</code></th>
<td class="colLast">
<div class="block">Creates a type that represents a structured collection of fieldList,
obtaining the field information from a list of (name, type) pairs.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>private <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(java.util.List,boolean)">createStructType</a></span>&#8203;(java.util.List&lt;? extends java.util.Map.Entry&lt;java.lang.String,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&gt;&nbsp;fieldList,
boolean&nbsp;nullable)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(java.util.List,java.util.List)">createStructType</a></span>&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList)</code></th>
<td class="colLast">
<div class="block">Creates a type that represents a structured collection of fields.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfo)">createStructType</a></span>&#8203;(<a href="RelDataTypeFactory.FieldInfo.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfo</a>&nbsp;fieldInfo)</code></th>
<td class="colLast">
<div class="block">Creates a type that represents a structured collection of fields,
obtaining the field information via a callback.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">createStructType</a></span>&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList)</code></th>
<td class="colLast">
<div class="block">Creates a type that represents a structured collection of fields, given
lists of the names and types of the fields.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>private <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List,boolean)">createStructType</a></span>&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList,
boolean&nbsp;nullable)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createTypeWithNullability(org.apache.calcite.rel.type.RelDataType,boolean)">createTypeWithNullability</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
boolean&nbsp;nullable)</code></th>
<td class="colLast">
<div class="block">Creates a type that is the same as another type but with possibly
different nullability.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>private java.util.List&lt;<a href="RelDataTypeFieldImpl.html" title="class in org.apache.calcite.rel.type">RelDataTypeFieldImpl</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#fieldsOf(java.lang.Class)">fieldsOf</a></span>&#8203;(java.lang.Class&nbsp;clazz)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>java.nio.charset.Charset</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDefaultCharset()">getDefaultCharset</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>private static java.util.List&lt;<a href="RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFieldList(java.util.List)">getFieldList</a></span>&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</code></th>
<td class="colLast">
<div class="block">Returns a list of the fields in a list of types.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>private static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTypeList(com.google.common.collect.ImmutableList,java.util.List)">getTypeList</a></span>&#8203;(com.google.common.collect.ImmutableList&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;inTypes,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;flatTypes)</code></th>
<td class="colLast">
<div class="block">Returns a list of all atomic types in a list.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code><a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTypeSystem()">getTypeSystem</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the type system.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isJavaType(org.apache.calcite.rel.type.RelDataType)">isJavaType</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;t)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>private static <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#keyToType(java.lang.Object)">keyToType</a></span>&#8203;(java.lang.Object&nbsp;k)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#leastRestrictive(java.util.List)">leastRestrictive</a></span>&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</code></th>
<td class="colLast">
<div class="block">Returns the most general of a set of types (that is, one type to which
they can all be cast), or null if conversion is not possible.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>protected <a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#leastRestrictiveStructuredType(java.util.List)">leastRestrictiveStructuredType</a></span>&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#useDoubleMultiplication(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">useDoubleMultiplication</a></span>&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</code></th>
<td class="colLast">
<div class="block">Returns whether a decimal multiplication should be implemented by casting
arguments to double values.</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>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.calcite.rel.type.RelDataTypeFactory">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.calcite.rel.type.<a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></h3>
<code><a href="RelDataTypeFactory.html#createArrayType(org.apache.calcite.rel.type.RelDataType,long)">createArrayType</a>, <a href="RelDataTypeFactory.html#createMapType(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">createMapType</a>, <a href="RelDataTypeFactory.html#createMultisetType(org.apache.calcite.rel.type.RelDataType,long)">createMultisetType</a>, <a href="RelDataTypeFactory.html#createSqlIntervalType(org.apache.calcite.sql.SqlIntervalQualifier)">createSqlIntervalType</a>, <a href="RelDataTypeFactory.html#createSqlType(org.apache.calcite.sql.type.SqlTypeName)">createSqlType</a>, <a href="RelDataTypeFactory.html#createSqlType(org.apache.calcite.sql.type.SqlTypeName,int)">createSqlType</a>, <a href="RelDataTypeFactory.html#createSqlType(org.apache.calcite.sql.type.SqlTypeName,int,int)">createSqlType</a>, <a href="RelDataTypeFactory.html#createTypeWithCharsetAndCollation(org.apache.calcite.rel.type.RelDataType,java.nio.charset.Charset,org.apache.calcite.sql.SqlCollation)">createTypeWithCharsetAndCollation</a>, <a href="RelDataTypeFactory.html#createUnknownType()">createUnknownType</a></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="CACHE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CACHE</h4>
<pre>private static final&nbsp;com.google.common.cache.LoadingCache&lt;java.lang.Object,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt; CACHE</pre>
<div class="block">Global cache. Uses soft values to allow GC.</div>
</li>
</ul>
<a id="CLASS_FAMILIES">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CLASS_FAMILIES</h4>
<pre>private static final&nbsp;java.util.Map&lt;java.lang.Class,&#8203;<a href="RelDataTypeFamily.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFamily</a>&gt; CLASS_FAMILIES</pre>
</li>
</ul>
<a id="typeSystem">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>typeSystem</h4>
<pre>protected final&nbsp;<a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a> typeSystem</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;(org.apache.calcite.rel.type.RelDataTypeSystem)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>RelDataTypeFactoryImpl</h4>
<pre>protected&nbsp;RelDataTypeFactoryImpl&#8203;(<a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a>&nbsp;typeSystem)</pre>
<div class="block">Creates a type factory.</div>
</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="keyToType(java.lang.Object)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>keyToType</h4>
<pre class="methodSignature">private static&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;keyToType&#8203;(@Nonnull
java.lang.Object&nbsp;k)</pre>
</li>
</ul>
<a id="getTypeSystem()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTypeSystem</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataTypeSystem.html" title="interface in org.apache.calcite.rel.type">RelDataTypeSystem</a>&nbsp;getTypeSystem()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#getTypeSystem()">RelDataTypeFactory</a></code></span></div>
<div class="block">Returns the type system.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#getTypeSystem()">getTypeSystem</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Type system</dd>
</dl>
</li>
</ul>
<a id="createJavaType(java.lang.Class)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createJavaType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createJavaType&#8203;(java.lang.Class&nbsp;clazz)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createJavaType(java.lang.Class)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that corresponds to a Java class.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createJavaType(java.lang.Class)">createJavaType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - the Java class used to define the type</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical Java type descriptor</dd>
</dl>
</li>
</ul>
<a id="createJoinType(org.apache.calcite.rel.type.RelDataType...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createJoinType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createJoinType&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>...&nbsp;types)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createJoinType(org.apache.calcite.rel.type.RelDataType...)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a cartesian product type.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createJoinType(org.apache.calcite.rel.type.RelDataType...)">createJoinType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>types</code> - array of types to be joined</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical join type descriptor</dd>
</dl>
</li>
</ul>
<a id="createStructType(java.util.List,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createStructType(java.util.List,java.util.List)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that represents a structured collection of fields.
Shorthand for <code>createStructType(StructKind.FULLY_QUALIFIED, typeList,
fieldNameList)</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createStructType(java.util.List,java.util.List)">createStructType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
</dl>
</li>
</ul>
<a id="createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that represents a structured collection of fields, given
lists of the names and types of the fields.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">createStructType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>kind</code> - Name resolution policy</dd>
<dd><code>typeList</code> - types of the fields</dd>
<dd><code>fieldNameList</code> - names of the fields</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical struct type descriptor</dd>
</dl>
</li>
</ul>
<a id="createStructType(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">private&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;typeList,
java.util.List&lt;java.lang.String&gt;&nbsp;fieldNameList,
boolean&nbsp;nullable)</pre>
</li>
</ul>
<a id="createStructType(org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(<a href="RelDataTypeFactory.FieldInfo.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfo</a>&nbsp;fieldInfo)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createStructType(org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfo)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that represents a structured collection of fields,
obtaining the field information via a callback.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createStructType(org.apache.calcite.rel.type.RelDataTypeFactory.FieldInfo)">createStructType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fieldInfo</code> - callback for field information</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical struct type descriptor</dd>
</dl>
</li>
</ul>
<a id="createStructType(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">public final&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(java.util.List&lt;? extends java.util.Map.Entry&lt;java.lang.String,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&gt;&nbsp;fieldList)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createStructType(java.util.List)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that represents a structured collection of fieldList,
obtaining the field information from a list of (name, type) pairs.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createStructType(java.util.List)">createStructType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fieldList</code> - List of (name, type) pairs</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical struct type descriptor</dd>
</dl>
</li>
</ul>
<a id="createStructType(java.util.List,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createStructType</h4>
<pre class="methodSignature">private&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createStructType&#8203;(java.util.List&lt;? extends java.util.Map.Entry&lt;java.lang.String,&#8203;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&gt;&nbsp;fieldList,
boolean&nbsp;nullable)</pre>
</li>
</ul>
<a id="leastRestrictive(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>leastRestrictive</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;leastRestrictive&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#leastRestrictive(java.util.List)">RelDataTypeFactory</a></code></span></div>
<div class="block">Returns the most general of a set of types (that is, one type to which
they can all be cast), or null if conversion is not possible. The result
may be a new type that is less restrictive than any of the input types,
e.g. <code>leastRestrictive(INT, NUMERIC(3, 2))</code> could be
<code>NUMERIC(12, 2)</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#leastRestrictive(java.util.List)">leastRestrictive</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>types</code> - input types to be combined using union (not null, not empty)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>canonical union type descriptor</dd>
</dl>
</li>
</ul>
<a id="leastRestrictiveStructuredType(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>leastRestrictiveStructuredType</h4>
<pre class="methodSignature">protected&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;leastRestrictiveStructuredType&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</pre>
</li>
</ul>
<a id="copySimpleType(org.apache.calcite.rel.type.RelDataType,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>copySimpleType</h4>
<pre class="methodSignature">private&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;copySimpleType&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
boolean&nbsp;nullable)</pre>
</li>
</ul>
<a id="copyRecordType(org.apache.calcite.rel.type.RelRecordType,boolean,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>copyRecordType</h4>
<pre class="methodSignature">private&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;copyRecordType&#8203;(<a href="RelRecordType.html" title="class in org.apache.calcite.rel.type">RelRecordType</a>&nbsp;type,
boolean&nbsp;ignoreNullable,
boolean&nbsp;nullable)</pre>
</li>
</ul>
<a id="copyType(org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>copyType</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;copyType&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#copyType(org.apache.calcite.rel.type.RelDataType)">RelDataTypeFactory</a></code></span></div>
<div class="block">Duplicates a type, making a deep copy. Normally, this is a no-op, since
canonical type objects are returned. However, it is useful when copying a
type from one factory to another.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#copyType(org.apache.calcite.rel.type.RelDataType)">copyType</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - input type</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>output type, a new object equivalent to input type</dd>
</dl>
</li>
</ul>
<a id="createTypeWithNullability(org.apache.calcite.rel.type.RelDataType,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createTypeWithNullability</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createTypeWithNullability&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
boolean&nbsp;nullable)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#createTypeWithNullability(org.apache.calcite.rel.type.RelDataType,boolean)">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a type that is the same as another type but with possibly
different nullability. The output type may be identical to the input
type. For type systems without a concept of nullability, the return value
is always the same as the input.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createTypeWithNullability(org.apache.calcite.rel.type.RelDataType,boolean)">createTypeWithNullability</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - input type</dd>
<dd><code>nullable</code> - true to request a nullable type; false to request a NOT
NULL type</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>output type, same as input type except with specified nullability</dd>
</dl>
</li>
</ul>
<a id="canonize(org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canonize</h4>
<pre class="methodSignature">protected&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;canonize&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type)</pre>
<div class="block">Registers a type, or returns the existing type if it is already
registered.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.NullPointerException</code> - if type is null</dd>
</dl>
</li>
</ul>
<a id="canonize(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canonize</h4>
<pre class="methodSignature">protected&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;canonize&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;java.lang.String&gt;&nbsp;names,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types,
boolean&nbsp;nullable)</pre>
<div class="block">Looks up a type using a temporary key, and if not present, creates
a permanent key and type.
<p>This approach allows us to use a cheap temporary key. A permanent
key is more expensive, because it must be immutable and not hold
references into other data structures.</p></div>
</li>
</ul>
<a id="canonize(org.apache.calcite.rel.type.StructKind,java.util.List,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canonize</h4>
<pre class="methodSignature">protected&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;canonize&#8203;(<a href="StructKind.html" title="enum in org.apache.calcite.rel.type">StructKind</a>&nbsp;kind,
java.util.List&lt;java.lang.String&gt;&nbsp;names,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</pre>
</li>
</ul>
<a id="getFieldList(java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFieldList</h4>
<pre class="methodSignature">private static&nbsp;java.util.List&lt;<a href="RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;&nbsp;getFieldList&#8203;(java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;types)</pre>
<div class="block">Returns a list of the fields in a list of types.</div>
</li>
</ul>
<a id="getTypeList(com.google.common.collect.ImmutableList,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTypeList</h4>
<pre class="methodSignature">private static&nbsp;void&nbsp;getTypeList&#8203;(com.google.common.collect.ImmutableList&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;inTypes,
java.util.List&lt;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;flatTypes)</pre>
<div class="block">Returns a list of all atomic types in a list.</div>
</li>
</ul>
<a id="addFields(org.apache.calcite.rel.type.RelDataType,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addFields</h4>
<pre class="methodSignature">private static&nbsp;void&nbsp;addFields&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type,
java.util.List&lt;<a href="RelDataTypeField.html" title="interface in org.apache.calcite.rel.type">RelDataTypeField</a>&gt;&nbsp;fieldList)</pre>
<div class="block">Adds all fields in <code>type</code> to <code>fieldList</code>,
renumbering the fields (if necessary) to ensure that their index
matches their position in the list.</div>
</li>
</ul>
<a id="isJavaType(org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isJavaType</h4>
<pre class="methodSignature">public static&nbsp;boolean&nbsp;isJavaType&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;t)</pre>
</li>
</ul>
<a id="fieldsOf(java.lang.Class)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fieldsOf</h4>
<pre class="methodSignature">private&nbsp;java.util.List&lt;<a href="RelDataTypeFieldImpl.html" title="class in org.apache.calcite.rel.type">RelDataTypeFieldImpl</a>&gt;&nbsp;fieldsOf&#8203;(java.lang.Class&nbsp;clazz)</pre>
</li>
</ul>
<a id="createDecimalProduct(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createDecimalProduct</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createDecimalProduct&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</pre>
<div class="block">Infers the return type of a decimal multiplication. Decimal
multiplication involves at least one decimal operand and requires both
operands to have exact numeric types.
<p>Implement RelDataTypeFactory with SQL 2003 compliant behavior. 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>p = p1 + p2</li>
<li>s = s1 + s2</li>
</ul>
<p>p and s are capped at their maximum values</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createDecimalProduct(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">createDecimalProduct</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type1</code> - type of the first operand</dd>
<dd><code>type2</code> - type of the second operand</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the result type for a decimal multiplication, or null if decimal
multiplication should not be applied to the operands.</dd>
<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="useDoubleMultiplication(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>useDoubleMultiplication</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;useDoubleMultiplication&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#useDoubleMultiplication(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">RelDataTypeFactory</a></code></span></div>
<div class="block">Returns whether a decimal multiplication should be implemented by casting
arguments to double values.
<p>Pre-condition: <code>createDecimalProduct(type1, type2) != null</code></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#useDoubleMultiplication(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">useDoubleMultiplication</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
</dl>
</li>
</ul>
<a id="createDecimalQuotient(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createDecimalQuotient</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;createDecimalQuotient&#8203;(<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type1,
<a href="RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;type2)</pre>
<div class="block">Rules:
<ul>
<li>Let p1, s1 be the precision and scale of the first operand
<li>Let p2, s2 be the precision and scale of the second operand
<li>Let p, s be the precision and scale of the result
<li>Let d be the number of whole digits in the result
<li>Then the result type is a decimal with:
<ul>
<li>d = p1 - s1 + s2</li>
<li>s &lt; max(6, s1 + p2 + 1)</li>
<li>p = d + s</li>
</ul>
</li>
<li>p and s are capped at their maximum values</li>
</ul></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#createDecimalQuotient(org.apache.calcite.rel.type.RelDataType,org.apache.calcite.rel.type.RelDataType)">createDecimalQuotient</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type1</code> - type of the first operand</dd>
<dd><code>type2</code> - type of the second operand</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the result type for a decimal division, or null if decimal
division should not be applied to the operands.</dd>
<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="getDefaultCharset()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDefaultCharset</h4>
<pre class="methodSignature">public&nbsp;java.nio.charset.Charset&nbsp;getDefaultCharset()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#getDefaultCharset()">getDefaultCharset</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the default <code>Charset</code> for string types</dd>
</dl>
</li>
</ul>
<a id="builder()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>builder</h4>
<pre class="methodSignature">public&nbsp;<a href="RelDataTypeFactory.FieldInfoBuilder.html" title="class in org.apache.calcite.rel.type">RelDataTypeFactory.FieldInfoBuilder</a>&nbsp;builder()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="RelDataTypeFactory.html#builder()">RelDataTypeFactory</a></code></span></div>
<div class="block">Creates a
<a href="RelDataTypeFactory.FieldInfoBuilder.html" title="class in org.apache.calcite.rel.type"><code>RelDataTypeFactory.FieldInfoBuilder</code></a>.
But since <code>FieldInfoBuilder</code> is deprecated, we recommend that you use
its base class <a href="RelDataTypeFactory.Builder.html" title="class in org.apache.calcite.rel.type"><code>RelDataTypeFactory.Builder</code></a>, which is not deprecated.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="RelDataTypeFactory.html#builder()">builder</a></code>&nbsp;in interface&nbsp;<code><a href="RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a></code></dd>
</dl>
</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/RelDataTypeFactoryImpl.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><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="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>