diesel/CHANGELOG.md

209 lines
8.4 KiB
Markdown
Raw Normal View History

# Change Log
All user visible changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/), as described
for Rust libraries in [RFC #1105](https://github.com/rust-lang/rfcs/blob/master/text/1105-api-evolution.md)
## Unreleased
### Added
2016-02-03 17:02:10 +03:00
* Added support for SQLite. Diesel still uses postgres by default. To use SQLite
instead, add `default-features = false, features = ["sqlite"]` to your
Cargo.toml. You'll also want to add `default-features = false` to `codegen`.
Since SQLite is a much more limited database, it does not support our full set
of features. You can use SQLite and PostgreSQL in the same project if you
desire.
* Added support for mapping `types::Timestamp`, `types::Date`, and `types::Time`
to/from `chrono::NaiveDateTime`, `chrono::NaiveDate`, and `chrono::NaiveTime`.
Add `features = ["chrono"]` to enable.
* Added a top level `select` function for select statements with no from clause.
This is primarily intended to be used for testing Diesel itself, but it has
been added to the public API as it will likely be useful for third party
crates in the future. `select(foo).from(bar)` might be a supported API in the
future as an alternative to `bar.select(foo)`.
* Added `expression::dsl::sql` as a helper function for constructing
`SqlLiteral` nodes. This is primarily intended to be used for testing Diesel
itself, but is part of the public API as an escape hatch if our query builder
DSL proves inadequate for a specific case. Use of this function in any
production code is discouraged as it is inherently unsafe and avoids real type
checking.
* Added a `treat_none_as_null` option to `changeset_for`. When set to `true`,
a model will set a field to `Null` when an optional struct field is `None`,
instead of skipping the field entirely. The default value of the option is
`false`, as we think the current behavior is a much more common use case.
* Added `Expression#nullable()`, to allow comparisons of not null columns with
nullable ones when required.
2016-01-30 05:27:33 +03:00
* Added `sum` and `avg` functions.
* Added the `diesel setup`, `diesel database setup`, and `diesel database
reset` commands to the CLI.
2016-02-05 23:06:44 +03:00
* Added support for SQL `IN` statements through the `eq_any` method.
### Changed
2016-02-05 23:06:44 +03:00
* Moved most of our top level trait exports into a prelude module, and
re-exported our CRUD functions from the top level.
`diesel::query_builder::update` and friends are now `diesel::update`, and you
will get them by default if you import `diesel::*`. For a less aggressive
glob, you can import `diesel::prelude::*`, which will only export our traits.
* `Connection` is now a trait instead of a struct. The struct that was
previously known as `Connection` can be found at `diesel::pg::PgConnection`.
2016-01-15 19:29:27 +03:00
* Rename both the `#[derive(Queriable)]` attribute and the `Queriable` trait to
use the correct spelling `Queryable`.
2016-02-05 23:06:44 +03:00
* `load` and `get_results` now return a `Vec<Model>` instead of an iterator.
* Replaced `Connection#find(source, id)` with
`source.find(id).first(&connection)`.
* The `debug_sql!` macro now uses `\`` for identifier quoting, and `?` for bind
parameters, which is closer to a "generic" backend. The previous behavior had
no identifier quoting, and used PG specific bind params.
Make `ToSql` and `FromSql` generic over the backend This was a mostly mechanical change, but there were several points of interest. I've done my best to audit impls which I consider generic, vs impls that are PG specific. This implies that an impl even can be considered generic. This mostly doesn't apply to SQLite, since due to the way its bind parameters are handled I don't expect that types will go through `ToSql`. `FromSql` I'm still unclear on, and that might change further. However, after reading through the `MySQL` docs for bind params, I'm reasonably confident that for string types, binary types, and numeric types which have an equivalent C primitive, they will always be represented this way. SQL standard types which I believe will generally very by backend are date/time types, and decimal. As part of this change, our blanket impl causing `FromSql` implying `FromSqlRow` becomes invalid. I won't go into too much detail here, as I've written up a pre-RFC on a solution that goes into more detail at https://internals.rust-lang.org/t/pre-rfc-sealed-traits/3108/1, and I think this issue goes away once specialization is stable (which is tracked at https://github.com/sgrif/diesel/issues/130). With this change, I believe the only remaining trait which needs to be made generic is `NativeSqlType` (though I'm legitimately unsure if we actually want to do that, due to the complications it adds with our expression heirarchy related to `Bool`, and I do not think I want `Expression` to be generic over the backend)
2016-01-24 00:28:45 +03:00
* Many user facing types are now generic over the backend. This includes, but is
not limited to `Queryable` and `Changeset`. This change should not have much
impact, as most impls will have been generated by diesel_codegen, and that API
has not changed.
* The mostly internal `NativeSqlType` has been removed. It now requires a known
backend. `fn<T> foo() where T: NativeSqlType` is now `fn<T, DB> foo() where
DB: HasSqlType<T>`
### Removed
* `Connection#query_sql` and `Connection#query_sql_params` have been removed.
These methods were not part of the public API, and were only meant to be used
for testing Diesel itself. However, they were technically callable from any
crate, so the removal has been noted here. Their usage can be replaced with
bare `select` and `expression::dsl::sql`.
2016-01-11 23:17:30 +03:00
## [0.4.1] 2016-01-11
### Changed
* Diesel CLI will no longer output notices about `__diesel_schema_migrations`
already existing.
2016-01-11 23:17:30 +03:00
* Relicensed under MIT/Apache dual
## [0.4.0] 2016-01-08
### Added
* Added Diesel CLI, a tool for managing your schema.
See [the readme](https://github.com/sgrif/diesel/blob/v0.4.0/README.md#database-migrations)
for more information.
* Add the ability for diesel to maintain your schema for you automatically. See
the [migrations](http://sgrif.github.io/diesel/diesel/migrations/index.html)
module for individual methods.
* Add DebugQueryBuilder to build sql without requiring a connection.
* Add print_sql! and debug_sql! macros to print out and return sql strings from
QueryFragments.
### Fixed
* `#[changeset_for]` can now be used with structs containing a `Vec`. Fixes
[#63](https://github.com/sgrif/diesel/issues/63).
* No longer generate invalid SQL when an optional update field is not the first
field on a changeset. Fixes [#68](https://github.com/sgrif/diesel/issues/68).
* `#[changeset_for]` can now be used with structs containing only a single field
other than `id`. Fixes [#66](https://github.com/sgrif/diesel/issues/66).
* `infer_schema!` properly works with array columns. Fixes
[#65](https://github.com/sgrif/diesel/issues/65).
## [0.3.0] 2015-12-04
### Changed
* `#[changeset_for(table)]` now treats `Option` fields as an optional update.
Previously a field with `None` for the value would insert `NULL` into the
database field. It now does not update the field if the value is `None`.
* `.save_changes` (generated by `#[changeset_for]`) now returns a new struct,
rather than mutating `self`. The returned struct can be any type that
2016-01-15 19:29:27 +03:00
implements `Queryable` for the right SQL type
### Fixed
2016-01-15 19:29:27 +03:00
* `#[derive(Queryable)]` now allows generic parameters on the struct.
* Table definitions can now support up to 26 columns. Because this increases our
compile time by 3x, `features = ["large-tables"]` is needed to support table
definitions above 16 columns.
### Added
* Quickcheck is now an optional dependency. When `features = ["quickcheck"]` is
added to `Cargo.toml`, you'll gain `Arbitrary` implementations for everything
in `diesel::data_types`.
2015-12-02 18:33:36 +03:00
* Added support for the SQL `MIN` function.
* Added support for the `Numeric` data type. Since there is no Big Decimal type
in the standard library, a dumb struct has been provided which mirrors what
Postgres provides, which can be converted into whatever crate you are using.
* Timestamp columns can now be used with `std::time::SystemTime` when compiled
with `--features unstable`
2015-12-03 02:45:47 +03:00
* Implemented `Send` on `Connection` (required for R2D2 support)
* Added `infer_schema!` and `infer_table_from_schema!`. Both macros take a
database URL, and will invoke `table!` for you automatically based on the
schema. `infer_schema!` queries for the table names, while
`infer_table_from_schema!` takes a table name as the second argument.
## [0.2.0] - 2015-11-30
### Added
* Added an `execute` method to `QueryFragment`, which is intended to replace
`Connection#execute_returning_count`. The old method still exists for use
under the hood, but has been hidden from docs and is not considered public
API.
* Added `get_result` and `get_results`, which work similarly to `load` and
`first`, but are intended to make code read better when working with commands
like `create` and `update`. In the future, `get_result` may also check that
only a single row was affected.
* Added [`insert`][insert], which mirrors the pattern of `update` and `delete`.
### Changed
* Added a hidden `__Nonexhaustive` variant to `result::Error`. This is not
intended to be something you can exhaustively match on, but I do want people
to be able to check for specific cases, so `Box<std::error::Error>` is
not an option.
* `query_one`, `find`, and `first` now assume a single row is returned. For
cases where you actually expect 0 or 1 rows to be returned, the `optional`
method has been added to the result, in case having a `Result<Option<T>>` is
more ideomatic than checking for `Err(NotFound)`.
### Deprecated
* `Connection#insert` and `Connection#insert_returning_count` have been
deprecated in favor of [`insert`][insert]
[insert]: http://sgrif.github.io/diesel/diesel/query_builder/fn.insert.html
## [0.1.0] - 2015-11-29
* Initial release