Spec-Zone.ru › Phoenix

Список изменений для v3.x

Исходный код

v3.14.0 (2026-05-19)

Улучшения

  • [Ecto.Adapter] Принимать параметр counter в prepare_query/3
  • [Ecto.Changeset] Добавить Ecto.Changeset.reorder_assoc/2
  • [Ecto.Query] Разрешить использовать from и joins с источником {fragment, Schema}
  • [Ecto.Repo] Вызывать ошибку при передаче в функции Repo параметров ключевых слов, похожих на запросы
  • [Ecto.Repo] Поддерживать :replace_changed при upsert для включения HOT-обновлений в PostgreSQL
  • [Ecto.Repo] Добавить параметр :query_cache для выборочного обхода кэша запросов
  • [Ecto.Schema] Добавить параметр :on_join_through_conflict для
  • [Ecto.Type] Добавить Ecto.Type.trim/2 и разрешить разработчикам настраивать обрезку значений при приведении типов с помощью параметра :trim_values
  • [Ecto.UUID] Поддержка UUIDv7
  • [mix.exs] Требуется decimal v3
  • [mix ecto.create] По умолчанию задавать часовой пояс при создании баз данных

Исправления ошибок

  • [Ecto.Repo] Правильно извлекать пароли с двоеточиями из URL
  • [Ecto.Repo] Скрывать конфигурацию repo в отчётах о ходе SASL
  • [Ecto.Repo] Пользовательские запросы предварительной загрузки с order_by теперь имеют приоритет над :preload_order. Параметр :preload_order теперь применяется только в том случае, если пользовательский запрос с сортировкой не указан.

v3.13.6 (2026-05-05)

Улучшения

  • [mix.exs] Ослабить требование к decimal

v3.13.5 (2025-11-09)

Улучшения

  • [Ecto.Query] Поддерживать выбор подмножества подзапроса в виде структуры

v3.13.4 (2025-10-24)

Исправления ошибок

  • [Ecto.Changeset] Гарантировать обрезку пустых бинарных строк
  • [Ecto.Repo] Гарантировать применение rollback к динамическим репозиториям
  • [Ecto.Type] Правильно форматировать составные типы :in

v3.13.3 (2025-09-19)

Улучшения

  • [Ecto.Query] Принимать список элементов для исключения в exclude

Исправления ошибок

  • [Ecto.Query] Разрешить использовать функции с арностью 2 в качестве функций предварительной загрузки в запросах
  • [Ecto.Query] Удалить предупреждение о литералах, срок поддержки которых мягко истёк
  • [Ecto.Schema] Не считать пробелы и символы перевода строки пустыми значениями для бинарных типов

v3.13.2 (2025-06-24)

Исправления ошибок

  • [Ecto.Query] Исправлена регрессия, из-за которой запросы с несколькими joins долго компилировались
  • [Ecto.Repo] Исправлено обнаружение отсутствующего первичного ключа у ассоциаций, содержащих только записи nil
  • [Ecto.Query] Исправлено раскрытие макросов в over в выражении order_by

v3.13.1 (2025-06-19)

Исправления ошибок

  • [Ecto.Repo] Не применять автоматически HOT-обновления при upsert с replace. Пользователь должен сам убедиться, что они не пересекаются

v3.13.0 (2025-06-18)

Требуется Elixir v1.14+.

Улучшения

  • [Ecto] Поддерживать встроенный в Elixir JSON
  • [Ecto.Enum] Добавить Ecto.Enum.cast_value/3
  • [Ecto.Query] Разрешить использовать схему для типов списка values
  • [Ecto.Query] Разрешить строки в field/2
  • [Ecto.Query] Добавить identifier/1 в запросы
  • [Ecto.Query] Добавить constant/1 в запросы
  • [Ecto.Query] Разрешить exclude/2 удалять окна
  • [Ecto.Query] Разрешить поля источника в json_extract_path
  • [Ecto.Repo] Добавить пользовательский callback Ecto.Repo.prepare_transaction/2
  • [Ecto.Repo] Добавить Ecto.Repo.all_by/3
  • [Ecto.Repo] Добавить Ecto.Repo.transact/2
  • [Ecto.Repo] Разрешить HOT-обновления в запросах upsert в Postgres, удаляя дублирующиеся поля во время replace_all_except
  • [Ecto.Schema] Поддерживать атрибут модуля @schema_redact: :all_except_primary_keys

Исправления ошибок

  • [Ecto.Query] Разрешить объединение при выборе карт, содержащих только значения nil
  • [Ecto.Query] map/2 в запросах теперь всегда возвращает карту для joins, в том числе для left joins, что обеспечивает согласованность с источниками from
  • [Ecto.Schema] Исправлена проблема, из-за которой Ecto мог сообщить, что ассоциация не существует, хотя она существовала

Мягкое устаревание (предупреждения не выводятся)

  • [Ecto.Repo] Ecto.Repo.transaction/2 мягко устарела в пользу Ecto.Repo.transact/1
  • [Ecto.Query.API] literal/1 устарела в пользу identifier/1

v3.12.6 (2025-06-11)

Исправлено устаревание для Elixir v1.19.

v3.12.5 (2024-11-28)

Исправления ошибок

  • [Ecto.Query] Вызывать ошибку, если в values/2 передан пустой список
  • [Ecto.Query] Исправлено отображение dynamic/2 с интерполированными именованными привязками
  • [Ecto.Query] Планировать источники перед созданием замыкания plan_subquery
  • [Ecto.Repo] Удалять изменения полей только для чтения из возвращаемой записи при вставке/обновлении
  • [Ecto.Repo] Передавать параметры :allow_stale ассоциациям

v3.12.4 (2024-10-07)

Улучшения

  • [Ecto.Repo] Документировать новый параметр :pool_count

Исправления ошибок

  • [Ecto.Repo] Обеспечить, чтобы Ecto.Repo.reload учитывала source

v3.12.3 (2024-09-06)

Исправления ошибок

  • [Ecto.Changeset] Разрешить приводить к типу/устанавливать ассоциации внутри changeset встроенной схемы

v3.12.2 (2024-08-25)

Исправления ошибок

  • [Ecto.Query] Разрешить задавать для :prefix любое значение
  • [Ecto.Repo] Не перезаписывать параметры ssl из URL, если они уже заданы в конфигурации

v3.12.1 (2024-08-13)

Улучшения

  • [Ecto.Type] Добавить Ecto.Type.parameterized?/2

Исправления ошибок

  • [Ecto.Enum] Исправлена спецификация Dialyzer
  • [Ecto.Query] Удалена ошибочная проверка параметров подзапроса

v3.12.0 (2024-08-12)

Улучшения

  • [Ecto.Changeset] Разрешить передавать {message, opts} в качестве сообщения для нескольких API валидации
  • [Ecto.Query] Добавить guard is_named_binding
  • [Ecto.Query] Теперь подзапросы поддерживаются в выражениях distinct, group_by, order_by и window
  • [Ecto.Query] Разрешить использовать select_merge в большем количестве операций insert_all и подзапросов, объединяя distinct-поля
  • [Ecto.Query] Разрешить литеральные карты внутри dynamic/2
  • [Ecto.Query] Поддерживать раскрытие макросов на корневом уровне order_by
  • [Ecto.Query] Поддерживать предварительную загрузку источников подзапросов в from и join
  • [Ecto.Query] Разрешить обновление карт с динамическими значениями в select
  • [Ecto.Query] Разрешить использовать справа от in любые структуры данных, реализующие протокол Enumerable
  • [Ecto.Repo] Поддерживать функции предварительной загрузки с арностью 2, принимающие идентификаторы и метаданные ассоциации
  • [Ecto.Repo] Разрешить HOT-обновления в запросах upsert в Postgres, удаляя дублирующиеся поля во время replace_all
  • [Ecto.Repo] insert_all поддерживает запросы только с источником
  • [Ecto.Repo] insert_all поддерживает запросы с синтаксисом update
  • [Ecto.Repo] Поддерживать :allow_stale в операциях со структурами/changeset Repo
  • [Ecto.Schema] Разрешить делать поля схемы доступными только для чтения с помощью параметра :writable
  • [Ecto.Schema] Добавить параметр :defaults_to_struct в embeds_one
  • [Ecto.Schema] Поддерживать тип :duration, соответствующий duration в Elixir v1.17
  • [Ecto.Type] Передавать ошибки пользовательского приведения внутреннего типа для {:map, type} и {:array, type}
  • [Ecto.Type] Добавить Ecto.Type.cast!/2

