<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title>Avatica Go Releases</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="/avatica/css/screen.css">
  <link rel="icon" type="image/x-icon" href="/avatica/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">
  <nav class="mobile-nav show-on-mobiles">
    <ul>
  <li class="">
    <a href="/avatica/">Home</a>
  </li>
  <li class="">
    <a href="/avatica/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/avatica/community/">Community</a>
  </li>
  <li class="">
    <a href="/avatica/develop/">Develop</a>
  </li>
  <li class="current">
    <a href="/avatica/news/">News</a>
  </li>
  <li class="">
    <a href="/avatica/docs/">Docs</a>
  </li>
</ul>

  </nav>
  <div class="grid">
    <div class="unit one-third center-on-mobiles">
      <h1>
        <a href="/avatica/">
          <span class="sr-only">Apache Calcite Avatica</span>
          <img src="/avatica/img/logo.png" width="226" height="140" alt="Calcite Logo">
        </a>
      </h1>
    </div>
    <nav class="main-nav unit two-thirds hide-on-mobiles">
      <ul>
  <li class="">
    <a href="/avatica/">Home</a>
  </li>
  <li class="">
    <a href="/avatica/downloads/">Download</a>
  </li>
  <li class="">
    <a href="/avatica/community/">Community</a>
  </li>
  <li class="">
    <a href="/avatica/develop/">Develop</a>
  </li>
  <li class="current">
    <a href="/avatica/news/">News</a>
  </li>
  <li class="">
    <a href="/avatica/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="/avatica/news/">Home</option>
    <optgroup label="v1.x">
      
      <option value="/news/2019/05/16/release-avatica-go-4.0.0/">Release Avatica Go 4.0.0</option>
      
      <option value="/news/2019/05/13/release-1.15.0/">Release 1.15.0</option>
      
      <option value="/news/2019/04/29/release-1.14.0/">Release 1.14.0</option>
      
      <option value="/news/2018/12/04/release-1.13.0/">Release 1.13.0</option>
      
      <option value="/news/2018/09/18/release-avatica-go-3.2.0/">Release Avatica Go 3.2.0</option>
      
      <option value="/news/2018/09/10/release-avatica-go-3.1.0/">Release Avatica Go 3.1.0</option>
      
      <option value="/news/2018/06/24/release-1.12.0/">Release 1.12.0</option>
      
      <option value="/news/2018/04/27/release-avatica-go-3.0.0/">Release Avatica Go 3.0.0</option>
      
      <option value="/news/2018/03/09/release-1.11.0/">Release 1.11.0</option>
      
      <option value="/news/2017/05/30/release-1.10.0/">Release 1.10.0</option>
      
      <option value="/news/2017/03/31/new-avatica-repository/">New Avatica Repository</option>
      
      <option value="/news/2016/11/01/release-1.9.0/">Release 1.9.0</option>
      
      <option value="/news/2016/06/04/release-1.8.0/">Release 1.8.0</option>
      
      <option value="/news/2016/03/18/release-1.7.1/">Release 1.7.1</option>
      
      <option value="/news/2016/03/03/separate-project/">Splitting Avatica from Calcite</option>
      
    </optgroup>
  </select>
</div>


      <div class="unit four-fifths">
        <!--

-->


  
    
<article>
  <h2>
    <a href="/avatica/news/2019/05/16/release-avatica-go-4.0.0/">
      Release Avatica Go 4.0.0
    </a>
  </h2>
  <span class="post-category">
    <span class="label">
      release
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      16 May 2019
    </span>
    
    
    
    <a href="http://github.com/F21" class="post-author">
      <img src="http://github.com/F21.png"
           class="avatar" alt="francischuang avatar"
           width="24" height="24">
      francischuang
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>Apache Calcite Avatica Go 4.0.0 is a major release with numerous improvements and a breaking change for Apache Phoenix.
As this a a new major version, users of this package will need to upgrade their import paths to 
<code class="highlighter-rouge">"github.com/apache/calcite-avatica-go/v4"</code>.</p>

