blob: 850adf334392947fd3549c63441392f1c044e335 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>SqlCaseOperator (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="SqlCaseOperator (Apache Calcite API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
var tabs = {65535:["t0","All 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/SqlCaseOperator.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.fun</a></div>
<h2 title="Class SqlCaseOperator" class="title">Class SqlCaseOperator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">org.apache.calcite.sql.SqlOperator</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.sql.fun.SqlCaseOperator</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">SqlCaseOperator</span>
extends <a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></pre>
<div class="block">An operator describing a <code>CASE</code>, <code>NULLIF</code> or <code>
COALESCE</code> expression. All of these forms are normalized at parse time
to a to a simple <code>CASE</code> statement like this:
<blockquote><pre><code>CASE
WHEN &lt;when expression_0&gt; THEN &lt;then expression_0&gt;
WHEN &lt;when expression_1&gt; THEN &lt;then expression_1&gt;
...
WHEN &lt;when expression_N&gt; THEN &lt;then expression_N&gt;
ELSE &lt;else expression&gt;
END</code></pre></blockquote>
<p>The switched form of the <code>CASE</code> statement is normalized to the
simple form by inserting calls to the <code>=</code> operator. For
example,</p>
<blockquote><pre><code>CASE x + y
WHEN 1 THEN 'fee'
WHEN 2 THEN 'fie'
ELSE 'foe'
END</code></pre></blockquote>
<p>becomes</p>
<blockquote><pre><code>CASE
WHEN Equals(x + y, 1) THEN 'fee'
WHEN Equals(x + y, 2) THEN 'fie'
ELSE 'foe'
END</code></pre></blockquote>
<p>REVIEW jhyde 2004/3/19 Does <code>Equals</code> handle NULL semantics
correctly?</p>
<p><code>COALESCE(x, y, z)</code> becomes</p>
<blockquote><pre><code>CASE
WHEN x IS NOT NULL THEN x
WHEN y IS NOT NULL THEN y
ELSE z
END</code></pre></blockquote>
<p><code>NULLIF(x, -1)</code> becomes</p>
<blockquote><pre><code>CASE
WHEN x = -1 THEN NULL
ELSE x
END</code></pre></blockquote>
<p>Note that some of these normalizations cause expressions to be duplicated.
This may make it more difficult to write optimizer rules (because the rules
will have to deduce that expressions are equivalent). It also requires that
some part of the planning process (probably the generator of the calculator
program) does common sub-expression elimination.</p>
<p>REVIEW jhyde 2004/3/19. Expanding expressions at parse time has some other
drawbacks. It is more difficult to give meaningful validation errors: given
<code>COALESCE(DATE '2004-03-18', 3.5)</code>, do we issue a type-checking
error against a <code>CASE</code> operator? Second, I'd like to use the
<a href="../SqlNode.html" title="class in org.apache.calcite.sql"><code>SqlNode</code></a> object model to generate SQL to send to 3rd-party databases,
but there's now no way to represent a call to COALESCE or NULLIF. All in all,
it would be better to have operators for COALESCE, NULLIF, and both simple
and switched forms of CASE, then translate to simple CASE when building the
<a href="../../rex/RexNode.html" title="class in org.apache.calcite.rex"><code>RexNode</code></a> tree.</p>
<p>The arguments are physically represented as follows:</p>
<ul>
<li>The <i>when</i> expressions are stored in a <a href="../SqlNodeList.html" title="class in org.apache.calcite.sql"><code>SqlNodeList</code></a>
whenList.</li>
<li>The <i>then</i> expressions are stored in a <a href="../SqlNodeList.html" title="class in org.apache.calcite.sql"><code>SqlNodeList</code></a>
thenList.</li>
<li>The <i>else</i> expression is stored as a regular <a href="../SqlNode.html" title="class in org.apache.calcite.sql"><code>SqlNode</code></a>.</li>
</ul></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>private static <a href="../SqlWriter.FrameType.html" title="interface in org.apache.calcite.sql">SqlWriter.FrameType</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#FRAME_TYPE">FRAME_TYPE</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="SqlCaseOperator.html" title="class in org.apache.calcite.sql.fun">SqlCaseOperator</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#INSTANCE">INSTANCE</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.calcite.sql.SqlOperator">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.calcite.sql.<a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></h3>
<code><a href="../SqlOperator.html#kind">kind</a>, <a href="../SqlOperator.html#MDX_PRECEDENCE">MDX_PRECEDENCE</a>, <a href="../SqlOperator.html#NL">NL</a></code></li>
</ul>
</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()">SqlCaseOperator</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="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>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkOperandTypes(org.apache.calcite.sql.SqlCallBinding,boolean)">checkOperandTypes</a></span>&#8203;(<a href="../SqlCallBinding.html" title="class in org.apache.calcite.sql">SqlCallBinding</a>&nbsp;callBinding,
boolean&nbsp;throwOnFailure)</code></th>
<td class="colLast">
<div class="block">Checks that the operand values in a <a href="../SqlCall.html" title="class in org.apache.calcite.sql"><code>SqlCall</code></a> to this operator are
valid.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createCall(org.apache.calcite.sql.SqlLiteral,org.apache.calcite.sql.parser.SqlParserPos,org.apache.calcite.sql.SqlNode...)">createCall</a></span>&#8203;(<a href="../SqlLiteral.html" title="class in org.apache.calcite.sql">SqlLiteral</a>&nbsp;functionQualifier,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos,
<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>...&nbsp;operands)</code></th>
<td class="colLast">
<div class="block">Creates a call to this operand with an array of operands.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../rel/type/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="#deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">deriveType</a></span>&#8203;(<a href="../validate/SqlValidator.html" title="interface in org.apache.calcite.sql.validate">SqlValidator</a>&nbsp;validator,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;scope,
<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call)</code></th>
<td class="colLast">
<div class="block">Derives the type of a call to this operator.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../SqlOperandCountRange.html" title="interface in org.apache.calcite.sql">SqlOperandCountRange</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOperandCountRange()">getOperandCountRange</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns a constraint on the number of operands expected by this operator.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../SqlSyntax.html" title="enum in org.apache.calcite.sql">SqlSyntax</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSyntax()">getSyntax</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the syntactic type of this operator, never null.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../rel/type/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="#inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)">inferReturnType</a></span>&#8203;(<a href="../SqlOperatorBinding.html" title="class in org.apache.calcite.sql">SqlOperatorBinding</a>&nbsp;opBinding)</code></th>
<td class="colLast">
<div class="block">Infers the return type of an invocation of this operator; only called
after the number and types of operands have already been validated.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>private <a href="../../rel/type/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="#inferTypeFromOperands(org.apache.calcite.rel.type.RelDataTypeFactory,java.util.List)">inferTypeFromOperands</a></span>&#8203;(<a href="../../rel/type/RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a>&nbsp;typeFactory,
java.util.List&lt;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;argTypes)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>private <a href="../../rel/type/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="#inferTypeFromValidator(org.apache.calcite.sql.SqlCallBinding)">inferTypeFromValidator</a></span>&#8203;(<a href="../SqlCallBinding.html" title="class in org.apache.calcite.sql">SqlCallBinding</a>&nbsp;callBinding)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unparse(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlCall,int,int)">unparse</a></span>&#8203;(<a href="../SqlWriter.html" title="interface in org.apache.calcite.sql">SqlWriter</a>&nbsp;writer,
<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call_,
int&nbsp;leftPrec,
int&nbsp;rightPrec)</code></th>
<td class="colLast">
<div class="block">Writes a SQL representation of a call to this operator to a writer,
including parentheses if the operators on either side are of greater
precedence.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validateCall(org.apache.calcite.sql.SqlCall,org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.validate.SqlValidatorScope)">validateCall</a></span>&#8203;(<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call,
<a href="../validate/SqlValidator.html" title="interface in org.apache.calcite.sql.validate">SqlValidator</a>&nbsp;validator,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;scope,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;operandScope)</code></th>
<td class="colLast">
<div class="block">Validates a call to this operator.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.calcite.sql.SqlOperator">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.calcite.sql.<a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></h3>
<code><a href="../SqlOperator.html#acceptCall(org.apache.calcite.sql.util.SqlVisitor,org.apache.calcite.sql.SqlCall)">acceptCall</a>, <a href="../SqlOperator.html#acceptCall(org.apache.calcite.sql.util.SqlVisitor,org.apache.calcite.sql.SqlCall,boolean,org.apache.calcite.sql.util.SqlBasicVisitor.ArgHandler)">acceptCall</a>, <a href="../SqlOperator.html#adjustType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.SqlCall,org.apache.calcite.rel.type.RelDataType)">adjustType</a>, <a href="../SqlOperator.html#allowsFraming()">allowsFraming</a>, <a href="../SqlOperator.html#argumentMustBeScalar(int)">argumentMustBeScalar</a>, <a href="../SqlOperator.html#checkOperandCount(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.type.SqlOperandTypeChecker,org.apache.calcite.sql.SqlCall)">checkOperandCount</a>, <a href="../SqlOperator.html#constructArgNameList(org.apache.calcite.sql.SqlCall)">constructArgNameList</a>, <a href="../SqlOperator.html#constructArgTypeList(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall,java.util.List,boolean)">constructArgTypeList</a>, <a href="../SqlOperator.html#constructOperandList(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.SqlCall,java.util.List)">constructOperandList</a>, <a href="../SqlOperator.html#createCall(org.apache.calcite.sql.parser.SqlParserPos,java.util.List)">createCall</a>, <a href="../SqlOperator.html#createCall(org.apache.calcite.sql.parser.SqlParserPos,org.apache.calcite.sql.SqlNode...)">createCall</a>, <a href="../SqlOperator.html#createCall(org.apache.calcite.sql.SqlNodeList)">createCall</a>, <a href="../SqlOperator.html#equals(java.lang.Object)">equals</a>, <a href="../SqlOperator.html#getAllowedSignatures()">getAllowedSignatures</a>, <a href="../SqlOperator.html#getAllowedSignatures(java.lang.String)">getAllowedSignatures</a>, <a href="../SqlOperator.html#getKind()">getKind</a>, <a href="../SqlOperator.html#getLeftPrec()">getLeftPrec</a>, <a href="../SqlOperator.html#getMonotonicity(org.apache.calcite.sql.SqlCall,org.apache.calcite.sql.validate.SqlValidatorScope)">getMonotonicity</a>, <a href="../SqlOperator.html#getMonotonicity(org.apache.calcite.sql.SqlOperatorBinding)">getMonotonicity</a>, <a href="../SqlOperator.html#getName()">getName</a>, <a href="../SqlOperator.html#getNameAsId()">getNameAsId</a>, <a href="../SqlOperator.html#getOperandTypeChecker()">getOperandTypeChecker</a>, <a href="../SqlOperator.html#getOperandTypeInference()">getOperandTypeInference</a>, <a href="../SqlOperator.html#getReturnTypeInference()">getReturnTypeInference</a>, <a href="../SqlOperator.html#getRightPrec()">getRightPrec</a>, <a href="../SqlOperator.html#getSignatureTemplate(int)">getSignatureTemplate</a>, <a href="../SqlOperator.html#hashCode()">hashCode</a>, <a href="../SqlOperator.html#inferReturnType(org.apache.calcite.rel.type.RelDataTypeFactory,java.util.List)">inferReturnType</a>, <a href="../SqlOperator.html#isAggregator()">isAggregator</a>, <a href="../SqlOperator.html#isDeterministic()">isDeterministic</a>, <a href="../SqlOperator.html#isDynamicFunction()">isDynamicFunction</a>, <a href="../SqlOperator.html#isGroup()">isGroup</a>, <a href="../SqlOperator.html#isGroupAuxiliary()">isGroupAuxiliary</a>, <a href="../SqlOperator.html#isName(java.lang.String,boolean)">isName</a>, <a href="../SqlOperator.html#leftPrec(int,boolean)">leftPrec</a>, <a href="../SqlOperator.html#preValidateCall(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">preValidateCall</a>, <a href="../SqlOperator.html#requiresDecimalExpansion()">requiresDecimalExpansion</a>, <a href="../SqlOperator.html#requiresOrder()">requiresOrder</a>, <a href="../SqlOperator.html#requiresOver()">requiresOver</a>, <a href="../SqlOperator.html#rewriteCall(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.SqlCall)">rewriteCall</a>, <a href="../SqlOperator.html#rightPrec(int,boolean)">rightPrec</a>, <a href="../SqlOperator.html#toString()">toString</a>, <a href="../SqlOperator.html#unparseListClause(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlNode)">unparseListClause</a>, <a href="../SqlOperator.html#unparseListClause(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlNode,org.apache.calcite.sql.SqlKind)">unparseListClause</a>, <a href="../SqlOperator.html#validateOperands(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">validateOperands</a>, <a href="../SqlOperator.html#validRexOperands(int,org.apache.calcite.util.Litmus)">validRexOperands</a></code></li>
</ul>
<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, finalize, getClass, notify, notifyAll, 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="INSTANCE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INSTANCE</h4>
<pre>public static final&nbsp;<a href="SqlCaseOperator.html" title="class in org.apache.calcite.sql.fun">SqlCaseOperator</a> INSTANCE</pre>
</li>
</ul>
<a id="FRAME_TYPE">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>FRAME_TYPE</h4>
<pre>private static final&nbsp;<a href="../SqlWriter.FrameType.html" title="interface in org.apache.calcite.sql">SqlWriter.FrameType</a> FRAME_TYPE</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>SqlCaseOperator</h4>
<pre>private&nbsp;SqlCaseOperator()</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="validateCall(org.apache.calcite.sql.SqlCall,org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.validate.SqlValidatorScope)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validateCall</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;validateCall&#8203;(<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call,
<a href="../validate/SqlValidator.html" title="interface in org.apache.calcite.sql.validate">SqlValidator</a>&nbsp;validator,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;scope,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;operandScope)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#validateCall(org.apache.calcite.sql.SqlCall,org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.validate.SqlValidatorScope)">SqlOperator</a></code></span></div>
<div class="block">Validates a call to this operator.
<p>This method should not perform type-derivation or perform validation
related related to types. That is done later, by
<a href="../SqlOperator.html#deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)"><code>SqlOperator.deriveType(SqlValidator, SqlValidatorScope, SqlCall)</code></a>. This method
should focus on structural validation.
<p>A typical implementation of this method first validates the operands,
then performs some operator-specific logic. The default implementation
just validates the operands.
<p>This method is the default implementation of <a href="../SqlCall.html#validate(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope)"><code>SqlCall.validate(org.apache.calcite.sql.validate.SqlValidator, org.apache.calcite.sql.validate.SqlValidatorScope)</code></a>;
but note that some sub-classes of <a href="../SqlCall.html" title="class in org.apache.calcite.sql"><code>SqlCall</code></a> never call this method.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#validateCall(org.apache.calcite.sql.SqlCall,org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.validate.SqlValidatorScope)">validateCall</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>call</code> - the call to this operator</dd>
<dd><code>validator</code> - the active validator</dd>
<dd><code>scope</code> - validator scope</dd>
<dd><code>operandScope</code> - validator scope in which to validate operands to this
call; usually equal to scope, but not always because
some operators introduce new scopes</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../SqlNode.html#validateExpr(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope)"><code>SqlNode.validateExpr(SqlValidator, SqlValidatorScope)</code></a>,
<a href="../SqlOperator.html#deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)"><code>SqlOperator.deriveType(SqlValidator, SqlValidatorScope, SqlCall)</code></a></dd>
</dl>
</li>
</ul>
<a id="deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>deriveType</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;deriveType&#8203;(<a href="../validate/SqlValidator.html" title="interface in org.apache.calcite.sql.validate">SqlValidator</a>&nbsp;validator,
<a href="../validate/SqlValidatorScope.html" title="interface in org.apache.calcite.sql.validate">SqlValidatorScope</a>&nbsp;scope,
<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">SqlOperator</a></code></span></div>
<div class="block">Derives the type of a call to this operator.
<p>This method is an intrinsic part of the validation process so, unlike
<a href="../SqlOperator.html#inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)"><code>SqlOperator.inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)</code></a>, specific operators would not typically override
this method.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#deriveType(org.apache.calcite.sql.validate.SqlValidator,org.apache.calcite.sql.validate.SqlValidatorScope,org.apache.calcite.sql.SqlCall)">deriveType</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>validator</code> - Validator</dd>
<dd><code>scope</code> - Scope of validation</dd>
<dd><code>call</code> - Call to this operator</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Type of call</dd>
</dl>
</li>
</ul>
<a id="checkOperandTypes(org.apache.calcite.sql.SqlCallBinding,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>checkOperandTypes</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;checkOperandTypes&#8203;(<a href="../SqlCallBinding.html" title="class in org.apache.calcite.sql">SqlCallBinding</a>&nbsp;callBinding,
boolean&nbsp;throwOnFailure)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#checkOperandTypes(org.apache.calcite.sql.SqlCallBinding,boolean)">SqlOperator</a></code></span></div>
<div class="block">Checks that the operand values in a <a href="../SqlCall.html" title="class in org.apache.calcite.sql"><code>SqlCall</code></a> to this operator are
valid. Subclasses must either override this method or supply an instance
of <a href="../type/SqlOperandTypeChecker.html" title="interface in org.apache.calcite.sql.type"><code>SqlOperandTypeChecker</code></a> to the constructor.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#checkOperandTypes(org.apache.calcite.sql.SqlCallBinding,boolean)">checkOperandTypes</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>callBinding</code> - description of call</dd>
<dd><code>throwOnFailure</code> - whether to throw an exception if check fails
(otherwise returns false in that case)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether check succeeded</dd>
</dl>
</li>
</ul>
<a id="inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>inferReturnType</h4>
<pre class="methodSignature">public&nbsp;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;inferReturnType&#8203;(<a href="../SqlOperatorBinding.html" title="class in org.apache.calcite.sql">SqlOperatorBinding</a>&nbsp;opBinding)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)">SqlOperator</a></code></span></div>
<div class="block">Infers the return type of an invocation of this operator; only called
after the number and types of operands have already been validated.
Subclasses must either override this method or supply an instance of
<a href="../type/SqlReturnTypeInference.html" title="interface in org.apache.calcite.sql.type"><code>SqlReturnTypeInference</code></a> to the constructor.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#inferReturnType(org.apache.calcite.sql.SqlOperatorBinding)">inferReturnType</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>opBinding</code> - description of invocation (not necessarily a
<a href="../SqlCall.html" title="class in org.apache.calcite.sql"><code>SqlCall</code></a>)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>inferred return type</dd>
</dl>
</li>
</ul>
<a id="inferTypeFromValidator(org.apache.calcite.sql.SqlCallBinding)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>inferTypeFromValidator</h4>
<pre class="methodSignature">private&nbsp;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;inferTypeFromValidator&#8203;(<a href="../SqlCallBinding.html" title="class in org.apache.calcite.sql">SqlCallBinding</a>&nbsp;callBinding)</pre>
</li>
</ul>
<a id="inferTypeFromOperands(org.apache.calcite.rel.type.RelDataTypeFactory,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>inferTypeFromOperands</h4>
<pre class="methodSignature">private&nbsp;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&nbsp;inferTypeFromOperands&#8203;(<a href="../../rel/type/RelDataTypeFactory.html" title="interface in org.apache.calcite.rel.type">RelDataTypeFactory</a>&nbsp;typeFactory,
java.util.List&lt;<a href="../../rel/type/RelDataType.html" title="interface in org.apache.calcite.rel.type">RelDataType</a>&gt;&nbsp;argTypes)</pre>
</li>
</ul>
<a id="getOperandCountRange()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOperandCountRange</h4>
<pre class="methodSignature">public&nbsp;<a href="../SqlOperandCountRange.html" title="interface in org.apache.calcite.sql">SqlOperandCountRange</a>&nbsp;getOperandCountRange()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#getOperandCountRange()">SqlOperator</a></code></span></div>
<div class="block">Returns a constraint on the number of operands expected by this operator.
Subclasses may override this method; when they don't, the range is
derived from the <a href="../type/SqlOperandTypeChecker.html" title="interface in org.apache.calcite.sql.type"><code>SqlOperandTypeChecker</code></a> associated with this
operator.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#getOperandCountRange()">getOperandCountRange</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>acceptable range</dd>
</dl>
</li>
</ul>
<a id="getSyntax()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSyntax</h4>
<pre class="methodSignature">public&nbsp;<a href="../SqlSyntax.html" title="enum in org.apache.calcite.sql">SqlSyntax</a>&nbsp;getSyntax()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#getSyntax()">SqlOperator</a></code></span></div>
<div class="block">Returns the syntactic type of this operator, never null.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../SqlOperator.html#getSyntax()">getSyntax</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
</dl>
</li>
</ul>
<a id="createCall(org.apache.calcite.sql.SqlLiteral,org.apache.calcite.sql.parser.SqlParserPos,org.apache.calcite.sql.SqlNode...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createCall</h4>
<pre class="methodSignature">public&nbsp;<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;createCall&#8203;(<a href="../SqlLiteral.html" title="class in org.apache.calcite.sql">SqlLiteral</a>&nbsp;functionQualifier,
<a href="../parser/SqlParserPos.html" title="class in org.apache.calcite.sql.parser">SqlParserPos</a>&nbsp;pos,
<a href="../SqlNode.html" title="class in org.apache.calcite.sql">SqlNode</a>...&nbsp;operands)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#createCall(org.apache.calcite.sql.SqlLiteral,org.apache.calcite.sql.parser.SqlParserPos,org.apache.calcite.sql.SqlNode...)">SqlOperator</a></code></span></div>
<div class="block">Creates a call to this operand with an array of operands.
<p>The position of the resulting call is the union of the <code>
pos</code> and the positions of all of the operands.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#createCall(org.apache.calcite.sql.SqlLiteral,org.apache.calcite.sql.parser.SqlParserPos,org.apache.calcite.sql.SqlNode...)">createCall</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>functionQualifier</code> - function qualifier (e.g. "DISTINCT"), may be</dd>
<dd><code>pos</code> - parser position of the identifier of the call</dd>
<dd><code>operands</code> - array of operands</dd>
</dl>
</li>
</ul>
<a id="unparse(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlCall,int,int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>unparse</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;unparse&#8203;(<a href="../SqlWriter.html" title="interface in org.apache.calcite.sql">SqlWriter</a>&nbsp;writer,
<a href="../SqlCall.html" title="class in org.apache.calcite.sql">SqlCall</a>&nbsp;call_,
int&nbsp;leftPrec,
int&nbsp;rightPrec)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../SqlOperator.html#unparse(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlCall,int,int)">SqlOperator</a></code></span></div>
<div class="block">Writes a SQL representation of a call to this operator to a writer,
including parentheses if the operators on either side are of greater
precedence.
<p>The default implementation of this method delegates to
<a href="../SqlSyntax.html#unparse(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlOperator,org.apache.calcite.sql.SqlCall,int,int)"><code>SqlSyntax.unparse(org.apache.calcite.sql.SqlWriter, org.apache.calcite.sql.SqlOperator, org.apache.calcite.sql.SqlCall, int, int)</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../SqlOperator.html#unparse(org.apache.calcite.sql.SqlWriter,org.apache.calcite.sql.SqlCall,int,int)">unparse</a></code>&nbsp;in class&nbsp;<code><a href="../SqlOperator.html" title="class in org.apache.calcite.sql">SqlOperator</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/SqlCaseOperator.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>