.. _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.8.

   If you want to perform a :ref:`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
   :ref:`full_restart_upgrade`.

   Consult the :ref:`version_2.0.0_upgrade_notes` for ``2.0.0`` when upgrading.

.. WARNING::

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

.. WARNING::

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

.. _back up your data: https://crate.io/a/backing-up-and-restoring-crate/

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 :ref:`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` 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)`` 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 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
     )