<p><strong>Breaking change for Apache Phoenix (<a href="https://issues.apache.org/jira/browse/CALCITE-2724">CALCITE-2763</a>):</strong> 
In Apache Phoenix, null and empty strings are equivalent. For some background on why this is the case, see
<a href="https://issues.apache.org/jira/browse/PHOENIX-947">PHOENIX-947</a>. In version 3 of Avatica-Go and below, null and empty
strings are returned as an empty string <code class="highlighter-rouge">""</code> to the client. This prevented database/sql’s built in NullString type from
working correctly. From 4.0.0 onwards, null and empty strings will be returned as a <code class="highlighter-rouge">nil</code>. This allows the usage of the
<code class="highlighter-rouge">sql.NullString</code> type.</p>

<p>For this release, both <a href="https://github.com/golang/dep">dep</a> and Go modules are supported for package management. As 
Go modules will be turned on by default in Go 1.13.0 (estimated to be released in September/October 2019), it is highly
recommended that users of this package start migrating to using Go modules to ease the transition.</p>

<p>The Calcite team recommends users of this package to upgrade to this version, where practical, as the dependencies being
used by this package have also been upgraded.</p>

    
        
        <p>See the <a href="/avatica/docs/go_history.html#v4-0-0">release notes</a>;
            <a href="/avatica/downloads/avatica-go.html#source-releases">download</a> the release.</p>
        
    
  </div>
</article>

  

  

  

  

  
    
<article>
  <h2>
    <a href="/avatica/news/2018/09/18/release-avatica-go-3.2.0/">
      Release Avatica Go 3.2.0
    </a>
  </h2>
  <span class="post-category">
    <span class="label">
      release
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      18 Sep 2018
    </span>
    
    
    
    <a href="http://github.com/F21" class="post-author">
      <img src="http://github.com/F21.png"
           class="avatar" alt="francischuang avatar"
           width="24" height="24">
      francischuang
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>Apache Calcite Avatica Go 3.2.0 is a minor release of Avatica Go with fixes to the import paths after enabling
support for Go modules.</p>

<p>The 3.1.0 release contained a bug where packages within the library used the <code class="highlighter-rouge">"github.com/apache/calcite-avatica-go"</code>
import path rather than the <code class="highlighter-rouge">"github.com/apache/calcite-avatica-go/v3"</code> import path. This resulted in an issue where
2 versions of the library are being used at the same time, causing some programs to not build.</p>

<p><strong>The Calcite team recommends consumers of the Avatica Go library to not use the 3.1.0 release and ensure that the
3.2.0 release is being used.</strong></p>

    
        
        <p>See the <a href="/avatica/docs/go_history.html#v3-2-0">release notes</a>;
            <a href="/avatica/downloads/avatica-go.html#source-releases">download</a> the release.</p>
        
    
  </div>
</article>

  

  
    
<article>
  <h2>
    <a href="/avatica/news/2018/09/10/release-avatica-go-3.1.0/">
      Release Avatica Go 3.1.0
    </a>
  </h2>
  <span class="post-category">
    <span class="label">
      release
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      10 Sep 2018
    </span>
    
    
    
    <a href="http://github.com/F21" class="post-author">
      <img src="http://github.com/F21.png"
           class="avatar" alt="francischuang avatar"
           width="24" height="24">
      francischuang
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>Apache Calcite Avatica Go 3.1.0 is a minor release of the Avatica Go client to bring in support for Go modules.
This release includes updated dependencies, testing against more targets and <a href="/avatica/docs/go_history.html#v3-1-0">support for Go Modules</a>.</p>

<p>Go 1.11 along with Go modules support was released at the end of August 2018. Go modules will become the
official package management solution for Go projects. As the Go team currently supports both Go 1.11 and Go 1.10,
the Gopkg.toml and Gopkg.lock files are still available for those using dep for package management. We plan to
remove support for dep when Go 1.12 is released in early 2019, so we encourage users to upgrade to Go 1.11 and use
Go modules where possible.</p>

    
        
        <p>See the <a href="/avatica/docs/go_history.html#v3-1-0">release notes</a>;
            <a href="/avatica/downloads/avatica-go.html#source-releases">download</a> the release.</p>
        
    
  </div>
