.. _version_2.0.7:

=============
Version 2.0.7
=============

Released on 2017/08/08.

.. NOTE::

    If you are upgrading a cluster, you must be running CrateDB
    :ref:`version_1.1.3` or higher before you upgrade to 2.0.7.

    If you want to perform a `rolling upgrade`_, your current CrateDB version
    number must be :ref:`version_2.0.0`.  If you want to upgrade from a version
    prior to this, the upgrade will introduce all of the breaking changes
    listed for :ref:`version_2.0.0`, and will require a `full restart
    upgrade`_.

    Consult the upgrade notes for :ref:`Version 2.0.0
    <version_2.0.0_upgrade_notes>` when upgrading.

.. WARNING::

    If you're using CrateDB's BLOB storage you should consult the `Upgrade
    Notes`_.

    Before upgrading, you should `back up your data`_.

.. _rolling upgrade: https://crate.io/docs/crate/howtos/en/latest/admin/rolling-upgrade.html
.. _full restart upgrade: https://crate.io/docs/crate/howtos/en/latest/admin/full-restart-upgrade.html
.. _back up your data: https://crate.io/docs/crate/reference/en/latest/admin/snapshots.html

.. rubric:: Table of contents

.. contents::
   :local:


Upgrade Notes
=============

Due to a bug introduced in :ref:`version_2.0.0` that can cause loss of BLOB
data, it is necessary to perform a `rolling upgrade`_ if you're running a
version >= 2.0.0 and < 2.0.4 and using BLOB tables.

Additionally, the number of replicas needs to be set to at least ``1`` for
*all* blob tables and you need to make sure that data is fully replicated
before continuing.

Only then you may upgrade one node after each other.


Changelog
=========


Changes
-------

- Enabled ``mapping.total_fields.limit`` setting for tables in order to be
  able to increase the maximum number of columns higher than the default of
  ``1000``.


Fixes
-----

- Fixed an issue where ``COPY FROM``, ``INSERT-BY-SUBQUERY`` or bulk
  ``INSERT`` statements could not be killed when high pressure is put on data
  node thread pools.

- Fixed the error message to be more descriptive when the condition in a
  ``CASE/WHEN`` :ref:`expression <gloss-expression>` is not a boolean.

- Fixed an issue which caused an exception if ``EXPLAIN`` is used on a
  statement that uses the ``ANY (array_expression)`` :ref:`operator
  <gloss-operator>`.

- Allow support of conditional expressions with different return types that
  can be converted to a single return type.

- Fixed support for negate on null in conditional expressions.

- Fixed support for setting ``write.wait_for_active_shards`` on a partitioned
  table.

- Optimized the algorithm that determines the best ordering of the tables in a
  ``JOIN``.

- Fixed a regression causing incorrect results for queries with ``DISTINCT``
  on :ref:`scalar functions <scalar-functions>`. E.g.::

    SELECT DISTINCT upper(name) FROM t

- Fixed a null pointer exception when running ``SELECT port FROM sys.nodes``
  while ``psql.enabled: false`` was set.

- Implemented ``NOT NULL`` constraint validation for nested object columns,
  which was previously ignored. E.g.::

    CREATE TABLE test (
      stuff object(dynamic) AS (
        level1 object(dynamic) AS (
          level2 string not null
        ) NOT NULL
      ) NOT NULL
    )
