|
6 | 6 |
|
7 | 7 | * [Ecto] Allow passing custom loader and dumper functions to `embedded_load/3` and `embedded_dump/2` |
8 | 8 | * [Ecto.Changeset] Make `validate_length/3` count codepoints by default, aligning it with how databases typically enforce string length limits |
9 | | - * [Ecto.Query] Allow assigning column names to fragment sources |
| 9 | + * [Ecto.Query] Allow assigning column names to fragment sources via the `:columns` option, so they can be referenced elsewhere in the query without hard-coding them in the fragment string: |
| 10 | + |
| 11 | + from f in fragment("generate_series(?, ?)", ^1, ^10, columns: [:x]), |
| 12 | + where: f.x > 5, |
| 13 | + select: f.x |
10 | 14 |
|
11 | 15 | ### Bug fixes |
12 | 16 |
|
| 17 | + * [Ecto.Changeset] Redact fields in Ecto.InvalidChangesetError and mixed keys CastError messages |
13 | 18 | * [Ecto.Query] Fix subqueries in interpolated join filters (this changes the representation of `JoinExpr.on` fields to a `BooleanExpr`) |
14 | 19 | * [Ecto.Query] Fix selecting lists of fields and using `map/2` from subqueries |
15 | 20 | * [Ecto.Query] Sort escaped map and struct fields for deterministic compilation output |
16 | 21 | * [Ecto.Repo] Fix `exists?/2` semantics for queries with combinations such as `union`, `intersect`, and `except` |
17 | 22 | * [Ecto.Repo] Map fields from source queries in `insert_all/3` through the destination schema, respecting column names and writable settings |
| 23 | + * [Ecto.Repo] Only spawn tasks in the preloader if machine has more than one core |
18 | 24 | * [Ecto.Type] Make DateTime handling in cast consistent with Elixir's standard library |
19 | 25 |
|
| 26 | +## v3.14.3 (2026-11-04) |
| 27 | + |
| 28 | +### Bug fixes |
| 29 | + |
| 30 | + * [Ecto.Query] Include the prefix of queries given to `join` in the query cache key |
| 31 | + * [Ecto.Query] Keep hints of queries given to `join`, as well as the hints given to the join itself |
| 32 | + * [Ecto.Query] Do not cache queries with interpolated JSON paths, `splice/1`, and `constant/1`, as each distinct value would create a new query cache entry |
| 33 | + * [Ecto.Query] Keep interpolated true filters that a later `or_where` depends on |
| 34 | + |
20 | 35 | ## v3.14.2 (2026-08-14) |
21 | 36 |
|
22 | 37 | ### Enhancements |
|
0 commit comments