blob: 17b41e4d0570b91679265bcd29024de92e6a9c9c [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title>History</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Jekyll v3.7.3">
<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="">
<a href="/news/">News</a>
</li>
<li class="current">
<a href="/docs/">Docs</a>
</li>
</ul>
</nav>
</div>
</header>
<section class="docs">
<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 docs…</option>
<optgroup label="Overview">
</optgroup>
<optgroup label="Advanced">
</optgroup>
<optgroup label="Avatica">
</optgroup>
<optgroup label="Reference">
</optgroup>
<optgroup label="Meta">
</optgroup>
</select>
</div>
<div class="unit four-fifths">
<article>
<h1>History</h1>
<!--
-->
<p>For a full list of releases, see
<a href="https://github.com/apache/calcite/releases">github</a>.
Downloads are available on the
<a href="/downloads/">downloads page</a>.</p>
<h2 id="v1-30-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.30.0">1.30.0</a> / 2022-03-20</h2>
<p>This release comes over two months after <a href="#v1-29-0">1.29.0</a>,
contains contributions from 29 authors,
and resolves 36 issues.</p>
<p>Among others, it is worth highlighting the following.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4980">Babel parser support MySQL NULL-safe equal operator ‘&lt;=&gt;’</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4967">Support SQL hints for temporal table join</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4885">Fluent test fixtures so that dependent projects can write parser, validator and rules tests</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-5030">Vulnerability issue CVE-2021-27568 fixed</a></li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using JDK/OpenJDK versions 8 to 17;
Guava versions 19.0 to 31.0.1-jre;
other software versions as specified in gradle.properties.</p>
<p>Contributors to this release:</p>
<p>Alessandro Solimando,
Bill Neil,
Chen Kai,
Eugen Stan,
Feng Zhu,
Jacques Nadeau,
Jake Xie,
Jay Narale,
Jiatao Tao,
Jing Zhang,
Julian Hyde,
LM Kang,
Liya Fan (release manager),
Marco Jorge,
Marieke Gueye,
NobiGo,
Roman Puchkovskiy,
Ruben Quesada Lopez,
Scott Reynolds,
Soumyakanti Das,
Stamatis Zampetakis,
Vova Vysotskyi,
Will Noble,
Xiong Duan,
Yanjing Wang,
Yiqun Zhang,
Xurenhe,
Zhe Hu,
mans2singh.</p>
<h4 id="new-features-1-30-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4980">CALCITE-4980</a>]
Babel parser support MySQL NULL-safe equal operator ‘&lt;=&gt;’</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4967">CALCITE-4967</a>]
Support SQL hints for temporal table join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4885">CALCITE-4885</a>]
Fluent test fixtures so that dependent projects can write parser, validator and rules tests</li>
</ul>
<h4 id="fixes-1-30-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5040">CALCITE-5040</a>]
<code class="highlighter-rouge">SqlTypeFactoryTest.testUnknownCreateWithNullabilityTypeConsistency</code> fails</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5019">CALCITE-5019</a>]
Avoid multiple scans when table is <code class="highlighter-rouge">ProjectableFilterableTable</code> and projections and filters act on different columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5011">CALCITE-5011</a>]
<code class="highlighter-rouge">CassandraAdapterDataTypesTest</code> fails with initialization error</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5008">CALCITE-5008</a>]
Ignore synthetic and static methods in <code class="highlighter-rouge">MetadataDef</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4997">CALCITE-4997</a>]
Keep <code class="highlighter-rouge">APPROX_COUNT_DISTINCT</code> in some <code class="highlighter-rouge">SqlDialect</code>s</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4996">CALCITE-4996</a>]
In <code class="highlighter-rouge">RelJson</code>, add a <code class="highlighter-rouge">readExpression</code> method that converts JSON to a <code class="highlighter-rouge">RexNode</code> expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4995">CALCITE-4995</a>]
<code class="highlighter-rouge">AssertionError</code> caused by <code class="highlighter-rouge">RelFieldTrimmer</code> on <code class="highlighter-rouge">SEMI/ANTI</code> join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4994">CALCITE-4994</a>]
SQL-to-RelNode conversion is slow if table contains hundreds of fields</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4991">CALCITE-4991</a>]
Improve <code class="highlighter-rouge">RuleEventLogger</code> to also print input rels in <code class="highlighter-rouge">FULL_PLAN</code> mode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4988">CALCITE-4988</a>]
<code class="highlighter-rouge">((A IS NOT NULL OR B) AND A IS NOT NULL)</code> can’t be simplify to <code class="highlighter-rouge">(A IS NOT NULL)</code> When <code class="highlighter-rouge">A</code> is deterministic</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4986">CALCITE-4986</a>]
Make <code class="highlighter-rouge">HepProgram</code> thread-safe</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4968">CALCITE-4968</a>]
Use <code class="highlighter-rouge">TOP N</code> for MsSQL instead of <code class="highlighter-rouge">FETCH</code> without <code class="highlighter-rouge">OFFSET</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4965">CALCITE-4965</a>]
<code class="highlighter-rouge">IS NOT NULL</code> failed in Elasticsearch Adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4963">CALCITE-4963</a>]
Make it easier to implement interface <code class="highlighter-rouge">SqlDialectFactory</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4953">CALCITE-4953</a>]
Deprecate <code class="highlighter-rouge">TableAccessMap</code> class</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4952">CALCITE-4952</a>]
Introduce a simplistic <code class="highlighter-rouge">RelMetadataQuery</code> option</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4912">CALCITE-4912</a>]
Confusing javadoc of <code class="highlighter-rouge">RexSimplify.simplify</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4901">CALCITE-4901</a>]
JDBC adapter incorrectly adds <code class="highlighter-rouge">ORDER BY</code> columns to the <code class="highlighter-rouge">SELECT</code> list of generated SQL query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4877">CALCITE-4877</a>]
Support Snapshot in <code class="highlighter-rouge">RelMdColumnOrigins</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4872">CALCITE-4872</a>]
Add <code class="highlighter-rouge">UNKNOWN</code> value to enum <code class="highlighter-rouge">SqlTypeName</code>, distinct from the <code class="highlighter-rouge">NULL</code> type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4702">CALCITE-4702</a>]
Error when executing query with <code class="highlighter-rouge">GROUP BY</code> constant via JDBC adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4683">CALCITE-4683</a>]
IN-list converted to JOIN throws type mismatch exception</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4323">CALCITE-4323</a>]
If a view definition has an <code class="highlighter-rouge">ORDER BY</code> clause, retain the sort if the view is used in a query at top level</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4054">CALCITE-4054</a>]
<code class="highlighter-rouge">RepeatUnion</code> containing a <code class="highlighter-rouge">Correlate</code> with a <code class="highlighter-rouge">transientScan</code> on its RHS causes NPE</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3673">CALCITE-3673</a>]
<code class="highlighter-rouge">ListTransientTable</code> should not leave tables in the schema</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3627">CALCITE-3627</a>]
Incorrect null semantic for <code class="highlighter-rouge">ROW</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1794">CALCITE-1794</a>]
Expressions with numeric comparisons are not simplified when <code class="highlighter-rouge">CAST</code> is present</li>
</ul>
<h4 id="build-1-30-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5006">CALCITE-5006</a>]
Gradle tasks for launching JDBC integration tests are not working</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4960">CALCITE-4960</a>]
Enable unit tests in Elasticsearch Adapter</li>
</ul>
<h4 id="dependency-1-30-0">Dependency version upgrade</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5030">CALCITE-5030</a>]
Upgrade jsonpath version from 2.4.0 to 2.7.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5025">CALCITE-5025</a>]
Upgrade commons-io version from 2.4 to 2.11.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-5007">CALCITE-5007</a>]
Upgrade H2 database version to 2.1.210</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4973">CALCITE-4973</a>]
Upgrade log4j2 version to 2.17.1</li>
</ul>
<h4 id="site-1-30-0">Web site and documentation</h4>
<ul>
<li>Site: Update PMC Chair</li>
<li>Site: Add external resources section in the community page</li>
<li>Site: Add “calcite-clj - Use Calcite with Clojure” in talks section</li>
<li>Site: Add Alessandro Solimando as committer</li>
<li>Site: Change the javadoc title to Apache Calcite API</li>
<li>Site: For tables that display results, center the content horizontally</li>
<li>Site: Add syntax highlighting to SQL statements</li>
<li>Site: Improve HTML tables display &amp; update CSV tutorial</li>
</ul>
<h2 id="v1-29-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.29.0">1.29.0</a> / 2021-12-26</h2>
<p>This release comes two months after <a href="#v1-28-0">1.28.0</a>,
contains contributions from 23 authors,
and resolves 47 issues.</p>
<p>This release upgrades
<a href="https://issues.apache.org/jira/browse/CALCITE-4950">log4j2 to 2.17.0</a>
to fix security vulnerabiities such as
<a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-44228">CVE-2021-44228</a>
and
<a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-45105">CVE-2021-45105</a>.</p>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using JDK/OpenJDK versions 8 to 17;
Guava versions 19.0 to 31.0.1-jre;
other software versions as specified in gradle.properties.</p>
<p>Contributors to this release:
Ada Wong,
Aleksey Plekhanov,
Alessandro Solimando,
Chunwei Lei,
Francesco Gini,
Jacques Nadeau,
Jay Narale,
Julian Hyde,
liuyanze,
Louis Kuang,
NobiGo,
Ruben Quesada Lopez,
Rui Wang (release manager),
Sergey Nuyanzin,
Stamatis Zampetakis,
Thomas Rebele,
Vladimir Sitnikov,
Will Noble,
Zhe Hu.</p>
<h4 id="new-features-1-29-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4822">CALCITE-4822</a>]
Add <code class="highlighter-rouge">ARRAY_CONCAT</code>, <code class="highlighter-rouge">ARRAY_REVERSE</code>, <code class="highlighter-rouge">ARRAY_LENGTH</code> functions for BigQuery dialect</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4877">CALCITE-4877</a>]
When a plugin class is not found, make the exception more explicit</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4841">CALCITE-4841</a>]
Support <code class="highlighter-rouge">decimal</code> column type in CSV and File adapters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4925">CALCITE-4925</a>]
<code class="highlighter-rouge">AggregateReduceFunctionsRule</code> should accept arbitrary predicates</li>
</ul>
<h4 id="fixes-1-29-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4839">CALCITE-4839</a>]
Remove remnants of <code class="highlighter-rouge">ImmutableBeans</code> post 1.28 release</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4795">CALCITE-4795</a>]
In class <code class="highlighter-rouge">SqlBasicCall</code>, make the <code class="highlighter-rouge">operands</code> field private</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4818">CALCITE-4818</a>]
<code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> must infer correct data type for top
aggregate calls</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4551">CALCITE-4551</a>]
Reusing immutable metadata cache keys</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4131">CALCITE-4131</a>]
The <code class="highlighter-rouge">XmlFunctions</code> exception handled by <code class="highlighter-rouge">System.out</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4875">CALCITE-4875</a>]
<code class="highlighter-rouge">NVL</code> function incorrectly changes nullability of its operands</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4844">CALCITE-4844</a>]
<code class="highlighter-rouge">IN</code>-list that references columns is wrongly converted to <code class="highlighter-rouge">Values</code>, and gives
incorrect results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4846">CALCITE-4846</a>]
<code class="highlighter-rouge">IN</code>-list that includes <code class="highlighter-rouge">NULL</code> converted to <code class="highlighter-rouge">Values</code> throws exception</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4884">CALCITE-4884</a>]
Provide a new constructor for <code class="highlighter-rouge">RelJsonWriter</code> to allow customized <code class="highlighter-rouge">JsonBuilder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4876">CALCITE-4876</a>]
JDBC adapter generates wrong SQL in Calcite dialect when <code class="highlighter-rouge">EnumerableIntersect</code>
is followed by <code class="highlighter-rouge">EnumerableLimit</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4883">CALCITE-4883</a>]
When <code class="highlighter-rouge">Exchange</code> is created from externalized JSON, <code class="highlighter-rouge">RelDistribution</code> is not
correctly set in its <code class="highlighter-rouge">traitSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4783">CALCITE-4783</a>]
<code class="highlighter-rouge">RelFieldTrimmer</code> incorrectly drops filter condition</li>
<li>Log plan after physical tweaks in new line</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4927">CALCITE-4927</a>]
Remove deprecated method <code class="highlighter-rouge">RelBuilder.groupKey(ImmutableBitSet, ImmutableList)</code>
that clashes with newer API method</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4928">CALCITE-4928</a>]
Decouple Janino from <code class="highlighter-rouge">RelMetadataQuery</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4932">CALCITE-4932</a>]
Deprecate <code class="highlighter-rouge">JdbcCalc</code> and remove <code class="highlighter-rouge">JdbcCalcRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4894">CALCITE-4894</a>]
Materialized view rewriting fails for conjunctive top expressions in <code class="highlighter-rouge">SELECT</code>
clause</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4929">CALCITE-4929</a>]
Add default methods for <code class="highlighter-rouge">getDef</code> on metadata handlers</li>
<li>Improve debug message in <code class="highlighter-rouge">IterativeRuleDriver</code>
</li>
<li>Remove duplicate entries from <code class="highlighter-rouge">RelOptRules.CALC_RULES</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4906">CALCITE-4906</a>]
Wrong result for scalar sub-query (single value aggregation) from empty input</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4941">CALCITE-4941</a>]
<code class="highlighter-rouge">SemiJoinRule</code> loses hints</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4895">CALCITE-4895</a>]
<code class="highlighter-rouge">MAP</code> type in user-defined function (UDF) cannot be created from externalized
JSON</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4946">CALCITE-4946</a>]
Add method <code class="highlighter-rouge">RelBuilder.size()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4704">CALCITE-4704</a>]
Log produced plan after rule application using explain formatting</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4700">CALCITE-4700</a>]
<code class="highlighter-rouge">AggregateUnionTransposeRule</code> produces wrong <code class="highlighter-rouge">groupingSets</code> for the top
<code class="highlighter-rouge">Aggregate</code>
</li>
</ul>
<h4 id="build-1-29-0">Build and test suite</h4>
<ul>
<li>Exclude kotlin-stdlib from <code class="highlighter-rouge">:core</code> runtime dependencies</li>
<li>Clarify why squash commits option in GitHub PR merge is disabled</li>
<li>Keep backslash when autoformatting <code class="highlighter-rouge">...\n" +</code>
</li>
<li>Use GitHub Action concurrency feature to cancel stale CI executions</li>
<li>Set timeout for running Druid tests in GitHub CI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4917">CALCITE-4917</a>]
Add test for <code class="highlighter-rouge">a IS NOT NULL AND a = b</code> simplification</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4851">CALCITE-4851</a>]
Build gives lots of ‘<code class="highlighter-rouge">Execution optimizations have been disabled</code>’ warnings</li>
</ul>
<h4 id="dependency-1-29-0">Dependency version upgrade</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4847">CALCITE-4847</a>]
Support Java 16 and 17</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4858">CALCITE-4858</a>]
Use Log4j2 instead of unsupported Log4j (1.x) in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4768">CALCITE-4768</a>]
Upgrade DataStax Driver for Apache Cassandra® version to latest 4.x</li>
<li>Bump <code class="highlighter-rouge">com.github.vlsi.vlsi-release-plugins</code> to 1.76</li>
<li>Update Gradle to 7.3</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4937">CALCITE-4937</a>]
Upgrade Calcite to Avatica 1.20</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4938">CALCITE-4938</a>]
Upgrade SQLLine to 1.12.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4948">CALCITE-4948</a>]
Upgrade Elasticsearch to 7.10.2</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4950">CALCITE-4950</a>]
Upgrade log4j2 version 2.17.0</li>
</ul>
<h4 id="site-1-29-0">Web site and documentation</h4>
<ul>
<li>Site: Add Xiong Duan as committer</li>
<li>Site: Fix typo in reference.md</li>
</ul>
<h2 id="v1-28-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.28.0">1.28.0</a> / 2021-10-19</h2>
<p>This release comes four months after <a href="#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 due to the
<a href="https://issues.apache.org/jira/browse/CALCITE-4787">replacement of ImmutableBeans with Immutables</a>;
the changes concern custom planner rule configurations, in particular
<code class="highlighter-rouge">interface RelRule.Config</code>, and are fully described in the
<a href="/news/2021/10/19/release-1.28.0">news item</a>.
Two APIs are deprecated and will be <a href="#to-be-removed-in-1-29-0">removed in release 1.29</a>.</p>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using JDK/OpenJDK versions 8 to 15;
Guava versions 19.0 to 31.0.1-jre;
other software versions as specified in gradle.properties.</p>
<p>Contributors to this release:
Alessandro Solimando,
Alon Eldar,
Amir Gajst,
Bruce Irschick,
dz,
Evgeniy Stanilovskiy,
Feng Zhu,
Grzegorz Gierlach,
Haisheng Yuan,
Jack Scott,
Jacky Yin,
Jacques Nadeau,
James Starr,
Jesus Camacho Rodriguez,
Jianhui Dong,
Jiasen Sheng,
Julian Hyde (release manager),
Liu Enze,
Michael Mior,
Narayanan Venkateswaran,
Nick Riasanovsky,
NobiGo,
Rafay Qureshi,
Ruben Quesada Lopez,
Sergey Nuyanzin,
Stamatis Zampetakis,
Taras Ledkov,
Thomas Rebele,
TJ Banghart,
Ulrich Kramer,
Vladimir Ozerov,
Vladimir Sitnikov,
Will Noble,
Xurenhe,
Yanjing Wang,
Yingyu Wang,
YuKong.</p>
<h4 id="to-be-removed-in-1-29-0">Deprecated for removal next release</h4>
<ul>
<li>In 1.28,
[<a href="https://issues.apache.org/jira/browse/CALCITE-4787">CALCITE-4787</a>]
added <code class="highlighter-rouge">class Immutables</code> and deprecated <code class="highlighter-rouge">ImmutableBeans</code>; in 1.29,
[<a href="https://issues.apache.org/jira/browse/CALCITE-4839">CALCITE-4839</a>]
will remove <code class="highlighter-rouge">ImmutableBeans</code>
</li>
<li>In 1.28,
[<a href="https://issues.apache.org/jira/browse/CALCITE-4795">CALCITE-4795</a>]
deprecated the <code class="highlighter-rouge">operands</code> field of <code class="highlighter-rouge">SqlBasicCall</code>. Before 1.29, we will make
that field private.</li>
</ul>
<h4 id="new-features-1-28-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4719">CALCITE-4719</a>]
Add variants of <code class="highlighter-rouge">RexSubQuery</code> that collect sub-queries into <code class="highlighter-rouge">MULTISET</code>, <code class="highlighter-rouge">ARRAY</code>
and <code class="highlighter-rouge">MAP</code> collections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3524">CALCITE-3524</a>]
In <code class="highlighter-rouge">RelBuilder</code>, add methods for creating various kinds of sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2736">CALCITE-2736</a>]
<code class="highlighter-rouge">ReduceExpressionsRule</code> never reduces dynamic expressions but this should be
configurable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4847">CALCITE-4847</a>]
Parse SQL with BigQuery-style quoted identifiers and character literals</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4805">CALCITE-4805</a>]
Calcite should convert a small <code class="highlighter-rouge">IN</code>-list as if the user had written <code class="highlighter-rouge">OR</code>, even
if the <code class="highlighter-rouge">IN</code>-list contains <code class="highlighter-rouge">NULL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4779">CALCITE-4779</a>]
If <code class="highlighter-rouge">GROUP BY</code> clause contains literal, materialized view recognition fails</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4486">CALCITE-4486</a>]
<code class="highlighter-rouge">UNIQUE</code> sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3935">CALCITE-3935</a>]
Enhance join materialization, support to pull-up filters under join of left or
right</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4767">CALCITE-4767</a>]
JDBC adapter wrongly quotes backticks inside BigQuery identifiers</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4774">CALCITE-4774</a>]
Materialized view recognition fails for equivalent predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4742">CALCITE-4742</a>]
Implement <code class="highlighter-rouge">SOME &lt;&gt;</code> sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4726">CALCITE-4726</a>]
Support aggregate calls with a <code class="highlighter-rouge">FILTER</code> clause in
<code class="highlighter-rouge">AggregateExpandWithinDistinctRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4748">CALCITE-4748</a>]
If there are duplicate <code class="highlighter-rouge">GROUPING SETS</code>, Calcite should return duplicate rows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4665">CALCITE-4665</a>]
Allow <code class="highlighter-rouge">Aggregate.groupKey</code> to be a strict superset of <code class="highlighter-rouge">Aggregate.groupKeys</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4724">CALCITE-4724</a>]
In JDBC adapter for ClickHouse, implement <code class="highlighter-rouge">Values</code> by generating <code class="highlighter-rouge">SELECT</code>
without <code class="highlighter-rouge">FROM</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4673">CALCITE-4673</a>]
If arguments to a table function are correlation variables, <code class="highlighter-rouge">SqlToRelConverter</code>
should eliminate duplicate variables</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4642">CALCITE-4642</a>]
Use <code class="highlighter-rouge">RelDataTypeSystem</code> from <code class="highlighter-rouge">Config</code> in <code class="highlighter-rouge">Planner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4661">CALCITE-4661</a>]
Add <code class="highlighter-rouge">MODE</code> aggregate function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4420">CALCITE-4420</a>]
Some simple arithmetic operations can be simplified</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4640">CALCITE-4640</a>]
Propagate table scan hints to JDBC</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4668">CALCITE-4668</a>]
<code class="highlighter-rouge">RelBuilder.join</code> should convert <code class="highlighter-rouge">Correlate</code> to <code class="highlighter-rouge">Join</code> if correlation variable
is unused</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4644">CALCITE-4644</a>]
Add <code class="highlighter-rouge">PERCENTILE_CONT</code> and <code class="highlighter-rouge">PERCENTILE_DISC</code> functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4614">CALCITE-4614</a>]
Exasol dialect implementation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4158">CALCITE-4158</a>]
In generated SQL, “<code class="highlighter-rouge">*</code>” should be followed by space</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4606">CALCITE-4606</a>]
In Elasticsearch adapter, translate <code class="highlighter-rouge">SEARCH</code> call to <code class="highlighter-rouge">termsQuery</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4499">CALCITE-4499</a>]
<code class="highlighter-rouge">FilterJoinRule</code> misses opportunity to push <code class="highlighter-rouge">Filter</code> to <code class="highlighter-rouge">SemiJoin</code> input</li>
</ul>
<h4 id="fixes-1-28-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4848">CALCITE-4848</a>]
Adding a <code class="highlighter-rouge">HAVING</code> condition to a query with a dynamic parameter makes the result
always empty</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4550">CALCITE-4550</a>]
Simplify <code class="highlighter-rouge">JaninoRelMetadataProvider</code> API for binding methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4740">CALCITE-4740</a>]
JDBC adapter generates incorrect <code class="highlighter-rouge">HAVING</code> clause in BigQuery dialect</li>
<li>Refactor: Introduce field <code class="highlighter-rouge">SqlUtil.GENERATED_EXPR_ALIAS_PREFIX</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4616">CALCITE-4616</a>]
<code class="highlighter-rouge">AggregateUnionTransposeRule</code> causes row type mismatch when some inputs have
unique grouping key</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4795">CALCITE-4795</a>]
In class <code class="highlighter-rouge">SqlBasicCall</code>, deprecated the <code class="highlighter-rouge">operands</code> field</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4628">CALCITE-4628</a>]
If <code class="highlighter-rouge">SqlImplementor</code> fails, include the <code class="highlighter-rouge">RelNode</code> in the exception</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4757">CALCITE-4757</a>]
In Avatica, support columns of type <code class="highlighter-rouge">NULL</code> in query results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4602">CALCITE-4602</a>]
<code class="highlighter-rouge">ClassCastException</code> retrieving from <code class="highlighter-rouge">ARRAY</code> that has mixed <code class="highlighter-rouge">INTEGER</code> and
<code class="highlighter-rouge">DECIMAL</code> elements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4600">CALCITE-4600</a>]
<code class="highlighter-rouge">ClassCastException</code> retrieving from an <code class="highlighter-rouge">ARRAY</code> that has <code class="highlighter-rouge">DATE</code>, <code class="highlighter-rouge">TIME</code> or
<code class="highlighter-rouge">TIMESTAMP</code> elements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3338">CALCITE-3338</a>]
Error with <code class="highlighter-rouge">executeBatch</code> and <code class="highlighter-rouge">preparedStatement</code> when using <code class="highlighter-rouge">RemoteMeta</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4811">CALCITE-4811</a>]
<code class="highlighter-rouge">Coalesce(null, row)</code> fails with <code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3583">CALCITE-3583</a>]
<code class="highlighter-rouge">Exchange</code> operator deserialize fails when the <code class="highlighter-rouge">RexInput</code> has no <code class="highlighter-rouge">RelCollation</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3745">CALCITE-3745</a>]
<code class="highlighter-rouge">CompileException</code> in <code class="highlighter-rouge">UnitCompiler</code> when using multiple class loaders</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4834">CALCITE-4834</a>]
<code class="highlighter-rouge">JaninoRelMetadataProvider</code> uses hardcoded class name</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4819">CALCITE-4819</a>]
<code class="highlighter-rouge">SemiJoin</code> operator is not skipped in materialized view-based rewriting
algorithm</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4546">CALCITE-4546</a>]
Change metadata dispatch to avoid registration of all <code class="highlighter-rouge">RelNode</code> subtypes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4787">CALCITE-4787</a>]
Replace <code class="highlighter-rouge">ImmutableBeans</code> with <code class="highlighter-rouge">Immutables</code> in <code class="highlighter-rouge">core</code> module
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4830">CALCITE-4830</a>]
Remove remaining uses of <code class="highlighter-rouge">ImmutableBeans</code> and deprecate</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4825">CALCITE-4825</a>]
Move remaining core/main off of <code class="highlighter-rouge">ImmutableBeans</code>
</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4532">CALCITE-4532</a>]
Correct code generated for primitive-object <code class="highlighter-rouge">ConstantExpression</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3409">CALCITE-3409</a>]
Add a method in <code class="highlighter-rouge">RelOptMaterializations</code> to allow registering <code class="highlighter-rouge">UnifyRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4773">CALCITE-4773</a>]
<code class="highlighter-rouge">RelDecorrelator</code>’s <code class="highlighter-rouge">RemoveSingleAggregateRule</code> can produce result with wrong
row type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4544">CALCITE-4544</a>]
Deprecate <code class="highlighter-rouge">Metadata</code> API backed by Java Reflection</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4772">CALCITE-4772</a>]
<code class="highlighter-rouge">PushProjector</code> should retain alias when handling <code class="highlighter-rouge">RexCall</code>
</li>
<li>Remove obsolete/misleading comments in <code class="highlighter-rouge">RelOptUtil#classifyFilters</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4784">CALCITE-4784</a>]
Ensure <code class="highlighter-rouge">Correlate#requiredColumns</code> is subset of columns in left relation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4177">CALCITE-4177</a>]
<code class="highlighter-rouge">RelJson</code> should throw if asked to deserialize a call to an unknown operator</li>
<li>Add <code class="highlighter-rouge">RelBuilder.lessThan</code>, and use <code class="highlighter-rouge">RelBuilder</code> shorthands</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4766">CALCITE-4766</a>]
Remove unreachable code from <code class="highlighter-rouge">SqlValidatorImpl#performUnconditionalRewrites</code>
for <code class="highlighter-rouge">Values</code> node</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4747">CALCITE-4747</a>]
In <code class="highlighter-rouge">HepPlanner</code>, remove outdated graph edges</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4760">CALCITE-4760</a>]
<code class="highlighter-rouge">RelBuilder</code> creation fails with error ‘<code class="highlighter-rouge">No suitable driver found for
jdbc:calcite:</code>’ in shaded Calcite</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4584">CALCITE-4584</a>]
Using function in <code class="highlighter-rouge">PARTITION BY</code> list of <code class="highlighter-rouge">OVER</code> window causes conversion
exception</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4734">CALCITE-4734</a>]
If there are duplicate <code class="highlighter-rouge">RexNode</code> in <code class="highlighter-rouge">MutableCalc</code>, <code class="highlighter-rouge">SubstitutionVisitor</code> should
return right rebuild <code class="highlighter-rouge">RexNode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4741">CALCITE-4741</a>]
<code class="highlighter-rouge">AbstractRelNode#getId</code> can overflow into a negative value, causing
<code class="highlighter-rouge">CompileException</code> in the <code class="highlighter-rouge">implement</code> methods of certain <code class="highlighter-rouge">Enumerable</code>
sub-classes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4652">CALCITE-4652</a>]
<code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> must cast top aggregates to original
type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4716">CALCITE-4716</a>]
<code class="highlighter-rouge">ClassCastException</code> converting Sarg in <code class="highlighter-rouge">RelNode</code> to SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4706">CALCITE-4706</a>]
JDBC adapter generates casts exceeding Redshift’s data types bounds</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4485">CALCITE-4485</a>]
JDBC adapter generates invalid SQL when one of the joins is <code class="highlighter-rouge">INNER JOIN ... ON
TRUE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4623">CALCITE-4623</a>]
<code class="highlighter-rouge">SemiJoinRule</code> should not match semi-join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4692">CALCITE-4692</a>]
Redshift does not support <code class="highlighter-rouge">DOUBLE</code> or <code class="highlighter-rouge">TINYINT</code> datatypes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4690">CALCITE-4690</a>]
Error when executing query with <code class="highlighter-rouge">CHARACTER SET</code> in Redshift</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4675">CALCITE-4675</a>]
Error executing query with SUM and multiplication via JDBC adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4674">CALCITE-4674</a>]
Excess quotes in generated SQL when “<code class="highlighter-rouge">*</code>” is a column alias</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3775">CALCITE-3775</a>]
Implicit lookup methods in <code class="highlighter-rouge">SimpleCalciteSchema</code> ignore case sensitivity
parameter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4638">CALCITE-4638</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> fails to recognize transformation rule correctly in the
top-down mode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4655">CALCITE-4655</a>]
<code class="highlighter-rouge">JdbcTable.scan</code> throws <code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4636">CALCITE-4636</a>]
Switch out of agg mode when constructing <code class="highlighter-rouge">RelCollation</code> for aggregate functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4619">CALCITE-4619</a>]
<code class="highlighter-rouge">FULL JOIN</code> plan cannot be executed in MySQL</li>
</ul>
<h4 id="build-1-28-0">Build and test suite</h4>
<ul>
<li>Bump JDK from 15 to 17 in seed build cache CI jobs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4798">CALCITE-4798</a>]
Gradle build fails due to deprecated metadata APIs</li>
<li>Use jdk16 instead of jdk17 since jdk17 is not yet available at AppVeyor</li>
<li>Fix string reference to <code class="highlighter-rouge">HrSchema</code> in <code class="highlighter-rouge">MaterializationTest</code> with
<code class="highlighter-rouge">HrSchema.class.getName()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4829">CALCITE-4829</a>]
Bump Gradle to 7.2 and test with Java 17 at GitHub Actions</li>
<li>Fix <code class="highlighter-rouge">ErrorProne</code> violations in <code class="highlighter-rouge">testkit</code>
</li>
<li>Add missing <code class="highlighter-rouge">@Override</code> annotations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4821">CALCITE-4821</a>]
Move utility test classes into <code class="highlighter-rouge">calcite-testkit</code> and unpublish <code class="highlighter-rouge">-test.jar</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4823">CALCITE-4823</a>]
Suppress warnings for <code class="highlighter-rouge">java.security.AccessController</code> deprecation</li>
<li>Skip <code class="highlighter-rouge">EqualsHashCode</code> verification in <code class="highlighter-rouge">ErrorProne</code>: it is already verified with
<code class="highlighter-rouge">Checkstyle</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4790">CALCITE-4790</a>]
Make Gradle pass the <code class="highlighter-rouge">user.timezone</code> property to the test JVM</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4793">CALCITE-4793</a>]
<code class="highlighter-rouge">CassandraAdapterDataTypesTest.testCollectionsInnerValues</code> fails depending on
the user timezone</li>
<li>Replace deprecated <code class="highlighter-rouge">com.google.common.io.Files.createTempDir()</code> with
<code class="highlighter-rouge">java.nio.file.Files.createTempDirectory()</code> in ElasticSearch tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4789">CALCITE-4789</a>]
Build is broken on Guava versions &lt; 21</li>
<li>Enable <code class="highlighter-rouge">JdbcTest#testBushy</code> and update expected plan</li>
<li>
<code class="highlighter-rouge">RelOptRulesTest</code> improvements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4312">CALCITE-4312</a>]
Improve content of <code class="highlighter-rouge">prepareVote</code> draft email</li>
</ul>
<h4 id="dependency-1-28-0">Dependency version upgrade</h4>
<ul>
<li>Bump Guava maximum version up to 31.0.1-jre</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4762">CALCITE-4762</a>]
Upgrade Calcite to Avatica 1.19</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4836">CALCITE-4836</a>]
Upgrade protobuf-java 3.6.1 → 3.17.1</li>
<li>Bump JUnit5 to 5.8.1</li>
</ul>
<h4 id="site-1-28-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4835">CALCITE-4835</a>]
Release Calcite 1.28.0</li>
<li>Site: Pronouns, talks</li>
<li>Site: Add Zhaohui Xu as committer</li>
<li>Site: Update fengzhu’s organization and add pronouns</li>
<li>Site: Remove vote email from release instructions, and minor improvements</li>
<li>Site: Add upcoming talk about Morel and update past talks section</li>
<li>Site: Remove contributors name from commit summary</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4656">CALCITE-4656</a>]
Broken CI links on develop web page</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4796">CALCITE-4796</a>]
Travis links in <code class="highlighter-rouge">README.md</code> should point to <code class="highlighter-rouge">app.travis-ci.com</code> instead of
<code class="highlighter-rouge">travis-ci.org</code>
</li>
<li>Site: HTTP to HTTPS redirection is not working</li>
<li>Site: Add zabetak’s pronouns</li>
<li>Site: Add michaelmior’s pronouns</li>
<li>Site: Update jhyde’s organization and add pronouns</li>
<li>Site is not published due to bad yaml file suffix</li>
<li>Site: Add upcoming talk at ApacheCon’21 and info about tutorial at BOSS21</li>
<li>Site: Sort table of aggregate functions</li>
<li>Site: Deploy using <code class="highlighter-rouge">.asf.yml</code>
</li>
<li>Site: Add Vladimir Ozerov as committer</li>
<li>Site: Remove nowadays redundant minified javascript files</li>
</ul>
<h2 id="v1-27-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.27.0">1.27.0</a> / 2021-06-03</h2>
<p>This release comes eight months after <a href="#v1-26-0">1.26.0</a>. It includes more than 150 resolved
issues, comprising a few new features, three minor breaking changes, many bug-fixes and small
improvements, as well as code quality enhancements and better test coverage.</p>
<p>Among others, it is worth highlighting the following:</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4034">InnoDB adapter</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4446">Three-valued logic for SEARCH operator</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-3221">MergeUnion operator in Enumerable convention</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4260">Explain plan with DOT format</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4314">ErrorProne code quality checks</a></li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using JDK/OpenJDK versions 8 to 15;
Guava versions 19.0 to 29.0-jre;
other software versions as specified in gradle.properties.</p>
<h4 id="breaking-1-27-0">Breaking Changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4521">CALCITE-4251</a>]
Get the origin column, even if it is derived</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4570">CALCITE-4570</a>]
Always validate preconditions in Filter/Correlate/Snapshot expressions when
assertions are enabled</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4427">CALCITE-4427</a>]
Make <code class="highlighter-rouge">SUBSTRING</code> operator comply with ISO standard SQL</li>
</ul>
<h4 id="new-features-1-27-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4564">CALCITE-4564</a>]
Initialization context for non-static user-defined functions (UDFs)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4477">CALCITE-4477</a>]
In <code class="highlighter-rouge">Interpreter</code>, support table-valued functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4418">CALCITE-4418</a>]
Allow Interpreter to read from JDBC input</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3574">CALCITE-3574</a>]
Add <code class="highlighter-rouge">RLIKE</code> operator (similar to <code class="highlighter-rouge">LIKE</code>, but Hive- and Spark-specific)
(Shradha Ambekar)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4483">CALCITE-4483</a>]
<code class="highlighter-rouge">WITHIN DISTINCT</code> clause for aggregate functions (experimental)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3221">CALCITE-3221</a>]
Add <code class="highlighter-rouge">MergeUnion</code> operator in <code class="highlighter-rouge">Enumerable</code> convention</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4349">CALCITE-4349</a>]
<code class="highlighter-rouge">GROUP_CONCAT</code> aggregate function (MySQL’s equivalent of <code class="highlighter-rouge">LISTAGG</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4443">CALCITE-4443</a>]
Add <code class="highlighter-rouge">ILIKE</code> operator (as <code class="highlighter-rouge">LIKE</code>, but case-insensitive and PostgreSQL-specific)
(Ondřej Štumpf)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4456">CALCITE-4456</a>]
Allows all value expressions in <code class="highlighter-rouge">ROW</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4433">CALCITE-4433</a>]
Add <code class="highlighter-rouge">UNPIVOT</code> operator to SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4408">CALCITE-4408</a>]
Implement Oracle <code class="highlighter-rouge">SUBSTR</code> function (James Starr)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4374">CALCITE-4374</a>]
Support materialized view recognition when query distinct aggregate on target
<code class="highlighter-rouge">GROUP BY</code> columns (xzh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4369">CALCITE-4369</a>]
Support <code class="highlighter-rouge">COUNTIF</code> aggregate function for BigQuery (Aryeh Hillman)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4354">CALCITE-4354</a>]
Allow <code class="highlighter-rouge">ITEM</code> operator on <code class="highlighter-rouge">ROW/STRUCT</code> data types (Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4335">CALCITE-4335</a>]
<code class="highlighter-rouge">ARRAY_AGG</code>, <code class="highlighter-rouge">ARRAY_CONCAT_AGG</code>, <code class="highlighter-rouge">STRING_AGG</code> aggregate functions for BigQuery</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2935">CALCITE-2935</a>]
Support <code class="highlighter-rouge">BOOL_AND</code>, <code class="highlighter-rouge">BOOL_OR</code>, <code class="highlighter-rouge">LOGICAL_AND</code>, <code class="highlighter-rouge">LOGICAL_OR</code> aggregate functions
(ShuMingLi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3731">CALCITE-3731</a>]
Add <code class="highlighter-rouge">IF</code> function for BigQuery, Hive and Spark dialects (Vaibhav Jain)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4260">CALCITE-4260</a>]
Support plan explain with <code class="highlighter-rouge">DOT</code> format (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4297">CALCITE-4297</a>]
Allow BigQuery to parse and validate niladic functions (Mr. Swett)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4034">CALCITE-4034</a>]
<code class="highlighter-rouge">InnoDB</code> adapter (neoremind)</li>
</ul>
<h4 id="fixes-1-27-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4497">CALCITE-4497</a>]
In <code class="highlighter-rouge">RelBuilder</code>, support windowed aggregate functions (OVER)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4620">CALCITE-4620</a>]
Join on <code class="highlighter-rouge">CASE</code> causes <code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">RelToSqlConverter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4446">CALCITE-4446</a>]
Implement three-valued logic for SEARCH operator</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4621">CALCITE-4621</a>]
<code class="highlighter-rouge">SemiJoinRule</code> throws <code class="highlighter-rouge">AssertionError</code> on <code class="highlighter-rouge">ANTI</code> join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4610">CALCITE-4610</a>]
Join on range causes <code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">RelToSqlConverter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4609">CALCITE-4609</a>]
<code class="highlighter-rouge">AggregateRemoveRule</code> throws while handling <code class="highlighter-rouge">AVG</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4603">CALCITE-4603</a>]
Least restrictive type considers only the last element in collections of collections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4548">CALCITE-4548</a>]
<code class="highlighter-rouge">SqlToRelConverter#convertExpression</code> cannot convert <code class="highlighter-rouge">SqlNode</code> with sub query (jibiyr)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2317">CALCITE-2317</a>]
Support JDBC <code class="highlighter-rouge">DatabaseMetaData#getFunctions</code> (Malte Bellmann)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4594">CALCITE-4594</a>]
Interpreter returns wrong result when <code class="highlighter-rouge">VALUES</code> has zero fields</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4510">CALCITE-4510</a>]
<code class="highlighter-rouge">RexLiteral</code> can produce wrong digest for some user defined types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4560">CALCITE-4560</a>]
Wrong plan when decorrelating <code class="highlighter-rouge">EXISTS</code> subquery with <code class="highlighter-rouge">COALESCE</code> in the predicate</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4574">CALCITE-4574</a>]
Wrong/Invalid plans when using <code class="highlighter-rouge">RelBuilder#join</code> with correlations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4591">CALCITE-4591</a>]
<code class="highlighter-rouge">RelRunner</code> should throw SQLException if prepare fails</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4585">CALCITE-4585</a>]
Improve error message from <code class="highlighter-rouge">RelRunner</code> (NobiGo)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4586">CALCITE-4586</a>]
In piglet, allow creating a <code class="highlighter-rouge">PigRelBuilder</code> with custom <code class="highlighter-rouge">config.simplify()</code>
(Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4583">CALCITE-4583</a>]
Control simplification in <code class="highlighter-rouge">RelBuilder#filter</code> with <code class="highlighter-rouge">config.simplify()</code> (Jiatao
Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4571">CALCITE-4571</a>]
In piglet, a Pig Latin script with multiple <code class="highlighter-rouge">STORE</code> commands causes the merging
of multiple SQL statements (Mahesh Kumar Behera)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4569">CALCITE-4569</a>]
In piglet, allow creating a <code class="highlighter-rouge">PigConverter</code> with custom properties (Mahesh Kumar
Behera)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4572">CALCITE-4572</a>]
Piglet fails if Pig Latin script contains <code class="highlighter-rouge">RANK</code> or <code class="highlighter-rouge">FILTER</code> operators (Mahesh
Kumar Behera)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4579">CALCITE-4579</a>]
Piglet throws <code class="highlighter-rouge">ClassCastException</code> if Pig Latin script contains <code class="highlighter-rouge">FLATTEN</code> or
<code class="highlighter-rouge">STRSPLIT</code> operators (Mahesh Kumar Behera)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4515">CALCITE-4515</a>]
Do not generate the new join tree from commute/associate rules if there are
“always TRUE” conditions (Vladimir Ozerov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4535">CALCITE-4535</a>]
<code class="highlighter-rouge">ServerDdlExecutor</code> cannot execute <code class="highlighter-rouge">DROP</code> commands with qualified object names
(Vladimir Ozerov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4511">CALCITE-4511</a>]
Distinct row count and population size for constant columns should be 1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4562">CALCITE-4562</a>]
Improve simplification of “x IS TRUE” and “x LIKE ‘%’”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4556">CALCITE-4556</a>]
<code class="highlighter-rouge">CalciteMetaImpl#createEmptyResultSet</code> should not pass class to
<code class="highlighter-rouge">CursorFactory#deduce</code> (Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4522">CALCITE-4522</a>]
CPU cost of <code class="highlighter-rouge">Sort</code> should be lower if sort keys are empty (huangqixiang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4552">CALCITE-4552</a>]
<code class="highlighter-rouge">Interpreter</code> does not close resources held by its nodes on close</li>
<li>Add method RelJsonReader.readType</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4524">CALCITE-4524</a>]
Make some fields non-nullable (<code class="highlighter-rouge">SqlSelect.selectList</code>,
<code class="highlighter-rouge">DataContext.getTypeFactory</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4533">CALCITE-4533</a>]
Incorrect semantics of <code class="highlighter-rouge">REPLACE</code> and <code class="highlighter-rouge">IF NOT EXISTS</code> keywords in
<code class="highlighter-rouge">CREATE TABLE/SCHEMA</code> commands (Vladimir Ozerov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4342">CALCITE-4342</a>]
More aggregate functions should be marked as splittable and ignore distinct
optionality (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4526">CALCITE-4526</a>]
<code class="highlighter-rouge">SqlSnapshot#unparse</code> loses the <code class="highlighter-rouge">AS</code> keyword when the table has alias (jibiyr)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4276">CALCITE-4276</a>]
<code class="highlighter-rouge">MaterializedViewOnlyAggregateRule</code> performs invalid rewrite on query that
contains join and time-rollup function (<code class="highlighter-rouge">FLOOR</code>) (Justin Swett)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2000">CALCITE-2000</a>]
<code class="highlighter-rouge">UNNEST</code> a collection that has a field with nested data generates an <code class="highlighter-rouge">Exception</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4514">CALCITE-4514</a>]
When merging <code class="highlighter-rouge">RelSets</code>, fine-tune which set is merged into which, for efficiency
(Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4437">CALCITE-4437</a>]
<code class="highlighter-rouge">Sort</code> should be decorrelated even though it has fetch or limit when it
is not inside a <code class="highlighter-rouge">Correlate</code> (Thomas Rebele)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4265">CALCITE-4265</a>]
Improve error message when <code class="highlighter-rouge">CAST</code> to unknown type (Louis Kuang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4494">CALCITE-4494</a>]
Improve performance of checking <code class="highlighter-rouge">RelNode</code> presence in <code class="highlighter-rouge">RelSubset</code> (Igor Lozynskyi)</li>
<li>In <code class="highlighter-rouge">RelBuilder</code>, remove not-null arguments to <code class="highlighter-rouge">COUNT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4199">CALCITE-4199</a>]
<code class="highlighter-rouge">RelBuilder</code> throws <code class="highlighter-rouge">NullPointerException</code> while implementing <code class="highlighter-rouge">GROUP_ID()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4491">CALCITE-4491</a>]
Aggregation of window function produces invalid SQL for PostgreSQL (Dominik
Labuda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4426">CALCITE-4426</a>]
Short-circuit evaluating when comparing two <code class="highlighter-rouge">RelTraitSets</code> (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4482">CALCITE-4482</a>]
Extract the default <code class="highlighter-rouge">SqlWriterConfig</code> in <code class="highlighter-rouge">SqlPrettyWriter</code>, reduce the overhead of
<code class="highlighter-rouge">ImmutableBeans#create</code> (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4461">CALCITE-4461</a>]
Do not use <code class="highlighter-rouge">Logical</code> nodes inside <code class="highlighter-rouge">Enumerable</code> rules (Vladimir Ozerov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4479">CALCITE-4479</a>]
<code class="highlighter-rouge">vFloat in (1.0, 2.0)</code> throws <code class="highlighter-rouge">UnsupportedOperationException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4474">CALCITE-4474</a>]
<code class="highlighter-rouge">SqlSimpleParser</code> inner Tokenizer should not recognize the sql of TokenType.ID
or some keywords in some case (wangjie)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4431">CALCITE-4431</a>]
Use <code class="highlighter-rouge">requireNonNull(var, "var")</code> instead of <code class="highlighter-rouge">requireNonNull(var)</code> for better error
messages</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4466">CALCITE-4466</a>]
Do not invoke <code class="highlighter-rouge">RelTraitDef#convert</code> when the source trait satisfies the target
trait (Vladimir Ozerov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4463">CALCITE-4463</a>]
JDBC adapter for Spark generates incorrect <code class="highlighter-rouge">ORDER BY</code> syntax (Yanjing Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4453">CALCITE-4453</a>]
<code class="highlighter-rouge">RexExecutorImpl#compile</code> should use <code class="highlighter-rouge">RexBuilder</code>’s type factory if possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4450">CALCITE-4450</a>]
ElasticSearch query with <code class="highlighter-rouge">VARCHAR</code> literal projection fails with
<code class="highlighter-rouge">JsonParseException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4449">CALCITE-4449</a>]
Generate nicer SQL for Sarg <code class="highlighter-rouge">x IS NULL OR x NOT IN (1, 2)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4434">CALCITE-4434</a>]
Cannot implement <code class="highlighter-rouge">CASE row WHEN row</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4425">CALCITE-4425</a>]
Class <code class="highlighter-rouge">DefaultEdge</code> lacks a proper <code class="highlighter-rouge">toString</code> implementation (Liya Fan)</li>
<li>Change return type of <code class="highlighter-rouge">RelBuilder#literal</code> from <code class="highlighter-rouge">RexNode</code> to <code class="highlighter-rouge">RexLiteral</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4435">CALCITE-4435</a>]
Incorrect logic for validating <code class="highlighter-rouge">RexFieldAccess</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4436">CALCITE-4436</a>]
Use the fields order from the struct type for <code class="highlighter-rouge">ITEM(STRUCT, INDEX)</code> access
(Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4429">CALCITE-4429</a>]
<code class="highlighter-rouge">RelOptUtil#createCastRel</code> should throw if source and target row types have
different number of fields</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4419">CALCITE-4419</a>]
POSIX regex operators cannot be used within <code class="highlighter-rouge">RelBuilder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4411">CALCITE-4411</a>]
<code class="highlighter-rouge">RelNode</code> to SQL loses <code class="highlighter-rouge">DISTINCT</code> on window aggregation (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4284">CALCITE-4284</a>]
<code class="highlighter-rouge">ImmutableBeans</code>: make reference properties non-nullable by default</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4199">CALCITE-4199</a>]
Add nullability annotations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4199">CALCITE-4199</a>]
Add package-level NonNull annotations to calcite packages</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4214">CALCITE-4214</a>]
Make <code class="highlighter-rouge">RelDataType#getSqlTypeName</code> non-nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4251">CALCITE-4251</a>]
<code class="highlighter-rouge">NPE</code> in <code class="highlighter-rouge">LoptMultiJoin</code> when <code class="highlighter-rouge">mq#getColumnOrigin(left, i)</code> returns <code class="highlighter-rouge">null</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4415">CALCITE-4415</a>]
<code class="highlighter-rouge">SqlStdOperatorTable.NOT_LIKE</code> has a wrong implementor</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4317">CALCITE-4317</a>]
<code class="highlighter-rouge">RelFieldTrimmer</code> after trimming all the fields in an aggregate should not
return a zero field Aggregate (Rafay)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4414">CALCITE-4414</a>]
<code class="highlighter-rouge">RelMdSelectivity#getSelectivity</code> for <code class="highlighter-rouge">Calc</code> propagates predicate with wrong
references</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4409">CALCITE-4409</a>]
Improve exception when <code class="highlighter-rouge">RelBuilder</code> tries to create a field on a non-struct
expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4393">CALCITE-4393</a>]
<code class="highlighter-rouge">ExceptionInInitializerError</code> due to <code class="highlighter-rouge">NPE</code> in <code class="highlighter-rouge">SqlCallBinding</code> caused by circular
dependency</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4251">CALCITE-4251</a>]
Support <code class="highlighter-rouge">Calc</code> and <code class="highlighter-rouge">SetOp</code> operator in <code class="highlighter-rouge">RelMdAllPredicates</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4402">CALCITE-4402</a>]
<code class="highlighter-rouge">SqlCall#equalsDeep</code> does not take into account the function quantifier (Huang
Qixiang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4251">CALCITE-4251</a>]
Get the origin column, even if it is derived (xzh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4406">CALCITE-4406</a>]
<code class="highlighter-rouge">SqlTableRef</code> operator should create a <code class="highlighter-rouge">SqlTableRef</code> as the call</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4277">CALCITE-4277</a>]
When <code class="highlighter-rouge">RelNode</code> has been removed from its subset, skip the origin rule match (Jiatao
Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4392">CALCITE-4392</a>]
The operation of checking types equal ignoring null can be more efficient</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4383">CALCITE-4383</a>]
In <code class="highlighter-rouge">RelBuilder</code>, optimize <code class="highlighter-rouge">VALUES ... UNION ALL ... VALUES</code> to a single <code class="highlighter-rouge">VALUES</code>
with multiple rows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4394">CALCITE-4394</a>]
When generating code for a function call, take the inferred types of the
operands into account</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4389">CALCITE-4389</a>]
Calls to <code class="highlighter-rouge">ROW</code> and implicit row constructor sometimes print too many spaces</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4380">CALCITE-4380</a>]
Make class <code class="highlighter-rouge">SqlNodeList</code> implement <code class="highlighter-rouge">List&lt;SqlNode&gt;</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4390">CALCITE-4390</a>]
<code class="highlighter-rouge">SqlMatchRecognize</code> returns wrong operand list (Dawid Wysakowicz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4364">CALCITE-4364</a>]
<code class="highlighter-rouge">a IN (1, 2) AND a = 1</code> should be simplified to <code class="highlighter-rouge">a = 1</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4273">CALCITE-4273</a>]
Support get expression lineage for Calc</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4350">CALCITE-4350</a>]
The reverse operation of collation direction is overly relaxed (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4345">CALCITE-4345</a>]
<code class="highlighter-rouge">AggregateCaseToFilterRule</code> throws <code class="highlighter-rouge">NullPointerException</code> when converting <code class="highlighter-rouge">CASE</code>
without <code class="highlighter-rouge">ELSE</code> (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4233">CALCITE-4233</a>]
In Elasticsearch adapter, support generating disjunction max (dis_max) queries
(shlok7296)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4106">CALCITE-4106</a>]
Consider <code class="highlighter-rouge">listCoerced</code> in <code class="highlighter-rouge">TypeCoercionImpl#inOperationCoercion</code> (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4352">CALCITE-4352</a>]
<code class="highlighter-rouge">RexSimplify</code> incorrectly drops <code class="highlighter-rouge">IS NULL</code> and <code class="highlighter-rouge">IS NOT NULL</code> from <code class="highlighter-rouge">SEARCH</code>
expressions</li>
<li>BigQuery dialect should allow <code class="highlighter-rouge">GROUP BY</code> ordinal</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4332">CALCITE-4332</a>]
Improve error when planning rule produces a relational expression with wrong
row type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4225">CALCITE-4225</a>]
Make <code class="highlighter-rouge">RelDecorrelator</code> pluggable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4305">CALCITE-4305</a>]
Implicit column alias for single-column <code class="highlighter-rouge">VALUES</code>, and <code class="highlighter-rouge">UNNEST</code> of <code class="highlighter-rouge">ARRAY</code> and
<code class="highlighter-rouge">MULTISET</code> constructors</li>
<li>Add an overloaded <code class="highlighter-rouge">SqlOperator#createCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4321">CALCITE-4321</a>]
JDBC adapter omits <code class="highlighter-rouge">FILTER (WHERE ...)</code> expressions when generating SQL
(Jeremiah Rhoads Hall)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4325">CALCITE-4325</a>]
<code class="highlighter-rouge">RexSimplify</code> incorrectly simplifies complex expressions that contain Sarg and
<code class="highlighter-rouge">IS NULL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4240">CALCITE-4240</a>]
<code class="highlighter-rouge">SqlTypeUtil#getMaxPrecisionScaleDecimal</code> returns a decimal with same
precision and scale (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4333">CALCITE-4333</a>]
<code class="highlighter-rouge">Sort</code> rel should be decorrelated even though it has fetch or limit when its
parent is not a <code class="highlighter-rouge">Correlate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4302">CALCITE-4302</a>]
Avoid cost re-propagation in <code class="highlighter-rouge">VolcanoPlanner</code> (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4324">CALCITE-4324</a>]
Avoid sqlline classpath caching by default, add sqlline and sqlsh tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4315">CALCITE-4315</a>]
<code class="highlighter-rouge">NPE</code> in <code class="highlighter-rouge">RelMdUtil#checkInputForCollationAndLimit</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4316">CALCITE-4316</a>]
<code class="highlighter-rouge">NPE</code> when division includes nulls</li>
<li>Add method RelBuilder.isDistinctFrom()</li>
<li>Add class SqlBasicAggFunction</li>
<li>Add generic info to <code class="highlighter-rouge">Map</code> &amp; <code class="highlighter-rouge">Array</code> annotation</li>
<li>Refactor: Add method SqlOperator.reverse()</li>
<li>Refactor: Make HintStrategyTable immutable</li>
<li>Refactor: move CassandraRules.reverseDirection into Direction</li>
<li>Remove the insecure, unused <code class="highlighter-rouge">TrustAllSslSocketFactory</code> class (intrigus-lgtm)</li>
<li>Remove multiple blank lines after package statements</li>
<li>Remove multiple blank lines after import statements</li>
<li>Cleanup code after errorprone upgrade: <code class="highlighter-rouge">IdentityHashMapUsage</code>, <code class="highlighter-rouge">JdkObsolete</code> -&gt;
<code class="highlighter-rouge">JavaUtilDate</code>
</li>
</ul>
<h4 id="build-1-27-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4613">CALCITE-4613</a>]
OWASP dependency-check tasks fail due to missing resources</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4576">CALCITE-4576</a>]
Release process should not overwrite LICENSE file</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4575">CALCITE-4575</a>]
Remove Gradle wrapper from source distribution</li>
<li>Remove <code class="highlighter-rouge">System.out.println</code> from <code class="highlighter-rouge">DiffRepository</code>
</li>
<li>
<code class="highlighter-rouge">DiffRepository</code> should write a test’s resource file only when it is modified</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4593">CALCITE-4593</a>]
<code class="highlighter-rouge">DiffRepository</code> tests should fail if new XML resources are not in alphabetical
order</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4587">CALCITE-4587</a>]
Set <code class="highlighter-rouge">spark.driver.bindAddress</code> explicitly to avoid <code class="highlighter-rouge">BindException</code> thrown by
Spark (Jiatao Tao)</li>
<li>Add Matcher#matches to ForbiddenApis to avoid its accidental use</li>
<li>Apply com.autonomousapps.dependency-analysis plugin only when
-PenableDependencyAnalysis is provided on a command line</li>
<li>Fuzz testing for SEARCH operator, and refactor RexSimplify</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4344">CALCITE-4344</a>]
Run <code class="highlighter-rouge">Redis</code> tests using Docker containers</li>
<li>Make sure FmppTask re-executes in case default_config.fmpp changes</li>
<li>Use max-parallel=3 to reduce the usage of the shared GitHub Actions executors</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4140">CALCITE-4140</a>]
Use Wasabi S3 for remote build cache</li>
<li>Use Sonatype OSSRH repository instead of JCenter in build plugins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4459">CALCITE-4459</a>]
Verify the bytecode with Jandex by default</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4470">CALCITE-4470</a>]
Add optional bytecode verification with Jandex</li>
<li>Cancel stale workflows in GitHub Actions CI</li>
<li>Add ErrorProne and the Checker Framework verifications to Travis CI</li>
<li>Test case for [<a href="https://issues.apache.org/jira/browse/CALCITE-1382">CALCITE-1382</a>]
<code class="highlighter-rouge">ClassCastException</code> in JDBC Adapter</li>
<li>Require Java 1.8.0u202 or later for the build</li>
<li>Make sure compileJava is re-executed in case of the minor javac version changes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4422">CALCITE-4422</a>]
Add <code class="highlighter-rouge">MethodCanBeStatic</code> check via ErrorProne</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4199">CALCITE-4199</a>]
Add CheckerFramework to GitHub Actions CI</li>
<li>Add OpenJ9 1.8 CI job at GitHub Actions</li>
<li>Add markdown to .gitattributes</li>
<li>Set diff pattern for CSS files in .gitattributes</li>
<li>Remove files that change often from Travis cache, remove broken files
automatically</li>
<li>Make buildSrc jars reproducible for better caching</li>
<li>Refactor <code class="highlighter-rouge">SqlToRelTestBase</code> to allow custom <code class="highlighter-rouge">Context</code> in tests</li>
<li>Exclude root project from javadoc aggregate tasks</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4301">CALCITE-4301</a>]
Unit test <code class="highlighter-rouge">testCollectionsInnerValues()</code> for Cassandra adapter is wrong
(Alessandro Solimando)</li>
<li>Refactor <code class="highlighter-rouge">ResultSetEnumerable</code> to avoid nested lambdas</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4314">CALCITE-4314</a>]
Enable ErrorProne checking and resolve identified problems</li>
</ul>
<h4 id="dependency-1-27-0">Dependency version upgrade</h4>
<ul>
<li>Bump commons-codec from 1.12 to 1.13 (Jaromir Hamala)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4528">CALCITE-4528</a>]
Upgrade Avatica version to 1.18.0</li>
<li>Bump Gradle 6.8.1 -&gt; 6.8.3</li>
<li>Update dependency declarations: adjust api vs implementation, remove unused
ones</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4506">CALCITE-4506</a>]
Upgrade SQLLine to 1.11.0</li>
<li>Bump checkerframework 3.9.1 -&gt; 3.10.0, errorprone 2.4.0 -&gt; 2.5.1</li>
<li>Bump checkerframework 3.7 -&gt; 3.9.1</li>
<li>Bump Gradle 6.7 -&gt; 6.8.1</li>
<li>Bump AppVeyor image from 2017 to 2019 to test with newer Java: 1.8u162 -&gt;
1.8u221, 13 -&gt; 15</li>
<li>Bump de.thetaphi.forbiddenapis from 2.7 to 3.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4343">CALCITE-4343</a>]
Bump Jedis from 2.9.0 to 3.3.0 (Tugdual Grall)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4339">CALCITE-4339</a>]
Update Gradle: 6.6 -&gt; 6.7</li>
<li>Use jackson-bom to specify Jackson versions</li>
</ul>
<h4 id="site-1-27-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4625">CALCITE-4625</a>]
Update version in NOTICE, README, and howto.md</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4601">CALCITE-4601</a>]
Invalid Javadoc URL in <code class="highlighter-rouge">SchemaFactory</code> of CSV adapter</li>
<li>Update release instructions</li>
</ul>
<h2 id="v1-26-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.26.0">1.26.0</a> / 2020-10-06</h2>
<p>This release comes about two months after <a href="#v1-25-0">1.25.0</a>. It includes more than 70 resolved
issues, comprising a lot of new features and bug-fixes. Among others, it is worth highlighting the following.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4173">SEARCH operator and Sarg literal</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-3752">PIVOT operator in SQL</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-1861">Spatial index based on Hilbert space-filling curve</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4197">Provide utility to visualize RelNode</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4259">Support JDK 15 and Guava version 29.0-jre</a></li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using JDK/OpenJDK versions 8 to 15;
Guava versions 19.0 to 29.0-jre;
other software versions as specified in gradle.properties.</p>
<h4 id="breaking-1-26-0">Breaking Changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2082">CALCITE-2082</a>]
Do not store types or type factories inside operators</li>
</ul>
<h4 id="new-features-1-26-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4173">CALCITE-4173</a>]
Add internal <code class="highlighter-rouge">SEARCH</code> operator and <code class="highlighter-rouge">Sarg</code> literal that represents a set of values or ranges</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3752">CALCITE-3752</a>]
Add <code class="highlighter-rouge">PIVOT</code> operator to SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1861">CALCITE-1861</a>]
Spatial index, based on Hilbert space-filling curve</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3920">CALCITE-3920</a>]
Improve <code class="highlighter-rouge">ORDER BY</code> computation in Enumerable convention by exploiting <code class="highlighter-rouge">LIMIT</code> (Thomas Rebele)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4015">CALCITE-4015</a>]
Pass through parent collation request on subset or superset of join keys for <code class="highlighter-rouge">EnumerableMergeJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3782">CALCITE-3782</a>]
Bitwise functions <code class="highlighter-rouge">BIT_AND</code>, <code class="highlighter-rouge">BIT_OR</code> and <code class="highlighter-rouge">BIT_XOR</code> support binary and varbinary type (Hailong Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4197">CALCITE-4197</a>]
Provide utility to visualize <code class="highlighter-rouge">RelNode</code> plans (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4113">CALCITE-4113</a>]
Support <code class="highlighter-rouge">LEFT JOIN</code> in <code class="highlighter-rouge">EnumerableMergeJoin</code>
</li>
</ul>
<h4 id="fixes-1-26-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2833">CALCITE-2833</a>]
In JDBC adapter for Hive and BigQuery, implement <code class="highlighter-rouge">Values</code> by generating <code class="highlighter-rouge">SELECT</code> without <code class="highlighter-rouge">FROM</code> (Stuti Gupta)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4160">CALCITE-4160</a>]
Add configuration (<code class="highlighter-rouge">SqlToRelConverter.Config</code>) to retain <code class="highlighter-rouge">ORDER BY</code> in sub-query (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3399">CALCITE-3399</a>]
Field-pruning for set operators (except <code class="highlighter-rouge">UNION ALL</code>) changes query semantics (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4182">CALCITE-4182</a>]
Support materialized view recognition when query has constant filter for missing columns in <code class="highlighter-rouge">GROUP BY</code> list of materialized view (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4171">CALCITE-4171</a>]
Support named parameters for table window functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4167">CALCITE-4167</a>]
Group by <code class="highlighter-rouge">COALESCE IN</code> throws <code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4172">CALCITE-4172</a>]
Expand columnar identifiers before resolving (James Starr)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4180">CALCITE-4180</a>]
Support for Elasticsearch basic authentication (fageiguanbing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4241">CALCITE-4241</a>]
Some improvements to metadata query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4170">CALCITE-4170</a>]
Improve simplification of <code class="highlighter-rouge">&lt;&gt;</code> predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4159">CALCITE-4159</a>]
Simplify always-true expressions (such as <code class="highlighter-rouge">LIKE '%'</code>) to <code class="highlighter-rouge">TRUE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4192">CALCITE-4192</a>]
<code class="highlighter-rouge">RelMdColumnOrigins</code> gets the wrong index of group by columns after <code class="highlighter-rouge">RelNode</code> was optimized by <code class="highlighter-rouge">AggregateProjectMergeRule</code> rule (FangZheng Li)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4203">CALCITE-4203</a>]
<code class="highlighter-rouge">RelMdUniqueKeys</code> should not return empty when meeting <code class="highlighter-rouge">Intersect</code> and <code class="highlighter-rouge">Minus</code> if its input has unique keys</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4207">CALCITE-4207</a>]
Validation fails for positional aggregate with <code class="highlighter-rouge">CURRENT_DATE</code> in <code class="highlighter-rouge">CASE</code> expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4206">CALCITE-4206</a>]
<code class="highlighter-rouge">RelDecorrelator</code> outputs wrong plan for correlate sort with fetch limit</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4209">CALCITE-4209</a>]
In <code class="highlighter-rouge">RelBuilder</code>, add an option to not simplify <code class="highlighter-rouge">LIMIT 0</code> to an empty relation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4208">CALCITE-4208</a>]
Improve metadata row count for <code class="highlighter-rouge">Join</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4210">CALCITE-4210</a>]
Replaying subqueries in <code class="highlighter-rouge">ON</code> clauses (James Starr)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4214">CALCITE-4214</a>]
Make <code class="highlighter-rouge">RelDataType.getSqlTypeName</code> non-nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4217">CALCITE-4217</a>]
Unlock <code class="highlighter-rouge">RelCrossType#getFieldCount()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4220">CALCITE-4220</a>]
In <code class="highlighter-rouge">SqlToRelConverter</code>, use <code class="highlighter-rouge">RelBuilder</code> for creating <code class="highlighter-rouge">Aggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4226">CALCITE-4226</a>]
Add <code class="highlighter-rouge">Mappings#asListNonNull</code> as a null-safe alternative for <code class="highlighter-rouge">Mappings#asList</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4237">CALCITE-4237</a>]
<code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">SqlTypeFactoryImpl.leastRestrictive</code> when running slow tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4254">CALCITE-4254</a>]
<code class="highlighter-rouge">ImmutableBeans</code> should make an immutable copy of property values of type <code class="highlighter-rouge">List</code>, <code class="highlighter-rouge">Set</code>, or <code class="highlighter-rouge">Map</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4249">CALCITE-4249</a>]
JDBC adapter cannot translate <code class="highlighter-rouge">NOT LIKE</code> in join condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4266">CALCITE-4266</a>]
JDBC adapter throws <code class="highlighter-rouge">UnsupportedOperationException</code> if query contains range predicate on columns from sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4176">CALCITE-4176</a>]
Key descriptor can be optional in <code class="highlighter-rouge">SESSION</code> table function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4279">CALCITE-4279</a>]
<code class="highlighter-rouge">SEARCH</code> operator cannot be pushed into Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4280">CALCITE-4280</a>]
Replace Guava’s <code class="highlighter-rouge">Lists.transform</code> and <code class="highlighter-rouge">Iterables.transform</code> with <code class="highlighter-rouge">Util.transform</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4282">CALCITE-4282</a>]
Promote the window table functions window attribute data type with precision 3</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4287">CALCITE-4287</a>]
<code class="highlighter-rouge">AggregateJoinRemoveRule</code> and <code class="highlighter-rouge">ProjectJoinRemoveRule</code> are not fired if the last column of the join’s left input is referenced (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4238">CALCITE-4238</a>]
Create a default parser configuration, to reduce redundant information in sub-parsers</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4289">CALCITE-4289</a>]
Wrong signature for <code class="highlighter-rouge">SqlTumbleTableFunction</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4295">CALCITE-4295</a>]
Composite of two checkers with <code class="highlighter-rouge">SqlOperandCountRange</code> throws <code class="highlighter-rouge">IllegalArgumentException</code> (Zhenghua Gao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4190">CALCITE-4190</a>]
<code class="highlighter-rouge">OR</code> simplification incorrectly loses term</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4195">CALCITE-4195</a>]
Cast between types with different collators must be evaluated as not monotonic</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4200">CALCITE-4200</a>]
<code class="highlighter-rouge">ExceptionInInitializerError</code> when initializing DruidRules</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4201">CALCITE-4201</a>]
<code class="highlighter-rouge">AssertionError</code> when registering Druid rules due to conflict in description</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4221">CALCITE-4221</a>]
Update stale integration tests in Druid adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4239">CALCITE-4239</a>]
<code class="highlighter-rouge">RelMdUniqueKeys</code> returns wrong unique keys for <code class="highlighter-rouge">Aggregate</code> with grouping sets</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4271">CALCITE-4271</a>]
<code class="highlighter-rouge">RelBuilder.in</code> should allow duplicate values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4258">CALCITE-4258</a>]
<code class="highlighter-rouge">SqlToRelConverter</code>: <code class="highlighter-rouge">SELECT 1 IS DISTINCT FROM NULL</code> fails with <code class="highlighter-rouge">AssertionError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4246">CALCITE-4246</a>]
When parsing SQL in BigQuery dialect, allow unquoted table names to contain hyphens</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4230">CALCITE-4230</a>]
When parsing SQL in BigQuery dialect, split quoted table names that contain dots</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4247">CALCITE-4247</a>]
When parsing SQL in BigQuery dialect, character literals may be enclosed in single- or double-quotes, and use backslashes as escapes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4215">CALCITE-4215</a>]
Ensure <code class="highlighter-rouge">org.apache.calcite.schema.Statistic</code> uses <code class="highlighter-rouge">null</code> vs <code class="highlighter-rouge">emptyList</code> appropriately</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4227">CALCITE-4227</a>]
<code class="highlighter-rouge">ImmutableIntList#toArray(Integer[])</code> should support arguments larger than the collection itself</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4228">CALCITE-4228</a>]
<code class="highlighter-rouge">FlatLists.Flat6List#append</code> should not throw NPE if there are null elements in the list</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4229">CALCITE-4229</a>]
<code class="highlighter-rouge">Add Util.throwAsRuntime</code> and <code class="highlighter-rouge">Util.causeOrSelf</code> to simplify exception re-throwing</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4269">CALCITE-4269</a>]
Improvement on enumerable implementation for <code class="highlighter-rouge">HOP</code> and <code class="highlighter-rouge">SESSION</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4275">CALCITE-4275</a>]
<code class="highlighter-rouge">EnumerableMergeJoin#create</code> does not set <code class="highlighter-rouge">EnumerableConvention</code> in the trait set</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4283">CALCITE-4283</a>]
Do not force implement <code class="highlighter-rouge">SqlTableFunction</code> when creating table function scan</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4261">CALCITE-4261</a>]
Join with three tables causes <code class="highlighter-rouge">IllegalArgumentException</code> in <code class="highlighter-rouge">EnumerableBatchNestedLoopJoinRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4288">CALCITE-4288</a>]
Create <code class="highlighter-rouge">SqlTypeUtil#deriveType(SqlCallBinding)</code> to make type computation simpler</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4216">CALCITE-4216</a>]
Make <code class="highlighter-rouge">org.apache.calcite.rel.type.RelDataType#getFamily</code> non-nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4298">CALCITE-4298</a>]
Avoid disabling hostname verification on HTTPS connections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4300">CALCITE-4300</a>]
<code class="highlighter-rouge">EnumerableBatchNestedLoopJoin</code> dynamic code generation can lead to variable name issues if two EBNLJ are nested</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4224">CALCITE-4224</a>]
Add a method for <code class="highlighter-rouge">RelNode</code> to output its relational expression string (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4248">CALCITE-4248</a>]
Deprecate <code class="highlighter-rouge">SqlParser.ConfigBuilder</code>
</li>
<li>Remove <code class="highlighter-rouge">ArrayList</code> allocation from <code class="highlighter-rouge">Mappings#bijection</code>, and add helpful message in case NPE is thrown</li>
<li>Improve positions in SQL validator error messages</li>
<li>Simplify <code class="highlighter-rouge">Pair.left(Iterable)</code> and <code class="highlighter-rouge">Pair.right(Iterable)</code> implementation</li>
<li>Refactor <code class="highlighter-rouge">Pair</code> comparison to use <code class="highlighter-rouge">Comparator.nullsFirst</code> and <code class="highlighter-rouge">.naturalOrder</code>
</li>
<li>Obsolete <code class="highlighter-rouge">SqlToRelConverter.ConfigBuilder</code>, and refactor <code class="highlighter-rouge">SqlToRelConverterTest</code>
</li>
<li>Refactor <code class="highlighter-rouge">SqlParserTest</code>
</li>
<li>Minor refactoring of <code class="highlighter-rouge">DruidAdapterIT</code> and <code class="highlighter-rouge">DruidAdapter2IT</code>
</li>
</ul>
<h4 id="build-1-26-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4278">CALCITE-4278</a>]
Add Druid adapter tests in GitHub CI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4259">CALCITE-4259</a>]
Support JDK 15 and Guava version 29.0-jre</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4184">CALCITE-4184</a>]
Update Gradle: 6.3 -&gt; 6.6</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4168">CALCITE-4168</a>]
Configure Gradle Local Build Cache</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4185">CALCITE-4185</a>]
Remove dependency between checkstyle and compilation tasks</li>
<li>Add <code class="highlighter-rouge">MaxMetaspaceSize=512m</code> to avoid metaspace issues when building Calcite</li>
<li>Make project buildable from folders that include special characters</li>
<li>Use <code class="highlighter-rouge">merge=union</code> strategy to avoid false merge conflicts on <code class="highlighter-rouge">CalciteResource.properties</code>
</li>
<li>Add GC options to GitHub and Travis CI so they fail on low memory condition faster</li>
<li>Update Checkstyle from 8.27 to 8.28 to support <code class="highlighter-rouge">package-info</code> files with imports</li>
<li>Update <code class="highlighter-rouge">org.nosphere.apache.rat</code> plugin from 0.5.2 to 0.7.0, and print files with unapproved licenses to console</li>
</ul>
<h4 id="site-1-26-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3841">CALCITE-3841</a>]
Change downloads page to use downloads.apache.org</li>
<li>Fix documentation errors</li>
<li>Site: Add Rui Wang as committer, Ruben Quesada Lopez as PMC</li>
</ul>
<h2 id="v1-25-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.25.0">1.25.0</a> / 2020-08-22</h2>
<p>This release comes shortly after <a href="#v1-24-0">1.24.0</a> and removes methods
which were deprecated in the previous version. It also introduces other breaking changes so
make sure to consult corresponding section. Notable improvements in this release are:</p>
<ul>
<li>
<a href="https://issues.apache.org/jira/browse/CALCITE-4134">Interval Expressions</a>
(e.g. <code class="highlighter-rouge">INTERVAL '1' HOUR</code>, <code class="highlighter-rouge">INTERVAL -'1:2' HOUR TO MINUTE</code>)</li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-4080">Character Literals as Aliases</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-3923">Refactor How Planner Rules are Parameterized</a></li>
<li><a href="https://issues.apache.org/jira/browse/CALCITE-2160">Spacial Functions</a></li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13, 14 and OpenJDK 8, 9, 10, 11, 12, 13, 14;
Guava versions 19.0 to 28.2-jre; other software versions as specified in
gradle.properties.</p>
<h4 id="breaking-1-25-0">Breaking Changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2569">CALCITE-2569</a>]
UDFs that are table functions must implement <code class="highlighter-rouge">SqlTableFunction</code> and have <code class="highlighter-rouge">CURSOR</code> as their return type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3923">CALCITE-3923</a>]
Refactor how planner rules are parameterized</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4079">CALCITE-4079</a>]
Dialect constants in <code class="highlighter-rouge">SqlDialect</code> can cause class initialization deadlock</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4128">CALCITE-4128</a>]
Remove dependency of File adapter on Example CSV adapter</li>
</ul>
<h4 id="new-features-1-25-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2160">CALCITE-2160</a>]
Spatial: Add functions <code class="highlighter-rouge">ST_MakeGrid</code> and <code class="highlighter-rouge">ST_MakeGridPoints</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4134">CALCITE-4134</a>]
Interval expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4154">CALCITE-4154</a>]
Add a rule, <code class="highlighter-rouge">ProjectAggregateMergeRule</code>, to merge a <code class="highlighter-rouge">Project</code> onto an <code class="highlighter-rouge">Aggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4080">CALCITE-4080</a>]
Allow character literals as column aliases, if <code class="highlighter-rouge">SqlConformance.allowCharLiteralAlias()</code>
</li>
</ul>
<h4 id="fixes-1-25-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4139">CALCITE-4139</a>]
Prevent NPE in <code class="highlighter-rouge">ListTransientTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2854">CALCITE-2854</a>]
Codegen compile error when implementing unary minus function with data type <code class="highlighter-rouge">BigDecimal</code> (Qi Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3957">CALCITE-3957</a>]
<code class="highlighter-rouge">AggregateMergeRule</code> should merge <code class="highlighter-rouge">SUM0</code> into <code class="highlighter-rouge">COUNT</code> even if <code class="highlighter-rouge">GROUP BY</code> is empty</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4150">CALCITE-4150</a>]
JDBC adapter throws <code class="highlighter-rouge">UnsupportedOperationException</code> when generating SQL for untyped <code class="highlighter-rouge">NULL</code> literal (Anton Haidai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4118">CALCITE-4118</a>]
RexSimplify might remove <code class="highlighter-rouge">CAST</code> from RexNode incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4145">CALCITE-4145</a>]
Exception when query from UDF field with structured type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4081">CALCITE-4081</a>]
Round-tripping a DECIMAL literal throws validation error</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4132">CALCITE-4132</a>]
Estimate the number of distinct values more accurately (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4102">CALCITE-4102</a>]
Some improvements to aggregate related operations (Liya Fan)</li>
</ul>
<h4 id="build-1-25-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4141">CALCITE-4141</a>]
Make checkstyle tasks relocatable to support Gradle build cache</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4137">CALCITE-4137</a>]
Checkstyle should ensure that every class has a Javadoc comment</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4156">CALCITE-4156</a>]
<code class="highlighter-rouge">ReflectiveRelMetadataProvider</code> constructor should throw an exception (instead of assertion) when called with an empty map</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4022">CALCITE-4022</a>]
Support unparse special syntax for <code class="highlighter-rouge">INSERT</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4115">CALCITE-4115</a>]
Improve the prompt of using SQL keywords for sql parses (part2)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4129">CALCITE-4129</a>]
Support deep equality check for <code class="highlighter-rouge">RelNode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4111">CALCITE-4111</a>]
Remove <code class="highlighter-rouge">VolcanoPlannerPhase</code> in Planner (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4114">CALCITE-4114</a>]
Remove method <code class="highlighter-rouge">CalciteAssert.forceDecorrelate</code> (Jiatao Tao)</li>
</ul>
<h2 id="v1-24-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.24.0">1.24.0</a> / 2020-07-24</h2>
<p>This release comes about two months after 1.23.0. It includes more than 80 resolved
issues, comprising a lot of new features as well as performance improvements
and bug-fixes. Among others, it is worth highlighting the following.</p>
<ul>
<li>Support <a href="https://issues.apache.org/jira/browse/CALCITE-3916">top-down rule applying and upper bound space pruning</a>
</li>
<li>Support <a href="https://issues.apache.org/jira/browse/CALCITE-4000">OFFSET</a> parameter in <code class="highlighter-rouge">TUMBLE/HOP</code>
table functions</li>
<li>A new <a href="https://issues.apache.org/jira/browse/CALCITE-3724">Presto dialect implementation</a>
</li>
<li>
<a href="https://issues.apache.org/jira/browse/CALCITE-4087">Hoist</a>, a utility to replace literals in a
SQL string with placeholders</li>
</ul>
<p>In this release, quite a few instance variables are deprecated and will be
removed before 1.25, such as <code class="highlighter-rouge">EnumerableToBindableConverterRule.INSTANCE</code>,
<code class="highlighter-rouge">CassandraToEnumerableConverterRule.INSTANCE</code> and so on. Besides, some methods
in <code class="highlighter-rouge">RelNode</code> are changed from ‘to removed before 2.0’ to ‘to be removed before 1.25’,
including <code class="highlighter-rouge">isDistinct()</code>, <code class="highlighter-rouge">isKey(ImmutableBitSet)</code>, <code class="highlighter-rouge">getQuery()</code>, <code class="highlighter-rouge">getRows()</code>,
<code class="highlighter-rouge">getVariablesStopped()</code>, <code class="highlighter-rouge">computeSelfCost()</code>, <code class="highlighter-rouge">isValid(boolean)</code>, <code class="highlighter-rouge">getCollationList()</code>,
<code class="highlighter-rouge">getChildExps()</code>. All deprecated APIs are strongly recommended to be replaced by their
replacements as soon as possible(<a href="https://issues.apache.org/jira/browse/CALCITE-3896">CALCITE-3923</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-3896">CALCITE-4079</a>).</p>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13, 14 and OpenJDK 8, 9, 10, 11, 12, 13, 14;
Guava versions 19.0 to 28.2-jre; other software versions as specified in
gradle.properties.</p>
<h4 id="breaking-1-24-0">Breaking Changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4032">CALCITE-4032</a>]
Mark <code class="highlighter-rouge">CalcMergeRule</code> as <code class="highlighter-rouge">TransformationRule</code>. With this change, the <code class="highlighter-rouge">CalcMergeRule</code>
won’t match <code class="highlighter-rouge">PhysicalNode</code>(including <code class="highlighter-rouge">EnumerableCalc</code>) in <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4003">CALCITE-4003</a>]
Disallow cross convention matching and <code class="highlighter-rouge">PhysicalNode</code> generation in <code class="highlighter-rouge">TransformationRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3786">CALCITE-3786</a>]
Change <code class="highlighter-rouge">RelNode#recomputeDigest()</code> return type from <code class="highlighter-rouge">String</code> to <code class="highlighter-rouge">void</code>
</li>
</ul>
<h4 id="new-features-1-24-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4000">CALCITE-4000</a>]
Support <code class="highlighter-rouge">OFFSET</code> parameter in <code class="highlighter-rouge">TUMBLE/HOP</code> table functions (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3916">CALCITE-3916</a>]
Support top-down rule applying and upper bound space pruning</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3941">CALCITE-3941</a>]
Add the default strict mode to the path in the Json functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3724">CALCITE-3724</a>]
Presto dialect implementation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3946">CALCITE-3946</a>]
Add parser support for <code class="highlighter-rouge">MULTISET/SET</code> and <code class="highlighter-rouge">VOLATILE</code> modifiers in <code class="highlighter-rouge">CREATE TABLE</code> statements (Drew Schmitt)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4089">CALCITE-4089</a>]
In Babel, allow <code class="highlighter-rouge">CAST(integer AS DATE)</code> even though it is illegal in Calcite SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4087">CALCITE-4087</a>]
<code class="highlighter-rouge">Hoist</code>, a utility to replace literals in a SQL string with placeholders</li>
</ul>
<h4 id="fixes-1-24-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4073">CALCITE-4073</a>]
Add a new component <code class="highlighter-rouge">RexNormalize</code> for more effect rex nodes normalization</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3224">CALCITE-3224</a>]
New implementation of <code class="highlighter-rouge">RexNode-to-Expression</code> code generation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4056">CALCITE-4056</a>]
Remove <code class="highlighter-rouge">Digest</code> from <code class="highlighter-rouge">RelNode</code> and <code class="highlighter-rouge">RexCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4008">CALCITE-4008</a>]
Implement Code generation for <code class="highlighter-rouge">EnumerableSortedAggregate</code> (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3972">CALCITE-3972</a>]
Allow <code class="highlighter-rouge">RelBuilder</code> to create <code class="highlighter-rouge">RelNode</code> with convention (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4060">CALCITE-4060</a>]
Supports implicit type coercion for <code class="highlighter-rouge">NOT IN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4127">CALCITE-4127</a>]
Remove final from <code class="highlighter-rouge">AbstractRelNode#getRelTypeName</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4124">CALCITE-4124</a>]
Stop invalidating metadata cache in <code class="highlighter-rouge">VolcanoRuleCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4123">CALCITE-4123</a>]
Make <code class="highlighter-rouge">EnumerableMergeJoin</code> constructor protected</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4085">CALCITE-4085</a>]
Improve return type nullability for <code class="highlighter-rouge">SqlDotOperator</code> &amp; <code class="highlighter-rouge">SqlItemOperator</code> (Dawid Wysakowicz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3936">CALCITE-3936</a>]
JDBC adapter, when generating SQL, changes target of ambiguous <code class="highlighter-rouge">HAVING</code> clause with a <code class="highlighter-rouge">Project</code> on <code class="highlighter-rouge">Filter</code> on <code class="highlighter-rouge">Aggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4112">CALCITE-4112</a>]
Refine the usage of <code class="highlighter-rouge">CalciteConnectionConfig</code> in <code class="highlighter-rouge">DecorrelateProgram</code> &amp; some minor code refactoring (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4116">CALCITE-4116</a>]
Remove unused code for tracking <code class="highlighter-rouge">RexNode</code>’s nullable state in codegen</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4105">CALCITE-4105</a>]
Replace <code class="highlighter-rouge">Pair</code> with <code class="highlighter-rouge">Flat2List</code> in <code class="highlighter-rouge">RelDigestWriter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4092">CALCITE-4092</a>]
<code class="highlighter-rouge">NPE</code> using <code class="highlighter-rouge">WITH</code> clause without a corresponding <code class="highlighter-rouge">SELECT FROM</code> (James Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4115">CALCITE-4115</a>]
Improve the prompt of using SQL keywords for sql parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4094">CALCITE-4094</a>]
Allow <code class="highlighter-rouge">SqlOperator</code> of <code class="highlighter-rouge">SqlKind#OTHER_FUNCTION</code> to define a <code class="highlighter-rouge">Strong.Policy</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3834">CALCITE-3834</a>]
Support <code class="highlighter-rouge">AntiJoin</code> in <code class="highlighter-rouge">EnumerableMergeJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4098">CALCITE-4098</a>]
Remove redundant code in <code class="highlighter-rouge">RelJson.toJson(RelDistribution)</code> (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4066">CALCITE-4066</a>]
<code class="highlighter-rouge">SqlTypeUtil#convertTypeToSpec</code> cover <code class="highlighter-rouge">Array/Multiset/Row</code> types (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4059">CALCITE-4059</a>]
<code class="highlighter-rouge">SqlTypeUtil#equalSansNullability</code> consider <code class="highlighter-rouge">Array/Map</code> type (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4026">CALCITE-4026</a>]
<code class="highlighter-rouge">CassandraFilter</code> has generated wrong condition expression for filter with non string literal (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4077">CALCITE-4077</a>]
Exception when joined with built-in table functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4097">CALCITE-4097</a>]
Avoid requesting unnecessary trait request when deriving traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4033">CALCITE-4033</a>]
Does not produce parenthesized table expressions for <code class="highlighter-rouge">UNNEST</code> (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4049">CALCITE-4049</a>]
Improve the implementation of the shortest-path algorithm</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3929">CALCITE-3929</a>]
When deserialize UDAF aggregate call from json string, throws <code class="highlighter-rouge">NPE</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4062">CALCITE-4062</a>]
Support deserialize UDF array type from json string (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4090">CALCITE-4090</a>]
When generating SQL for DB2, a complex <code class="highlighter-rouge">SELECT</code> above a sub-query generates a bad table alias (Steven Talbot)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4083">CALCITE-4083</a>]
<code class="highlighter-rouge">RelTraitSet</code> failed to canonize traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4019">CALCITE-4019</a>]
Visit <code class="highlighter-rouge">SqlInsert</code> with <code class="highlighter-rouge">SqlShuttle</code> cause <code class="highlighter-rouge">NullPointerException</code> (Xu ZhaoHui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4063">CALCITE-4063</a>]
Unnest an array of single-item structs causes <code class="highlighter-rouge">ClassCastException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3907">CALCITE-3907</a>]
Use username and password parameters on delegation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3951">CALCITE-3951</a>]
Support different string comparison based on <code class="highlighter-rouge">SqlCollation</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4020">CALCITE-4020</a>]
Support <code class="highlighter-rouge">Calc</code> operator in <code class="highlighter-rouge">RelFieldTrimmer</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4057">CALCITE-4057</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableBatchNestedLoopJoin</code> (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4016">CALCITE-4016</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableCalc</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4055">CALCITE-4055</a>]
<code class="highlighter-rouge">RelFieldTrimmer</code> loses hints</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3975">CALCITE-3975</a>]
Add options to <code class="highlighter-rouge">ProjectFilterTransposeRule</code> to push down project and filter expressions whole, not just field references</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4038">CALCITE-4038</a>]
Refactor <code class="highlighter-rouge">RexVisitor</code>, <code class="highlighter-rouge">RexBiVisitor</code>, <code class="highlighter-rouge">RelOptUtil.InputFinder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4053">CALCITE-4053</a>]
<code class="highlighter-rouge">RexSimplify</code> should not pass exprs containing non-const subExprs to <code class="highlighter-rouge">RexExecutor</code> (Shuo Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4018">CALCITE-4018</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableValues</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4049">CALCITE-4049</a>]
Reduce the time complexity of getting shortest distances</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4041">CALCITE-4041</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableCorrelate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4007">CALCITE-4007</a>]
<code class="highlighter-rouge">MergeJoin</code> collation check should not be limited to join key’s order</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4012">CALCITE-4012</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableHashJoin</code> and <code class="highlighter-rouge">EnumerableNestedLoopJoin</code> (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4040">CALCITE-4040</a>]
An aggregate function that does not support roll up throws an exception when it is rolled up (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4030">CALCITE-4030</a>]
Reinstate assertion check for trait derivation in <code class="highlighter-rouge">OptimizeTask</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4042">CALCITE-4042</a>]
<code class="highlighter-rouge">JoinCommuteRule</code> must not match <code class="highlighter-rouge">SEMI</code> / <code class="highlighter-rouge">ANTI</code> join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4043">CALCITE-4043</a>]
Improve <code class="highlighter-rouge">IllegalArgumentException</code> message in <code class="highlighter-rouge">RelBuilder#field</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3991">CALCITE-3991</a>]
The required should always be provided in <code class="highlighter-rouge">RelSet.getOrCreateSubset()</code> (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3981">CALCITE-3981</a>]
<code class="highlighter-rouge">Volcano.register</code> should not return stale subset (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2997">CALCITE-2997</a>]
In <code class="highlighter-rouge">SqlToRelConverter</code> and <code class="highlighter-rouge">RelBuilder</code>, add option to avoid pushing down join condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4023">CALCITE-4023</a>]
Deprecate <code class="highlighter-rouge">ProjectSortTransposeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4031">CALCITE-4031</a>]
Remove code to be removed before 1.24</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3993">CALCITE-3993</a>]
Add utility methods to <code class="highlighter-rouge">RelTrait</code>, <code class="highlighter-rouge">RelTraitSet</code> and <code class="highlighter-rouge">RelCollation</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4011">CALCITE-4011</a>]
Support trait propagation for <code class="highlighter-rouge">EnumerableProject</code> and <code class="highlighter-rouge">EnumerableFilter</code> (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4019">CALCITE-4019</a>]
Visit <code class="highlighter-rouge">SqlInsert</code> with <code class="highlighter-rouge">SqlShuttle</code> cause <code class="highlighter-rouge">NullPointerException</code> (Xu ZhaoHui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4004">CALCITE-4004</a>]
Show <code class="highlighter-rouge">RelOptRuleOperand</code> description in debugger to facilitate debugging</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4009">CALCITE-4009</a>]
Remove traitset remapping in <code class="highlighter-rouge">ProjectJoinTransposeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3999">CALCITE-3999</a>]
Simplify <code class="highlighter-rouge">DialectPool</code> implementation using Guava cache</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3910">CALCITE-3910</a>]
Enhance <code class="highlighter-rouge">ProjectJoinTransposeRule</code> to support <code class="highlighter-rouge">SemiJoin</code> and <code class="highlighter-rouge">AntiJoin</code> (Liya Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3988">CALCITE-3988</a>]
Intersect in <code class="highlighter-rouge">RelMdRowCount</code> doesn’t take into account <code class="highlighter-rouge">intersect all</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3985">CALCITE-3985</a>]
Simplify grouped window function in parser (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4086">CALCITE-4086</a>]
Upgrade Avatica version to 1.17.0</li>
</ul>
<h4 id="build-1-24-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4075">CALCITE-4075</a>]
Mock table ‘EMPNULLABLES’ should allow nulls in all non-pk columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4101">CALCITE-4101</a>]
Calcite PR CI often failed due to <code class="highlighter-rouge">elasticsearch:test</code>, disable the related tests first (Jiatao Tao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4061">CALCITE-4061</a>]
Build should fail if Calcite code uses deprecated APIs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-4104">CALCITE-4104</a>]
Add automatically link to GitHub PR and ‘pull-request-available’ label to issues</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3478">CALCITE-3478</a>]
Restructure tests for materialized views (Jin Xing)</li>
</ul>
<h4 id="site-1-24-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3950">CALCITE-3950</a>]
Doc of <code class="highlighter-rouge">SqlGroupingFunction</code> contradicts its behavior</li>
<li>Site: Remove ‘(for Calcite committers)’ suffix from headers in section dedicated to committers</li>
<li>Site: Add instructions for managing Calcite repos through GitHub</li>
<li>Site: Add Tencent and TBDS logo in powered-by image</li>
</ul>
<h2 id="v1-23-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.23.0">1.23.0</a> / 2020-05-23</h2>
<p>This release comes two months after 1.22.0. It includes more than 100 resolved
issues, comprising a lot of new features as well as performance improvements
and bug-fixes. For some complex queries, the planning speed can be 50x or more
faster than previous versions with built-in default rule set. It is also worth
highlighting the following.</p>
<ul>
<li>
<code class="highlighter-rouge">VolcanoPlanner</code> supports top down trait request and trait enforcement without
abstract converter
(<a href="https://issues.apache.org/jira/browse/CALCITE-3896">CALCITE-3896</a>)</li>
<li>Improve <code class="highlighter-rouge">VolcanoPlanner</code> performance by removing rule match and subset importance
(<a href="https://issues.apache.org/jira/browse/CALCITE-3753">CALCITE-3753</a>)</li>
<li>Improve <code class="highlighter-rouge">VolcanoPlanner</code> performance when abstract converter is enabled
(<a href="https://issues.apache.org/jira/browse/CALCITE-2970">CALCITE-2970</a>)</li>
<li>Support ClickHouse dialect
(<a href="https://issues.apache.org/jira/browse/CALCITE-2157">CALCITE-2157</a>)</li>
<li>Support <code class="highlighter-rouge">SESSION</code> and <code class="highlighter-rouge">HOP</code> Table function
(<a href="https://issues.apache.org/jira/browse/CALCITE-3780">CALCITE-3780</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-3737">CALCITE-3737</a>)</li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13, 14 and OpenJDK 8, 9, 10, 11, 12, 13, 14;
Guava versions 19.0 to 28.2-jre; other software versions as specified in
gradle.properties.</p>
<h4 id="breaking-1-23-0">Breaking Changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3877">CALCITE-3877</a>]
In <code class="highlighter-rouge">RexWindow</code>, make fields <code class="highlighter-rouge">upperBound</code> and <code class="highlighter-rouge">lowerBound</code> not-nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3868">CALCITE-3868</a>]
Remove redundant <code class="highlighter-rouge">ruleSet</code>(protected)and <code class="highlighter-rouge">ruleNames</code>(private) in <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3753">CALCITE-3753</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> flags <code class="highlighter-rouge">impatient</code> and <code class="highlighter-rouge">ambitious</code> are removed, alternatively
use <code class="highlighter-rouge">checkCancel()</code> to achieve <code class="highlighter-rouge">impatient</code> mode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3997">CALCITE-3997</a>]
In <code class="highlighter-rouge">VolcanoPlanner</code>, transformation rules won’t match with Enumerable physical
operators</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3825">CALCITE-3825</a>]
Split <code class="highlighter-rouge">AbstractMaterializedViewRule</code> into multiple classes (addendum)</li>
</ul>
<h4 id="new-features-1-23-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3896">CALCITE-3896</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> supports top down trait request and trait enforcement without
abstract converter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3780">CALCITE-3780</a>]
Support <code class="highlighter-rouge">SESSION</code> Table function (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3737">CALCITE-3737</a>]
Support <code class="highlighter-rouge">HOP</code> Table function (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3789">CALCITE-3789</a>]
Support Presto style <code class="highlighter-rouge">unnest</code> with items alias (Will Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2157">CALCITE-2157</a>]
Support ClickHouse dialect (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3833">CALCITE-3833</a>]
Support <code class="highlighter-rouge">SemiJoin</code> in <code class="highlighter-rouge">EnumerableMergeJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3684">CALCITE-3684</a>]
Support <code class="highlighter-rouge">CONCAT</code> for variable arguments (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3285">CALCITE-3285</a>]
<code class="highlighter-rouge">EnumerableMergeJoin</code> support non-equi join conditions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3694">CALCITE-3694</a>]
Implement <code class="highlighter-rouge">SINH</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3647">CALCITE-3647</a>]
Support MySQL <code class="highlighter-rouge">COMPRESS</code> function (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3726">CALCITE-3726</a>]
Allow declaring type objects (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3815">CALCITE-3815</a>]
Support SQL standard aggregate functions: <code class="highlighter-rouge">EVERY</code>, <code class="highlighter-rouge">SOME</code>, <code class="highlighter-rouge">INTERSECTION</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3704">CALCITE-3704</a>]
Implement <code class="highlighter-rouge">STRCMP</code> function</li>
</ul>
<h4 id="fixes-1-23-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3984">CALCITE-3984</a>]
Support <code class="highlighter-rouge">Exchange</code> operator in <code class="highlighter-rouge">RelFieldTrimmer</code> (Xu Zhaohui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3971">CALCITE-3971</a>]
Support <code class="highlighter-rouge">Calc</code> in <code class="highlighter-rouge">RelMdColumnOrigins</code> (Xu ZhaoHui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3921">CALCITE-3921</a>]
Support <code class="highlighter-rouge">TableModify</code> json serialization and deserialization (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3938">CALCITE-3938</a>]
Support <code class="highlighter-rouge">LogicalCalc</code> in <code class="highlighter-rouge">RelShuttle</code> (dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3880">CALCITE-3880</a>]
Add <code class="highlighter-rouge">SortExchange</code> support to <code class="highlighter-rouge">RelFieldTrimmer</code> (Krisztian Kasa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3867">CALCITE-3867</a>]
Support <code class="highlighter-rouge">RelDistribution</code> json serialization (Krisztian Kasa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3634">CALCITE-3634</a>]
Add <code class="highlighter-rouge">IntersectOnCalcsToIntersectUnifyRule</code> for materialized view recognition
(dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3934">CALCITE-3934</a>]
Allow type-coercion in <code class="highlighter-rouge">CONCAT</code> operator</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3889">CALCITE-3889</a>]
Add <code class="highlighter-rouge">apply(Mappings.Mapping)</code> to <code class="highlighter-rouge">RelTrait</code> and <code class="highlighter-rouge">RelTraitSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3838">CALCITE-3838</a>]
Support <code class="highlighter-rouge">Calc</code> in <code class="highlighter-rouge">RelMdSize</code>, <code class="highlighter-rouge">RelMdSelectivity</code>, <code class="highlighter-rouge">RelMdMaxRowCount</code>,
<code class="highlighter-rouge">RelMdMinRowCount</code>, <code class="highlighter-rouge">RelMdTableReferences</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3718">CALCITE-3718</a>]
Support <code class="highlighter-rouge">Intersect</code> and <code class="highlighter-rouge">Minus</code> in <code class="highlighter-rouge">Bindables</code> (xzh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3997">CALCITE-3997</a>]
Logical rules matched with physical operators but failed to handle traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3979">CALCITE-3979</a>]
Simplification might have removed CAST expression(s) incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3968">CALCITE-3968</a>]
TPC-H queries take forever for planning</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3877">CALCITE-3877</a>]
In <code class="highlighter-rouge">RexWindow</code>, make fields <code class="highlighter-rouge">upperBound</code> and <code class="highlighter-rouge">lowerBound</code> not-nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3969">CALCITE-3969</a>]
Trait keys remapping may throw exception when some trait key is not mapped
(Roman Kondakov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3982">CALCITE-3982</a>]
Simplify <code class="highlighter-rouge">FilterMergeRule</code> to rely on <code class="highlighter-rouge">RelBuilder</code> instead of <code class="highlighter-rouge">RexProgram</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3983">CALCITE-3983</a>]
Add utility methods to <code class="highlighter-rouge">RelTraitSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3980">CALCITE-3980</a>]
Redis-adapter redis connection is not reused when <code class="highlighter-rouge">RedisTable</code> is created (Xu
Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3961">CALCITE-3961</a>]
<code class="highlighter-rouge">VolcanoPlanner.prunedNodes</code> info is lost when duplicate <code class="highlighter-rouge">RelNode</code> is discarded
(Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3866">CALCITE-3866</a>]
“numeric field overflow” when running the generated SQL in PostgreSQL (Wenhui
Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3926">CALCITE-3926</a>]
<code class="highlighter-rouge">CannotPlanException</code> when an empty LogicalValues requires a certain collation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3973">CALCITE-3973</a>]
Hints should not unparse as enclosed in parentheses (Alex Baden)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3887">CALCITE-3887</a>]
<code class="highlighter-rouge">Filter</code> and <code class="highlighter-rouge">Join</code> conditions may not need to retain nullability during
simplifications</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3966">CALCITE-3966</a>]
Trigger rules for existing <code class="highlighter-rouge">RelSubset</code> when it becomes delivered</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3928">CALCITE-3928</a>]
Trim unused fields before materialized view matching (dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3962">CALCITE-3962</a>]
Make <code class="highlighter-rouge">JSON_VALUE</code> operands varadic</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3827">CALCITE-3827</a>]
Reduce the time complexity of finding in-edges of a vertex in the graph (Liya
Fan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3878">CALCITE-3878</a>]
Create <code class="highlighter-rouge">ArrayList</code> with initial capacity when size is known (Xu Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3949">CALCITE-3949</a>]
<code class="highlighter-rouge">RelDistributions.of()</code> and <code class="highlighter-rouge">RelCollations.of()</code> should canonize trait instance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3954">CALCITE-3954</a>]
Always compare types using equals</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3955">CALCITE-3955</a>]
Remove the first operand of <code class="highlighter-rouge">RexCall</code> from <code class="highlighter-rouge">SqlWindowTableFunction</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3915">CALCITE-3915</a>]
Add rule listener to report rule attempts and time at <code class="highlighter-rouge">DEBUG</code> log level
(Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3948">CALCITE-3948</a>]
<code class="highlighter-rouge">RelSubset</code> matching is not properly handled in <code class="highlighter-rouge">VolcanoRuleCall</code> (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3758">CALCITE-3758</a>]
<code class="highlighter-rouge">FilterTableScanRule</code> generate wrong mapping for filter condition when
underlying is <code class="highlighter-rouge">BindableTableScan</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3942">CALCITE-3942</a>]
Move type-coercion configurations into <code class="highlighter-rouge">SqlValidator.Config</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3939">CALCITE-3939</a>]
Change <code class="highlighter-rouge">UnionEliminatorRule</code> and <code class="highlighter-rouge">ProjectRemoveRule</code> to auto pruning
<code class="highlighter-rouge">SubstitutionRule</code> (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3944">CALCITE-3944</a>]
Move <code class="highlighter-rouge">dumpSets</code> and <code class="highlighter-rouge">dumpGraphviz</code> out of <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3927">CALCITE-3927</a>]
<code class="highlighter-rouge">RelSubset</code> is not fired for rule when set gets merged (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3868">CALCITE-3868</a>]
Remove redundant <code class="highlighter-rouge">ruleSet</code>(protected)and <code class="highlighter-rouge">ruleNames</code>(private) in VolcanoPlanner</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3940">CALCITE-3940</a>]
<code class="highlighter-rouge">Hint</code> item can not parse correctly if the name is right after token /*+</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3447">CALCITE-3447</a>]
MutableScans with the same qualified name are not equivalent (Dai Min,Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3931">CALCITE-3931</a>]
Add LOOKAHEAD(2) for methods defined in <code class="highlighter-rouge">createStatementParserMethods</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3790">CALCITE-3790</a>]
Make the url() of Sources.of(file) available</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3894">CALCITE-3894</a>]
SET operation between <code class="highlighter-rouge">DATE</code> and <code class="highlighter-rouge">TIMESTAMP</code> returns a wrong result</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3881">CALCITE-3881</a>]
<code class="highlighter-rouge">SqlFunctions#addMonths</code> yields incorrect results in some corner case
(Zhenghua Gao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3324">CALCITE-3324</a>]
Set <code class="highlighter-rouge">updateCount</code> when creating <code class="highlighter-rouge">MetaResultSet</code> (Robert Yokota)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3733">CALCITE-3733</a>]
In JDBC adapter, when generating SQL for MYSQL, generate <code class="highlighter-rouge">TIMESTAMP</code> type as
<code class="highlighter-rouge">DATETIME</code> for <code class="highlighter-rouge">CAST</code> (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3909">CALCITE-3909</a>]
<code class="highlighter-rouge">RelMdMinRowCount</code> doesn’t take into account <code class="highlighter-rouge">UNION</code> <code class="highlighter-rouge">DISTINCT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3576">CALCITE-3576</a>]
Remove enumerable convention check in <code class="highlighter-rouge">FilterIntoJoinRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2593">CALCITE-2593</a>]
Plan error when transforming multiple collations to single collation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2010">CALCITE-2010</a>]
Cannot plan query that is <code class="highlighter-rouge">UNION ALL</code> applied to <code class="highlighter-rouge">VALUES</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3865">CALCITE-3865</a>]
<code class="highlighter-rouge">RelCollationTraitDef.canConvert</code> should always return true</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2970">CALCITE-2970</a>]
Improve <code class="highlighter-rouge">VolcanoPlanner</code> performance when enabling abstract converter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3914">CALCITE-3914</a>]
Improve <code class="highlighter-rouge">SubstitutionVisitor</code> to consider <code class="highlighter-rouge">RexCall</code> of type <code class="highlighter-rouge">PLUS</code> and <code class="highlighter-rouge">TIMES</code>
for canonicalization (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3912">CALCITE-3912</a>]
Incorrect mapping parsing when properties have same name as reserved keywords
in ElasticSearch</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3900">CALCITE-3900</a>]
Add <code class="highlighter-rouge">Config</code> for <code class="highlighter-rouge">SqlValidator</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3908">CALCITE-3908</a>]
<code class="highlighter-rouge">JoinCommuteRule</code> should update all input references in join condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3898">CALCITE-3898</a>]
<code class="highlighter-rouge">RelOptPredicateList</code> may generate incorrect map of constant values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3835">CALCITE-3835</a>]
Overloaded table functions fail with an assertion error if param types differ</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3851">CALCITE-3851</a>]
Replace the node importance map with a set for pruned nodes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3872">CALCITE-3872</a>]
Simplify expressions with unary minus</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3814">CALCITE-3814</a>]
Support JDK 14 and guava 28.2-jre</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3876">CALCITE-3876</a>]
<code class="highlighter-rouge">RelToSqlConverter</code> should not merge a <code class="highlighter-rouge">Project</code> that contains a window function
that references a window function in input <code class="highlighter-rouge">Project</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3891">CALCITE-3891</a>]
Remove use of Pair.zip in <code class="highlighter-rouge">RelTraitSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3885">CALCITE-3885</a>]
Restore trace logging for rules queue and Volcano planner’s internal state
(Roman Kondakov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3886">CALCITE-3886</a>]
Execute substitution rule according to the order they get matched</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3882">CALCITE-3882</a>]
Remove duplicated code from <code class="highlighter-rouge">SqlTypeAssignmentRule</code> (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3846">CALCITE-3846</a>]
<code class="highlighter-rouge">EnumerableMergeJoin</code>: wrong comparison of composite key with null values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3829">CALCITE-3829</a>]
<code class="highlighter-rouge">MergeJoinEnumerator</code> should not use inputs enumerators until it is really
required</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3840">CALCITE-3840</a>]
Re-aliasing of <code class="highlighter-rouge">VALUES</code> that has column aliases produces wrong SQL in the JDBC
adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3810">CALCITE-3810</a>]
Render <code class="highlighter-rouge">ANTI</code> and <code class="highlighter-rouge">SEMI</code> join to <code class="highlighter-rouge">NOT EXISTS</code> and <code class="highlighter-rouge">EXISTS</code> in the JDBC adapter.
Also add forgotten <code class="highlighter-rouge">IS_DISTINCT_FROM</code> translation support</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3852">CALCITE-3852</a>]
<code class="highlighter-rouge">RexSimplify</code> doesn’t simplify NOT EQUAL predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3862">CALCITE-3862</a>]
Materialized view rewriting algorithm throws <code class="highlighter-rouge">IndexOutOfBoundsException</code>
(Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3856">CALCITE-3856</a>]
Remove code to be removed before 1.23</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3855">CALCITE-3855</a>]
Supports snapshot on table with virtual columns during sql-to-rel conversion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3853">CALCITE-3853</a>]
Minor improvements in <code class="highlighter-rouge">SortJoinCopyRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3848">CALCITE-3848</a>]
Rewriting for materialized view consisting of group by on join keys fails with
<code class="highlighter-rouge">Mappings$NoElementException</code> (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3845">CALCITE-3845</a>]
<code class="highlighter-rouge">CASE WHEN</code> expression with nullability <code class="highlighter-rouge">CAST</code> is considered as reduced wrongly in
<code class="highlighter-rouge">ReduceExpressionsRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3847">CALCITE-3847</a>]
Decorrelation for join with lateral table outputs wrong plan if the join
condition contains correlation variables</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3753">CALCITE-3753</a>]
Boost <code class="highlighter-rouge">VolcanoPlanner</code> performance by removing rule match and subset importance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3823">CALCITE-3823</a>]
Do not use <code class="highlighter-rouge">String.replaceAll</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3412">CALCITE-3412</a>]
FLOOR(timestamp TO WEEK) gives wrong result</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3839">CALCITE-3839</a>]
After calling <code class="highlighter-rouge">RelBuilder.aggregate</code>, cannot lookup field by name</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3819">CALCITE-3819</a>]
Prune parent <code class="highlighter-rouge">RelNode</code> when merging child <code class="highlighter-rouge">RelSet</code> with parent <code class="highlighter-rouge">RelSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3809">CALCITE-3809</a>]
<code class="highlighter-rouge">RexSimplify</code> simplifies nondeterministic function incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3828">CALCITE-3828</a>]
MergeJoin throws NPE in case of null keys</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3820">CALCITE-3820</a>]
<code class="highlighter-rouge">EnumerableDefaults#orderBy</code> should be lazily computed + support enumerator
re-initialization</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3837">CALCITE-3837</a>]
AntiJoin with empty right input can always be transformed as its left input</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3821">CALCITE-3821</a>]
<code class="highlighter-rouge">RelOptUtil::containsMultisetOrWindowedAgg</code> doesn’t really check multiset
(Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3825">CALCITE-3825</a>]
Split <code class="highlighter-rouge">AbstractMaterializedViewRule</code> into multiple classes (addendum)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3824">CALCITE-3824</a>]
<code class="highlighter-rouge">JoinProjectTransposeRule</code> should skip Projects containing windowing expression
(Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3734">CALCITE-3734</a>]
MySQL JDBC rewrite is producing queries with CHAR with range beyond 255 (Vineet
Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3817">CALCITE-3817</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> does not remove the entry in ruleNames when removing a rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2592">CALCITE-2592</a>]
<code class="highlighter-rouge">EnumerableMergeJoin</code> is never taken</li>
</ul>
<h4 id="build-1-23-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3965">CALCITE-3965</a>]
Avoid <code class="highlighter-rouge">DiffRepository</code> lock contention</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3924">CALCITE-3924</a>]
Fix flakey test to handle <code class="highlighter-rouge">TIMESTAMP</code> and <code class="highlighter-rouge">TIMESTAMP(0)</code> correctly (neoReMinD)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3888">CALCITE-3888</a>]
Switch avatica-server to be test dependency for core</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3660">CALCITE-3660</a>]
Disable flaky test <code class="highlighter-rouge">PigRelBuilderStyleTest</code> since it fails too often for no reason</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3892">CALCITE-3892</a>]
Make junit test classes and methods non-public where possible</li>
<li>Update release-plugins: 1.65 -&gt; 1.70</li>
<li>Avoid failures in SourceTest when filesystem does not support unicode paths</li>
<li>Add AvoidStarImport Checkstyle rule</li>
<li>The release tag should be ‘calcite-N.N’ not ‘vN.N’</li>
</ul>
<h4 id="site-1-23-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3958">CALCITE-3958</a>]
Revise documentation of gradle.properties in Cassandra/Piglet and
<code class="highlighter-rouge">SubstitutionVisitor</code> (xzh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3726">CALCITE-3726</a>]
Documentation for Declaring Objects For Types Defined In Schema (ritesh-kapoor)</li>
<li>Site: Add Ant Financial logo in powered-by image (Wang Yanlin)</li>
<li>Site: Change affiliation of Stamatis Zampetakis</li>
<li>Site: Add Forward Xu, Jin Xing, Wang Yanlin, as committers</li>
<li>Site: Add Vineet Garg as committer</li>
<li>Site: Add Feng Zhu as committer</li>
</ul>
<h2 id="v1-22-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.22.0">1.22.0</a> / 2020-03-05</h2>
<p>This release comes five months after 1.21.0. It includes more than 250
resolved issues, comprising a large number of new features as well as
general improvements and bug-fixes. Among others, it is worth
highlighting the following.</p>
<ul>
<li>Support
<a href="https://issues.apache.org/jira/browse/CALCITE-482">SQL hints</a>
for different kind of relational expressions</li>
<li>A new
<a href="https://issues.apache.org/jira/browse/CALCITE-3510">Redis adapter</a>
</li>
<li>Support Oracle
<a href="https://issues.apache.org/jira/browse/CALCITE-3579">XML</a>
<a href="https://issues.apache.org/jira/browse/CALCITE-3580">functions</a>
and
<a href="https://issues.apache.org/jira/browse/CALCITE-3684">MySQL</a>
<a href="https://issues.apache.org/jira/browse/CALCITE-3695">math</a>
<a href="https://issues.apache.org/jira/browse/CALCITE-3707">functions</a>
</li>
</ul>
<p>We have also fixed some important bugs:</p>
<ul>
<li>Merging <code class="highlighter-rouge">RelSet</code> sometimes gave
<a href="https://issues.apache.org/jira/browse/CALCITE-2018">inconsistent state</a>,</li>
<li>The <code class="highlighter-rouge">GROUP_ID</code> function gave
<a href="https://issues.apache.org/jira/browse/CALCITE-1824">incorrect results</a>,</li>
<li>Improve row count estimate for
<a href="https://issues.apache.org/jira/browse/CALCITE-3711">Correlate</a>
relational expression,</li>
<li>When applying the
<a href="https://issues.apache.org/jira/browse/CALCITE-3435">MOD operation to DECIMAL values</a>
the inferred type was incorrrect.</li>
</ul>
<p>Compatibility: This release is tested on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13 and OpenJDK 8, 9, 10, 11, 12, 13;
Guava versions 19.0 to 27.1-jre; Apache Flink 1.10.0;
other software versions as specified in gradle.properties.</p>
<h4 id="breaking-changes">Breaking Changes</h4>
<ul>
<li>Constructors for <code class="highlighter-rouge">Project</code>, <code class="highlighter-rouge">TableScan</code>, <code class="highlighter-rouge">Calc</code>, <code class="highlighter-rouge">Aggregate</code> and <code class="highlighter-rouge">Join</code> introduce new parameter named <code class="highlighter-rouge">hints</code> (<a href="https://issues.apache.org/jira/browse/CALCITE-482">CALCITE-482</a>)</li>
<li>Logical <code class="highlighter-rouge">RelNode</code>’s <code class="highlighter-rouge">create</code> method need to pass in hints explicitly (<a href="https://issues.apache.org/jira/browse/CALCITE-3723">CALCITE-3723</a>)</li>
<li>
<code class="highlighter-rouge">Project</code> names will not represent in <code class="highlighter-rouge">RelNode</code> digest anymore (<a href="https://issues.apache.org/jira/browse/CALCITE-3713">CALCITE-3713</a>)</li>
<li>
<code class="highlighter-rouge">RexCall</code>s are default to be normalized in the <code class="highlighter-rouge">RelNode</code> digest (<a href="https://issues.apache.org/jira/browse/CALCITE-2450">CALCITE-2450</a>)</li>
<li>
<code class="highlighter-rouge">RelBuilder.aggregate</code> now would prune the unused fields from the input, thus the plan may change (<a href="https://issues.apache.org/jira/browse/CALCITE-3763">CALCITE-3763</a>)</li>
<li>
<code class="highlighter-rouge">RelBuilder.scan</code> and sql-to-rel conversion always invoke <code class="highlighter-rouge">RelOptTable.toRel</code> now, so there may be some plan changes for the <code class="highlighter-rouge">TableScan</code> node if your <code class="highlighter-rouge">RelOptTable.toRel</code> returns a physical rel before</li>
</ul>
<h4 id="new-features-1-22-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3771">CALCITE-3771</a>] <code class="highlighter-rouge">TRIM</code> Support for HIVE/SPARK Dialect (Dhirenda Gautam)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3707">CALCITE-3707</a>] Implement <code class="highlighter-rouge">COSH</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3695">CALCITE-3695</a>] Implement <code class="highlighter-rouge">TANH</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3640">CALCITE-3640</a>] Oracle <code class="highlighter-rouge">EXISTSNODE</code> Function Support (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3382">CALCITE-3382</a>] Support <code class="highlighter-rouge">TUMBLE</code> as Table Value Function (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3510">CALCITE-3510</a>] Implement Redis adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3684">CALCITE-3684</a>] Implement <code class="highlighter-rouge">CBRT</code> function (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3663">CALCITE-3663</a>] Support for <code class="highlighter-rouge">TRIM</code> function in BigQuery Dialect</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3580">CALCITE-3580</a>] Oracle <code class="highlighter-rouge">EXTRACT(XML)</code> Function Support (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3579">CALCITE-3579</a>] Oracle <code class="highlighter-rouge">XMLTRANSFORM</code> Function Support (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3591">CALCITE-3591</a>] Add bit_xor aggregate operator (wangxlong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3552">CALCITE-3552</a>] Support MySQL <code class="highlighter-rouge">ExtractValue</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3542">CALCITE-3542</a>] Implement <code class="highlighter-rouge">RepeatUnion</code> All=false</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-482">CALCITE-482</a>] Implement sql and planner hints</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3781">CALCITE-3781</a>] <code class="highlighter-rouge">HintStrategy</code> can specify excluded rules for planner</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3730">CALCITE-3730</a>] Add hints to <code class="highlighter-rouge">RelBuilder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3719">CALCITE-3719</a>] Add hint option checker to customize the option</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3631">CALCITE-3631</a>] Support SQL hints for <code class="highlighter-rouge">Calc</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3590">CALCITE-3590</a>] Support SQL hints for <code class="highlighter-rouge">Aggregate</code> (Shuo Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3584">CALCITE-3584</a>] Propagate hints when decorrelating a query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3736">CALCITE-3736</a>] Add an interface in <code class="highlighter-rouge">RelOptRuleCall</code> to customize the propagation of hints before registering into planner rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3496">CALCITE-3496</a>] Hive dialect and MS SQL dialect support with cube and with rollup (dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3465">CALCITE-3465</a>] Add support for missing Cassandra 3.x data types (Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3442">CALCITE-3442</a>] In ElasticSearch adapter, set <code class="highlighter-rouge">stored_fields = _none_</code> to prohibit FetchPhase get involved (Yunfeng,Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3437">CALCITE-3437</a>] Support <code class="highlighter-rouge">MatchQuery</code> in ElasticSearch adapter (Shlok Srivastava)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3434">CALCITE-3434</a>] ElasticSearch schema with pathPrefix (Jeffery Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3405">CALCITE-3405</a>] Prune columns for <code class="highlighter-rouge">ProjectableFilterableTable</code> when <code class="highlighter-rouge">Project</code> is not simple mapping (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3349">CALCITE-3349</a>] Add <code class="highlighter-rouge">CREATE FUNCTION</code> and <code class="highlighter-rouge">DROP FUNCTION</code> ddl (Zhenqiu Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3323">CALCITE-3323</a>] Add mode to <code class="highlighter-rouge">SqlValidator</code> that treats statements as valid if they contain unknown functions (Ryan Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3302">CALCITE-3302</a>] Implement <code class="highlighter-rouge">CLASSIFIER</code> and <code class="highlighter-rouge">LAST</code> functions for <code class="highlighter-rouge">MATCH_RECOGNIZE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3112">CALCITE-3112</a>] Support <code class="highlighter-rouge">Window</code> in <code class="highlighter-rouge">RelToSqlConverter</code> (Wenhui Tang)</li>
</ul>
<h4 id="fixes-1-22-0">Bug fixes, API changes and minor enhancements</h4>
<ul>
<li>Following CALCITE-3769: Add BindableTableScanRule into the default ruleset</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3826">CALCITE-3826</a>] <code class="highlighter-rouge">UPDATE</code> assigns wrong type to bind variables</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3830">CALCITE-3830</a>] The ‘approximate’ field should be considered when computing the digest of <code class="highlighter-rouge">AggregateCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3807">CALCITE-3807</a>] checkForSatisfiedConverters() is unnecessary</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3803">CALCITE-3803</a>] Enhance <code class="highlighter-rouge">RexSimplify</code> to simplify ‘a&gt;1 or (a&lt;3 and b)’ to ‘a&gt;1 or b’ if column a is not nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2707">CALCITE-2707</a>] Information about distinct aggregation is lost in <code class="highlighter-rouge">MATCH_RECOGNIZE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3801">CALCITE-3801</a>] Deprecate <code class="highlighter-rouge">SqlToRelConverter.Config#isConvertTableAccess</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3791">CALCITE-3791</a>] <code class="highlighter-rouge">HepPlanner</code> does not clear metadata cache for the ancestors of discarded node when a transformation happens</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3794">CALCITE-3794</a>] <code class="highlighter-rouge">RexSimplify</code> should return early if there is no pulled up predicate when simplifying using predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3798">CALCITE-3798</a>] Make <code class="highlighter-rouge">RelBuilder</code> view expander pluggable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3769">CALCITE-3769</a>] Deprecate <code class="highlighter-rouge">TableScanRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3774">CALCITE-3774</a>] In <code class="highlighter-rouge">RelBuilder</code> and <code class="highlighter-rouge">ProjectMergeRule</code>, prevent merges when it would increase expression complexity</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3763">CALCITE-3763</a>] <code class="highlighter-rouge">RelBuilder.aggregate</code> should prune unused fields from the input, if the input is a <code class="highlighter-rouge">Project</code>
</li>
<li>Add <code class="highlighter-rouge">RelBuilder.transform</code>, which allows you to clone a <code class="highlighter-rouge">RelBuilder</code> with slightly different Config</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3785">CALCITE-3785</a>] <code class="highlighter-rouge">HepPlanner.belongToDag()</code> doesn’t have to use mapDigestToVertex (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3783">CALCITE-3783</a>] <code class="highlighter-rouge">PruneEmptyRules#JOIN_RIGHT_INSTANCE</code> wrong behavior for <code class="highlighter-rouge">JoinRelType.ANTI</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3773">CALCITE-3773</a>] Wrong parameter in <code class="highlighter-rouge">EnumerableMergeJoin::create</code> `method</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3768">CALCITE-3768</a>] <code class="highlighter-rouge">VolcanoPlanner.changeTraitsUsingConverters()</code> has parameter that’s never used</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3766">CALCITE-3766</a>] Add a Builder to <code class="highlighter-rouge">RelHint</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3765">CALCITE-3765</a>] Returns early when there is an existing operand when assigning operands solve order</li>
<li>Switch <code class="highlighter-rouge">RelBuilder.Config</code> to an interface, and deprecate <code class="highlighter-rouge">RelBuilder.ConfigBuilder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3764">CALCITE-3764</a>] <code class="highlighter-rouge">AggregateCaseToFilterRule</code> handles <code class="highlighter-rouge">NULL</code> values incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1824">CALCITE-1824</a>] <code class="highlighter-rouge">GROUP_ID</code> returns wrong result (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3756">CALCITE-3756</a>] <code class="highlighter-rouge">RelSubset</code> should not match <code class="highlighter-rouge">operand(RelNode.class)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3738">CALCITE-3738</a>] Missing order by logical plan for <code class="highlighter-rouge">INSERT</code> statement</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3676">CALCITE-3676</a>] <code class="highlighter-rouge">VolcanoPlanner.dumpGraphviz</code> should handle exception gracefully (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3653">CALCITE-3653</a>] Support <code class="highlighter-rouge">TableModify</code> in <code class="highlighter-rouge">ToLogicalConverter</code> (dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3668">CALCITE-3668</a>] <code class="highlighter-rouge">VolcanoPlanner</code> does not match all the <code class="highlighter-rouge">RelSubSet</code> in matchRecursive</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3744">CALCITE-3744</a>] Duplicate rule matches when <code class="highlighter-rouge">RelSet</code> gets merged</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3747">CALCITE-3747</a>] Constructing <code class="highlighter-rouge">BETWEEN</code> with <code class="highlighter-rouge">RelBuilder</code> throws class cast exception</li>
<li>Add HSQLDB data sets (scott, foodmart and chinook) to SQLLine’s path</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3735">CALCITE-3735</a>] In <code class="highlighter-rouge">ImmutableBeans</code>, allow interfaces to have default methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3736">CALCITE-3736</a>] Add an interface in <code class="highlighter-rouge">RelOptRuleCall</code> to customize the propagation of hints before registering into planner rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3721">CALCITE-3721</a>] <code class="highlighter-rouge">Filter</code> of distinct aggregate call is lost after applying <code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> (Shuo Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3644">CALCITE-3644</a>] Add <code class="highlighter-rouge">ProjectSetOpTransposeRule</code> to normalize materialized view (xy2953396112)</li>
<li>Add method <code class="highlighter-rouge">Pair.forEach(Iterable, Iterable, BiConsumer)</code>
</li>
<li>Really deprecate <code class="highlighter-rouge">RelBuilder.groupKey(ImmutableBitSet, ImmutableList&lt;ImmutableBitSet&gt;)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3729">CALCITE-3729</a>] Filters failed to be pushed down when it’s identical to join condition (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3725">CALCITE-3725</a>] <code class="highlighter-rouge">RelMetadataTest</code> fails with NPE due to unsafe <code class="highlighter-rouge">RelMetadataQuery.instance</code> call (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3675">CALCITE-3675</a>] SQL to Rel conversion is broken for coalesce on nullable field (DonnyZone)</li>
<li>Refine rules so they produce less no-op matches</li>
<li>Refine logging dependencies: keep slf4j bridges in runtime classpath only</li>
<li>Refine <code class="highlighter-rouge">RuleQueue#addMatch</code>: skip the match if it is not required for the phase</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3364">CALCITE-3364</a>] <code class="highlighter-rouge">ClassCastException</code> if group by is used on the result of scalar valued table function (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3722">CALCITE-3722</a>] Add <code class="highlighter-rouge">Hook#PLAN_BEFORE_IMPLEMENTATION</code> to capture the plan after optimization</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3713">CALCITE-3713</a>] Remove column names from <code class="highlighter-rouge">Project#digest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2450">CALCITE-2450</a>] Reorder <code class="highlighter-rouge">RexCall</code> predicates to a canonical form
validation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3677">CALCITE-3677</a>] Add assertion to <code class="highlighter-rouge">EnumerableTableScan</code> constructor to validate if the table is suitable for enumerable scan</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3715">CALCITE-3715</a>] Add an interface to pass the table hints to <code class="highlighter-rouge">RelOptTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3714">CALCITE-3714</a>] <code class="highlighter-rouge">BitString.createFromBytes</code> reverses order of the bits in each byte</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3712">CALCITE-3712</a>] Optimize lossless casts in <code class="highlighter-rouge">RexSimplify</code>: CAST(CAST(intExpr as BIGINT) as INT) =&gt; intExpr</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3587">CALCITE-3587</a>] <code class="highlighter-rouge">RexBuilder</code> may lose decimal fraction for creating literal with <code class="highlighter-rouge">DECIMAL</code> type (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3658">CALCITE-3658</a>] <code class="highlighter-rouge">TableModify</code> of <code class="highlighter-rouge">Update</code> contains correlated variable by mistake (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3711">CALCITE-3711</a>] <code class="highlighter-rouge">Correlate</code> should override <code class="highlighter-rouge">estimateRowCount</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3606">CALCITE-3606</a>] Derive target table column list by mistake when convert <code class="highlighter-rouge">TableModify</code> to Sql string (JinXing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3526">CALCITE-3526</a>] <code class="highlighter-rouge">SqlPrettyWriter</code> should have options to fold/chop long lines, print leading commas</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3328">CALCITE-3328</a>] Immutable beans, powered by reflection</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3672">CALCITE-3672</a>] Support implicit type coercion for insert and update</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3651">CALCITE-3651</a>] NPE when convert relational algebra that correlates <code class="highlighter-rouge">TableFunctionScan</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3666">CALCITE-3666</a>] Refine <code class="highlighter-rouge">RelMdColumnUniqueness</code> and <code class="highlighter-rouge">RelMdUniqueKeys</code> for <code class="highlighter-rouge">Calc</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3655">CALCITE-3655</a>] <code class="highlighter-rouge">SortJoinTransposeRule</code> must not push sort into <code class="highlighter-rouge">Project</code> that contains <code class="highlighter-rouge">OVER</code> expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3649">CALCITE-3649</a>] Hints should be propagated correctly in planner rules if original node is transformed to different kind</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3563">CALCITE-3563</a>] When resolving method call in calcite runtime, add type check and match mechanism for input arguments (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3621">CALCITE-3621</a>] Push down sort to DB, SQL of <code class="highlighter-rouge">Sort</code> rel contains explicit field name instead of * (Lei Jiang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3652">CALCITE-3652</a>] Add org.apiguardian:apiguardian-api to specify API status</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3632">CALCITE-3632</a>] Add IntersectToIntersectUnify Rule in SubstitutionVisitor (xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3643">CALCITE-3643</a>] Prevent matching <code class="highlighter-rouge">JoinCommuteRule</code> when both inputs are the same</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3630">CALCITE-3630</a>] Improve <code class="highlighter-rouge">ReduceExpressionsRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3607">CALCITE-3607</a>] Support <code class="highlighter-rouge">LogicalTableModify</code> in RelShuttle (xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3618">CALCITE-3618</a>] ProjectToWindowRule - correct isDependent checking (lxian2shell)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3635">CALCITE-3635</a>] Supports hint option as string or numeric literal</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3525">CALCITE-3525</a>] <code class="highlighter-rouge">RexSimplify</code>: eliminate redundant rex calls in OR</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3620">CALCITE-3620</a>] Remove implicit lateral operator for temporal table join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3387">CALCITE-3387</a>] Query with GROUP BY and JOIN … USING wrongly fails with “Column DEPTNO is ambiguous” error</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3604">CALCITE-3604</a>] Fixing <code class="highlighter-rouge">SqlXmlFunctionsTest</code> locale (ritesh-kapoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3608">CALCITE-3608</a>] Promote <code class="highlighter-rouge">RelOptUtil.createCastRel</code> to not create new projection if the input rel is already a project</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3603">CALCITE-3603</a>] <code class="highlighter-rouge">SqlLateralOperator</code>’s unparse add additional keyword <code class="highlighter-rouge">LATERAL</code> when the inner operator is <code class="highlighter-rouge">SqlSnapshot</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3599">CALCITE-3599</a>] Override toString() of <code class="highlighter-rouge">RexRangeRef</code> to avoid null string</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3598">CALCITE-3598</a>] <code class="highlighter-rouge">EnumerableTableScan</code>: wrong <code class="highlighter-rouge">JavaRowFormat</code> for elementType String</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3575">CALCITE-3575</a>] IndexOutOfBoundsException when converting sql to rel</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3462">CALCITE-3462</a>] Add projectExcept method in <code class="highlighter-rouge">RelBuilder</code> for projecting out expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3535">CALCITE-3535</a>] <code class="highlighter-rouge">EnumerableJoinRule</code>: remove unnecessary <code class="highlighter-rouge">Filter</code> on top of <code class="highlighter-rouge">INNER</code> Join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3520">CALCITE-3520</a>] Type cast from primitive to box is not correct (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3481">CALCITE-3481</a>] Support convert <code class="highlighter-rouge">TableFunctionScan</code> to <code class="highlighter-rouge">SqlNode</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3565">CALCITE-3565</a>] Explicitly cast assignable operand types to decimal for udf (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3547">CALCITE-3547</a>] SqlValidatorException because Planner cannot find UDFs added to schema (Chenxiao Mao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3246">CALCITE-3246</a>] NullPointerException while deserializing udf operator (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3429">CALCITE-3429</a>] AssertionError for user-defined table function with map argument (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3560">CALCITE-3560</a>] Additional calcite.util.Source implementation for generic text source (eg. CharSource)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3550">CALCITE-3550</a>] Make <code class="highlighter-rouge">SqlTypeAssignmentRules</code> conversion mapping pluggable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3546">CALCITE-3546</a>] Improve <code class="highlighter-rouge">EnumerableDefaults</code> nested loop join
Provide a new implementation of nested loop join that, unlike the existing one, does not
require to build the complete result as a list before returning it. Instead, it iterates
through the outer and inner enumerables and returns the results step by step.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3281">CALCITE-3281</a>] Support mixed Primitive types for <code class="highlighter-rouge">BinaryExpression</code> evaluate method (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3561">CALCITE-3561</a>] Support using unnest in <code class="highlighter-rouge">Interpreter</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3566">CALCITE-3566</a>] <code class="highlighter-rouge">EnumerableIntersect</code> and <code class="highlighter-rouge">EnumerableMinus</code> convert to Logical (xzh_dz)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3567">CALCITE-3567</a>] Unnest support Map wrapped with <code class="highlighter-rouge">RecordType</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3569">CALCITE-3569</a>] IndexOutOfBoundsException when pushing simplified filter to view</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3536">CALCITE-3536</a>] NPE when executing plan with <code class="highlighter-rouge">Coalesce</code> due to wrong NullAs strategy (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3355">CALCITE-3355</a>] Deduce whether <code class="highlighter-rouge">CASE</code> and <code class="highlighter-rouge">COALESCE</code> may produce NULL values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3473">CALCITE-3473</a>] Getting unique result for table scan should contain key column(s) (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3544">CALCITE-3544</a>] <code class="highlighter-rouge">RexSimplify</code> does not exploit all known predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3353">CALCITE-3353</a>] <code class="highlighter-rouge">ProjectJoinTransposeRule</code> caused AssertionError when creating a new Join (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3539">CALCITE-3539</a>] <code class="highlighter-rouge">EnumerableDefaults#nestedLoopJoin</code> returns duplicates for JoinType.SEMI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3521">CALCITE-3521</a>] <code class="highlighter-rouge">CalciteSystemProperty</code> failed to load config file</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3512">CALCITE-3512</a>] Query fails when comparing Time/TimeStamp types (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3534">CALCITE-3534</a>] Support parse(unparse) alien system non-standard data type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3454">CALCITE-3454</a>] Support <code class="highlighter-rouge">Exchange</code>, <code class="highlighter-rouge">SetOp</code> and <code class="highlighter-rouge">TableModify</code> for builtin metadata query (xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3527">CALCITE-3527</a>] Enrich tests for SQL hints in <code class="highlighter-rouge">SqlHintsConverterTest</code> (Shuo Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3245">CALCITE-3245</a>] <code class="highlighter-rouge">CompileException</code> in Janino when a query contains a division between a <code class="highlighter-rouge">Double</code> and a <code class="highlighter-rouge">BigDecimal</code> (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3492">CALCITE-3492</a>] <code class="highlighter-rouge">RexUtil.simplifyOrs()</code> throws exception if terms has 1 RexNode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3519">CALCITE-3519</a>] Use List instead of <code class="highlighter-rouge">BitSet</code> to keep inheritPath in RelHint (Shuo Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3491">CALCITE-3491</a>] Remove unused method <code class="highlighter-rouge">VolcanoPlanner.completeConversion()</code> (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3498">CALCITE-3498</a>] Unnest operation’s ordinality should be deterministic (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3494">CALCITE-3494</a>] Support decimal type aggregate in Interpreter (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3503">CALCITE-3503</a>] NPE at <code class="highlighter-rouge">VolcanoPlanner#isValid</code> when DEBUG is enabled (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3448">CALCITE-3448</a>] <code class="highlighter-rouge">AggregateOnCalcToAggUnifyRule</code> may ignore Project incorrectly (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3476">CALCITE-3476</a>] <code class="highlighter-rouge">ParameterScope</code> should override resolveColumn interface (Jark Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3474">CALCITE-3474</a>] NullPointerException in <code class="highlighter-rouge">SqlSimpleParser</code> toke.s.equals() (Xiucheng Qu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3469">CALCITE-3469</a>] Wrong rel used in <code class="highlighter-rouge">SubstitutionVisitor#rowTypesAreEquivalent</code> (Min Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3487">CALCITE-3487</a>] Should not hard code <code class="highlighter-rouge">RelMetadataQuery</code> class in VolcanoPlanner.isValid() (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3482">CALCITE-3482</a>] Equality of nested <code class="highlighter-rouge">ROW</code>s returns false for identical literal value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3479">CALCITE-3479</a>] Stack overflow error thrown when running join query (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3435">CALCITE-3435</a>] Enable decimal modulus operation to allow numeric with non-zero scale (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3456">CALCITE-3456</a>] AssertionError throws for aggregation with same digest <code class="highlighter-rouge">IN</code> subqueries in same scope</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3408">CALCITE-3408</a>] Add support for enumerable intersect/minus all (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3423">CALCITE-3423</a>] Support using <code class="highlighter-rouge">CAST</code> operation and <code class="highlighter-rouge">BOOLEAN</code> type value in table macro (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3458">CALCITE-3458</a>] Remove desc in <code class="highlighter-rouge">AbstractRelNode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3400">CALCITE-3400</a>] Implement left/right/semi/anti/full join in interpreter (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3254">CALCITE-3254</a>] Exception while deserializing with interval type or with empty partition/order key for <code class="highlighter-rouge">RexOver</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3457">CALCITE-3457</a>] <code class="highlighter-rouge">RexSimplify</code> incorrectly simplifies <code class="highlighter-rouge">IS NOT NULL</code> operator with <code class="highlighter-rouge">ITEM</code> call</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3433">CALCITE-3433</a>] <code class="highlighter-rouge">EQUALS</code> operator between date/timestamp types returns false if the type is nullable (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3449">CALCITE-3449</a>] Sync the table name logic from <code class="highlighter-rouge">TableScan</code> into the <code class="highlighter-rouge">TableModify</code> (dy.Zhuang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3376">CALCITE-3376</a>] <code class="highlighter-rouge">VolcanoPlanner</code> CannotPlanException: best rel is null
even though there is an option with non-infinite cost Problem
solved via <a href="https://issues.apache.org/jira/browse/CALCITE-2018">CALCITE-2018</a>,
just add a unit test for this specific scenario</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3454">CALCITE-3454</a>] Support <code class="highlighter-rouge">Exchange</code> in <code class="highlighter-rouge">RelMdMaxRowCount</code>,<code class="highlighter-rouge">RelMdMinRowCount</code>,<code class="highlighter-rouge">RelMdRowCount</code> (xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2018">CALCITE-2018</a>] Queries failed with AssertionError: rel has lower cost than best cost of subset</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3446">CALCITE-3446</a>] Make <code class="highlighter-rouge">RelMetadataQuery</code> extensible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3390">CALCITE-3390</a>] Add <code class="highlighter-rouge">ITEM</code> expression to <code class="highlighter-rouge">SqlKind</code> and include it in the policy map for Strong (Aman Sinha)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3334">CALCITE-3334</a>] Refinement for Substitution-Based MV Matching (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3439">CALCITE-3439</a>] Support <code class="highlighter-rouge">Intersect</code> and <code class="highlighter-rouge">Minus</code> in <code class="highlighter-rouge">RelMdPredicates</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3451">CALCITE-3451</a>] Support <code class="highlighter-rouge">TableModify</code> in <code class="highlighter-rouge">RelMdNodeTypes</code> (xy2953396113)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3444">CALCITE-3444</a>] Upgrade SQLLine to 1.9.0, and solve “Class path contains multiple SLF4J bindings” problem</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3436">CALCITE-3436</a>] In <code class="highlighter-rouge">CalciteConnectionConfigImpl</code>, add isSet and unset methods (Ryan Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3440">CALCITE-3440</a>] <code class="highlighter-rouge">RelToSqlConverter</code> does not properly alias ambiguous <code class="highlighter-rouge">ORDER BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3441">CALCITE-3441</a>] Remove <code class="highlighter-rouge">SqlTypeExplicitPrecedenceList.COMPACT_NUMERIC_TYPES</code> because the NULL delimiters are useless</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3428">CALCITE-3428</a>] Refine <code class="highlighter-rouge">RelMdColumnUniqueness</code> for <code class="highlighter-rouge">Filter</code> by considering constant columns (Jin Xing)</li>
<li>Add <code class="highlighter-rouge">RelBuilder.fields(ImmutableBitSet)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3424">CALCITE-3424</a>] AssertionError thrown for user-defined table function with array argument (Igor Guzenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3414">CALCITE-3414</a>] In calcite-core, use RexToLixTranslator.convert for type conversion code generation uniformly (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3416">CALCITE-3416</a>] SQL Dialects DEFAULTs should be more extensible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3393">CALCITE-3393</a>] <code class="highlighter-rouge">RelStructuredTypeFlattener</code>: improve support for functions with struct input (Igor Guzenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3318">CALCITE-3318</a>] Preserving <code class="highlighter-rouge">CAST</code> of <code class="highlighter-rouge">STRING</code> operand in binary comparison for BigQuery (soma-mondal)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2792">CALCITE-2792</a>] Stackoverflow while evaluating filter with large number of OR conditions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3407">CALCITE-3407</a>] Implement <code class="highlighter-rouge">MINUS</code> and <code class="highlighter-rouge">INTERSECT</code> in interpreter (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3420">CALCITE-3420</a>] <code class="highlighter-rouge">NullPointerException</code> throws for implicit type coercion of nested <code class="highlighter-rouge">SET</code> operations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3403">CALCITE-3403</a>] <code class="highlighter-rouge">RelMetadataQuery</code> reuse (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3411">CALCITE-3411</a>] Incorrect code generated for BigDecimal ConstantExpression (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3410">CALCITE-3410</a>] Simplify <code class="highlighter-rouge">RelOptRulesTest</code> and <code class="highlighter-rouge">HepPlannerTest</code> by making test methods fluent</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3404">CALCITE-3404</a>] In <code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code>, treat all the agg expressions as distinct
if they have the same arguments
and the non-distinct expressions distinct constraints can be ignored</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3382">CALCITE-3382</a>] Hard-wire the <code class="highlighter-rouge">TUMBLE</code> grouping function into SQL parser (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3396">CALCITE-3396</a>] Materialized view matches unexpectedly for <code class="highlighter-rouge">UNION</code> with different ‘all’ property (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3379">CALCITE-3379</a>] Support expand <code class="highlighter-rouge">STRING</code> column expression of table during sql-to-rel conversion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3397">CALCITE-3397</a>] AssertionError for interpretering multiset value (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3383">CALCITE-3383</a>] Plural time units</li>
<li>Re-format and re-organize config.fmpp files that customize the SQL parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3392">CALCITE-3392</a>] Column expression in DDL should be validated before converting to RexNode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3330">CALCITE-3330</a>] Use breadth first approach for propagating cost improvements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3386">CALCITE-3386</a>] CyclicMetadataException singleton instance causes confusion when debugging (Zuozhi Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3389">CALCITE-3389</a>] Test may fail if HashSet iterates in different order (contextshuffling)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3361">CALCITE-3361</a>] Add ‘lenientOperatorLookup’ connection property</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3347">CALCITE-3347</a>] IndexOutOfBoundsException in <code class="highlighter-rouge">FixNullabilityShuttle</code> when using <code class="highlighter-rouge">FilterIntoJoinRule</code> (Wang Yanlin, Shuming Li)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3374">CALCITE-3374</a>] Error format check result for explain plan as json (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3363">CALCITE-3363</a>] <code class="highlighter-rouge">JoinUnionTransposeRule.RIGHT_UNION</code> should not match <code class="highlighter-rouge">SEMI</code>/<code class="highlighter-rouge">ANTI</code> Join (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3369">CALCITE-3369</a>] In <code class="highlighter-rouge">LatticeSuggester</code>, recommend lattices based on <code class="highlighter-rouge">UNION</code> queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3365">CALCITE-3365</a>] Don’t require use of <code class="highlighter-rouge">JdbcSchema</code> in <code class="highlighter-rouge">QuerySqlStatisticProvider</code> (Lindsey Meyer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3239">CALCITE-3239</a>] <code class="highlighter-rouge">Calc#accept(RexShuttle shuttle)</code> does not update rowType. (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3288">CALCITE-3288</a>] In <code class="highlighter-rouge">ConstantExpression</code> support <code class="highlighter-rouge">SET</code> literals (xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1178">CALCITE-1178</a>] Allow <code class="highlighter-rouge">SqlBetweenOperator</code> to compare <code class="highlighter-rouge">DATE</code> and <code class="highlighter-rouge">TIMESTAMP</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3348">CALCITE-3348</a>] AssertionError while determining distribution of Calc (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3287">CALCITE-3287</a>] <code class="highlighter-rouge">Union</code> in <code class="highlighter-rouge">RelMdRowCount.java</code> doesn’t take into account ‘union all’ (Hong Shen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3357">CALCITE-3357</a>] <code class="highlighter-rouge">Trivial</code> null checking in <code class="highlighter-rouge">RelSet#addAbstractConverters</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3286">CALCITE-3286</a>] In <code class="highlighter-rouge">LatticeSuggester</code>, allow join conditions that use expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3360">CALCITE-3360</a>] <code class="highlighter-rouge">SqlValidator</code> throws NPE for unregistered function without implicit type coercion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3316">CALCITE-3316</a>] Exception while deserializing <code class="highlighter-rouge">LogicalCorrelate</code> from json string (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3317">CALCITE-3317</a>] Add a public constructor for <code class="highlighter-rouge">LogicalCalc</code> with RelInput type parameter (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3319">CALCITE-3319</a>] AssertionError when reducing decimals (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3331">CALCITE-3331</a>] Support implicit type cast for operators that use single operand family checker</li>
</ul>
<h5 id="adapters-1-22-0">Adapters</h5>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3751">CALCITE-3751</a>] JDBC adapter generates SQL with wrong aliases in <code class="highlighter-rouge">GROUP BY</code><code class="highlighter-rouge">ORDER BY</code> query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3593">CALCITE-3593</a>] JDBC adapter generates incorrect <code class="highlighter-rouge">HAVING</code> clause for BigQuery (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3466">CALCITE-3466</a>] JDBC adapter incorrectly drops <code class="highlighter-rouge">GROUP BY</code> clause of sub-query (Wang Weidong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3154">CALCITE-3154</a>] <code class="highlighter-rouge">RelToSqlConverter</code> generates <code class="highlighter-rouge">NULLS LAST</code> and <code class="highlighter-rouge">NULLS FIRST</code> wrongly
when using <code class="highlighter-rouge">MysqlSqlDialect</code> to convert <code class="highlighter-rouge">RexOver</code> to sql (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2672">CALCITE-2672</a>] Qualifying the common column should not be allowed in Oracle dialect and SQL standard</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3568">CALCITE-3568</a>] BigQuery, Hive, Spark SQL dialects do not support nested aggregates (Divyanshu Srivastava)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3381">CALCITE-3381</a>] In JDBC adapter, when using BigQuery dialect, converts SQL types to BigQuery types correctly(Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3381">CALCITE-3381</a>] Unparse to correct BigQuery integral syntax: <code class="highlighter-rouge">INTERVAL</code> int64 time_unit.
Range time unit is not supported yet by BigQuery (amaliujia)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3486">CALCITE-3486</a>] In JDBC adapter, when generating <code class="highlighter-rouge">ROW </code>value expression,
generates the <code class="highlighter-rouge">ROW</code> keyword only if the dialect allows it (quxiucheng)</li>
<li>Use proper ClassLoader in SparkHandlerImpl</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3381">CALCITE-3381</a>] When using BigQuery dialect, Rel2SQL converter converts SQL types to BigQuery types (part2) (Rui Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3475">CALCITE-3475</a>] JDBC adapter generates invalid SQL for <code class="highlighter-rouge">UNION ALL</code> on BigQuery (Steven Talbot)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3370">CALCITE-3370</a>] In JDBC adapter for Microsoft SQL Server, emulate <code class="highlighter-rouge">NULLS FIRST</code> using <code class="highlighter-rouge">CASE</code> expression (Justin Swett)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3344">CALCITE-3344</a>] In JDBC adapter, generate <code class="highlighter-rouge">SELECT TOP(n)</code> for MSSQL 2008 and earlier, and for <code class="highlighter-rouge">Sybase</code> ASE</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3300">CALCITE-3300</a>] In JDBC adapter, when generating SQL for count star, generates the star argument of the call (Wang Weidong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3247">CALCITE-3247</a>] In JDBC adapter, when generating SQL for Hive, transform <code class="highlighter-rouge">SUBSTRING</code> function to correct format (Jacky Woo)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3282">CALCITE-3282</a>] In JDBC adapter, when generating SQL for Hive, generate <code class="highlighter-rouge">INTEGER</code> type as <code class="highlighter-rouge">INT</code> (huangfeng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3335">CALCITE-3335</a>] In ElasticSearch adapter, introduce configuration parameter “hosts” which deprecates previous “coordinates” (Shikha Somani)</li>
</ul>
<h4 id="build-1-22-0">Build and test suite</h4>
<ul>
<li>Stop building zip archives when building using gradle</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2442">CALCITE-2442</a>] Remove .toDelete cassandra temp folder on Windows after tests</li>
<li>Update Gradle test output formatting</li>
<li>Color test results in Gradle output</li>
<li>In JDBC adapter tests that check generated SQL, extract SQL from string literals in generated Java</li>
<li>Refactor MaterializationTest to use a fluent API</li>
<li>Allow <code class="highlighter-rouge">CREATE TABLE ... AS SELECT ...</code> in Quidem tests</li>
<li>Increase test coverage for regular CI jobs: move @Tag(slow) annotations to test methods</li>
<li>Use concurrent test execution by default</li>
<li>Add gradle task ‘aggregateJavadocIncludingTests’ that builds javadoc for both main and test</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3654">CALCITE-3654</a>] Use single Elasticsearch instance for all elasticsearch tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3637">CALCITE-3637</a>] Update linq4j tests upgrade from junit4 to junit5 (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3623">CALCITE-3623</a>] Replace Spotless with Autostyle</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3622">CALCITE-3622</a>] Update geode tests upgrade from junit4 to junit5 (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3601">CALCITE-3601</a>] Update elasticsearch tests upgrade from junit4 to junit5 (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3625">CALCITE-3625</a>] Update mongo tests upgrade from junit4 to junit5 (Qianjin Xu)</li>
<li>Move PGP signing to com.github.vlsi.stage-vote-release Gradle plugin</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3595">CALCITE-3595</a>] Test infrastructure overwrites reference log with wrong results (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3559">CALCITE-3559</a>] Drop <code class="highlighter-rouge">HydromaticFileSetCheck</code>, upgrade Checkstyle 7.8.2 → 8.27</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3540">CALCITE-3540</a>] FoodmartTest produces many warnings due to incorrect use of CalciteAssert.pooled()</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3548">CALCITE-3548</a>] unlock ./gradlew :ubenchmark:jmh to run benchmarks</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3327">CALCITE-3327</a>] Simplify <code class="highlighter-rouge">SqlValidatorTest</code> and <code class="highlighter-rouge">SqlParserTest</code> by making test methods fluent</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2905">CALCITE-2905</a>] Migrate build scripts to Gradle</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2457">CALCITE-2457</a>] JUnit 4 → 5: trivial renames</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2457">CALCITE-2457</a>] Configure build to automatically replace common JUnit4 classes with JUnit5</li>
<li>Build script: instantiate sqllineClasspath only when buildSqllineClasspath is used</li>
<li>GitHub Actions: actions/checkout@master → v1.1.0 to avoid unexpected failures</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3141">CALCITE-3141</a>] Slow tests are not run in continuous integration</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3140">CALCITE-3140</a>] Multiple failures when executing slow tests</li>
<li>Reduce FoodmartQuery heap consumption by ignoring rows/columns as they are never used in tests</li>
<li>Add ‘./gradlew style’ task to apply code format and report violations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2905">CALCITE-2905</a>] Migrate build scripts to Gradle</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2905">CALCITE-2905</a>] Add hydromatic-resource as plain source file</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3457">CALCITE-3457</a>] Ignore fuzzer tests due to known unsolved issue</li>
<li>Improve folder detection logic in DocumentationTest</li>
<li>Ignore <code class="highlighter-rouge">TpcdsLatticeSuggesterTest</code> because it does not work</li>
<li>Use <code class="highlighter-rouge">Class#getResource</code> in FileReaderTest instead of hard-coding file name</li>
<li>Simplify <code class="highlighter-rouge">RexProgramTest#reproducerFor3457</code> test</li>
<li>Add shrinker for <code class="highlighter-rouge">RexProgramFuzzy</code> so the results are simpler to reason about</li>
<li>Refactor <code class="highlighter-rouge">SqlPrettyWriterTest</code>, using a fluent API for invoking tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3362">CALCITE-3362</a>] Add some tests for empty Lattice (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3421">CALCITE-3421</a>] Reuse <code class="highlighter-rouge">RelMetadataQuery</code> in test suites</li>
</ul>
<h4 id="dependency-1-22-0">Dependency version upgrade</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3818">CALCITE-3818</a>] Upgrade Avatica version to 1.16.0</li>
<li>Update Gradle: 6.1 → 6.1.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3742">CALCITE-3742</a>] Update Gradle: 6.0.1 → 6.1</li>
<li>Bump spark-core_2.10 from 2.2.0 to 2.2.2</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3516">CALCITE-3516</a>] Bump net.java.dev.jna:jna to 5.5.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2457">CALCITE-2457</a>] Druid: JUnit4 → JUnit5</li>
<li>Bump geode-core from 1.9.2 to 1.10.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3502">CALCITE-3502</a>] Upgrade Geode dependency 1.6.0 → 1.9.2</li>
<li>Bump jackson-databind from 2.9.9.3 to 2.9.10.1</li>
</ul>
<h4 id="site-1-22-0">Web site and documentation</h4>
<ul>
<li>Site: Update IntelliJ instructions with suggested and problematic versions</li>
<li>Site: Switch PMC Chair to Stamatis Zampetakis</li>
<li>Site: Add two links with useful information about Gradle (Rui Wang)</li>
<li>Site: Update homepage of Stamatis Zampetakis</li>
<li>Site: Move “Fast federated SQL with Apache Calcite” in talks section and add video link</li>
<li>Site: Add Haisheng Yuan as PMC</li>
<li>Site: Append ‘(FirstName LastName)’ to commit message example in contributing section</li>
<li>Site: Add Danny Chan as PMC</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3445">CALCITE-3445</a>] In web site, automatically redirect http to https</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3391">CALCITE-3391</a>] Insecure pages warning on Chrome</li>
<li>Site: Update upcoming talks section for ApacheCon Europe 2019</li>
<li>Site: Change GitHub avatar links to https</li>
</ul>
<h2 id="v1-21-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.21.0">1.21.0</a> / 2019-09-11</h2>
<p>This release comes two months after 1.20.0. It includes more than 100 resolved
issues, comprising a large number of new features as well as general improvements
and bug-fixes.</p>
<p>It is worth highlighting that Calcite now:</p>
<ul>
<li>supports implicit type coercion in various contexts
(<a href="https://issues.apache.org/jira/browse/CALCITE-2302">CALCITE-2302</a>);</li>
<li>allows transformations of Pig Latin scripts into algebraic plans
(<a href="https://issues.apache.org/jira/browse/CALCITE-3122">CALCITE-3122</a>);</li>
<li>provides an implementation for the main features of <code class="highlighter-rouge">MATCH_RECOGNIZE</code> in the
<code class="highlighter-rouge">Enumerable</code> convention
(<a href="https://issues.apache.org/jira/browse/CALCITE-1935">CALCITE-1935</a>);</li>
<li>supports correlated <code class="highlighter-rouge">ANY</code>/<code class="highlighter-rouge">SOME</code>/<code class="highlighter-rouge">ALL</code> sub-queries
(<a href="https://issues.apache.org/jira/browse/CALCITE-3031">CALCITE-3031</a>);</li>
<li>introduces anonymous types based on <code class="highlighter-rouge">ROW</code>, <code class="highlighter-rouge">ARRAY</code>, and nested collection
(<a href="https://issues.apache.org/jira/browse/CALCITE-3233">CALCITE-3233</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-3231">CALCITE-3231</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-3250">CALCITE-3250</a>);</li>
<li>brings new join algorithms for the <code class="highlighter-rouge">Enumerable</code> convention
(<a href="https://issues.apache.org/jira/browse/CALCITE-2979">CALCITE-2979</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-2973">CALCITE-2973</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-3284">CALCITE-3284</a>).</li>
</ul>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13 and OpenJDK 8, 9, 10, 11, 12, 13;
Guava versions 19.0 to 27.1-jre;
Apache Druid version 0.14.0-incubating;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="breaking-1-21-0">Breaking Changes</h4>
<ul>
<li>Core parser config.fmpp#dataTypeParserMethods should return <code class="highlighter-rouge">SqlTypeNameSpec</code>
instead of <code class="highlighter-rouge">SqlIdentifier</code>.</li>
<li>The description of converter rules has slightly changed
(<a href="https://issues.apache.org/jira/browse/CALCITE-3115">CALCITE-3115</a>).
In some rare cases this may lead to a <code class="highlighter-rouge">Rule description ... is not valid</code>
exception. The exception can easily disappear by changing the name of the
<code class="highlighter-rouge">Convention</code> which causes the problem.</li>
</ul>
<h4 id="new-features-1-21-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2973">CALCITE-2973</a>]
[<a href="https://issues.apache.org/jira/browse/CALCITE-3284">CALCITE-3284</a>]
Allow joins (hash, semi, anti) that have equi conditions to be executed using a
hash join algorithm (Lai Zhou)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2302">CALCITE-2302</a>]
Implicit type cast support</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3122">CALCITE-3122</a>]
Convert Pig Latin scripts into Calcite relational algebra and Calcite SQL
(Khai Tran)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2979">CALCITE-2979</a>]
Add a block-based nested loop join algorithm (Khawla Mouhoubi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3263">CALCITE-3263</a>]
Add <code class="highlighter-rouge">MD5</code>, <code class="highlighter-rouge">SHA1</code> SQL functions (Shuming Li)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3204">CALCITE-3204</a>]
Implement <code class="highlighter-rouge">jps</code> command for OS adapter (Qianjin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3260">CALCITE-3260</a>]
Add Expressions.evaluate(Node), a public API for evaluating linq4j expressions
(Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3280">CALCITE-3280</a>]
Add <code class="highlighter-rouge">REGEXP_REPLACE</code> function in Oracle, MySQL libraries (Shuming Li)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3111">CALCITE-3111</a>]
Add <code class="highlighter-rouge">RelBuilder.correlate</code> method, and allow custom implementations of
<code class="highlighter-rouge">Correlate</code> in <code class="highlighter-rouge">RelDecorrelator</code> (Juhwan Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3252">CALCITE-3252</a>]
Add <code class="highlighter-rouge">CONVERT_TIMEZONE</code>, <code class="highlighter-rouge">TO_DATE</code> and <code class="highlighter-rouge">TO_TIMESTAMP</code> non-standard SQL functions
(Lindsey Meyer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3235">CALCITE-3235</a>]
Add <code class="highlighter-rouge">CONCAT</code> function for Redshift (Ryan Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3250">CALCITE-3250</a>]
Support nested collection type for <code class="highlighter-rouge">SqlDataTypeSpec</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1935">CALCITE-1935</a>]
Implement <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Julian Feinauer, Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2843">CALCITE-2843</a>]
Support PostgreSQL cast operator (<code class="highlighter-rouge">::</code>) (Muhammad Gelbana)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3233">CALCITE-3233</a>]
Support <code class="highlighter-rouge">ROW</code> type for <code class="highlighter-rouge">SqlDataTypeSpec</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3231">CALCITE-3231</a>]
Support <code class="highlighter-rouge">ARRAY</code> type for <code class="highlighter-rouge">SqlDataTypeSpec</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2624">CALCITE-2624</a>]
Add a rule to copy a sort below a join operator (Khawla Mouhoubi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3031">CALCITE-3031</a>]
Support for correlated <code class="highlighter-rouge">ANY</code>/<code class="highlighter-rouge">SOME</code>/<code class="highlighter-rouge">ALL</code> sub-query (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2510">CALCITE-2510</a>]
Implement <code class="highlighter-rouge">CHR</code> function (Sergey Tsvetkov, Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3176">CALCITE-3176</a>]
File adapter for parsing JSON files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3144">CALCITE-3144</a>]
Add rule, <code class="highlighter-rouge">AggregateCaseToFilterRule</code>, that converts <code class="highlighter-rouge">SUM(CASE WHEN b THEN x
END)</code> to <code class="highlighter-rouge">SUM(x) FILTER (WHERE b)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2995">CALCITE-2995</a>]
Implement <code class="highlighter-rouge">DAYNAME</code><code class="highlighter-rouge">MONTHNAME</code> functions; add <code class="highlighter-rouge">locale</code> connection property
(xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2460">CALCITE-2460</a>]
[CALCITE-2459] Add <code class="highlighter-rouge">TO_BASE64</code>, <code class="highlighter-rouge">FROM_BASE64</code> SQL functions (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3063">CALCITE-3063</a>]
Parse and process PostgreSQL posix regular expressions</li>
</ul>
<h4 id="fixes-1-21-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3321">CALCITE-3321</a>]
Set casing rules for BigQuery SQL dialect (Lindsey Meyer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3115">CALCITE-3115</a>]
Cannot add <code class="highlighter-rouge">JdbcRule</code> instances that have different <code class="highlighter-rouge">JdbcConvention</code> to same
<code class="highlighter-rouge">VolcanoPlanner</code>’s <code class="highlighter-rouge">RuleSet</code> (Wenhui Tang, Igor Guzenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3309">CALCITE-3309</a>]
Refactor <code class="highlighter-rouge">generatePredicate</code> method from <code class="highlighter-rouge">EnumerableNestedLoopJoin</code>,
<code class="highlighter-rouge">EnumerableHashJoin</code>, and <code class="highlighter-rouge">EnumerableBatchNestedLoopJoin</code> into a single location</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3310">CALCITE-3310</a>]
Approximate and exact aggregate calls are recognized as the same during
SQL-to-RelNode conversion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3292">CALCITE-3292</a>]
SqlToRelConverter#substituteSubQuery fails with NullPointerException when
converting <code class="highlighter-rouge">SqlUpdate</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3297">CALCITE-3297</a>]
<code class="highlighter-rouge">PigToSqlAggregateRule</code> should be applied on multi-set projection to produce an
optimal plan (Igor Guzenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3295">CALCITE-3295</a>]
Add aggregate call name in serialized json string for <code class="highlighter-rouge">RelNode</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3296">CALCITE-3296</a>]
Decorrelator shouldn’t give empty value when fetch and offset values are null
in <code class="highlighter-rouge">Sort</code> rel (Juhwan Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3283">CALCITE-3283</a>]
<code class="highlighter-rouge">RelSubset</code> does not contain its best <code class="highlighter-rouge">RelNode</code> (Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3210">CALCITE-3210</a>]
JDBC adapter should generate <code class="highlighter-rouge">CAST(NULL AS type)</code> rather than <code class="highlighter-rouge">NULL</code>
conditionally (Wang Weidong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3220">CALCITE-3220</a>]
JDBC adapter now transforms <code class="highlighter-rouge">TRIM</code> to <code class="highlighter-rouge">TRIM</code>, <code class="highlighter-rouge">LTRIM</code> or <code class="highlighter-rouge">RTRIM</code> when target
is Hive (Jacky Woo)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3228">CALCITE-3228</a>]
Error while applying rule <code class="highlighter-rouge">ProjectScanRule</code>: interpreter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3223">CALCITE-3223</a>]
Materialized view fails to match when there is non-<code class="highlighter-rouge">RexInputRef</code> in the
projects (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3257">CALCITE-3257</a>]
<code class="highlighter-rouge">RelMetadataQuery</code> cache is not invalidated when log trace is enabled
(Xiening Dai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3138">CALCITE-3138</a>]
<code class="highlighter-rouge">RelStructuredTypeFlattener</code> doesn’t restructure <code class="highlighter-rouge">ROW</code> type fields (Igor Guzenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3251">CALCITE-3251</a>]
<code class="highlighter-rouge">BinaryExpression</code> evaluate method support full numeric types in <code class="highlighter-rouge">Primitive</code>
(xy2953396112)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3259">CALCITE-3259</a>]
Align ‘Property’ in the serialized XML string of <code class="highlighter-rouge">RelXmlWriter</code> (Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3167">CALCITE-3167</a>]
Make <code class="highlighter-rouge">equals</code> and <code class="highlighter-rouge">hashCode</code> methods final in <code class="highlighter-rouge">AbstractRelNode</code>, and remove
overriding methods in <code class="highlighter-rouge">EnumerableTableScan</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3089">CALCITE-3089</a>]
Deprecate <code class="highlighter-rouge">EquiJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3267">CALCITE-3267</a>]
Remove method <code class="highlighter-rouge">SqlDataTypeSpec#deriveType(RelDataTypefactory)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3214">CALCITE-3214</a>]
Add <code class="highlighter-rouge">UnionToUnionRule</code> for materialization matching (refine rule name) (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3214">CALCITE-3214</a>]
Add <code class="highlighter-rouge">UnionToUnionRule</code> for materialization matching (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3249">CALCITE-3249</a>]
`Substitution#getRexShuttle does not consider RexLiteral (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3229">CALCITE-3229</a>]
<code class="highlighter-rouge">UnsupportedOperationException</code> for <code class="highlighter-rouge">UPDATE</code> with <code class="highlighter-rouge">IN</code> query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3236">CALCITE-3236</a>]
Handle issues found in static code analysis (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3238">CALCITE-3238</a>]
Support Time Zone suffix of DateTime types for <code class="highlighter-rouge">SqlDataTypeSpec</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3159">CALCITE-3159</a>]
Remove <code class="highlighter-rouge">DISTINCT</code> flag from calls to <code class="highlighter-rouge">MIN</code>, <code class="highlighter-rouge">MAX</code>, <code class="highlighter-rouge">BIT_OR</code>, <code class="highlighter-rouge">BIT_AND</code>
aggregate functions (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3237">CALCITE-3237</a>]
<code class="highlighter-rouge">IndexOutOfBoundsException</code> when generating deeply nested Java code from linq4j
(Sahith Nallapareddy)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3234">CALCITE-3234</a>]
For boolean properties, empty string should mean “true”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3226">CALCITE-3226</a>]
<code class="highlighter-rouge">RelBuilder</code> doesn’t keep the alias when <code class="highlighter-rouge">scan</code> from an expanded view (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3198">CALCITE-3198</a>]
Enhance <code class="highlighter-rouge">RexSimplify</code> to handle <code class="highlighter-rouge">(x &lt;&gt; a or x &lt;&gt; b)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3101">CALCITE-3101</a>]
Don’t push non-equi join conditions into <code class="highlighter-rouge">Project</code> below <code class="highlighter-rouge">Join</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3227">CALCITE-3227</a>]
<code class="highlighter-rouge">IndexOutOfBoundsException</code> when checking candidate parent match’s input
ordinal in <code class="highlighter-rouge">VolcanoRuleCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3177">CALCITE-3177</a>]
Ensure correct deserialization of relational algebra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3218">CALCITE-3218</a>]
Syntax error while parsing <code class="highlighter-rouge">DATEADD</code> function (which is valid on Redshift)
(Lindsey Meyer)</li>
<li>Deprecate <code class="highlighter-rouge">RexBuilder.constantNull()</code>, because it produces untyped <code class="highlighter-rouge">NULL</code>
literals that make planning difficult</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3191">CALCITE-3191</a>]
In JDBC adapter for MySQL, implement <code class="highlighter-rouge">Values</code> by generating <code class="highlighter-rouge">SELECT</code> without
<code class="highlighter-rouge">FROM</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3147">CALCITE-3147</a>]
In JDBC adapter, accommodate the idiosyncrasies of how BigQuery (standard SQL)
quotes character literals and identifiers</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3131">CALCITE-3131</a>]
In <code class="highlighter-rouge">LatticeSuggester</code>, record whether columns are used as “dimensions” or
“measures”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3175">CALCITE-3175</a>]
<code class="highlighter-rouge">AssertionError</code> while serializing to JSON a <code class="highlighter-rouge">RexLiteral</code> with <code class="highlighter-rouge">Enum</code> type
(Wang Yanlin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3225">CALCITE-3225</a>]
<code class="highlighter-rouge">JoinToMultiJoinRule</code> should not match semi- or anti-LogicalJoin</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3215">CALCITE-3215</a>]
Simplification may have not fully simplified IS <code class="highlighter-rouge">NOT NULL</code> expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3192">CALCITE-3192</a>]
Simplification may weaken OR conditions containing inequalities</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3211">CALCITE-3211</a>]
List of <code class="highlighter-rouge">MutableRel</code> may fail to be identified by <code class="highlighter-rouge">SubstitutionVisitor</code> during
matching (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3207">CALCITE-3207</a>]
Fail to convert <code class="highlighter-rouge">Join</code> with <code class="highlighter-rouge">LIKE</code> condition to SQL statement (wojustme)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2496">CALCITE-2496</a>]
Return 0 in case of <code class="highlighter-rouge">EXTRACT(MILLI/MICRO/NANOSECOND FROM date)</code>
(Sergey Nuyanzin, Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3109">CALCITE-3109</a>]
Improvements on algebraic operators to express recursive queries (<code class="highlighter-rouge">RepeatUnion</code>
and <code class="highlighter-rouge">TableSpool</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3209">CALCITE-3209</a>]
When calling <code class="highlighter-rouge">MutableMultiRel.setInput</code>, exception thrown (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3195">CALCITE-3195</a>]
Handle a UDF that throws checked exceptions in the Enumerable code generator
(DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3118">CALCITE-3118</a>]
<code class="highlighter-rouge">VolcanoRuleCall</code> should look at <code class="highlighter-rouge">RelSubset</code> rather than <code class="highlighter-rouge">RelSet</code> when checking
child ordinal of a parent operand (Botong Huang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3201">CALCITE-3201</a>]
<code class="highlighter-rouge">SqlValidator</code> throws exception for SQL insert target table with virtual columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3182">CALCITE-3182</a>]
Trim unused fields for plan of materialized-view before matching (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3174">CALCITE-3174</a>]
<code class="highlighter-rouge">IS NOT DISTINCT FROM</code> condition pushed from <code class="highlighter-rouge">Filter</code> to <code class="highlighter-rouge">Join</code> is not
collapsed (Bohdan Kazydub)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3166">CALCITE-3166</a>]
Make <code class="highlighter-rouge">RelBuilder</code> configurable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3113">CALCITE-3113</a>]
Equivalent <code class="highlighter-rouge">MutableAggregate</code>s with different row types should match with each
other (Jin Xing)</li>
<li>
<a href="https://issues.apache.org/jira/browse/CALCITE-3187">CALCITE-3187</a>:
Make decimal type inference overridable (Praveen Kumar)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3145">CALCITE-3145</a>]
<code class="highlighter-rouge">RelBuilder.aggregate</code> throws <code class="highlighter-rouge">IndexOutOfBoundsException</code> if <code class="highlighter-rouge">groupKey</code> is
non-empty and there are duplicate aggregate functions</li>
<li>Change type of <code class="highlighter-rouge">SqlStdOperatorTable.GROUPING</code> field to public class</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3196">CALCITE-3196</a>]
In <code class="highlighter-rouge">Frameworks</code>, add <code class="highlighter-rouge">interface BasePrepareAction</code> (a functional interface) and
deprecate <code class="highlighter-rouge">abstract class PrepareAction</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3183">CALCITE-3183</a>]
During field trimming, <code class="highlighter-rouge">Filter</code> is copied with wrong traitSet (Juhwan Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3189">CALCITE-3189</a>]
Multiple fixes for Oracle SQL dialect</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3165">CALCITE-3165</a>]
<code class="highlighter-rouge">Project#accept</code>(<code class="highlighter-rouge">RexShuttle</code> shuttle) does not update rowType</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3188">CALCITE-3188</a>]
<code class="highlighter-rouge">IndexOutOfBoundsException</code> in <code class="highlighter-rouge">ProjectFilterTransposeRule</code> when executing
<code class="highlighter-rouge">SELECT COUNT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3160">CALCITE-3160</a>]
Failed to materialize when the aggregate function uses group key (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3170">CALCITE-3170</a>]
ANTI join on conditions push down generates wrong plan</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3169">CALCITE-3169</a>]
decorrelateRel method should return when meeting <code class="highlighter-rouge">SEMI</code>/<code class="highlighter-rouge">ANTI</code> join in
<code class="highlighter-rouge">RelDecorrelator</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3171">CALCITE-3171</a>]
<code class="highlighter-rouge">SemiJoin</code> on conditions push down throws <code class="highlighter-rouge">IndexOutOfBoundsException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3172">CALCITE-3172</a>]
<code class="highlighter-rouge">RelBuilder#empty</code> does not keep aliases</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3121">CALCITE-3121</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> hangs due to sub-query with dynamic star</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3152">CALCITE-3152</a>]
Unify throws in SQL parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3125">CALCITE-3125</a>]
Remove completely <code class="highlighter-rouge">class CorrelateJoinType</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3133">CALCITE-3133</a>]
Remove completely <code class="highlighter-rouge">class SemiJoinType</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3126">CALCITE-3126</a>]
Remove deprecated <code class="highlighter-rouge">SemiJoin</code> usage completely</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3146">CALCITE-3146</a>]
Support the detection of nested aggregations for <code class="highlighter-rouge">JdbcAggregate</code> in
<code class="highlighter-rouge">SqlImplementor</code> (Wenhui Tang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3155">CALCITE-3155</a>]
Empty <code class="highlighter-rouge">LogicalValues</code> can not be converted to <code class="highlighter-rouge">UNION ALL</code> without operands which
can not be unparsed (Musbah EL FIL)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3151">CALCITE-3151</a>]
RexCall’s Monotonicity is not considered in determining a Calc’s collation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2801">CALCITE-2801</a>]
Check input type in <code class="highlighter-rouge">AggregateUnionAggregateRule</code> when remove the bottom
<code class="highlighter-rouge">Aggregate</code> (Hequn Cheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3149">CALCITE-3149</a>]
<code class="highlighter-rouge">RelDataType</code> CACHE in <code class="highlighter-rouge">RelDataTypeFactoryImpl</code> can’t be garbage collected</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3060">CALCITE-3060</a>]
<code class="highlighter-rouge">MutableProject</code> should be generated based on INVERSE_SURJECTION mapping
(DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3148">CALCITE-3148</a>]
Validator throws <code class="highlighter-rouge">IndexOutOfBoundsException</code> for <code class="highlighter-rouge">SqlInsert</code> when source and
sink have non-equal number of fields</li>
</ul>
<h4 id="build-1-21-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3322">CALCITE-3322</a>]
Remove duplicate test case in <code class="highlighter-rouge">RelMetadataTest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3314">CALCITE-3314</a>]
CVSS dependency-check-maven fails for calcite-pig, calcite-piglet,
calcite-spark</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3315">CALCITE-3315</a>]
Multiple failures in Druid IT tests due to implicit casts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3307">CALCITE-3307</a>]
<code class="highlighter-rouge">PigRelExTest</code>, <code class="highlighter-rouge">PigRelOpTest</code> and <code class="highlighter-rouge">PigScriptTest</code> fail on Windows</li>
<li>In <code class="highlighter-rouge">SqlFunctionsTest</code>, replace <code class="highlighter-rouge">assertEquals</code> and <code class="highlighter-rouge">assertNull</code> with <code class="highlighter-rouge">assertThat</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3258">CALCITE-3258</a>]
Upgrade jackson-databind from 2.9.9 to 2.9.9.3, and kafka-clients from 2.0.0
to 2.1.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3222">CALCITE-3222</a>]
Fix code style issues introduced by [CALCITE-3031] (Vineet Garg)</li>
<li>More compiler fixes, and cosmetic changes</li>
<li>Fix compiler warnings</li>
<li>Update stale tests in DruidAdapter</li>
<li>Following
[<a href="https://issues.apache.org/jira/browse/CALCITE-2804">CALCITE-2804</a>],
fix incorrect expected Druid query in test case
<code class="highlighter-rouge">DruidAdapterIT#testCastToTimestamp</code> (Justin Szeluga)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3153">CALCITE-3153</a>]
Improve testing in <code class="highlighter-rouge">TpcdsTest</code> using <code class="highlighter-rouge">assertEqual</code> instead of printing results</li>
<li>Fix javadoc error</li>
<li>Fix compilation warnings after Mongo java driver upgrade</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3179">CALCITE-3179</a>]
Bump Jackson from 2.9.8 to 2.9.9 (Fokko Driesprong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3157">CALCITE-3157</a>]
Mongo java driver upgrade: 3.5.0 → 3.10.2</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3156">CALCITE-3156</a>]
Mongo adapter. Replace fongo with Mongo Java Server for tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3168">CALCITE-3168</a>]
Add test for invalid literal of SQL parser</li>
</ul>
<h4 id="site-1-21-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3303">CALCITE-3303</a>]
Release Calcite 1.21.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3311">CALCITE-3311</a>]
Add doc to site for implicit type coercion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3262">CALCITE-3262</a>]
Refine doc of <code class="highlighter-rouge">SubstitutionVisitor</code> (Jin Xing)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2835">CALCITE-2835</a>]
Markdown errors on the Geode adapter page</li>
<li>Site: Update Apache links on homepage to HTTPS</li>
<li>Update favicon for new logo</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3136">CALCITE-3136</a>]
Fix the default rule description of <code class="highlighter-rouge">ConverterRule</code> (TANG Wen-hui)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3184">CALCITE-3184</a>]
Add the new logo to the website</li>
<li>Update example announcement</li>
<li>Add committer names to 1.20.0 release notes</li>
<li>Add 1.20.0 release date</li>
<li>Add 1.20.0 release announcement</li>
</ul>
<h2 id="v1-20-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.20.0">1.20.0</a> / 2019-06-24</h2>
<p>This release comes three months after 1.19.0. It includes a large number of bug fixes,
and additional SQL functions. There is now also explicit support for anti-joins.
Several new operators have been added to the algebra to allow support for recursive queries.
An adapter has also been added for <a href="https://kafka.apache.org/">Apache Kafka</a>.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12, 13 and OpenJDK 8, 9, 10, 11, 12, 13;
Guava versions 19.0 to 27.1-jre;
Apache Druid version 0.14.0-incubating;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="breaking-1-20-0">Breaking Changes</h4>
<ul>
<li>Make <code class="highlighter-rouge">EnumerableMergeJoin</code> extend <code class="highlighter-rouge">Join</code> instead of <code class="highlighter-rouge">EquiJoin</code>
</li>
<li>
<code class="highlighter-rouge">Correlate</code> use <code class="highlighter-rouge">JoinRelType</code> instead of <code class="highlighter-rouge">SemiJoinType</code>
</li>
<li>Rename <code class="highlighter-rouge">EnumerableThetaJoin</code> to <code class="highlighter-rouge">EnumerableNestedLoopJoin</code>
</li>
<li>Rename <code class="highlighter-rouge">EnumerableJoin</code> to <code class="highlighter-rouge">EnumerableHashJoin</code>
</li>
<li>Remove <code class="highlighter-rouge">SemiJoinFactory</code> from <code class="highlighter-rouge">RelBuilder</code>, method <code class="highlighter-rouge">semiJoin</code> now returns a <code class="highlighter-rouge">LogicalJoin</code>
with join type <code class="highlighter-rouge">JoinRelType.SEMI</code> instead of a <code class="highlighter-rouge">SemiJoin</code>
</li>
<li>Rules: <code class="highlighter-rouge">SemiJoinFilterTransposeRule</code>, <code class="highlighter-rouge">SemiJoinJoinTransposeRule</code>, <code class="highlighter-rouge">SemiJoinProjectTransposeRule</code>
and <code class="highlighter-rouge">SemiJoinRemoveRule</code> match <code class="highlighter-rouge">LogicalJoin</code> with join type <code class="highlighter-rouge">SEMI</code> instead of <code class="highlighter-rouge">SemiJoin</code>.</li>
<li>
<code class="highlighter-rouge">SemiJoin</code>, <code class="highlighter-rouge">EnumerableSemiJoin</code>, <code class="highlighter-rouge">SemiJoinType</code> and <code class="highlighter-rouge">CorrelateJoinType</code>, and methods that use them,
are deprecated for quick removal in 1.21</li>
<li>The Elasticsearch adapter no longer supports <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/removal-of-types.html">Elasticsearch types</a>.
Calcite table names will reflect index names in Elasticsearch (as opposed to types).
We recommend use of Elasticsearch 6.2 (or later) with Calcite.</li>
</ul>
<h4 id="new-features-1-20-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2822">CALCITE-2822</a>] Allow <code class="highlighter-rouge">MultiJoin</code> rules with any project/filter (Siddharth Teotia)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2968">CALCITE-2968</a>] New <code class="highlighter-rouge">AntiJoin</code> relational expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2721">CALCITE-2721</a>] Support parsing record-type [DOT] member-functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3005">CALCITE-3005</a>] Implement string functions: <code class="highlighter-rouge">LEFT</code>, <code class="highlighter-rouge">RIGHT</code> (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2812">CALCITE-2812</a>] Add algebraic operators to allow expressing recursive queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2913">CALCITE-2913</a>] Adapter for Apache Kafka (Mingmin Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3084">CALCITE-3084</a>] Implement JDBC string functions: <code class="highlighter-rouge">ASCII</code>, <code class="highlighter-rouge">REPEAT</code>, <code class="highlighter-rouge">SPACE</code>, <code class="highlighter-rouge">SOUNDEX</code>, <code class="highlighter-rouge">DIFFERENC</code> (pingle wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2985">CALCITE-2985</a>] Implement <code class="highlighter-rouge">JSON_STORAGE_SIZE</code> function (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2601">CALCITE-2601</a>] Add <code class="highlighter-rouge">REVERSE</code> function (pingle wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2712">CALCITE-2712</a>] Add rule to remove null-generating side of a Join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2965">CALCITE-2965</a>] Implement string functions: <code class="highlighter-rouge">REPEAT</code>, <code class="highlighter-rouge">SPACE</code>, <code class="highlighter-rouge">SOUNDEX</code>, <code class="highlighter-rouge">DIFFERENCE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2975">CALCITE-2975</a>] Implement <code class="highlighter-rouge">JSON_REMOVE</code> function (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2933">CALCITE-2933</a>] Add timestamp extract for casts from timestamp type to other types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3011">CALCITE-3011</a>] Support left and right outer joins with <code class="highlighter-rouge">AggregateJoinTransposeRule</code> (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2427">CALCITE-2427</a>] Allow sub-queries in DML statements (Pressenna Sockalingasamy)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2914">CALCITE-2914</a>] Add a new statistic provider, to improve how <code class="highlighter-rouge">LatticeSuggester</code> deduces foreign keys</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2754">CALCITE-2754</a>] Implement <code class="highlighter-rouge">LISTAGG</code> function (Sergey Nuyanzin, Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1172">CALCITE-1172</a>] Add rule to flatten two Aggregate operators into one</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2892">CALCITE-2892</a>] Add the <code class="highlighter-rouge">JSON_KEYS</code> function (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-883">CALCITE-883</a>] Support <code class="highlighter-rouge">RESPECT NULLS</code>, <code class="highlighter-rouge">IGNORE NULLS</code> option for <code class="highlighter-rouge">LEAD</code>, <code class="highlighter-rouge">LAG</code>, <code class="highlighter-rouge">FIRST_VALUE</code>, <code class="highlighter-rouge">LAST_VALUE</code>, <code class="highlighter-rouge">NTH_VALUE</code> functions (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2920">CALCITE-2920</a>] In <code class="highlighter-rouge">RelBuilder</code>, add <code class="highlighter-rouge">antiJoin</code> method (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1515">CALCITE-1515</a>] In <code class="highlighter-rouge">RelBuilder</code>, add <code class="highlighter-rouge">functionScan</code> method to create <code class="highlighter-rouge">TableFunctionScan</code> (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2658">CALCITE-2658</a>] Add <code class="highlighter-rouge">ExchangeRemoveConstantKeysRule</code> that removes constant keys from <code class="highlighter-rouge">Exchange</code> or <code class="highlighter-rouge">SortExchange</code> (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2729">CALCITE-2729</a>] Introducing <code class="highlighter-rouge">WindowReduceExpressionsRule</code> (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2808">CALCITE-2808</a>] Add the <code class="highlighter-rouge">JSON_LENGTH</code> function (xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-589">CALCITE-589</a>] Extend <code class="highlighter-rouge">unifyAggregates</code> method to work with Grouping Sets</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2908">CALCITE-2908</a>] Implement SQL <code class="highlighter-rouge">LAST_DAY</code> function (Chunwei Lei)</li>
</ul>
<h4 id="fixes-1-20-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3119">CALCITE-3119</a>] Deprecate Linq4j <code class="highlighter-rouge">CorrelateJoinType</code> (in favor of <code class="highlighter-rouge">JoinType</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3087">CALCITE-3087</a>] <code class="highlighter-rouge">AggregateOnProjectToAggregateUnifyRule</code> ignores Project incorrectly when its Mapping breaks ordering (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2744">CALCITE-2744</a>] Remove usage of deprecated API in <code class="highlighter-rouge">MockSqlOperatorTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3123">CALCITE-3123</a>] In <code class="highlighter-rouge">RelBuilder</code>, eliminate duplicate aggregate calls</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3116">CALCITE-3116</a>] Upgrade to Avatica 1.15</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2744">CALCITE-2744</a>] <code class="highlighter-rouge">RelDecorrelator</code> use wrong output map for <code class="highlighter-rouge">LogicalAggregate</code> decorrelate (godfreyhe and Danny Chan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2804">CALCITE-2804</a>] Fix casting to timestamps in Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3107">CALCITE-3107</a>] Upgrade commons-dbcp2 from 2.5.0 to 2.6.0 (Fokko Driesprong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3106">CALCITE-3106</a>] Upgrade commons-pool2 from 2.6.0 to 2.6.2 (Fokko Driesprong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2944">CALCITE-2944</a>] Deprecate Aggregate indicator and remove fields where possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3098">CALCITE-3098</a>] Upgrade SQLLine to 1.8.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2742">CALCITE-2742</a>] Read values of <code class="highlighter-rouge">USER</code> and <code class="highlighter-rouge">SYSTEM_USER</code> variables from <code class="highlighter-rouge">DataContext</code> (Siddharth Teotia, Jacques Nadeau)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3082">CALCITE-3082</a>] Fix NPE in <code class="highlighter-rouge">SqlUtil#getSelectListItem</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3093">CALCITE-3093</a>] Remove JDBC connection calls from <code class="highlighter-rouge">PlannerImpl</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3095">CALCITE-3095</a>] Add several system properties to control enabling/disabling of rules and traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2696">CALCITE-2696</a>] Improve design of join-like relational expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3097">CALCITE-3097</a>] GROUPING SETS breaks on sets of size &gt; 1 due to precedence issues (Steven Talbot)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3022">CALCITE-3022</a>] Babel: Various SQL parsing issues</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3047">CALCITE-3047</a>] In JDBC adapter, expose multiple schemas of the back-end database</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3048">CALCITE-3048</a>] Improve how JDBC adapter deduces current schema on Redshift</li>
<li>Javadoc typos (Wenhui Tang, Muhammad Gelbana)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3096">CALCITE-3096</a>] In <code class="highlighter-rouge">RelBuilder</code>, make alias method idempotent</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3055">CALCITE-3055</a>] Use pair of <code class="highlighter-rouge">relNode</code>’s <code class="highlighter-rouge">rowType</code> and digest as unique key for cache in <code class="highlighter-rouge">RelOptPlanner</code> (KazydubB)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3077">CALCITE-3077</a>] Rewrite <code class="highlighter-rouge">CUBE</code>&amp;<code class="highlighter-rouge">ROLLUP</code> queries in <code class="highlighter-rouge">SparkSqlDialect</code> (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3090">CALCITE-3090</a>] Remove Central configuration</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2807">CALCITE-2807</a>] Fix <code class="highlighter-rouge">IS NOT DISTINCT FROM</code> expression identification in <code class="highlighter-rouge">RelOptUtil#pushDownJoinConditions</code>()</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3050">CALCITE-3050</a>] Integrate <code class="highlighter-rouge">SqlDialect</code> and <code class="highlighter-rouge">SqlParser.Config</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3023">CALCITE-3023</a>] Upgrade elastic search to 7.x (Takako Shimamoto)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3067">CALCITE-3067</a>] Splunk adapter cannot parse right session keys from Splunk 7.2 (Shawn Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3076">CALCITE-3076</a>] <code class="highlighter-rouge">AggregateJoinTransposeRule</code> throws error for unique under aggregate keys when generating merged calls</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3068">CALCITE-3068</a>] <code class="highlighter-rouge">testSubprogram()</code> does not test whether subprogram gets re-executed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3072">CALCITE-3072</a>] Generate right SQL for <code class="highlighter-rouge">FLOOR&amp;SUBSTRING</code> functions in <code class="highlighter-rouge">SparkSqlDialect</code> (DonnyZone)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3074">CALCITE-3074</a>] Move MySQL’s JSON operators to <code class="highlighter-rouge">SqlLibraryOperators</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3062">CALCITE-3062</a>] Do not populate <code class="highlighter-rouge">provenanceMap</code> if not debug</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2282">CALCITE-2282</a>] Remove sql operator table from parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3052">CALCITE-3052</a>] Error while applying rule <code class="highlighter-rouge">MaterializedViewAggregateRule</code>(Project-Aggregate): <code class="highlighter-rouge">ArrayIndexOutOfBoundsException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3066">CALCITE-3066</a>] <code class="highlighter-rouge">RelToSqlConverter</code> may incorrectly throw an <code class="highlighter-rouge">AssertionError</code> for some decimal literals</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3028">CALCITE-3028</a>] Support FULL OUTER JOIN with <code class="highlighter-rouge">AggregateJoinTransposeRule</code> (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3017">CALCITE-3017</a>] Improve null handling of <code class="highlighter-rouge">JsonValueExpressionOperator</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2936">CALCITE-2936</a>] Simplify EXISTS or NOT EXISTS sub-query that has “GROUP BY ()”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2803">CALCITE-2803</a>] <code class="highlighter-rouge">ProjectTransposeJoinRule</code> messes INDF expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3061">CALCITE-3061</a>] Query with WITH clause fails when alias is the same as the table with rolled up column</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3017">CALCITE-3017</a>] Re-organize how we represent built-in operators that are not in the standard operator table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3056">CALCITE-3056</a>] Elasticsearch adapter. Invalid result with cast function on raw queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3046">CALCITE-3046</a>] <code class="highlighter-rouge">CompileException</code> when inserting casted value of composited user defined type into table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3054">CALCITE-3054</a>] Elasticsearch adapter. Avoid scripting for simple projections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3039">CALCITE-3039</a>] In Interpreter, min() incorrectly returns maximum double value (dijkspicy)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3049">CALCITE-3049</a>] When simplifying “IS NULL” and “IS NOT NULL”, simplify the operand first</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3003">CALCITE-3003</a>] <code class="highlighter-rouge">AssertionError</code> when GROUP BY nested field (Will Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3012">CALCITE-3012</a>] Column uniqueness metadata provider may return wrong result for <code class="highlighter-rouge">FULL OUTER JOIN</code> operator (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3045">CALCITE-3045</a>] <code class="highlighter-rouge">NullPointerException</code> when casting null literal to composite user defined type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3030">CALCITE-3030</a>] <code class="highlighter-rouge">SqlParseException</code> when using component identifier for setting in merge statements (Danny Chan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3029">CALCITE-3029</a>] Java-oriented field type is wrongly forced to be NOT NULL after being converted to SQL-oriented</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2292">CALCITE-2292</a>] Query result is wrong when table is implemented with <code class="highlighter-rouge">FilterableTable</code> and the sql has multiple where conditions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2998">CALCITE-2998</a>] <code class="highlighter-rouge">RexCopier</code> should support all rex types (Chunwei Lei, Alexander Shilov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2982">CALCITE-2982</a>] <code class="highlighter-rouge">SqlItemOperator</code> should throw understandable exception message for incorrect operand type (pengzhiwei)</li>
<li>Revert “[<a href="https://issues.apache.org/jira/browse/CALCITE-3021">CALCITE-3021</a>] <code class="highlighter-rouge">ArrayEqualityComparer</code> should use <code class="highlighter-rouge">Arrays#deepEquals</code>/<code class="highlighter-rouge">deepHashCode</code> instead of <code class="highlighter-rouge">Arrays#equals</code>/<code class="highlighter-rouge">hashCode</code> (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3021">CALCITE-3021</a>] <code class="highlighter-rouge">ArrayEqualityComparer</code> should use <code class="highlighter-rouge">Arrays#deepEquals</code>/<code class="highlighter-rouge">deepHashCode</code> instead of <code class="highlighter-rouge">Arrays#equals</code>/<code class="highlighter-rouge">hashCode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2453">CALCITE-2453</a>] Parse list of SQL statements separated with a semicolon (Chunwei Lei, charbel yazbeck)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3004">CALCITE-3004</a>] <code class="highlighter-rouge">RexOver</code> is incorrectly pushed down in <code class="highlighter-rouge">ProjectSetOpTransposeRule</code> and <code class="highlighter-rouge">ProjectCorrelateTransposeRule</code> (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3001">CALCITE-3001</a>] Upgrade to Apache Druid 0.14.0-incubating</li>
<li>Following [<a href="https://issues.apache.org/jira/browse/CALCITE-3010">CALCITE-3010</a>], remove redundant non-reserved keyword definitions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2993">CALCITE-2993</a>] <code class="highlighter-rouge">ParseException</code> may be thrown for legal SQL queries due to incorrect “LOOKAHEAD(1)” hints</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3010">CALCITE-3010</a>] In SQL parser, move <code class="highlighter-rouge">JsonValueExpression</code> into Expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3009">CALCITE-3009</a>] <code class="highlighter-rouge">DiffRepository</code> should ensure that XML resource file does not contain duplicate test names</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2986">CALCITE-2986</a>] Wrong results with <code class="highlighter-rouge">= ANY</code> sub-query (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2962">CALCITE-2962</a>] <code class="highlighter-rouge">RelStructuredTypeFlattener</code> generates wrong types for nested column when <code class="highlighter-rouge">flattenProjection</code> (Will Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3007">CALCITE-3007</a>] Type mismatch for <code class="highlighter-rouge">ANY</code> sub-query in project (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2865">CALCITE-2865</a>] <code class="highlighter-rouge">FilterProjectTransposeRule</code> generates wrong <code class="highlighter-rouge">traitSet</code> when <code class="highlighter-rouge">copyFilter</code>/<code class="highlighter-rouge">Project</code> is true (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2343">CALCITE-2343</a>] <code class="highlighter-rouge">PushProjector</code> with OVER expression causes infinite loop (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2994">CALCITE-2994</a>] Least restrictive type among structs does not consider nullability</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2991">CALCITE-2991</a>] <code class="highlighter-rouge">getMaxRowCount</code> should return 1 for an Aggregate with constant keys (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1338">CALCITE-1338</a>] <code class="highlighter-rouge">JoinProjectTransposeRule</code> should not pull a literal up through the null-generating side of a join (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2977">CALCITE-2977</a>] Exception is not thrown when there are ambiguous field in select list</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2739">CALCITE-2739</a>] NPE is thrown if the DEFINE statement contains IN in <code class="highlighter-rouge">MATCH_RECOGNIZE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-896">CALCITE-896</a>] Remove Aggregate if grouping columns are unique and all functions are splittable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2456">CALCITE-2456</a>] <code class="highlighter-rouge">VolcanoRuleCall</code> doesn’t match unordered child operand when the operand is not the first operand. <code class="highlighter-rouge">PruneEmptyRules</code> <code class="highlighter-rouge">UNION</code> and <code class="highlighter-rouge">MINUS</code> with empty inputs cause infinite cycle. (Zuozhi Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2847">CALCITE-2847</a>] Optimize global LOOKAHEAD for SQL parsers</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2976">CALCITE-2976</a>] Improve materialized view rewriting coverage with disjunctive predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2954">CALCITE-2954</a>] <code class="highlighter-rouge">SubQueryJoinRemoveRule</code> and <code class="highlighter-rouge">SubQueryProjectRemoveRule</code> passing on empty set instead of set of correlation id (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2930">CALCITE-2930</a>] <code class="highlighter-rouge">IllegalStateException</code> when <code class="highlighter-rouge">FilterCorrelateRule</code> matches a SEMI or ANTI Correlate (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2004">CALCITE-2004</a>] Push join predicate down into inner relation for lateral join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2820">CALCITE-2820</a>] Avoid reducing certain aggregate functions when it is not necessary (Siddharth Teotia)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2928">CALCITE-2928</a>] When resolving user-defined functions (UDFs), use the case-sensitivity of the current connection (Danny Chan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2900">CALCITE-2900</a>] <code class="highlighter-rouge">RelStructuredTypeFlattener</code> generates wrong types on nested columns (Will Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2941">CALCITE-2941</a>] <code class="highlighter-rouge">EnumerableLimitRule</code> on Sort with no collation creates <code class="highlighter-rouge">EnumerableLimit</code> with wrong <code class="highlighter-rouge">traitSet</code> and <code class="highlighter-rouge">cluster</code> (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2909">CALCITE-2909</a>] Optimize Enumerable <code class="highlighter-rouge">SemiJoin</code> with lazy computation of <code class="highlighter-rouge">innerLookup</code> (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2903">CALCITE-2903</a>] Exception thrown when decorrelating query with <code class="highlighter-rouge">TEMPORAL TABLE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2958">CALCITE-2958</a>] Upgrade SQLLine to 1.7.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2796">CALCITE-2796</a>] JDBC adapter fix for <code class="highlighter-rouge">ROLLUP</code> on MySQL 5</li>
<li>In <code class="highlighter-rouge">RelFieldCollation</code>, add a <code class="highlighter-rouge">withX</code> copy method</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2953">CALCITE-2953</a>] <code class="highlighter-rouge">LatticeTest.testTileAlgorithm2</code> and <code class="highlighter-rouge">LatticeTest.testTileAlgorithm3</code> fail intermittently</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-574">CALCITE-574</a>] Remove <code class="highlighter-rouge">org.apache.calcite.util.Bug.CALCITE_461_FIXED</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2951">CALCITE-2951</a>] Support decorrelating a sub-query that has aggregate with grouping sets (Haisheng Yuan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2946">CALCITE-2946</a>] <code class="highlighter-rouge">RelBuilder</code> wrongly skips creation of Aggregate that prunes columns if input produces one row at most</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2942">CALCITE-2943</a>] Materialized view rewriting logic calls <code class="highlighter-rouge">getApplicableMaterializations</code> each time the rule is triggered</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2942">CALCITE-2942</a>] Materialized view rewriting logic instantiates <code class="highlighter-rouge">RelMetadataQuery</code> each time the rule is triggered</li>
</ul>
<h4 id="build-1-20-0">Build and test suite</h4>
<ul>
<li>Fix test exception caused by slightly different error message from regex in JDK 13</li>
<li>Following [<a href="https://issues.apache.org/jira/browse/CALCITE-2812">CALCITE-2812</a>] Disable parallel execution of parameterized test to avoid hanging</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-35">CALCITE-35</a>] More test cases to guard against providing a broken fix for parenthesized join (Muhammad Gelbana)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3034">CALCITE-3034</a>] CSV test case description does not match it’s code logic (FaxianZhao)</li>
<li>Mongo adapter. Mongo checker validates only first line of the Bson query in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3053">CALCITE-3053</a>] Add a test to ensure that all functions are documented in the SQL reference</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2961">CALCITE-2961</a>] Enable Travis to test against JDK 13</li>
</ul>
<h4 id="site-1-20-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2952">CALCITE-2952</a>] Document JDK 12 support</li>
<li>Site: Add Danny Chan as committer</li>
<li>Site: Improve contribution guidelines for JIRA</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2846">CALCITE-2846</a>] Document Oracle-specific functions, such as <code class="highlighter-rouge">NVL</code> and <code class="highlighter-rouge">LTRIM</code>, in the SQL reference</li>
<li>Site: Add new committers and PMC (Chunwei Lei, Ruben Quesada Lopez, Zhiwei Peng and Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-3006">CALCITE-3006</a>] Example code on site cannot compile (Chunwei Lei)</li>
<li>Site: Add guidelines for JIRA’s fix version field</li>
<li>Site: Update content of “Not implemented” since JSON_LENGH has already been added</li>
<li>Site: Improve documentation for MySQL-specific JSON operators</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2927">CALCITE-2927</a>] The Javadoc and implement of <code class="highlighter-rouge">RuleQueue.computeImportance()</code> is inconsistent (Meng Wang)</li>
<li>Update instructions for publishing site; we previously used subversion, now we use git</li>
<li>Site: Add Alibaba MaxCompute to powered-by page</li>
<li>Site: Add new committers (Haisheng Yuan, Hongze Zhang and Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2952">CALCITE-2952</a>] Add JDK 12 as tested to 1.19.0 history</li>
</ul>
<h2 id="v1-19-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.19.0">1.19.0</a> / 2019-03-25</h2>
<p>This release comes three months after 1.18.0. It includes more than 80 resolved
issues, comprising of a few new features as well as general improvements
and bug-fixes. Among others, there have been significant improvements in JSON
query support.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11, 12 and OpenJDK 8, 9, 10, 11, 12;
Guava versions 19.0 to 27.1-jre;
Druid version 0.11.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-19-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1912">CALCITE-1912</a>]
Support <code class="highlighter-rouge">FOR SYSTEM_TIME AS OF</code> in regular queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2786">CALCITE-2786</a>]
Add order by clause support for <code class="highlighter-rouge">JSON_ARRAYAGG</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2791">CALCITE-2791</a>]
Add the <code class="highlighter-rouge">JSON_TYPE</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2864">CALCITE-2864</a>]
Add the <code class="highlighter-rouge">JSON_DEPTH</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2881">CALCITE-2881</a>]
Add the <code class="highlighter-rouge">JSON_PRETTY</code> function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2770">CALCITE-2770</a>]
Add bitwise aggregate functions <code class="highlighter-rouge">BIT_AND</code>, <code class="highlighter-rouge">BIT_OR</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2799">CALCITE-2799</a>]
Allow alias in <code class="highlighter-rouge">HAVING</code> clause for aggregate functions</li>
</ul>
<h4 id="fixes-1-19-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1513">CALCITE-1513</a>]
Correlated <code class="highlighter-rouge">NOT IN</code> query throws <code class="highlighter-rouge">AssertionError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1726">CALCITE-1726</a>]
Sub-query in <code class="highlighter-rouge">FILTER</code> is left untransformed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2249">CALCITE-2249</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> generates non-equivalent nodes if <code class="highlighter-rouge">Aggregate</code>
contains a <code class="highlighter-rouge">DISTINCT</code> aggregate function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2288">CALCITE-2288</a>]
Type assertion error when reducing partially-constant expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2290">CALCITE-2290</a>]
Type mismatch during flattening</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2301">CALCITE-2301</a>]
JDBC adapter: use query timeout from the top-level statement</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2338">CALCITE-2338</a>]
Make simplification API more conservative</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2344">CALCITE-2344</a>]
Avoid inferring <code class="highlighter-rouge">$0 = null</code> predicate from <code class="highlighter-rouge">$0 IS NULL</code> when <code class="highlighter-rouge">$0</code> is not
nullable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2375">CALCITE-2375</a>]
<code class="highlighter-rouge">EnumerableDefaults.join_()</code> leaks connections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2437">CALCITE-2437</a>]
<code class="highlighter-rouge">FilterMultiJoinMergeRule</code> doesn’t combine postFilterCondition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2454">CALCITE-2454</a>]
Avoid treating <code class="highlighter-rouge">Project(x=1)</code> and <code class="highlighter-rouge">Project(x=1)</code> equal when the type of <code class="highlighter-rouge">1</code> is
<code class="highlighter-rouge">int</code> in the first rel and <code class="highlighter-rouge">long</code> in the second</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2463">CALCITE-2463</a>]
Silence ERROR logs from <code class="highlighter-rouge">CalciteException</code>, <code class="highlighter-rouge">SqlValidatorException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2464">CALCITE-2464</a>]
Allow to set nullability for columns of structured types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2471">CALCITE-2471</a>]
<code class="highlighter-rouge">RelNode</code> description includes all tree when recomputed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2554">CALCITE-2554</a>]
Enrich enumerable join operators with order-preserving information</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2582">CALCITE-2582</a>]
<code class="highlighter-rouge">FilterProjectTransposeRule</code> does not always simplify the new filter condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2599">CALCITE-2599</a>]
Support <code class="highlighter-rouge">ASCII(string)</code> in <code class="highlighter-rouge">SqlFunctions</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2621">CALCITE-2621</a>]
Add rule to execute semi-joins with correlation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2623">CALCITE-2623</a>]
Add specific translation for <code class="highlighter-rouge">POSITION</code>, <code class="highlighter-rouge">MOD</code> and set operators in BigQuery
and Hive SQL dialects</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2625">CALCITE-2625</a>]
<code class="highlighter-rouge">ROW_NUMBER</code>, <code class="highlighter-rouge">RANK</code> generating invalid SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2629">CALCITE-2629</a>]
Unnecessary call to <code class="highlighter-rouge">CatalogReader#getAllSchemaObjects</code> in <code class="highlighter-rouge">CatalogScope</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2635">CALCITE-2635</a>]
<code class="highlighter-rouge">getMonotonocity</code> is slow on wide tables</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2674">CALCITE-2674</a>]
<code class="highlighter-rouge">SqlIdentifier</code> same name with built-in function but with escape character
should be still resolved as an identifier</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2677">CALCITE-2677</a>]
Struct types with one field are not mapped correctly to Java classes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2703">CALCITE-2703</a>]
Reduce code generation and class loading overhead when executing queries in
<code class="highlighter-rouge">EnumerableConvention</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2722">CALCITE-2722</a>]
<code class="highlighter-rouge">SqlImplementor.createLeftCall</code> method throws <code class="highlighter-rouge">StackOverflowError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2727">CALCITE-2727</a>]
Materialized view rewriting bails out incorrectly when a view does not contain
any table reference</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2733">CALCITE-2733</a>]
Use <code class="highlighter-rouge">catalog</code> and <code class="highlighter-rouge">schema</code> from JDBC connect string to retrieve tables if specified</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2750">CALCITE-2750</a>]
<code class="highlighter-rouge">PI</code> operator is incorrectly identified as dynamic function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2755">CALCITE-2755</a>]
Expose document <code class="highlighter-rouge">_id</code> field when querying ElasticSearch</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2762">CALCITE-2762</a>]
Quidem env variable is always false if its name is separated by dot(“.”)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2778">CALCITE-2778</a>]
Remove <code class="highlighter-rouge">ClosableAllocation</code>, <code class="highlighter-rouge">ClosableAllocationOwner</code>,
<code class="highlighter-rouge">CompoundClosableAllocation</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2782">CALCITE-2782</a>]
Use server time zone by default if time zone is not specified in the user connection string</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2783">CALCITE-2783</a>]
“COALESCE(s, TRUE) = TRUE” and “(s OR s IS UNKNOWN) = TRUE” causes
<code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2785">CALCITE-2785</a>]
In <code class="highlighter-rouge">EnumerableAggregate</code>, wrong result produced If there are sorted aggregates
and non-sorted aggregates at the same time</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2787">CALCITE-2787</a>]
JSON aggregate calls with different null clause get incorrectly merged while
converting from SQL to relational algebra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2790">CALCITE-2790</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> incorrectly pushes down distinct count into join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2797">CALCITE-2797</a>]
Support <code class="highlighter-rouge">APPROX_COUNT_DISTINCT</code> aggregate function in ElasticSearch</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2798">CALCITE-2798</a>]
Optimizer should remove <code class="highlighter-rouge">ORDER BY</code> in sub-query, provided it has no <code class="highlighter-rouge">LIMIT</code> or
<code class="highlighter-rouge">OFFSET</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2802">CALCITE-2802</a>]
In Druid adapter, use of range conditions like <code class="highlighter-rouge">'2010-01-01' &lt; TIMESTAMP</code> leads
to incorrect results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2805">CALCITE-2805</a>]
Can’t specify port with Cassandra adapter in connection string</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2806">CALCITE-2806</a>]
Cassandra adapter doesn’t allow uppercase characters in table names</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2811">CALCITE-2811</a>]
Update version of Cassandra driver</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2814">CALCITE-2814</a>]
In ElasticSearch adapter, fix <code class="highlighter-rouge">GROUP BY</code> when using raw item access
(e.g. <code class="highlighter-rouge">_MAP*</code> [‘a.b.c’])</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2817">CALCITE-2817</a>]
Make <code class="highlighter-rouge">CannotPlanException</code> more informative</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2827">CALCITE-2827</a>]
Allow <code class="highlighter-rouge">CONVENTION.NONE</code> planning with <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2838">CALCITE-2838</a>]
Simplification: Remove redundant <code class="highlighter-rouge">IS TRUE</code> checks</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2839">CALCITE-2839</a>]
Simplify comparisons against <code class="highlighter-rouge">BOOLEAN</code> literals</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2840">CALCITE-2840</a>]
<code class="highlighter-rouge">RexNode</code> simplification logic should use more specific <code class="highlighter-rouge">UnknownAs</code> modes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2841">CALCITE-2841</a>]
Simplification: push negation into Case expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2842">CALCITE-2842</a>]
Computing <code class="highlighter-rouge">RexCall</code> digest containing <code class="highlighter-rouge">IN</code> expressions leads to exceptions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2848">CALCITE-2848</a>]
Simplifying a CASE statement's first branch should ignore its safety</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2850">CALCITE-2850</a>]
Geode adapter: support <code class="highlighter-rouge">BOOLEAN</code> column as filter operand</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2852">CALCITE-2852</a>]
RexNode simplification does not traverse unknown functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2856">CALCITE-2856</a>]
Emulating <code class="highlighter-rouge">COMMA JOIN</code> as <code class="highlighter-rouge">CROSS JOIN</code> for <code class="highlighter-rouge">SparkSqlDialect</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2858">CALCITE-2858</a>]
Improvements in JSON writer and reader for plans</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2859">CALCITE-2859</a>]
Centralize Calcite system properties</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2863">CALCITE-2863</a>]
In ElasticSearch adapter, query fails when filtering directly on <code class="highlighter-rouge">_MAP</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2887">CALCITE-2887</a>]
Improve performance of <code class="highlighter-rouge">RexLiteral.toJavaString()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2897">CALCITE-2897</a>]
Reduce expensive calls to <code class="highlighter-rouge">Class.getSimpleName()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2899">CALCITE-2899</a>]
Deprecate <code class="highlighter-rouge">RelTraitPropagationVisitor</code> and remove its usages</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2890">CALCITE-2890</a>]
In ElasticSearch adapter, combine <code class="highlighter-rouge">any_value</code> with other aggregation functions
failed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2891">CALCITE-2891</a>]
Alias suggester failed to suggest name based on original name incrementally</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2894">CALCITE-2894</a>]
<code class="highlighter-rouge">RelMdPercentageOriginalRows</code> throws <code class="highlighter-rouge">NullPointerException</code> when explaining
plan with all attributes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2902">CALCITE-2902</a>]
Improve performance of <code class="highlighter-rouge">AbstractRelNode.computeDigest()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2929">CALCITE-2929</a>]
Simplification of <code class="highlighter-rouge">IS NULL</code> checks are incorrectly assuming that <code class="highlighter-rouge">CAST</code>s are
possible</li>
<li>Improve Graphviz dump in <code class="highlighter-rouge">CannotPlanException</code>: make boxes shorter, print
composite traits if they were simplified</li>
<li>Make <code class="highlighter-rouge">SparkHandlerImpl</code> singleton thread-safe</li>
<li>Remove usage of <code class="highlighter-rouge">userConfig</code> attribute in ElasticSearch adapter</li>
<li>In ElasticSearch adapter, remove dead (or unnecessary) code</li>
</ul>
<h4 id="build-1-19-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2732">CALCITE-2732</a>]
Upgrade PostgreSQL driver version</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2759">CALCITE-2759</a>]
Update <code class="highlighter-rouge">maven-remote-resources-plugin</code> to 1.6.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2765">CALCITE-2765</a>]
Bump Janino compiler dependency to 3.0.11</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2768">CALCITE-2768</a>]
<code class="highlighter-rouge">PlannerTest</code> ignores top-level <code class="highlighter-rouge">ORDER BY</code> clause (<code class="highlighter-rouge">RootRel.collation</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2788">CALCITE-2788</a>]
Building error for sub-project of calcite on <code class="highlighter-rouge">maven-checkstyle-plugin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2779">CALCITE-2779</a>]
Remove references to <code class="highlighter-rouge">StringBuffer</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2875">CALCITE-2875</a>]
Some misspellings in <code class="highlighter-rouge">RelOptListener</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2895">CALCITE-2895</a>]
Some arguments are undocumented in constructor of <code class="highlighter-rouge">LogicalAggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2836">CALCITE-2836</a>]
Remove <code class="highlighter-rouge">maven-compiler-plugin</code> from <code class="highlighter-rouge">calcite-plus</code> module <code class="highlighter-rouge">pom.xml</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2878">CALCITE-2878</a>]
Avoid <code class="highlighter-rouge">throw new RuntimeException(e)</code> in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2916">CALCITE-2916</a>]
Upgrade jackson to 2.9.8</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2925">CALCITE-2925</a>]
Exclude <code class="highlighter-rouge">maven-wrapper.jar</code> from source distribution</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2931">CALCITE-2931</a>]
In Mongo adapter, compare Bson (not string) query representation in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2932">CALCITE-2932</a>]
<code class="highlighter-rouge">DruidAdapterIT</code> regression after 1.17 release</li>
<li>Improve messages for tests based on <code class="highlighter-rouge">CalciteAssert</code>
</li>
<li>Add JUnit category for extremely slow tests, launch them in a separate Travis job</li>
<li>Fix sqlline by removing redundant slf4j dependency (<code class="highlighter-rouge">log4j-over-slf4j</code>) from
<code class="highlighter-rouge">cassandra-all</code>
</li>
</ul>
<h4 id="site-1-19-0">Web site and documentation</h4>
<ul>
<li>Switch from <code class="highlighter-rouge">maven:alpine</code> to <code class="highlighter-rouge">maven</code> image for generating javadoc when
building the site</li>
<li>Update instructions for pushing to the git site repository</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2734">CALCITE-2734</a>]
Site: Update mongo documentation to reflect filename changes</li>
<li>Site: Add commit message guidelines for contributors (Stamatis Zampetakis)</li>
<li>Site: Add Zoltan Haindrich as committer</li>
<li>Site: Elastic query example on <code class="highlighter-rouge">_MAP</code>
</li>
<li>Site: fix JSON syntax error at file adapter page (Marc Prud’hommeaux)</li>
<li>Site: fix typo at the main page (Marc Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2436">CALCITE-2436</a>]
Steps for building site under Windows; fix misprint in SQL Language page</li>
<li>Site: News item for release 1.18</li>
<li>Site: Rename MapD to OmniSci, and update logos</li>
<li>Update site for new repository</li>
<li>Update git URL</li>
<li>Site: ElasticAdapter mention supported versions (and support schedule)</li>
<li>Site: Improve documentation for ElasticSearch Adapter</li>
<li>Site: Update PMC chair</li>
<li>Update year in NOTICE</li>
</ul>
<h2 id="v1-18-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.18.0">1.18.0</a> / 2018-12-21</h2>
<p>With over 200 commits from 36 contributors, this is the largest
Calcite release ever. To the SQL dialect, we added
<a href="https://issues.apache.org/jira/browse/CALCITE-2266">JSON
functions</a> and
<a href="https://issues.apache.org/jira/browse/CALCITE-2402">linear
regression functions</a>, the
<a href="https://issues.apache.org/jira/browse/CALCITE-2224">WITHIN
GROUP</a> clause for aggregate functions; there is a new
<a href="https://issues.apache.org/jira/browse/CALCITE-1870">utility
to recommend lattices based on past queries</a>,
and improvements to expression simplification, the SQL advisor,
and the Elasticsearch and Apache Geode adapters.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10, 11 and OpenJDK 10, 11;
Guava versions 19.0 to 27.0.1-jre;
Druid version 0.11.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-18-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2662">CALCITE-2662</a>]
In <code class="highlighter-rouge">Planner</code>, allow parsing a stream (<code class="highlighter-rouge">Reader</code>) instead of a <code class="highlighter-rouge">String</code>
(Enrico Olivelli)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2699">CALCITE-2699</a>]
<code class="highlighter-rouge">TIMESTAMPADD</code> function now applies to <code class="highlighter-rouge">DATE</code> and <code class="highlighter-rouge">TIME</code> as well as <code class="highlighter-rouge">TIMESTAMP</code>
(xuqianjin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-563">CALCITE-563</a>]
In JDBC adapter, push bindable parameters down to the underlying JDBC data
source (Vladimir Sitnikov, Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2663">CALCITE-2663</a>]
In DDL parser, add <code class="highlighter-rouge">CREATE</code> and <code class="highlighter-rouge">DROP FUNCTION</code> (ambition119)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2266">CALCITE-2266</a>]
Implement SQL:2016 JSON functions: <code class="highlighter-rouge">JSON_EXISTS</code>, <code class="highlighter-rouge">JSON_VALUE</code>, <code class="highlighter-rouge">JSON_QUERY</code>,
<code class="highlighter-rouge">JSON_OBJECT</code>, <code class="highlighter-rouge">JSON_OBJECTAGG</code>, <code class="highlighter-rouge">JSON_ARRAY</code>, <code class="highlighter-rouge">JSON_ARRAYAGG</code>, <code class="highlighter-rouge">x IS JSON</code>
predicate (Hongze Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2224">CALCITE-2224</a>]
Support <code class="highlighter-rouge">WITHIN GROUP</code> clause for aggregate functions (Hongze Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2405">CALCITE-2405</a>]
In Babel parser, make 400 reserved keywords including <code class="highlighter-rouge">YEAR</code>, <code class="highlighter-rouge">SECOND</code>, <code class="highlighter-rouge">DESC</code>
non-reserved</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1870">CALCITE-1870</a>]
Lattice suggester</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2571">CALCITE-2571</a>]
<code class="highlighter-rouge">TRIM</code> function now trims more than one character (Andrew Pilloud)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2112">CALCITE-2112</a>]
Add Maven wrapper for Calcite (Ratandeep S. Ratti)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1026">CALCITE-1026</a>]
Allow models in YAML format</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2402">CALCITE-2402</a>]
Implement regression functions: <code class="highlighter-rouge">COVAR_POP</code>, <code class="highlighter-rouge">COVAR_SAMP</code>, <code class="highlighter-rouge">REGR_COUNT</code>,
<code class="highlighter-rouge">REGR_SXX</code>, <code class="highlighter-rouge">REGR_SYY</code>
</li>
<li>SQL advisor (<code class="highlighter-rouge">SqlAdvisor</code>):
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2479">CALCITE-2479</a>]
Automatically quote identifiers that look like SQL keywords</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2478">CALCITE-2478</a>]
Purge <code class="highlighter-rouge">from_clause</code> when <code class="highlighter-rouge">_suggest_</code> token is located in one of the
<code class="highlighter-rouge">FROM</code> sub-queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2477">CALCITE-2477</a>]
Scalar sub-queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2476">CALCITE-2476</a>]
Produce hints when sub-query with <code class="highlighter-rouge">*</code> is present in query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2475">CALCITE-2475</a>]
Support <code class="highlighter-rouge">MINUS</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2473">CALCITE-2473</a>]
Support <code class="highlighter-rouge">--</code> comments</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2434">CALCITE-2434</a>]
Hints for nested tables and schemas</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2433">CALCITE-2433</a>]
Configurable quoting characters</li>
</ul>
</li>
<li>Relational algebra builder (<code class="highlighter-rouge">RelBuilder</code>):
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2661">CALCITE-2661</a>]
Add methods for creating <code class="highlighter-rouge">Exchange</code> and <code class="highlighter-rouge">SortExchange</code>
relational expressions (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2654">CALCITE-2654</a>]
Add a fluent API for building complex aggregate calls</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2441">CALCITE-2441</a>]
<code class="highlighter-rouge">RelBuilder.scan</code> should expand <code class="highlighter-rouge">TranslatableTable</code> and views</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2647">CALCITE-2647</a>]
Add a <code class="highlighter-rouge">groupKey</code> method that assumes only one grouping set</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2470">CALCITE-2470</a>]
<code class="highlighter-rouge">project</code> method should combine expressions if the underlying
node is a <code class="highlighter-rouge">Project</code>
</li>
</ul>
</li>
<li>Elasticsearch adapter:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2679">CALCITE-2679</a>]
Implement <code class="highlighter-rouge">DISTINCT</code> and <code class="highlighter-rouge">GROUP BY</code> without aggregate functions (Siyuan Liu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2689">CALCITE-2689</a>]
Allow grouping on non-textual fields like <code class="highlighter-rouge">DATE</code> and <code class="highlighter-rouge">NUMBER</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2651">CALCITE-2651</a>]
Enable scrolling for basic search queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2585">CALCITE-2585</a>]
Support <code class="highlighter-rouge">NOT</code> operator</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2578">CALCITE-2578</a>]
Support <code class="highlighter-rouge">ANY_VALUE</code> aggregate function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2528">CALCITE-2528</a>]
Support <code class="highlighter-rouge">Aggregate</code> (Andrei Sereda)</li>
</ul>
</li>
<li>Apache Geode adapter:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2709">CALCITE-2709</a>]
Allow filtering on <code class="highlighter-rouge">DATE</code>, <code class="highlighter-rouge">TIME</code>, <code class="highlighter-rouge">TIMESTAMP</code> fields (Sandeep Chada)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2671">CALCITE-2671</a>]
<code class="highlighter-rouge">GeodeFilter</code> now converts multiple <code class="highlighter-rouge">OR</code> predicates (on same attribute) into
a single <code class="highlighter-rouge">IN SET</code> (Sandeep Chada)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2498">CALCITE-2498</a>]
Geode adapter wrongly quotes <code class="highlighter-rouge">BOOLEAN</code> values as strings (Andrei Sereda)</li>
</ul>
</li>
</ul>
<h4 id="fixes-1-18-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2670">CALCITE-2670</a>]
Combine similar JSON aggregate functions in operator table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2468">CALCITE-2468</a>]
Validator throws <code class="highlighter-rouge">IndexOutOfBoundsException</code> when trying to infer operand type
from <code class="highlighter-rouge">STRUCT</code> return type (Rong Rong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2596">CALCITE-2596</a>]
When translating correlated variables in enumerable convention, convert
not-null boxed primitive values to primitive (Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2684">CALCITE-2684</a>]
<code class="highlighter-rouge">RexBuilder</code> gives <code class="highlighter-rouge">AssertionError</code> when creating integer literal larger than
2<sup>63</sup> (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2719">CALCITE-2719</a>]
In JDBC adapter for MySQL, fix cast to <code class="highlighter-rouge">INTEGER</code> and <code class="highlighter-rouge">BIGINT</code> (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2713">CALCITE-2713</a>]
JDBC adapter may generate casts on PostgreSQL for <code class="highlighter-rouge">VARCHAR</code> type exceeding max
length</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2529">CALCITE-2529</a>]
All numbers are in the same type family (Andrew Pilloud)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2701">CALCITE-2701</a>]
Make generated <code class="highlighter-rouge">Baz</code> classes immutable (Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2619">CALCITE-2619</a>]
Reduce string literal creation cost by deferring and caching charset
conversion (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2720">CALCITE-2720</a>]
<code class="highlighter-rouge">RelMetadataQuery.getTableOrigin</code> throws <code class="highlighter-rouge">IndexOutOfBoundsException</code> if
<code class="highlighter-rouge">RelNode</code> has no columns (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2717">CALCITE-2717</a>]
Use <code class="highlighter-rouge">Interner</code> instead of <code class="highlighter-rouge">LoadingCache</code> to cache traits, and so allow traits
to be garbage-collected (Haisheng Yuan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2542">CALCITE-2542</a>]
In SQL parser, allow <code class="highlighter-rouge">.field</code> to follow any expression, not just tables and
columns (Rong Rong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2637">CALCITE-2637</a>]
In SQL parser, allow prefix ‘-‘ between <code class="highlighter-rouge">BETWEEN</code> and <code class="highlighter-rouge">AND</code> (Qi Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2632">CALCITE-2632</a>]
Ensure that <code class="highlighter-rouge">RexNode</code> and its sub-classes implement <code class="highlighter-rouge">hashCode</code> and <code class="highlighter-rouge">equals</code>
methods (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2494">CALCITE-2494</a>]
<code class="highlighter-rouge">RexFieldAccess</code> should implement <code class="highlighter-rouge">equals</code> and <code class="highlighter-rouge">hashCode</code> methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2715">CALCITE-2715</a>]
In JDBC adapter, do not generate character set in data types for MS SQL Server
(Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2714">CALCITE-2714</a>]
Make <code class="highlighter-rouge">BasicSqlType</code> immutable, and now <code class="highlighter-rouge">SqlTypeFactory.createWithNullability</code>
can reuse existing type if possible (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2687">CALCITE-2687</a>]
<code class="highlighter-rouge">IS DISTINCT FROM</code> could lead to exceptions in <code class="highlighter-rouge">ReduceExpressionsRule</code>
(Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2673">CALCITE-2673</a>]
<code class="highlighter-rouge">SqlDialect</code> supports pushing of all functions by default</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2675">CALCITE-2675</a>]
Type validation error as <code class="highlighter-rouge">ReduceExpressionsRule</code> fails to preserve type
nullability (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2669">CALCITE-2669</a>]
<code class="highlighter-rouge">RelMdTableReferences</code> should check whether references inferred from input are
null for <code class="highlighter-rouge">Union</code>/<code class="highlighter-rouge">Join</code> operators</li>
<li>Following
[<a href="https://issues.apache.org/jira/browse/CALCITE-2031">CALCITE-2031</a>]
remove incorrect “Not implemented” message</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2668">CALCITE-2668</a>]
Support for left/right outer join in <code class="highlighter-rouge">RelMdExpressionLineage</code>
</li>
<li>Fix invocation of deprecated constructor of <code class="highlighter-rouge">SqlAggFunction</code> (Hongze Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2652">CALCITE-2652</a>]
<code class="highlighter-rouge">SqlNode</code> to SQL conversion fails if the join condition references a <code class="highlighter-rouge">BOOLEAN</code>
column (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2657">CALCITE-2657</a>]
In <code class="highlighter-rouge">RexShuttle</code>, use <code class="highlighter-rouge">RexCall.clone</code> instead of <code class="highlighter-rouge">new RexCall</code> (Chunwei Lei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2605">CALCITE-2605</a>]
Support semi-join via <code class="highlighter-rouge">EnumerableCorrelate</code> (Ruben Quesada Lopez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2605">CALCITE-2605</a>]
Support left outer join via <code class="highlighter-rouge">EnumerableCorrelate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1174">CALCITE-1174</a>]
When generating SQL, translate <code class="highlighter-rouge">SUM0(x)</code> to <code class="highlighter-rouge">COALESCE(SUM(x), 0)</code>
</li>
<li><code class="highlighter-rouge">RelBuilder.toString()</code></li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2617">CALCITE-2617</a>]
Add a variant of <code class="highlighter-rouge">FilterProjectTransposeRule</code> that can push down a <code class="highlighter-rouge">Filter</code>
that contains correlated variables (Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2638">CALCITE-2638</a>]
Constant reducer should not treat as constant an <code class="highlighter-rouge">RexInputRef</code> that points to a
call to a dynamic or non-deterministic function (Danny Chan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2628">CALCITE-2628</a>]
JDBC adapter throws <code class="highlighter-rouge">NullPointerException</code> while generating <code class="highlighter-rouge">GROUP BY</code> query
for MySQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2404">CALCITE-2404</a>]
Implement access to structured-types in enumerable runtime
(Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2622">CALCITE-2622</a>]
<code class="highlighter-rouge">RexFieldCollation.toString()</code> method is not deterministic</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2611">CALCITE-2611</a>]
Linq4j code generation failure if one side of an <code class="highlighter-rouge">OR</code> contains <code class="highlighter-rouge">UNKNOWN</code>
(Zoltan Haindrich)</li>
<li>Canonize simple cases for composite traits in trait factory</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2591">CALCITE-2591</a>]
<code class="highlighter-rouge">EnumerableDefaults#mergeJoin</code> should throw error and not return incorrect
results when inputs are not ordered (Enrico Olivelli)</li>
<li>Test case for
[<a href="https://issues.apache.org/jira/browse/CALCITE-2592">CALCITE-2592</a>]
<code class="highlighter-rouge">EnumerableMergeJoin</code> is never taken</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2526">CALCITE-2526</a>]
Add test for <code class="highlighter-rouge">OR</code> with nullable comparisons (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2413">CALCITE-2413</a>]
Use raw signatures for classes with generics when producing Java code</li>
<li>In Elasticsearch adapter, remove redundant null check in
<code class="highlighter-rouge">CompoundQueryExpression</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2562">CALCITE-2562</a>]
Remove dead code in <code class="highlighter-rouge">StandardConvertletTable#convertDatetimeMinus</code>
</li>
<li>Avoid <code class="highlighter-rouge">NullPointerException</code> when <code class="highlighter-rouge">FlatList</code> contains null elements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2561">CALCITE-2561</a>]
Remove dead code in <code class="highlighter-rouge">Lattice</code> constructor</li>
<li>Apply small refactorings to Calcite codebase (Java 5, Java 7, Java 8)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2572">CALCITE-2572</a>]
SQL standard semantics for <code class="highlighter-rouge">SUBSTRING</code> function (Andrew Pilloud)</li>
<li>Remove dead code: <code class="highlighter-rouge">Compatible</code>, <code class="highlighter-rouge">CompatibleGuava11</code>
</li>
<li>Remove “Now, do something with table” from standard output when implementing
sequences</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2444">CALCITE-2444</a>]
Handle <code class="highlighter-rouge">IN</code> expressions when converting <code class="highlighter-rouge">SqlNode</code> to SQL (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2537">CALCITE-2537</a>]
Use litmus for <code class="highlighter-rouge">VolcanoPlanner#validate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2546">CALCITE-2546</a>]
Reduce precision of <code class="highlighter-rouge">Profiler</code>’s <code class="highlighter-rouge">surprise</code> and <code class="highlighter-rouge">cardinality</code> attributes to
avoid floating point discrepancies (Alisha Prabhu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2563">CALCITE-2563</a>]
Materialized view rewriting may swap columns in equivalent classes incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2551">CALCITE-2551</a>]
<code class="highlighter-rouge">SqlToRelConverter</code> gives <code class="highlighter-rouge">ClassCastException</code> while handling <code class="highlighter-rouge">IN</code> inside
<code class="highlighter-rouge">WHERE NOT CASE</code> (pengzhiwei)</li>
<li>Remove redundant <code class="highlighter-rouge">new</code> expression in constant array creation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2474">CALCITE-2474</a>]
SqlAdvisor: avoid NPE in lookupFromHints where FROM is empty</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2418">CALCITE-2418</a>]
Remove <code class="highlighter-rouge">matchRecognize</code> field of <code class="highlighter-rouge">SqlSelect</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2514">CALCITE-2514</a>]
Add <code class="highlighter-rouge">SqlIdentifier</code> conversion to <code class="highlighter-rouge">ITEM</code> operator for dynamic tables in
<code class="highlighter-rouge">ExtendedExpander</code> (Arina Ielchiieva)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2491">CALCITE-2491</a>]
Refactor <code class="highlighter-rouge">NameSet</code>, <code class="highlighter-rouge">NameMap</code>, and <code class="highlighter-rouge">NameMultimap</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2520">CALCITE-2520</a>]
Make <code class="highlighter-rouge">SparkHandlerImpl#compile</code> silent by default, print code in
<code class="highlighter-rouge">calcite.debug=true</code> mode only</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1026">CALCITE-1026</a>]
Remove unused import</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2483">CALCITE-2483</a>]
Druid adapter, when querying Druid segment metadata, throws when row number is
larger than <code class="highlighter-rouge">Integer.MAX_VALUE</code> (Hongze Zhang)</li>
<li>Support <code class="highlighter-rouge">AND</code>, <code class="highlighter-rouge">OR</code>, <code class="highlighter-rouge">COALESCE</code>, <code class="highlighter-rouge">IS [NOT] DISTINCT</code> in <code class="highlighter-rouge">RexUtil#op</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2495">CALCITE-2495</a>]
Support encoded URLs in <code class="highlighter-rouge">org.apache.calcite.util.Source</code>, and use it for URL
→ File conversion in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2271">CALCITE-2271</a>]
Join of two views with window aggregates produces incorrect results or throws
<code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2481">CALCITE-2481</a>]
<code class="highlighter-rouge">NameSet</code> assumes lower-case characters have greater codes, which does not hold
for certain characters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2480">CALCITE-2480</a>]
<code class="highlighter-rouge">NameSet.contains</code> wrongly returns <code class="highlighter-rouge">false</code> when element in set is upper-case
and <code class="highlighter-rouge">seek</code> is lower-case</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2465">CALCITE-2465</a>]
Enable use of materialized views for any planner</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2446">CALCITE-2446</a>]
Lateral joins do not work when saved as custom views (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2447">CALCITE-2447</a>]
<code class="highlighter-rouge">POWER</code>, <code class="highlighter-rouge">ATAN2</code> functions fail with <code class="highlighter-rouge">NoSuchMethodException</code>
</li>
<li>Typo in <code class="highlighter-rouge">HepPlanner</code> trace message (Dylan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2416">CALCITE-2416</a>]
<code class="highlighter-rouge">AssertionError</code> when determining monotonicity (Alina Ipatina)</li>
<li>Java 8: use <code class="highlighter-rouge">Map.computeIfAbsent</code> when possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2431">CALCITE-2431</a>]
<code class="highlighter-rouge">SqlUtil.getAncestry</code> throws <code class="highlighter-rouge">AssertionError</code> when providing completion hints
for sub-schema</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2430">CALCITE-2430</a>]
<code class="highlighter-rouge">RelDataTypeImpl.getFieldList</code> throws <code class="highlighter-rouge">AssertionError</code> when SQL Advisor inspects
non-struct field</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2429">CALCITE-2429</a>]
<code class="highlighter-rouge">SqlValidatorImpl.lookupFieldNamespace</code> throws <code class="highlighter-rouge">NullPointerException</code> when SQL
Advisor observes non-existing field</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2422">CALCITE-2422</a>]
Query with unnest of column from nested sub-query fails when dynamic table is
used</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2417">CALCITE-2417</a>]
<code class="highlighter-rouge">RelToSqlConverter</code> throws <code class="highlighter-rouge">ClassCastException</code> with structs (Benoit Hanotte)</li>
<li>Upgrades:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2716">CALCITE-2716</a>]
Upgrade to Avatica 1.13.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2711">CALCITE-2711</a>]
Upgrade SQLLine to 1.6.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2570">CALCITE-2570</a>]
Upgrade <code class="highlighter-rouge">forbiddenapis</code> to 2.6 for JDK 11 support</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2486">CALCITE-2486</a>]
Upgrade Apache parent POM to version 21</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2467">CALCITE-2467</a>]
Upgrade <code class="highlighter-rouge">owasp-dependency-check</code> maven plugin to 3.3.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2559">CALCITE-2559</a>]
Update Checkstyle to 7.8.2</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2497">CALCITE-2497</a>]
Update Janino version to 3.0.9</li>
</ul>
</li>
<li>Expression simplification (<code class="highlighter-rouge">RexSimplify</code>):
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2731">CALCITE-2731</a>]
<code class="highlighter-rouge">RexProgramBuilder</code> makes unsafe simplifications to <code class="highlighter-rouge">CASE</code> expressions (Zoltan
Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2730">CALCITE-2730</a>]
<code class="highlighter-rouge">RelBuilder</code> incorrectly simplifies a <code class="highlighter-rouge">Filter</code> with duplicate conjunction to
empty (Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2726">CALCITE-2726</a>]
<code class="highlighter-rouge">ReduceExpressionRule</code> may oversimplify filter conditions containing <code class="highlighter-rouge">NULL</code>
values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2695">CALCITE-2695</a>]
Simplify casts that are only widening nullability (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2631">CALCITE-2631</a>]
General improvements in simplifying <code class="highlighter-rouge">CASE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2639">CALCITE-2639</a>]
<code class="highlighter-rouge">FilterReduceExpressionsRule</code> causes <code class="highlighter-rouge">ArithmeticException</code> at execution time</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2620">CALCITE-2620</a>]
Simplify <code class="highlighter-rouge">COALESCE(NULL, x)</code><code class="highlighter-rouge">x</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1413">CALCITE-1413</a>]
Enhance boolean case statement simplifications (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2615">CALCITE-2615</a>]
When simplifying <code class="highlighter-rouge">NOT-AND-OR</code>, <code class="highlighter-rouge">RexSimplify</code> incorrectly applies predicates
deduced for operands to the same operands (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2604">CALCITE-2604</a>]
When simplifying an expression, say whether an <code class="highlighter-rouge">UNKNOWN</code> value will be
interpreted as is, or as <code class="highlighter-rouge">TRUE</code> or <code class="highlighter-rouge">FALSE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2438">CALCITE-2438</a>]
Fix wrong results for <code class="highlighter-rouge">IS NOT FALSE(FALSE)</code> (zhiwei.pzw) (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2506">CALCITE-2506</a>]
Simplifying <code class="highlighter-rouge">COALESCE(+ nullInt, +vInt())</code> results in
<code class="highlighter-rouge">AssertionError: result mismatch</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2580">CALCITE-2580</a>]
Simplifying <code class="highlighter-rouge">COALESCE(NULL &gt; NULL, TRUE)</code> produces wrong result filter
expressions (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2586">CALCITE-2586</a>]
<code class="highlighter-rouge">CASE</code> with repeated branches gives <code class="highlighter-rouge">AssertionError</code>
(pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2590">CALCITE-2590</a>]
Remove redundant <code class="highlighter-rouge">CAST</code> when operand has exactly the same type as it is casted to</li>
<li>Implement fuzzy generator for <code class="highlighter-rouge">CASE</code> expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2556">CALCITE-2556</a>]
Simplify <code class="highlighter-rouge">NOT TRUE</code><code class="highlighter-rouge">FALSE</code>, and <code class="highlighter-rouge">NOT FALSE</code><code class="highlighter-rouge">TRUE</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2581">CALCITE-2581</a>]
Avoid errors in simplifying <code class="highlighter-rouge">UNKNOWN AND NOT (UNKNOWN OR ...)</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2527">CALCITE-2527</a>]
Simplify <code class="highlighter-rouge">(c IS NULL) OR (c IS ...)</code> might result in AssertionError: result
mismatch (pengzhiwei)</li>
<li>Display random failure of Rex fuzzer in build logs to inspire further fixes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2567">CALCITE-2567</a>]
Simplify <code class="highlighter-rouge">IS NULL(NULL)</code> to <code class="highlighter-rouge">TRUE</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2555">CALCITE-2555</a>]
RexSimplify: Simplify <code class="highlighter-rouge">x &gt;= NULL</code> to <code class="highlighter-rouge">UNKNOWN</code> (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2504">CALCITE-2504</a>]
Add randomized test for better code coverage of rex node create and
simplification</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2469">CALCITE-2469</a>]
Simplify <code class="highlighter-rouge">(NOT x) IS NULL</code><code class="highlighter-rouge">x IS NULL</code> (pengzhiwei);
also, simplify <code class="highlighter-rouge">f(x, y) IS NULL</code><code class="highlighter-rouge">x IS NULL OR y IS NULL</code> if <code class="highlighter-rouge">f</code> is a
strong operator</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2327">CALCITE-2327</a>]
Simplify <code class="highlighter-rouge">AND(x, y, NOT(y))</code><code class="highlighter-rouge">AND(x, null, IS NULL(y))</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2327">CALCITE-2327</a>]
Avoid simplification of <code class="highlighter-rouge">x AND NOT(x)</code> to <code class="highlighter-rouge">FALSE</code> for nullable <code class="highlighter-rouge">x</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2505">CALCITE-2505</a>]
<code class="highlighter-rouge">AssertionError</code> when simplifying <code class="highlighter-rouge">IS [NOT] DISTINCT</code> expressions
(Haisheng Yuan)</li>
</ul>
</li>
</ul>
<h4 id="build-1-18-0">Build and test suite</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2678">CALCITE-2678</a>]
<code class="highlighter-rouge">RelBuilderTest#testRelBuilderToString</code> fails on Windows (Stamatis Zampetakis)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2660">CALCITE-2660</a>]
<code class="highlighter-rouge">OsAdapterTest</code> now checks whether required commands are available</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2655">CALCITE-2655</a>]
Enable Travis to test against JDK 12</li>
<li>Ensure that tests are not calling <code class="highlighter-rouge">checkSimplify3</code> with <code class="highlighter-rouge">expected</code>,
<code class="highlighter-rouge">expectedFalse</code>, <code class="highlighter-rouge">expectedTrue</code> all the same</li>
<li>Geode adapter tests: Removed unnecessary <code class="highlighter-rouge">try/final</code> block in <code class="highlighter-rouge">RefCountPolicy</code>
</li>
<li>Add license to <code class="highlighter-rouge">TestKtTest</code> and add <code class="highlighter-rouge">apache-rat:check</code> to Travis CI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2112">CALCITE-2112</a>]
Add Apache license header to <code class="highlighter-rouge">maven-wrapper.properties</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2588">CALCITE-2588</a>]
Run Geode adapter tests with an embedded instance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2594">CALCITE-2594</a>]
Ensure <code class="highlighter-rouge">forbiddenapis</code> and <code class="highlighter-rouge">maven-compiler</code> use the correct JDK version</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2642">CALCITE-2642</a>]
Checkstyle complains that <code class="highlighter-rouge">maven-wrapper.properties</code> is missing a header</li>
<li>
<code class="highlighter-rouge">commons:commons-pool2</code> is used in tests only, so use <code class="highlighter-rouge">scope=test</code> for it</li>
<li>Make <code class="highlighter-rouge">findbugs:jsr305</code> dependency optional</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2458">CALCITE-2458</a>]
Add Kotlin as a test dependency</li>
<li>Make build scripts Maven 3.3 compatible</li>
<li>Fix JavaDoc warnings for Java 9+, and check JavaDoc in Travis CI</li>
<li>Unwrap invocation target exception from QuidemTest#test</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2518">CALCITE-2518</a>]
Add <code class="highlighter-rouge">failOnWarnings</code> to <code class="highlighter-rouge">maven-javadoc-plugin</code> configuration</li>
<li>Silence Pig, Spark, and Elasticsearch logs in tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1894">CALCITE-1894</a>]
<code class="highlighter-rouge">CsvTest.testCsvStream</code> failing often: add <code class="highlighter-rouge">@Ignore</code> since the test is known to
fail</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2535">CALCITE-2535</a>]
Enable <code class="highlighter-rouge">SqlTester.checkFails</code> (previously it was a no-op) (Hongze Zhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2558">CALCITE-2558</a>]
Improve re-compilation times by skipping <code class="highlighter-rouge">parser.java</code> update on each build</li>
<li>Increase timeout for Cassandra daemon startup for <code class="highlighter-rouge">CassandraAdapterTest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2412">CALCITE-2412</a>]
Add Windows CI via AppVeyor (Sergey Nuyanzin)</li>
<li>Reduce <code class="highlighter-rouge">HepPlannerTest#testRuleApplyCount</code> complexity</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2523">CALCITE-2523</a>]
Guard <code class="highlighter-rouge">PartiallyOrderedSetTest#testPosetBitsLarge</code> with
<code class="highlighter-rouge">CalciteAssert.ENABLE_SLOW</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2521">CALCITE-2521</a>]
Guard <code class="highlighter-rouge">RelMetadataTest#testMetadataHandlerCacheLimit</code> with
<code class="highlighter-rouge">CalciteAssert.ENABLE_SLOW</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2484">CALCITE-2484</a>]
Add <code class="highlighter-rouge">SqlValidatorDynamicTest</code> to <code class="highlighter-rouge">CalciteSuite</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2484">CALCITE-2484</a>]
Move dynamic tests to a separate class like <code class="highlighter-rouge">SqlValidatorDynamicTest</code>, and
avoid reuse of <code class="highlighter-rouge">MockCatalogReaderDynamic</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2522">CALCITE-2522</a>]
Remove <code class="highlighter-rouge">e.printStackTrace()</code> from <code class="highlighter-rouge">CalciteAssert#returns</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2512">CALCITE-2512</a>]
Move <code class="highlighter-rouge">StreamTest#ROW_GENERATOR</code> to <code class="highlighter-rouge">Table.scan().iterator</code> to make it not
shared between threads (Sergey Nuyanzin)</li>
<li>Skip second Checkstyle execution during Travis CI build</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2519">CALCITE-2519</a>]
Silence ERROR logs from <code class="highlighter-rouge">CalciteException</code>, <code class="highlighter-rouge">SqlValidatorException</code> during
tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1026">CALCITE-1026</a>]
Fix <code class="highlighter-rouge">ModelTest#testYamlFileDetection</code> when source folder has spaces</li>
<li>
<code class="highlighter-rouge">MockCatalogReader</code> is used in testing, so cache should be disabled there to
avoid thread conflicts and/or stale results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-311">CALCITE-311</a>]
Add a test-case for Filter after Window aggregate</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2462">CALCITE-2462</a>]
<code class="highlighter-rouge">RexProgramTest</code>: replace <code class="highlighter-rouge">nullLiteral</code><code class="highlighter-rouge">nullInt</code>,
<code class="highlighter-rouge">unknownLiteral</code><code class="highlighter-rouge">nullBool</code> for brevity</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2462">CALCITE-2462</a>]
<code class="highlighter-rouge">RexProgramTest</code>: move “rex building” methods to base class</li>
<li>
<code class="highlighter-rouge">SqlTestFactory</code>: use lazy initialization of objects</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2435">CALCITE-2435</a>]
Refactor <code class="highlighter-rouge">SqlTestFactory</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2428">CALCITE-2428</a>]
Cassandra unit test fails to parse JDK version string (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2419">CALCITE-2419</a>]
Use embedded Cassandra for tests</li>
</ul>
<h4 id="site-1-18-0">Web site and documentation</h4>
<ul>
<li>Add geospatial category to DOAP file</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2577">CALCITE-2577</a>]
Update links on download page to HTTPS</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2574">CALCITE-2574</a>]
Update download page to include instructions for verifying a downloaded
artifact</li>
<li>Update build status badges in <code class="highlighter-rouge">README.md</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2705">CALCITE-2705</a>]
Site: Remove duplicate “selectivity” in list of metadata types (Alan Jin)</li>
<li>Site: Add Andrei Sereda as committer</li>
<li>Site: Update Julian Hyde’s affiliation</li>
<li>Update Michael Mior’s affiliation</li>
<li>Site: Add instructions for updating PRs based on the discussion in the dev
list (Stamatis Zampetakis)</li>
<li>Site: Add committer Sergey Nuyanzin</li>
<li>Site: News item for release 1.17.0</li>
</ul>
<h2 id="v1-17-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.17.0">1.17.0</a> / 2018-07-16</h2>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10;
Guava versions 19.0 to 23.0;
Druid version 0.11.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<p>This release comes four months after 1.16.0. It includes more than 90 resolved
issues, comprising a large number of new features as well as general improvements
and bug-fixes. Among others:</p>
<p>Implemented <a href="https://issues.apache.org/jira/browse/CALCITE-2280">Babel SQL parser</a>
that accepts all SQL dialects.
Allowed <a href="https://issues.apache.org/jira/browse/CALCITE-2261">JDK 8 language level</a> for core module.
Calcite has been upgraded to use <a href="https://issues.apache.org/jira/browse/CALCITE-2365">Avatica 1.12.0</a></p>
<h4 id="new-features-1-17-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-873">CALCITE-873</a>]
Add a planner rule, <code class="highlighter-rouge">SortRemoveConstantKeysRule</code>, that removes constant keys from Sort (Atri Sharma)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2045">CALCITE-2045</a>]
<code class="highlighter-rouge">CREATE TYPE</code> (Shuyi Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2216">CALCITE-2216</a>]
Improve extensibility of <code class="highlighter-rouge">AggregateReduceFunctionsRule</code> (Fabian Hueske)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2227">CALCITE-2227</a>]
Standards-compliant column ordering for <code class="highlighter-rouge">NATURAL JOIN</code> and <code class="highlighter-rouge">JOIN USING</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2280">CALCITE-2280</a>]
Babel SQL parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2286">CALCITE-2286</a>]
Support timestamp type for Druid adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2304">CALCITE-2304</a>]
In Babel parser, allow Hive-style syntax <code class="highlighter-rouge">LEFT SEMI JOIN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2321">CALCITE-2321</a>]
A union of <code class="highlighter-rouge">CHAR</code> columns of different lengths can now (based on a conformance setting) yield a <code class="highlighter-rouge">VARCHAR</code> column (Hequn Cheng)</li>
</ul>
<h4 id="fixes-1-17-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-531">CALCITE-531</a>]
<code class="highlighter-rouge">LATERAL</code> combined with window function or table function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1167">CALCITE-1167</a>]
<code class="highlighter-rouge">OVERLAPS</code> should match even if operands are in (high, low) order</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1436">CALCITE-1436</a>]
Support <code class="highlighter-rouge">MIN</code>/<code class="highlighter-rouge">MAX</code> functions (Muhammad Gelbana)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1866">CALCITE-1866</a>]
JDBC adapter generates incorrect code when pushing <code class="highlighter-rouge">FLOOR</code> to MySQL (Kang Wang, Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1916">CALCITE-1916</a>]
Use Teradata’s TPC-DS generator and run tests against TPC-DS at small scale</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1949">CALCITE-1949</a>]
<code class="highlighter-rouge">CalciteStatement</code> should call <code class="highlighter-rouge">AvaticaStatement</code> close_(), to avoid memory leak (Kevin Risden)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2053">CALCITE-2053</a>]
Resolve Java user-defined functions that have <code class="highlighter-rouge">Double</code> and <code class="highlighter-rouge">BigDecimal</code> arguments (余启)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2063">CALCITE-2063</a>]
Add JDK 10 to <code class="highlighter-rouge">.travis.yml</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2159">CALCITE-2159</a>]
Support dynamic row type in <code class="highlighter-rouge">UNNEST</code> (Chunhui Shi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2164">CALCITE-2164</a>]
Fix alerts raised by lgtm.com (Malcolm Taylor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2188">CALCITE-2188</a>]
JDBC adapter generates invalid SQL for <code class="highlighter-rouge">DATE</code>/<code class="highlighter-rouge">INTERVAL</code> arithmetic (Rahul Raj)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2201">CALCITE-2201</a>]
Pass <code class="highlighter-rouge">RelBuilder</code> into <code class="highlighter-rouge">RelDecorrelator</code> and <code class="highlighter-rouge">RelStructuredTypeFlattener</code> (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2205">CALCITE-2205</a>]
<code class="highlighter-rouge">JoinPushTransitivePredicatesRule</code> should not create <code class="highlighter-rouge">Filter</code> on top of equivalent <code class="highlighter-rouge">Filter</code> (Vitalii Diravka)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2206">CALCITE-2206</a>]
JDBC adapter incorrectly pushes windowed aggregates down to HSQLDB (Pavel Gubin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2220">CALCITE-2220</a>]
<code class="highlighter-rouge">SqlToRelConverter</code> generates incorrect ordinal while flattening a record-valued field (Shuyi Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2222">CALCITE-2222</a>]
Add Quarter timeunit as a valid unit to pushdown to Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2225">CALCITE-2225</a>]
Upgrade Apache parent POM to version 19, and support OpenJDK 10</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2226">CALCITE-2226</a>]
Druid adapter: Substring operator converter does not handle non-constant literals correctly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2229">CALCITE-2229</a>]
Allow sqlsh to be run from path, not just current directory</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2232">CALCITE-2232</a>]
Assertion error on <code class="highlighter-rouge">AggregatePullUpConstantsRule</code> while adjusting <code class="highlighter-rouge">Aggregate</code> indices</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2236">CALCITE-2236</a>]
Druid adapter: Avoid duplication of fields names during Druid query planing</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2237">CALCITE-2237</a>]
Upgrade Maven Surefire plugin to 2.21.0 (Kevin Risden)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2238">CALCITE-2238</a>]
Fix Pig and Spark adapter failures with JDK 10</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2240">CALCITE-2240</a>]
Extend rule to push predicates into <code class="highlighter-rouge">CASE</code> statement (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2242">CALCITE-2242</a>]
Using custom <code class="highlighter-rouge">RelBuilder</code> for <code class="highlighter-rouge">FilterRemoveIsNotDistinctFromRule</code> (Vitalii Diravka)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2247">CALCITE-2247</a>]
Simplify <code class="highlighter-rouge">AND</code> and <code class="highlighter-rouge">OR</code> conditions using predicates (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2253">CALCITE-2253</a>]
Fix matching predicate for <code class="highlighter-rouge">JdbcProjectRule</code> rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2255">CALCITE-2255</a>]
Add JDK 11 to Travis CI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2259">CALCITE-2259</a>]
Allow Java 8 syntax</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2261">CALCITE-2261</a>]
Switch core module to JDK 8 (Enrico Olivelli)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2262">CALCITE-2262</a>]
Druid adapter: Allow count(*) to be pushed when other aggregate functions are present</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2264">CALCITE-2264</a>]
In JDBC adapter, do not push down a call to a user-defined function (UDF) (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2265">CALCITE-2265</a>]
Allow comparison of ROW values (Dylan Adams)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2267">CALCITE-2267</a>]
Thread-safe generation of <code class="highlighter-rouge">AbstractRelNode.id</code> (Zhong Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2275">CALCITE-2275</a>]
Do not push down <code class="highlighter-rouge">NOT</code> condition in <code class="highlighter-rouge">JOIN</code> (Vitalii Diravka)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2276">CALCITE-2276</a>]
Allow explicit <code class="highlighter-rouge">ROW</code> value constructor in <code class="highlighter-rouge">SELECT</code> clause and elsewhere (Danny Chan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2277">CALCITE-2277</a>]
Skip <code class="highlighter-rouge">SemiJoin</code> operator in materialized view-based rewriting algorithm</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2278">CALCITE-2278</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> fails to split aggregate call if input contains an aggregate call and has distinct rows (Haisheng Yuan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2281">CALCITE-2281</a>]
Return type of the <code class="highlighter-rouge">TIMESTAMPADD</code> function has wrong precision (Sudheesh Katkam)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2287">CALCITE-2287</a>]
<code class="highlighter-rouge">FlatList.equals()</code> throws <code class="highlighter-rouge">StackOverflowError</code> (Zhen Wang, Zhong Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2291">CALCITE-2291</a>]
Support Push Project past Correlate (Chunhui Shi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2293">CALCITE-2293</a>]
Upgrade forbidden-apis to 2.5 (for JDK 10)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2299">CALCITE-2299</a>]
<code class="highlighter-rouge">TIMESTAMPADD</code>(<code class="highlighter-rouge">SQL_TSI_FRAC_SECOND</code>) should be nanoseconds (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2303">CALCITE-2303</a>]
In <code class="highlighter-rouge">EXTRACT</code> function, support <code class="highlighter-rouge">MICROSECONDS</code>, <code class="highlighter-rouge">MILLISECONDS</code>, <code class="highlighter-rouge">EPOCH</code>, <code class="highlighter-rouge">ISODOW</code>, <code class="highlighter-rouge">ISOYEAR</code> and <code class="highlighter-rouge">DECADE</code> time units (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2305">CALCITE-2305</a>]
JDBC adapter generates invalid casts on PostgreSQL, because PostgreSQL does not have <code class="highlighter-rouge">TINYINT</code> and <code class="highlighter-rouge">DOUBLE</code> types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2306">CALCITE-2306</a>]
AssertionError in <code class="highlighter-rouge">RexLiteral.getValue3</code> with null literal of type <code class="highlighter-rouge">DECIMAL</code> (Godfrey He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2309">CALCITE-2309</a>]
Dialects: Hive dialect does not support charsets in constants</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2314">CALCITE-2314</a>]
Verify RexNode transformations by evaluating before and after expressions against sample values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2316">CALCITE-2316</a>]
Elasticsearch adapter should not convert queries to lower-case (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2318">CALCITE-2318</a>]
<code class="highlighter-rouge">NumberFormatException</code> while starting SQLLine</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2319">CALCITE-2319</a>]
Set correct dimension type for druid expressions with result type boolean (nsihantmonu51)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2320">CALCITE-2320</a>]
Filtering UDF when converting <code class="highlighter-rouge">Filter</code> to <code class="highlighter-rouge">JDBCFilter</code> (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2323">CALCITE-2323</a>]
Apply “<code class="highlighter-rouge">defaultNullCollation</code>” configuration parameter when translating <code class="highlighter-rouge">ORDER BY</code> inside <code class="highlighter-rouge">OVER</code> (John Fang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2324">CALCITE-2324</a>]
<code class="highlighter-rouge">EXTRACT</code> function: <code class="highlighter-rouge">HOUR</code>, <code class="highlighter-rouge">MINUTE</code> and <code class="highlighter-rouge">SECOND</code> parts of a <code class="highlighter-rouge">DATE</code> must be zero (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2329">CALCITE-2329</a>]
Improve rewrite for “constant IN (sub-query)”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2331">CALCITE-2331</a>]
Evaluation of predicate <code class="highlighter-rouge">(A or B) and C</code> fails for Elasticsearch adapter (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2332">CALCITE-2332</a>]
Wrong simplification of <code class="highlighter-rouge">FLOOR(CEIL(x))</code> to <code class="highlighter-rouge">FLOOR(x)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2333">CALCITE-2333</a>]
Stop releasing zips</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2334">CALCITE-2334</a>]
Extend simplification of expressions with <code class="highlighter-rouge">CEIL</code> function over date types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2341">CALCITE-2341</a>]
Fix <code class="highlighter-rouge">ImmutableBitSetTest</code> for jdk11</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2342">CALCITE-2342</a>]
Fix improper use of assert</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2345">CALCITE-2345</a>]
Running Unit tests with Fongo and integration tests with real mongo instance (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2347">CALCITE-2347</a>]
Running ElasticSearch in embedded mode for unit tests of ES adapter (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2353">CALCITE-2353</a>]
Allow user to override <code class="highlighter-rouge">SqlSetOption</code> (Andrew Pilloud)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2355">CALCITE-2355</a>]
Implement multiset operations (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2357">CALCITE-2357</a>]
Freemarker dependency override issue in fmpp maven plugin (yanghua)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2358">CALCITE-2358</a>]
Use null literal instead of empty string (b-slim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2359">CALCITE-2359</a>]
Inconsistent results casting intervals to integers (James Duong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2364">CALCITE-2364</a>]
Fix timezone issue (in test) between Mongo DB and local JVM (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2365">CALCITE-2365</a>]
Upgrade avatica to 1.12</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2366">CALCITE-2366</a>]
Add support for <code class="highlighter-rouge">ANY_VALUE</code> aggregate function (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2368">CALCITE-2368</a>]
Fix <code class="highlighter-rouge">misc.iq</code> and <code class="highlighter-rouge">scalar.iq</code> quidem unit tests failures on Windows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2369">CALCITE-2369</a>]
Fix <code class="highlighter-rouge">OsAdapterTest</code> failure on windows (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2370">CALCITE-2370</a>]
Fix failing mongo IT tests when explicit order was not specified (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2376">CALCITE-2376</a>]
Unify ES2 and ES5 adapters. Migrate to low-level ES rest client as main transport (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2379">CALCITE-2379</a>]
CVSS dependency-check-maven fails for calcite-spark and calcite-ubenchmark modules</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2380">CALCITE-2380</a>]
Javadoc generation failure in Elasticsearch2 adapter (Andrei Sereda)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2381">CALCITE-2381</a>]
Add information for authenticating against maven repo, GPG keys and version numbers to HOWTO</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2382">CALCITE-2382</a>]
Sub-query join lateral table function (pengzhiwei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2383">CALCITE-2383</a>]
<code class="highlighter-rouge">NTH_VALUE</code> window function (Sergey Nuyanzin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2384">CALCITE-2384</a>]
Performance issue in <code class="highlighter-rouge">getPulledUpPredicates</code> (Zoltan Haindrich)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2387">CALCITE-2387</a>]
Fix for <code class="highlighter-rouge">date</code>/<code class="highlighter-rouge">timestamp</code> cast expressions in Druid adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2388">CALCITE-2388</a>]
Upgrade from <code class="highlighter-rouge">commons-dbcp</code> to <code class="highlighter-rouge">commons-dbcp2</code> version 2.4.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2391">CALCITE-2391</a>]
Aggregate query with <code class="highlighter-rouge">UNNEST</code> or <code class="highlighter-rouge">LATERAL</code> fails with <code class="highlighter-rouge">ClassCastException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2392">CALCITE-2392</a>]
Prevent columns permutation for <code class="highlighter-rouge">NATURAL JOIN</code> and <code class="highlighter-rouge">JOIN USING</code> when dynamic table is used</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2396">CALCITE-2396</a>]
Allow <code class="highlighter-rouge">NULL</code> intervals in <code class="highlighter-rouge">TIMESTAMPADD</code> and <code class="highlighter-rouge">DATETIME_PLUS</code> functions (James Duong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2398">CALCITE-2398</a>]
<code class="highlighter-rouge">SqlSelect</code> must call into <code class="highlighter-rouge">SqlDialect</code> for unparse (James Duong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2403">CALCITE-2403</a>]
Upgrade quidem to 0.9</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2409">CALCITE-2409</a>]
<code class="highlighter-rouge">SparkAdapterTest</code> fails on Windows when ‘/tmp’ directory does not exist
(Sergey Nuyanzin)</li>
</ul>
<h2 id="v1-16-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.16.0">1.16.0</a> / 2018-03-14</h2>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 8, 9, 10;
Guava versions 19.0 to 23.0;
Druid version 0.11.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<p>This release comes three months after 1.15.0. It includes more than 80 resolved
issues, comprising a large number of new features as well as general improvements
and bug-fixes to Calcite core. Among others:</p>
<ul>
<li>Calcite has been upgraded to use
<a href="https://issues.apache.org/jira/browse/CALCITE-2182">Avatica 1.11.0</a>,
which was recently released.</li>
<li>Moreover, a new adapter to
<a href="https://issues.apache.org/jira/browse/CALCITE-2059">read data from Apache Geode</a>
was added in this release. In addition, more progress has been made for the existing adapters,
e.g., the Druid adapter can generate
<a href="https://issues.apache.org/jira/browse/CALCITE-2077"><code class="highlighter-rouge">SCAN</code> queries rather than <code class="highlighter-rouge">SELECT</code> queries</a>
for more efficient execution and it can push
<a href="https://issues.apache.org/jira/browse/CALCITE-2170">more work to Druid using its new expressions capabilities</a>,
and the JDBC adapter now <a href="https://issues.apache.org/jira/browse/CALCITE-2128">supports the SQL dialect used by Jethro Data</a>.</li>
<li>Finally, this release
<a href="https://issues.apache.org/jira/browse/CALCITE-2027">drops support for JDK 1.7</a> and
support for <a href="https://issues.apache.org/jira/browse/CALCITE-2191">Guava versions earlier than 19</a>.</li>
</ul>
<h4 id="new-features-1-16-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1265">CALCITE-1265</a>]
In JDBC adapter, push <code class="highlighter-rouge">OFFSET</code> and <code class="highlighter-rouge">FETCH</code> to data source</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2059">CALCITE-2059</a>]
Apache Geode adapter (Christian Tzolov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2077">CALCITE-2077</a>]
Druid adapter: Use <code class="highlighter-rouge">SCAN</code> query rather than <code class="highlighter-rouge">SELECT</code> query (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2128">CALCITE-2128</a>]
In JDBC adapter, add SQL dialect for Jethro Data (Jonathan Doron)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2170">CALCITE-2170</a>]
Use Druid Expressions capabilities to improve the amount of work that can be pushed to Druid</li>
</ul>
<h4 id="fixes-1-16-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1054">CALCITE-1054</a>]
NPE caused by wrong code generation for Timestamp fields</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1188">CALCITE-1188</a>]
NullPointerException in <code class="highlighter-rouge">EXTRACT</code> with <code class="highlighter-rouge">WHERE ... IN</code> clause if field has null value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1427">CALCITE-1427</a>]
Code generation incorrect (does not compile) for DATE, TIME and TIMESTAMP fields</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1658">CALCITE-1658</a>]
DateRangeRules incorrectly rewrites <code class="highlighter-rouge">EXTRACT</code> calls (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1697">CALCITE-1697</a>]
Update Mongo driver version to 3.5.0 (Vladimir Dolzhenko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2002">CALCITE-2002</a>]
<code class="highlighter-rouge">DISTINCT</code> applied to <code class="highlighter-rouge">VALUES</code> returns wrong result</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2009">CALCITE-2009</a>]
Possible bug in interpreting <code class="highlighter-rouge">( IN ) OR ( IN )</code> logic</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2020">CALCITE-2020</a>]
Upgrade org.incava java-diff</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2027">CALCITE-2027</a>]
Drop support for Java 7 (JDK 1.7)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2034">CALCITE-2034</a>]
<code class="highlighter-rouge">FileReaderTest</code> fails with path containing spaces</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2066">CALCITE-2066</a>]
<code class="highlighter-rouge">RelOptUtil.splitJoinCondition()</code> could not split condition with case after applying <code class="highlighter-rouge">FilterReduceExpressionsRule</code> (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2071">CALCITE-2071</a>]
Query with <code class="highlighter-rouge">IN</code> and <code class="highlighter-rouge">OR</code> in <code class="highlighter-rouge">WHERE</code> clause returns wrong result (Vineet Garg)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2072">CALCITE-2072</a>]
Enable spatial functions by adding ‘fun=spatial’ to JDBC connect string</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2075">CALCITE-2075</a>]
SparkAdapterTest UT fails</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2076">CALCITE-2076</a>]
Upgrade to Druid 0.11.0 (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2080">CALCITE-2080</a>]
Query with <code class="highlighter-rouge">NOT IN</code> operator and literal throws <code class="highlighter-rouge">AssertionError</code>: ‘Cast for just nullability not allowed’ (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2081">CALCITE-2081</a>]
Query with windowed aggregates under both sides of a <code class="highlighter-rouge">JOIN</code> throws <code class="highlighter-rouge">NullPointerException</code> (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2084">CALCITE-2084</a>]
<code class="highlighter-rouge">SqlValidatorImpl.findTable()</code> method incorrectly handles table schema with few schema levels (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2088">CALCITE-2088</a>]
Add more complex end-to-end tests in “plus” module, using Chinook data set (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2089">CALCITE-2089</a>]
Druid adapter: Push filter on <code class="highlighter-rouge">floor(time)</code> to Druid (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2090">CALCITE-2090</a>]
Extend Druid Range Rules to extract interval from Floor (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2091">CALCITE-2091</a>]
Improve DruidQuery cost function, to ensure that <code class="highlighter-rouge">EXTRACT</code> gets pushed as an interval if possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2092">CALCITE-2092</a>]
Allow passing custom <code class="highlighter-rouge">RelBuilder</code> into <code class="highlighter-rouge">SqlToRelConverter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2093">CALCITE-2093</a>]
<code class="highlighter-rouge">OsAdapterTest</code> in Calcite Plus does not respect locale (Piotr Bojko)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2094">CALCITE-2094</a>]
Druid adapter: <code class="highlighter-rouge">Count(*)</code> returns null instead of 0 when condition filters all rows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2095">CALCITE-2095</a>]
Druid adapter: Push always true and always true expressions as Expression Filters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2096">CALCITE-2096</a>]
Druid adapter: Remove extra <code class="highlighter-rouge">dummy_aggregator</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2097">CALCITE-2097</a>]
Druid adapter: Push Aggregate and Filter operators containing metric columns to Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2098">CALCITE-2098</a>]
Push filters to Druid Query Scan when we have <code class="highlighter-rouge">OR</code> of <code class="highlighter-rouge">AND</code> clauses</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2099">CALCITE-2099</a>]
Code generated for <code class="highlighter-rouge">GROUP BY</code> inside <code class="highlighter-rouge">UNION</code> does not compile (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2101">CALCITE-2101</a>]
Druid adapter: Push count(column) using Druid filtered aggregate</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2102">CALCITE-2102</a>]
Ignore duplicate <code class="highlighter-rouge">ORDER BY</code> keys, and ensure RelCollation contains no duplicates (John Fang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2104">CALCITE-2104</a>]
Add separate rules for <code class="highlighter-rouge">AggregateUnionAggregateRule</code> to reduce potential matching cost in <code class="highlighter-rouge">VolcanoPlanner</code> (lincoln-lil)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2105">CALCITE-2105</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> fails when process aggregate without group keys (jingzhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2107">CALCITE-2107</a>]
Timezone not passed as part of granularity when passing <code class="highlighter-rouge">TimeExtractionFunction</code> to Druid (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2108">CALCITE-2108</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> fails when process aggregateCall above <code class="highlighter-rouge">SqlSumEmptyIsZeroAggFunction</code> without groupKeys (jingzhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2110">CALCITE-2110</a>]
<code class="highlighter-rouge">ArrayIndexOutOfBoundsException</code> in RexSimplify when using <code class="highlighter-rouge">ReduceExpressionsRule.JOIN_INSTANCE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2111">CALCITE-2111</a>]
Make HepPlanner more efficient by applying rules depth-first</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2113">CALCITE-2113</a>]
Push column pruning to druid when Aggregate cannot be pushed (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2114">CALCITE-2114</a>]
Re-enable <code class="highlighter-rouge">DruidAggregateFilterTransposeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2116">CALCITE-2116</a>]
The digests are not same for the common sub-expressions in HepPlanner (LeoWangLZ)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2118">CALCITE-2118</a>]
RelToSqlConverter should only generate “*” if field names match (Sam Waggoner)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2122">CALCITE-2122</a>]
In DateRangeRules, make either <code class="highlighter-rouge">TIMESTAMP</code> or <code class="highlighter-rouge">DATE</code> literal, according to target type (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2124">CALCITE-2124</a>]
<code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> should make <code class="highlighter-rouge">SUM</code> nullable if there is no <code class="highlighter-rouge">GROUP BY</code> (Godfrey He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2127">CALCITE-2127</a>]
In Interpreter, allow a node to have more than one consumer</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2133">CALCITE-2133</a>]
Allow SqlGroupedWindowFunction to specify returnTypeInference in its constructor (Shuyi Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2135">CALCITE-2135</a>]
If there is an aggregate function inside an <code class="highlighter-rouge">OVER</code> clause, validator should treat query as an aggregate query (Volodymyr Tkach)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2137">CALCITE-2137</a>]
Materialized view rewriting not being triggered for some join queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2139">CALCITE-2139</a>]
Upgrade checkstyle</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2143">CALCITE-2143</a>]
RelToSqlConverter produces incorrect SQL with aggregation (Sam Waggoner)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2147">CALCITE-2147</a>]
GroupingSets involving rollup resulting into an incorrect plan (Ravindar Munjam)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2154">CALCITE-2154</a>]
Upgrade jackson to 2.9.4</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2156">CALCITE-2156</a>]
In DateRangeRules, compute <code class="highlighter-rouge">FLOOR</code> and <code class="highlighter-rouge">CEIL</code> of <code class="highlighter-rouge">TIMESTAMP WITH LOCAL TIMEZONE</code> in local time zone (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2162">CALCITE-2162</a>]
Exception when accessing sub-field of sub-field of composite Array element (Shuyi Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2178">CALCITE-2178</a>]
Extend expression simplifier to work on datetime <code class="highlighter-rouge">CEIL</code>/<code class="highlighter-rouge">FLOOR</code> functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2179">CALCITE-2179</a>]
General improvements for materialized view rewriting rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2180">CALCITE-2180</a>]
Invalid code generated for negative of byte and short values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2183">CALCITE-2183</a>]
Implement <code class="highlighter-rouge">RelSubset.copy</code> method (Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2185">CALCITE-2185</a>]
Additional unit tests for Spark Adapter (Alessandro Solimando)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2187">CALCITE-2187</a>]
Fix build issue caused by <code class="highlighter-rouge">CALCITE-2170</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2189">CALCITE-2189</a>]
RelMdAllPredicates fast bail out creates mismatch with RelMdTableReferences</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2190">CALCITE-2190</a>]
Extend SubstitutionVisitor.splitFilter to cover different order of operands</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2191">CALCITE-2191</a>]
Drop support for Guava versions earlier than 19</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2192">CALCITE-2192</a>]
RelBuilder wrongly skips creating an Aggregate that prunes columns, if input is unique</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2195">CALCITE-2195</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> fails to aggregate over unique column (Zhong Yu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2196">CALCITE-2196</a>]
Tweak janino code generation to allow debugging (jingzhang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2197">CALCITE-2197</a>]
Test failures on Windows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2200">CALCITE-2200</a>]
Infinite loop for JoinPushTransitivePredicatesRule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2207">CALCITE-2207</a>]
Enforce Java version via maven-enforcer-plugin (Kevin Risden)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2213">CALCITE-2213</a>]
Geode integration tests are failing</li>
</ul>
<h4 id="site-1-16-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2024">CALCITE-2024</a>]
Submit a journal paper on Calcite to VLDB Journal or ACM SIGMOD Record (Edmon Begoli)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2203">CALCITE-2203</a>]
Calcite site redirect links to Avatica broken with jekyll-redirect-from 0.12+ (Kevin Risden)</li>
</ul>
<h2 id="v1-15-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.15.0">1.15.0</a> / 2017-12-11</h2>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 7, 8, 9, 10;
Guava versions 14.0 to 23.0;
Druid version 0.10.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<p>This release comes three months after 1.14.0. It includes than 44 resolved
issues, mostly modest improvements and bug-fixes, but here are some
features of note:</p>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-707">CALCITE-707</a>]
adds <em>DDL commands</em> to Calcite for the first time, including <em>CREATE and DROP
commands for schemas, tables, foreign tables, views, and materialized views</em>.
We know that DDL syntax is a matter of taste, so we added the extensions to a
<em>new “server” module</em>, leaving the “core” parser unchanged;</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2061">CALCITE-2061</a>]
allows <em>dynamic parameters</em> in the <code class="highlighter-rouge">LIMIT</code> and <code class="highlighter-rouge">OFFSET</code> and clauses;</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1913">CALCITE-1913</a>]
refactors the JDBC adapter to make it easier to <em>plug in a new SQL dialect</em>;</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1616">CALCITE-1616</a>]
adds a <em>data profiler</em>, an algorithm that efficiently analyzes large data sets
with many columns, estimating the number of distinct values in columns and
groups of columns, and finding functional dependencies. The improved
statistics are used by the algorithm that designs summary tables for a
lattice.</li>
</ul>
<p>Calcite now supports JDK 10 and Guava 23.0. (It continues to run on
JDK 7, 8 and 9, and on versions of Guava as early as 14.0.1. The default
version of Guava remains 19.0, the latest version compatible with JDK 7
and the Cassandra adapter’s dependencies.)</p>
<p>This is the <a href="https://issues.apache.org/jira/browse/CALCITE-2027">last
release that will support JDK 1.7</a>.</p>
<h4 id="new-features-1-15-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1616">CALCITE-1616</a>]
Data profiler</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2061">CALCITE-2061</a>]
Dynamic parameters in <code class="highlighter-rouge">OFFSET</code>, <code class="highlighter-rouge">FETCH</code> and <code class="highlighter-rouge">LIMIT</code> clauses (Enrico Olivelli)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-707">CALCITE-707</a>]
Add “server” module, with built-in support for simple DDL statements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2041">CALCITE-2041</a>]
When <code class="highlighter-rouge">ReduceExpressionRule</code> simplifies a nullable expression, allow the result
to change type to <code class="highlighter-rouge">NOT NULL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2058">CALCITE-2058</a>]
Support JDK 10</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2016">CALCITE-2016</a>]
Make item + dot operators work for array (e.g. <code class="highlighter-rouge">SELECT orders[5].color FROM t</code>
(Shuyi Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2035">CALCITE-2035</a>]
Allow approximate aggregate functions, and add <code class="highlighter-rouge">APPROX_COUNT_DISTINCT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1990">CALCITE-1990</a>]
Make <code class="highlighter-rouge">RelDistribution</code> extend <code class="highlighter-rouge">RelMultipleTrait</code> (LeoWangLZ)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1867">CALCITE-1867</a>]
Allow user-defined grouped window functions (Timo Walther)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2031">CALCITE-2031</a>]
<code class="highlighter-rouge">ST_X</code> and <code class="highlighter-rouge">ST_Y</code> GIS functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1913">CALCITE-1913</a>]
Pluggable SQL dialects for JDBC adapter: Replace usages of <code class="highlighter-rouge">DatabaseProduct</code>
with dialect methods, and introduce a configurable <code class="highlighter-rouge">SqlDialectFactory</code>
(Christian Beikov)</li>
</ul>
<h4 id="fixes-1-15-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2078">CALCITE-2078</a>]
Aggregate functions in <code class="highlighter-rouge">OVER</code> clause (Liao Xintao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2070">CALCITE-2070</a>]
Git test fails when run from source distro</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1808">CALCITE-1808</a>]
<code class="highlighter-rouge">JaninoRelMetadataProvider</code> loading cache might cause <code class="highlighter-rouge">OutOfMemoryError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2069">CALCITE-2069</a>]
<code class="highlighter-rouge">RexSimplify.removeNullabilityCast()</code> always removes cast for operand with
<code class="highlighter-rouge">ANY</code> type (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2074">CALCITE-2074</a>]
Simplification of point ranges that are open above or below yields wrong
results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2005">CALCITE-2005</a>]
Test failures on Windows</li>
<li>Add <code class="highlighter-rouge">ImmutableBitSet.set(int, boolean)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2054">CALCITE-2054</a>]
Error while validating <code class="highlighter-rouge">UPDATE</code> with dynamic parameter in <code class="highlighter-rouge">SET</code> clause (Enrico
Olivelli)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2055">CALCITE-2055</a>]
Check year, month, day, hour, minute and second ranges for date and time
literals (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2051">CALCITE-2051</a>]
Rules using <code class="highlighter-rouge">Aggregate</code> might check for simple grouping sets incorrectly</li>
<li>Add parameter to <code class="highlighter-rouge">SqlCallBinding.getOperandLiteralValue(int)</code> to specify
desired value type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2039">CALCITE-2039</a>]
<code class="highlighter-rouge">AssertionError</code> when pushing project to <code class="highlighter-rouge">ProjectableFilterableTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2050">CALCITE-2050</a>]
Exception when pushing post-aggregates into Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2043">CALCITE-2043</a>]
Use custom <code class="highlighter-rouge">RelBuilder</code> implementation in some rules (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2044">CALCITE-2044</a>]
Tweak cost of <code class="highlighter-rouge">BindableTableScan</code> to make sure <code class="highlighter-rouge">Project</code> is pushed through
<code class="highlighter-rouge">Aggregate</code> (Luis Fernando Kauer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2012">CALCITE-2012</a>]
Replace <code class="highlighter-rouge">LocalInterval</code> by <code class="highlighter-rouge">Interval</code> in Druid adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1984">CALCITE-1984</a>]
Incorrect rewriting with materialized views using <code class="highlighter-rouge">DISTINCT</code> in aggregate
functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1876">CALCITE-1876</a>]
In CSV example, tweak cost to ensure that <code class="highlighter-rouge">Project</code> is pushed through
<code class="highlighter-rouge">Aggregate</code> (Luis Fernando Kauer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2037">CALCITE-2037</a>]
Modify parser template to allow sub-projects to override <code class="highlighter-rouge">SqlStmt</code> syntax
(Roman Kulyk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2019">CALCITE-2019</a>]
Druid’s time column is NOT NULL, so push <code class="highlighter-rouge">COUNT(druid_time_column)</code> as if it
were <code class="highlighter-rouge">COUNT(*)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2034">CALCITE-2034</a>]
<code class="highlighter-rouge">FileReaderTest</code> fails with path containing spaces (Marc Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2028">CALCITE-2028</a>]
<code class="highlighter-rouge">SubQueryRemoveRule</code> should create <code class="highlighter-rouge">Join</code>, not <code class="highlighter-rouge">Correlate</code>, for un-correlated
sub-queries (Liao Xintao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2029">CALCITE-2029</a>]
Query with <code class="highlighter-rouge">IS DISTINCT FROM</code> condition in <code class="highlighter-rouge">WHERE</code> or <code class="highlighter-rouge">JOIN</code> clause fails with
<code class="highlighter-rouge">AssertionError</code>, “Cast for just nullability not allowed” (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1998">CALCITE-1998</a>]
Hive <code class="highlighter-rouge">ORDER BY</code> null values (Abbas Gadhia)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2014">CALCITE-2014</a>]
Look for <code class="highlighter-rouge">saffron.properties</code> file in classpath rather than in working
directory (Arina Ielchiieva)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1910">CALCITE-1910</a>]
<code class="highlighter-rouge">NullPointerException</code> on filtered aggregators using <code class="highlighter-rouge">IN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1762">CALCITE-1762</a>]
Upgrade to Spark 2.X</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2008">CALCITE-2008</a>]
Fix braces in <code class="highlighter-rouge">TRIM</code> signature</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2007">CALCITE-2007</a>]
Fix <code class="highlighter-rouge">RexSimplify</code> behavior when literals come first</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2006">CALCITE-2006</a>]
Push <code class="highlighter-rouge">IS NULL</code> and <code class="highlighter-rouge">IS NOT NULL</code> predicates to Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1996">CALCITE-1996</a>]
In JDBC adapter, generate correct <code class="highlighter-rouge">VALUES</code> syntax</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2001">CALCITE-2001</a>]
JDBC driver should return “SYSTEM TABLE” rather than “SYSTEM_TABLE”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1995">CALCITE-1995</a>]
Remove terms from <code class="highlighter-rouge">Filter</code> if predicates indicate they are always true or
false</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1983">CALCITE-1983</a>]
Push <code class="highlighter-rouge">=</code>and <code class="highlighter-rouge">&lt;&gt;</code> operations with numeric cast on dimensions to Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1960">CALCITE-1960</a>]
<code class="highlighter-rouge">RelMdPredicates.getPredicates</code> is slow if there are many equivalent columns
(Rheet Wong)</li>
<li>Make Travis CI builds work (Christian Beikov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1987">CALCITE-1987</a>]
Implement <code class="highlighter-rouge">EXTRACT</code> for JDBC (Pavel Gubin)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1988">CALCITE-1988</a>]
Various code quality issues</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1986">CALCITE-1986</a>]
Add <code class="highlighter-rouge">RelBuilder.match</code> and methods for building patterns (Dian Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1980">CALCITE-1980</a>]
<code class="highlighter-rouge">RelBuilder.aggregate</code> should rename underlying fields if <code class="highlighter-rouge">groupKey</code> contains
an alias</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1946">CALCITE-1946</a>]
JDBC adapter should generate sub-<code class="highlighter-rouge">SELECT</code> if dialect does not support nested
aggregate functions (Pawel Ruchaj)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1976">CALCITE-1976</a>]
linq4j: support List and Map literals</li>
</ul>
<h4 id="site-1-15-0">Web site and documentation</h4>
<ul>
<li>Update PMC Chair</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2052">CALCITE-2052</a>]
Remove SQL code style from materialized views documentation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2036">CALCITE-2036</a>]
Fix “next” link in <a href="powered_by.html">powered_by.html</a>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2038">CALCITE-2038</a>]
Fix incomplete sentence in tutorial</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-2021">CALCITE-2021</a>]
Document the interfaces that you can use to extend Calcite</li>
<li>Javadoc fixes (Alexey Roytman)</li>
<li>Add two talks, and committer Christian Beikov</li>
<li>Fix URL in <code class="highlighter-rouge">FileSchemaFactory</code> javadoc (Marc Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1989">CALCITE-1989</a>]
Check dependencies for vulnerabilities each release</li>
</ul>
<h2 id="v1-14-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.14.0">1.14.0</a> / 2017-09-06</h2>
<p>This release brings some big new features.
The <code class="highlighter-rouge">GEOMETRY</code> data type was added along with 35 associated functions as the start of support for Simple Feature Access.
There are also two new adapters.
Firstly, the Elasticsearch 5 adapter which now exists in parallel with the previous Elasticsearch 2 adapter.
Additionally there is now an <a href="/docs/os_adapter.html">OS adapter</a> which exposes operating system metrics as relational tables.
<code class="highlighter-rouge">ThetaSketch</code> and <code class="highlighter-rouge">HyperUnique</code> support has also been added to the Druid adapter.</p>
<p>Several minor improvements are added as well including improved <code class="highlighter-rouge">MATCH_RECOGNIZE</code> support, quantified comparison predicates, and <code class="highlighter-rouge">ARRAY</code> and <code class="highlighter-rouge">MULTISET</code> support for UDFs.
A full list of new features is given below.</p>
<p>There are also a few breaking changes.
The return type of <code class="highlighter-rouge">RANK</code> and other aggregate functions has been changed.
There also changes to <code class="highlighter-rouge">Aggregate</code> in order to improve compatibility with Apache Hive.
Finally, the <code class="highlighter-rouge">Schema#snapshot()</code> interface has been upgraded to allow for more flexible versioning.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 1.7, 1.8, 9;
Guava versions 14.0 to 21.0;
Druid version 0.11.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-14-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1968">CALCITE-1968</a>] OpenGIS Simple Feature Access SQL 1.2.1: add <code class="highlighter-rouge">GEOMETRY</code> data type and first 35 functions
Add Spatial page, document GIS functions in SQL reference (indicating
which ones are implemented), and add “countries” data set for testing.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1967">CALCITE-1967</a>] Elasticsearch 5 adapter (Christian Beikov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1911">CALCITE-1911</a>] In <code class="highlighter-rouge">MATCH_RECOGNIZE</code>, support <code class="highlighter-rouge">WITHIN</code> sub-clause (Dian Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1897">CALCITE-1897</a>] Add ‘%’ operator as an alternative to ‘MOD’ (sunjincheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1787">CALCITE-1787</a>] Add <code class="highlighter-rouge">ThetaSketch</code> and <code class="highlighter-rouge">HyperUnique</code> support to Calcite via rolled up columns (Zain Humayun)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1896">CALCITE-1896</a>] OS adapter and <code class="highlighter-rouge">sqlsh</code>
<ul>
<li>Vmstat table function for sqlsh</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1864">CALCITE-1864</a>] Allow <code class="highlighter-rouge">NULL</code> literal as argument</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1834">CALCITE-1834</a>] Allow user-defined functions to have arguments that are <code class="highlighter-rouge">ARRAY</code> or <code class="highlighter-rouge">MULTISET</code> (Ankit Singhal)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1886">CALCITE-1886</a>] Support <code class="highlighter-rouge">"LIMIT [offset,] row_count"</code>, per MySQL (Kaiwang Chen)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1845">CALCITE-1845</a>] Quantified comparison predicates (SOME, ANY, ALL)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1709">CALCITE-1709</a>] Support mixing table columns with extended columns in DML (Rajeshbabu Chintaguntla)</li>
</ul>
<h4 id="fixes-1-14-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1931">CALCITE-1931</a>]
Change the return type of <code class="highlighter-rouge">RANK</code> and other aggregate functions.
Various aggregate functions that used to return <code class="highlighter-rouge">INTEGER</code> now return other
types: <code class="highlighter-rouge">RANK</code>, <code class="highlighter-rouge">DENSE_RANK</code>, and <code class="highlighter-rouge">NTILE</code> now return <code class="highlighter-rouge">BIGINT</code>;
<code class="highlighter-rouge">CUME_DIST</code> and <code class="highlighter-rouge">PERCENT_RANK</code> now return <code class="highlighter-rouge">DOUBLE</code>.
(<strong>This is a breaking change</strong>.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1947">CALCITE-1947</a>] Add <code class="highlighter-rouge">TIME</code>/<code class="highlighter-rouge">TIMESTAMP</code> with local time zone types to optimizer</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1972">CALCITE-1972</a>] Create <code class="highlighter-rouge">.sha512</code> and <code class="highlighter-rouge">.md5</code> digests for release artifacts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1941">CALCITE-1941</a>] Refine interface <code class="highlighter-rouge">Schema#snapshot()</code>
(<strong>This is a breaking change</strong>.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1069">CALCITE-1069</a>] In <code class="highlighter-rouge">Aggregate</code>, deprecate indicators, and allow <code class="highlighter-rouge">GROUPING</code> to be used as an aggregate function
(<strong>This is a breaking change</strong>.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1969">CALCITE-1969</a>] Annotate user-defined functions as strict and semi-strict</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1945">CALCITE-1945</a>] Make return types of <code class="highlighter-rouge">AVG</code>, <code class="highlighter-rouge">VARIANCE</code>, <code class="highlighter-rouge">STDDEV</code> and <code class="highlighter-rouge">COVAR</code> customizable via RelDataTypeSystem</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1966">CALCITE-1966</a>] Allow normal views to act as materialization table (Christian Beikov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1953">CALCITE-1953</a>] Rewrite <code class="highlighter-rouge">"NOT (x IS FALSE)" to "x IS NOT FALSE"; "x IS TRUE"</code> would be wrong</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1943">CALCITE-1943</a>] Add back <code class="highlighter-rouge">NavigationExpander</code> and <code class="highlighter-rouge">NavigationReplacer</code> in <code class="highlighter-rouge">SqlValidatorImpl</code> (Dian Fu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1963">CALCITE-1963</a>] Upgrade checkstyle, and fix code to comply</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1944">CALCITE-1944</a>] Window function applied to sub-query that returns dynamic star gets wrong plan (Volodymyr Vysotskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1954">CALCITE-1954</a>] Column from outer join should be null, whether or not it is aliased</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1959">CALCITE-1959</a>] Reduce the amount of metadata and <code class="highlighter-rouge">tableName</code> calls in Druid (Zain Humayun)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1930">CALCITE-1930</a>] Fix <code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> when there are multiple <code class="highlighter-rouge">AggregateCalls</code> referring to the same input</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1936">CALCITE-1936</a>] Allow <code class="highlighter-rouge">ROUND()</code> and <code class="highlighter-rouge">TRUNCATE()</code> to take one operand, defaulting scale to 0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1931">CALCITE-1931</a>] Change the return type of RANK and other aggregate functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1932">CALCITE-1932</a>] <code class="highlighter-rouge">Project.getPermutation()</code> should return null if not a permutation (e.g. repeated <code class="highlighter-rouge">InputRef</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1925">CALCITE-1925</a>] In <code class="highlighter-rouge">JaninoRelMetadataProvider</code>, cache null values (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1849">CALCITE-1849</a>] Support <code class="highlighter-rouge">RexSubQuery</code> in <code class="highlighter-rouge">RelToSqlConverter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1909">CALCITE-1909</a>] Output <code class="highlighter-rouge">rowType</code> of Match should include <code class="highlighter-rouge">PARTITION BY</code> and <code class="highlighter-rouge">ORDER BY</code> columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1929">CALCITE-1929</a>] Deprecate class <code class="highlighter-rouge">RelDataTypeFactory.FieldInfoBuilder</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1895">CALCITE-1895</a>] MSSQL’s SUBSTRING operator has different syntax (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1919">CALCITE-1919</a>] <code class="highlighter-rouge">NullPointerException</code> when target in <code class="highlighter-rouge">ReflectiveSchema</code> belongs to root package (Lim Chee Hau)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1907">CALCITE-1907</a>] Table function with 1 column gives <code class="highlighter-rouge">ClassCastException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1841">CALCITE-1841</a>] Create handlers for JDBC dialect-specific generated SQL (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1898">CALCITE-1898</a>] <code class="highlighter-rouge">LIKE</code> must match ‘.’ (period) literally</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1900">CALCITE-1900</a>] Detect cyclic views and give useful error message</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1893">CALCITE-1893</a>] Add MYSQL_5 conformance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1883">CALCITE-1883</a>] <code class="highlighter-rouge">HepPlanner</code> should force garbage collect whenever a root registered (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1889">CALCITE-1889</a>] Accept compound identifiers in <code class="highlighter-rouge">SqlValidatorUtil.checkIdentifierListForDuplicates()</code> (Rajeshbabu Chintaguntla)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1881">CALCITE-1881</a>] Can’t distinguish overloaded user-defined functions that have DATE and TIMESTAMP arguments (余启)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1803">CALCITE-1803</a>] Push Project that follows Aggregate down to Druid (Junxian Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1828">CALCITE-1828</a>] Push the FILTER clause into Druid as a Filtered Aggregator (Zain Humayun)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1871">CALCITE-1871</a>] Nesting <code class="highlighter-rouge">LAST</code> within <code class="highlighter-rouge">PREV</code> is not parsed correctly for <code class="highlighter-rouge">MATCH_RECOGNIZE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1877">CALCITE-1877</a>] Move the Pig test data files into target for the test runtime</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1815">CALCITE-1815</a>] Switch Pig adapter to depend on avatica-core instead of full avatica</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1826">CALCITE-1826</a>] Generate dialect-specific SQL for <code class="highlighter-rouge">FLOOR</code> operator when in a <code class="highlighter-rouge">GROUP BY</code> (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1842">CALCITE-1842</a>] <code class="highlighter-rouge">Sort.computeSelfCost()</code><code class="highlighter-rouge"> calls </code>makeCost()`` with arguments in wrong order (Junxian Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1874">CALCITE-1874</a>] In Frameworks, make <code class="highlighter-rouge">SqlToRelConverter</code> configurable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1873">CALCITE-1873</a>] In a “GROUP BY ordinal” query, validator gives invalid “Expression is not being grouped” error if column has alias</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1833">CALCITE-1833</a>] User-defined aggregate functions with more than one parameter (hzyuemeng1)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1860">CALCITE-1860</a>] Duplicate null predicates cause <code class="highlighter-rouge">NullPointerException</code> in <code class="highlighter-rouge">RexUtil</code> (Ruidong Li)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1859">CALCITE-1859</a>] NPE in validate method of <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1818">CALCITE-1818</a>] Handle <code class="highlighter-rouge">SqlKind.DYNAMIC</code> (parameters) in <code class="highlighter-rouge">SqlImplementor</code> (Dylan Adams)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1856">CALCITE-1856</a>] Add option <code class="highlighter-rouge">StructKind.PEEK_FIELDS_NO_EXPAND</code>, similar to <code class="highlighter-rouge">PEEK_FIELDS</code> but is not expanded in <code class="highlighter-rouge">"SELECT *"</code> (Shuyi Chen)</li>
</ul>
<h4 id="site-1-14-0">Web site and documentation</h4>
<ul>
<li>Add committer Chris Baynes</li>
<li>Add DataEngConf talk</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1901">CALCITE-1901</a>] SQL reference should say that “ONLY” is required after “FETCH … ROWS”</li>
</ul>
<h2 id="v1-13-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.13.0">1.13.0</a> / 2017-06-20</h2>
<p>This release comes three months after 1.12.0. It includes more than 75 resolved issues, comprising
a large number of new features as well as general improvements and bug-fixes.</p>
<p>First, Calcite has been upgraded to use
<a href="https://issues.apache.org/jira/browse/CALCITE-1807">Avatica 1.10.0</a>,
which was recently released.</p>
<p>Moreover, Calcite core includes improvements which aim at making it more powerful, stable and robust.
In addition to numerous bux-fixes, we have implemented a
<a href="https://issues.apache.org/jira/browse/CALCITE-1731">new materialized view rewriting algorithm</a>
and <a href="https://issues.apache.org/jira/browse/CALCITE-1682">new metadata providers</a> which
should prove useful for data processing systems relying on Calcite.</p>
<p>In this release, we have also completed the work to
<a href="https://issues.apache.org/jira/browse/CALCITE-1570">support the <code class="highlighter-rouge">MATCH_RECOGNIZE</code> clause</a>
used in complex-event processing (CEP).</p>
<p>In addition, more progress has been made for the different adapters.
For instance, the Druid adapter now relies on
<a href="https://issues.apache.org/jira/browse/CALCITE-1771">Druid 0.10.0</a> and
it can generate more efficient plans where most of the computation can be pushed to Druid,
e.g., <a href="https://issues.apache.org/jira/browse/CALCITE-1707">using extraction functions</a>.</p>
<p>There is one minor but potentially breaking API change in
[<a href="https://issues.apache.org/jira/browse/CALCITE-1788">CALCITE-1788</a>]
(Simplify handling of position in the parser), requiring changes in the parameter
lists of parser extension methods.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 1.7, 1.8, 9;
Guava versions 14.0 to 21.0;
Druid version 0.10.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-13-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1570">CALCITE-1570</a>]
Add <code class="highlighter-rouge">MATCH_RECOGNIZE</code> operator, for event pattern-matching
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1647">CALCITE-1647</a>]
Classifier and <code class="highlighter-rouge">match_number</code> syntax support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1646">CALCITE-1646</a>]
Partition by and order by syntax support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1645">CALCITE-1645</a>]
Row per match syntax support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1644">CALCITE-1644</a>]
Subset clause syntax support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1643">CALCITE-1643</a>]
<code class="highlighter-rouge">AFTER MATCH</code> sub-clause of <code class="highlighter-rouge">MATCH_RECOGNIZE</code> clause (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1642">CALCITE-1642</a>]
Support <code class="highlighter-rouge">MEASURES</code> clause in <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1853">CALCITE-1853</a>]
Push Count distinct into Druid when approximate results are acceptable (Zain Humayun)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1829">CALCITE-1829</a>]
Add <code class="highlighter-rouge">TIME</code>/<code class="highlighter-rouge">TIMESTAMP</code>/<code class="highlighter-rouge">DATE</code> datatype handling to <code class="highlighter-rouge">RexImplicationChecker</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1613">CALCITE-1613</a>]
Implement <code class="highlighter-rouge">EXTRACT</code> for time unit <code class="highlighter-rouge">DOW</code>, <code class="highlighter-rouge">DOY</code>; and fix <code class="highlighter-rouge">CENTURY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1807">CALCITE-1807</a>]
Upgrade to Avatica 1.10</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1802">CALCITE-1802</a>]
Add post-aggregation step for Union in materialized view rewriting</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1795">CALCITE-1795</a>]
Extend materialized view rewriting to produce rewritings using <code class="highlighter-rouge">Union</code> operators</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1797">CALCITE-1797</a>]
Support view partial rewriting in aggregate materialized view rewriting</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1791">CALCITE-1791</a>]
Support view partial rewriting in join materialized view rewriting</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1731">CALCITE-1731</a>]
Rewriting of queries using materialized views with joins and aggregates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1780">CALCITE-1780</a>]
Add <code class="highlighter-rouge">required Order</code> and <code class="highlighter-rouge">requiresOver</code> parameters to the constructor of <code class="highlighter-rouge">SqlUserDefinedAggregate Function</code> (SunJincheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1306">CALCITE-1306</a>]
Allow <code class="highlighter-rouge">GROUP BY</code> and <code class="highlighter-rouge">HAVING</code> to reference <code class="highlighter-rouge">SELECT</code> expressions by ordinal and alias (Rajeshbabu Chintaguntla)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1781">CALCITE-1781</a>]
Allow expression in <code class="highlighter-rouge">CUBE</code> and <code class="highlighter-rouge">ROLLUP</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1771">CALCITE-1771</a>]
Upgrade to Druid 0.10.0 (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1772">CALCITE-1772</a>]
Add a hook to allow <code class="highlighter-rouge">RelNode</code> expressions to be executed by JDBC driver</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1766">CALCITE-1766</a>]
Support system functions having no args with parenthesis too (Ankit Singhal)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1760">CALCITE-1760</a>]
Implement utility method to identify lossless casts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1682">CALCITE-1682</a>]
New metadata providers for expression column origin and all predicates in plan</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1753">CALCITE-1753</a>]
Push expressions into null-generating side of a join if they are “strong” (null-preserving)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1759">CALCITE-1759</a>]
Add SQL:2014 reserved words to parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-476">CALCITE-476</a>]
Support distinct aggregates in window functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1738">CALCITE-1738</a>]
Support <code class="highlighter-rouge">CAST</code> of literal values in filters pushed to Druid (Remus Rusanu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1758">CALCITE-1758</a>]
Push to Druid <code class="highlighter-rouge">OrderBy</code>/<code class="highlighter-rouge">Limit</code> operation over time dimension and additional columns (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1707">CALCITE-1707</a>]
Push <code class="highlighter-rouge">Extraction</code> filter on <code class="highlighter-rouge">Year</code>/<code class="highlighter-rouge">Month</code>/<code class="highlighter-rouge">Day</code> to druid (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1725">CALCITE-1725</a>]
Push project aggregate of time extract to druid (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1747">CALCITE-1747</a>]
<code class="highlighter-rouge">RelMdColumnUniqueness</code> for <code class="highlighter-rouge">HepRelVertex</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1749">CALCITE-1749</a>]
Push filter conditions partially into Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1730">CALCITE-1730</a>]
Upgrade Druid to 0.9.2 (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1702">CALCITE-1702</a>]
Support extended columns in DML (Kevin Liew)</li>
</ul>
<h4 id="fixes-1-13-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1855">CALCITE-1855</a>]
Fix float values in Cassandra adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1848">CALCITE-1848</a>]
Rename MySource to FileSource (Darion Yaphet)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1852">CALCITE-1852</a>]
Fix for <code class="highlighter-rouge">UnionMergeRule</code> to deal correctly with <code class="highlighter-rouge">EXCEPT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1850">CALCITE-1850</a>]
Extend <code class="highlighter-rouge">UnionMergeRule</code> to deal with more than 2 branches (Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1805">CALCITE-1805</a>]
Druid adapter incorrectly pushes down <code class="highlighter-rouge">COUNT(c)</code>; Druid only supports <code class="highlighter-rouge">COUNT(*)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1846">CALCITE-1846</a>]
Metadata pulled up predicates should skip non-deterministic calls (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1819">CALCITE-1819</a>]
Druid Adapter does not push the boolean operator <code class="highlighter-rouge">&lt;&gt;</code> as a filter correctly (Zain Humayun)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1798">CALCITE-1798</a>]
In JDBC adapter, generate dialect-specific SQL for <code class="highlighter-rouge">FLOOR</code> operator (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1812">CALCITE-1812</a>]
Provide <code class="highlighter-rouge">RelMetadataQuery</code> from planner to rules and invalidate in <code class="highlighter-rouge">transformTo</code> (Remus Rusanu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1804">CALCITE-1804</a>]
Cannot assign <code class="highlighter-rouge">NOT NULL</code> array to <code class="highlighter-rouge">NULLABLE</code> array (Ankit Singhal)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1810">CALCITE-1810</a>]
Allow <code class="highlighter-rouge">NULL</code> for <code class="highlighter-rouge">ARRAY</code> constructor (Ankit Singhal)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1830">CALCITE-1830</a>]
<code class="highlighter-rouge">ProcessBuilder</code> is security sensitive; move it to test suite to prevent accidents</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1816">CALCITE-1816</a>]
<code class="highlighter-rouge">JaninoRelMetadataProvider</code> generated classes leak ACTIVE nodes on exception (Remus Rusanu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1690">CALCITE-1690</a>]
Calcite timestamp literals cannot express precision above millisecond, <code class="highlighter-rouge">TIMESTAMP(3)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1664">CALCITE-1664</a>]
<code class="highlighter-rouge">CAST(&lt;string&gt; as TIMESTAMP)</code> adds part of sub-second fraction to the value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1742">CALCITE-1742</a>]
Create a read-consistent view of CalciteSchema for each statement compilation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1800">CALCITE-1800</a>]
JDBC adapter fails on query with <code class="highlighter-rouge">UNION</code> in <code class="highlighter-rouge">FROM</code> clause (Viktor Batytskyi, Minji Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1788">CALCITE-1788</a>]
Simplify handling of position in the parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1782">CALCITE-1782</a>]
<code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> should work on <code class="highlighter-rouge">Aggregate</code> instead of <code class="highlighter-rouge">LogicalAggregate</code> (Haohui Mai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1293">CALCITE-1293</a>]
Bad code generated when argument to <code class="highlighter-rouge">COUNT(DISTINCT)</code> is a <code class="highlighter-rouge">GROUP BY</code> column</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1770">CALCITE-1770</a>]
<code class="highlighter-rouge">CAST(NULL AS ...)</code> gives NPE (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1777">CALCITE-1777</a>]
<code class="highlighter-rouge">WHERE FALSE</code> causes <code class="highlighter-rouge">AssertionError</code> (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1778">CALCITE-1778</a>]
Query with <code class="highlighter-rouge">WHERE CASE</code> throws <code class="highlighter-rouge">AssertionError</code> “Cast for just nullability not allowed”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1773">CALCITE-1773</a>]
Add Test sql validator test for Pattern skip syntax in <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1761">CALCITE-1761</a>]
<code class="highlighter-rouge">TUMBLE</code>/<code class="highlighter-rouge">HOP</code>/<code class="highlighter-rouge">SESSION_START</code>/<code class="highlighter-rouge">END</code> do not resolve time field correctly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1765">CALCITE-1765</a>]
Druid adapter fail when the extract granularity is not supported (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1767">CALCITE-1767</a>]
Fix join/aggregate rewriting rule when same table is referenced more than once</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1764">CALCITE-1764</a>]
Adding sort ordering type for druid sort json field (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-715">CALCITE-715</a>]
Add <code class="highlighter-rouge">PERIOD</code> type constructor and period operators (<code class="highlighter-rouge">CONTAINS</code>, <code class="highlighter-rouge">PRECEDES</code>, etc.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1456">CALCITE-1456</a>]
Change <code class="highlighter-rouge">SubstitutionVisitor</code> to use generic <code class="highlighter-rouge">RelBuilder</code> instead of Logical instances of the operators when possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1763">CALCITE-1763</a>]
Recognize lossless casts in join/aggregate materialized view rewriting rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1639">CALCITE-1639</a>]
<code class="highlighter-rouge">TIMESTAMPADD(MONTH, ...)</code> should return last day of month if the day overflows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1754">CALCITE-1754</a>]
In Csv adapter, convert <code class="highlighter-rouge">DATE</code> and <code class="highlighter-rouge">TIME</code> values to <code class="highlighter-rouge">int</code>, and <code class="highlighter-rouge">TIMESTAMP</code> values to <code class="highlighter-rouge">long</code> (Hongbin Ma)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1751">CALCITE-1751</a>]
<code class="highlighter-rouge">PigRelBuilderStyleTest</code> test cases are flapping</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1750">CALCITE-1750</a>]
Fix unit test failures when the path to the repository contains spaces</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1724">CALCITE-1724</a>]
Wrong comparison for floats/double type in Druid (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1734">CALCITE-1734</a>]
Select query result not parsed correctly with druid 0.9.2 (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1732">CALCITE-1732</a>]
<code class="highlighter-rouge">IndexOutOfBoundsException</code> when using <code class="highlighter-rouge">LATERAL TABLE</code> with more than one field (Godfrey He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1722">CALCITE-1722</a>]
Druid adapter uses un-scaled value of <code class="highlighter-rouge">DECIMAL</code> literals (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1723">CALCITE-1723</a>]
Match <code class="highlighter-rouge">DruidProjectFilterTransposeRule</code> against <code class="highlighter-rouge">DruidQuery</code> (Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1714">CALCITE-1714</a>]
Do not push group by on druid metrics fields (Slim Bouguerra)</li>
</ul>
<h4 id="site-1-13-0">Web site and documentation</h4>
<ul>
<li>Michael Mior joins PMC</li>
<li>Add 3 new committers (Zhiqiang-He, Kevin Liew, Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1854">CALCITE-1854</a>]
Fix value range of TINYINT in documentation (James Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1827">CALCITE-1827</a>]
Document <code class="highlighter-rouge">TIMESTAMPADD</code>, <code class="highlighter-rouge">TIMESTAMPDIFF</code> functions (SunJincheng)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1796">CALCITE-1796</a>]
Update materialized views documentation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1566">CALCITE-1566</a>]
Better documentation on the use of materialized views</li>
</ul>
<h2 id="v1-12-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.12.0">1.12.0</a> / 2017-03-24</h2>
<p><a href="../news/2017/03/24/release-1.12.0">Features of note</a> this release are
JDK 9 support,
the new file/web and Apache Pig adapters,
general improvements to the Druid adapter,
more helpful error messages if you get a table or column name wrong,
improved the plans for correlated sub-queries,
support for <code class="highlighter-rouge">TUMBLE</code>, <code class="highlighter-rouge">HOP</code> and <code class="highlighter-rouge">SESSION</code> window functions in streaming and regular queries,
experimental support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code> clause for complex-event processing (CEP),
several new built-in functions to comply with the ODBC/JDBC standard.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 1.7, 1.8, 9;
Guava versions 14.0 to 21.0;
Druid version 0.9.1.1;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h3 id="new-features-1-12-0">New features</h3>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1666">CALCITE-1666</a>]
Support for modifiable views with extended columns (Kevin Liew)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1655">CALCITE-1655</a>]
Druid adapter: add <code class="highlighter-rouge">IN</code> filter (Slim Bouguerra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1641">CALCITE-1641</a>]
Add parser and validator support for <code class="highlighter-rouge">MATCH_RECOGNIZE</code>, a new clause for
complex-event processing (CEP) (Zhiqiang-He)
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1686">CALCITE-1686</a>]
Only allow <code class="highlighter-rouge">FINAL</code> and other functions inside <code class="highlighter-rouge">MATCH_RECOGNIZE</code> (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1689">CALCITE-1689</a>]
Remove <code class="highlighter-rouge">PATTERN_DEFINE_AS</code> in SqlStdOperatorTable; <code class="highlighter-rouge">MATCH_RECOGNIZE</code> now uses
<code class="highlighter-rouge">AS</code> (Zhiqiang-He)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1668">CALCITE-1668</a>]
Simplify <code class="highlighter-rouge">1 = 1</code> to <code class="highlighter-rouge">TRUE</code>, <code class="highlighter-rouge">1 &gt; 2</code> to <code class="highlighter-rouge">FALSE</code> (Kevin Risden)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1598">CALCITE-1598</a>]
Pig adapter (Eli Levine)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1661">CALCITE-1661</a>]
Druid adapter: Support aggregation functions on <code class="highlighter-rouge">DECIMAL</code> columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1615">CALCITE-1615</a>]
Support <code class="highlighter-rouge">HOP</code> and <code class="highlighter-rouge">SESSION</code> functions in the <code class="highlighter-rouge">GROUP BY</code> clause
(Julian Hyde and Haohui Mai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1494">CALCITE-1494</a>]
More efficient plan for correlated sub-queries, omitting value-generating
scans where possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1638">CALCITE-1638</a>]
Simplify <code class="highlighter-rouge">$x = $x</code> to <code class="highlighter-rouge">$x is not null</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-884">CALCITE-884</a>]
File adapter (Henry Olson)
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1704">CALCITE-1704</a>]
Execute queries on CSV files using simple <code class="highlighter-rouge">sqlline</code> command</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1676">CALCITE-1676</a>]
Scan directory for .csv, .json and .gz files</li>
<li>Allow multiple Calcite columns to be derived from one HTML column,
e.g. Location → Lat, Lon</li>
<li>Improved pattern match: added <code class="highlighter-rouge">matchSeq</code> to allow selection of
<i>n</i>th match</li>
<li>Add replace patterns to cell parsing logic</li>
<li>Add handling for tables without <code class="highlighter-rouge">&lt;TH&gt;</code> elements</li>
<li>Unit tests using local files (URL tests are contingent on network
access)</li>
<li>Ability to parse HTML, CSV and JSON from local files</li>
<li>Combine the <a href="https://github.com/HenryOlson/optiq-web">optiq-web</a>
project with code from the
<a href="/org/apache/calcite/adapter/csv/package-summary.html">CSV adapter</a>
</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1652">CALCITE-1652</a>]
Allow <code class="highlighter-rouge">GROUPING</code> function to have multiple arguments, like <code class="highlighter-rouge">GROUPING_ID</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1634">CALCITE-1634</a>]
Make <code class="highlighter-rouge">RelBuilder.distinct</code> no-op if input is already distinct; use it in
<code class="highlighter-rouge">RelDecorrelator</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1635">CALCITE-1635</a>]
Add <code class="highlighter-rouge">MinRowCount</code> metadata</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1628">CALCITE-1628</a>]
Add an alternative match pattern for <code class="highlighter-rouge">SemiJoinRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1618">CALCITE-1618</a>]
<code class="highlighter-rouge">SortProjectTransposeRule</code> should check for monotonicity preserving <code class="highlighter-rouge">CAST</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1510">CALCITE-1510</a>]
In <code class="highlighter-rouge">INSERT</code>/<code class="highlighter-rouge">UPSERT</code> without an explicit target column list, allow fewer source
columns than table (Kevin Liew)
<ul>
<li>Check for default value only when target field is null
(Rajeshbabu Chintaguntla)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1603">CALCITE-1603</a>]
Support <code class="highlighter-rouge">TUMBLE</code> window function in the <code class="highlighter-rouge">GROUP BY</code> clause (Julian Hyde and
Haohui Mai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1606">CALCITE-1606</a>]
Add datetime scalar functions (Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1604">CALCITE-1604</a>]
Add JDBC/ODBC scalar functions <code class="highlighter-rouge">DATABASE</code>, <code class="highlighter-rouge">IFNULL</code>, <code class="highlighter-rouge">USER</code> (Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1549">CALCITE-1549</a>]
More helpful error message when schema, table or column not found</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-420">CALCITE-420</a>]
Add <code class="highlighter-rouge">REPLACE</code> function, callable with and without JDBC escape syntax (Riccardo
Tommasini)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1557">CALCITE-1557</a>]
Add numeric scalar functions (Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1258">CALCITE-1258</a>]
JDK9</li>
</ul>
<h4 id="fixes-1-12-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1716">CALCITE-1716</a>]
Fix Cassandra integration tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1715">CALCITE-1715</a>]
Downgrade to Guava 19.0 to fix Cassandra incompatibility</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1706">CALCITE-1706</a>]
Disable <code class="highlighter-rouge">DruidAggregateFilterTransposeRule</code>, because it causes fine-grained
aggregations to be pushed to Druid</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1695">CALCITE-1695</a>]
Add class <code class="highlighter-rouge">RexSimplify</code>, providing an explicit <code class="highlighter-rouge">RexExecutor</code> for methods to
simplify <code class="highlighter-rouge">RexNode</code>s</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1694">CALCITE-1694</a>]
Pig adapter: Use the shaded Avatica dependency instead</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1561">CALCITE-1561</a>]
Make <code class="highlighter-rouge">PigTest</code> cluster aware of data files; hopefully this will prevent
intermittent test failures (Eli Levine)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1696">CALCITE-1696</a>]
Support <code class="highlighter-rouge">RexLocalRef</code> for <code class="highlighter-rouge">EXPLAIN PLAN AS JSON</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1683">CALCITE-1683</a>]
Druid-specific rules to transpose <code class="highlighter-rouge">Filter</code> with other relations
(Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1684">CALCITE-1684</a>]
Change default precision of <code class="highlighter-rouge">VARCHAR</code> and <code class="highlighter-rouge">VARBINARY</code> types from 1 to
“unspecified” (Kevin Liew)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1691">CALCITE-1691</a>]
<code class="highlighter-rouge">ClassCastException</code> in <code class="highlighter-rouge">RelOptUtil.containsNullableFields</code>, attempting to
convert executor to <code class="highlighter-rouge">RexExecutorImpl</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1688">CALCITE-1688</a>]
Infinite loop during materialization substitution if query contains <code class="highlighter-rouge">Union</code>,
<code class="highlighter-rouge">Minus</code> or <code class="highlighter-rouge">Intersect</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1665">CALCITE-1665</a>]
<code class="highlighter-rouge">HAVING</code> support in <code class="highlighter-rouge">RelToSqlConverter</code> (Zhiqiang He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1673">CALCITE-1673</a>]
In CSV adapter, query with <code class="highlighter-rouge">ORDER BY</code> or <code class="highlighter-rouge">GROUP BY</code> on <code class="highlighter-rouge">TIMESTAMP</code> column
throws CompileException (Gangadhar Kairi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1674">CALCITE-1674</a>]
<code class="highlighter-rouge">LIKE</code> does not match value that contains newline (Mark Payne)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1675">CALCITE-1675</a>]
Two-level column name cannot be resolved in <code class="highlighter-rouge">ORDER BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1667">CALCITE-1667</a>]
Forbid calls to JDK APIs that use the default locale, time zone or character
set</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1656">CALCITE-1656</a>]
Improve cost function in <code class="highlighter-rouge">DruidQuery</code> to encourage early column pruning
(Nishant Bangarwa)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1664">CALCITE-1664</a>]
<code class="highlighter-rouge">CAST('&lt;string&gt;' as TIMESTAMP)</code> wrongly adds part of sub-second fraction to the
value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1659">CALCITE-1659</a>]
Simplifying <code class="highlighter-rouge">CAST('YYYY-MM-DD hh:mm:ss.SSS' as TIMESTAMP)</code> should round the
sub-second fraction (Remus Rusanu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1439">CALCITE-1439</a>]
Handle errors during constant reduction</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1653">CALCITE-1653</a>]
Pass an expression executor to <code class="highlighter-rouge">RexUtil.simplify</code> for constant reduction (Remus
Rusanu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1601">CALCITE-1601</a>]
<code class="highlighter-rouge">DateRangeRules</code> loses OR filters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1637">CALCITE-1637</a>]
Add mutable equivalents for all relational expressions (e.g. <code class="highlighter-rouge">MutableFilter</code>)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1621">CALCITE-1621</a>]
Add a cast around the NULL literal in aggregate rules (Anton Mushin)
<ul>
<li>Add <code class="highlighter-rouge">RexBuilder.makeNullLiteral(RelDataType)</code>
</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1649">CALCITE-1649</a>]
Data type mismatch in <code class="highlighter-rouge">EnumerableMergeJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1636">CALCITE-1636</a>]
JDBC adapter generates wrong SQL for self join with sub-query (Zhiqiang-He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1633">CALCITE-1633</a>]
In plans, output <code class="highlighter-rouge">Correlate.joinType</code> attribute in lower-case, same as
<code class="highlighter-rouge">Join.joinType</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1632">CALCITE-1632</a>]
Return type of “datetime + interval” expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-365">CALCITE-365</a>]
<code class="highlighter-rouge">AssertionError</code> while translating query with <code class="highlighter-rouge">WITH</code> and correlated sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1623">CALCITE-1623</a>]
Make sure <code class="highlighter-rouge">DATE</code>, <code class="highlighter-rouge">TIME</code> and <code class="highlighter-rouge">TIMESTAMP</code> literals have <code class="highlighter-rouge">Calendar</code> with GMT
timezone</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1619">CALCITE-1619</a>]
<code class="highlighter-rouge">CAST</code> is ignored by rules pushing operators into <code class="highlighter-rouge">DruidQuery</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1617">CALCITE-1617</a>]
Druid adapter: Send timestamp literals to Druid as local time, not UTC</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1500">CALCITE-1500</a>]
Decouple materialization and lattice substitution from <code class="highlighter-rouge">VolcanoPlanner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1589">CALCITE-1589</a>]
Druid adapter: <code class="highlighter-rouge">timeseries</code> query shows all days, even if no data</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1572">CALCITE-1572</a>]
<code class="highlighter-rouge">JdbcSchema</code> throws exception when detecting nullable columns (Wu Xiang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1610">CALCITE-1610</a>]
<code class="highlighter-rouge">RelBuilder</code> sort-combining optimization treats aliases incorrectly (Jess
Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1595">CALCITE-1595</a>]
<code class="highlighter-rouge">RelBuilder.call</code> throws <code class="highlighter-rouge">NullPointerException</code> if argument types are invalid
(Jess Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1602">CALCITE-1602</a>]
Remove uses of deprecated APIs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1569">CALCITE-1569</a>]
Code generation for fields of type <code class="highlighter-rouge">java.sql.Date</code> (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1582">CALCITE-1582</a>]
<code class="highlighter-rouge">RelToSqlConverter</code> doesn’t handle cartesian join (Jess Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1597">CALCITE-1597</a>]
Obsolete <code class="highlighter-rouge">Util.newInternal</code>, <code class="highlighter-rouge">.pre</code>, <code class="highlighter-rouge">.post</code>, <code class="highlighter-rouge">.permAssert</code> and
<code class="highlighter-rouge">Throwables.propagate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1586">CALCITE-1586</a>]
JDBC adapter generates wrong SQL if <code class="highlighter-rouge">UNION</code> has more than two inputs (Zhiqiang
He)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1535">CALCITE-1535</a>]
Give error if column referenced in <code class="highlighter-rouge">ORDER BY</code> is ambiguous (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1594">CALCITE-1594</a>]
<code class="highlighter-rouge">ConventionTraitDef.getConversionData()</code> is not thread-safe</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1577">CALCITE-1577</a>]
Druid adapter: Incorrect result - limit on timestamp disappears</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1587">CALCITE-1587</a>]
Druid adapter: <code class="highlighter-rouge">topN</code> query returns approximate results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1578">CALCITE-1578</a>]
Druid adapter: wrong semantics of <code class="highlighter-rouge">topN</code> query limit with granularity</li>
<li>Druid adapter: Add <code class="highlighter-rouge">enum Granularity</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1592">CALCITE-1592</a>]
<code class="highlighter-rouge">SqlToRelConverter</code> throws <code class="highlighter-rouge">UnsupportedOperationException</code> if query has
<code class="highlighter-rouge">NOT ... NOT IN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1590">CALCITE-1590</a>]
Support Guava version 21.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1575">CALCITE-1575</a>]
Literals may lose precision during expression reduction</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1546">CALCITE-1546</a>]
Wrong plan for <code class="highlighter-rouge">NOT IN</code> sub-queries with disjunction</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1574">CALCITE-1574</a>]
Memory leak in maven</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1571">CALCITE-1571</a>]
Could not resolve view with <code class="highlighter-rouge">SimpleCalciteSchema</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1558">CALCITE-1558</a>]
<code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> gets field mapping wrong if group key
is used in aggregate function (Zhenghua Gao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1562">CALCITE-1562</a>]
Update jsr305 from 1.3.9 to 3.0.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1563">CALCITE-1563</a>]
In case-insensitive connection, non-existent tables use alphabetically
preceding table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1544">CALCITE-1544</a>]
<code class="highlighter-rouge">AggregateJoinTransposeRule</code> fails to preserve row type (Kurt Young)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1543">CALCITE-1543</a>]
Correlated scalar sub-query with multiple aggregates gives <code class="highlighter-rouge">AssertionError</code>
(Kurt Young)</li>
</ul>
<h4 id="site-1-12-0">Web site and documentation</h4>
<ul>
<li>Maryann Xue joins PMC</li>
<li>Add 3 new committers (Gian Merlino, Jess Balint, Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1657">CALCITE-1657</a>]
Release Calcite 1.12.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1677">CALCITE-1677</a>]
Replace duplicate avatica docs with a redirect</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1685">CALCITE-1685</a>]
Site: <code class="highlighter-rouge">defaultNullCollation</code> key listed as <code class="highlighter-rouge">materializationsEnabled</code>
(Kevin Liew)</li>
<li>Add MapD to <a href="/docs/powered_by.html">Powered by
Calcite</a> page (Todd Mostak)</li>
<li>Diagram of logos of projects and products powered by Calcite</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1622">CALCITE-1622</a>]
Bugs in website example code (Damjan Jovanovic)</li>
</ul>
<h2 id="v1-11-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.11.0">1.11.0</a> / 2017-01-09</h2>
<p>Nearly three months after the previous release, there is a long list
of improvements and bug-fixes, many of them making planner rules
smarter.</p>
<p>Several adapters have improvements:</p>
<ul>
<li>The JDBC adapter can now push down DML (<code class="highlighter-rouge">INSERT</code>, <code class="highlighter-rouge">UPDATE</code>, <code class="highlighter-rouge">DELETE</code>),
windowed aggregates (<code class="highlighter-rouge">OVER</code>), <code class="highlighter-rouge">IS NULL</code> and <code class="highlighter-rouge">IS NOT NULL</code> operators.</li>
<li>The Cassandra adapter now supports authentication.</li>
<li>Several key bug-fixes in the Druid adapter.</li>
</ul>
<p>For correlated and uncorrelated sub-queries, we generate more
efficient plans (for example, in some correlated queries we no longer
require a sub-query to generate the values of the correlating
variable), can now handle multiple correlations, and have also fixed a
few correctness bugs.</p>
<p>New SQL syntax:</p>
<ul>
<li>
<code class="highlighter-rouge">CROSS APPLY</code> and <code class="highlighter-rouge">OUTER APPLY</code>;</li>
<li>
<code class="highlighter-rouge">MINUS</code> as a synonym for <code class="highlighter-rouge">EXCEPT</code>;</li>
<li>an <code class="highlighter-rouge">AS JSON</code> option for the <code class="highlighter-rouge">EXPLAIN</code> command;</li>
<li>compound identifiers in the target list of <code class="highlighter-rouge">INSERT</code>, allowing you to
insert into individual fields of record-valued columns (or column
families if you are using the Apache Phoenix adapter).</li>
</ul>
<p>A variety of new and extended built-in functions: <code class="highlighter-rouge">CONVERT</code>, <code class="highlighter-rouge">LTRIM</code>,
<code class="highlighter-rouge">RTRIM</code>, 3-parameter <code class="highlighter-rouge">LOCATE</code> and <code class="highlighter-rouge">POSITION</code>, <code class="highlighter-rouge">RAND</code>, <code class="highlighter-rouge">RAND_INTEGER</code>,
and <code class="highlighter-rouge">SUBSTRING</code> applied to binary types.</p>
<p>There are minor but potentially breaking API changes in
[<a href="https://issues.apache.org/jira/browse/CALCITE-1519">CALCITE-1519</a>]
(interface <code class="highlighter-rouge">SubqueryConverter</code> becomes <code class="highlighter-rouge">SubQueryConverter</code> and some
similar changes in the case of classes and methods) and
[<a href="https://issues.apache.org/jira/browse/CALCITE-1530">CALCITE-1530</a>]
(rename <code class="highlighter-rouge">Shuttle</code> to <code class="highlighter-rouge">Visitor</code>, and create a new class <code class="highlighter-rouge">Visitor&lt;R&gt;</code>).
See the cases for more details.</p>
<p>Compatibility: This release is tested
on Linux, macOS, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
Guava versions 14.0 to 19.0;
Druid version 0.9.1.1;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-11-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1551">CALCITE-1551</a>]
Preserve alias in <code class="highlighter-rouge">RelBuilder.project</code> (Jess Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1552">CALCITE-1552</a>]
Add <code class="highlighter-rouge">RAND</code> function, returning <code class="highlighter-rouge">DOUBLE</code> values in the range 0..1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1414">CALCITE-1414</a>]
Add <code class="highlighter-rouge">RAND_INTEGER</code> function, which returns a random integer modulo N (Julian
Feinauer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1540">CALCITE-1540</a>]
Support multiple columns in <code class="highlighter-rouge">PARTITION BY</code> clause of window function
(Hongbin Ma)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1534">CALCITE-1534</a>]
Allow compound identifiers in <code class="highlighter-rouge">INSERT</code> target column list</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1529">CALCITE-1529</a>]
Support <code class="highlighter-rouge">CREATE TABLE</code> in tests (and only in tests)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1527">CALCITE-1527</a>]
Support DML in the JDBC adapter (Christian Tzolov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1523">CALCITE-1523</a>]
In <code class="highlighter-rouge">RelBuilder</code>, add <code class="highlighter-rouge">field</code> method to reference input to join by alias (Jess
Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1524">CALCITE-1524</a>]
Add a project to the planner root so that rules know which output fields are
used</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1425">CALCITE-1425</a>]
Support two-level column structure in <code class="highlighter-rouge">INSERT</code>/<code class="highlighter-rouge">UPDATE</code>/<code class="highlighter-rouge">MERGE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1472">CALCITE-1472</a>]
Support <code class="highlighter-rouge">CROSS</code>/<code class="highlighter-rouge">OUTER APPLY</code> syntax (Jark Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1506">CALCITE-1506</a>]
Push <code class="highlighter-rouge">OVER</code> clause to underlying SQL via JDBC adapter (Christian Tzolov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1509">CALCITE-1509</a>]
Allow overriding the convertlet table in CalcitePrepareImpl (Gian Merlino)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1483">CALCITE-1483</a>]
Generate simpler logic for <code class="highlighter-rouge">NOT IN</code> if we can deduce that the key is never null</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1497">CALCITE-1497</a>]
Infer <code class="highlighter-rouge">IS NOT NULL</code>, and project predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1489">CALCITE-1489</a>]
Add rule, <code class="highlighter-rouge">AggregateValuesRule</code>, that applies to an <code class="highlighter-rouge">Aggregate</code> on an empty
relation (Gian Merlino)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1447">CALCITE-1447</a>]
Implement <code class="highlighter-rouge">INTERSECT DISTINCT</code> by rewriting to <code class="highlighter-rouge">UNION ALL</code> and counting
(Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1389">CALCITE-1389</a>]
Add a rewrite rule to use materialized views with joins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1125">CALCITE-1125</a>]
<code class="highlighter-rouge">MINUS</code> as a synonym for <code class="highlighter-rouge">EXCEPT</code> (enabled in Oracle10 conformance)
(Chandni Singh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1453">CALCITE-1453</a>]
Support <code class="highlighter-rouge">ANY</code> type with binary comparison and arithmetic operators
(Jungtaek Lim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1444">CALCITE-1444</a>]
Add <code class="highlighter-rouge">CONVERT</code> function (Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1448">CALCITE-1448</a>]
Add rules to flatten and prune <code class="highlighter-rouge">Intersect</code> and <code class="highlighter-rouge">Minus</code>;
flatten set-operators if the top is <code class="highlighter-rouge">DISTINCT</code> and bottom is <code class="highlighter-rouge">ALL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1426">CALCITE-1426</a>]
Support customized star expansion in <code class="highlighter-rouge">Table</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1454">CALCITE-1454</a>]
Allow custom implementations of <code class="highlighter-rouge">SqlConformance</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1417">CALCITE-1417</a>]
In <code class="highlighter-rouge">RelBuilder</code>, simplify “CAST(literal TO type)” to a literal when possible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1443">CALCITE-1443</a>]
Add authentication support in Cassandra adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1404">CALCITE-1404</a>]
Implement <code class="highlighter-rouge">FILTER</code> on aggregate functions in <code class="highlighter-rouge">Interpreter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1418">CALCITE-1418</a>]
Implement <code class="highlighter-rouge">SUBSTRING</code> function for <code class="highlighter-rouge">BINARY</code> and <code class="highlighter-rouge">VARBINARY</code> (Jungtaek Lim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1422">CALCITE-1422</a>]
In JDBC adapter, allow <code class="highlighter-rouge">IS NULL</code> and <code class="highlighter-rouge">IS NOT NULL</code> operators in generated SQL
join condition (Viktor Batytskyi)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1419">CALCITE-1419</a>]
Implement JDBC functions: <code class="highlighter-rouge">LTRIM</code>, <code class="highlighter-rouge">RTRIM</code> and 3-parameter <code class="highlighter-rouge">LOCATE</code> and
<code class="highlighter-rouge">POSITION</code> (Jungtaek Lim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-917">CALCITE-917</a>]
Add <code class="highlighter-rouge">AS JSON</code> as output option for <code class="highlighter-rouge">EXPLAIN</code>
</li>
</ul>
<h4 id="fixes-1-11-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1559">CALCITE-1559</a>]
Convert example models to stricter JSON</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1560">CALCITE-1560</a>]
Remove <code class="highlighter-rouge">avatica</code> directory from <code class="highlighter-rouge">sqlline</code>’s class path</li>
<li>Remove non-ASCII characters from Java source files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1511">CALCITE-1511</a>]
Decorrelation fails if query has more than one <code class="highlighter-rouge">EXISTS</code> in <code class="highlighter-rouge">WHERE</code> clause</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1555">CALCITE-1555</a>]
Improve <code class="highlighter-rouge">RelNode</code> validation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1548">CALCITE-1548</a>]
Instantiate function objects once per query</li>
<li>Add lock to <code class="highlighter-rouge">JdbcAdapterTest</code>, to ensure that tests that modify data run in
series</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1519">CALCITE-1519</a>]
Standardize on “sub-query” rather than “subquery” in class names and comments</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1493">CALCITE-1493</a>]
Wrong plan for <code class="highlighter-rouge">NOT IN</code> correlated queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1526">CALCITE-1526</a>]
Use <code class="highlighter-rouge">Strong</code> to infer whether a predicate’s inputs may be null</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1530">CALCITE-1530</a>]
Create a visitor to traverse linq4j expressions without mutating them, and
rename <code class="highlighter-rouge">Visitor</code> to <code class="highlighter-rouge">Shuttle</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1507">CALCITE-1507</a>]
<code class="highlighter-rouge">OFFSET</code> cannot be pushed through a <code class="highlighter-rouge">JOIN</code> if the non-preserved side of outer
join is not count-preserving</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1522">CALCITE-1522</a>]
Fix error message for <code class="highlighter-rouge">SetOp</code> with incompatible args (Jess Balint)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1532">CALCITE-1532</a>]
In <code class="highlighter-rouge">HttpUtils</code>, don’t log HTTP requests; they may contain user name, password</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1037">CALCITE-1037</a>]
Column uniqueness is calculated incorrectly for <code class="highlighter-rouge">Correlate</code> (Alexey Makhmutov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1495">CALCITE-1495</a>]
<code class="highlighter-rouge">SemiJoinRule</code> should not apply to <code class="highlighter-rouge">RIGHT</code> and <code class="highlighter-rouge">FULL JOIN</code>, and should strip
<code class="highlighter-rouge">LEFT JOIN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1516">CALCITE-1516</a>]
Upgrade <code class="highlighter-rouge">hydromatic-resource-maven-plugin</code>, and re-work <code class="highlighter-rouge">SaffronProperties</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1498">CALCITE-1498</a>]
Avoid <code class="highlighter-rouge">LIMIT</code> with trivial <code class="highlighter-rouge">ORDER BY</code> being pushed through <code class="highlighter-rouge">JOIN</code> endlessly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1501">CALCITE-1501</a>]
<code class="highlighter-rouge">EnumerableUnion</code> should use array comparator when row format is <code class="highlighter-rouge">ARRAY</code> (Dayue
Gao)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1502">CALCITE-1502</a>]
<code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">ReduceExpressionsRule</code> when <code class="highlighter-rouge">CASE</code> is used with optional
value and literal (Serhii Harnyk)</li>
<li>Cosmetic changes, and deprecate some methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1486">CALCITE-1486</a>]
Invalid “Invalid literal” error for complex expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1488">CALCITE-1488</a>]
<code class="highlighter-rouge">ValuesReduceRule</code> should ignore empty <code class="highlighter-rouge">Values</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1384">CALCITE-1384</a>]
Extension point for <code class="highlighter-rouge">ALTER</code> statements (Gabriel Reid)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1484">CALCITE-1484</a>]
Upgrade Apache parent POM to version 18</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1482">CALCITE-1482</a>]
Fix leak on CassandraSchema creation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1479">CALCITE-1479</a>]
<code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">ReduceExpressionsRule</code> on multi-column <code class="highlighter-rouge">IN</code> sub-query
(Gian Merlino)</li>
<li>Upgrade <code class="highlighter-rouge">Quidem</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1416">CALCITE-1416</a>]
Make classes implement <code class="highlighter-rouge">AutoCloseable</code> where possible (Chinmay Kolhatkar)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1474">CALCITE-1474</a>]
Upgrade <code class="highlighter-rouge">aggdesigner</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1270">CALCITE-1270</a>]
Upgrade to <code class="highlighter-rouge">avatica-1.9</code>, <code class="highlighter-rouge">sqlline-1.2.0</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1461">CALCITE-1461</a>]
Hard-coded class name in <code class="highlighter-rouge">JaninoRelMetadataProvider</code> breaks shading (Jark Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1465">CALCITE-1465</a>]
Store constants as a derived field in <code class="highlighter-rouge">RelOptPredicateList</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1429">CALCITE-1429</a>]
Druid adapter must send <code class="highlighter-rouge">fromNext</code> when requesting rows from Druid (Jiarong
Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1430">CALCITE-1430</a>]
In Druid adapter, <code class="highlighter-rouge">pagingIdentifiers</code> might have more than one value (Jiarong
Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1442">CALCITE-1442</a>]
Interval fractional second precision returns wrong value (Laurent Goujon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1434">CALCITE-1434</a>]
User-defined aggregate function that uses a generic interface (Arun Mahadevan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1431">CALCITE-1431</a>]
<code class="highlighter-rouge">RelDataTypeFactoryImpl.copyType()</code> did not copy <code class="highlighter-rouge">StructKind</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1424">CALCITE-1424</a>]
Druid type is called <code class="highlighter-rouge">FLOAT</code>, not <code class="highlighter-rouge">DOUBLE</code> (Jiarong Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1415">CALCITE-1415</a>]
Add sub-query support for RelStructuredTypeFlattener</li>
</ul>
<h4 id="site-1-11-0">Web site and documentation</h4>
<ul>
<li>Change PMC chair</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1459">CALCITE-1459</a>]
Add Apache Apex to “Powered By” page (Chinmay Kolhatkar)</li>
</ul>
<h2 id="v1-10-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.10.0">1.10.0</a> / 2016-10-12</h2>
<p>This release comes shortly after 1.9.0. It includes mainly bug-fixes for the core and
Druid adapter. For the latest, we fixed an
<a href="https://issues.apache.org/jira/browse/CALCITE-1403">important issue</a> that
prevented us from handling consistently time dimensions in different time zones.</p>
<p>Compatibility: This release is tested
on Linux, Mac OS X, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
Guava versions 14.0 to 19.0;
Druid version 0.9.1.1;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-10-0">New feature</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1374">CALCITE-1374</a>]
Support operator <code class="highlighter-rouge">!=</code> as an alternative to <code class="highlighter-rouge">&lt;&gt;</code>
</li>
</ul>
<h4 id="fixes-1-10-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1378">CALCITE-1378</a>]
<code class="highlighter-rouge">ArrayIndexOutOfBoundsException</code> in sql-to-rel conversion for two-level columns</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1379">CALCITE-1379</a>]
When expanding <code class="highlighter-rouge">STAR</code>, expand sub-fields in <code class="highlighter-rouge">RecordType</code> columns of <code class="highlighter-rouge">StructKind.PEEK_FIELDS</code> and <code class="highlighter-rouge">StructKind.PEEK_FIELDS_DEFAULT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1381">CALCITE-1381</a>]
Function quantifier should be retained in a cloned Sql call (zhengdong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1386">CALCITE-1386</a>]
<code class="highlighter-rouge">ITEM</code> operator ignores the value type of the collection, assigns to Object variable (Jungtaek Lim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1392">CALCITE-1392</a>]
Druid default time column not properly recognized</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1394">CALCITE-1394</a>]
Using <code class="highlighter-rouge">CoreMatchers.containsString</code> causes javadoc errors</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1396">CALCITE-1396</a>]
<code class="highlighter-rouge">isDeterministic</code> only explores top <code class="highlighter-rouge">RexCall</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1397">CALCITE-1397</a>]
<code class="highlighter-rouge">ClassCastException</code> in <code class="highlighter-rouge">FilterReduceExpressionsRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1398">CALCITE-1398</a>]
Change visibility of <code class="highlighter-rouge">RelFieldTrimmer</code> utility methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1400">CALCITE-1400</a>]
<code class="highlighter-rouge">AggregatePullUpConstantsRule</code> might adjust aggregation function parameters indices wrongly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1402">CALCITE-1402</a>]
Druid Filter translation incorrect if input reference is in RHS of comparison</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1403">CALCITE-1403</a>]
<code class="highlighter-rouge">DruidAdapterIT</code> broken</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1420">CALCITE-1420</a>]
Allow Calcite JDBC Driver minor version to be greater than 9</li>
</ul>
<h4 id="site-1-10-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1393">CALCITE-1393</a>]
Exclude packages <code class="highlighter-rouge">org.apache.calcite.benchmarks.generated</code>, <code class="highlighter-rouge">org.openjdk.jmh</code> from javadoc</li>
</ul>
<h2 id="v1-9-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.9.0">1.9.0</a> / 2016-09-22</h2>
<p>This release includes extensions and fixes for the Druid adapter. New features were
added, such as the capability to
<a href="https://issues.apache.org/jira/browse/CALCITE-1357">recognize and translate Timeseries and TopN Druid queries</a>.
Moreover, this release contains multiple bug-fixes over the initial implementation of the
adapter. It is worth mentioning that most of these fixes were contributed by Druid developers,
which demonstrates the good reception of the adapter by that community.</p>
<p>We have added new SQL features too, e.g.,
<a href="https://issues.apache.org/jira/browse/CALCITE-1309">support for <code class="highlighter-rouge">LATERAL TABLE</code></a>.
There are multiple interesting extensions to the planner rules that should contribute to
obtain better plans, such as
<a href="https://issues.apache.org/jira/browse/CALCITE-1288">avoiding doing the same join twice</a>
in the presence of <code class="highlighter-rouge">COUNT DISTINCT</code>, or being able to
<a href="https://issues.apache.org/jira/browse/CALCITE-1220">simplify the expressions</a>
in the plan further. In addition, we implemented a rule to
<a href="https://issues.apache.org/jira/browse/CALCITE-1334">convert predicates on <code class="highlighter-rouge">EXTRACT</code> function calls into date ranges</a>.
The rule is not specific to Druid; however, in principle, it will be useful to identify
filter conditions on the time dimension of Druid data sources.</p>
<p>Finally, the release includes more than thirty bug-fixes, minor enhancements and internal
changes to planner rules and APIs.</p>
<p>Compatibility: This release is tested
on Linux, Mac OS X, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
Guava versions 14.0 to 19.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-9-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1208">CALCITE-1208</a>]
Improve two-level column structure handling</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1227">CALCITE-1227</a>]
Add streaming CSV table (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1309">CALCITE-1309</a>]
Support <code class="highlighter-rouge">LATERAL TABLE</code> (Jark Wu)</li>
</ul>
<h4 id="druid-adapter-1-9-0">Druid adapter</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1292">CALCITE-1292</a>]
Druid metadata query is very slow (Michael Spector)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1324">CALCITE-1324</a>]
Druid metadata query throws exception if there are non-standard aggregators (Martin Karlsch)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1343">CALCITE-1343</a>]
Broken Druid query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1348">CALCITE-1348</a>]
In Druid adapter, adjust how <code class="highlighter-rouge">SegmentMetadataQuery</code> is used to detect types (Gian Merlino)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1357">CALCITE-1357</a>]
Recognize Druid <code class="highlighter-rouge">Timeseries</code> and <code class="highlighter-rouge">TopN</code> queries in <code class="highlighter-rouge">DruidQuery</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1358">CALCITE-1358</a>]
Push filters on time dimension to Druid</li>
</ul>
<h4 id="planner-rules-1-9-0">Planner rules</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1220">CALCITE-1220</a>]
Further extend simplify for reducing expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1288">CALCITE-1288</a>]
Avoid doing the same join twice if count(distinct) exists (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1289">CALCITE-1289</a>]
<code class="highlighter-rouge">RexUtil.simplifyCase()</code> should account for nullability</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1290">CALCITE-1290</a>]
When converting to CNF, fail if the expression size exceeds a threshold</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1334">CALCITE-1334</a>]
Convert predicates on <code class="highlighter-rouge">EXTRACT</code> function calls into date ranges</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1342">CALCITE-1342</a>]
<code class="highlighter-rouge">ProjectPusher</code> should use rel factories when creating new rels, e.g. project/filter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1365">CALCITE-1365</a>]
Introduce <code class="highlighter-rouge">UnionPullUpConstantsRule</code>
</li>
</ul>
<h4 id="fixes-1-9-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-30">CALCITE-30</a>]
Implement <code class="highlighter-rouge">Statement.cancel</code> method</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-308">CALCITE-308</a>]
Wrong result when using <code class="highlighter-rouge">DATE</code>+<code class="highlighter-rouge">INTERVAL</code> arithmetics</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-319">CALCITE-319</a>]
Table aliases should follow case-sensitivity policy</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-528">CALCITE-528</a>]
Creating output row type of a Join does not obey case-sensitivity flags</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-991">CALCITE-991</a>]
Create separate <code class="highlighter-rouge">SqlFunctionCategory</code> values for table functions and macros (Julien Le Dem)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1043">CALCITE-1043</a>]
<code class="highlighter-rouge">RexOptUtil</code> does not support function table other than <code class="highlighter-rouge">SqlStdOperatorTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1095">CALCITE-1095</a>]
<code class="highlighter-rouge">NOT</code> precedence</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1148">CALCITE-1148</a>]
Trait conversion broken for <code class="highlighter-rouge">RelTraits</code> other than <code class="highlighter-rouge">Convention</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1278">CALCITE-1278</a>]
CalciteSignature’s ColumnMetaData for <code class="highlighter-rouge">DELETE</code> should be same as <code class="highlighter-rouge">INSERT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1283">CALCITE-1283</a>]
Nullability incorrectly assigned in <code class="highlighter-rouge">SqlTypeFactory.leastRestrictiveSqlType()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1284">CALCITE-1284</a>]
Move <code class="highlighter-rouge">Quidem</code> tests from <code class="highlighter-rouge">JdbcTest</code> into their own class</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1297">CALCITE-1297</a>]
<code class="highlighter-rouge">RelBuilder</code> should rename fields without creating an identity Project (Jark Wu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1302">CALCITE-1302</a>]
Create <code class="highlighter-rouge">SqlTypeName</code> values for each interval range, e.g. <code class="highlighter-rouge">YEAR_MONTH</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1305">CALCITE-1305</a>]
Case-insensitive table aliases and <code class="highlighter-rouge">GROUP BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1310">CALCITE-1310</a>]
Infer type of arguments to <code class="highlighter-rouge">BETWEEN</code> operator (Yiming Liu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1312">CALCITE-1312</a>]
Return type of <code class="highlighter-rouge">TIMESTAMP_ADD</code> applied to a <code class="highlighter-rouge">DATE</code> should be <code class="highlighter-rouge">TIMESTAMP</code> if unit is smaller than <code class="highlighter-rouge">DAY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1313">CALCITE-1313</a>]
Validator should derive type of expression in <code class="highlighter-rouge">ORDER BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1314">CALCITE-1314</a>]
Intermittent failure in <code class="highlighter-rouge">SqlParserTest.testGenerateKeyWords</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1321">CALCITE-1321</a>]
In-list to join optimization should have configurable in-list size (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1327">CALCITE-1327</a>]
Nested aggregate windowed query fails (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1330">CALCITE-1330</a>]
DB2 does not support character sets in data type</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1332">CALCITE-1332</a>]
JDBC adapter for DB2 should always use aliases for tables: <code class="highlighter-rouge">x.y.z AS z</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1333">CALCITE-1333</a>]
<code class="highlighter-rouge">AggFunctions</code> supported by <code class="highlighter-rouge">JdbcAggregate</code> should depend on <code class="highlighter-rouge">SqlKind</code>, instead of operator instance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1336">CALCITE-1336</a>]
Add view name to the <code class="highlighter-rouge">ViewExpander</code> (Julien Le Dem)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1337">CALCITE-1337</a>]
Lazy evaluate <code class="highlighter-rouge">RexCall</code> digests (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1340">CALCITE-1340</a>]
Window aggregates invalid error/error messages in some cases (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1344">CALCITE-1344</a>]
Incorrect inferred precision when <code class="highlighter-rouge">BigDecimal</code> value is less than 1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1346">CALCITE-1346</a>]
Invalid nested window aggregate query with alias (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1360">CALCITE-1360</a>]
Custom schema in file in current directory gives <code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1366">CALCITE-1366</a>]
Metadata provider should not pull predicates up through <code class="highlighter-rouge">GROUP BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1370">CALCITE-1370</a>]
In <code class="highlighter-rouge">SqlKind</code>, add <code class="highlighter-rouge">OTHER_DDL</code> to <code class="highlighter-rouge">DDL</code> enum set (Rajeshbabu Chintaguntla)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1372">CALCITE-1372</a>]
Calcite generate wrong field names in JDBC adapter</li>
</ul>
<h4 id="site-1-9-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1229">CALCITE-1229</a>]
Restore API and Test API links to site</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1325">CALCITE-1325</a>]
Druid adapter requires Guava 14.0 or higher</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1329">CALCITE-1329</a>]
As part of release, generate a file containing multiple digests</li>
</ul>
<h2 id="v1-8-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.8.0">1.8.0</a> / 2016-06-13</h2>
<p>This release adds adapters for
<a href="https://issues.apache.org/jira/browse/CALCITE-1253">Elasticsearch</a> and
<a href="https://issues.apache.org/jira/browse/CALCITE-1121">Druid</a>.
It is also now easier to
<a href="https://issues.apache.org/jira/browse/CALCITE-1259">make a JDBC connection based upon a single adapter</a>.</p>
<p>There are several new SQL features: <code class="highlighter-rouge">UNNEST</code> with
<a href="https://issues.apache.org/jira/browse/CALCITE-855">multiple arguments</a>,
<a href="https://issues.apache.org/jira/browse/CALCITE-1250">MAP arguments</a>
and <a href="https://issues.apache.org/jira/browse/CALCITE-1225">with a JOIN</a>;
a <a href="https://issues.apache.org/jira/browse/CALCITE-1168">DESCRIBE</a> statement;
and a <a href="https://issues.apache.org/jira/browse/CALCITE-1115">TRANSLATE</a>
function like the one in Oracle and PostgreSQL.
We also added support for
<a href="https://issues.apache.org/jira/browse/CALCITE-1120">SELECT without FROM</a>
(equivalent to the <code class="highlighter-rouge">VALUES</code> clause, and widely used in MySQL and PostgreSQL),
and added a
<a href="/docs/adapter.html#jdbc-connect-string-parameters">conformance</a>
parameter to allow you to selectively enable this and other SQL features.</p>
<p>And a couple of dozen bug-fixes and enhancements to planner rules and APIs.</p>
<p>Compatibility: This release is tested
on Linux, Mac OS X, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
Guava versions 14.0 to 19.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-8-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1177">CALCITE-1177</a>]
Extend list of supported time units in <code class="highlighter-rouge">EXTRACT</code>, <code class="highlighter-rouge">CEIL</code> and <code class="highlighter-rouge">FLOOR</code> functions
(Venki Korukanti)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1259">CALCITE-1259</a>]
Allow connecting to a single schema without writing a model</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-750">CALCITE-750</a>]
Support aggregates within windowed aggregates (Gautam Parai)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1250">CALCITE-1250</a>]
<code class="highlighter-rouge">UNNEST</code> applied to <code class="highlighter-rouge">MAP</code> data type (Johannes Schulte)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1253">CALCITE-1253</a>]
Elasticsearch adapter (Subhobrata Dey)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1228">CALCITE-1228</a>]
Bind parameters in <code class="highlighter-rouge">INSERT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1120">CALCITE-1120</a>]
<code class="highlighter-rouge">SELECT</code> without <code class="highlighter-rouge">FROM</code> (Jimmy Xiang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-855">CALCITE-855</a>]
<code class="highlighter-rouge">UNNEST</code> with multiple arguments</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1225">CALCITE-1225</a>]
<code class="highlighter-rouge">UNNEST</code> with <code class="highlighter-rouge">JOIN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1115">CALCITE-1115</a>]
Add <code class="highlighter-rouge">TRANSLATE</code> function with 3 parameters, like the one in Oracle (Javanshir
Yelchiyev)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1168">CALCITE-1168</a>]
Add <code class="highlighter-rouge">DESCRIBE</code> statement (Arina Ielchiieva)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1121">CALCITE-1121</a>]
Druid adapter
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1276">CALCITE-1276</a>]
In Druid adapter, deduce tables and columns if not specified</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1207">CALCITE-1207</a>]
Allow numeric connection properties, and ‘K’, ‘M’, ‘G’ suffixes</li>
</ul>
<h4 id="planner-rules-1-8-0">Planner rules</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1235">CALCITE-1235</a>]
Fully push down <code class="highlighter-rouge">LIMIT</code> + <code class="highlighter-rouge">OFFSET</code> in Cassandra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1216">CALCITE-1216</a>]
Rule to convert <code class="highlighter-rouge">Filter</code>-on-<code class="highlighter-rouge">Scan</code> to materialized view (Amogh Margoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1200">CALCITE-1200</a>]
Extend <code class="highlighter-rouge">RelOptUtil.splitJoinCondition</code> to handle <code class="highlighter-rouge">IS NOT DISTINCT FROM</code>
(Venki Korukanti)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1211">CALCITE-1211</a>]
Allow free use of <code class="highlighter-rouge">CassandraSort</code> for <code class="highlighter-rouge">LIMIT</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1210">CALCITE-1210</a>]
Allow UUID filtering in Cassandra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1182">CALCITE-1182</a>]
Add <code class="highlighter-rouge">ProjectRemoveRule</code> to pre-processing program of materialization
substitution</li>
</ul>
<h4 id="fixes-1-8-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1281">CALCITE-1281</a>]
Druid adapter wrongly returns all numeric values as <code class="highlighter-rouge">int</code> or <code class="highlighter-rouge">float</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1279">CALCITE-1279</a>]
Druid “select” query gives <code class="highlighter-rouge">ClassCastException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1277">CALCITE-1277</a>]
Rat fails on source distribution due to <code class="highlighter-rouge">git.properties</code>
</li>
<li>Update KEYS</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1252">CALCITE-1252</a>]
Handle <code class="highlighter-rouge">ANY</code> type in <code class="highlighter-rouge">RexBuilder.ensureType</code> and <code class="highlighter-rouge">TypeFactory.leastRestrictive</code>
(Mehand Baid, Minji Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1151">CALCITE-1151</a>]
Fix <code class="highlighter-rouge">SqlSetOption</code> to correctly handle <code class="highlighter-rouge">SqlOperator.createCall</code>
(Sudheesh Katkam, Minji Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1106">CALCITE-1106</a>]
Expose constructor for <code class="highlighter-rouge">ProjectJoinTransposeRule</code> (Minji Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1107">CALCITE-1107</a>]
Make <code class="highlighter-rouge">SqlSumEmptyIsZeroAggFunction</code> constructor public (Minji Kim)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1269">CALCITE-1269</a>]
Replace <code class="highlighter-rouge">IntList</code> with Guava <code class="highlighter-rouge">Ints</code> class</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1239">CALCITE-1239</a>]
Upgrade to avatica-1.8.0</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1266">CALCITE-1266</a>]
<code class="highlighter-rouge">RelBuilder.field</code> gets offsets wrong</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1264">CALCITE-1264</a>]
<code class="highlighter-rouge">Litmus</code> argument interpolation (Chris Baynes)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1245">CALCITE-1245</a>]
Allow <code class="highlighter-rouge">RelBuilder.scan</code> to take qualified table name (Chris Baynes)</li>
<li>Move code from <code class="highlighter-rouge">Enumerables</code> to <code class="highlighter-rouge">EnumerableDefaults</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1246">CALCITE-1246</a>]
Cleanup duplicate variables in <code class="highlighter-rouge">JoinPushThroughJoinRule</code> (Yi Xinglu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1241">CALCITE-1241</a>]
Add a Freemarker variable for adding non reserved keyword list to <code class="highlighter-rouge">Parser.jj</code>
template (Venki Korukanti)
<ul>
<li>Create a table in <code class="highlighter-rouge">SqlParserTest</code> of reserved keywords from various versions
of the SQL standard</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1150">CALCITE-1150</a>]
Add dynamic record type and dynamic star for schema-on-read table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1238">CALCITE-1238</a>]
Unparsing a query with <code class="highlighter-rouge">LIMIT</code> but no <code class="highlighter-rouge">ORDER BY</code> gives invalid SQL (Emmanuel
Bastien)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1230">CALCITE-1230</a>]
Add SQLSTATE reference data as <code class="highlighter-rouge">enum SqlState</code> in Avatica, and
deprecate <code class="highlighter-rouge">SqlStateCodes</code> in Calcite</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1199">CALCITE-1199</a>]
Incorrect trimming of <code class="highlighter-rouge">CHAR</code> when performing cast to <code class="highlighter-rouge">VARCHAR</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1219">CALCITE-1219</a>]
Add method <code class="highlighter-rouge">SqlOperatorBinding.isOperandLiteral()</code> (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1222">CALCITE-1222</a>]
<code class="highlighter-rouge">DatabaseMetaData.getColumnLabel</code> returns null when query has <code class="highlighter-rouge">ORDER BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1215">CALCITE-1215</a>]
Fix missing override in <code class="highlighter-rouge">CassandraTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1212">CALCITE-1212</a>]
Fix NPE on some Cassandra projects</li>
<li>Remove trailing spaces from all source files</li>
<li>Move HTTP utilities from Splunk adapter to core</li>
<li>Test case for
[<a href="https://issues.apache.org/jira/browse/PHOENIX-2767">PHOENIX-2767</a>],
non-constant in <code class="highlighter-rouge">IN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1166">CALCITE-1166</a>]
Disallow sub-classes of <code class="highlighter-rouge">RelOptRuleOperand</code>
</li>
<li>Remove all calls to deprecated methods</li>
<li>Add class <code class="highlighter-rouge">ConsList</code>
</li>
<li>More of [<a href="https://issues.apache.org/jira/browse/CALCITE-999">CALCITE-999</a>]
Clean up maven POM files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1204">CALCITE-1204</a>]
Fix invalid Javadoc and suppress checkstyle “errors”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1170">CALCITE-1170</a>]
Allow <code class="highlighter-rouge">SqlSetOperator</code> to be overridden, as a regular <code class="highlighter-rouge">SqlOperator</code> can
(Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-746">CALCITE-746</a>]
Allow apache-rat to be run outside of release process</li>
</ul>
<h4 id="site-1-8-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1273">CALCITE-1273</a>]
Following
[<a href="https://issues.apache.org/jira/browse/CALCITE-306">CALCITE-306</a>],
update references to <code class="highlighter-rouge">EnumerableTableAccessRel</code> to <code class="highlighter-rouge">EnumerableTableScan</code>
</li>
<li>Fix typo in SQL (Yi Xinglu)</li>
<li>Site: add committer, and post slides/video from Polyalgebra talk</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1203">CALCITE-1203</a>]
Update to github-pages-67</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1202">CALCITE-1202</a>]
Lock version of Jekyll for bundler</li>
<li>Site: add upcoming talks, and fix link to Apache phonebook</li>
</ul>
<h2 id="v1-7-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.7.0">1.7.0</a> / 2016-03-22</h2>
<p>This is the first Apache Calcite release since
<a href="/avatica/news/2016/03/03/separate-project/">Avatica became an independent project</a>.
Calcite now depends on <a href="/avatica/">Avatica</a> in the
same way as it does other libraries, via a Maven dependency. To see
Avatica-related changes, see the
<a href="/avatica/docs/history.html#v1-7-1">release notes for Avatica 1.7.1</a>.</p>
<p>We have <a href="https://issues.apache.org/jira/browse/CALCITE-1080">added</a>
an <a href="/docs/adapter.html">adapter</a> for
<a href="https://cassandra.apache.org/">Apache Cassandra</a>.
You can map a Cassandra keyspace into Calcite as a schema, Cassandra
CQL tables as tables, and execute SQL queries on them, which Calcite
converts into <a href="https://cassandra.apache.org/doc/cql/CQL.html">CQL</a>.
Cassandra can define and maintain materialized views but the adapter
goes further: it can transparently rewrite a query to use a
materialized view even if the view is not mentioned in the query.</p>
<p>This release adds an
<a href="https://issues.apache.org/jira/browse/CALCITE-1066">Oracle-compatibility mode</a>.
If you add <code class="highlighter-rouge">fun=oracle</code> to your JDBC connect string, you get all of
the standard operators and functions plus Oracle-specific functions
<code class="highlighter-rouge">DECODE</code>, <code class="highlighter-rouge">NVL</code>, <code class="highlighter-rouge">LTRIM</code>, <code class="highlighter-rouge">RTRIM</code>, <code class="highlighter-rouge">GREATEST</code> and <code class="highlighter-rouge">LEAST</code>. We look
forward to adding more functions, and compatibility modes for other
databases, in future releases.</p>
<p>We’ve replaced our use of JUL (<code class="highlighter-rouge">java.util.logging</code>)
with <a href="https://slf4j.org/">SLF4J</a>. SLF4J provides an API which Calcite can use
independent of the logging implementation. This ultimately provides additional
flexibility to users, allowing them to configure Calcite’s logging within their
own chosen logging framework. This work was done in
[<a href="https://issues.apache.org/jira/browse/CALCITE-669">CALCITE-669</a>].</p>
<p>For users experienced with configuring JUL in Calcite previously, there are some
differences as some the JUL logging levels do not exist in SLF4J: <code class="highlighter-rouge">FINE</code>,
<code class="highlighter-rouge">FINER</code>, and <code class="highlighter-rouge">FINEST</code>, specifically. To deal with this, <code class="highlighter-rouge">FINE</code> was mapped
to SLF4J’s <code class="highlighter-rouge">DEBUG</code> level, while <code class="highlighter-rouge">FINER</code> and <code class="highlighter-rouge">FINEST</code> were mapped to SLF4J’s <code class="highlighter-rouge">TRACE</code>.</p>
<p>Compatibility: This release is tested
on Linux, Mac OS X, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
Guava versions 12.0.1 to 19.0;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-7-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1124">CALCITE-1124</a>]
Add <code class="highlighter-rouge">TIMESTAMPADD</code>, <code class="highlighter-rouge">TIMESTAMPDIFF</code> functions (Arina Ielchiieva)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1066">CALCITE-1066</a>]
Add Oracle function table, and functions <code class="highlighter-rouge">DECODE</code>, <code class="highlighter-rouge">NVL</code>, <code class="highlighter-rouge">LTRIM</code>, <code class="highlighter-rouge">RTRIM</code>,
<code class="highlighter-rouge">GREATEST</code>, <code class="highlighter-rouge">LEAST</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1080">CALCITE-1080</a>]
Cassandra adapter (Michael Mior)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1062">CALCITE-1062</a>]
In validation, lookup a (possibly overloaded) operator from an operator
table (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-551">CALCITE-551</a>]
Sub-query inside aggregate function</li>
</ul>
<h4 id="planner-rules-1-7-0">Planner rules</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1158">CALCITE-1158</a>]
Make <code class="highlighter-rouge">AggregateRemoveRule</code> extensible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1116">CALCITE-1116</a>]
Extend <code class="highlighter-rouge">simplify</code> for reducing expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1104">CALCITE-1104</a>]
Materialized views in Cassandra (Michael Mior)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1130">CALCITE-1130</a>]
Add support for operators <code class="highlighter-rouge">IS NULL</code> and <code class="highlighter-rouge">IS NOT NULL</code> in
<code class="highlighter-rouge">RexImplicationChecker</code> (Amogh Margoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1129">CALCITE-1129</a>]
Extend <code class="highlighter-rouge">JoinUnionTransposeRule</code> to match <code class="highlighter-rouge">Union</code> instead of <code class="highlighter-rouge">LogicalUnion</code>
(Vasia Kalavri)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1109">CALCITE-1109</a>]
Fix up condition when pushing <code class="highlighter-rouge">Filter</code> through <code class="highlighter-rouge">Aggregate</code> (Amogh Margoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1100">CALCITE-1100</a>]
If constant reduction no-ops, don’t create a new <code class="highlighter-rouge">RelNode</code> (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1076">CALCITE-1076</a>]
Update <code class="highlighter-rouge">RelMdDistribution</code> to match other metadata APIs (Ted Xu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1056">CALCITE-1056</a>]
In <code class="highlighter-rouge">RelBuilder</code>, simplify predicates, and optimize away <code class="highlighter-rouge">WHERE FALSE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1059">CALCITE-1059</a>]
Not valid to convert <code class="highlighter-rouge">Aggregate</code> on empty to empty if its <code class="highlighter-rouge">GROUP BY</code> key is empty</li>
</ul>
<h4 id="fixes-1-7-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1147">CALCITE-1147</a>]
Allow multiple providers for the same kind of metadata</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1153">CALCITE-1153</a>]
Invalid cast created during SQL Join in Oracle (Chris Atkinson)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1146">CALCITE-1146</a>]
Wrong path in CSV example model (wanglan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1156">CALCITE-1156</a>]
Increase Jetty version to 9.2.15.v20160210</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1064">CALCITE-1064</a>]
Address problematic <code class="highlighter-rouge">maven-remote-resources-plugin</code>
</li>
<li>In <code class="highlighter-rouge">TimeUnit</code> add <code class="highlighter-rouge">WEEK</code>, <code class="highlighter-rouge">QUARTER</code>, <code class="highlighter-rouge">MICROSECOND</code> values, and change type of
<code class="highlighter-rouge">multiplier</code>
</li>
<li>Deprecate <code class="highlighter-rouge">SqlLiteral.SqlSymbol</code>; <code class="highlighter-rouge">SqlSymbol</code> can now wrap any enum</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1078">CALCITE-1078</a>]
Detach avatica from the core calcite Maven project
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1077">CALCITE-1077</a>]
Switch Calcite to the released Avatica 1.7.1</li>
<li>Update <code class="highlighter-rouge">groupId</code> when Calcite POMs reference Avatica modules</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1137">CALCITE-1137</a>]
Exclude Avatica from Calcite source release</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1111">CALCITE-1111</a>]
Upgrade Guava, and test on a range of Guava versions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1054">CALCITE-1054</a>]
Wrong code generation for <code class="highlighter-rouge">TIMESTAMP</code> values that may be <code class="highlighter-rouge">NULL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-604">CALCITE-604</a>]
Tune metadata by generating a dispatcher at runtime</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1063">CALCITE-1063</a>]
Flat lists for 4, 5, 6 elements</li>
<li>Add Orinoco schema (streaming retail data), accessible from Quidem scripts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1097">CALCITE-1097</a>]
Exception when executing query with too many aggregation columns (chenzhifa)</li>
<li>Add tests for leap days</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-553">CALCITE-553</a>]
In maven, enable compiler profiles by default</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1031">CALCITE-1031</a>]
In prepared statement, <code class="highlighter-rouge">CsvScannableTable.scan</code> is called twice</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1046">CALCITE-1046</a>]
Matchers for testing SQL query results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1083">CALCITE-1083</a>]
<code class="highlighter-rouge">SqlNode.equalsDeep</code> has O(n ^ 2) performance</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-998">CALCITE-998</a>]
Exception when calling <code class="highlighter-rouge">STDDEV_SAMP</code>, <code class="highlighter-rouge">STDDEV_POP</code> (Matthew Shaer)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1071">CALCITE-1071</a>]
Improve hash functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1072">CALCITE-1072</a>]
CSV adapter incorrectly parses <code class="highlighter-rouge">TIMESTAMP</code> values after noon (Chris Albright)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-669">CALCITE-669</a>]
Mass removal of Java Logging for SLF4J</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1068">CALCITE-1068</a>]
Deprecate <code class="highlighter-rouge">Stacks</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1067">CALCITE-1067</a>]
Test failures due to clashing temporary table names</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-864">CALCITE-864</a>]
Correlation variable has incorrect row type if it is populated by right side
of a Join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1021">CALCITE-1021</a>]
Upgrade Jackson</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-999">CALCITE-999</a>]
Clean up maven POM files</li>
</ul>
<h4 id="site-1-7-0">Web site and documentation</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1112">CALCITE-1112</a>]
“Powered by Calcite” page</li>
<li>Add SQL-Gremlin to Adapters page</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1090">CALCITE-1090</a>]
Revise Streaming SQL specification</li>
<li>Appoint Josh Elser to PMC</li>
<li>Add “Streaming SQL” talk</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-623">CALCITE-623</a>]
Add a small blurb to the site about Jenkins for CI</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1070">CALCITE-1070</a>]
Upgrade to new Apache logo</li>
<li>Document how to announce a release</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1074">CALCITE-1074</a>]
Delete old releases from mirroring system</li>
</ul>
<h2 id="v1-6-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.6.0">1.6.0</a> / 2016-01-22</h2>
<p>As usual in this release, there are new SQL features, improvements to
planning rules and Avatica, and lots of bug-fixes. We’ll spotlight a
couple of features make it easier to handle complex queries.</p>
<p>[<a href="https://issues.apache.org/jira/browse/CALCITE-816">CALCITE-816</a>]
allows you to represent sub-queries (<code class="highlighter-rouge">EXISTS</code>, <code class="highlighter-rouge">IN</code> and scalar) as
<code class="highlighter-rouge">RexSubQuery</code>, a kind of expression in the relational algebra. Until
now, the sql-to-rel converter was burdened with expanding sub-queries,
and people creating relational algebra directly (or via RelBuilder)
could only create ‘flat’ relational expressions. Now we have planner
rules to expand and de-correlate sub-queries.</p>
<p>Metadata is the fuel that powers query planning. It includes
traditional query-planning statistics such as cost and row-count
estimates, but also information such as which columns form unique
keys, unique and what predicates are known to apply to a relational
expression’s output rows. From the predicates we can deduce which
columns are constant, and following
[<a href="https://issues.apache.org/jira/browse/CALCITE-1023">CALCITE-1023</a>]
we can now remove constant columns from <code class="highlighter-rouge">GROUP BY</code> keys.</p>
<p>Metadata is often computed recursively, and it is hard to safely and
efficiently calculate metadata on a graph of <code class="highlighter-rouge">RelNode</code>s that is large,
frequently cyclic, and constantly changing.
[<a href="https://issues.apache.org/jira/browse/CALCITE-794">CALCITE-794</a>]
introduces a context to each metadata call. That context can detect
cyclic metadata calls and produce a safe answer to the metadata
request. It will also allow us to add finer-grained caching and
further tune the metadata layer.</p>
<p>Compatibility: This release is tested
on Linux, Mac OS X, Microsoft Windows;
using Oracle JDK 1.7, 1.8;
other software versions as specified in <code class="highlighter-rouge">pom.xml</code>.</p>
<h4 id="new-features-1-6-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-816">CALCITE-816</a>]
Represent sub-query as a <code class="highlighter-rouge">RexNode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-854">CALCITE-854</a>]
Implement <code class="highlighter-rouge">UNNEST ... WITH ORDINALITY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1003">CALCITE-1003</a>]
Utility to convert <code class="highlighter-rouge">RelNode</code> to SQL (Amogh Margoor)
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1010">CALCITE-1010</a>]
<code class="highlighter-rouge">FETCH/LIMIT</code> and <code class="highlighter-rouge">OFFSET</code> in RelToSqlConverter (Amogh Margoor)</li>
<li>Move code from <code class="highlighter-rouge">JdbcImplementor</code> and <code class="highlighter-rouge">JdbcRules</code> to new class
<code class="highlighter-rouge">SqlImplementor</code>
</li>
<li>Deduce dialect’s null collation from <code class="highlighter-rouge">DatabaseMetaData</code>
</li>
<li>Fix <code class="highlighter-rouge">RelToSqlConverterTest</code> on Windows</li>
</ul>
</li>
<li>Following
[<a href="https://issues.apache.org/jira/browse/CALCITE-897">CALCITE-897</a>],
empty string for <code class="highlighter-rouge">boolean</code> properties means true</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-992">CALCITE-992</a>]
Validate and resolve sequence reference as a <code class="highlighter-rouge">Table</code> object</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-968">CALCITE-968</a>]
Stream-to-relation and stream-to-stream joins (Milinda Pathirage)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1041">CALCITE-1041</a>]
User-defined function that returns <code class="highlighter-rouge">DATE</code> or <code class="highlighter-rouge">TIMESTAMP</code> value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-986">CALCITE-986</a>]
User-defined function with <code class="highlighter-rouge">DATE</code> or <code class="highlighter-rouge">TIMESTAMP</code> parameters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-958">CALCITE-958</a>]
Overloaded Table Functions with named arguments (Julien Le Dem)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-970">CALCITE-970</a>]
If <code class="highlighter-rouge">NULLS FIRST</code>/<code class="highlighter-rouge">NULLS LAST</code> not specified, sort <code class="highlighter-rouge">NULL</code> values high</li>
</ul>
<h4 id="avatica-1-6-0">Avatica features and bug-fixes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1040">CALCITE-1040</a>]
Differentiate better between arrays and scalars in protobuf</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-934">CALCITE-934</a>]
Use an OS-assigned ephemeral port for <code class="highlighter-rouge">CalciteRemoteDriverTest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-767">CALCITE-767</a>]
Create Avatica RPC endpoints for commit and rollback commands</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-983">CALCITE-983</a>]
Handle nulls in <code class="highlighter-rouge">ErrorResponse</code>’s protobuf representation better</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-989">CALCITE-989</a>]
Add server’s address in each response</li>
<li>Fix some bugs found by static analysis</li>
<li>Make all <code class="highlighter-rouge">equals</code> and <code class="highlighter-rouge">hashCode</code> methods uniform</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-962">CALCITE-962</a>]
Propagate the cause, not just the cause’s message, from <code class="highlighter-rouge">JdbcMeta</code>
</li>
</ul>
<h4 id="planner-rules-1-6-0">Planner rules</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1057">CALCITE-1057</a>]
Add <code class="highlighter-rouge">RelMetadataProvider</code> parameter to standard planner <code class="highlighter-rouge">Program</code>s</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1055">CALCITE-1055</a>]
<code class="highlighter-rouge">SubQueryRemoveRule</code> should create <code class="highlighter-rouge">Correlate</code>, not <code class="highlighter-rouge">Join</code>, for correlated
sub-queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-978">CALCITE-978</a>]
Enable customizing constant folding rule behavior when a <code class="highlighter-rouge">Filter</code> simplifies
to false (Jason Altekruse)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-977">CALCITE-977</a>]
Make the constant expression <code class="highlighter-rouge">Executor</code> configurable in <code class="highlighter-rouge">FrameworkConfig</code>
(Jason Altekruse)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1058">CALCITE-1058</a>]
Add method <code class="highlighter-rouge">RelBuilder.empty</code>, and rewrite LIMIT 0 and WHERE FALSE to it</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-996">CALCITE-996</a>]
Simplify predicate when we create a <code class="highlighter-rouge">Filter</code> operator</li>
<li>Simplify <code class="highlighter-rouge">RexProgram</code>, in particular <code class="highlighter-rouge">(NOT CASE ... END) IS TRUE</code>, which
occurs in when <code class="highlighter-rouge">NOT IN</code> is expanded</li>
<li>Fix variant of
[<a href="https://issues.apache.org/jira/browse/CALCITE-923">CALCITE-923</a>]
that occurs in <code class="highlighter-rouge">RelOptRulesTest.testPushFilterPastProject</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1023">CALCITE-1023</a>]
and
[<a href="https://issues.apache.org/jira/browse/CALCITE-1038">CALCITE-1038</a>]
Planner rule that removes <code class="highlighter-rouge">Aggregate</code> keys that are constant</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1018">CALCITE-1018</a>]
<code class="highlighter-rouge">SortJoinTransposeRule</code> not firing due to <code class="highlighter-rouge">getMaxRowCount(RelSubset)</code> returning
null</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1019">CALCITE-1019</a>]
<code class="highlighter-rouge">RelMdUtil.checkInputForCollationAndLimit()</code> was wrong with <code class="highlighter-rouge">alreadySorted</code>
check</li>
<li>Not safe to use ‘=’ for predicates on constant expressions that might be null</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-993">CALCITE-993</a>]
Pull up all constant expressions, not just literals, as predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1005">CALCITE-1005</a>]
Handle null in <code class="highlighter-rouge">getMaxRowCount</code> for <code class="highlighter-rouge">Aggregate</code> (Mike Hinchey)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-995">CALCITE-995</a>]
Sort transpose rules might fall in an infinite loop</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-987">CALCITE-987</a>]
Pushing <code class="highlighter-rouge">LIMIT 0</code> results in an infinite loop (Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-988">CALCITE-988</a>]
<code class="highlighter-rouge">FilterToProjectUnifyRule.invert(MutableRel, MutableRel, MutableProject)</code>
works incorrectly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-969">CALCITE-969</a>]
Composite <code class="highlighter-rouge">EnumerableSort</code> with <code class="highlighter-rouge">DESC</code> wrongly sorts <code class="highlighter-rouge">NULL</code> values low</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-959">CALCITE-959</a>]
Add description to <code class="highlighter-rouge">SortProjectTransposeRule</code>’s constructor</li>
</ul>
<h4 id="fixes-1-6-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1060">CALCITE-1060</a>]
Fix test deadlock by initializing <code class="highlighter-rouge">DriverManager</code> before registering <code class="highlighter-rouge">AlternatingDriver</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1047">CALCITE-1047</a>]
<code class="highlighter-rouge">ChunkList.clear</code> throws <code class="highlighter-rouge">AssertionError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1053">CALCITE-1053</a>]
CPU spin, <code class="highlighter-rouge">ReflectiveRelMetadataProvider.apply</code> waiting for <code class="highlighter-rouge">HashMap.get</code>
</li>
<li>Upgrade toolbox, to fix line length issue on Windows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1051">CALCITE-1051</a>]
Underflow exception due to scaling IN clause literals (Frankie Bollaert)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-975">CALCITE-975</a>]
Allow Planner to return validated row type together with SqlNode</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1020">CALCITE-1020</a>]
Add <code class="highlighter-rouge">MILLISECOND</code> in <code class="highlighter-rouge">TimeUnit</code> (Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-794">CALCITE-794</a>]
Detect cycles when computing statistics
(<strong>This is a breaking change</strong>.)</li>
<li>Tune algorithm that deduces the return type of <code class="highlighter-rouge">AND</code> expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-842">CALCITE-842</a>]
Decorrelator gets field offsets confused if fields have been trimmed</li>
<li>Fix <code class="highlighter-rouge">NullPointerException</code> in <code class="highlighter-rouge">SqlJoin.toString()</code>
</li>
<li>Add <code class="highlighter-rouge">ImmutableBitSet.rebuild()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-915">CALCITE-915</a>]
Tests now unset <code class="highlighter-rouge">ThreadLocal</code> values on exit</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1036">CALCITE-1036</a>]
<code class="highlighter-rouge">DiffRepository</code> should not insert new resources at the end of the repository</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-955">CALCITE-955</a>]
<code class="highlighter-rouge">Litmus</code> (continuation-passing style for methods that check invariants)</li>
<li>
<code class="highlighter-rouge">RelBuilder.project</code> now does nothing if asked to project the identity with
the same field names</li>
<li>Deprecate some <code class="highlighter-rouge">Util</code> methods, and upgrade last Maven modules to JDK 1.7</li>
<li>Document <code class="highlighter-rouge">RelOptPredicateList</code>
</li>
<li>Add <code class="highlighter-rouge">ImmutableNullableList.copyOf(Iterable)</code>
</li>
<li>Fix “endPosTable already set” error from <code class="highlighter-rouge">javac</code>
</li>
<li>Add benchmark of <code class="highlighter-rouge">Parser.create(sql).parseQuery()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1042">CALCITE-1042</a>]
Ensure that <code class="highlighter-rouge">FILTER</code> is <code class="highlighter-rouge">BOOLEAN NOT NULL</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1039">CALCITE-1039</a>]
Assign a <code class="highlighter-rouge">SqlKind</code> value for each built-in aggregate function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1030">CALCITE-1030</a>]
JSON <code class="highlighter-rouge">ModelHandler</code> calling <code class="highlighter-rouge">SchemaPlus.setCacheEnabled()</code> causes
<code class="highlighter-rouge">UnsupportedOperationException</code> when using <code class="highlighter-rouge">SimpleCalciteSchema</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1028">CALCITE-1028</a>]
Move populate materializations after sql-to-rel conversion</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1034">CALCITE-1034</a>]
Use a custom checker for code style rules that Checkstyle cannot express</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1032">CALCITE-1032</a>]
Verify javadoc of private methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1015">CALCITE-1015</a>]
<code class="highlighter-rouge">OFFSET 0</code> causes <code class="highlighter-rouge">AssertionError</code> (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1024">CALCITE-1024</a>]
In a planner test, if a rule should have no effect, state that explicitly</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1016">CALCITE-1016</a>]
<code class="highlighter-rouge">GROUP BY *constant*</code> on empty relation should return 0 rows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1022">CALCITE-1022</a>]
Rename <code class="highlighter-rouge">.oq</code> Quidem files to <code class="highlighter-rouge">.iq</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-980">CALCITE-980</a>]
Fix <code class="highlighter-rouge">AND</code> and <code class="highlighter-rouge">OR</code> implementation in <code class="highlighter-rouge">Enumerable</code> convention</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-459">CALCITE-459</a>]
When parsing SQL, allow single line comment on last line (Zhen Wang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1009">CALCITE-1009</a>]
<code class="highlighter-rouge">SelfPopulatingList</code> is not thread-safe</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1008">CALCITE-1008</a>]
Replace <code class="highlighter-rouge">Closeable</code> with <code class="highlighter-rouge">AutoCloseable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1001">CALCITE-1001</a>]
Upgrade to quidem-0.7</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-990">CALCITE-990</a>]
In <code class="highlighter-rouge">VolcanoPlanner</code>, populate <code class="highlighter-rouge">RelOptRuleCall.nodeInputs</code> for operands of type
“any”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-966">CALCITE-966</a>]
<code class="highlighter-rouge">VolcanoPlanner</code> now clears <code class="highlighter-rouge">ruleNames</code> in order to avoid rule name
conflicting error</li>
<li>Factor user-defined function tests from <code class="highlighter-rouge">JdbcTest</code> to <code class="highlighter-rouge">UdfTest</code>, and classes
into <code class="highlighter-rouge">Smalls</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-974">CALCITE-974</a>]
Exception while validating <code class="highlighter-rouge">DELETE</code> (Yuri Au Yong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-964">CALCITE-964</a>]
Rename <code class="highlighter-rouge">timezone</code> connection property to <code class="highlighter-rouge">timeZone</code>
</li>
</ul>
<h4 id="site-1-6-0">Web site and documentation</h4>
<ul>
<li>Avatica
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1033">CALCITE-1033</a>]
Introduce Avatica protobuf documentation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-1029">CALCITE-1029</a>]
Add “purpose” descriptions to Avatica JSON docs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-984">CALCITE-984</a>]
Massive cleanup of Avatica JSON docs</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-861">CALCITE-861</a>]
Be explicit that <code class="highlighter-rouge">mvn test</code> needs to be invoked</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-997">CALCITE-997</a>]
Document keywords</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-979">CALCITE-979</a>]
Broken links in web site</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-961">CALCITE-961</a>]
Web site: Add downloads and Apache navigation links</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-960">CALCITE-960</a>]
Download links for pgp, md5, <code class="highlighter-rouge">KEYS</code> files, and direct from mirrors</li>
<li>Remove embedded date-stamps from javadoc; add javadoc for test classes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-965">CALCITE-965</a>]
Link to downloads page from each release news item</li>
</ul>
<h2 id="v1-5-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.5.0">1.5.0</a> / 2015-11-06</h2>
<p>Our first release as a top-level Apache project!</p>
<p>Avatica has undergone major improvements,
including a new RPC layer that uses
<a href="https://developers.google.com/protocol-buffers/">protocol buffers</a>,
support for DML statements, better support for bind variables and
unique identifiers for connections and statements.</p>
<p>There are lots of improvements to planner rules, and the logic
that replaces relational expressions with equivalent materializations.</p>
<p>We continue to find more uses for
<a href="/docs/algebra.html">RelBuilder</a>.
We now recommend that you use <code class="highlighter-rouge">RelBuilder</code> whenever you create
relational expressions within a planner rule; the rule can then be
re-used to create different sub-classes of relational expression, and
the builder will perform simple optimizations automatically.</p>
<p>Using <code class="highlighter-rouge">RelBuilder</code> we built Piglet,
a subset of the classic Hadoop language
<a href="https://pig.apache.org/">Pig</a>.
Pig is particularly interesting because it makes heavy use of nested
multi-sets. You can follow this example to implement your own query
language, and immediately taking advantage of Calcite’s back-ends and
optimizer rules. It’s all just algebra, after all!</p>
<h4 id="new-features-1-5-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-911">CALCITE-911</a>]
Add a variant of <code class="highlighter-rouge">CalciteSchema</code> that does not cache sub-objects</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-845">CALCITE-845</a>]
Derive <code class="highlighter-rouge">SUM</code>’s return type by a customizable policy (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-916">CALCITE-916</a>]
Support table function that implements <code class="highlighter-rouge">ScannableTable</code>
<ul>
<li>Example table function that generates mazes and their solutions</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-941">CALCITE-941</a>]
Named, optional and <code class="highlighter-rouge">DEFAULT</code> arguments to function calls;
support named arguments when calling table functions and table macros</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-910">CALCITE-910</a>]
Improve handling of <code class="highlighter-rouge">ARRAY</code>, <code class="highlighter-rouge">MULTISET</code>, <code class="highlighter-rouge">STRUCT</code> types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-879">CALCITE-879</a>]
<code class="highlighter-rouge">COLLECT</code> aggregate function</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-546">CALCITE-546</a>]
Allow table, column and field called ‘*’</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-893">CALCITE-893</a>]
Theta join in JDBC adapter</li>
<li>Linq4j: Implement <code class="highlighter-rouge">EnumerableDefaults</code> methods (MiNG)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-823">CALCITE-823</a>]
Add <code class="highlighter-rouge">ALTER ... RESET</code> statement (Sudheesh Katkam)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-881">CALCITE-881</a>]
Allow schema.table.column references in <code class="highlighter-rouge">GROUP BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-852">CALCITE-852</a>]
DDL statements</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-851">CALCITE-851</a>]
Add original SQL string as a field in the parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-819">CALCITE-819</a>]
Add <code class="highlighter-rouge">RelRoot</code>, a contract for the result of a relational expression</li>
</ul>
<h4 id="avatica-1-5-0">Avatica features and bug-fixes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-951">CALCITE-951</a>]
Print the server-side stack in the local exception (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-936">CALCITE-936</a>]
Make HttpServer configurable (Navis Ryu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-903">CALCITE-903</a>]
Enable Avatica client to recover from missing server-side state (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-921">CALCITE-921</a>]
Fix incorrectness when calling <code class="highlighter-rouge">getString()</code> on binary data (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-913">CALCITE-913</a>]
Construct proper <code class="highlighter-rouge">ColumnMetaData</code> for arrays (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-871">CALCITE-871</a>]
In <code class="highlighter-rouge">JdbcMeta</code>, register each statement using an id from a generator (Bruno
Dumon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-645">CALCITE-645</a>]
Implement <code class="highlighter-rouge">AvaticaSqlException</code> to pass server-side exception information to
clients (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-912">CALCITE-912</a>]
Add Avatica <code class="highlighter-rouge">OpenConnectionRequest</code> (Bruno Dumon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-919">CALCITE-919</a>]
Avoid <code class="highlighter-rouge">setScale</code> on <code class="highlighter-rouge">BigDecimal</code> when scale is 0 (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-927">CALCITE-927</a>]
Call finagle for all calls that return ResultSetResponses (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-705">CALCITE-705</a>]
DML in Avatica, and split <code class="highlighter-rouge">Execute</code> out from <code class="highlighter-rouge">Fetch</code> request (Yeong Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-914">CALCITE-914</a>]
Add <code class="highlighter-rouge">JsonSubType</code> for <code class="highlighter-rouge">ExecuteResponse</code>, and fix JSON docs (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-905">CALCITE-905</a>]
<code class="highlighter-rouge">getTables</code> returns empty result in <code class="highlighter-rouge">JdbcMeta</code> (Jan Van Besien)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-906">CALCITE-906</a>]
Avatica <code class="highlighter-rouge">JdbcMeta</code> statement IDs are not unique</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-866">CALCITE-866</a>]
Break out Avatica documentation and add JSON reference (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-843">CALCITE-843</a>]
<code class="highlighter-rouge">AvaticaConnection.getAutoCommit</code> throws <code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-840">CALCITE-840</a>]
Protocol buffer serialization over HTTP for Avatica Server (Josh Elser)</li>
</ul>
<h4 id="materializations-1-5-0">Materializations</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-952">CALCITE-952</a>]
Organize applicable materializations in reversed topological order (Maryann
Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-890">CALCITE-890</a>]
Register all combinations of materialization substitutions (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-891">CALCITE-891</a>]
When substituting materializations, match <code class="highlighter-rouge">TableScan</code> without <code class="highlighter-rouge">Project</code>
(Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-890">CALCITE-890</a>]
Register all combinations of materialization substitutions (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-925">CALCITE-925</a>]
Match materialized views when predicates contain strings and ranges (Amogh
Margoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-793">CALCITE-793</a>]
Planner requires unnecessary collation when using materialized view (Maryann
Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-825">CALCITE-825</a>]
Allow user to specify sort order of an <code class="highlighter-rouge">ArrayTable</code>
</li>
</ul>
<h4 id="planner-rules-1-5-0">Planner rules</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-953">CALCITE-953</a>]
Improve <code class="highlighter-rouge">RelMdPredicates</code> to deal with <code class="highlighter-rouge">RexLiteral</code> (Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-939">CALCITE-939</a>]
Variant of <code class="highlighter-rouge">SortUnionTransposeRule</code> for order-preserving <code class="highlighter-rouge">Union</code>
(Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-931">CALCITE-931</a>]
Wrong collation trait in <code class="highlighter-rouge">SortJoinTransposeRule</code> for right joins
(Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-938">CALCITE-938</a>]
More accurate rowCount for <code class="highlighter-rouge">Aggregate</code> applied to already unique keys
(Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-935">CALCITE-935</a>]
Improve how <code class="highlighter-rouge">ReduceExpressionsRule</code> handles duplicate constraints (Pengcheng
Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-922">CALCITE-922</a>]
Extract value of an <code class="highlighter-rouge">INTERVAL</code> literal (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-889">CALCITE-889</a>]
Implement <code class="highlighter-rouge">SortUnionTransposeRule</code> (Pengcheng Xiong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-909">CALCITE-909</a>]
Make <code class="highlighter-rouge">ReduceExpressionsRule</code> extensible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-856">CALCITE-856</a>]
Make more rules extensible</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-902">CALCITE-902</a>]
Match nullability when reducing expressions in a <code class="highlighter-rouge">Project</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-895">CALCITE-895</a>]
Simplify “(<code class="highlighter-rouge">CASE</code><code class="highlighter-rouge">END</code>) = constant” inside <code class="highlighter-rouge">AND</code> or <code class="highlighter-rouge">OR</code> (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-828">CALCITE-828</a>]
Use RelBuilder in rules rather than type-specific RelNode factories</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-892">CALCITE-892</a>]
Implement <code class="highlighter-rouge">SortJoinTransposeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-876">CALCITE-876</a>]
After pushing <code class="highlighter-rouge">LogicalProject</code> past <code class="highlighter-rouge">LogicalWindow</code>, adjust references to
constants properly (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-844">CALCITE-844</a>]
Push <code class="highlighter-rouge">Project</code> through <code class="highlighter-rouge">Window</code> (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-841">CALCITE-841</a>]
Redundant windows when window function arguments are expressions (Hsuan-Yi
Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-846">CALCITE-846</a>]
Push <code class="highlighter-rouge">Aggregate</code> with <code class="highlighter-rouge">Filter</code> through <code class="highlighter-rouge">Union(all)</code>
</li>
</ul>
<h4 id="rel-builder-1-5-0">RelBuilder and Piglet</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-933">CALCITE-933</a>]
<code class="highlighter-rouge">RelBuilder.scan()</code> now gives a nice exception if the table does not exist
(Andy Grove)</li>
<li>Fix Piglet <code class="highlighter-rouge">DUMP</code> applied to multisets and structs</li>
<li>Multisets and <code class="highlighter-rouge">COLLECT</code> in Piglet</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-785">CALCITE-785</a>]
Add “Piglet”, a subset of Pig Latin on top of Calcite algebra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-869">CALCITE-869</a>]
Add <code class="highlighter-rouge">VALUES</code> command to Piglet</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-868">CALCITE-868</a>]
Add API to execute queries expressed as <code class="highlighter-rouge">RelNode</code>
</li>
<li>In RelBuilder, build expressions by table alias</li>
</ul>
<h4 id="fixes-1-5-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-948">CALCITE-948</a>]
Indicator columns not preserved by <code class="highlighter-rouge">RelFieldTrimmer</code>
</li>
<li>Fix Windows issues (line endings and checkstyle suppressions)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-937">CALCITE-937</a>]
User-defined function within view</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-926">CALCITE-926</a>]
Rules fail to match because of missing link to parent equivalence set
(Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-908">CALCITE-908</a>]
Bump protobuf to 3.0.0-beta-1, fix deprecations and update docs (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-932">CALCITE-932</a>]
Fix muddled columns when <code class="highlighter-rouge">RelFieldTrimmer</code> is applied to <code class="highlighter-rouge">Aggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-930">CALCITE-930</a>]
Now Calcite is a top-level project, remove references to “incubating”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-929">CALCITE-929</a>]
Calls to <code class="highlighter-rouge">AbstractRelNode</code> may result in NPE</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-923">CALCITE-923</a>]
Type mismatch when converting <code class="highlighter-rouge">LEFT JOIN</code> to <code class="highlighter-rouge">INNER</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-666">CALCITE-666</a>]
Anti-semi-joins against JDBC adapter give wrong results (Yeong Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-918">CALCITE-918</a>]
<code class="highlighter-rouge">createProject</code> in <code class="highlighter-rouge">RelOptUtil</code> should uniquify field names</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-792">CALCITE-792</a>]
Obsolete <code class="highlighter-rouge">RelNode.isKey</code> and <code class="highlighter-rouge">isDistinct</code> methods</li>
<li>Allow FlatLists of different length to be compared</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-898">CALCITE-898</a>]
Type of ‘Java<long> * `INTEGER`' should be `BIGINT`</long>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-894">CALCITE-894</a>]
Do not generate redundant column alias for the left relation when
translating <code class="highlighter-rouge">IN</code> sub-query (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-897">CALCITE-897</a>]
Enable debugging using “-Dcalcite.debug”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-885">CALCITE-885</a>]
Add Oracle test environment</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-888">CALCITE-888</a>]
Overlay window loses <code class="highlighter-rouge">PARTITION BY</code> list (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-886">CALCITE-886</a>]
System functions in <code class="highlighter-rouge">GROUP BY</code> clause</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-860">CALCITE-860</a>]
Correct LICENSE file for generated web site</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-882">CALCITE-882</a>]
Allow web site to be deployed not as the root directory of the web server
(Josh Elser)</li>
<li>Upgrade parent POM to apache-17</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-687">CALCITE-687</a>]
Synchronize HSQLDB at a coarse level using a Lock (Josh Elser)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-870">CALCITE-870</a>]
Remove copyright content from archers.json</li>
<li>Replace <code class="highlighter-rouge">Stack</code> with <code class="highlighter-rouge">ArrayDeque</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-874">CALCITE-874</a>]
<code class="highlighter-rouge">ReflectiveRelMetadataProvider</code> is not thread-safe</li>
<li>Add <code class="highlighter-rouge">LogicalWindow.create()</code>
</li>
<li>Add <code class="highlighter-rouge">ImmutableBitSet.get(int, int)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-865">CALCITE-865</a>]
Unknown table type causes <code class="highlighter-rouge">NullPointerException</code> in <code class="highlighter-rouge">JdbcSchema</code>
<ul>
<li>Add table types used by Oracle and DB2</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-862">CALCITE-862</a>]
<code class="highlighter-rouge">JdbcSchema</code> gives <code class="highlighter-rouge">NullPointerException</code> on non-standard column type (Marc
Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-847">CALCITE-847</a>]
<code class="highlighter-rouge">AVG</code> window function in <code class="highlighter-rouge">GROUP BY</code> gives <code class="highlighter-rouge">AssertionError</code> (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-827">CALCITE-827</a>]
Calcite incorrectly permutes columns of <code class="highlighter-rouge">OVER</code> query (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-809">CALCITE-809</a>]
<code class="highlighter-rouge">TableScan</code> does not support large/infinite scans (Jesse Yates)</li>
<li>Lazily create exception only when it needs to be thrown (Marc Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-812">CALCITE-812</a>]
Make JSON reader and writer use properly quoted key names (Marc
Prud’hommeaux)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-820">CALCITE-820</a>]
Validate that window functions have <code class="highlighter-rouge">OVER</code> clause (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-824">CALCITE-824</a>]
Type inference when converting <code class="highlighter-rouge">IN</code> clause to semijoin (Josh Wills)</li>
</ul>
<h2 id="v1-4-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.4.0-incubating">1.4.0-incubating</a> / 2015-09-02</h2>
<p>In addition to a large number of bug-fixes and minor enhancements,
this release includes improvements to lattices and materialized views,
and adds a builder API so that you can easily create relational
algebra expressions.</p>
<h4 id="new-features-1-4-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-748">CALCITE-748</a>]
Add <code class="highlighter-rouge">RelBuilder</code>, builder for expressions in relational algebra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-758">CALCITE-758</a>]
Use more than one lattice in the same query (Rajat Venkatesh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-761">CALCITE-761</a>]
Pre-populated materializations (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-786">CALCITE-786</a>]
Detect if materialized view can be used to rewrite a query in
non-trivial cases (Amogh Margoor)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-732">CALCITE-732</a>]
Implement multiple distinct-<code class="highlighter-rouge">COUNT</code> using <code class="highlighter-rouge">GROUPING SETS</code>
</li>
<li>Add various <code class="highlighter-rouge">BitSet</code> and <code class="highlighter-rouge">ImmutableBitSet</code> utilities</li>
</ul>
<h4 id="site-1-4-0">Web site updates</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-810">CALCITE-810</a>]
Add committers’ organizations to the web site</li>
<li>Add news item (XLDB best lighting talk), and some talks</li>
<li>Fix javadoc links</li>
<li>Add license notice for web site</li>
<li>Wrap file header in HTML comments</li>
<li>How to release</li>
<li>Move disclaimer out of every page’s footer and into home page and downloads
page</li>
<li>For web site files, add license headers where possible, apache-rat
exclusions otherwise</li>
<li>Calcite DOAP</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-355">CALCITE-355</a>]
Web site</li>
</ul>
<h4 id="fixes-1-4-0">Bug-fixes, API changes and minor enhancements</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-741">CALCITE-741</a>]
Ensure that the source release’s <code class="highlighter-rouge">DEPENDENCIES</code> file includes all module
dependencies</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-743">CALCITE-743</a>]
Ensure only a single source assembly is executed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-850">CALCITE-850</a>]
Remove push down expressions from <code class="highlighter-rouge">FilterJoinRule</code> and create a new rule
for it</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-834">CALCITE-834</a>]
<code class="highlighter-rouge">StackOverflowError</code> getting predicates from the metadata provider</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-833">CALCITE-833</a>]
<code class="highlighter-rouge">RelOptUtil.splitJoinCondition</code> incorrectly splits a join condition
(Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-822">CALCITE-822</a>]
Add a unit test case to test collation of <code class="highlighter-rouge">LogicalAggregate</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-822">CALCITE-822</a>]
Revert incorrect <code class="highlighter-rouge">LogicalAggregate</code> collation inferring logic made in
[<a href="https://issues.apache.org/jira/browse/CALCITE-783">CALCITE-783</a>]
(Milinda Pathirage)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-826">CALCITE-826</a>]
Use <code class="highlighter-rouge">ProjectFactory</code> in <code class="highlighter-rouge">AggregateJoinTranposeRule</code> and <code class="highlighter-rouge">FilterJoinRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-821">CALCITE-821</a>]
<code class="highlighter-rouge">Frameworks</code> gives NPE when <code class="highlighter-rouge">FrameworkConfig</code> has no default schema</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-811">CALCITE-811</a>]
Extend <code class="highlighter-rouge">JoinProjectTransposeRule</code> with option to support outer joins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-805">CALCITE-805</a>]
Add support for using an alternative grammar specification for left and
right curly braces. Additionally, add support for including addition token
manager declarations</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-803">CALCITE-803</a>]
Add <code class="highlighter-rouge">MYSQL_ANSI</code> Lexing policy</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-717">CALCITE-717</a>]
Compare BINARY and VARBINARY on unsigned byte values (Low Chin Wei)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-814">CALCITE-814</a>]
<code class="highlighter-rouge">RexBuilder</code> reverses precision and scale of <code class="highlighter-rouge">DECIMAL</code> literal</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-813">CALCITE-813</a>]
Upgrade <code class="highlighter-rouge">updateCount</code>, <code class="highlighter-rouge">maxRows</code> from int to long</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-714">CALCITE-714</a>]
When de-correlating, push join condition into sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-751">CALCITE-751</a>]
Push aggregate with aggregate functions through join</li>
<li>Add <code class="highlighter-rouge">RelBuilder.avg</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-806">CALCITE-806</a>]
<code class="highlighter-rouge">ROW_NUMBER</code> should emit distinct values</li>
<li>Document JSON model, making javadoc consistent with the model reference</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-808">CALCITE-808</a>]
Optimize <code class="highlighter-rouge">ProjectMergeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-791">CALCITE-791</a>]
Optimize <code class="highlighter-rouge">RelOptUtil.pushFilterPastProject</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-783">CALCITE-783</a>]
Infer collation of <code class="highlighter-rouge">Project</code> using monotonicity (Milinda Pathirage)</li>
<li>Change the argument types of <code class="highlighter-rouge">SqlOperator.getMonotonicity</code> to allow it to be
used for <code class="highlighter-rouge">RexNode</code> as well as <code class="highlighter-rouge">SqlNode</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-800">CALCITE-800</a>]
Window function defined within another window function should be invalid
(Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-787">CALCITE-787</a>]
Star table wrongly assigned to materialized view (Amogh Margoor)</li>
<li>Remove duplicate resources from XML test reference files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-795">CALCITE-795</a>]
Loss of precision when sending a decimal number via the remote JSON
service (Lukáš Lalinský)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-774">CALCITE-774</a>]
When <code class="highlighter-rouge">GROUP BY</code> is present, ensure that window function operands only
refer to grouping keys (Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-799">CALCITE-799</a>]
Incorrect result for <code class="highlighter-rouge">HAVING count(*) &gt; 1</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-801">CALCITE-801</a>]
<code class="highlighter-rouge">NullPointerException</code> using <code class="highlighter-rouge">USING</code> on table alias with column aliases</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-390">CALCITE-390</a>]
Infer predicates for semi-join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-789">CALCITE-789</a>]
<code class="highlighter-rouge">MetaImpl.MetaCatalog</code> should expose <code class="highlighter-rouge">TABLE_CAT</code> instead of
<code class="highlighter-rouge">TABLE_CATALOG</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-752">CALCITE-752</a>]
Add back sqlline as a dependency to csv example</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-780">CALCITE-780</a>]
HTTP error 413 when sending a long string to the Avatica server</li>
<li>In <code class="highlighter-rouge">RelBuilder</code>, calling <code class="highlighter-rouge">sort</code> then <code class="highlighter-rouge">limit</code> has same effect as calling
<code class="highlighter-rouge">sortLimit</code>
</li>
<li>Add <code class="highlighter-rouge">Ord.reverse</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-788">CALCITE-788</a>]
Allow <code class="highlighter-rouge">EnumerableJoin</code> to be sub-classed (Li Yang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-280">CALCITE-280</a>]
<code class="highlighter-rouge">BigDecimal</code> underflow (Li Yang)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-763">CALCITE-763</a>]
Missing translation from <code class="highlighter-rouge">Sort</code> to <code class="highlighter-rouge">MutableSort</code> (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-770">CALCITE-770</a>]
Ignore window aggregates and ranking functions when finding aggregate
functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-765">CALCITE-765</a>]
Set <code class="highlighter-rouge">Content-Type</code> from the RPC server to <code class="highlighter-rouge">application/json</code> (Lukáš Lalinský)</li>
<li>Fix Windows line-endings in <code class="highlighter-rouge">RelBuilderTest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-727">CALCITE-727</a>]
Constant folding involving <code class="highlighter-rouge">CASE</code> and <code class="highlighter-rouge">NULL</code>
</li>
<li>Related to
[<a href="https://issues.apache.org/jira/browse/CALCITE-758">CALCITE-758</a>],
speed up matching by not considering tiles separately from other
materialized views</li>
<li>Test case and workaround for
[<a href="https://issues.apache.org/jira/browse/CALCITE-760">CALCITE-760</a>]
<code class="highlighter-rouge">Aggregate</code> recommender blows up if row count estimate is too high</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-753">CALCITE-753</a>]
<code class="highlighter-rouge">Aggregate</code> operators may derive row types with duplicate column names</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-457">CALCITE-457</a>]
Push condition of non-ansi join into join operator</li>
<li>Change jsonRequest encoding to UTF-8 (Guitao Ding)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-757">CALCITE-757</a>]
Fix expansion of view of another view (Venki Korukanti)</li>
<li>Fix coverity warnings</li>
<li>Remove deprecated <code class="highlighter-rouge">SqlTypeName</code> methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-754">CALCITE-754</a>]
Validator error when resolving <code class="highlighter-rouge">OVER</code> clause of <code class="highlighter-rouge">JOIN</code> query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-429">CALCITE-429</a>]
Cardinality provider for use by lattice algorithm</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-740">CALCITE-740</a>]
Redundant <code class="highlighter-rouge">WHERE</code> clause causes wrong result in MongoDB adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-665">CALCITE-665</a>]
<code class="highlighter-rouge">ClassCastException</code> in MongoDB adapter</li>
<li>Separate <code class="highlighter-rouge">TableFactory</code> from suggested table name, so one <code class="highlighter-rouge">TableFactory</code> can be
used for several tables</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-749">CALCITE-749</a>]
Add <code class="highlighter-rouge">MaterializationService.TableFactory</code> (Rajat Venkatesh)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-718">CALCITE-718</a>]
Enable fetch to work for <code class="highlighter-rouge">Statement.execute()</code> for Avatica (Xavier Leong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-712">CALCITE-712</a>]
Obey <code class="highlighter-rouge">setMaxRows</code> for statement execute (Xavier Leong)</li>
<li>Add <code class="highlighter-rouge">LoggingLocalJsonService</code>, to make it easier to test that JDBC requests
cause the right RPCs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-708">CALCITE-708</a>]
Implement <code class="highlighter-rouge">DatabaseMetaData.getTypeInfo</code> (Xavier Leong)</li>
<li>Enable Travis CI on new-master branch and bug-fix branches named
“NNN-description”</li>
<li>Clean up</li>
<li>Upgrade tpcds</li>
<li>Make <code class="highlighter-rouge">JdbcTest.testVersion</code> more permissive, so that <code class="highlighter-rouge">version.major</code> and
<code class="highlighter-rouge">version.minor</code> can be set just before a release, rather than just after as at
present</li>
</ul>
<h2 id="v1-3-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.3.0-incubating">1.3.0-incubating</a> / 2015-05-30</h2>
<p>Mainly bug-fixes, but this release adds support for
<a href="https://issues.apache.org/jira/browse/CALCITE-505">modifiable views</a>
and
<a href="https://issues.apache.org/jira/browse/CALCITE-704">filtered aggregate functions</a>
and various improvements to Avatica.</p>
<h4 id="new-features-1-3-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-505">CALCITE-505</a>]
Support modifiable view</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-704">CALCITE-704</a>]
<code class="highlighter-rouge">FILTER</code> clause for aggregate functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-522">CALCITE-522</a>]
In remote JDBC driver, transmit static database properties as a map</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-661">CALCITE-661</a>]
Remote fetch in Calcite JDBC driver</li>
<li>Support Date, Time, Timestamp parameters</li>
</ul>
<h4 id="api-1-3-0">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-722">CALCITE-722</a>]
Rename markdown files to lower-case</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-697">CALCITE-697</a>]
Obsolete class <code class="highlighter-rouge">RelOptQuery</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-693">CALCITE-693</a>]
Allow clients to control creation of <code class="highlighter-rouge">RelOptCluster</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-691">CALCITE-691</a>]
Allow projects to supply alternate SQL parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-675">CALCITE-675</a>]
Enable <code class="highlighter-rouge">AggregateProjectMergeRule</code> in standard rule set</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-679">CALCITE-679</a>]
Factory method for <code class="highlighter-rouge">SemiJoin</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-674">CALCITE-674</a>]
Add a <code class="highlighter-rouge">SWAP_OUTER</code> static instance to <code class="highlighter-rouge">JoinCommuteRule</code> (Maryann Xue)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-735">CALCITE-735</a>]
<code class="highlighter-rouge">Primitive.DOUBLE.min</code> should be large and negative</li>
</ul>
<h4 id="fixes-1-3-0">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-688">CALCITE-688</a>]
<code class="highlighter-rouge">splitCondition</code> does not behave correctly when one side of the condition
references columns from different inputs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-259">CALCITE-259</a>]
Using sub-queries in <code class="highlighter-rouge">CASE</code> statement against JDBC tables generates invalid
Oracle SQL (Yeong Wei)</li>
<li>In sample code in README.md, rename optiq to calcite (Ethan)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-720">CALCITE-720</a>]
<code class="highlighter-rouge">VolcanoPlanner.ambitious</code> comment doc is inconsistent (Santiago M. Mola)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-729">CALCITE-729</a>]
<code class="highlighter-rouge">IndexOutOfBoundsException</code> in <code class="highlighter-rouge">ROLLUP</code> query on JDBC data source</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-733">CALCITE-733</a>]
Multiple distinct-<code class="highlighter-rouge">COUNT</code> query gives wrong results</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-730">CALCITE-730</a>]
<code class="highlighter-rouge">ClassCastException</code> in table from <code class="highlighter-rouge">CloneSchema</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-728">CALCITE-728</a>]
Test suite hangs on Windows</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-723">CALCITE-723</a>]
Document lattices</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-515">CALCITE-515</a>]
Add Apache headers to markdown files</li>
<li>Upgrade quidem</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-716">CALCITE-716</a>]
Scalar sub-query and aggregate function in <code class="highlighter-rouge">SELECT</code> or <code class="highlighter-rouge">HAVING</code> clause gives
<code class="highlighter-rouge">AssertionError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-694">CALCITE-694</a>]
Scan <code class="highlighter-rouge">HAVING</code> clause for sub-queries and <code class="highlighter-rouge">IN</code>-lists (Hsuan-Yi Chu)</li>
<li>Upgrade hydromatic-resource-maven-plugin</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-710">CALCITE-710</a>]
Identical conditions in the <code class="highlighter-rouge">WHERE</code> clause cause <code class="highlighter-rouge">AssertionError</code> (Sean
Hsuan-Yi Chu)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-695">CALCITE-695</a>]
Do not add <code class="highlighter-rouge">SINGLE_VALUE</code> aggregate function to a sub-query that will never
return more than one row (Hsuan-Yi Chu)</li>
<li>Add tests for scalar sub-queries, including test cases for
[<a href="https://issues.apache.org/jira/browse/CALCITE-709">CALCITE-709</a>]
Errors with <code class="highlighter-rouge">LIMIT</code> inside scalar sub-query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-702">CALCITE-702</a>]
Add validator test for monotonic expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-699">CALCITE-699</a>]
In Avatica, synchronize access to Calendar</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-700">CALCITE-700</a>]
Pass time zone into tests</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-698">CALCITE-698</a>]
For <code class="highlighter-rouge">GROUP BY ()</code>, <code class="highlighter-rouge">areColumnsUnique()</code> should return true for any key</li>
<li>Disable tests that fail under JDK 1.7 due to
[<a href="https://issues.apache.org/jira/browse/CALCITE-687">CALCITE-687</a>]</li>
<li>Add “getting started” to HOWTO</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-692">CALCITE-692</a>]
Add back sqlline as a dependency</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-677">CALCITE-677</a>]
<code class="highlighter-rouge">RemoteDriverTest.testTypeHandling</code> fails east of Greenwich</li>
<li>Disable test for
[<a href="https://issues.apache.org/jira/browse/CALCITE-687">CALCITE-687</a>]
Make <code class="highlighter-rouge">RemoteDriverTest.testStatementLifecycle</code> thread-safe</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-686">CALCITE-686</a>]
<code class="highlighter-rouge">SqlNode.unparse</code> produces invalid SQL</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-507">CALCITE-507</a>]
Update HOWTO.md with running integration tests</li>
<li>Add H2 integration test</li>
<li>Add PostgreSQL integration test</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-590">CALCITE-590</a>]
Update MongoDB test suite to calcite-test-dataset</li>
<li>Add <code class="highlighter-rouge">CalciteAssert.assertArrayEqual</code> for more user-friendly asserts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-585">CALCITE-585</a>]
Avatica JDBC methods should throw <code class="highlighter-rouge">SQLFeatureNotSupportedException</code> (Ng Jiunn
Jye)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-671">CALCITE-671</a>]
<code class="highlighter-rouge">ByteString</code> does not deserialize properly as a <code class="highlighter-rouge">FetchRequest</code> parameter value</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-676">CALCITE-676</a>]
<code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">GROUPING SETS</code> query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-678">CALCITE-678</a>]
<code class="highlighter-rouge">SemiJoinRule</code> mixes up fields when <code class="highlighter-rouge">Aggregate.groupSet</code> is not field #0</li>
</ul>
<h2 id="v1-2-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.2.0-incubating">1.2.0-incubating</a> / 2015-04-07</h2>
<p>A short release, less than a month after 1.1.</p>
<p>There have been many changes to Avatica, hugely improving its coverage of the
JDBC API and overall robustness. A new provider, <code class="highlighter-rouge">JdbcMeta</code>, allows
you to remote an existing JDBC driver.</p>
<p>[<a href="https://issues.apache.org/jira/browse/CALCITE-606">CALCITE-606</a>]
improves how the planner propagates traits such as collation and
distribution among relational expressions.</p>
<p>[<a href="https://issues.apache.org/jira/browse/CALCITE-613">CALCITE-613</a>]
and [<a href="https://issues.apache.org/jira/browse/CALCITE-307">CALCITE-307</a>]
improve implicit and explicit conversions in SQL.</p>
<h4 id="new-features-1-2-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-366">CALCITE-366</a>]
Support Aggregate push down in bushy joins (Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-613">CALCITE-613</a>]
Implicitly convert character values in comparisons</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-307">CALCITE-307</a>]
Implement <code class="highlighter-rouge">CAST</code> between date-time types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-634">CALCITE-634</a>]
Allow <code class="highlighter-rouge">ORDER BY</code> aggregate function in <code class="highlighter-rouge">SELECT DISTINCT</code>, provided that it
occurs in <code class="highlighter-rouge">SELECT</code> clause (Sean Hsuan-Yi Chu)</li>
<li>In linq4j, implement <code class="highlighter-rouge">firstOrDefault</code>, <code class="highlighter-rouge">single</code>, and <code class="highlighter-rouge">singleOrDefault</code> methods
(Daniel Cooper)</li>
<li>JDBC adapter
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-631">CALCITE-631</a>]
Push theta joins down to JDBC adapter (Ng Jiunn Jye)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-657">CALCITE-657</a>]
<code class="highlighter-rouge">NullPointerException</code> when executing <code class="highlighter-rouge">JdbcAggregate.implement</code>
method (Yuri Au Yong)</li>
</ul>
</li>
<li>Metadata
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-659">CALCITE-659</a>]
Missing types in <code class="highlighter-rouge">averageTypeValueSize</code> method in <code class="highlighter-rouge">RelMdSize</code>
(Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-650">CALCITE-650</a>]
Add metadata for average size of a tuple in <code class="highlighter-rouge">SemiJoin</code> (Jesus
Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-649">CALCITE-649</a>]
Extend <code class="highlighter-rouge">splitCondition</code> method in <code class="highlighter-rouge">RelOptUtil</code> to handle multiple
joins on the same key (Jesus Camacho Rodriguez)</li>
</ul>
</li>
</ul>
<h4 id="avatica-1-2-0">Avatica features and bug-fixes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-670">CALCITE-670</a>]
<code class="highlighter-rouge">AvaticaPreparedStatement</code> should support <code class="highlighter-rouge">execute()</code> and
<code class="highlighter-rouge">executeUpdate()</code> (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-641">CALCITE-641</a>]
Implement logging throughout Avatica server (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-646">CALCITE-646</a>]
<code class="highlighter-rouge">AvaticaStatement.execute</code> method broken over remote JDBC (Yeong Wei
and Julian Hyde)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-660">CALCITE-660</a>]
Improve Avatica date support</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-655">CALCITE-655</a>]
Implement <code class="highlighter-rouge">ConnectionSync</code> RPC (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-654">CALCITE-654</a>]
Tighten up <code class="highlighter-rouge">AvaticaStatement.execute</code> semantics (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-658">CALCITE-658</a>]
Cleanup dependency usage (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-652">CALCITE-652</a>]
Move server pieces of <code class="highlighter-rouge">avatica</code> into <code class="highlighter-rouge">avatica-server</code> (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-651">CALCITE-651</a>]
In <code class="highlighter-rouge">JdbcMeta</code>, convert property definitions to an enum (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-640">CALCITE-640</a>]
Avatica server should expire stale connections/statements (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-639">CALCITE-639</a>]
Open up permissions on avatica server components (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-637">CALCITE-637</a>]
Implement Avatica <code class="highlighter-rouge">CloseConnection</code> RPC (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-636">CALCITE-636</a>]
Connection isolation for Avatica clients (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-626">CALCITE-626</a>]
Implement <code class="highlighter-rouge">CloseStatement</code> RPC (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-630">CALCITE-630</a>]
Flesh out <code class="highlighter-rouge">AvaticaParameter.setObject</code> (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-627">CALCITE-627</a>]
Add Avatica support for <code class="highlighter-rouge">getTableTypes</code>, <code class="highlighter-rouge">getColumns</code> (Xavier FH Leong)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-618">CALCITE-618</a>]
Add Avatica support for <code class="highlighter-rouge">getTables</code> (Julian Hyde and Nick Dimiduk)</li>
</ul>
<h4 id="api-1-2-0">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-617">CALCITE-617</a>]
Check at initialization time in <code class="highlighter-rouge">CachingInvocationHandler</code> that MD provider
is not null (Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-638">CALCITE-638</a>]
SQL standard <code class="highlighter-rouge">REAL</code> is 4 bytes, <code class="highlighter-rouge">FLOAT</code> is 8 bytes</li>
</ul>
<h4 id="fixes-1-2-0">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-672">CALCITE-672</a>]
SQL <code class="highlighter-rouge">ANY</code> type should be nullable (Jinfeng Ni)</li>
<li>Disable tests, pending
[<a href="https://issues.apache.org/jira/browse/CALCITE-673">CALCITE-673</a>]
Timeout executing joins against MySQL</li>
<li>Fix traits in MongoDB adapter, and <code class="highlighter-rouge">NullPointerException</code> in <code class="highlighter-rouge">JdbcTest</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-662">CALCITE-662</a>]
Query validation fails when an <code class="highlighter-rouge">ORDER BY</code> clause is used with <code class="highlighter-rouge">WITH CLAUSE</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-606">CALCITE-606</a>]
Fix trait propagation and add test case</li>
<li>Remove checkstyle Eclipse properties from git tracking</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-644">CALCITE-644</a>]
Increase check style line limit to 100 chars (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-648">CALCITE-648</a>]
Update <code class="highlighter-rouge">ProjectMergeRule</code> description for new naming convention (Jinfeng Ni)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-625">CALCITE-625</a>]
<code class="highlighter-rouge">README.md</code> linking to the wrong page of <code class="highlighter-rouge">optiq-csv</code> (hongbin ma)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-632">CALCITE-632</a>]
Sort order returned by <code class="highlighter-rouge">SUPERCLASS_COMPARATOR</code> in
<code class="highlighter-rouge">ReflectiveRelMetadataProvider</code> is inconsistent (Jesus Camacho
Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-335">CALCITE-335</a>]
Remove uses of linq4j <code class="highlighter-rouge">Functions.adapt</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-592">CALCITE-592</a>]
Upgrade to Guava 14.0.1</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-596">CALCITE-596</a>]
JDBC adapter incorrectly reads null values as 0 (Ng Jiunn Jye)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-633">CALCITE-633</a>]
<code class="highlighter-rouge">WITH ... ORDER BY</code> cannot find table</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-614">CALCITE-614</a>]
<code class="highlighter-rouge">IN</code> clause in <code class="highlighter-rouge">CASE</code> in <code class="highlighter-rouge">GROUP BY</code> gives <code class="highlighter-rouge">AssertionError</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-619">CALCITE-619</a>]
Slim down dependencies in parent POM</li>
</ul>
<h2 id="v1-1-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.1.0-incubating">1.1.0-incubating</a> / 2015-03-13</h2>
<p>This Calcite release makes it possible to exploit physical properties
of relational expressions to produce more efficient plans, introducing
collation and distribution as traits, <code class="highlighter-rouge">Exchange</code> relational operator,
and several new forms of metadata.</p>
<p>We add experimental support for streaming SQL.</p>
<p>This release drops support for JDK 1.6; Calcite now requires 1.7 or
later.</p>
<p>We have introduced static <code class="highlighter-rouge">create</code> methods for many sub-classes of
<code class="highlighter-rouge">RelNode</code>. We strongly suggest that you use these rather than
calling constructors directly.</p>
<h4 id="new-features-1-1-0">New features</h4>
<ul>
<li>SQL
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-602">CALCITE-602</a>]
Streaming queries (experimental)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-588">CALCITE-588</a>]
Allow <code class="highlighter-rouge">TableMacro</code> to consume maps and collections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-583">CALCITE-583</a>]
Operator <code class="highlighter-rouge">||</code> mishandles <code class="highlighter-rouge">ANY</code> type (Sean Hsuan-Yi Chu)</li>
</ul>
</li>
<li>Planner rule improvements
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-445">CALCITE-445</a>]
Pull up filters rejected by a <code class="highlighter-rouge">ProjectableFilterableTable</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-600">CALCITE-600</a>]
Use <code class="highlighter-rouge">SetOpFactory</code> in rules containing <code class="highlighter-rouge">Union</code> operator (Jesus
Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-603">CALCITE-603</a>]
Metadata providers for size, memory, parallelism
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-607">CALCITE-607</a>]
Change visibility of constructor in metadata providers for size,
memory, parallelism (Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-608">CALCITE-608</a>]
Exception is thrown when <code class="highlighter-rouge">RelMdDistribution</code> for <code class="highlighter-rouge">Project</code>
operator is called (Jesus Camacho Rodriguez)</li>
</ul>
</li>
</ul>
</li>
<li>Collation and distribution as traits
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-88">CALCITE-88</a>]
Add collation as a trait and a kind of <code class="highlighter-rouge">RelNode</code> metadata</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-569">CALCITE-569</a>]
<code class="highlighter-rouge">ArrayIndexOutOfBoundsException</code> when deducing collation (Aman Sinha)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-581">CALCITE-581</a>]
Add <code class="highlighter-rouge">LogicalSort</code> relational expression, and make <code class="highlighter-rouge">Sort</code> abstract</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-526">CALCITE-526</a>]
Add <code class="highlighter-rouge">EnumerableMergeJoin</code>, which exploits sorted inputs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-71">CALCITE-71</a>]
Provide a way to declare that tables are sorted</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-576">CALCITE-576</a>]
Make <code class="highlighter-rouge">RelCollation</code> trait and <code class="highlighter-rouge">AbstractRelNode.getCollationList</code> consistent</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-254">CALCITE-254</a>]
Propagate <code class="highlighter-rouge">RelCollation</code> on aliased columns in <code class="highlighter-rouge">JoinRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-569">CALCITE-569</a>]
<code class="highlighter-rouge">ArrayIndexOutOfBoundsException</code> when deducing collation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-594">CALCITE-594</a>]
Add <code class="highlighter-rouge">RelDistribution</code> trait and <code class="highlighter-rouge">Exchange</code> relational expression</li>
</ul>
</li>
</ul>
<h4 id="api-1-1-0">API changes</h4>
<ul>
<li>Many sub-classes of <code class="highlighter-rouge">RelNode</code> now have a static <code class="highlighter-rouge">create</code> method
which automatically sets up traits such as collation and
distribution. The constructors are not marked deprecated, but we
strongly suggest that you use the <code class="highlighter-rouge">create</code> method if it exists.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-591">CALCITE-591</a>]
Drop support for Java 1.6 (and JDBC 4.0)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-587">CALCITE-587</a>]
Upgrade <code class="highlighter-rouge">jetty-server</code> to 9.2.7.v20150116 and port avatica-server <code class="highlighter-rouge">HttpServer</code>
(Trevor Hartman)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-577">CALCITE-577</a>]
Revert temporary API changes introduced in
[<a href="https://issues.apache.org/jira/browse/CALCITE-575">CALCITE-575</a>]</li>
<li>Add means to create <code class="highlighter-rouge">Context</code> instances by wrapping objects and by chaining
contexts</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-599">CALCITE-599</a>]
<code class="highlighter-rouge">EquiJoin</code> in wrong package (Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-573">CALCITE-573</a>]
Use user-given names in <code class="highlighter-rouge">RelOptUtil.createProject</code> and <code class="highlighter-rouge">createRename</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-572">CALCITE-572</a>]
Remove <code class="highlighter-rouge">Project.flags</code> (methods are deprecated, to be removed before 2.0)</li>
</ul>
<h4 id="fixes-1-1-0">Bug-fixes and internal changes</h4>
<ul>
<li>Remove the <code class="highlighter-rouge">LICENSE</code> file of calcite-example-csv (the former
optiq-csv) and move its history into main history</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-615">CALCITE-615</a>]
AvaticaParameter should be Jackson serializable (Nick Dimiduk)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-612">CALCITE-612</a>]
Update AvaticaStatement to handle cancelled queries (Parth Chandra)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-605">CALCITE-605</a>]
Reduce dependency on third-party maven repositories</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-611">CALCITE-611</a>]
Method <code class="highlighter-rouge">setAggChildKeys</code> should take into account indicator columns of
<code class="highlighter-rouge">Aggregate</code> operator (Jesus Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-566">CALCITE-566</a>]
<code class="highlighter-rouge">ReduceExpressionsRule</code> requires planner to have an <code class="highlighter-rouge">Executor</code>
</li>
<li>Refactor <code class="highlighter-rouge">TableScanNode.create</code> method</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-593">CALCITE-593</a>]
Validator in <code class="highlighter-rouge">Frameworks</code> should expand identifiers (Jinfeng Ni)</li>
<li>Australian time-zones changed in <code class="highlighter-rouge">tzdata2014f</code>, Java 1.8.0_31</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-580">CALCITE-580</a>]
Average aggregation on an <code class="highlighter-rouge">Integer</code> column throws <code class="highlighter-rouge">ClassCastException</code>
</li>
<li>In Travis, ask Surefire to print results to screen</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-586">CALCITE-586</a>]
Prevent JSON serialization of <code class="highlighter-rouge">Signature.internalParameters</code>
</li>
</ul>
<h2 id="v1-0-0">
<a href="https://github.com/apache/calcite/releases/tag/calcite-1.0.0-incubating">1.0.0-incubating</a> / 2015-01-31</h2>
<p>Calcite’s first major release.</p>
<p>Since the previous release we have re-organized the into the <code class="highlighter-rouge">org.apache.calcite</code>
namespace. To make migration of your code easier, we have described the
<a href="https://issues.apache.org/jira/secure/attachment/12681620/mapping.txt">mapping from old to new class names</a>
as an attachment to
[<a href="https://issues.apache.org/jira/browse/CALCITE-296">CALCITE-296</a>].</p>
<p>The release adds SQL support for <code class="highlighter-rouge">GROUPING SETS</code>, <code class="highlighter-rouge">EXTEND</code>, <code class="highlighter-rouge">UPSERT</code> and sequences;
a remote JDBC driver;
improvements to the planner engine and built-in planner rules;
improvements to the algorithms that implement the relational algebra,
including an interpreter that can evaluate queries without compilation;
and fixes about 30 bugs.</p>
<h4 id="new-features-1-0-0">New features</h4>
<ul>
<li>SQL
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-494">CALCITE-494</a>]
Support <code class="highlighter-rouge">NEXT</code>/<code class="highlighter-rouge">CURRENT VALUE FOR</code> syntax for using sequences</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-492">CALCITE-492</a>]
Support <code class="highlighter-rouge">UPSERT</code> statement in parser</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-493">CALCITE-493</a>]
Add <code class="highlighter-rouge">EXTEND</code> clause, for defining columns and their types at query/DML time</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-497">CALCITE-497</a>]
Support optional qualifier for column name references</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-356">CALCITE-356</a>]
Allow column references of the form <code class="highlighter-rouge">schema.table.column</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-462">CALCITE-462</a>]
Allow table functions in <code class="highlighter-rouge">LATERAL</code> expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-282">CALCITE-282</a>]
Add <code class="highlighter-rouge">{fn QUARTER(date)}</code> function (Benoy Antony)</li>
<li>Grouping sets
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-370">CALCITE-370</a>]
Support <code class="highlighter-rouge">GROUPING SETS</code>, <code class="highlighter-rouge">CUBE</code>, <code class="highlighter-rouge">ROLLUP</code> in SQL and algebra</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-512">CALCITE-512</a>]
Add <code class="highlighter-rouge">GROUP_ID</code>,<code class="highlighter-rouge">GROUPING_ID</code>, <code class="highlighter-rouge">GROUPING</code> functions</li>
</ul>
</li>
</ul>
</li>
<li>Planner rule improvements
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-92">CALCITE-92</a>]
Optimize away <code class="highlighter-rouge">Project</code> that merely renames fields</li>
<li>Detect and merge duplicate predicates <code class="highlighter-rouge">AND(x, y, x)</code> to <code class="highlighter-rouge">AND(x, y)</code> in more
circumstances</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-557">CALCITE-557</a>]
Speed up planning by never creating <code class="highlighter-rouge">AbstractConverter</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-545">CALCITE-545</a>]
When a projected expression can only have one value, replace with that
constant</li>
<li>Grouping sets
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-542">CALCITE-542</a>]
Support for <code class="highlighter-rouge">Aggregate</code> with grouping sets in <code class="highlighter-rouge">RelMdColumnOrigins</code> (Jesus
Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-533">CALCITE-533</a>]
Support for grouping sets in <code class="highlighter-rouge">FilterAggregateTransposeRule</code> (Jesus Camacho
Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-532">CALCITE-532</a>]
Support for grouping sets in <code class="highlighter-rouge">AggregateFilterTransposeRule</code> (Jesus Camacho
Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-513">CALCITE-513</a>]
Support for grouping sets in <code class="highlighter-rouge">AggregateProjectMergeRule</code> (Jesus Camacho
Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-510">CALCITE-510</a>]
Support for grouping sets in <code class="highlighter-rouge">AggregateExpandDistinctAggregatesRule</code> (Jesus
Camacho Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-502">CALCITE-502</a>]
Support for grouping sets in <code class="highlighter-rouge">AggregateUnionTransposeRule</code> (Jesus Camacho
Rodriguez)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-503">CALCITE-503</a>]
Tests to check rules on <code class="highlighter-rouge">Aggregate</code> operator without grouping sets (Jesus
Camacho Rodriguez)</li>
</ul>
</li>
</ul>
</li>
<li>Algorithms
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-451">CALCITE-451</a>]
Implement theta join, inner and outer, in enumerable convention</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-489">CALCITE-489</a>]
Update <code class="highlighter-rouge">Correlate</code> mechanics and implement <code class="highlighter-rouge">EnumerableCorrelate</code> (aka nested
loops join)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-544">CALCITE-544</a>]
Implement <code class="highlighter-rouge">Union</code> in interpreter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-562">CALCITE-562</a>]
Implement inner <code class="highlighter-rouge">Join</code> in interpreter and improve handling of scalar expressions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-543">CALCITE-543</a>]
Implement <code class="highlighter-rouge">Aggregate</code> (including <code class="highlighter-rouge">GROUPING SETS</code>) in interpreter (Jacques
Nadeau)</li>
<li>In progress towards
[<a href="https://issues.apache.org/jira/browse/CALCITE-558">CALCITE-558</a>]
add <code class="highlighter-rouge">BINDABLE</code> convention (but <code class="highlighter-rouge">ENUMERABLE</code> is still the default), and add
<code class="highlighter-rouge">ArrayBindable</code> and <code class="highlighter-rouge">Scalar</code> interfaces</li>
</ul>
</li>
<li>Remote driver
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-93">CALCITE-93</a>]
Calcite RPC server</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-94">CALCITE-94</a>]
Remote JDBC driver</li>
<li>Make <code class="highlighter-rouge">JsonHandler</code> and <code class="highlighter-rouge">JsonService</code> thread-safe</li>
</ul>
</li>
</ul>
<h4 id="api-1-0-0">API changes</h4>
<ul>
<li>The great code re-org
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-296">CALCITE-296</a>]
Re-organize package structure</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-419">CALCITE-419</a>]
Naming convention for planner rules</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-306">CALCITE-306</a>]
Standardize code style for “import package.*;”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-474">CALCITE-474</a>]
Clean up rule naming in order to support enabling/disabling rules</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-460">CALCITE-460</a>]
Add <code class="highlighter-rouge">ImmutableBitSet</code> and replace uses of <code class="highlighter-rouge">BitSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-479">CALCITE-479</a>]
Migrate <code class="highlighter-rouge">RelNode.getChildExps</code> to <code class="highlighter-rouge">RelNode.accept(RexShuttle)</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-527">CALCITE-527</a>]
Drop <code class="highlighter-rouge">rowType</code> field and constructor/copy argument of <code class="highlighter-rouge">Calc</code>
</li>
</ul>
</li>
<li>Add linq4j and example-csv modules
<ul>
<li>Remove unused packages in linq4j, and fix checkstyle issues in linq4j and csv</li>
<li>Add calcite-linq4j and calcite-example-csv as POM sub-modules</li>
<li>Import ‘optiq-csv’ project as ‘example/csv/’, and add Apache headers</li>
<li>Import ‘linq4j’ project, and add Apache headers</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-478">CALCITE-478</a>]
Move CSV tutorial (Siva Narayanan)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-464">CALCITE-464</a>]
Make parser accept configurable max length for SQL identifier</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-465">CALCITE-465</a>]
Remove <code class="highlighter-rouge">OneRow</code> and <code class="highlighter-rouge">Empty</code> relational expressions; <code class="highlighter-rouge">Values</code> will suffice</li>
</ul>
<h4 id="fixes-1-0-0">Bug-fixes and internal changes</h4>
<ul>
<li>Build improvements
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-541">CALCITE-541</a>]
Update maven-source-plugin to 2.4 to get speedup in jdk 1.8</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-537">CALCITE-537</a>]
Skip overwrite of <code class="highlighter-rouge">NOTICE</code>, <code class="highlighter-rouge">DEPENDENCIES</code>, and <code class="highlighter-rouge">LICENSE</code> files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-538">CALCITE-538</a>]
Generate <code class="highlighter-rouge">Parser.jj</code> only at first build</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-539">CALCITE-539</a>]
Avoid rewrite of <code class="highlighter-rouge">org-apache-calcite-jdbc.properties</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-540">CALCITE-540</a>]
Create git.properties file only at first build. This saves time in
development at a cost of stale <code class="highlighter-rouge">git.properties</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-536">CALCITE-536</a>]
Add <code class="highlighter-rouge">@PackageMarker</code> to <code class="highlighter-rouge">package-info.java</code> so maven-compiler skips
compilation when the sources are unchanged</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-535">CALCITE-535</a>]
Support skip overwrite in hydromatic-resource</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-582">CALCITE-582</a>]
<code class="highlighter-rouge">EnumerableTableScan</code> broken when table has single column</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-575">CALCITE-575</a>]
Variant of <code class="highlighter-rouge">ProjectRemoveRule</code> that considers a project trivial only if its
field names are identical (John Pullokkaran)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-571">CALCITE-571</a>]
<code class="highlighter-rouge">ReduceExpressionsRule</code> tries to reduce <code class="highlighter-rouge">SemiJoin</code> condition to non-equi
condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-568">CALCITE-568</a>]
Upgrade to a version of <code class="highlighter-rouge">pentaho-aggdesigner</code> that does not pull in
<code class="highlighter-rouge">servlet-api</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-567">CALCITE-567</a>]
Make <code class="highlighter-rouge">quidem</code> dependency have scope “test”</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-570">CALCITE-570</a>]
<code class="highlighter-rouge">ReduceExpressionsRule</code> throws “duplicate key” exception</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-561">CALCITE-561</a>]
Upgrade parent POM</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-458">CALCITE-458</a>]
ArrayIndexOutOfBoundsException when using just a single column in interpreter</li>
<li>Fix spurious extra row from <code class="highlighter-rouge">FULL JOIN</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-554">CALCITE-554</a>]
Outer join over NULL keys generates wrong result</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-489">CALCITE-489</a>]
Teach <code class="highlighter-rouge">CalciteAssert</code> to respect multiple settings</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-516">CALCITE-516</a>]
<code class="highlighter-rouge">GROUP BY</code> on a <code class="highlighter-rouge">CASE</code> expression containing <code class="highlighter-rouge">IN</code> predicate fails (Aman Sinha)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-552">CALCITE-552</a>]
Upgrade tpcds (which depends on an old version of guava)</li>
<li>Copy identifier when fully-qualifying, so column aliases have the right case</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-548">CALCITE-548</a>]
Extend <code class="highlighter-rouge">induce</code> method to return <code class="highlighter-rouge">CUBE</code> and <code class="highlighter-rouge">ROLLUP</code> (Jesus Camacho Rodriguez)
<ul>
<li>Simplify <code class="highlighter-rouge">Group.induce</code> by assuming that group sets are sorted</li>
</ul>
</li>
<li>Test case for
[<a href="https://issues.apache.org/jira/browse/CALCITE-212">CALCITE-212</a>]
Join condition with <code class="highlighter-rouge">OR</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-550">CALCITE-550</a>]
Case-insensitive matching of sub-query columns fails
<ul>
<li>Add more unit tests (Jinfeng Ni)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-448">CALCITE-448</a>]
<code class="highlighter-rouge">FilterIntoJoinRule</code> creates filters containing invalid <code class="highlighter-rouge">RexInputRef</code>
</li>
<li>When registering a <code class="highlighter-rouge">RelNode</code>, be tolerant if it is equivalent to a <code class="highlighter-rouge">RelNode</code>
with different traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-547">CALCITE-547</a>]
Set nullability while inferring return type of <code class="highlighter-rouge">item(any,...)</code> operator</li>
<li>In Travis CI, enable containers, and cache <code class="highlighter-rouge">.m2</code> directory</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-534">CALCITE-534</a>]
Missing implementation of <code class="highlighter-rouge">ResultSetMetaData.getColumnClassName</code> (Knut
Forkalsrud)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-506">CALCITE-506</a>]
Update <code class="highlighter-rouge">EnumerableRelImplementor.stash</code> so it is suitable for all kinds of
classes</li>
<li>Merge join algorithm for <code class="highlighter-rouge">Enumerable</code>s</li>
<li>Efficient <code class="highlighter-rouge">Enumerable</code> over random-access list</li>
<li>Add a test that calls all functions with arguments of all types that they
claim to accept</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-511">CALCITE-511</a>]
<code class="highlighter-rouge">copy</code> method in <code class="highlighter-rouge">LogicalAggregate</code> not copying the indicator value properly</li>
<li>Add a model that has lattices and works against HSQLDB</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-509">CALCITE-509</a>]
<code class="highlighter-rouge">RelMdColumnUniqueness</code> uses <code class="highlighter-rouge">ImmutableBitSet.Builder</code> twice, gets
<code class="highlighter-rouge">NullPointerException</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-488">CALCITE-488</a>]
<code class="highlighter-rouge">Enumerable&lt;Holder&gt;</code> does not work if where <code class="highlighter-rouge">Holder</code> is a custom class
with a single field; Calcite tries to treat it as <code class="highlighter-rouge">SCALAR</code> due to premature
<code class="highlighter-rouge">JavaRowFormat.optimize</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-352">CALCITE-352</a>]
Throw exception if <code class="highlighter-rouge">ResultSet.next()</code> is called after <code class="highlighter-rouge">close()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-403">CALCITE-403</a>]
<code class="highlighter-rouge">Enumerable</code> gives <code class="highlighter-rouge">NullPointerException</code> with <code class="highlighter-rouge">NOT</code> on nullable expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-469">CALCITE-469</a>]
Update example/csv README.md instructions</li>
<li>Document <code class="highlighter-rouge">WITH</code>, <code class="highlighter-rouge">LATERAL</code>, <code class="highlighter-rouge">GROUPING SETS</code>, <code class="highlighter-rouge">CUBE</code>, <code class="highlighter-rouge">ROLLUP</code>;
add descriptions for all built-in functions and operators</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-470">CALCITE-470</a>]
Print warning when column type hint is not understood;
Update <code class="highlighter-rouge">EMPS.deptno</code> column Integer → int</li>
<li>Fix <code class="highlighter-rouge">Linq4j.product</code>; the cartesian product of 0 attributes is one row of 0
attributes</li>
<li>Update link optiq-mat-plugin → mat-calcite-plugin</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-467">CALCITE-467</a>]
Incorrect namespace in <code class="highlighter-rouge">package-info.java</code>
</li>
<li>Add headers, to appease the RAT</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-446">CALCITE-446</a>]
CSV adapter should read from directory relative to the model file</li>
<li>Add examples of scannable and filterable tables, matching
[<a href="https://issues.apache.org/jira/browse/CALCITE-436">CALCITE-436</a>]
Simpler SPI to query Table</li>
<li>Fix <code class="highlighter-rouge">JdbcTest.testVersion</code> now that version is 1.0</li>
<li>Update release HOWTO</li>
</ul>
<h2 id="v0-9-2">
<a href="https://github.com/apache/calcite/releases/tag/calcite-0.9.2-incubating">0.9.2-incubating</a> / 2014-11-05</h2>
<p>A fairly minor release, and last release before we rename all of the
packages and lots of classes, in what we expect to call 1.0. If you
have an existing application, it’s worth upgrading to this first,
before you move on to 1.0.</p>
<h4 id="new-features-0-9-2">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-436">CALCITE-436</a>]
Simpler SPI to query <code class="highlighter-rouge">Table</code>
</li>
</ul>
<h4 id="api-0-9-2">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-447">CALCITE-447</a>]
Change semi-join rules to make use of factories</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-442">CALCITE-442</a>
Add <code class="highlighter-rouge">RelOptRuleOperand</code> constructor that takes a predicate</li>
</ul>
<h4 id="fixes-0-9-2">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-397">CALCITE-397</a>]
<code class="highlighter-rouge">SELECT DISTINCT *</code> on reflective schema gives <code class="highlighter-rouge">ClassCastException</code> at runtime</li>
<li>Various lattice improvements.</li>
<li>sqlline: Looking for class-path in inconsistent locations.</li>
<li>Re-order test suite, so that fast tests are run first.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-444">CALCITE-444</a>]
Filters wrongly pushed into full outer join</li>
<li>Make it more convenient to unit test <code class="highlighter-rouge">RelMetadataQuery</code>, and add some more
tests for
[<a href="https://issues.apache.org/jira/browse/CALCITE-443">CALCITE-443</a>]</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-443">CALCITE-443</a>]
<code class="highlighter-rouge">getPredicates</code> from a Union is not correct</li>
<li>Update references to web sites, git repositories, jira, mailing lists,
travis CI now that [INFRA-8413] is fixed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-434">CALCITE-435</a>]
<code class="highlighter-rouge">FilterAggregateTransposeRule</code> loses conditions that cannot be pushed</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-435">CALCITE-435</a>]
<code class="highlighter-rouge">LoptOptimizeJoinRule</code> incorrectly re-orders outer joins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-439">CALCITE-439</a>]
<code class="highlighter-rouge">SqlValidatorUtil.uniquify()</code> may not terminate under some conditions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-438">CALCITE-438</a>]
Push predicates through <code class="highlighter-rouge">SemiJoinRel</code>
</li>
<li>Add test case for <code class="highlighter-rouge">LIKE ... ESCAPE</code>.</li>
<li>HOWTO: Modify release instructions.</li>
<li>Update <code class="highlighter-rouge">DiffRepository</code> documentation.</li>
<li>Add tests for windowed aggregates without <code class="highlighter-rouge">ORDER BY</code>. (Works already.)</li>
</ul>
<h2 id="v0-9-1">
<a href="https://github.com/apache/calcite/releases/tag/calcite-0.9.1-incubating">0.9.1-incubating</a> / 2014-10-02</h2>
<p>This is the first release as Calcite. (The project was previously called Optiq.)</p>
<h4 id="new-features-0-9-1">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-430">CALCITE-430</a>]
Rename project from Optiq to Calcite</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-426">CALCITE-426</a>]
Pool JDBC data sources, to make it easier to pool connections</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-416">CALCITE-416</a>]
Execute logical <code class="highlighter-rouge">RelNode</code>s using an interpreter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-376">CALCITE-376</a>]
Move <code class="highlighter-rouge">SqlRun</code> into its own artifact,
<a href="https://github.com/julianhyde/quidem">Quidem</a>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-269">CALCITE-269</a>]
MongoDB result sets larger than 16MB</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-373">CALCITE-373</a>]
<code class="highlighter-rouge">NULL</code> values in <code class="highlighter-rouge">NOT IN</code> sub-queries</li>
<li>SQL functions:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-422">CALCITE-422</a>]
Add <code class="highlighter-rouge">REGR_SXX</code> and <code class="highlighter-rouge">REGR_SYY</code> regression functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-421">CALCITE-421</a>]
Add <code class="highlighter-rouge">COVAR_POP</code> and <code class="highlighter-rouge">COVAR_SAMP</code> aggregate functions</li>
</ul>
</li>
<li>Planner rules:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-425">CALCITE-425</a>]
Add <code class="highlighter-rouge">FilterAggregateTransposeRule</code>, that pushes a filter through an
aggregate</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-399">CALCITE-399</a>]
Factorize common <code class="highlighter-rouge">AND</code> factors out of <code class="highlighter-rouge">OR</code> predicates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-404">CALCITE-404</a>]
<code class="highlighter-rouge">MergeProjectRule</code> should not construct <code class="highlighter-rouge">RexProgram</code>s for simple mappings</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-394">CALCITE-394</a>]
Add <code class="highlighter-rouge">RexUtil.toCnf()</code>, to convert expressions to conjunctive normal form
(CNF)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-389">CALCITE-389</a>]
<code class="highlighter-rouge">MergeFilterRule</code> should flatten <code class="highlighter-rouge">AND</code> condition</li>
</ul>
</li>
<li>Lattices:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-428">CALCITE-428</a>]
Use optimization algorithm to suggest which tiles of a lattice to
materialize</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-410">CALCITE-410</a>]
Allow lattice tiles to satisfy a query by rolling up</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-406">CALCITE-406</a>]
Add tile and measure elements to lattice model element</li>
<li>Now, a lattice can materialize an aggregate-join and use it in a subsequent
query.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-402">CALCITE-402</a>]
Lattice should create materializations on demand</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-344">CALCITE-344</a>]
Lattice data structure</li>
</ul>
</li>
<li>Field trimmer:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-408">CALCITE-408</a>]
Make <code class="highlighter-rouge">FieldTrimmer</code> work with <code class="highlighter-rouge">RelNode</code> base classes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-388">CALCITE-388</a>]
Handle semi-joins in field trimmer</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-395">CALCITE-395</a>]
Make <code class="highlighter-rouge">FieldTrimmer.trimFields(SetOp)</code> generate <code class="highlighter-rouge">ProjectRel</code> instead of
<code class="highlighter-rouge">CalcRel</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-393">CALCITE-393</a>]
If no fields are projected from a table, field trimmer should project a
dummy expression</li>
</ul>
</li>
</ul>
<h4 id="api-0-9-1">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-413">CALCITE-413</a>]
Add <code class="highlighter-rouge">RelDataTypeSystem</code> plugin, allowing different max precision of a
<code class="highlighter-rouge">DECIMAL</code>
</li>
<li>In <code class="highlighter-rouge">Planner</code>, query de-correlation no longer requires state in a
<code class="highlighter-rouge">SqlToRelConverter</code>.</li>
<li>Factories:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-392">CALCITE-392</a>]
<code class="highlighter-rouge">RelFieldTrimmer</code> should use factory to create new rel nodes</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-382">CALCITE-382</a>]
Refactoring rules to use factories</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-398">CALCITE-398</a>]
Move <code class="highlighter-rouge">CalcRel.createProject</code> methods to <code class="highlighter-rouge">RelOptUtil</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-396">CALCITE-396</a>]
Change return type of <code class="highlighter-rouge">JoinFactory.createJoin()</code>; add <code class="highlighter-rouge">SemiJoinFactory</code>
</li>
</ul>
</li>
</ul>
<h4 id="fixes-0-9-1">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-386">CALCITE-386</a>]
Fix NOTICE</li>
<li>Add tests inspired by Derby bugs.</li>
<li>Add recent presentation to README.md.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-427">CALCITE-427</a>]
Off-by-one issues in <code class="highlighter-rouge">RemoveDistinctAggregateRule</code>,
<code class="highlighter-rouge">AggregateFilterTransposeRule</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-414">CALCITE-414</a>]
Bad class name in <code class="highlighter-rouge">sqlline</code> shell script</li>
<li>Bad package name in <code class="highlighter-rouge">package-info.java</code> was causing errors in Eclipse.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-412">CALCITE-412</a>]
<code class="highlighter-rouge">RelFieldTrimmer</code>: when trimming <code class="highlighter-rouge">SortRel</code>, the collation and trait set don’t
match</li>
<li>Add test case for
[<a href="https://issues.apache.org/jira/browse/CALCITE-411">CALCITE-411</a>]
Duplicate column aliases</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-407">CALCITE-407</a>]
<code class="highlighter-rouge">RemoveTrivialProjectRule</code> drops child node’s traits</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-409">CALCITE-409</a>]
<code class="highlighter-rouge">PushFilterPastProjectRule</code> should not push filters past windowed aggregates</li>
<li>Fix tests on Windows.</li>
<li>Don’t load <code class="highlighter-rouge">FoodMartQuerySet</code> unless we have to. It’s big.</li>
<li>Enable connection pooling in test suite.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-384">CALCITE-384</a>]
Add <code class="highlighter-rouge">apache-</code> prefix to tarball and directory within tarball</li>
<li>Freeze hive fmpp &gt; freemarker plugin dependency.</li>
<li>Upgrade Janino</li>
<li>Removed hardcoded foodmart schema information</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-387">CALCITE-387</a>]
CompileException when cast TRUE to nullable boolean</li>
<li>Temporary fix for
[<a href="https://issues.apache.org/jira/browse/CALCITE-390">CALCITE-390</a>]
Transitive inference (<code class="highlighter-rouge">RelMdPredicates</code>) doesn’t handle semi-join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-385">CALCITE-385</a>]
Change comment style for Java headers</li>
<li>Disable test that is inconistent between JDK 1.7 and 1.8.</li>
<li>Fix <code class="highlighter-rouge">git-commit-id-plugin</code> error when running in Travis-CI.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-381">CALCITE-381</a>]
Remove plugin versions from the <code class="highlighter-rouge">&lt;plugins&gt;</code> tag in root pom</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-383">CALCITE-383</a>]
Each jar should have a <code class="highlighter-rouge">git.properties</code> file describing its exact version</li>
<li>Fix <code class="highlighter-rouge">mvn site</code> on JDK 1.8 and enable in Travis-CI.</li>
<li>Status icon based on master branch, not whichever branch happened to build
most recently.</li>
<li>HOWTO:
<ul>
<li>Document how to build from git, and how to get jars from maven repo.</li>
<li>Optiq web site</li>
<li>Template emails for Apache votes</li>
<li>Update JIRA cases following release</li>
<li>Instructions for making and verifying a release</li>
</ul>
</li>
</ul>
<h2 id="v0-9-0">
<a href="https://github.com/apache/calcite/releases/tag/optiq-0.9.0-incubating">0.9.0-incubating</a> / 2014-08-19</h2>
<p>This is the first release under the Apache incubator process.</p>
<h4 id="new-features-0-9-0">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-371">CALCITE-371</a>]
Implement <code class="highlighter-rouge">JOIN</code> whose <code class="highlighter-rouge">ON</code> clause contains mixed equi and theta</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-369">CALCITE-369</a>]
Add <code class="highlighter-rouge">EnumerableSemiJoinRel</code>, implementation of semi-join in enumerable
convention</li>
<li>Add class <code class="highlighter-rouge">Strong</code>, for detecting null-rejecting predicates.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-368">CALCITE-368</a>]
Add SemiJoinRule, planner rule to convert project-join-aggregate into semi-join</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-367">CALCITE-367</a>]
<code class="highlighter-rouge">PushFilterPastJoinRule</code> should strengthen join type</li>
<li>Add <code class="highlighter-rouge">EquiJoinRel</code>, base class for joins known to be equi-joins.</li>
<li>Implement <code class="highlighter-rouge">CAST(&lt;string&gt; AS &lt;datetime&gt;)</code> and
<code class="highlighter-rouge">&lt;datetime&gt; + &lt;interval&gt;</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-360">CALCITE-360</a>]
Introduce a rule to infer predicates from equi-join conditions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-349">CALCITE-349</a>]
Add heuristic join-optimizer that can generate bushy joins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-346">CALCITE-346</a>]
Add commutative join rule</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-347">CALCITE-347</a>]
In <code class="highlighter-rouge">SqlRun</code>, add <code class="highlighter-rouge">!plan</code> command</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-314">CALCITE-314</a>]
Allow simple UDFs based on methods</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-327">CALCITE-327</a>]
Rules should use base class to find rule match &amp; use factory for object
creation</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-316">CALCITE-316</a>]
In <code class="highlighter-rouge">SqlRun</code>, match output regardless of order if <code class="highlighter-rouge">ORDER BY</code> not present</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-300">CALCITE-300</a>]
Support multiple parameters in <code class="highlighter-rouge">COUNT(DISTINCT x, y, ...)</code>
</li>
</ul>
<h4 id="api-0-9-0">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-343">CALCITE-343</a>]
RelDecorrelator should build its own mappings, not inherit from SqlToRelConverter</li>
<li>Remove deprecated methods.</li>
<li>Convert <code class="highlighter-rouge">Hook</code> to use Guava <code class="highlighter-rouge">Function</code> (was linq4j <code class="highlighter-rouge">Function1</code>).</li>
<li>Add fluent method <code class="highlighter-rouge">withHook</code>, to more easily add hooks in tests.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-321">CALCITE-321</a>]
Add support for overriding implementation of <code class="highlighter-rouge">CompoundIdentifier</code> in
<code class="highlighter-rouge">SqlParser</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-322">CALCITE-322</a>]
Add support for <code class="highlighter-rouge">SqlExplain</code>, <code class="highlighter-rouge">SqlOrderBy</code> and <code class="highlighter-rouge">SqlWith</code> to support
<code class="highlighter-rouge">SqlShuttle</code> use.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-323">CALCITE-323</a>]
Override <code class="highlighter-rouge">SqlUnresolvedFunction.inferReturnType()</code> to return <code class="highlighter-rouge">ANY</code> type
so framework implementors can support late bound function implementations.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-324">CALCITE-324</a>]
Add <code class="highlighter-rouge">ViewExpander</code> for <code class="highlighter-rouge">Planner</code> in <code class="highlighter-rouge">Frameworks</code>. Expose additional
properties of <code class="highlighter-rouge">ViewTable</code> to allow subclassing.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-247">CALCITE-247</a>]
Add <code class="highlighter-rouge">Context</code> and <code class="highlighter-rouge">FrameworkConfig</code>
</li>
</ul>
<h4 id="fixes-0-9-0">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-380">CALCITE-380</a>]
Downgrade to Guava 11.0.2</li>
<li>Move several .md files into new ‘doc’ directory, to keep the root directory simple.</li>
<li>Add DISCLAIMER</li>
<li>Update history and HOWTO</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-377">CALCITE-377</a>]
UnregisteredDriver should catch, log and re-throw NoClassDefFoundError</li>
<li>Inherit maven-release-plugin from Apache POM.</li>
<li>Test case for
[<a href="https://issues.apache.org/jira/browse/CALCITE-373">CALCITE-373</a>]
NOT IN and NULL values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-372">CALCITE-372</a>]
Change <code class="highlighter-rouge">LoptOptimizeJoinRule</code> &amp; <code class="highlighter-rouge">PushFilterPast</code>* rules to use factory</li>
<li>Upgrade <code class="highlighter-rouge">maven-checkstyle-plugin</code>.</li>
<li>Add class <code class="highlighter-rouge">Holder</code>, a mutable slot that can contain one object.</li>
<li>Remove the 2-minute wait at the top of the hour for tests of
<code class="highlighter-rouge">CURRENT_TIME</code>, etc.</li>
<li>Tune <code class="highlighter-rouge">ImmutableIntList</code>’s iterators.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-364">CALCITE-364</a>]
Validator rejects valid <code class="highlighter-rouge">WITH ... ORDER BY</code> query</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-363">CALCITE-363</a>]
Use <code class="highlighter-rouge">dependencyManagement</code> and <code class="highlighter-rouge">pluginManagement</code> in POM files</li>
<li>Add <code class="highlighter-rouge">FilterFactory</code>.</li>
<li>Add <code class="highlighter-rouge">README</code> file, incubation disclaimers, and how-to build and running tests.</li>
<li>Add <code class="highlighter-rouge">KEYS</code> and start how-to for making snapshots and releases.</li>
<li>Capital case component names; inherit license info from Apache parent POM.</li>
<li>Only run <code class="highlighter-rouge">apache-rat</code> and <code class="highlighter-rouge">git-commit-id-plugin</code> in “release” maven profile.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-348">CALCITE-348</a>]
Add Apache RAT as maven plugin</li>
<li>Change license headers from “Julian Hyde” to “ASF”; add headers where missing.</li>
<li>Fix build breakage on JDK 1.6 due to missing method <code class="highlighter-rouge">BitSet.previousClearBit</code>.</li>
<li>Refactor test infrastructure to allow testing against heuristic bushy-join
optimizer.</li>
<li>Add methods and tests for BitSets, and re-organize tests.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-354">CALCITE-354</a>]
Change maven groupId to “org.apache.optiq”</li>
<li>Specify return type when calling <code class="highlighter-rouge">RexBuilder.makeCall</code>, if possible.</li>
<li>Eliminate duplicate conditions in <code class="highlighter-rouge">RexProgramBuilder.addCondition</code>, not
<code class="highlighter-rouge">RexBuilder.makeCall</code> as previously.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-345">CALCITE-345</a>]
<code class="highlighter-rouge">AssertionError</code> in <code class="highlighter-rouge">RexToLixTranslator</code> comparing to date literal</li>
<li>Restore <code class="highlighter-rouge">PushFilterPastJoinRule</code> to <code class="highlighter-rouge">RelDecorrelator</code>; interim pending
[<a href="https://issues.apache.org/jira/browse/CALCITE-343">CALCITE-343</a>]
fix.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-340">CALCITE-340</a>]
Fix bug in <code class="highlighter-rouge">SqlToRelConverter</code> when push expressions in join conditions into
<code class="highlighter-rouge">ProjectRel</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-313">CALCITE-313</a>]
Query decorrelation fails</li>
<li>While unifying a <code class="highlighter-rouge">RelNode</code> tree with a materialized view expression,
switch representation to <code class="highlighter-rouge">MutableRel</code>s.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-305">CALCITE-305</a>]
Unit test failure on release candidates</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-325">CALCITE-325</a>]
Use Java list instead of Guava list to avoid null checks in case of
<code class="highlighter-rouge">SqlTypeExplicitPrecedenceList</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-326">CALCITE-326</a>]
Fix <code class="highlighter-rouge">RelOptUtil</code> <code class="highlighter-rouge">ANY</code> type check.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-303">CALCITE-303</a>]
Migrate issue URLs</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-331">CALCITE-331</a>]
Precision/scale compatibility checks should always succeed for <code class="highlighter-rouge">ANY</code> type</li>
<li>In <code class="highlighter-rouge">SqlRun</code>, allow <code class="highlighter-rouge">!plan</code> after <code class="highlighter-rouge">!ok</code> for same SQL statement.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-318">CALCITE-318</a>]
Add unit test for <code class="highlighter-rouge">SqlRun</code>
</li>
<li>Fix a bug where composite <code class="highlighter-rouge">SELECT DISTINCT</code> would return duplicate rows.</li>
</ul>
<h2 id="v0-8">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.8">0.8</a> / 2014-06-27</h2>
<h4 id="new-features-0-8">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-310">CALCITE-310</a>]
Implement LEAD, LAG and NTILE windowed aggregates</li>
<li>Reduce <code class="highlighter-rouge">COUNT(not-null-expression)</code> to <code class="highlighter-rouge">COUNT()</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-292">CALCITE-292</a>]
Improve windowed aggregate return types</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-302">CALCITE-302</a>]
Use heuristic rule to plan queries with large numbers of joins</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-283">CALCITE-283</a>]
Add TPC-DS data generator</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-294">CALCITE-294</a>]
Implement DENSE_RANK windowed aggregate function</li>
<li>SqlRun utility
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-290">CALCITE-290</a>]
Add <code class="highlighter-rouge">SqlRun</code>, an idempotent utility for running SQL test scripts</li>
<li>Add “!skip” command to SqlRun.</li>
<li>Add MySQL formatting mode to SqlRun.</li>
</ul>
</li>
</ul>
<h4 id="api-0-8">API changes</h4>
<ul>
<li>Re-organize planner initialization,
to make it easier to use heuristic join order.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-301">CALCITE-301</a>]
Add <code class="highlighter-rouge">Program</code> interface, a planner phase more general than current <code class="highlighter-rouge">RuleSet</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-263">CALCITE-263</a>]
Add operand type that will cause a rule to fire when a new subset is created</li>
<li>Clean up and document SqlKind.
<ul>
<li>Add <code class="highlighter-rouge">IS_NOT_TRUE</code> and <code class="highlighter-rouge">IS_NOT_FALSE</code> <code class="highlighter-rouge">SqlKind</code> enums.</li>
<li>Add <code class="highlighter-rouge">SqlKind.IS_NOT_NULL</code> enum value, and use where possible,
including for <code class="highlighter-rouge">IS_NOT_UNKNOWN</code> operator.</li>
</ul>
</li>
</ul>
<h4 id="fixes-0-8">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-312">CALCITE-312</a>]
Trim non-required fields before <code class="highlighter-rouge">WindowRel</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-311">CALCITE-311</a>]
Wrong results when filtering the results of windowed aggregation</li>
<li>More tests for <code class="highlighter-rouge">WITH ... ORDER BY</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-309">CALCITE-309</a>]
<code class="highlighter-rouge">WITH ... ORDER BY</code> query gives <code class="highlighter-rouge">AssertionError</code>
</li>
<li>Enable <code class="highlighter-rouge">MultiJoinRel</code> and some other planner rule tests.</li>
<li>Add <code class="highlighter-rouge">ImmutableNullableList</code> and <code class="highlighter-rouge">UnmodifiableArrayList</code>,
and remove calls to <code class="highlighter-rouge">Arrays.asList</code>.</li>
<li>Add method <code class="highlighter-rouge">IntPair.zip</code>.</li>
<li>Reimplement regular and windowed aggregates</li>
<li>Switch from github to Apache JIRA for issues tracking.
<ul>
<li>In release history, update issue URLs from github to Apache JIRA</li>
</ul>
</li>
<li>The Apache mailing list is now the official mailing list. Add presentations.</li>
<li>Add test for overloaded UDF.</li>
<li>Add tests for <code class="highlighter-rouge">NOT IN</code> where sub-query returns NULL values.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-288">CALCITE-288</a>]
Add tests for windowed aggregation based on Postgres reference queries</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-286">CALCITE-286</a>]
Error casting MongoDB date</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-284">CALCITE-284</a>]
Window functions range defaults to <code class="highlighter-rouge">CURRENT ROW</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-285">CALCITE-285</a>]
Window functions throw exception without <code class="highlighter-rouge">ORDER BY</code>
</li>
<li>Test case for
[&lt;a href=“https://issues.apache.org/jira/browse/CALCITE-285”&gt;CALCITE-285&lt;/a&gt;].</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-281">CALCITE-281</a>]
<code class="highlighter-rouge">EXTRACT</code> function’s SQL return type is <code class="highlighter-rouge">BIGINT</code> but implemented as Java <code class="highlighter-rouge">int</code>
</li>
</ul>
<h2 id="v0-7">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.7">0.7</a> / 2014-05-13</h2>
<h4 id="new-features-0-7">New features</h4>
<ul>
<li>Implement table functions.</li>
<li>Arrays and multi-sets:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-267">CALCITE-267</a>]
Improve support for ARRAY data type</li>
<li>Better type information for JDBC Array; nested array now possible.</li>
<li>Implement <code class="highlighter-rouge">JOIN LATERAL</code> and <code class="highlighter-rouge">JOIN UNNEST</code>.</li>
<li>Implement the <code class="highlighter-rouge">UNNEST</code> relational operator, and various improvements
to <code class="highlighter-rouge">ARRAY</code> and <code class="highlighter-rouge">MULTISET</code> data types.</li>
<li>Represent <code class="highlighter-rouge">ARRAY</code> columns as Java lists.</li>
<li>Implement <code class="highlighter-rouge">CARDINALITY(ARRAY)</code> SQL operator.</li>
</ul>
</li>
<li>Implement scalar sub-query in <code class="highlighter-rouge">SELECT</code> clause.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-273">CALCITE-273</a>]
Support column alias in WITH queries (common table expressions)</li>
<li>Windowed aggregates:
<ul>
<li>Aggregate over constants, e.g. <code class="highlighter-rouge">SUM(1) OVER (ROWS 10 PRECEDING)</code>;</li>
<li>
<code class="highlighter-rouge">UNBOUNDED PRECEDING</code> window range;</li>
<li>Windowed aggregates computed over primitive scalars.</li>
</ul>
</li>
<li>Fix return type inference for aggregate calls. If the <code class="highlighter-rouge">GROUP BY</code> clause is
empty, <code class="highlighter-rouge">SUM</code> may return null.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-37">CALCITE-37</a>]
Document JSON model file format (as <a href="https://github.com/apache/calcite/blob/master/site/_docs/model.md">model.md</a>).</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-238">CALCITE-238</a>]
Add adapter that generates TPC-H data</li>
<li>Improve exception message in <code class="highlighter-rouge">AvaticaConnection</code>; add
<code class="highlighter-rouge">ExceptionMessageTest</code>.</li>
<li>Implement micro-benchmarks via
<a href="https://openjdk.java.net/projects/code-tools/jmh/">JMH</a>.</li>
</ul>
<h4 id="api-0-7">API changes</h4>
<ul>
<li>Provide an option to create root schema without the “metadata” schema.</li>
<li>Schema SPI:
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-175">CALCITE-175</a>]
Modify Schema SPI to allow caching</li>
<li>Get sub-schemas defined by a Schema SPI, and cache their <code class="highlighter-rouge">OptiqSchema</code>
wrappers. (Tobi Vollebregt and Julian Hyde)</li>
</ul>
</li>
<li>SqlAdvisor callable from client via JDBC.</li>
</ul>
<h4 id="fixes-0-7">Bug-fixes and internal changes</h4>
<ul>
<li>Add Apache incubator proposal.</li>
<li>Rename RELEASE.md to HISTORY.md.</li>
<li>Upgrade maven-release-plugin.</li>
<li>Upgrade to linq4j-0.3.</li>
<li>Code generation improvements:</li>
<li>Move code-generation optimizer to linq4j;</li>
<li>Improve translation of strict functions;</li>
<li>Mark most methods in <code class="highlighter-rouge">SqlFunctions</code> as <code class="highlighter-rouge">@Deterministic</code>;</li>
<li>Support <code class="highlighter-rouge">static final</code> constants generated by linq4j.</li>
<li>Avoid excessive box and unbox of primitives when using <code class="highlighter-rouge">Object[]</code> storage.</li>
<li>In JDBC result set, avoid row computation on each accessor call.</li>
<li>Test composite join conditions in various flavors of outer join.</li>
<li>Use <code class="highlighter-rouge">fromTrait</code> of the just previously converted <code class="highlighter-rouge">RelNode</code> instead
of the original <code class="highlighter-rouge">RelNode</code>.</li>
<li>Disable a MongoDB test, pending
[<a href="https://issues.apache.org/jira/browse/CALCITE-270">CALCITE-270</a>].</li>
<li>Hush warnings from <code class="highlighter-rouge">SplunkAdapterTest</code> if Splunk is not available.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-252">CALCITE-252</a>]
Scalar sub-query that returns 0 rows should become NULL value</li>
<li>
<code class="highlighter-rouge">SplunkAdapterTest</code> now uses the same Foodmart database as <code class="highlighter-rouge">JdbcTest</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-242">CALCITE-242</a>]
SplunkAdapterTest fails</li>
<li>Remove some obsolete classes.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-205">CALCITE-205</a>]
Suspicious map.get in VolcanoPlanner.reregister</li>
</ul>
<h2 id="v0-6">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.6">0.6</a> / 2014-04-11</h2>
<h4 id="new-features-0-6">New features</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-214">CALCITE-214</a>]
Modify Frameworks to allow Schema to be re-used
Obsoletes <code class="highlighter-rouge">name</code> field of <code class="highlighter-rouge">ReflectiveSchema</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-237">CALCITE-237</a>]
Allow user-defined aggregate functions (UDAs) to be defined in a model</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-227">CALCITE-227</a>]
Extend <code class="highlighter-rouge">EXTRACT</code> function to support <code class="highlighter-rouge">DATE</code>, <code class="highlighter-rouge">TIME</code> and <code class="highlighter-rouge">TIMESTAMP</code> values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-222">CALCITE-222</a>]
User-defined table macros</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-179">CALCITE-179</a>]
Optiq on Windows
<ul>
<li>Add <code class="highlighter-rouge">sqlline.bat</code> and fix issues running <code class="highlighter-rouge">sqlline</code> under Cygwin.</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-195">CALCITE-195</a>]
Push aggregation into MongoDB adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-193">CALCITE-193</a>]
Implement OFFSET and LIMIT in MongoDB adapter</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-164">CALCITE-164</a>]
Improve query performance of optiq over MongoDB</li>
<li>Add Phoenix (HBase) SQL dialect (Bruno Dumon)</li>
</ul>
<h4 id="api-0-6">API changes</h4>
<ul>
<li>Obsolete <code class="highlighter-rouge">RexImpTable.AggregateImplementor</code> and rename <code class="highlighter-rouge">AggImplementor2</code>.
(<strong>This is a breaking change</strong>.)</li>
<li>Convert <code class="highlighter-rouge">CombinedParser.jj</code> into freemarker template to allow
custom parser implementations. (Venki Korukanti)</li>
<li>Extend <code class="highlighter-rouge">Planner</code> to pass a custom <code class="highlighter-rouge">ConvertletTable</code> and custom SQL parser.</li>
<li>In <code class="highlighter-rouge">Frameworks</code>, add a way to specify list of <code class="highlighter-rouge">TraitDef</code>s that will be used
by planner. (Jinfeng Ni)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-198">CALCITE-198</a>]
Use <code class="highlighter-rouge">RexExecutor</code> to evaluate projections and filters</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-219">CALCITE-219</a>]
Parse <code class="highlighter-rouge">ALTER scope SET option = value</code> statement</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-215">CALCITE-215</a>]
A Schema should not have to remember its name and parent
(<strong>This is a breaking change</strong>.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-180">CALCITE-180</a>]
Common base class for TableFunction, ScalarFunction
(<strong>This is a breaking change</strong>.)</li>
<li>Add methods for dealing with symbols; deprecate
<code class="highlighter-rouge">SqlLiteral.booleanValue(SqlNode)</code>, <code class="highlighter-rouge">SqlLiteral.symbolValue(SqlNode)</code>.</li>
<li>Add <code class="highlighter-rouge">RelOptPlanner.clear()</code>; now it is safe to call <code class="highlighter-rouge">transform</code> twice.
(Jinfeng Ni)</li>
<li>Remove APIs deprecated for 0.5.</li>
<li>Move around some operator classes and singletons.</li>
</ul>
<h4 id="fixes-0-6">Bug-fixes and internal changes</h4>
<ul>
<li>Upgrade to linq4j-0.2.</li>
<li>
<code class="highlighter-rouge">FETCH</code> and <code class="highlighter-rouge">LIMIT</code> are ignored during SQL-to-RelNode translation.
(Venki Korukanti)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-245">CALCITE-245</a>]
Off-by-one translation of ON clause of JOIN</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-191">CALCITE-191</a>]
Rotate time/date/timestamp vals to local timezone</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-244">CALCITE-244</a>]
<code class="highlighter-rouge">RelOptTableImpl.create</code> always expects <code class="highlighter-rouge">QueryableTable</code> type in
<code class="highlighter-rouge">OptiqSchema.TableEntry</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-225">CALCITE-225</a>]
Optiq doesn’t correctly decorrelate queries</li>
<li>Clean up package-info. Remove duplicates in test packages so they
don’t conflict with those in non-test packages.</li>
<li>Add <code class="highlighter-rouge">Pair.adjacents(Iterable)</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-199">CALCITE-199</a>]
Various <code class="highlighter-rouge">ANY</code> type conditions aren’t correctly being considered
(Jacques Nadeau)</li>
<li>Add files to <code class="highlighter-rouge">.gitignore</code> that shouldn’t be checked in when using
Eclipse. (Jacques Nadeau)</li>
<li>Add class <code class="highlighter-rouge">ControlFlowException</code>, and make it base class of
existing control-flow exception classes.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-232">CALCITE-232</a>]
Sum and avg of empty set should be null as per SQL specification</li>
<li>Add <code class="highlighter-rouge">SqlUnresolvedFunction</code>, to improve how return type of
user-defined functions is resolved. (Vladimir Sitnikov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-228">CALCITE-228</a>]
Error while compiling generated Java code when using UDF in expression</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-226">CALCITE-226</a>]
User-defined functions should work without explicit schema prefix</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-229">CALCITE-229</a>]
Join between different JDBC schemas not implementable</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-230">CALCITE-230</a>]
RemoveSortRule derives trait set from sort, should derive it from sort’s child</li>
<li>Test view and sub-query with <code class="highlighter-rouge">ORDER BY</code> and <code class="highlighter-rouge">LIMIT</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-223">CALCITE-223</a>]
Add <code class="highlighter-rouge">NOTICE</code> and <code class="highlighter-rouge">LICENSE</code> files in all generated JAR files</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-209">CALCITE-209</a>]
Consistent strategy for line-endings in tests
Convert uses of <code class="highlighter-rouge">NL</code> in tests to Linux newline “\n”.
This makes string constants simpler.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-218">CALCITE-218</a>]
Functions case sensitive when using <code class="highlighter-rouge">Lex.MYSQL</code>
</li>
<li>Add tests that a query with aggregate expressions in the <code class="highlighter-rouge">SELECT</code>
clause is considered an aggregate query, even if there is no <code class="highlighter-rouge">GROUP BY</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-216">CALCITE-216</a>]
Inconsistent use of provided operator table causes inability to
add aggregate functions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-200">CALCITE-200</a>]
Javadoc generation fails under JDK 1.8</li>
<li>Add class <code class="highlighter-rouge">XmlOutput</code> (based on <code class="highlighter-rouge">org.eigenbase.xom.XMLOutput</code>) and remove
dependency on eigenbase-xom.</li>
<li>Performance: Don’t create stack-trace for exceptions used for control-flow.
(Vladimir Sitnikov)</li>
<li>Performance: Tune <code class="highlighter-rouge">RexProgramBuilder</code> by using <code class="highlighter-rouge">Pair</code> rather than <code class="highlighter-rouge">String</code> as
expression key. (Vladimir Sitnikov)</li>
<li>Fix NPE using TRIM function with JDBC. (Bruno Dumon)</li>
<li>Add dependency on
<a href="https://github.com/julianhyde/hydromatic-resource">hydromatic-resource-maven-plugin</a>
and obsolete our copy of the resource framework.</li>
<li>Fix race condition in <code class="highlighter-rouge">SpaceList</code>.</li>
<li>In planner, use <code class="highlighter-rouge">RelTrait.subsumes</code> rather than <code class="highlighter-rouge">equals</code> in an assert.
(Jinfeng Ni)</li>
</ul>
<h2 id="v0-5">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.5">0.5</a> / 2014-03-14</h2>
<h4 id="new-features-0-5">New features</h4>
<ul>
<li>Allow <code class="highlighter-rouge">quoting</code>, <code class="highlighter-rouge">quotedCasing</code>, <code class="highlighter-rouge">unquotedCasing</code>, and <code class="highlighter-rouge">caseSensitive</code>
properties to be specified explicitly (Vladimir Sitnikov)</li>
<li>Recognize more kinds of materializations, including filter-on-project (where
project contains expressions) and some kinds of aggregation.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-128">CALCITE-128</a>]
Support <code class="highlighter-rouge">WITH</code> queries (common table expressions)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-53">CALCITE-53</a>]
Allow <code class="highlighter-rouge">WHEN</code> clause in simple <code class="highlighter-rouge">CASE</code> expression to have multiple values</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-156">CALCITE-156</a>]
Optiq should recognize ‘SYSTEM TABLE’, ‘JOIN’, ‘INDEX’ as table types</li>
<li>Support querying ARRAY columns from JDBC source. (Gabriel Reid)</li>
</ul>
<h4 id="api-0-5">API changes</h4>
<ul>
<li>Add
<code class="highlighter-rouge">ProjectRelBase.copy(RelTraitSet, RelNode, List&lt;RexNode&gt;, RelDataType)</code>
and make <code class="highlighter-rouge">ProjectRelBase.copy(RelTraitSet, RelNode)</code> final.
(<strong>This is a breaking change</strong> for sub-classes of <code class="highlighter-rouge">ProjectRelBase</code>.)</li>
<li>Change <code class="highlighter-rouge">RexBuilder.makeRangeReference</code> parameter type.</li>
<li>
<code class="highlighter-rouge">RexBuilder.makeInputRef</code> replaces <code class="highlighter-rouge">RelOptUtil.createInputRef</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-160">CALCITE-160</a>]
Allow comments in schema definitions</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-147">CALCITE-147</a>]
Create a new kind of <code class="highlighter-rouge">SqlCall</code> that keeps operands in fields, not an operands
array
<ul>
<li>Very widely used parse tree nodes with complex operands, including
<code class="highlighter-rouge">SqlSelect</code>, <code class="highlighter-rouge">SqlJoin</code>, <code class="highlighter-rouge">SqlInsert</code>, and a new node type <code class="highlighter-rouge">SqlOrderBy</code>, are
now sub-classes of <code class="highlighter-rouge">SqlCall</code> but not <code class="highlighter-rouge">SqlBasicCall</code>.</li>
<li>(<strong>This is a breaking change</strong> to code that assumes that, say,
<code class="highlighter-rouge">SqlSelect</code> has an <code class="highlighter-rouge">operands</code> field.)</li>
</ul>
</li>
<li>Convert all enum constants to upper-case.
(<strong>This is a breaking change</strong>.)</li>
</ul>
<h4 id="fixes-0-5">Bug-fixes and internal changes</h4>
<ul>
<li>Generate optiq-core-VERSION-tests.jar not parent-VERSION-tests.jar.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-176">CALCITE-176</a>]
ORDER BY expression doesn’t work with SELECT *</li>
<li>Fix VARCHAR casts sent to hsqldb source (Bruno Dumon)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-143">CALCITE-143</a>]
Remove dependency on eigenbase-resgen</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-173">CALCITE-173</a>]
Case-insensitive table names are not supported for <code class="highlighter-rouge">Casing.UNCHANGED</code>
</li>
<li>
<code class="highlighter-rouge">DATE.getLimit</code> now returns <code class="highlighter-rouge">Calendar</code> in GMT time zone (Vladimir Sitnikov)</li>
<li>Set <code class="highlighter-rouge">en_US</code> locale in tests that match against error numbers, dates
(Vladimir Sitnikov)</li>
<li>Use 1 test thread per CPU to avoid thread starvation on dual core CPUs
(Vladimir Sitnikov)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-174">CALCITE-174</a>]
Move hsqldb to test scope</li>
<li>Add unit tests for <code class="highlighter-rouge">RexExecutorImpl</code>.</li>
<li>Correct JSON model examples in Javadoc comments. (Karel Vervaeke)</li>
<li>Move test reference logs from <code class="highlighter-rouge">src/test/java</code> to <code class="highlighter-rouge">src/test/resources</code>
(reduces the number of ‘untracked files’ reported by git)</li>
<li>Tune <code class="highlighter-rouge">Util.SpaceList</code>, fix race condition, and move into new utility class
<code class="highlighter-rouge">Spaces</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-163">CALCITE-163</a>]
Equi-join warning</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-157">CALCITE-157</a>]
Handle <code class="highlighter-rouge">SQLFeatureNotSupported</code> when calling <code class="highlighter-rouge">setQueryTimeout</code>
(Karel Vervaeke)</li>
<li>Fix Optiq on Windows. (All tests and checkstyle checks pass.)</li>
<li>In checkstyle, support Windows-style file separator, otherwise build fails in
Windows due to suppressions not used. (Vladimir Sitnikov)</li>
<li>Enable MongoDB tests when <code class="highlighter-rouge">-Dcalcite.test.mongodb=true</code>.</li>
<li>Cleanup cache exception-handling and an assert.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-153">CALCITE-153</a>]
Error using MongoDB adapter: Failed to set setXIncludeAware(true)</li>
<li>Disable spark engine unless Spark libraries are on the class path and
<code class="highlighter-rouge">spark=true</code> is specified in the connect string.</li>
<li>Fix path to <code class="highlighter-rouge">mongo-zips-model.json</code> in HOWTO. (Mariano Luna)</li>
<li>Fix bug deriving the type of a join-key.</li>
<li>Fix the value of <code class="highlighter-rouge">ONE_MINUS_EPSILON</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-158">CALCITE-158</a>]
Optiq fails when call <code class="highlighter-rouge">Planner.transform()</code> multiple times, each with
different ruleset</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-148">CALCITE-148</a>]
Less verbose description of collation. Also, optimize <code class="highlighter-rouge">RelTraitSet</code> creation
and amortize <code class="highlighter-rouge">RelTraitSet.toString()</code>.</li>
<li>Add generics to SQL parser.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-145">CALCITE-145</a>]
Unexpected upper-casing of keywords when using java lexer</li>
<li>Remove duplicate <code class="highlighter-rouge">maven-source-plugin</code>.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-141">CALCITE-141</a>]
Downgrade to guava-11.0.2. (This is necessary for Hadoop compatibility.
Later versions of Guava can also be used.)</li>
<li>Upgrade to spark-0.9.0. (Because this version of spark is available from
maven-central, we can make optiq-spark part of the regular build, and remove
the spark profile.)</li>
</ul>
<h2 id="v0-4-18">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.4.18">0.4.18</a> / 2014-02-14</h2>
<h4 id="api-0-4-18">API and functionality changes</h4>
<ul>
<li>Configurable lexical policy
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-33">CALCITE-33</a>]
SQL parser should allow different identifier quoting</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-34">CALCITE-34</a>]
Policy for case-sensitivity of identifiers should be configurable</li>
<li>New connect-string parameter “lex”, with allowable values
“ORACLE”, “MYSQL”, “SQL_SERVER”, “JAVA” sets policy to be like those
databases, in terms of quote string, whether quoted and unquoted
identifiers are converted to upper/lower case, and whether
identifiers are matched case-sensitively. “JAVA” is case-sensitive,
even for unquoted identifiers. It should be possible
for each connection to have its own settings for these. Objects
shared between sessions (views, materialized views) might
require more work.</li>
<li>Added various internals to make it easy for developers to do the
right thing. When you need to look up a schema, table or
column/field name, you should use a catalog reader, and it will
apply the right case-sensitivity policy.</li>
<li>Enable optiq consumer to utilize different lexical settings in
Frameworks/Planner. (Jacques Nadeau)</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-135">CALCITE-115</a>]
Add a PARSE_TREE hook point with SqlNode parameter</li>
<li>Change planner rules to use <code class="highlighter-rouge">ProjectFactory</code> for creating
projects. (John Pullokkaran)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-131">CALCITE-131</a>]
Add interfaces for metadata (statistics)
(<strong>This is a breaking change</strong>.)</li>
<li>Update Avatica to allow <code class="highlighter-rouge">Cursor</code> &amp; <code class="highlighter-rouge">Accessor</code> implementations to throw
<code class="highlighter-rouge">SQLException</code>. (Jacques Nadeau)</li>
<li>Separate cost model (<code class="highlighter-rouge">RelOptCostFactory</code>) from planner. Allow
<code class="highlighter-rouge">VolcanoPlanner</code> to be sub-classed with different cost factory.
<ul>
<li>Remove references to VolcanoCost from RelSubset, so clients can
use a different <code class="highlighter-rouge">RelOptCost</code>. (Harish Butani)</li>
<li>Make <code class="highlighter-rouge">VolcanoCost</code> immutable.</li>
</ul>
</li>
<li>Break <code class="highlighter-rouge">SqlTypeStrategies</code> into <code class="highlighter-rouge">OperandTypes</code>, <code class="highlighter-rouge">ReturnTypes</code> and
<code class="highlighter-rouge">InferTypes</code>, and rename its static members to upper-case, per
checkstyle. (<strong>This is a breaking change</strong>.)</li>
<li>Add a mechanism for defining configuration parameters and have them
appear in the responses to <code class="highlighter-rouge">AvaticaDatabaseMetaData</code> methods.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-113">CALCITE-113</a>]
User-defined scalar functions</li>
<li>Add rules to short-cut a query if <code class="highlighter-rouge">LIMIT 0</code> is present. Also remove
sort, aggregation, join if their inputs are known to be empty, and
propagate the fact that the relational expressions are known to be
empty up the tree. (We already do this for union, filter, project.)</li>
<li>
<code class="highlighter-rouge">RexNode</code> and its sub-classes are now immutable.</li>
</ul>
<h4 id="fixes-0-4-18">Bug-fixes and internal changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-61">CALCITE-16</a>]
Upgrade to janino-2.7</li>
<li>Upgrade to guava-15.0 (guava-14.0.1 still allowed), sqlline-1.1.7,
maven-surefire-plugin-2.16, linq4j-0.1.13.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-136">CALCITE-136</a>]
Support Hive dialect</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-138">CALCITE-138</a>]
SqlDataTypeSpec.clone handles collection types wrong</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-137">CALCITE-137</a>]
If a subset is created that is subsumed by an existing subset, its
‘best’ is not assigned
<ul>
<li>If best rel in a Volcano subset doesn’t have metadata, see if
other rels have metadata.</li>
</ul>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-127">CALCITE-127</a>]
EnumerableCalcRel can’t support 3+ AND conditions (Harish Butani)</li>
<li>Fix push-down of datetime literals to JDBC data sources.</li>
<li>Add <code class="highlighter-rouge">Util.startsWith(List, List)</code> and <code class="highlighter-rouge">Util.hashCode(double)</code>.</li>
<li>Add maven-checkstyle-plugin, enable in “verify” phase, and fix exceptions.</li>
<li>Fix <code class="highlighter-rouge">SqlValidator</code> to rely on <code class="highlighter-rouge">RelDataType</code> to do field name matching. Fix
<code class="highlighter-rouge">RelDataTypeImpl</code> to correctly use the case sensitive flag rather than
ignoring it.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-119">CALCITE-119</a>]
Comparing Java type long with SQL type INTEGER gives wrong answer</li>
<li>Enable multi-threaded testing, and fix race conditions.
<ul>
<li>Two of the race conditions involved involving trait caches. The
other was indeterminacy in type system when precision was not
specified but had a default; now we canonize TIME to TIME(0), for
instance.</li>
</ul>
</li>
<li>Convert files to <code class="highlighter-rouge">us-ascii</code>.</li>
<li>Work around
[<a href="https://jira.codehaus.org/browse/JANINO-169">JANINO-169</a>].</li>
<li>Refactor SQL validator testing infrastructure so SQL parser is
configurable.</li>
<li>Add <code class="highlighter-rouge">optiq-mat-plugin</code> to README.</li>
<li>Fix the check for duplicate subsets in a rule match.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-112">CALCITE-112</a>]
Java boolean column should be treated as SQL boolean</li>
<li>Fix escaped unicode characters above 0x8000. Add tests for unicode
strings.</li>
</ul>
<h2 id="v0-4-17">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.4.17">0.4.17</a> / 2014-01-13</h2>
<h4 id="fixes-0-4-17">API changes</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-106">CALCITE-106</a>]
Make <code class="highlighter-rouge">Schema</code> and <code class="highlighter-rouge">Table</code> SPIs simpler to implement, and make them
re-usable across connections
(<strong>This is a breaking change</strong>.)</li>
<li>Make it easier to define sub-classes of rule operands. The new class
<code class="highlighter-rouge">RelOptRuleOperandChildren</code> contains the children of an operand and
the policy for dealing with them. Existing rules now use the new
methods to construct operands: <code class="highlighter-rouge">operand()</code>, <code class="highlighter-rouge">leaf()</code>, <code class="highlighter-rouge">any()</code>, <code class="highlighter-rouge">none()</code>,
<code class="highlighter-rouge">unordered()</code>. The previous methods are now deprecated and will be
removed before 0.4.18. (<strong>This is a breaking change</strong>.)</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-101">CALCITE-101</a>]
Enable phased access to the Optiq engine</li>
<li>List-handling methods in <code class="highlighter-rouge">Util</code>: add methods <code class="highlighter-rouge">skipLast</code>, <code class="highlighter-rouge">last</code>, <code class="highlighter-rouge">skip</code>;
remove <code class="highlighter-rouge">subList</code>, <code class="highlighter-rouge">butLast</code>.</li>
<li>Convert <code class="highlighter-rouge">SqlIdentifier.names</code> from <code class="highlighter-rouge">String[]</code> to <code class="highlighter-rouge">ImmutableList&lt;String&gt;</code>.</li>
<li>Rename <code class="highlighter-rouge">OptiqAssert.assertThat()</code> to <code class="highlighter-rouge">that()</code>, to avoid clash with junit’s
<code class="highlighter-rouge">Assert.assertThat()</code>.</li>
<li>Usability improvements for <code class="highlighter-rouge">RelDataTypeFactory.FieldInfoBuilder</code>. It
now has a type-factory, so you can just call <code class="highlighter-rouge">build()</code>.</li>
<li>Rework <code class="highlighter-rouge">HepProgramBuilder</code> into a fluent API.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-105">CALCITE-105</a>]
Externalize RelNode to and from JSON</li>
</ul>
<h4 id="tuning-0-4-17">Tuning</h4>
<ul>
<li>If <code class="highlighter-rouge">EnumerableAggregateRel</code> has no aggregate functions, generate a
call to <code class="highlighter-rouge">Enumerable.distinct()</code>, thereby saving the effort of
building trivial accumulators.</li>
<li>Default rule set now does not introduce <code class="highlighter-rouge">CalcRel</code> until a later phase
of planning. This reduces the number of trivial projects and calcs
created, merged, and elimated.</li>
<li>Reduce the amount of time spent creating record types that
already exist.</li>
<li>More efficient implementation of <code class="highlighter-rouge">Util.isDistinct</code> for small lists.</li>
<li>When an internal record has 0 fields, rather than generating a
synthetic class and lots of instances that are all the same, use the
new <code class="highlighter-rouge">Unit</code> class, which is a singleton.</li>
<li>To take advantage of asymmetric hash join added recently in linq4j,
tweak cost of <code class="highlighter-rouge">EnumerableJoinRel</code> so that join is cheaper if the
larger input is on the left, and more expensive if it is a cartesian
product.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-70">CALCITE-70</a>]
Joins seem to be very expensive in memory</li>
<li>Make planning process more efficient by not sorting the list of
matched rules each cycle. It is sorted if tracing is enabled;
otherwise we scan to find the most important element. For this list,
replace <code class="highlighter-rouge">LinkedList</code> with <code class="highlighter-rouge">ChunkList</code>, which has an O(1) remove and add,
a fast O(n) get, and fast scan.</li>
</ul>
<h4 id="other-0-4-17">Other</h4>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-87">CALCITE-87</a>]
Constant folding
<ul>
<li>Rules for constant-expression reduction, and to simplify/eliminate
<code class="highlighter-rouge">VALUES</code> operator.</li>
</ul>
</li>
<li>Graph algorithms: Implement breadth-first iterator and cycle-detector.</li>
<li>Fix bug in planner which occurred when two <code class="highlighter-rouge">RelNode</code>s have identical
digest but different row-type.</li>
<li>Fix link to optiq-csv tutorial.</li>
<li>Fix bugs in <code class="highlighter-rouge">RemoveTrivialProjectRule.strip</code>, <code class="highlighter-rouge">JdbcProjectRel.implement</code>
and <code class="highlighter-rouge">SortRel.computeSelfCost</code>.</li>
<li>Reformat code, and remove <code class="highlighter-rouge">@author</code> tags.</li>
<li>Upgrade to eigenbase-xom-1.3.4, eigenbase-properties-1.1.4,
eigenbase-resgen-1.3.6.</li>
<li>Upgrade to linq4j-0.1.12.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-97">CALCITE-97</a>]
Correlated EXISTS</li>
<li>Fix a bug in <code class="highlighter-rouge">VolcanoCost</code>.</li>
<li>Add class <code class="highlighter-rouge">FoodMartQuerySet</code>, that contains the 6,700 foodmart queries.</li>
<li>Fix factory class names in <code class="highlighter-rouge">UnregisteredDriver</code>
</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-96">CALCITE-96</a>]
LIMIT against a table in a clone schema causes UnsupportedOperationException</li>
<li>Disable spark module by default.</li>
<li>Allow <code class="highlighter-rouge">CloneSchema</code> to be specified in terms of url, driver, user,
password; not just dataSource.</li>
<li>Wrap internal error in <code class="highlighter-rouge">SQLException</code>.</li>
</ul>
<h2 id="v0-4-16">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.4.16">0.4.16</a> / 2013-11-24</h2>
<ul>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-69">CALCITE-69</a>]
Can’t join on string columns and other problems with expressions in the join
condition</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-74">CALCITE-74</a>]
JOIN … USING fails in 3-way join with UnsupportedOperationException.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-65">CALCITE-65</a>]
Fix issues in the JDBC driver, and in particular to DatabaseMetaData methods,
to make Squirrel-SQL run better.</li>
<li>Fix JDBC column, table, schema names for when the table is not in a schema of
depth 1.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-85">CALCITE-85</a>]
Adding a table to the root schema causes breakage in OptiqPrepareImpl</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-84">CALCITE-84</a>]
Extract Optiq’s JDBC driver as a new JDBC driver framework, Avatica.
Other projects can use this to implement a JDBC driver by implementing
just a few methods. If you wish to use Optiq’s JDBC driver, you will
now need to include optiq-avatica.jar in addition to optiq-core.jar.
Avatica does not depend on anything besides the standard Java library.</li>
<li>Support for parameters in PreparedStatement.</li>
<li>First steps in recognizing complex materializations. Internally we introduce a
concept called a “star table”, virtual table composed of real tables joined
together via many-to-one relationships. The queries that define
materializations and end-user queries are canonized in terms of star tables.
Matching (not done yet) will then be a matter of looking for sort, groupBy,
project. It is not yet possible to define a star in an Optiq model file.</li>
<li>Add section to <a href="https://github.com/apache/calcite/blob/master/site/_docs/howto.md">HOWTO</a>
on implementing adapters.</li>
<li>Fix data type conversions when creating a clone table in memory.</li>
<li>Fix how strings are escaped in JsonBuilder.</li>
<li>Test suite now depends on an embedded hsqldb database, so you can run
<code>mvn test</code> right after pulling from git. You can instead use a
MySQL database if you specify ‘-Dcalcite.test.db=mysql’, but you need to
manually populate it.</li>
<li>Fix a planner issue which occurs when the left and right children of join are
the same relational expression, caused by a self-join query.</li>
<li>[<a href="https://issues.apache.org/jira/browse/CALCITE-76">CALCITE-76</a>]
Precedence of the item operator, <code>map[index]</code>; remove the space
before ‘[’ when converting parse tree to string.</li>
<li>Allow <code>CAST(expression AS ANY)</code>, and fix an issue with the ANY type
and NULL values.</li>
<li>Handle null timestamps and dates coming out of JDBC adapter.</li>
<li>Add <code>jdbcDriver</code> attribute to JDBC schema in model, for drivers
that do not auto-register.</li>
<li>Allow join rules to match any subclass of JoinRelBase.</li>
<li>Push projects, filters and sorts down to MongoDB. (Fixes
[<a href="https://issues.apache.org/jira/browse/CALCITE-57">CALCITE-57</a>],
[<a href="https://issues.apache.org/jira/browse/CALCITE-60">CALCITE-60</a>] and
[<a href="https://issues.apache.org/jira/browse/CALCITE-72">CALCITE-72</a>].)</li>
<li>Add instructions for loading FoodMart data set into MongoDB, and how to enable
tracing.</li>
<li>Now runs on JDK 1.8 (still runs on JDK 1.6 and JDK 1.7).</li>
<li>Upgrade to junit-4.11 (avoiding the dodgy junit-4.1.12).</li>
<li>Upgrade to linq4j-0.1.11.</li>
</ul>
<h2 id="v0-4-15">
<a href="https://github.com/apache/calcite/releases/tag/optiq-parent-0.4.15">0.4.15</a> / 2013-10-14</h2>
<ul>
<li>Lots of good stuff that this margin is too small to contain. See
<a href="https://github.com/apache/calcite/blob/master/site/_docs/reference.md">SQL language reference</a> and
<a href="https://github.com/apache/calcite/blob/master/site/_docs/model.md">JSON model reference</a>.</li>
</ul>
<h1 id="optiq-csv-release-history">Optiq-csv release history</h1>
<p>Optiq-csv-0.3 was the last independent release of optiq-csv. From
calcite-0.9.2 onwards, the code was included as the
calcite-example-csv module.</p>
<ul>
<li>Upgrade to calcite-0.9.1</li>
<li>Support gzip-compressed CSV and JSON files (recognized by ‘.gz’ suffix)</li>
<li>Cleanup, and fix minor timezone issue in a test</li>
<li>Support for date types (date, time, timestamp) (Martijn van den Broek)</li>
<li>Upgrade to optiq-0.8, optiq-avatica-0.8, linq4j-0.4</li>
<li>Add support for JSON files (recognized by ‘.json’ suffix)</li>
<li>Upgrade maven-release-plugin to version 2.4.2</li>
<li>Upgrade to optiq-0.6, linq4j-0.2</li>
<li>Add NOTICE and LICENSE files in generated JAR file</li>
</ul>
<h2 id="csv-v0-3">
<a href="https://github.com/julianhyde/optiq-csv/releases/tag/optiq-csv-0.3">0.3</a> / 2014-03-21</h2>
<ul>
<li>Upgrade to optiq-0.5</li>
<li>Add workaround to
[<a href="https://github.com/jline/jline2/issues/62">JLINE2-62</a>]
to <code class="highlighter-rouge">sqlline.bat</code> (windows) and <code class="highlighter-rouge">sqlline</code> (windows using cygwin)</li>
<li>Fix classpath construction: <code class="highlighter-rouge">sqlline.bat</code> copies dependencies to
<code class="highlighter-rouge">target/dependencies</code>; <code class="highlighter-rouge">sqlline</code> constructs <code class="highlighter-rouge">target/classpath.txt</code>
</li>
<li>Build, checkstyle and tests now succeed on windows (both native and cygwin)</li>
<li>Models can now contain comments</li>
<li>[<a href="https://github.com/julianhyde/optiq-csv/issues/2">OPTIQ-CSV-2</a>]
Update tutorial to reflect changes to Optiq’s JDBC adapter</li>
</ul>
<h2 id="csv-v0-2">
<a href="https://github.com/julianhyde/optiq-csv/releases/tag/optiq-csv-0.2">0.2</a> / 2014-02-18</h2>
<ul>
<li>Add test case for
[<a href="https://issues.apache.org/jira/browse/CALCITE-112">CALCITE-112</a>]</li>
<li>Add <code class="highlighter-rouge">sqlline.bat</code>, Windows SQL shell (based on fix for
[<a href="https://issues.apache.org/jira/browse/DRILL-338">DRILL-338</a>])</li>
<li>Upgrade to optiq-0.4.18, sqlline-1.1.7</li>
<li>Return a single object for single-col enumerator (Gabriel Reid)</li>
<li>Enable maven-checkstyle-plugin; fix checkstyle exceptions</li>
</ul>
<h2 id="csv-v0-1">
<a href="https://github.com/julianhyde/optiq-csv/releases/tag/optiq-csv-0.1">0.1</a> / 2014-01-13</h2>
<ul>
<li>Add release notes and history</li>
<li>Enable maven-release-plugin</li>
<li>Upgrade to optiq-0.4.17, linq4j-0.1.12, sqlline-1.1.6</li>
<li>Upgrade tutorial for new Schema and Table SPIs</li>
<li>Fixes for optiq SPI changes in
[<a href="https://issues.apache.org/jira/browse/CALCITE-106">CALCITE-106</a>]</li>
<li>Enable oraclejdk8 in Travis CI</li>
<li>Fix bug where non-existent directory would give NPE; instead print warning</li>
<li>Add an example of a planner rule</li>
<li>Add <code class="highlighter-rouge">CsvTableFactory</code>, an example of a custom table</li>
<li>Add a view to tutorial</li>
<li>Split into scenario with a “simple” schema that generates tables
(<code class="highlighter-rouge">CsvTable</code>) that just execute and a “smart” schema that generates
tables (<code class="highlighter-rouge">CsvSmartTable</code>) that undergo optimization</li>
<li>Make <code class="highlighter-rouge">CsvEnumerator</code> a top-level class</li>
<li>Implement the algorithms to sniff names and types from the first
row, and to return an enumerator of all rows</li>
<li>Read column types from header of CSV file</li>
</ul>
<h1 id="linq4j-release-history">Linq4j release history</h1>
<p>Linq4j-0.4 was the last independent release of linq4j. From
calcite-0.9.2 onwards, the code was included as calcite-linq4j, and
features added to linq4j in a particular calcite release are described
with the other changes in that release.</p>
<h2 id="linq4j-v0-4">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.4">0.4</a> / 2014-05-28</h2>
<ul>
<li>Fix <a href="https://github.com/julianhyde/linq4j/issues/27">#27</a>,
“Incorrectly inlines non-final variable”.</li>
<li>Maven build process now deploys web site.</li>
<li>Implement <code class="highlighter-rouge">Enumerable</code> methods: <code class="highlighter-rouge">any</code>, <code class="highlighter-rouge">all</code>,
<code class="highlighter-rouge">contains</code> with <code class="highlighter-rouge">EqualityComparer</code>, <code class="highlighter-rouge">first</code>, <code class="highlighter-rouge">first</code> with predicate.</li>
</ul>
<h2 id="linq4j-v0-3">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.3">0.3</a> / 2014-04-21</h2>
<ul>
<li>Move optimizer visitor from optiq to linq4j; add
<code class="highlighter-rouge">ExpressionType.modifiesLvalue</code> to avoid invalid inlining.</li>
<li>Fix <a href="https://github.com/julianhyde/linq4j/issues/17">#17</a>,
“Assign constant expressions to ‘static final’ members”;
add <code class="highlighter-rouge">@Deterministic</code> annotation to help deduce which expressions are
constant.</li>
<li>Multi-pass optimization: some of the variables might be avoided and
inlined after the first pass.</li>
<li>Various other peephole optimizations: <code class="highlighter-rouge">Boolean.valueOf(const)</code>,
‘not’ expressions (<code class="highlighter-rouge">!const</code>, <code class="highlighter-rouge">!!a</code>, <code class="highlighter-rouge">!(a==b)</code>, <code class="highlighter-rouge">!(a!=b)</code>, <code class="highlighter-rouge">!(a&gt;b)</code>,
etc.),
‘?’ expressions coming from <code class="highlighter-rouge">CASE</code> (<code class="highlighter-rouge">a ? booleanConstant : b</code> and <code class="highlighter-rouge">a
? b : booleanConstant</code>).</li>
<li>Implement left, right and full outer join.</li>
<li>Clean build on cygwin/Windows.</li>
</ul>
<h2 id="linq4j-v0-2">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.2">0.2</a> / 2014-04-11</h2>
<ul>
<li>Fix <a href="https://github.com/julianhyde/linq4j/issues/8">#8</a>,
“Javadoc generation fails under JDK 1.8”.</li>
<li>Fix <a href="https://github.com/julianhyde/linq4j/issues/15">#15</a>,
<code class="highlighter-rouge">Expressions.ifThenElse</code> does not work”.</li>
<li>Use <code class="highlighter-rouge">HashMap</code> for searching of declarations to reuse; consider both
<code class="highlighter-rouge">optimizing</code> and <code class="highlighter-rouge">optimize</code> flags when reusing.</li>
<li>Implement <code class="highlighter-rouge">equals</code> and <code class="highlighter-rouge">hashCode</code> for expressions. Hash codes for
complex expressions are cached into a field of the expression.</li>
<li>Add example, <code class="highlighter-rouge">com.example.Linq4jExample</code>.</li>
<li>Fix optimizing away parameter declarations in assignment target.</li>
<li>Support Windows path names in checkstyle-suppresions.</li>
<li>Support <code class="highlighter-rouge">Statement.toString</code> via <code class="highlighter-rouge">ExpressionWriter</code>.</li>
<li>Use <code class="highlighter-rouge">AtomicInteger</code> for naming of <code class="highlighter-rouge">ParameterExpression</code>s to avoid
conflicts in multithreaded usage</li>
<li>Cleanup: use <code class="highlighter-rouge">Functions.adapt</code> rather than <code class="highlighter-rouge">new AbstractList</code>
</li>
<li>Add <code class="highlighter-rouge">NOTICE</code> and <code class="highlighter-rouge">LICENSE</code> files in generated JAR file.</li>
<li>Optimize <code class="highlighter-rouge">select()</code> if selector is identity.</li>
<li>Enable checkstyle.</li>
</ul>
<h2 id="linq4j-v0-1-13">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.1.13">0.1.13</a> / 2014-01-20</h2>
<ul>
<li>Remove spurious “null” generated when converting expression to string.</li>
<li>Allow a field declaration to not have an initializer.</li>
<li>Add <code class="highlighter-rouge">Primitive.defaultValue</code>.</li>
<li>Enable <code class="highlighter-rouge">oraclejdk8</code> in <a href="https://travis-ci.org/julianhyde/linq4j">Travis CI</a>.</li>
</ul>
<h2 id="linq4j-v0-1-12">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.1.12">0.1.12</a> / 2013-12-07</h2>
<ul>
<li>Add release notes.</li>
<li>Fix implementation of <code class="highlighter-rouge">Enumerable.asEnumerable</code> in
<code class="highlighter-rouge">DefaultQueryable</code> (inherited by most classes that implement
<code class="highlighter-rouge">Queryable</code>).</li>
</ul>
<h2 id="linq4j-v0-1-11">
<a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.1.11">0.1.11</a> / 2013-11-06</h2>
<ul>
<li>Initial commit</li>
</ul>
<div class="section-nav">
<div class="left align-right">
<a href="/docs/howto.html" class="prev">Previous</a>
</div>
<div class="right align-left">
<a href="/docs/powered_by.html" class="next">Next</a>
</div>
</div>
<div class="clear"></div>
</article>
</div>
<div class="unit one-fifth hide-on-mobiles">
<aside>
<h4>Overview</h4>
<ul>
<li class=""><a href="/docs/index.html">Background</a></li>
<li class=""><a href="/docs/tutorial.html">Tutorial</a></li>
<li class=""><a href="/docs/algebra.html">Algebra</a></li>
</ul>
<h4>Advanced</h4>
<ul>
<li class=""><a href="/docs/adapter.html">Adapters</a></li>
<li class=""><a href="/docs/spatial.html">Spatial</a></li>
<li class=""><a href="/docs/stream.html">Streaming</a></li>
<li class=""><a href="/docs/materialized_views.html">Materialized Views</a></li>
<li class=""><a href="/docs/lattice.html">Lattices</a></li>
</ul>
<h4>Avatica</h4>
<ul>
<li class=""><a href="/docs/avatica_overview.html">Overview</a></li>
<li class=""><a href="/docs/avatica_roadmap.html">Roadmap</a></li>
<li class=""><a href="/docs/avatica_json_reference.html">JSON Reference</a></li>
<li class=""><a href="/docs/avatica_protobuf_reference.html">Protobuf Reference</a></li>
</ul>
<h4>Reference</h4>
<ul>
<li class=""><a href="/docs/reference.html">SQL language</a></li>
<li class=""><a href="/docs/model.html">JSON/YAML models</a></li>
<li class=""><a href="/docs/howto.html">HOWTO</a></li>
</ul>
<h4>Meta</h4>
<ul>
<li class="current"><a href="/docs/history.html">History</a></li>
<li class=""><a href="/docs/powered_by.html">Powered by Calcite</a></li>
<li class=""><a href="/javadocAggregate">API</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 © 2022
<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>
</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>