Исправления ошибок

  • [Ecto.Query] Игнорировать префикс запроса в источниках CTE
  • [Ecto.Query] Исправлена ошибка preload при использовании ассоциации through в join с вложенной отдельной предварительной загрузкой запроса. Теперь цепочка ассоциаций больше не загружается предварительно, вместо этого данные загружаются непосредственно в загруженную ассоциацию through.
  • [Ecto.Query] Исправлено отображение, когда select содержит модификаторы map/struct
  • [Ecto.Query] Отключать кэширование запросов для списков values
  • [Ecto.Repo] Преобразовывать поля в их источники в insert_all
  • [Ecto.Repo] Вызывать ошибку, если в {:replace, fields} передан пустой список
  • [Ecto.Repo] Проверять, что :prefix — строка/бинарное значение, в противном случае выводить предупреждение
  • [Ecto.Repo] Удалить зависимость от :preload_order MFA во время компиляции в has_many

Изменения адаптера

  • Для выражений distinct, group_by, order_by и window используется новая структура Ecto.Query.ByExpr вместо старой структуры Ecto.Query.QueryExpr

Возможные проблемы совместимости

  • [Ecto.Changeset] Ассоциации внутри embeds всегда были доступны только для чтения. Теперь при попытке привести их к типу внутри changeset возникает ошибка (это изменение отменено в v3.12.3)
  • [Ecto.ParameterizedType] Параметризованные типы теперь представлены внутри как {:parameterized, {mod, state}}. Несмотря на то, что это представление является приватным, проекты могли на него полагаться и поэтому должны адаптироваться. Используйте Ecto.ParameterizedType.init/2 для создания экземпляров параметризованных типов.
  • [Ecto.Query] Удалён тип join :array_join. Он был добавлен для поддержки Clickhouse, но больше не используется
  • [Ecto.Query] Проверять, что :prefix — строка/бинарное значение (это изменение отменено в v3.12.2)

v3.11.2 (2024-03-07)

Исправления ошибок

  • [Ecto.Query] Исправлена совместимость с будущей версией Elixir v1.17
  • [Ecto.Repo] Не скрывать ошибки при предварительной загрузке, если родительский процесс перехватывает сигналы завершения

v3.11.1 (2023-12-07)

Улучшения

  • [Ecto.Query] Разрешить передавать атрибуты модуля оператору in

Исправления ошибок

  • [Ecto.Query] Исправлена интерполяция строк и атомов в качестве ключей карты
  • [Ecto.Query] Планировать подзапросы в having
  • [Ecto.Query] Исправлена отложенная привязка для составных типов

v3.11.0 (2023-11-14)

Улучшения

  • [Ecto.Association] Разрешить preload_order принимать MFA для ассоциаций many_to_many. Это позволяет сортировать по таблице соединения
  • [Ecto.Query] Добавить параметр :operation в with_cte/3. Это позволяет CTE выполнять обновления и удаления
  • [Ecto.Query] Поддерживать splice(^...) в fragment
  • [Ecto.Query] Добавить prepend_order_by/3
  • [Ecto.Query] Разрешить selected_as/1 и selected_as/2 принимать интерполированные имена
  • [Ecto.Query] Разрешить синтаксис обновления карт для значений nil в select
  • [Ecto.Query] Разрешить вставлять SQL с помощью подсказок unsafe_fragment
  • [Ecto.Query] Поддерживать списки values/2
  • [Ecto.Repo] Добавить параметр :on_preload_spawn в preload/3
  • [Ecto.Schema] Поддерживать параметр :load_in_query для embeds
  • [Ecto.Schema] Поддерживать параметр :returning для delete

Исправления ошибок

  • [Ecto.Association] Гарантировать передачу родительского префикса в запросы on_delete
  • [Ecto.Changeset] Гарантировать обнаружение дублирующихся первичных ключей для embeds
  • [Ecto.Embedded] Вызывать ArgumentError при указании автоматически генерируемого первичного ключа :id
  • [Ecto.Query] Гарантировать создание уникальных ключей кэша для выборок подзапросов
  • [Ecto.Query] Вызывать ошибку при использовании в запросе литеральных бинарных значений/UUID, не являющихся базовыми
  • [Ecto.Repo] Сбрасывать ассоциацию belongs_to, если обновление внешнего ключа приводит к несоответствию

Изменения адаптера

  • Адаптеры теперь получают nil для кодирования/декодирования
  • Адаптеры теперь получают type вместо {:maybe, type} в качестве первого аргумента loaders/2

Устаревшие возможности

  • [Ecto.Query] Подсказки в виде ключевых слов больше не поддерживаются. Вместо них используйте unsafe_fragment внутри подсказок

v3.10.3 (2023-07-07)

Улучшения

  • [Ecto.Query] Разрешить динамический field/2 в type/2

Исправления ошибок

  • [Ecto.Changesets] Ограничить максимальное целое число менее чем 32 цифрами
  • [Ecto.Type] Ограничить максимальное целое число менее чем 32 цифрами

v3.10.2 (2023-06-07)

Улучшения

  • [Ecto.Changeset] Поддерживать функцию с арностью 3 и позицией в cast_assoc и cast_embed
  • [Ecto.Changeset] Добавить поддержку карт в validate_length/3
  • [Ecto.Changeset] Добавить параметр :nulls_distinct в unsafe_validate_unique
  • [Ecto.Query] Поддерживать тип array_join для адаптера ClickHouse
  • [Ecto.Query.API] Поддерживать параметризованные и пользовательские типы карт при проверке путей JSON

Исправления ошибок

  • [Ecto.Repo] Учитывать родительский префикс в Repo.aggregate
  • [Ecto.Query.API] Исправлена отложенная привязка в json_extract_path

Устаревшие возможности

  • Объявить MFA в :with устаревшими

v3.10.1 (2023-04-12)

Исправления ошибок

  • [Ecto.Changeset] Учитывать sort_param, даже если параметр отношения не был передан
  • [Ecto.Query] Исправлена спецификация типов, чтобы избежать предупреждений Dialyzer

v3.10.0 (2023-04-10)

В этом выпуске Ecto.Changeset получил множество улучшений: такие функции, как Ecto.Changeset.changed?/2 и field_missing?/2, помогут сделать ваш код выразительнее. Улучшения обработки ассоциаций и embeds также упростят работу со сложными формами, особенно встроенными в приложения Phoenix.LiveView.

Что касается changeset, обратите внимание: в этом выпуске унифицирована обработка пустых значений в cast/4 и validate_required/3. Если раньше вы задавали :empty_values и хотите сохранить это новое поведение, возможно, потребуется обновить код следующим образом:

Ecto.Changeset.cast(changeset, params, [:field1, :field2], empty_values: ["", []])

на:

empty_values = [[]] ++ Ecto.Changeset.empty_values()
Ecto.Changeset.cast(changeset, params, [:field1, :field2], empty_values: empty_values)

В запросы также добавлена поддержка LIMIT WITH TIES и материализованных CTE.

Улучшения

  • [Ecto.Changeset] Добавить get_assoc/get_embed
  • [Ecto.Changeset] Добавить field_missing?/2
  • [Ecto.Changeset] Добавить changed?/2 и changed?/3 с поддержкой предикатов
  • [Ecto.Changeset] Разрешить использовать Regex в именах ограничений для точного сопоставления
  • [Ecto.Changeset] Разрешить параметру :empty_values в cast/4 включать функцию, которая должна возвращать true, если значение пустое
  • [Ecto.Changeset] По умолчанию cast/4 будет считать строки, состоящие только из пробельных символов, пустыми
  • [Ecto.Changeset] Добавить поддержку :sort_param и :drop_param для cast_assoc и cast_embed
  • [Ecto.Query] Поддерживать параметр materialized в CTE
  • [Ecto.Query] Поддерживать динамическое поле внутри json_extract_path
  • [Ecto.Query] Поддерживать интерполированные значения для префиксов from/join
  • [Ecto.Query] Поддерживать ties в выражениях limit с помощью with_ties/3
  • [Ecto.Schema] Добавить :autogenerate_fields в API отражения схемы
  • [Ecto.ParameterizedType] Добавить необязательный callback format/1

