| <!DOCTYPE HTML> |
| <html lang="en-US"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <meta charset="UTF-8"> |
| <title>Release 1.28.0</title> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="generator" content="Jekyll v4.2.2"> |
| <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900"> |
| <link rel="stylesheet" href="/css/screen.css"> |
| <link rel="icon" type="image/x-icon" href="/favicon.ico"> |
| </head> |
| |
| |
| <body class="wrap"> |
| <header role="banner"> |
| <div class="grid"> |
| <div class="unit center-on-mobiles"> |
| <h1> |
| <a href="/"> |
| <span class="sr-only">Apache Calcite</span> |
| <img src="/img/logo.svg" alt="Calcite Logo"> |
| </a> |
| </h1> |
| </div> |
| <nav class="main-nav"> |
| <ul> |
| <li class=""> |
| <a href="/">Home</a> |
| </li> |
| <li class=""> |
| <a href="/downloads/">Download</a> |
| </li> |
| <li class=""> |
| <a href="/community/">Community</a> |
| </li> |
| <li class=""> |
| <a href="/develop/">Develop</a> |
| </li> |
| <li class="current"> |
| <a href="/news/">News</a> |
| </li> |
| <li class=""> |
| <a href="/docs/">Docs</a> |
| </li> |
| </ul> |
| |
| </nav> |
| </div> |
| </header> |
| |
| |
| <section class="news"> |
| <div class="grid"> |
| |
| <div class="docs-nav-mobile unit whole show-on-mobiles"> |
| <select onchange="if (this.value) window.location.href=this.value"> |
| <option value="">Navigate the blog…</option> |
| <option value="/news/">Home</option> |
| <optgroup label="v1.x"> |
| <option value="/news/2023/02/07/release_1.33.0/">Release_1.33.0</option> |
| <option value="/news/2022/09/10/release-1.32.0/">Release 1.32.0</option> |
| <option value="/news/2022/08/02/release-1.31.0/">Release 1.31.0</option> |
| <option value="/news/2022/03/19/release-1.30.0/">Release 1.30.0</option> |
| <option value="/news/2021/12/25/release-1.29.0/">Release 1.29.0</option> |
| <option value="/news/2021/10/19/release-1.28.0/">Release 1.28.0</option> |
| <option value="/news/2021/06/03/release-1.27.0/">Release 1.27.0</option> |
| <option value="/news/2021/01/11/meetup/">Calcite Online Meetup January 2021</option> |
| <option value="/news/2020/10/06/release-1.26.0/">Release 1.26.0</option> |
| <option value="/news/2020/08/22/release-1.25.0/">Release 1.25.0</option> |
| <option value="/news/2020/07/23/release-1.24.0/">Release 1.24.0</option> |
| <option value="/news/2020/05/23/release-1.23.0/">Release 1.23.0</option> |
| <option value="/news/2020/03/05/release-1.22.0/">Release 1.22.0</option> |
| <option value="/news/2019/09/11/release-1.21.0/">Release 1.21.0</option> |
| <option value="/news/2019/06/24/release-1.20.0/">Release 1.20.0</option> |
| <option value="/news/2019/03/25/release-1.19.0/">Release 1.19.0</option> |
| <option value="/news/2018/12/21/release-1.18.0/">Release 1.18.0</option> |
| <option value="/news/2018/07/20/release-1.17.0/">Release 1.17.0</option> |
| <option value="/news/2018/03/19/release-1.16.0/">Release 1.16.0</option> |
| <option value="/news/2017/12/11/release-1.15.0/">Release 1.15.0</option> |
| <option value="/news/2017/10/02/release-1.14.0/">Release 1.14.0</option> |
| <option value="/news/2017/06/26/release-1.13.0/">Release 1.13.0</option> |
| <option value="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</option> |
| <option value="/news/2017/03/24/release-1.12.0/">Release 1.12.0</option> |
| <option value="/news/2017/01/09/release-1.11.0/">Release 1.11.0</option> |
| <option value="/news/2016/10/12/release-1.10.0/">Release 1.10.0</option> |
| <option value="/news/2016/09/22/release-1.9.0/">Release 1.9.0</option> |
| <option value="/news/2016/06/13/release-1.8.0/">Release 1.8.0</option> |
| <option value="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</option> |
| <option value="/news/2016/03/22/release-1.7.0/">Release 1.7.0</option> |
| <option value="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</option> |
| <option value="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</option> |
| <option value="/news/2016/01/22/release-1.6.0/">Release 1.6.0</option> |
| <option value="/news/2015/11/10/release-1.5.0/">Release 1.5.0</option> |
| <option value="/news/2015/11/08/new-committers/">Calcite adds 2 committers</option> |
| <option value="/news/2015/10/22/calcite-graduates/">Calcite Graduates</option> |
| <option value="/news/2015/09/02/release-1.4.0-incubating/">Release 1.4.0 Incubating</option> |
| <option value="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</option> |
| <option value="/news/2015/06/05/algebra-builder/">Algebra builder</option> |
| <option value="/news/2015/05/30/release-1.3.0-incubating/">Release 1.3.0 Incubating</option> |
| <option value="/news/2015/04/24/new-committers/">Calcite adds 5 committers</option> |
| <option value="/news/2015/04/07/release-1.2.0-incubating/">Release 1.2.0 Incubating</option> |
| <option value="/news/2015/03/13/release-1.1.0-incubating/">Release 1.1.0 Incubating</option> |
| <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option> |
| <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option> |
| <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option> |
| <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option> |
| |
| </optgroup> |
| </select> |
| </div> |
| |
| |
| <div class="unit four-fifths"> |
| <article> |
| <h2> |
| Release 1.28.0 |
| <a href="/news/2021/10/19/release-1.28.0/" class="permalink" title="Permalink">∞</a> |
| </h2> |
| <span class="post-category"> |
| <span class="label"> |
| release |
| </span> |
| </span> |
| <div class="post-meta"> |
| <span class="post-date"> |
| 19 Oct 2021 |
| </span> |
| |
| |
| |
| <a href="http://people.apache.org/~jhyde" class="post-author"> |
| <img src="https://github.com/julianhyde.png" class="avatar" alt="jhyde avatar" width="24" height="24"> |
| jhyde |
| </a> |
| </div> |
| <div class="post-content"> |
| <!-- |
| |
| --> |
| |
| <p>The <a href="">Apache Calcite PMC</a> |
| is pleased to announce |
| <a href="/docs/history.html#v1-28-0">Apache Calcite release 1.28.0</a>.</p> |
| |
| <p>This release comes four months after <a href="/docs/history.html#v1-27-0">1.27.0</a>, |
| contains contributions from 38 authors, |
| and resolves 76 issues. |
| New features include the |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4486">UNIQUE</a> |
| sub-query predicate, the |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4661">MODE</a> aggregate function, |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4644">PERCENTILE_CONT and PERCENTILE_DISC</a> |
| inverse distribution functions, an |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4614">Exasol dialect</a> |
| for the JDBC adapter, and improvements to |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4779">materialized</a> |
| <a href="https://issues.apache.org/jira/browse/CALCITE-3935">view</a> |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4774">recognition</a>.</p> |
| |
| <p>This release contains some breaking changes (described below) due to the |
| <a href="https://issues.apache.org/jira/browse/CALCITE-4787">replacement of ImmutableBeans with Immutables</a>. |
| Two APIs are deprecated and will be |
| <a href="/docs/history.html#to-be-removed-in-1-29-0">removed in release 1.29</a>.</p> |
| |
| <h2 id="breaking-changes-to-immutablebeans">Breaking changes to ImmutableBeans</h2> |
| |
| <p>In 1.28, Calcite converted the recently introduced |
| <a href="https://issues.apache.org/jira/browse/CALCITE-3328">configuration system</a> |
| from an internal system based on |
| <a href="https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/util/ImmutableBeans.java">ImmutableBeans</a> |
| to instead use the <a href="https://immutables.github.io/">Immutables</a> |
| annotation processor. This library brings a large number of additional |
| features that should make value-type classes in Calcite easier to |
| build and leverage. It also reduces reliance on dynamic proxies, which |
| should improve performance and reduce memory footprint. Lastly, this |
| change increases compatibility with ahead-of-time compilation |
| technologies such as <a href="https://www.graalvm.org/">GraalVM</a>. As part of |
| this change, a number of minor changes have been made and key methods |
| and classes have been deprecated. The change was designed to minimize |
| disruption to existing consumers of Calcite but the following minor |
| changes needed to be made:</p> |
| <ul> |
| <li>The |
| <a href="https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/plan/RelRule.java#L125">RelRule.Config.EMPTY</a> |
| field is now deprecated. To create a new configuration subclass, you |
| can either use your preferred interface-implementation based |
| construction or you can leverage Immutables. To do the latter, |
| <a href="https://immutables.github.io/getstarted.html">configure your project</a> |
| to use the Immutables annotation processor and annotate your |
| subclass with the |
| <a href="https://immutables.github.io/immutable.html#value"><code class="language-plaintext highlighter-rouge">@Value.Immutable</code></a> |
| annotation.</li> |
| <li>Where <code class="language-plaintext highlighter-rouge">RelRule.Config</code> subclasses were nested 2+ classes deep, the |
| interfaces have been marked deprecated and are superceded by new, |
| uniquely named interfaces. The original Configs extend the new |
| uniquely named interfaces. Subclassing these work as before and the |
| existing rule signatures accept any previously implemented Config |
| implementations. However, this is a breaking change if a user stored |
| an instance of the <code class="language-plaintext highlighter-rouge">DEFAULT</code> object using the Config class name (as |
| the <code class="language-plaintext highlighter-rouge">DEFAULT</code> instance now only implements the uniquely named |
| interface).</li> |
| <li>The <code class="language-plaintext highlighter-rouge">RelRule.Config.as()</code> method should only be used for safe |
| downcasts. Before, it could do arbitrary casts. The exception is |
| that arbitrary <code class="language-plaintext highlighter-rouge">as()</code> will continue to work when using the |
| deprecated <code class="language-plaintext highlighter-rouge">RelRule.Config.EMPTY</code> field. In most cases, this should |
| be a non-breaking change. However, all Calcite-defined <code class="language-plaintext highlighter-rouge">DEFAULT</code> |
| rule config instances use Immutables. As such, if one had previously |
| subclassed a <code class="language-plaintext highlighter-rouge">RelRule.Config</code> subclass and then used the <code class="language-plaintext highlighter-rouge">DEFAULT</code> |
| instance from that subclass, the <code class="language-plaintext highlighter-rouge">as()</code> call will no longer work to |
| coerce the <code class="language-plaintext highlighter-rouge">DEFAULT</code> instance into a arbitrary subclass. In essence, |
| outside the <code class="language-plaintext highlighter-rouge">EMPTY</code> use, <code class="language-plaintext highlighter-rouge">as()</code> is now only safe to do if a Java |
| cast is also safe.</li> |
| <li> |
| <code class="language-plaintext highlighter-rouge">ExchangeRemoveConstantKeysRule.Config</code> and |
| <code class="language-plaintext highlighter-rouge">ValuesReduceRule.Config</code> now declare concrete bounds for their |
| matchHandler configuration. This is a breaking change if one did not |
| use the Rule as a bounding variable.</li> |
| <li>Collections used in Immutables value classes will be converted to |
| Immutable collection types even if the passed in parameter is |
| mutable (such as an <code class="language-plaintext highlighter-rouge">ArrayList</code>). As such, consumers of those |
| configuration properties cannot mutate the returned collections.</li> |
| </ul> |
| |
| |
| <p>See the <a href="/docs/history.html#v1-28-0">release notes</a>; |
| <a href="/downloads#source-releases">download</a> the release.</p> |
| |
| </div> |
| </article> |
| |
| </div> |
| |
| <div class="unit one-fifth hide-on-mobiles"> |
| <aside> |
| <ul> |
| <li class=""> |
| <a href="/news/">All News</a> |
| </li> |
| <li class=""> |
| <a href="/news/releases/">Calcite Releases</a> |
| </li> |
| </ul> |
| <h4>Recent Releases</h4> |
| <ul> |
| |
| <li class=""> |
| <a href="/news/2023/02/07/release_1.33.0/">1.33.0</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2022/09/10/release-1.32.0/">1.32.0</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2022/08/02/release-1.31.0/">1.31.0</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2022/03/19/release-1.30.0/">1.30.0</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2021/12/25/release-1.29.0/">1.29.0</a> |
| </li> |
| |
| </ul> |
| <h4>Other News</h4> |
| <ul> |
| |
| <li class=""> |
| <a href="/news/2021/01/11/meetup/">Calcite Online Meetup January 2021</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2015/11/08/new-committers/">Calcite adds 2 committers</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2015/10/22/calcite-graduates/">Calcite Graduates</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2015/06/05/algebra-builder/">Algebra builder</a> |
| </li> |
| |
| <li class=""> |
| <a href="/news/2015/04/24/new-committers/">Calcite adds 5 committers</a> |
| </li> |
| |
| </ul> |
| </aside> |
| </div> |
| |
| |
| <div class="clear"></div> |
| |
| </div> |
| </section> |
| |
| |
| <footer role="contentinfo"> |
| <div id="poweredby"> |
| <a href="http://www.apache.org/"> |
| <span class="sr-only">Apache</span> |
| <img src="/img/feather.png" width="190" height="77" alt="Apache Logo"></a> |
| </div> |
| <div id="copyright"> |
| <p>The contents of this website are Copyright © 2023 |
| <a href="https://www.apache.org/">Apache Software Foundation</a> |
| under the terms of |
| the <a href="https://www.apache.org/licenses/"> |
| Apache License v2</a>. Apache Calcite and its logo are |
| trademarks of the Apache Software Foundation. |
| </p> |
| <p> |
| <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a> |
| </p> |
| </div> |
| </footer> |
| |
| <script> |
| var anchorForId = function (id) { |
| var anchor = document.createElement("a"); |
| anchor.className = "header-link"; |
| anchor.href = "#" + id; |
| anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>"; |
| anchor.title = "Permalink"; |
| return anchor; |
| }; |
| |
| var linkifyAnchors = function (level, containingElement) { |
| var headers = containingElement.getElementsByTagName("h" + level); |
| for (var h = 0; h < headers.length; h++) { |
| var header = headers[h]; |
| |
| if (typeof header.id !== "undefined" && header.id !== "") { |
| header.appendChild(anchorForId(header.id)); |
| } |
| } |
| }; |
| |
| document.onreadystatechange = function () { |
| if (this.readyState === "complete") { |
| var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]; |
| if (!contentBlock) { |
| return; |
| } |
| for (var level = 1; level <= 6; level++) { |
| linkifyAnchors(level, contentBlock); |
| } |
| } |
| }; |
| </script> |
| |
| |
| </body> |
| </html> |