.. _version_5.5.2:

=============
Version 5.5.2
=============

Released on 2023-12-21.

.. NOTE::

    If you are upgrading a cluster, you must be running CrateDB 4.0.2 or higher
    before you upgrade to 5.5.2.

    We recommend that you upgrade to the latest 5.4 release before moving to
    5.5.2.

    A rolling upgrade from 5.4.x to 5.5.2 is supported.
    Before upgrading, you should `back up your data`_.

.. WARNING::

    Tables that were created before CrateDB 4.x will not function with 5.x
    and must be recreated before moving to 5.x.x.

    You can recreate tables using ``COPY TO`` and ``COPY FROM`` or by
    `inserting the data into a new table`_.

.. _back up your data: https://crate.io/docs/crate/reference/en/latest/admin/snapshots.html
.. _inserting the data into a new table: https://crate.io/docs/crate/reference/en/latest/admin/system-information.html#tables-need-to-be-recreated

.. rubric:: Table of contents

.. contents::
   :local:


See the :ref:`version_5.5.0` release notes for a full list of changes in the
5.5 series.


Security Fixes
==============

- The HTTP transport will not trust any ``X-Real-IP`` header by default anymore.
  This prevents a client from spoofing its IP address by setting these headers
  and thus bypassing IP based authentication with is enabled by default for the
  ``crate`` superuser.
  To keep allowing the ``X-Real-IP`` header to be trusted, you have to
  explicitly enable it via the
  :ref:`auth.trust.http_support_x_real_ip <auth.trust.http_support_x_real_ip>`
  node setting.

Packaging Changes
=================

- The RPM and DEB packages changed slightly to unify the build process. The most
  important change is that the ``crate`` service no longer automatically starts
  after package installation, to allow changing the configuration first.

  Other than that, the structure is now:

  - ``bin``, ``jdk`` and ``lib`` are installed into ``/usr/share/crate``. In the RPM
    package this used to be in ``/opt/crate``.

  - The home directory of the crate user is ``/usr/share/crate``

  - changes, notice, license are in ``/usr/share/doc/crate``

  - service file is in ``/usr/lib/systemd/system``

  - The ``crate.yml`` configuration file is in ``/etc/crate/``

    - The default environment configuration file at RPM packages changed to
      ``/etc/default/crate`` to be consistent with the DEB package. The old
      location at ``/etc/sysconfig/crate`` is not supported anymore.

  If you haven't made any significant configuration changes the new packages
  should keep working out of the box.

  Important for Debian and Ubuntu users: There is now a `new repository
  <https://cdn.crate.io/downloads/debian/stable/>`_.

  You'll have to update the repository configuration to install CrateDB newer
  than 5.5.1.

  This new repository keeps old CrateDB versions in the ``Package`` index and
  also contains packages for ARM64.


Fixes
=====

- Fixed an issue that caused queries with a ``NULLIF`` or ``OR`` expression in
  the ``WHERE`` clause to fail evaluating ``NULL`` correctly.

- Fixed a race condition that could lead to a memory leak when relocating a
  shard from one node to another and concurrently running queries.

- Fixed a performance regression introduced in 5.5.0 for queries with
   ``GROUP BY`` on a single column.

- Fixed an issue that allowed adding a column under the same name as an existing
  index definition.

- Fixed an issue with wrong escaping of backslash in
  :ref:`C-style escaped strings <sql_escape_string_literals>`.
  ``SELECT E'\%'`` used to return ``\%`` instead of ``%``.

- Fixed an issue which led to ``SQLParseException`` when using an escaped quote
  ``\'`` at the end of :ref:`C-style string <sql_escape_string_literals>`.

- Fixed an issue that caused ``ALTER TABLE DROP COLUMN`` to falsely report
  success on dropping :ref:`system columns <sql_administration_system_columns>`
  despite any follow up queries on the dropped columns work as expected. Now
  an exception is thrown.

- Fixed the SQL parser to be lenient with the position of constraint definitions
  at the column definition of ``CREATE TABLE`` and ``ALTER TABLE`` statements.
  E.g. ``CREATE TABLE t (a INT NULL DEFAULT 1)`` is now accepted while before
  the ``NULL`` constraint had to be placed after the ``DEFAULT`` constraint.

- Fixed an issue introduced with CrateDB ``5.5.0`` that prevented importing
  JSON file via ``COPY FROM`` if the file contained JSON entries with same
  keys but in different order.