Исправления ошибок

  • [Ecto.Changeset] Исключать первичный ключ при небезопасной проверке уникальности только для загруженных схем
  • [Ecto.Changeset] Вызывать ошибку, если изменение, переданное в validate_format/4, не является строкой
  • [Ecto.Query] Исправлена ошибка в json_extract_path, из-за которой карты нельзя было вкладывать в embeds
  • [Ecto.Schema] Разрешить встроенным embeds перезаписывать конфликтующие псевдонимы

v3.9.6 (2023-07-07)

Улучшения

  • [Ecto.Query] Разрешить динамический field/2 в type/2

Исправления ошибок

  • [Ecto.Changesets] Ограничить максимальное целое число менее чем 32 цифрами
  • [Ecto.Type] Ограничить максимальное целое число менее чем 32 цифрами

v3.9.5 (2023-03-22)

Исправления ошибок

  • [Ecto.Query] Переименовать тип @opaque dynamic в @opaque dynamic_expr во избежание конфликтов с Erlang/OTP 26

v3.9.4 (2022-12-21)

Исправления ошибок

  • [Ecto.Query] Исправлена регрессия с интерполированными предварительными загрузками, появившаяся в v3.9.3

v3.9.3 (2022-12-20)

Улучшения

  • [Ecto] Добавить reset_fields/2
  • [Ecto.Multi] Добавить функцию exists?/4
  • [Ecto.Repo] Сохранять схему URL в конфигурации repo
  • [Ecto.Query] Добавить поддержку перекрёстных латеральных joins
  • [Ecto.Query] Разрешить использовать dynamic/2 для предварительной загрузки
  • [Ecto.Query.API] Разрешить интерполировать весь путь в json_extract_path/2

v3.9.2 (2022-11-18)

Улучшения

  • [Ecto.Query] Разрешить использовать selected_as внутри CTE
  • [Ecto.Query] Разрешить использовать selected_as в подзапросах

Исправления ошибок

  • [Ecto.Repo] Исправлена предварительная загрузка через ассоциации в nil
  • [Ecto.Query] Исправлено объединение select поля selected_as с источником

v3.9.1 (2022-10-06)

Улучшения

  • [Ecto.Query] Разрешить использовать selected_as в корне dynamic/2
  • [Ecto.Query] Разрешить использовать selected_as с type/2
  • [Ecto.Query] Разрешить использовать selected_as с select_merge

Исправления ошибок

  • [Ecto.Changeset] Восстановить поддержку встроенных схем в unsafe_validate_unique/4
  • [Ecto.Query] Гарантировать правильную предварительную загрузку условий join_where в many_to_many или в запросах с одним или несколькими joins

v3.9.0 (2022-09-27)

Улучшения

  • [Ecto.Changeset] Добавить параметр :force_changes в cast/4
  • [Ecto.Enum] Разрешить встраивать поля enum как их значения или как выгруженные версии
  • [Ecto.Query] Поддерживать ^%{field: dynamic(...)} в select и select_merge
  • [Ecto.Query] Поддерживать %{field: subquery(...)} в select и select_merge
  • [Ecto.Query] Поддерживать псевдонимы select с помощью selected_as/1 и selected_as/2
  • [Ecto.Query] Разрешить использовать parent_as/1 в type/2
  • [Ecto.Query] Добавить with_named_binding/3
  • [Ecto.Query] Разрешить использовать источники-фрагменты в запросах с ключевыми словами
  • [Ecto.Repo] Поддерживать параметр запроса idle_interval в URL подключения
  • [Ecto.Repo] Записывать в журнал UUID в удобочитаемом формате, используя предварительно выгруженные параметры запроса
  • [Ecto.Schema] Поддерживать предварительную загрузку ассоциаций во встроенных схемах

Исправление ошибки

  • [Ecto.Changeset] Вызывать ошибку, если в unsafe_validate_unique/4 используется changeset без схемы или встроенная схема
  • [Ecto.Query] Учитывать тип виртуального поля в подзапросах
  • [Ecto.Query] Не выбирать поля структуры, переопределённые с помощью nil
  • [Ecto.Query] Исправлено отсутствие отслеживания полем load_in_query: false в select_merge
  • [Ecto.Query] Исправлен источник поля при использовании в json_extract_path
  • [Ecto.Query] Правильно создавать CTE во время компиляции
  • [Ecto.Query] Правильно упорядочивать подзапросы в dynamic
  • [Ecto.Repo] Исправлено количество параметров запроса insert_all при использовании запросов значений вместе с placeholder
  • [Ecto.Repo] Вызывать ошибку, если комбинированный запрос используется в предварительной загрузке many
  • [Ecto.Schema] Игнорировать незагруженные ассоциации при вставке

v3.8.4 (2022-06-04)

Улучшения

  • [Ecto.Multi] Добавить функции one/2 и all/2
  • [Ecto.Query] Поддерживать literal(...) в fragment

Исправление ошибки

  • [Ecto.Schema] Обеспечить правильный порядок отображения полей в Elixir v1.14+

v3.8.3 (2022-05-11)

Исправление ошибки

  • [Ecto.Query] Разрешить использовать псевдонимы источников в type/2
  • [Ecto.Schema] Избежать предупреждений и ошибок «undefined behaviour/struct» во время компиляции

v3.8.2 (2022-05-05)

Исправление ошибки

  • [Ecto.Adapter] Не требовать, чтобы метаданные адаптера были обычными картами
  • [Ecto.Association] Учитывать join_where при удалении on_replace типа «многие ко многим»
  • [Ecto.Changeset] Проверять, что список находится в empty_values, прежде чем выполнять вложенную валидацию

v3.8.1 (2022-04-27)

Исправление ошибки

  • [Ecto.Query] Исправлена регрессия, из-за которой параметр on для join в update_all оказывался не на своём месте

v3.8.0 (2022-04-26)

Для Ecto v3.8 требуется Elixir v1.10+.

Улучшения

  • [Ecto] Добавить новую главу Embedded в вводные руководства
  • [Ecto.Changeset] Разрешить задавать пользовательский :error_key в unique_constraint
  • [Ecto.Changeset] Добавить параметр :match во все функции ограничений
  • [Ecto.Query] Поддерживать динамические псевдонимы
  • [Ecto.Query] Разрешить использовать type/2 с виртуальными полями
  • [Ecto.Query] Предлагать альтернативы для несуществующих полей в запросах
  • [Ecto.Query] Поддерживать передачу запросов с подзапросами в insert_all
  • [Ecto.Repo] Разрешить stacktrace: true, чтобы трассировки стека включались в события телеметрии и журналы
  • [Ecto.Schema] Проверять параметры, переданные полям схемы

Исправления ошибок

  • [Ecto.Changeset] Устранена регрессия: validate_subset перестала работать с пользовательскими типами массивов
  • [Ecto.Changeset] Потенциально несовместимое изменение: При приведении типов обнаруживать empty_values внутри списков. Это может привести к проблемам, если вы рассчитывали на приведение пустых значений (по умолчанию это только "").
  • [Ecto.Query] Обрабатывать литералы-списки атомов в select
  • [Ecto.Query] Улучшить отслеживание select_merge внутри подзапросов
  • [Ecto.Repo] Правильно обрабатывать литералы в запросах, переданных в insert_all
  • [Ecto.Repo] Не отображать сохранённые данные как изменения при обновлении embed
  • [Ecto.Repo] Потенциально несовместимое изменение: Вызывать ошибку, если у ассоциации нет первичного ключа и она предварительно загружается в запросе с join. Ранее в некоторых случаях это приводило к незаметному возврату неверного результата.
  • [Ecto.Schema] Сохранять родительский префикс в таблицах соединения

v3.7.2 (2022-03-13)