</article>

  

  

  
    
<article>
  <h2>
    <a href="/avatica/news/2018/04/27/release-avatica-go-3.0.0/">
      Release Avatica Go 3.0.0
    </a>
  </h2>
  <span class="post-category">
    <span class="label">
      release
    </span>
  </span>
  <div class="post-meta">
    <span class="post-date">
      27 Apr 2018
    </span>
    
    
    
    <a href="http://github.com/F21" class="post-author">
      <img src="http://github.com/F21.png"
           class="avatar" alt="francischuang avatar"
           width="24" height="24">
      francischuang
    </a>
  </div>
  <div class="post-content">
    <!--

-->

<p>Apache Calcite Avatica Go 3.0.0 is the first release of the Avatica <a href="https://golang.org/">Go</a>
<a href="https://golang.org/pkg/database/sql/">database/sql</a> driver since the code has been donated to the Apache Calcite
project. This release includes support for Avatica with the HSQLDB backend, updated dependencies and <a href="/avatica/docs/go_history.html#v3-0-0">bug fixes</a>.</p>

<p>There is a breaking change where the <code class="highlighter-rouge">Name()</code> method on the <code class="highlighter-rouge">ResponseError</code> error type has been changed to a property, <code class="highlighter-rouge">Name</code>.</p>

<p>Users of the current <code class="highlighter-rouge">Boostport/avatica</code> library are encouraged to update to this new version of <code class="highlighter-rouge">apache/calcite-avatica-go</code>
as further development will take place in the <code class="highlighter-rouge">apache/calcite-avatica-go</code> repository.</p>

<p>For most users, the updating is simply replacing the import path <code class="highlighter-rouge">_ github.com/Boostport/avatica</code> with <code class="highlighter-rouge">_ github.com/apache/calcite-avatica-go</code>.</p>

    
        
        <p>See the <a href="/avatica/docs/go_history.html#v3-0-0">release notes</a>;
            <a href="/avatica/downloads/avatica-go.html#source-releases">download</a> the release.</p>
        
    
  </div>
</article>

  

  

  

  

  

  


      </div>

      <div class="unit one-fifth hide-on-mobiles">
  <aside>
    <ul>
      <li class="">
        <a href="/avatica/news/">All News</a>
      </li>
      <li class="">
        <a href="/avatica/news/avatica-releases/">Avatica Releases</a>
      </li>
      <li class="current">
          <a href="/avatica/news/avatica-go-releases/">Avatica Go Releases</a>
      </li>
    </ul>
    <h4>Recent Releases</h4>
    <ul>
      
      <li class="">
        <a href="/avatica/news/2019/05/16/release-avatica-go-4.0.0/">avatica-go 4.0.0</a>
      </li>
      
      <li class="">
        <a href="/avatica/news/2019/05/13/release-1.15.0/">avatica 1.15.0</a>
      </li>
      
      <li class="">
        <a href="/avatica/news/2019/04/29/release-1.14.0/">avatica 1.14.0</a>
      </li>
      
      <li class="">
        <a href="/avatica/news/2018/12/04/release-1.13.0/">avatica 1.13.0</a>
      </li>
      
      <li class="">
        <a href="/avatica/news/2018/09/18/release-avatica-go-3.2.0/">avatica-go 3.2.0</a>
      </li>
      
    </ul>
    <h4>Other News</h4>
    <ul>
        
        <li class="">
          <a href="/avatica/news/2017/03/31/new-avatica-repository/">New Avatica Repository</a>
        </li>
          
        <li class="">
          <a href="/avatica/news/2016/03/03/separate-project/">Splitting Avatica from Calcite</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="/avatica/img/feather.png" width="190" height="77" alt="Apache Logo"></a>
  </div>
  <div id="copyright">
  <p>The contents of this website are &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/LICENSE-2.0.html">
     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>
