.. _version_5.2.1:

=============
Version 5.2.1
=============

Released on 2023-02-02.

.. NOTE::

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

    We recommend that you upgrade to the latest 5.1 release before moving to
    5.2.1.

    A rolling upgrade from 5.1.x to 5.2.1 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.2.0` release notes for a full list of changes in the
5.2 series.

Fixes
=====

- Fixed behaviour of :ref:`FETCH RELATIVE <sql-fetch>`, which previously behaved
  identically to `FETCH FORWARD` and `FETCH BACKWARD`, whereas it should behave
  similarly to `FETCH ABSOLUTE`, with the difference that the position of the 1
  row to return is calculated relatively to the current cursor position.

- Fixed an issue that caused accounted memory not to be released when using
  :ref:`cursors <sql-fetch>`, even if the ``CURSOR`` was explicitly or
  automatically (session terminated) closed.

- Added validation to reject inner column names containing special whitespace
  characters to avoid invalid schema definitions.

- Fixed an issue that caused the returned column names to be missing the
  subscripts when querying sub-columns of nested object arrays.

- Fixed an issue that caused ``IndexOutOfBoundsException`` to be thrown when
  trying to :ref:`FETCH <sql-fetch>` backwards from a ``CURSOR``, past the 1st
  row.

- Fixed an issue that caused wrong rows to be returned when scrolling backwards
  and then forwards through a :ref:`CURSOR <sql-fetch>`.

- Improved error message when :ref:`fetching <sql-fetch>` using ``ABSOLUTE``,
  past the last row returned by the cursor query.

- Fixed and issue that caused wrong or 0 rows to be returned when trying to
  fetch all rows backwards from a ``CURSOR`` using: ``FETCH BACKWARDS ALL``.

- Fixed an issue that caused :ref:`swap table <alter_cluster_swap_table>` to
  consume invalid table names provided in a double-quoted string format
  containing ``.`` such as ``"table.t"`` by mis-interpreting it as
  ``"table"."t"``, which is a two double-quoted strings joined by a ``.``.
  This caused metadata corruptions leading to ``StartupExceptions`` and data
  losses. Corrupted metadata recovery is in place to prevent the exceptions
  but not all data can be recovered.

- Fixed an issue that caused ``ClassCastException`` when accessing a sub-column
  of a nested object array where the sub-column resolves to a nested array.
  An example ::

    CREATE TABLE test (
      "a" ARRAY(OBJECT AS (
        "b" ARRAY(OBJECT AS (
          "s" STRING
        )))));
    INSERT INTO test (a) VALUES ([{b=[{s='1'}, {s='2'}, {s='3'}]}]);
    SELECT a['b'] FROM test; // a['b'] is type of array(array(object))

- Fixed an issue in the PostgreSQL wire protocol that would cause
  de-serialization of arrays to fail if they contained unquoted strings
  consisting of more than 2 words.