Улучшения

  • [Ecto.Schema] Добавить параметр для пропуска валидации значений по умолчанию
  • [Ecto.Query] Разрешить coalesce в type/2
  • [Ecto.Query] Поддерживать параметризованные типы в type/2
  • [Ecto.Query] Разрешить произвольные скобки в выражениях запросов

v3.7.1 (2021-08-27)

Улучшения

  • [Ecto.Embedded] Сделать Ecto.Embedded публичной и описать поля структуры

Исправления ошибок

  • [Ecto.Repo] Убедиться, что родительский changeset включён в изменения для insert/update/delete, если при обработке самого родителя возникли ошибки

v3.7.0 (2021-08-19)

Улучшения

  • [Ecto.Changeset] Добавлена поддержка Ecto.Changeset.traverse_validations/2
  • [Ecto.Enum] Добавлены Ecto.Enum.mappings/2 и Ecto.Enum.dump_values/2
  • [Ecto.Query] Добавлена поддержка динамических as(^as) и parent_as(^as)
  • [Ecto.Repo] Добавлен changeset с устаревшими данными в поля Ecto.StaleEntryError
  • [Ecto.Schema] Добавлена поддержка @schema_context для задания метаданных контекста при определении схемы

Исправления ошибок

  • [Ecto.Changeset] Исправлена проблема, из-за которой при инспектировании changeset не скрывались данные во встроенных структурах
  • [Ecto.Changeset] Для validate_inclusion, validate_exclusion и validate_subset используется семантическое сравнение
  • [Ecto.Enum] При дублировании значений в Ecto.Enum генерируется исключение
  • [Ecto.Query] Гарантировано включение hints в кэш запросов
  • [Ecto.Repo] Добавлена поддержка заполнителей в insert_all без схем
  • [Ecto.Repo] Если запрос, переданный в Repo.aggregate, содержит комбинацию, он оборачивается в подзапрос
  • [Ecto.Repo] Исправлена проблема, из-за которой подзапросы CTE не находили родительские привязки
  • [Ecto.Repo] Возвращается changeset с ассоциациями, если какая-либо из них недействительна

v3.6.2 (2021-05-28)

Улучшения

  • [Ecto.Query] Добавлена поддержка макросов в with_cte
  • [Ecto.Repo] Добавлен метод Ecto.Repo.all_running/0 для просмотра всех работающих репозиториев

Исправления ошибок

  • [Ecto.Query] Поля со значением nil больше не пропускаются при выборе в подзапросе
  • [Ecto.Query] parent_as может искать псевдоним по всей цепочке родительских подзапросов
  • [Ecto.Query] Генерируется исключение, если в запрос передано значение nil из параметра вложенной карты
  • [Ecto.Query] Исправлена проблема с insert_all при одновременном использовании :on_conflict и :placeholders
  • [mix ecto.load] --force больше не передаётся базовой задаче компиляции

v3.6.1 (2021-04-12)

Улучшения

  • [Ecto.Changeset] В unsafe_validate_unique разрешена опция :query

Исправления ошибок

  • [Ecto.Changeset] В apply_changes добавляется идентификатор отношения, если ключ отношения существует (вместо жёстко заданного значения id)

v3.6.0 (2021-04-03)

Улучшения

  • [Ecto.Changeset] Добавлена поддержка :repo_opts в unsafe_validate_unique
  • [Ecto.Changeset] При попытке привести встроенную структуру или ассоциацию с кардинальностью один к чему-либо, кроме карты или списка ключевых слов, добавляется ошибка валидации
  • [Ecto.Enum] Перечисления можно сопоставлять с пользовательскими значениями
  • [Ecto.Multi] Добавлен Ecto.Multi.put/3 для непосредственного сохранения значений
  • [Ecto.Query] Возможно, несовместимое изменение: оптимизированы запросы many_to_many, поэтому в большем числе случаев промежуточные таблицы больше не загружаются. Это может вызвать проблемы, если вы используете Ecto.assoc/2 для загрузки ассоциаций many_to_many, а затем пытаетесь получить доступ к промежуточным привязкам (это не рекомендуется, но раньше было возможно)
  • [Ecto.Repo] insert_all можно вызывать с запросом вместо строк
  • [Ecto.Repo] В insert_all добавлена поддержка :placeholders, чтобы избежать многократной отправки одного и того же значения
  • [Ecto.Schema] Добавлена поддержка :preload_order для ассоциаций has_many и many_to_many
  • [Ecto.UUID] Добавлены методы преобразования UUID с суффиксом bang
  • [Ecto.Query] Теперь опция :hints принимает динамические значения, если они переданы в виде кортежей
  • [Ecto.Query] Добавлена поддержка select: map(source, fields), где source является фрагментом
  • [Ecto.Query] Разрешено ссылаться на родительский запрос в выборе подзапроса соединения через parent_as
  • [mix ecto] Добавлена поддержка подстановки файла и строки в ECTO_EDITOR

Исправления ошибок

  • [Ecto.Changeset] Изменён apply_changes/1: отношение добавляется в struct.relation_id, если структура отношения сохранена
  • [Ecto.Query] Удалён ненужный INNER JOIN из запроса ассоциации «многие ко многим»
  • [Ecto.Query] Разрешена интерполяция параметрических типов в запросах
  • [Ecto.Schema] Генерируется ArgumentError, если значение по умолчанию имеет недопустимый тип

v3.5.8 (2021-02-21)

Улучшения

  • [Ecto.Query] Добавлена поддержка map/2 для фрагментов и подзапросов

v3.5.7 (2021-02-07)

Исправления ошибок

  • [Ecto.Query] Исправлена проблема с порядком параметров в динамических запросах с подзапросами

v3.5.6 (2021-01-20)

Улучшения

  • [Ecto.Schema] Добавлена поддержка on_replace: :delete_if_exists для ассоциаций

Исправления ошибок

  • [Ecto.Query] В выражениях запросов разрешён унарный оператор минус
  • [Ecto.Schema] В типизированных картах разрешены значения nil

v3.5.5 (2020-11-12)

Улучшения

  • [Ecto.Query] Добавлена поддержка операторов подзапросов: all, any и exists

Исправления ошибок

  • [Ecto.Changeset] Для put_assoc с картами и списками ключевых слов используется источник ассоциации
  • [Ecto.Enum] Добавлена ветвь cast для значений nil в Ecto.Enum
  • [Ecto.Schema] Для невиртуальных полей разрешён вложенный тип :any

v3.5.4 (2020-10-28)

Улучшения

  • [mix ecto.drop] Добавлена поддержка --force-drop для баз данных, которые могут её поддерживать
  • [guides] Добавлено новое руководство «Мультитенантность с внешними ключами»

Исправления ошибок

  • [Ecto.Changeset] Ключи в спецификациях сделаны необязательными
  • [Ecto.Enum] Обеспечена работа values/2 для виртуальных полей
  • [Ecto.Query] Исправлено отсутствие типа в запросах CTE, выбирающих одно поле

v3.5.3 (2020-10-21)

Исправления ошибок

  • [Ecto.Query] Счётчик параметров больше не сбрасывается для вложенных CTE
  • [Ecto.Type] Исправлена регрессия, из-за которой массивы с nil больше нельзя было привести, загрузить или выгрузить
  • [Ecto.Type] Исправлена ошибка CaseClauseError при приведении десятичного числа с двоичным остатком

v3.5.2 (2020-10-12)

Улучшения

  • [Ecto.Repo] Добавлены Repo.reload/2 и Repo.reload!/2

Исправления ошибок

  • [Ecto.Changeset] Исправлена ошибка «schema/1 is undefined or private» при инспектировании changeset без схемы
  • [Ecto.Repo] Ecto.Repo.default_options/1 вызывается для каждой операции точки входа

v3.5.1 (2020-10-08)

Улучшения

  • [Ecto.Changeset] Выводится предупреждение, если в родительской схеме есть повторяющиеся идентификаторы для cast_assoc/3/cast_embed/3
  • [Ecto.Schema] belongs_to принимает параметры для параметрических типов

Исправления ошибок

  • [Ecto.Query] При использовании подзапроса с источником сохраняются типы полей

v3.5.0 (2020-10-03)

Для v3.5 требуется Elixir v1.8+.

