Skip to content

v2.0.0

Compare
Choose a tag to compare
@josevalim josevalim released this 21 Jun 13:18
· 2690 commits to master since this release

Backwards incompatible changes

  • [Changeset] changeset.model has been renamed to changeset.data
  • [Changeset] changeset.optional has been removed
  • [Changeset] changeset.errors now 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.StaleModelError has been renamed to Ecto.StaleEntryError
  • [Repo] Poolboy now expects :pool_overflow option 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/2 will 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.Poolboy and Ecto.Pools.SojournBroker have been removed in favor of DBConnection.Poolboy and DBConnection.Sojourn
  • [Repo] :timeout in Repo.transaction now affects the whole transaction block and not only the particular transaction queries
  • [Repo] Overriding Repo.log/1 is 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 passing default: [] to the field definition
  • [Schema] __schema__(:types) now returns map
  • [SQL] Ecto.Adapters.SQL.begin_test_transaction, Ecto.Adapters.SQL.restart_test_transaction and Ecto.Adapters.SQL.rollback_test_transaction have been removed in favor of the new ownership-based Ecto.Adapters.SQL.Sandbox

Soft deprecations (no warnings emitted)

  • [Changeset] Deprecate Ecto.Changeset.cast/4 in favor of Ecto.Changeset.cast/3 + Ecto.Changeset.validate_required/3

Deprecations

  • [Changeset] Deprecate :empty in Ecto.Changeset.cast
  • [Repo] Repo.after_connect/1 is deprecated, please pass the :after_connect repository 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 :where option when on Ecto.Migration.index/2
  • [Migration] Allow the migration table name to be configured in the repository via :migration_source
  • [Migration] Support :on_update for Ecto.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 &&)|) and exclusion_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") and check_constraint(changeset, :price, name: :positive_price, message: "must be greater than zero")
  • [Query] Allow the :on field to be specified with association joins
  • [Query] Support expressions in map keys in select in 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/2 and map fields with map/2, including support for dynamic fields
  • [Query] Add first/2 and last/2
  • [Repo] Add Repo.aggregate/4 for easy aggregations
  • [Repo] Allow custom select field in preload queries
  • [Repo] Support the :force option 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 :returning option in insert_all, update_all and delete_all
  • [Schema] Allow @schema_prefix to be configured per schema. It is used for new structs as well as queries where the given schema is used as from
  • [Schema] Support MFA on autogenerate
  • [Schema] Support composite primary keys
  • [Type] Add type {:map, inner_type}

Bug fixes

  • [Changeset] The :required option on cast_assoc and cast_embed will now tag has_many and embeds_many relationships as missing if they contain an empty list
  • [DateTime] Fix Date/DateTime serialization for years above 9999
  • [Postgres] Switch pg storage management away from psql and 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_at autogeneration runs before updated_at autogeneration