<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title>Release 1.7.0</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">
  <!--[if lt IE 9]>
  <script src="/js/html5shiv.min.js"></script>
  <script src="/js/respond.min.js"></script>
  <![endif]-->
</head>


<body class="wrap">
  <header role="banner">
  <div class="grid">
    <div class="unit center-on-mobiles">
      <h1>
        <a href="/">
          <span class="sr-only">Apache Calcite</span>
          <img src="/img/logo.svg" alt="Calcite Logo">
        </a>
      </h1>
    </div>
    <nav class="main-nav">
      <ul>
  <li class="">
    <a href="/">Home</a>
  </li>
  <li class="">
    <a href="/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/community/">Community</a>
  </li>
  <li class="">
    <a href="/develop/">Develop</a>
  </li>
  <li class="current">
    <a href="/news/">News</a>
  </li>
  <li class="">
    <a href="/docs/">Docs</a>
  </li>
</ul>

    </nav>
  </div>
</header>


    <section class="news">
    <div class="grid">

      <div class="docs-nav-mobile unit whole show-on-mobiles">
  <select onchange="if (this.value) window.location.href=this.value">
    <option value="">Navigate the blog…</option>
    <option value="/news/">Home</option>
    <optgroup label="v1.x">
            <option value="/news/2019/09/11/release-1.21.0/">Release 1.21.0</option>
      <option value="/news/2019/06/24/release-1.20.0/">Release 1.20.0</option>
      <option value="/news/2019/03/25/release-1.19.0/">Release 1.19.0</option>
      <option value="/news/2018/12/21/release-1.18.0/">Release 1.18.0</option>
      <option value="/news/2018/07/20/release-1.17.0/">Release 1.17.0</option>
      <option value="/news/2018/03/19/release-1.16.0/">Release 1.16.0</option>
      <option value="/news/2017/12/11/release-1.15.0/">Release 1.15.0</option>
      <option value="/news/2017/10/02/release-1.14.0/">Release 1.14.0</option>
      <option value="/news/2017/06/26/release-1.13.0/">Release 1.13.0</option>
      <option value="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</option>
      <option value="/news/2017/03/24/release-1.12.0/">Release 1.12.0</option>
      <option value="/news/2017/01/09/release-1.11.0/">Release 1.11.0</option>
      <option value="/news/2016/10/12/release-1.10.0/">Release 1.10.0</option>
      <option value="/news/2016/09/22/release-1.9.0/">Release 1.9.0</option>
      <option value="/news/2016/06/13/release-1.8.0/">Release 1.8.0</option>
      <option value="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</option>
      <option value="/news/2016/03/22/release-1.7.0/">Release 1.7.0</option>
      <option value="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</option>
      <option value="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</option>
      <option value="/news/2016/01/22/release-1.6.0/">Release 1.6.0</option>
      <option value="/news/2015/11/10/release-1.5.0/">Release 1.5.0</option>
      <option value="/news/2015/11/08/new-committers/">Calcite adds 2 committers</option>
      <option value="/news/2015/10/22/calcite-graduates/">Calcite Graduates</option>
      <option value="/news/2015/09/02/release-1.4.0-incubating/">Release 1.4.0 Incubating</option>
      <option value="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</option>
      <option value="/news/2015/06/05/algebra-builder/">Algebra builder</option>
      <option value="/news/2015/05/30/release-1.3.0-incubating/">Release 1.3.0 Incubating</option>
      <option value="/news/2015/04/24/new-committers/">Calcite adds 5 committers</option>
      <option value="/news/2015/04/07/release-1.2.0-incubating/">Release 1.2.0 Incubating</option>
      <option value="/news/2015/03/13/release-1.1.0-incubating/">Release 1.1.0 Incubating</option>
      <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>

    </optgroup>
  </select>
</div>


      <div class="unit four-fifths">
        <article>
  <h2>
    Release 1.7.0
    <a href="/news/2016/03/22/release-1.7.0/" class="permalink" title="Permalink">∞</a>
  </h2>
  <span class="post-category">
    <span class="label">
      release
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      22 Mar 2016
    </span>
    
    
    
    <a href="http://people.apache.org/~jhyde" class="post-author">
      <img src="https://github.com/julianhyde.png"
           class="avatar" alt="jhyde avatar"
           width="24" height="24">
      jhyde
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>Apache Calcite 1.7.0 is the first 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/cassandra.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>See the <a href="/docs/history.html#v1-7-0">release notes</a>;
      <a href="/downloads#source-releases">download</a> the release.</p>
    
  </div>
</article>

      </div>

      <div class="unit one-fifth hide-on-mobiles">
  <aside>
    <ul>
      <li class="">
        <a href="/news/">All News</a>
      </li>
      <li class="">
        <a href="/news/releases/">Calcite Releases</a>
      </li>
    </ul>
    <h4>Recent Releases</h4>
    <ul>
      
      <li class="">
        <a href="/news/2019/09/11/release-1.21.0/">1.21.0</a>
      </li>
      
      <li class="">
        <a href="/news/2019/06/24/release-1.20.0/">1.20.0</a>
      </li>
      
      <li class="">
        <a href="/news/2019/03/25/release-1.19.0/">1.19.0</a>
      </li>
      
      <li class="">
        <a href="/news/2018/12/21/release-1.18.0/">1.18.0</a>
      </li>
      
      <li class="">
        <a href="/news/2018/07/20/release-1.17.0/">1.17.0</a>
      </li>
      
    </ul>
    <h4>Other News</h4>
    <ul>
        
        <li class="">
          <a href="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</a>
        </li>
          
        <li class="">
          <a href="/news/2016/03/22/cassandra-adapter/">Cassandra Adapter</a>
        </li>
          
        <li class="">
          <a href="/news/2016/02/17/streaming-sql-talk/">Streaming SQL in Samza</a>
        </li>
          
        <li class="">
          <a href="/news/2016/02/17/elser-pmc/">Calcite appoints Josh Elser to PMC</a>
        </li>
          
        <li class="">
          <a href="/news/2015/11/08/new-committers/">Calcite adds 2 committers</a>
        </li>
          
        <li class="">
          <a href="/news/2015/10/22/calcite-graduates/">Calcite Graduates</a>
        </li>
          
        <li class="">
          <a href="/news/2015/07/31/xldb-best-lightning-talk/">XLDB 2015 best lightning talk</a>
        </li>
          
        <li class="">
          <a href="/news/2015/06/05/algebra-builder/">Algebra builder</a>
        </li>
          
        <li class="">
          <a href="/news/2015/04/24/new-committers/">Calcite adds 5 committers</a>
        </li>
          
    </ul>
  </aside>
</div>


      <div class="clear"></div>

    </div>
  </section>


  <footer role="contentinfo">
  <div id="poweredby">
    <a href="http://www.apache.org/">
      <span class="sr-only">Apache</span>
      <img src="/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
  </div>
  <div id="copyright">
  <p>The contents of this website are Copyright &copy;&nbsp;2019
     <a href="https://www.apache.org/">Apache Software Foundation</a>
     under the terms of
     the <a href="https://www.apache.org/licenses/">
     Apache&nbsp;License&nbsp;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>