Исправления ошибок

  • [Ecto.Changeset] Обеспечено, что :empty_values в cast/4 автоматически не передаётся последующим вызовам cast. Чтобы заданный набор :empty_values применялся ко всем вызовам cast/4, вместо этого измените значение, сохранённое в changeset.empty_values
  • [Ecto.Changeset] Возможно, несовместимое изменение: обновления в репозитории больше не принудительно выполняются при использовании optimistic_lock. Поле блокировки увеличивается только при наличии других изменений записи. Если изменений нет, ничего не происходит.
  • [Ecto.Changeset] Пустые значения больше не используются совместно автоматически в вызовах cast/3
  • [Ecto.Query] При кэшировании запросов CTE и комбинаций учитывается префикс запроса
  • [Ecto.Query] Разрешено помечать запись как nil при использовании левого соединения с подзапросами
  • [Ecto.Query] Добавлена поддержка подзапросов внутри динамических выражений
  • [Ecto.Repo] Исправлена предварительная загрузка при использовании динамических репозиториев и песочницы в автоматическом режиме
  • [Ecto.Repo] Коллекции больше не дублируются при предварительной загрузке ассоциаций для повторяющихся элементов

Улучшения

  • [Ecto.Enum] Ecto.Enum добавлен как пользовательский параметрический тип
  • [Ecto.Query] Разрешено устанавливать :prefix в from в значение nil
  • [Ecto.Query] Для подзапросов в where больше не ограничиваются типы картами и структурами
  • [Ecto.Query] В запросах разрешены атомы без интерполяции для поддержки Ecto.Enum
  • [Ecto.Schema] Уникальность не проверяется, если для поля уже есть ошибка
  • [Ecto.Schema] Разрешён redact: true в field
  • [Ecto.Schema] Добавлена поддержка параметрических типов через Ecto.ParameterizedType
  • [Ecto.Schema] Встроенные структуры и ассоциации переписаны как параметрические типы. Это означает, что __schema__(:type, assoc_or_embed) теперь возвращает параметрический тип. Чтобы проверить, является ли что-либо ассоциацией, используйте вместо этого __schema__(:assocs) или __schema__(:embeds)

v3.4.6 (2020-08-07)

Улучшения

  • [Ecto.Query] Разрешён count/0 для type/2
  • [Ecto.Multi] Добавлена поддержка анонимных функций в множественных функциях

Исправления ошибок

  • [Ecto.Query] В объединениях, подзапросах, CTE и т. д. логические значения учитываются как литералы
  • [Ecto.Schema] Для вложенных встроенных структур генерируются идентификаторы

v3.4.5 (2020-06-14)

Улучшения

  • [Ecto.Changeset] В unsafe_validate_unique разрешён пользовательский ключ ошибки
  • [Ecto.Changeset] Повышена производительность при приведении больших карт параметров

Исправления ошибок

  • [Ecto.Changeset] Улучшено сообщение об ошибке для недопустимого cast_assoc
  • [Ecto.Query] Исправлена инспекция запроса с CTE-фрагментом
  • [Ecto.Query] Исправлена инспекция динамических выражений с привязками-псевдонимами
  • [Ecto.Query] Улучшено сообщение об ошибке при выборе одного атома
  • [Ecto.Repo] Сокращено копирование данных при предварительной загрузке нескольких ассоциаций
  • [Ecto.Schema] Для схемы в :join_through больше не определяется зависимость времени компиляции

v3.4.4 (2020-05-11)

Улучшения

  • [Ecto.Schema] В many_to_many добавлена поддержка join_where

v3.4.3 (2020-04-27)

Улучшения

  • [Ecto.Query] Добавлена поддержка as/1 и parent_as/1 для отложенных именованных привязок и ссылок на родительский запрос из подзапросов
  • [Ecto.Query] Добавлена поддержка x in subquery(query)

Исправления ошибок

  • [Ecto.Query] Отсутствующие ассоциации не вызывают исключение, если при предварительной загрузке указано :force
  • [Ecto.Repo] При недопустимом changeset из prepare_changeset возвращается ошибка из Repo.delete

v3.4.2 (2020-04-10)

Улучшения

  • [Ecto.Changeset] В unique_constraint/3 добавлена поддержка нескольких полей

v3.4.1 (2020-04-08)

Улучшения

  • [Ecto] Добавлены Ecto.embedded_load/3 и Ecto.embedded_dump/2
  • [Ecto.Query] Улучшено сообщение об ошибке для недопустимых выражений JSON
  • [Ecto.Repo] При инициализации Repo генерируется событие телеметрии [:ecto, :repo, :init]

Исправления ошибок

  • [Ecto.Query] Для type/2 больше не поддерживаются селекторы JSON

Устаревшие возможности

  • [Ecto.Repo] conflict_target: {:constraint, _} объявлен устаревшим. Такой подход не рекомендуется; если он действительно кому-то нужен, по-прежнему доступен {:unsafe_fragment, _}

v3.4.0 (2020-03-24)

Для v3.4 требуется Elixir v1.7+.

Улучшения

  • [Ecto.Query] Разрешены динамические запросы в CTE и улучшено сообщение об ошибке
  • [Ecto.Query] Добавлен Ecto.Query.API.json_extract_path/2 и добавлена поддержка путей JSON в синтаксис запросов. Например, posts.metadata["tags"][0]["name"] вернёт имя первого тега, сохранённого в поле метаданных :map
  • [Ecto.Repo] В репозиторий добавлен новый callback default_options/1
  • [Ecto.Repo] Добавлена поддержка передачи :telemetry_options операциям репозитория

Исправления ошибок

  • [Ecto.Changeset] Корректно добавляется аннотация валидации в validate_acceptance
  • [Ecto.Query] При предварительной загрузке генерируется исключение, если загружены непустые данные ассоциации без связанного ключа. Обычно это означает, что в запросе загружены не все поля
  • [Ecto.Schema] Выводится понятное сообщение об ошибке, если schema вызывается дважды в Ecto.Schema

v3.3.4 (2020-02-27)

Исправления ошибок

  • [mix ecto] При разборе репозиториев больше не зависит от порядка элементов в карте
  • [mix ecto.gen.repo] Улучшено сообщение об ошибке, если репозиторий не указан

v3.3.3 (2020-02-14)

Улучшения

  • [Ecto.Query] Добавлена поддержка фрагментов в lock
  • [Ecto.Query] nil в select_merge обрабатывается аналогично базам данных SQL (то есть возвращает само значение nil)

v3.3.2 (2020-01-28)

Улучшения

  • [Ecto.Changeset] Оптимистическая блокировка увеличивается только в случае успеха
  • [Ecto.Query] В выражениях окон Ecto разрешены макросы
  • [Ecto.Schema] Добавлена поддержка :join_defaults для ассоциаций many_to_many
  • [Ecto.Schema] Для ассоциации :defaults можно передать MFargs
  • [Ecto.Type] Добавлены Ecto.Type.embedded_load и Ecto.Type.embedded_dump

Исправления ошибок

  • [Ecto.Repo] Пустое имя хоста игнорируется при разборе URL базы данных (поддержка Elixir v1.10)
  • [Ecto.Repo] Комбинации переписываются в запросах Repo.exists?
  • [Ecto.Schema] Учитывается дочерний @schema_prefix в cast_assoc
  • [mix ecto.gen.repo] При записи новой конфигурации в mix ecto.gen.repo используется config_path

v3.3.1 (2019-12-27)

Улучшения

  • [Ecto.Query.WindowAPI] Добавлена поддержка filter/2

Исправления ошибок

  • [Ecto.Query.API] Исправлено использование coalesce/2 со значениями разных типов

v3.3.0 (2019-12-11)

Улучшения

  • [Ecto.Adapter] В поведение Ecto.Adapters.Storage добавлен callback storage_status/1
  • [Ecto.Changeset] Добавлен Ecto.Changeset.apply_action!/2
  • [Ecto.Changeset] В Ecto.Changeset.apply_action/2 снято ограничение на действия
  • [Ecto.Repo] Добавлен c:Ecto.Repo.aggregate/2
  • [Ecto.Repo] Добавлена поддержка {:replace_all_except, fields} в :on_conflict

