# Changelog
**Note** That `money_sql` is supported on Elixir 1.11 and later only.
## Money_SQL v1.11.0
This is the changelog for Money_SQL v1.11.0 released on January 249h, 2023.
### Enhancements
* When dumping a `Money.Ecto.Composite.Type`, detect if `dump/3` is being called by `Ecto.Type.embedded_dump/2`. If it is, then return a map that can be serialized to JSON. If it isn't (most cases) then return the tuple to be serialized to Postgres. See [papertrail issue](https://github.com/izelnakri/paper_trail/issues/230).
## Money_SQL v1.10.2
This is the changelog for Money_SQL v1.10.2 released on December 13th, 2023.
### Bug Fixes
* Don't propagate some Ecto schema fields in `Money.Ecto.Composite.Type.init/2`. This change deletes additional `Ecto.Schema.field/3` options so they don't get loaded as format_options. Thanks to @axelclark for the PR. Closes #40.
* Fix Changelog headings and whitespace. Thanks to @c4710n for the PR. Closes #39.
## Money_SQL v1.10.1
This is the changelog for Money_SQL v1.10.1 released on November 3rd, 2023.
### Bug Fixes
* Fix compilation warnings on Elixir 1.16.
* Fix migration generator for `money_with_currency` type. Thanks to @bigardone for the issue and PR. Closes #37, closes #38.
## Money_SQL v1.10.0
This is the changelog for Money_SQL v1.10.0 released on October 30th, 2023.
### Bug Fixes
* The mix tasks that generate database function migrations (`money.gen.postgres.sum_function`, `money.gen.postgres.plus_operator` and `money.gen.postgres.min_max_functions`) need to be aware of the type of the `money_with_currency` "currency_code" element in a Postgres database. In releases of `ex_money_sql` up to 1.7.1 the type was `char(3)`. In later releases is changed to the more canonical `varchar`. In turn, the database functions need to know the type for the internal accumulator. It is possible, as illustrated in issue #36, to have generated the `money_with_currency` "currency_code" type as `char(3)` and then move to a later release of `ex_money_sql`. In which case the money database function migrations would fail because they were built with `varchar` accumulators. This release will detect the underlying type of the `money_with_currency` "currency_code" element and adjust the migration accordingly. Thanks to @bigardone for the report and motivation to get this done. Closes #36.
### Enhancements
* Adds database functions for unary negation and the operation `-`. Thanks to @zachdaniel for the PR.
## Money_SQL v1.9.3
This is the changelog for Money_SQL v1.9.2 released on October 1st, 2023.
### Bug Fixes
* Return an error if loading invalid amounts such as `Inf` and `NaN`. Thanks to @dhedlund for the report and PR. Closes #34.
## Money_SQL v1.9.2
This is the changelog for Money_SQL v1.9.2 released on June 17th, 2022.
### Embedded Schema Configuration
Please ensure that if you are using Ecto [embedded schemas](https://hexdocs.pm/ecto/embedded-schemas.html) that include a `money` type that it is configured with the type `Money.Ecto.Map.Type`, **NOT** `Money.Ecto.Composite.Type`.
In previous releases the misconfiguration of the type worked by accident. In this release and subsequent releases you will likely see an exception like `** (Protocol.UndefinedError) protocol Jason.Encoder not implemented for {"USD", Decimal.new("50.00")} of type Tuple`. This is most likely an indication of type misconfiguration in an embedded schema.
### Bug Fixes
* Fixes dumping and loading of `Money.Ecto.Map.Type` when used in embedded schemas. Many thanks to @redrabbit for the issue and the PR. Closes #32.
## Money_SQL v1.9.1
This is the changelog for Money_SQL v1.9.1 released on May 12th, 2022.
### Bug Fixes
* Fixes casting a map when the `"amount"` is `nil`. Thanks to @treere for the report and PR. Closes #30.
## Money_SQL v1.9.0
This is the changelog for Money_SQL v1.9.0 released on April 28th, 2022.
### Enhancements
* Adds `Money.Ecto.Query.API` query helpers to simplify Ecto queries involving money columns. Thanks very much to @am-kantox for the excellent suggestion and PR.
## Money_SQL v1.8.0
This is the changelog for Money_SQL v1.8.0 released on December 26th, 2022.
### Enhancements
* Adds migrations and SQL functions to support `min` and `max` aggregate functions for Postgres when using the `money_with_currency` composite data type. The new mix task is `money.gen.postgres.min_max_functions`.
* Renames the migration task `money.gen.postgres.aggregate_functions` to `money.gen.postgres.sum_function` to better reflect its intent. This change affects only new installations. It has no effect on pre-existing generated migrations.
## Money_SQL v1.7.3
This is the changelog for Money_SQL v1.7.3 released on December 18th, 2022.
### Bug Fixes
* When loading money from the database with the `Money.Ecto.Map.Type` type, do not do localized parsing of the amount. The amount is always saved using `Decimal.to_string/1` and therefore is not localized. It must not be parsed with localization on loading.
## Money_SQL v1.7.2
This is the changelog for Money_SQL v1.7.2 released on August 27th, 2022.
### Change in data type
* The "amount" component of `money_with_currency` in a Postgres database is now `varchar` instead of `char(3)`. This is both more canonical in a Postgres database and allows for the use of Digial Tokens (crypto currencies) which have a code greater than 3 characters long.
### Bug Fixes
* Makes the aggregate functions parallel-safe which provides up to 100% speed improvement. Thanks to @milangupta1 for the PR.
## Money_SQL v1.7.1
This is the changelog for Money_SQL v1.7.1 released on July 8th, 2022.
### Bug Fixes
* Fixes casting a money map when the currency is `nil`. Thanks to @frahugo for the report. Closes #24.
## Money_SQL v1.7.0
This is the changelog for Money_SQL v1.7.0 released on May 21st, 2022.
### Enhancements
* Adds the module `Money.Validation` to provide [Ecto Changeset validations](https://hexdocs.pm/ecto/Ecto.Changeset.html#module-validations-and-constraints). In particular it adds `Money.Validation.validate_money/3` which behaves exactly like `Ecto.Changeset.validate_number/3` only for `t:Money.t/0` types.
## Money_SQL v1.6.0
This is the changelog for Money_SQL v1.6.0 released on December 31st, 2021.
**Note** That `money_sql` is now supported on Elixir 1.10 and later only.
### Enhancements
* `t:Money.Ecto.Composite.Type` and `t:Money.Ecto.Map.Type` now return the exception module when there is an error in `cast/1`. For example:
```elixir
iex> Money.Ecto.Composite.Type.cast("") ==
{:error,
[
exception: Money.InvalidAmountError,
message: "Amount cannot be converted to a number: \"\""
]}
```
The expected exceptions are:
* `Money.InvalidAmountError`
* `Money.UnknownCurrencyError`
* `Money.ParseError`
Thanks to @DaTrader for the enhancement request.
## Money_SQL v1.5.2
This is the changelog for Money_SQL v1.5.2 released on December 13th, 2021.
**Note** That `money_sql` is now supported on Elixir 1.10 and later only.
### Bug Fixes
* Fixes `c:Ecto.ParameterizedType.embed_as/2` callback for the `Ecto.ParameterizedType` behaviour. Thanks to @nseantanly for the report and the PR.
## Money_SQL v1.5.1
This is the changelog for Money_SQL v1.5.1 released on December 8th, 2021.
**Note** That `money_sql` is now supported on Elixir 1.10 and later only.
### Bug Fixes
* Implements `c:Ecto.ParameterizedType.equal?/3` callback for the `Ecto.ParameterizedType` behaviour. Thanks to @namhoangyojee for the report and the PR.
* Adds `@impl Ecto.ParamaterizedType` to the relevant callbacks.
## Money_SQL v1.5.0
This is the changelog for Money_SQL v1.5.0 released on September 25th, 2021.
#### Enhancements
* Adds a `+` operator for the Postgres type `:money_with_currency`
* The name of the migration to create the `:money_with_currency` type has shortened to be `money.gen.postgres.money_with_currency`
## Money_SQL v1.4.5
This is the changelog for Money_SQL v1.4.5 released on June 3rd, 2021.
#### Bug Fixes
* Remove conditional compilation in `Money.Ecto.Composite.Type` - the type is always `Ecto.ParameterizedType`.
## Money_SQL v1.4.4
This is the changelog for Money_SQL v1.4.4 released on March 18th, 2021.
#### Bug Fixes
* Don't use `is_struct/1` guard to support compatibility on older Elixir releases
## Money_SQL v1.4.3
This is the changelog for Money_SQL v1.4.3 released on February 17th, 2021.
#### Bug Fixes
* Don't propogate a `:default` option into the `t:Money` from the schema. Fixes #14. Thanks to @emaiax.
## Money_SQL v1.4.2
This is the changelog for Money_SQL v1.4.2 released on February 12th, 2021.
#### Bug Fixes
* Dumping/loading `nil` returns `{:ok, nil}`. Thanks to @morinap.
## Money_SQL v1.4.1
This is the changelog for Money_SQL v1.4.1 released on February 11th, 2021.
#### Bug Fixes
* Casting `nil` returns `{:ok, nil}`. Thanks to @morinap.
## Money_SQL v1.4.0
This is the changelog for Money_SQL v1.4.0 released on February 10th, 2021.
#### Bug Fixes
* Fix parsing error handling in `Money.Ecto.Composite.Type.cast/2`. Thanks to @NikitaAvvakumov. Closes #10.
* Fix casting localized amounts. Thanks to @olivermt. Closes #11.
#### Enhancements
* Changes `Money.Ecto.Composite.Type` and `Money.Ecto.Map.Type` to be `ParameterizedType`. As a result, Ecto 3.5 or later is required. This change allows configuration of format options for the `:money_with_currency` to added as parameters in the Ecto schema. For the example schema:
```elixir
defmodule Organization do
use Ecto.Schema
@primary_key false
schema "organizations" do
field :payroll, Money.Ecto.Composite.Type
field :tax, Money.Ecto.Composite.Type, fractional_digits: 4
field :name, :string
field :employee_count, :integer
timestamps()
end
end
```
The field `:tax` will be instantiated as a `Money.t` with `:format_options` of `fractional_digits: 4`.
## Money_SQL v1.3.1
This is the changelog for Money_SQL v1.3.1 released on September 30th, 2020.
#### Bug Fixes
* Fixes compatibility with both `Decimal` version `1.x` and `2.x`. Thanks to @doughsay and @coladarci for the report. Closes #8.
## Money_SQL v1.3.0
This is the changelog for Money_SQL v1.3.0 released on January 30th, 2020.
#### Enhancements
* Updates to `ex_money` version `5.0`. Thanks to @morgz
## Money_SQL v1.2.1
This is the changelog for Money_SQL v1.2.1 released on November 3rd, 2019.
#### Bug Fixes
* Fixes `Money.Ecto.Composite.Type` and `Money.Ecto.Map.Type` by ensuring the `load/1` and `cast/1` callbacks conform to their typespecs. Thanks to @bgracie. Closes #4 and #5.
* Fixes the migration templates for `money.gen.postgres.aggregate_functions` to use `numeric` intermediate types rather than `numeric(20,8)`. For current installations it should be enough to run `mix money.gen.postgres.aggregate_functions` again followed by `mix ecto.migrate` to install the corrected aggregate function.
## Money_SQL v1.2.0
This is the changelog for Money_SQL v1.2.0 released on November 2nd, 2019.
#### Bug Fixes
* Removes the precision specification from intermediate results of the `sum` aggregate function for Postgres.
#### Enhancements
* Adds `equal?/2` callbacks to the `Money.Ecto.Composite.Type` and `Money.Ecto.Map.Type` for `ecto_sql` version 3.2
## Money_SQL v1.1.0
This is the changelog for Money_SQL v1.1.0 released on August 22nd, 2019.
#### Enhancements
* Renames the migration that generator that creates the Postgres composite type to be more meaningful.
#### Bug Fixes
* Correctly generate and execute migrations. Fixes #1 and #2. Thanks to @davidsulc, @KungPaoChicken.
## Money_SQL v1.0.0
This is the changelog for Money_SQL v1.0.0 released on July 8th, 2019.
#### Enhancements
* Initial release. Extracted from [ex_money](https://hex.pm/packages/ex_money)