.. _version_2.1.1:

=============
Version 2.1.1
=============

Released on 2017/08/04.

.. NOTE::

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

    If you want to perform a `rolling upgrade`_, your current CrateDB version
    number must be :ref:`version_2.1.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.1.0`, and will require a `full restart
    upgrade`_.

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

.. WARNING::

    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:


Changelog
=========


Changes
-------

- Made the help messages of ``bin/crate`` and the Java code consistent. This
  change also removes the undocumented ``-E`` command line option which makes
  ``-C`` the only valid option for passing settings to CrateDB.

- Changed the Enterprise License missing check message, as well as lowering the
  severity from ``HIGH`` to ``LOW``.

- Added a warning message to the log if the unofficial Elasticsearch HTTP REST
  API is enabled via ``es.api.enabled`` setting.

- Updated Elasticsearch to v5.4.3.

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

- :ref:`Table functions <table-functions>` now support :ref:`value expressions
  <sql-value-expressions>` as arguments.

Fixes
-----

- Fixed an issue when using dots in an identifier for column creation in alter
  table, where they were interpreted as sub-fields of an object. The usage of
  dots as part of a column name is prohibited.

- Fixed an issue that prevented CrateDB from starting when ``path.home`` was
  set via command line argument.

- Fixed an issue causing ``JOINs`` on virtual tables (:ref:`subselects
  <gloss-subquery>`) which contain ``LIMIT`` and/or ``OFFSET`` to return
  incorrect results. E.g.::

      SELECT * FROM
        (SELECT * FROM t1 ORDER BY a LIMIT 5) t1,
      JOIN
        (SELECT * FROM t2 ORDER BY b OFFSET 2) t2
      ON t1.a = t2.max

- Fixed an issue causing ``JOINs`` with aggregations on virtual tables
  (subselects) which also contain aggregations to return incorrect results.
  E.g.::

      SELECT t1.a, COUNT(*) FROM t1
      JOIN (SELECT b, max(i) as max FROM t2 GROUP BY b) t2
      ON t1.a = t2.max
      GROUP BY t1.id

- 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:`operators
  <gloss-operator>`.

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

- Fixed support for negate on null in conditional expression.

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

- Added missing documentation about the default value of the table setting
  ``write.wait_for_active_shards``.

- Improved user privileges matching to constant time complexity.

- Improved the error message if an invalid table column reference is used in
  ``INSERT`` statements.

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

- Updated Crash to ``0.21.4`` which fixes an issue with ``\verbose`` command
  not working correctly when Crash is started without ``--verbose``.

- Implemented flexible return type of ``sum`` function depending on the input
  types, which was previously only double.

- 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 race condition which made it possible to create new columns in a
  partition of a partitioned table that didn't match the type of the same
  column of sibling partitions.

- Upgraded Admin UI version to fix an issue with the Twitter tutorial.

- Fixed a NPE when running ``select port from sys.nodes`` and ``psql.enabled:
  false`` was set.

- Fixed an issue where the user that gets provided by the client on connect is
  not always used as current user if host based authentication is disabled.

- Corrected the documentation of the ``version`` column of the
  ``sys.snapshots`` table. It was described as the CrateDB version whereas it's
  an internal version instead.

- Dropping an empty partitioned table now drops the related table privileges.

- 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
      )

- Internal system queries are now executed under the ``crate`` superuser if
  user management is enabled.

- ``!= ANY()`` could not operate on arrays with more than 1024 elements. This
  limit has been increased by default to 8192. A new node setting:
  ``indices.query.bool.max_clause_count`` has been exposed to allow
  configuration of this limit.

- Fixed an issue which caused unrelated table privileges to be lost after a
  table was renamed.

- Fixed an issue that prevents CrateDB from bootstrapping on Windows hosts.