Исправления ошибок

  • [Ecto.Query] Опция :prefix в :from/:join также применяется к подзапросам
  • [Ecto.Query] Опция :prefix в :join также применяется к запросам
  • [Ecto.Query] Для литералов используются значения, возвращённые базой данных. В предыдущих версиях Ecto учитывалось, что литералы в запросах не должны отбрасываться при комбинациях, однако даже если они не отбрасывались, возвращённые базой данных значения игнорировались
  • [Ecto.Repo] Операции со схемами больше не оборачиваются в транзакцию, если уже выполняются внутри транзакции. Также удалена опция private под названием :skip_transaction

Устаревшие возможности

  • [Ecto.Repo] :replace_all_except_primary_keys объявлен устаревшим; вместо него в :on_conflict следует использовать {:replace_all_except, fields}

v3.2.5 (2019-11-03)

Исправления ошибок

  • [Ecto.Query] Исправлена ошибка, из-за которой выполнение некоторых запросов приводило к утечке типа {:maybe, ...}

v3.2.4 (2019-11-02)

Исправления ошибок

  • [Ecto.Query] Улучшено сообщение об ошибке для недопустимой привязки соединения
  • [Ecto.Query] Опция :prefix в :join также применяется к ассоциациям through
  • [Ecto.Query] При загрузке агрегатов из базы данных вызывается пользовательский тип (если приведение не удаётся, используется значение из базы данных)
  • [mix ecto.gen.repo] Добавлена поддержка конфигураций в стиле Elixir v1.9

v3.2.3 (2019-10-17)

Исправления ошибок

  • [Ecto.Changeset] Перечисления, переданные в validate_inclusion, больше не преобразуются в список

Улучшения

  • [Ecto.Changeset] Улучшено сообщение об ошибке для ключей, не являющихся атомами, в change/put_change
  • [Ecto.Changeset] В cast_association/cast_embed параметр :with можно передать в виде кортежа {module, function, args}
  • [Ecto.Changeset] Добавлены fetch_change!/2 и fetch_field!/2

v3.2.2 (2019-10-01)

Исправления ошибок

  • [Ecto.Query] Исправлена передача аргументов в виде списка ключевых слов в :on, если привязка не указана для join
  • [Ecto.Repo] Обеспечена загрузка предварительной загрузки для уже предварительно загруженной ассоциации has_many :through

v3.2.1 (2019-09-17)

Улучшения

  • [Ecto.Changeset] Добавлена логика циклического перехода для инкрементатора по умолчанию в optimistic_lock
  • [Ecto.Query] Макросы также раскрываются при использовании внутри type/2

Исправления ошибок

  • [Ecto.Query] Обеспечено, что запросы с некэшируемыми запросами в CTE/комбинациях также не кэшируются

v3.2.0 (2019-09-07)

Для v3.2 требуется Elixir v1.6+.

Улучшения

  • [Ecto.Query] Добавлена поддержка общих табличных выражений with_cte/3 и recursive_ctes/2
  • [Ecto.Query] dynamic/3 можно использовать в order_by, distinct, group_by, а также в partition_by, order_by и frame внутри windows
  • [Ecto.Query] В выражениях type/2 разрешены фильтры
  • [Ecto.Repo] Параметры репозитория объединяются с repo_opts changeset и записываются обратно, чтобы оставаться доступными на следующих этапах цепочки
  • [Ecto.Repo] Добавлен callback prepare_query/3, вызываемый перед операциями с запросами
  • [Ecto.Repo] Добавлена поддержка опции :returning в Ecto.Repo.update/2
  • [Ecto.Repo] В Ecto.Repo.transaction/2 можно передать функцию с одним аргументом, которым является текущий репозиторий
  • [Ecto.Type] В Ecto.Type добавлен новый callback embed_as/1, позволяющий адаптерам управлять поведением встраивания
  • [Ecto.Type] Добавлен use Ecto.Type, реализующий новые обязательные callbacks для удобства использования

Исправления ошибок

  • [Ecto.Association] Перед вставкой при замене в has_one обеспечено удаление ассоциации
  • [Ecto.Query] При построении запроса интерполированные nil больше не допускаются в литеральном списке ключевых слов
  • [Ecto.Query] Литералы больше не удаляются из комбинаций, иначе запросы UNION/INTERSECTION могут не совпасть по числу значений в select
  • [Ecto.Query] Во время компиляции больше не предпринимается попытка объединить списки, не являющиеся списками ключевых слов, переданные в select_merge
  • [Ecto.Repo] Ассоциации :through при предварительной загрузке больше не перезаписываются, если не задано принудительное выполнение
  • [Ecto.Repo] Обеспечено распространение опции prefix на комбинации и рекурсивные запросы
  • [Ecto.Schema] Для генерации временных меток используется системное время без дрейфа
  • [Ecto.Type] В datetime_add разрешены любые значения datetime

v3.1.7 (2019-06-27)

Исправления ошибок

  • [Ecto.Changeset] Обеспечено распространение put_assoc с пустым changeset при вставке

v3.1.6 (2019-06-19)

Улучшения

  • [Ecto.Repo] Добавлены :read_only репозитории
  • [Ecto.Schema] Также проверяются параметры, переданные ассоциациям :through

Исправления ошибок

  • [Ecto.Changeset] put_assoc из [] в [] или из nil в nil больше не помечается как изменение
  • [Ecto.Query] При исключении соединений удаляется именованная привязка
  • [mix ecto.gen.repo] Вместо жёстко заданного значения config/config.exs используется :config_path

v3.1.5 (2019-06-06)

Улучшения

  • [Ecto.Repo] Для use Ecto.Repo разрешена опция :default_dynamic_repo
  • [Ecto.Schema] В опции :where для ассоциаций добавлена поддержка {:fragment, ...}

Исправления ошибок

  • [Ecto.Query] Исправлена обработка литералов в комбинирующих операторах (union, except, intersection)

v3.1.4 (2019-05-07)

Исправления ошибок

  • [Ecto.Changeset] Перед добавлением перечислений валидации в метаданные валидации они преобразуются в списки
  • [Ecto.Schema] Префикс корректно распространяется на источник join_through в ассоциациях many_to_many

v3.1.3 (2019-04-30)

Улучшения

  • [Ecto.Changeset] В ошибках проверок на основе перечислений теперь указывается перечисление, по которому выполнялась проверка

v3.1.2 (2019-04-24)

Улучшения

  • [Ecto.Query] Добавлена поддержка type+over
  • [Ecto.Schema] Поля схемы можно исключать из запросов

Исправления ошибок

  • [Ecto.Changeset] Поле больше не указывается как изменённое, если ему присвоено исходное значение
  • [Ecto.Query] Литеральные числа и битовые строки сохраняются в подзапросах и объединениях
  • [Ecto.Query] Улучшено сообщение об ошибке для недопустимого выражения type/2
  • [Ecto.Query] Корректно подсчитывается интерполяция в select_merge/2

v3.1.1 (2019-04-04)

Исправления ошибок

  • [Ecto] Jason не является обязательной зависимостью и остаётся необязательным
  • [Ecto.Repo] Обеспечена работа many_to_many и Ecto.Multi с динамическими репозиториями

v3.1.0 (2019-04-02)

Для v3.1 требуется Elixir v1.5+.

Улучшения

  • [Ecto.Changeset] Для validate_number добавлена опция not_equal_to
  • [Ecto.Query] Улучшено сообщение об ошибке для отсутствующих аргументов fragment
  • [Ecto.Query] Улучшено сообщение об ошибке при отсутствии ключа структуры для структур, созданных в select
  • [Ecto.Query] Разрешены динамические именованные привязки
  • [Ecto.Repo] Добавлена экспериментальная поддержка динамических репозиториев с помощью Ecto.Repo.put_dynamic_repo/1 и Ecto.Repo.get_dynamic_repo/0
  • [Ecto.Type] Строки naive_datetime/utc_datetime без секунд приводятся к соответствующему типу

