blob: 32942fd03a3258a5ac1bb3a50748248364a95a10 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="zh">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Extensions (Apache Calcite calcite API)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Extensions (Apache Calcite calcite API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9};
var tabs = {65535:["t0","所有方法"],1:["t1","静态方法"],8:["t4","具体方法"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>您的浏览器已禁用 JavaScript。</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="导航">
<li><a href="../../../../overview-summary.html">概览</a></li>
<li><a href="package-summary.html">程序包</a></li>
<li class="navBarCell1Rev"></li>
<li><a href="package-tree.html"></a></li>
<li><a href="../../../../deprecated-list.html">已过时</a></li>
<li><a href="../../../../index-all.html">索引</a></li>
<li><a href="../../../../help-doc.html">帮助</a></li>
</ul>
<div class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/calcite/linq4j/ExtendedOrderedQueryable.html" title="org.apache.calcite.linq4j中的接口"><span class="typeNameLink">上一个类</span></a></li>
<li><a href="../../../../org/apache/calcite/linq4j/Grouping.html" title="org.apache.calcite.linq4j中的接口"><span class="typeNameLink">下一个类</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/calcite/linq4j/Extensions.html" target="_top">框架</a></li>
<li><a href="Extensions.html" target="_top">无框架</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">所有类</a></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>
</div>
<div>
<ul class="subNavList">
<li>概要:&nbsp;</li>
<li>嵌套&nbsp;|&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li>构造器&nbsp;|&nbsp;</li>
<li><a href="#method.summary">方法</a></li>
</ul>
<ul class="subNavList">
<li>详细资料:&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li>构造器&nbsp;|&nbsp;</li>
<li><a href="#method.detail">方法</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.calcite.linq4j</div>
<h2 title="类 Extensions" class="title">类 Extensions</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.calcite.linq4j.Extensions</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">Extensions</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">Object</a></pre>
<div class="block">Contains what, in LINQ.NET, would be extension methods.
<h2>Notes on mapping from LINQ.NET to Java</h2>
<p>We have preserved most of the API. But we've changed a few things, so that
the API is more typical Java API:</p>
<ul>
<li>Java method names start with a lower-case letter.</li>
<li>A few methods became keywords when their first letter was converted
to lower case; hence
<a href="../../../../org/apache/calcite/linq4j/tree/Expressions.html#break_-org.apache.calcite.linq4j.tree.LabelTarget-"><code>Expressions.break_(org.apache.calcite.linq4j.tree.LabelTarget)</code></a></li>
<li>We created a Java interface <a href="../../../../org/apache/calcite/linq4j/Enumerable.html" title="org.apache.calcite.linq4j中的接口"><code>Enumerable</code></a>, similar to LINQ.NET's
IEnumerable. IEnumerable is built into C#, and that gives it
advantages: the standard collections implement it, and you can use
any IEnumerable in a foreach loop. We made the Java
<code>Enumerable</code> extend <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="java.lang中的类或接口"><code>Iterable</code></a>,
so that it can be used in for-each loops. But the standard
collections still don't implement it. A few methods that take an
IEnumerable in LINQ.NET take an Iterable in LINQ4J.</li>
<li>LINQ.NET's Dictionary interface maps to Map in Java;
hence, the LINQ.NET <code>ToDictionary</code> methods become
<code>toMap</code>.</li>
<li>LINQ.NET's decimal type changes to BigDecimal. (A little bit unnatural,
since decimal is primitive and BigDecimal is not.)</li>
<li>There is no Nullable in Java. Therefore we distinguish between methods
that return, say, Long (which may be null) and long. See for example
<a href="../../../../org/apache/calcite/linq4j/function/NullableLongFunction1.html" title="org.apache.calcite.linq4j.function中的接口"><code>NullableLongFunction1</code></a> and
<a href="../../../../org/apache/calcite/linq4j/function/LongFunction1.html" title="org.apache.calcite.linq4j.function中的接口"><code>LongFunction1</code></a>, and the
variants of <a href="../../../../org/apache/calcite/linq4j/ExtendedEnumerable.html#sum-org.apache.calcite.linq4j.function.BigDecimalFunction1-"><code>ExtendedEnumerable.sum(org.apache.calcite.linq4j.function.BigDecimalFunction1&lt;TSource&gt;)</code></a> that call them.
<li>Java erases type parameters from argument types before resolving
overloading. Therefore similar methods have the same erasure. Methods
<code>averageDouble</code>,
<code>averageInteger</code>,
<code>groupByK</code>,
<code>selectN</code>,
<code>selectManyN</code>,
<code>skipWhileN</code>,
<code>sumBigDecimal</code>,
<code>sumNullableBigDecimal</code>,
<code>whereN</code>
have been renamed from <code>average</code>, <code>groupBy</code>, <code>max</code>,
<code>min</code>, <code>select</code>, <code>selectMany</code>, <code>skipWhile</code> and
<code>where</code> to prevent ambiguity.</li>
<li>.NET allows <i>extension methods</i> &mdash; static methods that then
become, via compiler magic, a method of any object whose type is the
same as the first parameter of the extension method. In LINQ.NET, the
<code>IQueryable</code> and <code>IEnumerable</code> interfaces have many such methods.
In Java, those methods need to be explicitly added to the interface, and will
need to be implemented by every class that implements that interface.
We can help by implementing the methods as static methods, and by
providing an abstract base class that implements the extension methods
in the interface. Hence <a href="../../../../org/apache/calcite/linq4j/AbstractEnumerable.html" title="org.apache.calcite.linq4j中的类"><code>AbstractEnumerable</code></a> and
<a href="../../../../org/apache/calcite/linq4j/AbstractQueryable.html" title="org.apache.calcite.linq4j中的类"><code>AbstractQueryable</code></a> call methods in <a href="../../../../org/apache/calcite/linq4j/Extensions.html" title="org.apache.calcite.linq4j中的类"><code>Extensions</code></a>.</li>
<li>.NET Func becomes <a href="../../../../org/apache/calcite/linq4j/function/Function0.html" title="org.apache.calcite.linq4j.function中的接口"><code>Function0</code></a>,
<a href="../../../../org/apache/calcite/linq4j/function/Function1.html" title="org.apache.calcite.linq4j.function中的接口"><code>Function1</code></a>,
<a href="../../../../org/apache/calcite/linq4j/function/Function2.html" title="org.apache.calcite.linq4j.function中的接口"><code>Function2</code></a>, depending
on the number of arguments to the function, because Java types cannot be
overloaded based on the number of type parameters.</li>
<li>Types map as follows:
<code>Int32</code> &rarr; <code>int</code> or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="java.lang中的类或接口"><code>Integer</code></a>,
<code>Int64</code> &rarr; <code>long</code> or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="java.lang中的类或接口"><code>Long</code></a>,
<code>bool</code> &rarr; <code>boolean</code> or <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="java.lang中的类或接口"><code>Boolean</code></a>,
<code>Dictionary</code> &rarr; <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="java.util中的类或接口"><code>Map</code></a>,
<code>Lookup</code> &rarr; <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="java.util中的类或接口"><code>Map</code></a> whose value type is an <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="java.lang中的类或接口"><code>Iterable</code></a>,
</li>
<li>Function types that accept primitive types in LINQ.NET have become
boxed types in LINQ4J. For example, a predicate function
<code>Func&amp;lt;T, bool&amp;gt;</code> becomes <code>Func1&amp;lt;T, Boolean&amp;gt;</code>.
It would be wrong to infer that the function is allowed to return null.</li>
</ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>方法概要</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="方法概要表, 列表方法和解释">
<caption><span id="t0" class="activeTableTab"><span>所有方法</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">静态方法</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">具体方法</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">限定符和类型</th>
<th class="colLast" scope="col">方法和说明</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../org/apache/calcite/linq4j/Queryable.html" title="org.apache.calcite.linq4j中的接口">Queryable</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/calcite/linq4j/Extensions.html#asQueryable-org.apache.calcite.linq4j.DefaultEnumerable-">asQueryable</a></span>(<a href="../../../../org/apache/calcite/linq4j/DefaultEnumerable.html" title="org.apache.calcite.linq4j中的类">DefaultEnumerable</a>&lt;T&gt;&nbsp;source)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="java.lang中的类或接口">RuntimeException</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/calcite/linq4j/Extensions.html#todo--">todo</a></span>()</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>从类继承的方法&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="java.lang中的类或接口">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="java.lang中的类或接口">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="java.lang中的类或接口">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="java.lang中的类或接口">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="java.lang中的类或接口">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="java.lang中的类或接口">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="java.lang中的类或接口">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="java.lang中的类或接口">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="java.lang中的类或接口">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="java.lang中的类或接口">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="java.lang中的类或接口">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="java.lang中的类或接口">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>方法详细资料</h3>
<a name="todo--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>todo</h4>
<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="java.lang中的类或接口">RuntimeException</a>&nbsp;todo()</pre>
</li>
</ul>
<a name="asQueryable-org.apache.calcite.linq4j.DefaultEnumerable-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>asQueryable</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../org/apache/calcite/linq4j/Queryable.html" title="org.apache.calcite.linq4j中的接口">Queryable</a>&lt;T&gt;&nbsp;asQueryable(<a href="../../../../org/apache/calcite/linq4j/DefaultEnumerable.html" title="org.apache.calcite.linq4j中的类">DefaultEnumerable</a>&lt;T&gt;&nbsp;source)</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="导航">
<li><a href="../../../../overview-summary.html">概览</a></li>
<li><a href="package-summary.html">程序包</a></li>
<li class="navBarCell1Rev"></li>
<li><a href="package-tree.html"></a></li>
<li><a href="../../../../deprecated-list.html">已过时</a></li>
<li><a href="../../../../index-all.html">索引</a></li>
<li><a href="../../../../help-doc.html">帮助</a></li>
</ul>
<div class="aboutLanguage"><b>Apache Calcite</b></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/calcite/linq4j/ExtendedOrderedQueryable.html" title="org.apache.calcite.linq4j中的接口"><span class="typeNameLink">上一个类</span></a></li>
<li><a href="../../../../org/apache/calcite/linq4j/Grouping.html" title="org.apache.calcite.linq4j中的接口"><span class="typeNameLink">下一个类</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/calcite/linq4j/Extensions.html" target="_top">框架</a></li>
<li><a href="Extensions.html" target="_top">无框架</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">所有类</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>
</div>
<div>
<ul class="subNavList">
<li>概要:&nbsp;</li>
<li>嵌套&nbsp;|&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li>构造器&nbsp;|&nbsp;</li>
<li><a href="#method.summary">方法</a></li>
</ul>
<ul class="subNavList">
<li>详细资料:&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li>构造器&nbsp;|&nbsp;</li>
<li><a href="#method.detail">方法</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &copy; 2012-2020 Apache Software Foundation. All Rights Reserved.</small></p>
</body>
</html>