Releases: elixir-ecto/ecto
Releases · elixir-ecto/ecto
v3.4.5
Enhancements
- [Ecto.Changeset] Allow custom error key in
unsafe_validate_unique - [Ecto.Changeset] Improve performance when casting large params maps
Bug fixes
- [Ecto.Changeset] Improve error message for invalid
cast_assoc - [Ecto.Query] Fix inspecting query with fragment CTE
- [Ecto.Query] Fix inspecting dynamics with aliased bindings
- [Ecto.Query] Improve error message when selecting a single atom
- [Ecto.Repo] Reduce data-copying when preloading multiple associations
- [Ecto.Schema] Do not define a compile-time dependency for schema in
:join_through
v2.2.0-rc.1
Regressions
- [Ecto.UUID] Remove UUID version validation as it is not part of the RFC
- [Ecto.Adapters.Postgres] No longer add parens to migration index expression in order to support NULL/ASC/DESC
Enhancements
- [Ecto.Changeset] Add
unsafe_validate_unique/3which validates uniqueness for faster feedback cycles but without data-integrity guarantees - [Ecto.Query] Support aggregations in
type/2in select - [Ecto.Schema] Support
@field_source_mapperinEcto.Schemaas a mechanism to programatically set the:sourceoption
v2.0.1
v2.0.0
Backwards incompatible changes
- [Changeset]
changeset.modelhas been renamed tochangeset.data - [Changeset]
changeset.optionalhas been removed - [Changeset]
changeset.errorsnow always returns tuple{String.t, Keyword.t}in its values - [DateTime] The "Z" (UTC) at the end of an ISO 8601 time has been removed as UTC should not be assumed
- [LogEntry] Overhaul log entry and store times in :native units
- [Repo]
Ecto.StaleModelErrorhas been renamed toEcto.StaleEntryError - [Repo] Poolboy now expects
:pool_overflowoption instead of:max_overflow(keep in mind though using such option is discourage altogether as it establishes short-lived connections to the database, likely being worse to performance in both short- and long-term) - [Repo]
Repo.insert/2will now send only non-nil fields from the struct to the storage (in previous versions, all fields from the struct were sent to the database) - [Repo]
Ecto.Pools.PoolboyandEcto.Pools.SojournBrokerhave been removed in favor ofDBConnection.PoolboyandDBConnection.Sojourn - [Repo]
:timeoutinRepo.transactionnow affects the whole transaction block and not only the particular transaction queries - [Repo] Overriding
Repo.log/1is no longer supported. Instead provide custom loggers configuration via:loggers. The default is:[Ecto.LogEntry] - [Schema] Array fields no longer default to an empty list
[]. Previous behaviour can be achieved by passingdefault: []to the field definition - [Schema]
__schema__(:types)now returns map - [SQL]
Ecto.Adapters.SQL.begin_test_transaction,Ecto.Adapters.SQL.restart_test_transactionandEcto.Adapters.SQL.rollback_test_transactionhave been removed in favor of the new ownership-basedEcto.Adapters.SQL.Sandbox
Soft deprecations (no warnings emitted)
- [Changeset] Deprecate
Ecto.Changeset.cast/4in favor ofEcto.Changeset.cast/3+Ecto.Changeset.validate_required/3
Deprecations
- [Changeset] Deprecate
:emptyinEcto.Changeset.cast - [Repo]
Repo.after_connect/1is deprecated, please pass the:after_connectrepository option instead
Enhancements
- [Adapter] Ensure adapters work on native types, guaranteeing adapters compose better with custom types
- [Adapter] Support prepared queries in adapters
- [Adapter] Add support for loading and dumping structures
- [Changeset] Include the type that failed to cast in changeset errors. Example:
[profile: {"is invalid", [type: :map]}] - [DateTime] Ensure the given date and datetimes are valid
- [Migration] Add support for partial indexes by specifying the
:whereoption when onEcto.Migration.index/2 - [Migration] Allow the migration table name to be configured in the repository via
:migration_source - [Migration] Support
:on_updateforEcto.Migrate.references - [Migration] Use pool of 1 connection for
mix ecto.migrate/rollback - [Mix] Automatically reenable migration and repository management tasks after execution
- [Preloader] Support mixing preloads and assocs
- [Postgres] Add migration and changeset support for PostgreSQL exclusion constraints. Example:
create constraint(:sizes, :cannot_overlap, exclude: ~s|gist (int4range("min", "max", '[]') WITH &&)|)andexclusion_constraint(changeset, :sizes, name: :cannot_overlap, message: "must not overlap") - [Postgres] Support lateral joins (via fragments)
- [Postgres] Add migration and changeset support for PostgreSQL check constraints. Example:
create constraint(:products, "positive_price", check: "price > 0")andcheck_constraint(changeset, :price, name: :positive_price, message: "must be greater than zero") - [Query] Allow the
:onfield to be specified with association joins - [Query] Support expressions in map keys in
selectin queries. Example:from p in Post, select: %{p.title => p.visitors} - [Query] Support map update syntax. Example:
from p in Post, select: %{p | title: "fixed"} - [Query] Allow struct fields to be selected with
struct/2and map fields withmap/2, including support for dynamic fields - [Query] Add
first/2andlast/2 - [Repo] Add
Repo.aggregate/4for easy aggregations - [Repo] Allow custom
selectfield in preload queries - [Repo] Support the
:forceoption in preloads - [Repo] Perform preloads in parallel by default
- [Repo] Add
Repo.in_transaction?to know if the current process is in a transaction - [Repo] Support
:returningoption ininsert_all,update_allanddelete_all - [Schema] Allow
@schema_prefixto be configured per schema. It is used for new structs as well as queries where the given schema is used asfrom - [Schema] Support MFA on autogenerate
- [Schema] Support composite primary keys
- [Type] Add type
{:map, inner_type}
Bug fixes
- [Changeset] The
:requiredoption oncast_assocandcast_embedwill now taghas_manyandembeds_manyrelationships as missing if they contain an empty list - [DateTime] Fix Date/DateTime serialization for years above 9999
- [Postgres] Switch pg storage management away from
psqland use direct database connections, solving many issues like locale and database connection - [Repo] Ensure nested preload works even if intermediate associations were already loaded
- [Repo] Do not attempt to execute insert/update/delete statement for associations if a previous operation failed due to a constraint error
- [Schema] Ensure
inserted_atautogeneration runs beforeupdated_atautogeneration