Исправления ошибок

  • [Ecto.Changeset] Не выполнять запрос unsafe_validate_unique, если соответствующие поля не изменились
  • [Ecto.Changeset] Выдавать ошибку, если в Ecto.Changeset.change/2 передано неизвестное поле
  • [Ecto.Changeset] Добавить в ошибки, созданные validate_length/3, информацию о типе, который прошел проверку
  • [Ecto.Query] Добавить поддержку field/2 в качестве первого элемента type/2 и псевдонима в качестве второго элемента type/2
  • [Ecto.Query] Не пытаться проверять типы привязок с именами, которые неизвестны во время компиляции
  • [Ecto.Query] Корректно приводить к типу логические выражения в select
  • [Mix.Ecto] Загружать приложения во время поиска репозитория, чтобы была доступна среда приложения

Устаревшие возможности

  • [Ecto.LogEntry] Полностью объявить устаревшим API, ранее объявленный устаревшим в мягком режиме

v3.0.7 (2019-02-06)

Исправления ошибок

  • [Ecto.Query] reverse_order сортирует в обратном порядке по первичному ключу, если порядок не задан

v3.0.6 (2018-12-31)

Улучшения

  • [Ecto.Query] Добавить reverse_order/1

Исправления ошибок

  • [Ecto.Multi] Выдавать более понятное сообщение об ошибке при случайном откате внутри Ecto.Multi
  • [Ecto.Query] Корректно объединять глубоко вложенные предварительно загруженные соединения
  • [Ecto.Query] Выдавать более понятное сообщение об ошибке, если в запросах без схемы отсутствует select
  • [Ecto.Schema] Исправить порядок параметров в assoc :where

v3.0.5 (2018-12-08)

Несовместимые изменения

  • [Ecto.Schema] У параметра :where, добавленного в Ecto 3.0.0, был существенный недостаток, поэтому в этой версии он переработан. Это означает, что :where больше нельзя передать кортеж из трех элементов; вместо этого необходимо передать список ключевых слов. Дополнительную информацию см. в разделе «Фильтрация ассоциаций» документации has_many/3

Исправления ошибок

  • [Ecto.Query] Не выдавать ошибку для списков кортежей, не являющихся списками ключевых слов. Вместо этого позволить пользовательскому Ecto.Type обрабатывать их
  • [Ecto.Query] Разрешить передавать prefix: nil подзапросам
  • [Ecto.Query] Использовать разные ключи кэша для объединений, пересечений и разностей
  • [Ecto.Repo] Исправить поддержку upsert с :replace без схемы
  • [Ecto.Type] Не терять точность при приведении utc_datetime_usec с часовым поясом, отличным от Etc/UTC

v3.0.4 (2018-11-29)

Улучшения

  • [Decimal] Обновить зависимость decimal
  • [Ecto.Repo] Удалить неиспользуемый :pool_timeout

v3.0.3 (2018-11-20)

Улучшения

  • [Ecto.Changeset] Добавить параметр count: :bytes в validate_length/3
  • [Ecto.Query] Поддержать передачу Ecto.Query в Ecto.Repo.insert_all

Исправления ошибок

  • [Ecto.Type] Учитывать типы адаптера при загрузке и выгрузке массивов и отображений
  • [Ecto.Query] Убедиться, что в order_by нет привязок при использовании комбинаций в Ecto.Query
  • [Ecto.Repo] Убедиться, что адаптер скомпилирован (а не только загружен) перед его вызовом
  • [Ecto.Repo] Поддержать новый формат спецификации дочернего процесса от адаптеров

v3.0.2 (2018-11-17)

Исправления ошибок

  • [Ecto.LogEntry] Восстановить старые API Ecto.LogEntry для совместимости
  • [Ecto.Repo] Учитывать поля без соединений при объединении предварительно загруженных ассоциаций только на корневом уровне
  • [Ecto.Repo] Учитывать источники полей в параметре upsert :replace_all_fields
  • [Ecto.Type] Преобразовывать :utc_datetime в DateTime при передаче адаптерам

v3.0.1 (2018-11-03)

Исправления ошибок

  • [Ecto.Query] Сохранять порядок параметров при использовании более 32 параметров
  • [Ecto.Query] Учитывать префикс запроса при планировании соединений ассоциаций
  • [Ecto.Repo] Учитывать поля без соединений как уникальные параметры при объединении предварительно загруженных ассоциаций запроса

v3.0.0 (2018-10-29)

Обратите внимание: эта версия включает изменения из ecto и ecto_sql, однако в будущих выпусках все записи ecto_sql будут перечислены в отдельных журналах изменений.

Улучшения

  • [Ecto.Adapters.MySQL] Добавить возможность указывать cli_protocol для команд ecto.create и ecto.drop
  • [Ecto.Adapters.PostgreSQL] Добавить возможность указывать имя базы данных обслуживания для адаптера PostgreSQL для команд ecto.create и ecto.drop
  • [Ecto.Changeset] Сохранять имя ограничения в метаданных ошибок для ограничений
  • [Ecto.Changeset] Добавить validations/1 и constraints/1 вместо разрешения прямого доступа к полям структуры
  • [Ecto.Changeset] Добавить параметр :force_update при приведении отношений, чтобы принудительно выполнять обновление, даже если изменений нет
  • [Ecto.Migration] Теперь миграции блокируют таблицу миграций, чтобы избежать параллельного выполнения миграций в кластере. Тип блокировки можно настроить с помощью конфигурации репозитория :migration_lock; по умолчанию используется «FOR UPDATE», а значение nil отключает блокировку
  • [Ecto.Migration] Добавить конфигурацию репозитория :migration_default_prefix
  • [Ecto.Migration] Добавить обратимую версию подкоманды remove/2
  • [Ecto.Migration] Добавить поддержку непустых массивов в качестве значений по умолчанию в миграциях
  • [Ecto.Migration] Добавить поддержку журналирования уведомлений, сигналов и предупреждений при выполнении миграций (на данный момент поддерживается только Postgres)
  • [Ecto.Migrator] Выдавать предупреждение при запуске миграции, если в базе данных уже применена более поздняя версия
  • [Ecto.Multi] Добавить поддержку анонимных функций в insert/4, update/4, insert_or_update/4 и delete/4
  • [Ecto.Query] Поддержать кортежи в where и having, что позволяет создавать запросы, например where: {p.foo, p.bar} > {^foo, ^bar}
  • [Ecto.Query] Поддержать арифметические операторы в запросах как тонкий слой над функциональностью БД
  • [Ecto.Query] Разрешить задавать имена соединениям в запросах с помощью :as и использовать именованные привязки
  • [Ecto.Query] Поддержать исключение определенных типов соединений в exclude/2
  • [Ecto.Query] Разрешить обновление виртуальных полей в подзапросах
  • [Ecto.Query] Поддержать coalesce/2 в запросах, например select: coalesce(p.title, p.old_title)
  • [Ecto.Query] Поддержать filter/2 в запросах, например select: filter(count(p.id), p.public == true)
  • [Ecto.Query] Параметры :prefix и :hints теперь поддерживаются как в выражениях from, так и в join
  • [Ecto.Query] Поддержать :asc_nulls_last, :asc_nulls_first, :desc_nulls_last и :desc_nulls_first в order_by
  • [Ecto.Query] Разрешить передавать в запросы переменные (источники); например, это полезно для вызова функций, таких как fragment("some_function(?)", p)
  • [Ecto.Query] Добавить поддержку union, union_all, intersection, intersection_all, except и except_all
  • [Ecto.Query] Добавить поддержку windows и over
  • [Ecto.Query] Выдавать ошибку при сравнении строки со списком символов во время планирования
  • [Ecto.Repo] Запускать транзакции только при изменении ассоциации или встраиваемого объекта, чтобы снизить накладные расходы при операциях с репозиторием
  • [Ecto.Repo] Поддержать :replace_all_except_primary_key в качестве стратегии :on_conflict
  • [Ecto.Repo] Поддержать {:replace, fields} в качестве стратегии :on_conflict
  • [Ecto.Repo] Поддержать :unsafe_fragment в качестве :conflict_target
  • [Ecto.Repo] Поддержать select в запросах, передаваемых в update_all и delete_all
  • [Ecto.Repo] Добавить Repo.exists?/2
  • [Ecto.Repo] Добавить Repo.checkout/2 — полезно при выполнении нескольких операций за короткий промежуток времени, позволяя обходить пул
  • [Ecto.Repo] Добавить :stale_error_field в Repo.insert/update/delete, преобразующий Ecto.StaleEntryError в ошибку changeset. Сообщение также можно задать с помощью :stale_error_message
  • [Ecto.Repo] При предварительной загрузке результаты теперь сортируются только по ключу отношения, а не по всей структуре
  • [Ecto.Schema] Разрешить передавать параметр :where в has_many/has_one/belongs_to/many_to_many

Исправления ошибок

  • [Ecto.Inspect] Не выдавать ошибку при просмотре выражений запроса, количество привязок в которых превышает число доступных привязок
  • [Ecto.Migration] Сохранять двойные символы подчеркивания в автоматически сгенерированных именах индексов для единообразия с changeset
  • [Ecto.Query] Исправить Ecto.Query.API.map/2 для одного столбца со значением nil при наличии соединения
  • [Ecto.Migration] Убедиться, что create_if_not_exists можно корректно отменить
  • [Ecto.Repo] Разрешить предварительно загружать ассоциации many_to_many с помощью функции (ранее поведение было непредсказуемым)
  • [Ecto.Schema] Обеспечить загрузку автоматически генерируемого ID с пользовательским типом
  • [Ecto.Schema] Сделать так, чтобы updated_at имел то же значение, что и inserted_at
  • [Ecto.Schema] Убедиться, что все поля заменяются на on_conflict: :replace_all/:replace_all_except_primary_key, а не только поля, переданные как изменения
  • [Ecto.Type] Возвращать :error при приведении NaN или бесконечных десятичных чисел
  • [mix ecto.migrate] Корректно выполнять миграции после изменения ECTO_EDITOR
  • [mix ecto.migrations] Выводить список примененных версий, даже если файл миграции удален
  • [mix ecto.load] Теперь задача завершается с ошибкой при ошибках SQL в Postgres

Устаревшие возможности

Хотя версия Ecto 3.0 является мажорным обновлением, приведенная ниже функциональность выдает предупреждения об устаревании, чтобы упростить процесс миграции. Она будет удалена в будущих выпусках Ecto 3.1 и новее.

  • [Ecto.Changeset] Передача списка двоичных строк в cast/3 объявлена устаревшей; передавайте вместо этого список атомов
  • [Ecto.Multi] Ecto.Multi.run/3 теперь получает в качестве первого аргумента функций репозиторий, в котором выполняется транзакция, а в качестве второго — накопленные к этому моменту изменения
  • [Ecto.Query] Теперь join/5 ожидает on: expr в качестве последнего аргумента вместо просто expr. Это необходимо для корректной поддержки параметров :as, :hints и :prefix
  • [Ecto.Repo] Параметр :returning для update_all и delete_all объявлен устаревшим, поскольку эти операторы теперь поддерживают конструкции select
  • [Ecto.Repo] Передача :adapter через конфигурацию объявлена устаревшей; вместо этого передавайте его в use Ecto.Repo
  • [Ecto.Repo] Конфигурация :loggers объявлена устаревшей и заменена на «События телеметрии»

Несовместимые изменения

  • [Ecto.DateTime] Ecto.Date, Ecto.Time и Ecto.DateTime ранее были объявлены устаревшими, а теперь удалены
  • [Ecto.DataType] Протокол Ecto.DataType удален
  • [Ecto.Migration] Автоматически определяемые имена индексов в Ecto v3.0 могут отличаться для индексов со сложными именами столбцов
  • [Ecto.Multi] Ecto.Multi.run/5 теперь получает в качестве первого аргумента функций репозиторий, в котором выполняется транзакция, а в качестве второго — накопленные к этому моменту изменения
  • [Ecto.Query] join больше не заключает fragment в круглые скобки. В некоторых случаях, например в общих табличных выражениях, фрагмент необходимо явно заключить в скобки.
  • [Ecto.Repo] Параметр on_conflict: :replace_all теперь также отправляет в базу данных поля со значениями по умолчанию. Чтобы сохранить прежнее поведение, при котором отправлялись только изменения changeset, задайте ему значение on_conflict: {:replace, Map.keys(changeset.changes)} (это изменение также указано как исправление ошибки)
  • [Ecto.Repo] Операции репозитория больше не вызываются из обратных вызовов ассоциаций. Это поведение не было гарантировано и в предыдущих версиях, но мы указываем его среди несовместимых изменений, чтобы предупредить пользователей, которые на него полагались
  • [Ecto.Repo] :pool_timeout больше не поддерживается; вместо него используется новая система очередей, описанная в DBConnection.start_link/2 в разделе «Конфигурация очереди». Большинству пользователей достаточно настроить :timeout, поскольку теперь он включает и время в очереди, и время выполнения запроса
  • [Ecto.Schema] :time, :naive_datetime и :utc_datetime больше не сохраняют информацию о микросекундах. Чтобы сохранять микросекунды, используйте :time_usec, :naive_datetime_usec, :utc_datetime_usec
  • [Ecto.Schema] Параметр @schema_prefix теперь влияет только на from/join, где используется схема, а не на весь запрос
  • [Ecto.Schema.Metadata] Ключ source больше не возвращает кортеж из префикса схемы и имени таблицы или коллекции. Теперь он возвращает только строку с именем таблицы или коллекции. Префикс схемы теперь можно получить через ключ prefix.
  • [Mix.Ecto] Mix.Ecto.ensure_started/2 удален. Однако в Ecto 2.2 модуль Mix.Ecto не считался частью публичного API и не должен был использоваться; мы указываем это для справки.

Изменения адаптеров

  • [Ecto.Adapter] Разделить Ecto.Adapter на Ecto.Adapter.Queryable и Ecto.Adapter.Schema, чтобы предоставить более специализированные API репозитория
  • [Ecto.Adapter] Поле :sources в query_meta теперь содержит кортежи из трех элементов с {source, schema, prefix} для поддержки префиксов from/join (#2572)
  • [Ecto.Adapter] Типы базы данных time, utc_datetime и naive_datetime должны преобразовываться в типы с точностью до секунд, а типы базы данных time_usec, utc_datetime_usec и naive_datetime_usec должны иметь точность до микросекунд (#2291)
  • [Ecto.Adapter] Аргумент on_conflict для insert и insert_all больше не получает кортеж {:replace_all, list(), atom()}. Вместо этого он получает {fields :: [atom()], list(), atom()}, где fields — это список атомов, обозначающих заменяемые поля (#2181)
  • [Ecto.Adapter] insert/update/delete теперь получают поля :source и :prefix по отдельности вместо одного поля :source, содержащего оба значения source и prefix (#2490)
  • [Ecto.Adapter.Migration] Добавлен новый обратный вызов lock_for_migration/4. По умолчанию он реализован в Ecto.Adapters.SQL (#2215)
  • [Ecto.Adapter.Migration] Теперь execute_ddl должен возвращать {:ok, []}, чтобы в будущем можно было возвращать уведомления, подсказки и предупреждения (адаптерам, использующим Ecto.Adapters.SQL, ничего менять не нужно)
  • [Ecto.Query] Поле from в Ecto.Query теперь возвращает Ecto.Query.FromExpr с полем :source, унифицируя поведение в выражениях from и join (#2497)
  • [Ecto.Query] Теперь в запросах поддерживаются кортежные выражения. Например, where: {p.foo, p.bar} > {p.bar, p.baz} должно преобразовываться в WHERE (p.foo, p.bar) > (p.bar, p.baz) в базах данных SQL. Адаптеры необходимо изменить, чтобы они обрабатывали {:{}, meta, exprs} в AST запроса (#2344)
  • [Ecto.Query] Адаптеры должны поддерживать в запросах следующие арифметические операторы: +, -, * и / (#2400)
  • [Ecto.Query] Адаптеры должны поддерживать filter/2 в запросах, как в select: filter(count(p.id), p.public == true) (#2487)

Предыдущие версии

  • См. CHANGELOG.md в ветке v2.2
Следующая страница → Начало работы

Пакет Hex Предпросмотр Hex (текущий файл) Просмотреть llms.txt Скачать версию ePub

Создано с помощью ExDoc (v0.40.2) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/changelog.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API