mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-10-02 07:21:08 +00:00
add a tbd section for 0.4.0 in the changelog
This commit is contained in:
parent
f2d55bc049
commit
e3d7e542c1
426
CHANGELOG.md
426
CHANGELOG.md
@ -5,33 +5,37 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## 0.4.0 - 2020-11-12
|
||||||
|
|
||||||
|
_to be written_
|
||||||
|
|
||||||
## 0.4.0-beta.1 - 2020-07-27
|
## 0.4.0-beta.1 - 2020-07-27
|
||||||
|
|
||||||
### Highlights
|
### Highlights
|
||||||
|
|
||||||
- Enable compile-time type checking from cached metadata to enable building
|
- Enable compile-time type checking from cached metadata to enable building
|
||||||
in an environment without access to a development database (e.g., Docker, CI).
|
in an environment without access to a development database (e.g., Docker, CI).
|
||||||
|
|
||||||
- Initial support for **Microsoft SQL Server**. If there is something missing that you need,
|
- Initial support for **Microsoft SQL Server**. If there is something missing that you need,
|
||||||
open an issue. We are happy to help.
|
open an issue. We are happy to help.
|
||||||
|
|
||||||
- SQL migrations, both with a CLI tool and programmatically loading migrations at runtime.
|
- SQL migrations, both with a CLI tool and programmatically loading migrations at runtime.
|
||||||
|
|
||||||
- Runtime-determined database driver, `Any`, to support compile-once and run with a database
|
- Runtime-determined database driver, `Any`, to support compile-once and run with a database
|
||||||
driver selected at runtime.
|
driver selected at runtime.
|
||||||
|
|
||||||
- Support for user-defined types and more generally overriding the inferred Rust type from SQL
|
- Support for user-defined types and more generally overriding the inferred Rust type from SQL
|
||||||
with compile-time SQL verification.
|
with compile-time SQL verification.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
#### MySQL
|
#### MySQL
|
||||||
|
|
||||||
- [[#418]] Support zero dates and times [[@blackwolf12333]]
|
- [[#418]] Support zero dates and times [[@blackwolf12333]]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#174]] Inroduce a builder to construct connections to bypass the URI parsing
|
- [[#174]] Inroduce a builder to construct connections to bypass the URI parsing
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// MSSQL
|
// MSSQL
|
||||||
@ -48,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
.connect().await?;
|
.connect().await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#127]] Get the last ID or Row ID inserted for MySQL or SQLite
|
- [[#127]] Get the last ID or Row ID inserted for MySQL or SQLite
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// MySQL
|
// MySQL
|
||||||
@ -62,7 +66,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
.last_insert_rowid(); // sqlite3_last_insert_rowid()
|
.last_insert_rowid(); // sqlite3_last_insert_rowid()
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#263]] Add hooks to the Pool: `after_connect`, `before_release`, and `after_acquire`
|
- [[#263]] Add hooks to the Pool: `after_connect`, `before_release`, and `after_acquire`
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// PostgreSQL
|
// PostgreSQL
|
||||||
@ -76,23 +80,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
.connect("postgres:// …").await?
|
.connect("postgres:// …").await?
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#308]] [[#495]] Extend `derive(FromRow)` with support for `#[sqlx(default)]` on fields to allow reading in a partial query [[@OriolMunoz]]
|
- [[#308]] [[#495]] Extend `derive(FromRow)` with support for `#[sqlx(default)]` on fields to allow reading in a partial query [[@OriolMunoz]]
|
||||||
|
|
||||||
- [[#454]] [[#456]] Support `rust_decimal::Decimal` as an alternative to `bigdecimal::BigDecimal` for `NUMERIC` columns in MySQL and PostgreSQL [[@pimeys]]
|
- [[#454]] [[#456]] Support `rust_decimal::Decimal` as an alternative to `bigdecimal::BigDecimal` for `NUMERIC` columns in MySQL and PostgreSQL [[@pimeys]]
|
||||||
|
|
||||||
- [[#181]] Column names and type information is now accessible from `Row` via `Row::columns()` or `Row::column(name)`
|
- [[#181]] Column names and type information is now accessible from `Row` via `Row::columns()` or `Row::column(name)`
|
||||||
|
|
||||||
#### PostgreSQL
|
#### PostgreSQL
|
||||||
|
|
||||||
- [[#197]] [[#271]] Add initial support for `INTERVAL` (full support pending a `time::Period` type) [[@dimtion]]
|
- [[#197]] [[#271]] Add initial support for `INTERVAL` (full support pending a `time::Period` type) [[@dimtion]]
|
||||||
|
|
||||||
#### MySQL
|
#### MySQL
|
||||||
|
|
||||||
- [[#449]] [[#450]] Support Unix Domain Sockets (UDS) for MySQL [[@pimeys]]
|
- [[#449]] [[#450]] Support Unix Domain Sockets (UDS) for MySQL [[@pimeys]]
|
||||||
|
|
||||||
#### SQLite
|
#### SQLite
|
||||||
|
|
||||||
- Types are now inferred for expressions. This means its now possible to use `query!` and `query_as!` for:
|
- Types are now inferred for expressions. This means its now possible to use `query!` and `query_as!` for:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let row = query!("SELECT 10 as _1, x + 5 as _2 FROM table").fetch_one(&mut conn).await?;
|
let row = query!("SELECT 10 as _1, x + 5 as _2 FROM table").fetch_one(&mut conn).await?;
|
||||||
@ -101,8 +105,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
assert_eq!(row._2, 5); // 5 + x?
|
assert_eq!(row._2, 5); // 5 + x?
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#167]] Support `foreign_keys` explicitly with a `foreign_keys(true)` method available on `SqliteConnectOptions` which is a builder
|
- [[#167]] Support `foreign_keys` explicitly with a `foreign_keys(true)` method available on `SqliteConnectOptions` which is a builder
|
||||||
for new SQLite connections (and can be passed into `PoolOptions` to build a pool).
|
for new SQLite connections (and can be passed into `PoolOptions` to build a pool).
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let conn = SqliteConnectOptions::new()
|
let conn = SqliteConnectOptions::new()
|
||||||
@ -110,7 +114,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
.connect().await?;
|
.connect().await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#430]] [[#438]] Add method to get the raw SQLite connection handle [[@agentsim]]
|
- [[#430]] [[#438]] Add method to get the raw SQLite connection handle [[@agentsim]]
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// conn is `SqliteConnection`
|
// conn is `SqliteConnection`
|
||||||
@ -118,17 +122,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
let ptr: *mut libsqlite3::sqlite3 = conn.as_raw_handle();
|
let ptr: *mut libsqlite3::sqlite3 = conn.as_raw_handle();
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#164]] Support `TIMESTAMP`, `DATETIME`, `DATE`, and `TIME` via `chrono` in SQLite [[@felipesere]] [[@meteficha]]
|
- [[#164]] Support `TIMESTAMP`, `DATETIME`, `DATE`, and `TIME` via `chrono` in SQLite [[@felipesere]] [[@meteficha]]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- `Transaction` now mutably borrows a connection instead of owning it. This enables a new (or nested) transaction to be started from `&mut conn`.
|
- `Transaction` now mutably borrows a connection instead of owning it. This enables a new (or nested) transaction to be started from `&mut conn`.
|
||||||
|
|
||||||
- [[#145]] [[#444]] Use a least-recently-used (LRU) cache to limit the growth of the prepared statement cache for SQLite, MySQL, and PostgreSQL [[@pimeys]]
|
- [[#145]] [[#444]] Use a least-recently-used (LRU) cache to limit the growth of the prepared statement cache for SQLite, MySQL, and PostgreSQL [[@pimeys]]
|
||||||
|
|
||||||
#### SQLite
|
#### SQLite
|
||||||
|
|
||||||
- [[#499]] `INTEGER` now resolves to `i64` instead of `i32`, `INT4` will still resolve to `i32`
|
- [[#499]] `INTEGER` now resolves to `i64` instead of `i32`, `INT4` will still resolve to `i32`
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
@ -146,7 +150,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
[#449]: https://github.com/launchbadge/sqlx/issues/449
|
[#449]: https://github.com/launchbadge/sqlx/issues/449
|
||||||
[#499]: https://github.com/launchbadge/sqlx/issues/499
|
[#499]: https://github.com/launchbadge/sqlx/issues/499
|
||||||
[#454]: https://github.com/launchbadge/sqlx/issues/454
|
[#454]: https://github.com/launchbadge/sqlx/issues/454
|
||||||
|
|
||||||
[#271]: https://github.com/launchbadge/sqlx/pull/271
|
[#271]: https://github.com/launchbadge/sqlx/pull/271
|
||||||
[#444]: https://github.com/launchbadge/sqlx/pull/444
|
[#444]: https://github.com/launchbadge/sqlx/pull/444
|
||||||
[#438]: https://github.com/launchbadge/sqlx/pull/438
|
[#438]: https://github.com/launchbadge/sqlx/pull/438
|
||||||
@ -157,27 +160,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#259]] Handle percent-encoded paths for SQLite [[@g-s-k]]
|
- [[#259]] Handle percent-encoded paths for SQLite [[@g-s-k]]
|
||||||
|
|
||||||
- [[#281]] Deallocate SQLite statements before closing the SQLite connection [[@hasali19]]
|
- [[#281]] Deallocate SQLite statements before closing the SQLite connection [[@hasali19]]
|
||||||
|
|
||||||
- [[#284]] Fix handling of `0` for `BigDecimal` in PostgreSQL and MySQL [[@abonander]]
|
- [[#284]] Fix handling of `0` for `BigDecimal` in PostgreSQL and MySQL [[@abonander]]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#256]] Add `query_unchecked!` and `query_file_unchecked!` with similar semantics to `query_as_unchecked!` [[@meh]]
|
- [[#256]] Add `query_unchecked!` and `query_file_unchecked!` with similar semantics to `query_as_unchecked!` [[@meh]]
|
||||||
|
|
||||||
- [[#252]] [[#297]] Derive serveral traits for the `Json<T>` wrapper type [[@meh]]
|
- [[#252]] [[#297]] Derive serveral traits for the `Json<T>` wrapper type [[@meh]]
|
||||||
|
|
||||||
- [[#261]] Add support for `#[sqlx(rename_all = "snake_case")]` to `#[derive(Type)]` [[@shssoichiro]]
|
- [[#261]] Add support for `#[sqlx(rename_all = "snake_case")]` to `#[derive(Type)]` [[@shssoichiro]]
|
||||||
|
|
||||||
- [[#253]] Add support for UNIX domain sockets to PostgreSQL [[@Nilix007]]
|
- [[#253]] Add support for UNIX domain sockets to PostgreSQL [[@Nilix007]]
|
||||||
|
|
||||||
- [[#251]] Add support for textual JSON on MySQL [[@blackwolf12333]]
|
- [[#251]] Add support for textual JSON on MySQL [[@blackwolf12333]]
|
||||||
|
|
||||||
- [[#275]] [[#268]] Optionally log formatted SQL queries on execution [[@shssoichiro]]
|
- [[#275]] [[#268]] Optionally log formatted SQL queries on execution [[@shssoichiro]]
|
||||||
|
|
||||||
- [[#267]] Support Cargo.toml relative `.env` files; allows for each crate in a workspace to use their own `.env` file and thus their own `DATABASE_URL` [[@xyzd]]
|
- [[#267]] Support Cargo.toml relative `.env` files; allows for each crate in a workspace to use their own `.env` file and thus their own `DATABASE_URL` [[@xyzd]]
|
||||||
|
|
||||||
[#252]: https://github.com/launchbadge/sqlx/pull/252
|
[#252]: https://github.com/launchbadge/sqlx/pull/252
|
||||||
[#261]: https://github.com/launchbadge/sqlx/pull/261
|
[#261]: https://github.com/launchbadge/sqlx/pull/261
|
||||||
@ -196,25 +199,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#241]] Type name for custom enum is not always attached to TypeInfo in PostgreSQL
|
- [[#241]] Type name for custom enum is not always attached to TypeInfo in PostgreSQL
|
||||||
|
|
||||||
- [[#237]] [[#238]] User-defined type name matching is now case-insensitive in PostgreSQL [[@qtbeee]]
|
- [[#237]] [[#238]] User-defined type name matching is now case-insensitive in PostgreSQL [[@qtbeee]]
|
||||||
|
|
||||||
- [[#231]] Handle empty queries (and those with comments) in SQLite
|
- [[#231]] Handle empty queries (and those with comments) in SQLite
|
||||||
|
|
||||||
- [[#228]] Provide `MapRow` implementations for functions (enables `.map(|row| ...)` over `.try_map(|row| ...)`)
|
- [[#228]] Provide `MapRow` implementations for functions (enables `.map(|row| ...)` over `.try_map(|row| ...)`)
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#234]] Add support for `NUMERIC` in MySQL with the `bigdecimal` crate [[@xiaopengli89]]
|
- [[#234]] Add support for `NUMERIC` in MySQL with the `bigdecimal` crate [[@xiaopengli89]]
|
||||||
|
|
||||||
- [[#227]] Support `#[sqlx(rename = "new_name")]` on struct fields within a `FromRow` derive [[@sidred]]
|
- [[#227]] Support `#[sqlx(rename = "new_name")]` on struct fields within a `FromRow` derive [[@sidred]]
|
||||||
|
|
||||||
[#228]: https://github.com/launchbadge/sqlx/issues/228
|
[#228]: https://github.com/launchbadge/sqlx/issues/228
|
||||||
[#231]: https://github.com/launchbadge/sqlx/issues/231
|
[#231]: https://github.com/launchbadge/sqlx/issues/231
|
||||||
[#237]: https://github.com/launchbadge/sqlx/issues/237
|
[#237]: https://github.com/launchbadge/sqlx/issues/237
|
||||||
[#241]: https://github.com/launchbadge/sqlx/issues/241
|
[#241]: https://github.com/launchbadge/sqlx/issues/241
|
||||||
|
|
||||||
[#227]: https://github.com/launchbadge/sqlx/pull/227
|
[#227]: https://github.com/launchbadge/sqlx/pull/227
|
||||||
[#234]: https://github.com/launchbadge/sqlx/pull/234
|
[#234]: https://github.com/launchbadge/sqlx/pull/234
|
||||||
[#238]: https://github.com/launchbadge/sqlx/pull/238
|
[#238]: https://github.com/launchbadge/sqlx/pull/238
|
||||||
@ -223,13 +225,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#214]] Handle percent-encoded usernames in a database URL [[@jamwaffles]]
|
- [[#214]] Handle percent-encoded usernames in a database URL [[@jamwaffles]]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- [[#216]] Mark `Cursor`, `Query`, `QueryAs`, `query::Map`, and `Transaction` as `#[must_use]` [[@Ace4896]]
|
- [[#216]] Mark `Cursor`, `Query`, `QueryAs`, `query::Map`, and `Transaction` as `#[must_use]` [[@Ace4896]]
|
||||||
|
|
||||||
- [[#213]] Remove matches dependency and use matches macro from std [[@nrjais]]
|
- [[#213]] Remove matches dependency and use matches macro from std [[@nrjais]]
|
||||||
|
|
||||||
[#216]: https://github.com/launchbadge/sqlx/pull/216
|
[#216]: https://github.com/launchbadge/sqlx/pull/216
|
||||||
[#214]: https://github.com/launchbadge/sqlx/pull/214
|
[#214]: https://github.com/launchbadge/sqlx/pull/214
|
||||||
@ -239,7 +241,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#212]] Removed sneaky `println!` in `MySqlCursor`
|
- [[#212]] Removed sneaky `println!` in `MySqlCursor`
|
||||||
|
|
||||||
[#212]: https://github.com/launchbadge/sqlx/issues/212
|
[#212]: https://github.com/launchbadge/sqlx/issues/212
|
||||||
|
|
||||||
@ -247,11 +249,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#203]] Allow an empty password for MySQL
|
- [[#203]] Allow an empty password for MySQL
|
||||||
|
|
||||||
- [[#204]] Regression in error reporting for invalid SQL statements on PostgreSQL
|
- [[#204]] Regression in error reporting for invalid SQL statements on PostgreSQL
|
||||||
|
|
||||||
- [[#200]] Fixes the incorrect handling of raw (`r#...`) fields of a struct in the `FromRow` derive [[@sidred]]
|
- [[#200]] Fixes the incorrect handling of raw (`r#...`) fields of a struct in the `FromRow` derive [[@sidred]]
|
||||||
|
|
||||||
[#200]: https://github.com/launchbadge/sqlx/pull/200
|
[#200]: https://github.com/launchbadge/sqlx/pull/200
|
||||||
[#203]: https://github.com/launchbadge/sqlx/issues/203
|
[#203]: https://github.com/launchbadge/sqlx/issues/203
|
||||||
@ -261,185 +263,184 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
|
||||||
- `sqlx::Row` now has a lifetime (`'c`) tied to the database connection. In effect, this means that you cannot store `Row`s or collect
|
- `sqlx::Row` now has a lifetime (`'c`) tied to the database connection. In effect, this means that you cannot store `Row`s or collect
|
||||||
them into a collection. `Query` (returned from `sqlx::query()`) has `map()` which takes a function to map from the `Row` to
|
them into a collection. `Query` (returned from `sqlx::query()`) has `map()` which takes a function to map from the `Row` to
|
||||||
another type to make this transition easier.
|
another type to make this transition easier.
|
||||||
|
|
||||||
In 0.2.x
|
In 0.2.x
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let rows = sqlx::query("SELECT 1")
|
let rows = sqlx::query("SELECT 1")
|
||||||
.fetch_all(&mut conn).await?;
|
.fetch_all(&mut conn).await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
In 0.3.x
|
In 0.3.x
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let values: Vec<i32> = sqlx::query("SELECT 1")
|
let values: Vec<i32> = sqlx::query("SELECT 1")
|
||||||
.map(|row: PgRow| row.get(0))
|
.map(|row: PgRow| row.get(0))
|
||||||
.fetch_all(&mut conn).await?;
|
.fetch_all(&mut conn).await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
To assist with the above, `sqlx::query_as()` now supports querying directly into tuples (up to 9 elements) or
|
To assist with the above, `sqlx::query_as()` now supports querying directly into tuples (up to 9 elements) or
|
||||||
struct types with a `#[derive(FromRow)]`.
|
struct types with a `#[derive(FromRow)]`.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// This extension trait is needed until a rust bug is fixed
|
// This extension trait is needed until a rust bug is fixed
|
||||||
use sqlx::postgres::PgQueryAs;
|
use sqlx::postgres::PgQueryAs;
|
||||||
|
|
||||||
let values: Vec<(i32, bool)> = sqlx::query_as("SELECT 1, false")
|
let values: Vec<(i32, bool)> = sqlx::query_as("SELECT 1, false")
|
||||||
.fetch_all(&mut conn).await?;
|
.fetch_all(&mut conn).await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
- `HasSqlType<T>: Database` is now `T: Type<Database>` to mirror `Encode` and `Decode`
|
- `HasSqlType<T>: Database` is now `T: Type<Database>` to mirror `Encode` and `Decode`
|
||||||
|
|
||||||
- `Query::fetch` (returned from `query()`) now returns a new `Cursor` type. `Cursor` is a Stream-like type where the
|
- `Query::fetch` (returned from `query()`) now returns a new `Cursor` type. `Cursor` is a Stream-like type where the
|
||||||
item type borrows into the stream (which itself borrows from connection). This means that using `query().fetch()` you can now
|
item type borrows into the stream (which itself borrows from connection). This means that using `query().fetch()` you can now
|
||||||
stream directly from the database with **zero-copy** and **zero-allocation**.
|
stream directly from the database with **zero-copy** and **zero-allocation**.
|
||||||
|
|
||||||
- Remove `PgTypeInfo::with_oid` and replace with `PgTypeInfo::with_name`
|
- Remove `PgTypeInfo::with_oid` and replace with `PgTypeInfo::with_name`
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Results from the database are now zero-copy and no allocation beyond a shared read buffer
|
- Results from the database are now zero-copy and no allocation beyond a shared read buffer
|
||||||
for the TCP stream ( in other words, almost no per-query allocation ). Bind arguments still
|
for the TCP stream ( in other words, almost no per-query allocation ). Bind arguments still
|
||||||
do allocate a buffer per query.
|
do allocate a buffer per query.
|
||||||
|
|
||||||
- [[#129]] Add support for [SQLite](https://sqlite.org/index.html). Generated code should be very close to normal use of the C API.
|
- [[#129]] Add support for [SQLite](https://sqlite.org/index.html). Generated code should be very close to normal use of the C API.
|
||||||
|
|
||||||
* Adds `Sqlite`, `SqliteConnection`, `SqlitePool`, and other supporting types
|
- Adds `Sqlite`, `SqliteConnection`, `SqlitePool`, and other supporting types
|
||||||
|
|
||||||
- [[#97]] [[#134]] Add support for user-defined types. [[@Freax13]]
|
- [[#97]] [[#134]] Add support for user-defined types. [[@Freax13]]
|
||||||
|
|
||||||
* Rust-only domain types or transparent wrappers around SQL types. These may be used _transparently_ inplace of
|
- Rust-only domain types or transparent wrappers around SQL types. These may be used _transparently_ inplace of
|
||||||
the SQL type.
|
the SQL type.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[derive(sqlx::Type)]
|
#[derive(sqlx::Type)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
struct Meters(i32);
|
struct Meters(i32);
|
||||||
```
|
```
|
||||||
|
|
||||||
* Enumerations may be defined in Rust and can match SQL by integer discriminant or variant name.
|
- Enumerations may be defined in Rust and can match SQL by integer discriminant or variant name.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[derive(sqlx::Type)]
|
#[derive(sqlx::Type)]
|
||||||
#[repr(i32)] // Expects a INT in SQL
|
#[repr(i32)] // Expects a INT in SQL
|
||||||
enum Color { Red = 1, Green = 2, Blue = 3 }
|
enum Color { Red = 1, Green = 2, Blue = 3 }
|
||||||
```
|
```
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[derive(sqlx::Type)]
|
#[derive(sqlx::Type)]
|
||||||
#[sqlx(rename = "TEXT")] // May also be the name of a user defined enum type
|
#[sqlx(rename = "TEXT")] // May also be the name of a user defined enum type
|
||||||
#[sqlx(rename_all = "lowercase")] // similar to serde rename_all
|
#[sqlx(rename_all = "lowercase")] // similar to serde rename_all
|
||||||
enum Color { Red, Green, Blue } // expects 'red', 'green', or 'blue'
|
enum Color { Red, Green, Blue } // expects 'red', 'green', or 'blue'
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Postgres** further supports user-defined composite types.
|
- **Postgres** further supports user-defined composite types.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[derive(sqlx::Type)]
|
#[derive(sqlx::Type)]
|
||||||
#[sqlx(rename = "interface_type")]
|
#[sqlx(rename = "interface_type")]
|
||||||
struct InterfaceType {
|
struct InterfaceType {
|
||||||
name: String,
|
name: String,
|
||||||
supplier_id: i32,
|
supplier_id: i32,
|
||||||
price: f64
|
price: f64
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- [[#98]] [[#131]] Add support for asynchronous notifications in Postgres (`LISTEN` / `NOTIFY`). [[@thedodd]]
|
- [[#98]] [[#131]] Add support for asynchronous notifications in Postgres (`LISTEN` / `NOTIFY`). [[@thedodd]]
|
||||||
|
|
||||||
* Supports automatic reconnection on connection failure.
|
- Supports automatic reconnection on connection failure.
|
||||||
|
|
||||||
* `PgListener` implements `Executor` and may be used to execute queries. Be careful however as if the
|
- `PgListener` implements `Executor` and may be used to execute queries. Be careful however as if the
|
||||||
intent is to handle and process messages rapidly you don't want to be tying up the connection
|
intent is to handle and process messages rapidly you don't want to be tying up the connection
|
||||||
for too long. Messages received during queries are buffered and will be delivered on the next call
|
for too long. Messages received during queries are buffered and will be delivered on the next call
|
||||||
to `recv()`.
|
to `recv()`.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let mut listener = PgListener::new(DATABASE_URL).await?;
|
let mut listener = PgListener::new(DATABASE_URL).await?;
|
||||||
|
|
||||||
listener.listen("topic").await?;
|
listener.listen("topic").await?;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let message = listener.recv().await?;
|
let message = listener.recv().await?;
|
||||||
|
|
||||||
println!("payload = {}", message.payload);
|
println!("payload = {}", message.payload);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- Add _unchecked_ variants of the query macros. These will still verify the SQL for syntactic and
|
- Add _unchecked_ variants of the query macros. These will still verify the SQL for syntactic and
|
||||||
semantic correctness with the current database but they will not check the input or output types.
|
semantic correctness with the current database but they will not check the input or output types.
|
||||||
|
|
||||||
This is intended as a temporary solution until `query_as!` is able to support user defined types.
|
This is intended as a temporary solution until `query_as!` is able to support user defined types.
|
||||||
|
|
||||||
* `query_as_unchecked!`
|
- `query_as_unchecked!`
|
||||||
* `query_file_as_unchecked!`
|
- `query_file_as_unchecked!`
|
||||||
|
|
||||||
- Add support for many more types in Postgres
|
- Add support for many more types in Postgres
|
||||||
|
|
||||||
- `JSON`, `JSONB` [[@oeb25]]
|
- `JSON`, `JSONB` [[@oeb25]]
|
||||||
- `INET`, `CIDR` [[@PoiScript]]
|
- `INET`, `CIDR` [[@PoiScript]]
|
||||||
- Arrays [[@oeb25]]
|
- Arrays [[@oeb25]]
|
||||||
- Composites ( Rust tuples or structs with a `#[derive(Type)]` )
|
- Composites ( Rust tuples or structs with a `#[derive(Type)]` )
|
||||||
- `NUMERIC` [[@abonander]]
|
- `NUMERIC` [[@abonander]]
|
||||||
- `OID` (`u32`)
|
- `OID` (`u32`)
|
||||||
- `"CHAR"` (`i8`)
|
- `"CHAR"` (`i8`)
|
||||||
- `TIMESTAMP`, `TIMESTAMPTZ`, etc. with the `time` crate [[@utter-step]]
|
- `TIMESTAMP`, `TIMESTAMPTZ`, etc. with the `time` crate [[@utter-step]]
|
||||||
- Enumerations ( Rust enums with a `#[derive(Type)]` ) [[@Freax13]]
|
- Enumerations ( Rust enums with a `#[derive(Type)]` ) [[@Freax13]]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- `Query` (and `QueryAs`; returned from `query()`, `query_as()`, `query!()`, and `query_as!()`) now will accept both `&mut Connection` or
|
- `Query` (and `QueryAs`; returned from `query()`, `query_as()`, `query!()`, and `query_as!()`) now will accept both `&mut Connection` or
|
||||||
`&Pool` where as in 0.2.x they required `&mut &Pool`.
|
`&Pool` where as in 0.2.x they required `&mut &Pool`.
|
||||||
|
|
||||||
- `Executor` now takes any value that implements `Execute` as a query. `Execute` is implemented for `Query` and `QueryAs` to mean
|
- `Executor` now takes any value that implements `Execute` as a query. `Execute` is implemented for `Query` and `QueryAs` to mean
|
||||||
exactly what they've meant so far, a prepared SQL query. However, `Execute` is also implemented for just `&str` which now performs
|
exactly what they've meant so far, a prepared SQL query. However, `Execute` is also implemented for just `&str` which now performs
|
||||||
a raw or unprepared SQL query. You can further use this to fetch `Row`s from the database though it is not as efficient as the
|
a raw or unprepared SQL query. You can further use this to fetch `Row`s from the database though it is not as efficient as the
|
||||||
prepared API (notably Postgres and MySQL send data back in TEXT mode as opposed to in BINARY mode).
|
prepared API (notably Postgres and MySQL send data back in TEXT mode as opposed to in BINARY mode).
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use sqlx::Executor;
|
use sqlx::Executor;
|
||||||
|
|
||||||
// Set the time zone parameter
|
// Set the time zone parameter
|
||||||
conn.execute("SET TIME ZONE LOCAL;").await
|
conn.execute("SET TIME ZONE LOCAL;").await
|
||||||
|
|
||||||
// Demonstrate two queries at once with the raw API
|
// Demonstrate two queries at once with the raw API
|
||||||
let mut cursor = conn.fetch("SELECT 1; SELECT 2");
|
let mut cursor = conn.fetch("SELECT 1; SELECT 2");
|
||||||
let row = cursor.next().await?.unwrap();
|
let row = cursor.next().await?.unwrap();
|
||||||
let value: i32 = row.get(0); // 1
|
let value: i32 = row.get(0); // 1
|
||||||
let row = cursor.next().await?.unwrap();
|
let row = cursor.next().await?.unwrap();
|
||||||
let value: i32 = row.get(0); // 2
|
let value: i32 = row.get(0); // 2
|
||||||
```
|
```
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- `Query` (returned from `query()`) no longer has `fetch_one`, `fetch_optional`, or `fetch_all`. You _must_ map the row using `map()` and then
|
- `Query` (returned from `query()`) no longer has `fetch_one`, `fetch_optional`, or `fetch_all`. You _must_ map the row using `map()` and then
|
||||||
you will have a `query::Map` value that has the former methods available.
|
you will have a `query::Map` value that has the former methods available.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let values: Vec<i32> = sqlx::query("SELECT 1")
|
let values: Vec<i32> = sqlx::query("SELECT 1")
|
||||||
.map(|row: PgRow| row.get(0))
|
.map(|row: PgRow| row.get(0))
|
||||||
.fetch_all(&mut conn).await?;
|
.fetch_all(&mut conn).await?;
|
||||||
```
|
```
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#62]] [[#130]] [[#135]] Remove explicit set of `IntervalStyle`. Allow usage of SQLx for CockroachDB and potentially PgBouncer. [[@bmisiak]]
|
- [[#62]] [[#130]] [[#135]] Remove explicit set of `IntervalStyle`. Allow usage of SQLx for CockroachDB and potentially PgBouncer. [[@bmisiak]]
|
||||||
|
|
||||||
- [[#108]] Allow nullable and borrowed values to be used as arguments in `query!` and `query_as!`. For example, where the column would
|
- [[#108]] Allow nullable and borrowed values to be used as arguments in `query!` and `query_as!`. For example, where the column would
|
||||||
resolve to `String` in Rust (TEXT, VARCHAR, etc.), you may now use `Option<String>`, `Option<&str>`, or `&str` instead. [[@abonander]]
|
resolve to `String` in Rust (TEXT, VARCHAR, etc.), you may now use `Option<String>`, `Option<&str>`, or `&str` instead. [[@abonander]]
|
||||||
|
|
||||||
- [[#108]] Make unknown type errors far more informative. As an example, trying to `SELECT` a `DATE` column will now try and tell you about the
|
- [[#108]] Make unknown type errors far more informative. As an example, trying to `SELECT` a `DATE` column will now try and tell you about the
|
||||||
`chrono` feature. [[@abonander]]
|
`chrono` feature. [[@abonander]]
|
||||||
|
|
||||||
```
|
```
|
||||||
optional feature `chrono` required for type DATE of column #1 ("now")
|
optional feature `chrono` required for type DATE of column #1 ("now")
|
||||||
```
|
```
|
||||||
|
|
||||||
[#62]: https://github.com/launchbadge/sqlx/issues/62
|
[#62]: https://github.com/launchbadge/sqlx/issues/62
|
||||||
[#130]: https://github.com/launchbadge/sqlx/issues/130
|
[#130]: https://github.com/launchbadge/sqlx/issues/130
|
||||||
|
|
||||||
[#98]: https://github.com/launchbadge/sqlx/pull/98
|
[#98]: https://github.com/launchbadge/sqlx/pull/98
|
||||||
[#97]: https://github.com/launchbadge/sqlx/pull/97
|
[#97]: https://github.com/launchbadge/sqlx/pull/97
|
||||||
[#134]: https://github.com/launchbadge/sqlx/pull/134
|
[#134]: https://github.com/launchbadge/sqlx/pull/134
|
||||||
@ -452,20 +453,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#114]] Export `sqlx_core::Transaction` [[@thedodd]]
|
- [[#114]] Export `sqlx_core::Transaction` [[@thedodd]]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#125]] [[#126]] Fix statement execution in MySQL if it contains NULL statement values [[@repnop]]
|
- [[#125]] [[#126]] Fix statement execution in MySQL if it contains NULL statement values [[@repnop]]
|
||||||
|
|
||||||
- [[#105]] [[#109]] Allow trailing commas in query macros [[@timmythetiny]]
|
- [[#105]] [[#109]] Allow trailing commas in query macros [[@timmythetiny]]
|
||||||
|
|
||||||
[#105]: https://github.com/launchbadge/sqlx/pull/105
|
[#105]: https://github.com/launchbadge/sqlx/pull/105
|
||||||
[#109]: https://github.com/launchbadge/sqlx/pull/109
|
[#109]: https://github.com/launchbadge/sqlx/pull/109
|
||||||
[#114]: https://github.com/launchbadge/sqlx/pull/114
|
[#114]: https://github.com/launchbadge/sqlx/pull/114
|
||||||
[#125]: https://github.com/launchbadge/sqlx/pull/125
|
[#125]: https://github.com/launchbadge/sqlx/pull/125
|
||||||
[#126]: https://github.com/launchbadge/sqlx/pull/126
|
[#126]: https://github.com/launchbadge/sqlx/pull/126
|
||||||
|
|
||||||
[@timmythetiny]: https://github.com/timmythetiny
|
[@timmythetiny]: https://github.com/timmythetiny
|
||||||
[@thedodd]: https://github.com/thedodd
|
[@thedodd]: https://github.com/thedodd
|
||||||
|
|
||||||
@ -473,16 +473,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix decoding of Rows containing NULLs in Postgres [#104]
|
- Fix decoding of Rows containing NULLs in Postgres [#104]
|
||||||
|
|
||||||
- After a large review and some battle testing by [@ianthetechie](https://github.com/ianthetechie)
|
- After a large review and some battle testing by [@ianthetechie](https://github.com/ianthetechie)
|
||||||
of the `Pool`, a live leaking issue was found. This has now been fixed by [@abonander] in [#84] which
|
of the `Pool`, a live leaking issue was found. This has now been fixed by [@abonander] in [#84] which
|
||||||
included refactoring to make the pool internals less brittle (using RAII instead of manual
|
included refactoring to make the pool internals less brittle (using RAII instead of manual
|
||||||
work is one example) and to help any future contributors when changing the pool internals.
|
work is one example) and to help any future contributors when changing the pool internals.
|
||||||
|
|
||||||
- Passwords are now being precent decoding before being presented to the server [[@repnop]]
|
- Passwords are now being precent decoding before being presented to the server [[@repnop]]
|
||||||
|
|
||||||
- [@100] Fix `FLOAT` and `DOUBLE` decoding in MySQL
|
- [@100] Fix `FLOAT` and `DOUBLE` decoding in MySQL
|
||||||
|
|
||||||
[#84]: https://github.com/launchbadge/sqlx/issues/84
|
[#84]: https://github.com/launchbadge/sqlx/issues/84
|
||||||
[#100]: https://github.com/launchbadge/sqlx/issues/100
|
[#100]: https://github.com/launchbadge/sqlx/issues/100
|
||||||
@ -490,13 +490,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#72]] Add `PgTypeInfo::with_oid` to allow simple construction of `PgTypeInfo` which enables `HasSqlType`
|
- [[#72]] Add `PgTypeInfo::with_oid` to allow simple construction of `PgTypeInfo` which enables `HasSqlType`
|
||||||
to be implemented by downstream consumers of SQLx [[@jplatte]]
|
to be implemented by downstream consumers of SQLx [[@jplatte]]
|
||||||
|
|
||||||
- [[#96]] Add support for returning columns from `query!` with a name of a rust keyword by
|
- [[#96]] Add support for returning columns from `query!` with a name of a rust keyword by
|
||||||
using raw identifiers [[@yaahc]]
|
using raw identifiers [[@yaahc]]
|
||||||
|
|
||||||
- [[#71]] Implement derives for `Encode` and `Decode`. This is the first step to supporting custom types in SQLx. [[@Freax13]]
|
- [[#71]] Implement derives for `Encode` and `Decode`. This is the first step to supporting custom types in SQLx. [[@Freax13]]
|
||||||
|
|
||||||
[#72]: https://github.com/launchbadge/sqlx/issues/72
|
[#72]: https://github.com/launchbadge/sqlx/issues/72
|
||||||
[#96]: https://github.com/launchbadge/sqlx/issues/96
|
[#96]: https://github.com/launchbadge/sqlx/issues/96
|
||||||
@ -506,27 +506,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix decoding of Rows containing NULLs in MySQL (and add an integration test so this doesn't break again)
|
- Fix decoding of Rows containing NULLs in MySQL (and add an integration test so this doesn't break again)
|
||||||
|
|
||||||
## 0.2.3 - 2020-01-18
|
## 0.2.3 - 2020-01-18
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix `query!` when used on a query that does not return results
|
- Fix `query!` when used on a query that does not return results
|
||||||
|
|
||||||
## 0.2.2 - 2020-01-16
|
## 0.2.2 - 2020-01-16
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [[#57]] Add support for unsigned integers and binary types in `query!` for MySQL [[@mehcode]]
|
- [[#57]] Add support for unsigned integers and binary types in `query!` for MySQL [[@mehcode]]
|
||||||
|
|
||||||
[#57]: https://github.com/launchbadge/sqlx/issues/57
|
[#57]: https://github.com/launchbadge/sqlx/issues/57
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix stall when requesting TLS from a Postgres server that explicitly does not support TLS (such as postgres running inside docker) [[@abonander]]
|
- Fix stall when requesting TLS from a Postgres server that explicitly does not support TLS (such as postgres running inside docker) [[@abonander]]
|
||||||
|
|
||||||
- [[#66]] Declare used features for `tokio` in `sqlx-macros` explicitly
|
- [[#66]] Declare used features for `tokio` in `sqlx-macros` explicitly
|
||||||
|
|
||||||
[#66]: https://github.com/launchbadge/sqlx/issues/66
|
[#66]: https://github.com/launchbadge/sqlx/issues/66
|
||||||
|
|
||||||
@ -534,12 +534,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- [[#64], [#65]] Fix decoding of Rows containing NULLs in MySQL [[@danielakhterov]]
|
- [[#64], [#65]] Fix decoding of Rows containing NULLs in MySQL [[@danielakhterov]]
|
||||||
|
|
||||||
[#64]: https://github.com/launchbadge/sqlx/pull/64
|
[#64]: https://github.com/launchbadge/sqlx/pull/64
|
||||||
[#65]: https://github.com/launchbadge/sqlx/pull/65
|
[#65]: https://github.com/launchbadge/sqlx/pull/65
|
||||||
|
|
||||||
- [[#55]] Use a shared tokio runtime for the `query!` macro compile-time execution (under the `runtime-tokio` feature) [[@udoprog]]
|
- [[#55]] Use a shared tokio runtime for the `query!` macro compile-time execution (under the `runtime-tokio` feature) [[@udoprog]]
|
||||||
|
|
||||||
[#55]: https://github.com/launchbadge/sqlx/pull/55
|
[#55]: https://github.com/launchbadge/sqlx/pull/55
|
||||||
|
|
||||||
@ -547,47 +547,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- https://github.com/launchbadge/sqlx/issues/47
|
- https://github.com/launchbadge/sqlx/issues/47
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Support Tokio through an optional `runtime-tokio` feature.
|
- Support Tokio through an optional `runtime-tokio` feature.
|
||||||
|
|
||||||
- Support SQL transactions. You may now use the `begin()` function on `Pool` or `Connection` to
|
- Support SQL transactions. You may now use the `begin()` function on `Pool` or `Connection` to
|
||||||
start a new SQL transaction. This returns `sqlx::Transaction` which will `ROLLBACK` on `Drop`
|
start a new SQL transaction. This returns `sqlx::Transaction` which will `ROLLBACK` on `Drop`
|
||||||
or can be explicitly `COMMIT` using `commit()`.
|
or can be explicitly `COMMIT` using `commit()`.
|
||||||
|
|
||||||
- Support TLS connections.
|
- Support TLS connections.
|
||||||
|
|
||||||
## 0.1.4 - 2020-01-11
|
## 0.1.4 - 2020-01-11
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- https://github.com/launchbadge/sqlx/issues/43
|
- https://github.com/launchbadge/sqlx/issues/43
|
||||||
|
|
||||||
- https://github.com/launchbadge/sqlx/issues/40
|
- https://github.com/launchbadge/sqlx/issues/40
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Support for `SCRAM-SHA-256` authentication in Postgres [#37](https://github.com/launchbadge/sqlx/pull/37) [@danielakhterov](https://github.com/danielakhterov)
|
- Support for `SCRAM-SHA-256` authentication in Postgres [#37](https://github.com/launchbadge/sqlx/pull/37) [@danielakhterov](https://github.com/danielakhterov)
|
||||||
|
|
||||||
- Implement `Debug` for Pool [#42](https://github.com/launchbadge/sqlx/pull/42) [@prettynatty](https://github.com/prettynatty)
|
- Implement `Debug` for Pool [#42](https://github.com/launchbadge/sqlx/pull/42) [@prettynatty](https://github.com/prettynatty)
|
||||||
|
|
||||||
## 0.1.3 - 2020-01-06
|
## 0.1.3 - 2020-01-06
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- https://github.com/launchbadge/sqlx/issues/30
|
- https://github.com/launchbadge/sqlx/issues/30
|
||||||
|
|
||||||
## 0.1.2 - 2020-01-03
|
## 0.1.2 - 2020-01-03
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Support for Authentication in MySQL 5+ including the newer authentication schemes now default in MySQL 8: `mysql_native_password`, `sha256_password`, and `caching_sha2_password`.
|
- Support for Authentication in MySQL 5+ including the newer authentication schemes now default in MySQL 8: `mysql_native_password`, `sha256_password`, and `caching_sha2_password`.
|
||||||
|
|
||||||
- [`Chrono`](https://github.com/chronotope/chrono) support for MySQL was only partially implemented (was missing `NaiveTime` and `DateTime<Utc>`).
|
- [`Chrono`](https://github.com/chronotope/chrono) support for MySQL was only partially implemented (was missing `NaiveTime` and `DateTime<Utc>`).
|
||||||
|
|
||||||
- `Vec<u8>` (and `[u8]`) support for MySQL (`BLOB`) and Postgres (`BYTEA`).
|
- `Vec<u8>` (and `[u8]`) support for MySQL (`BLOB`) and Postgres (`BYTEA`).
|
||||||
|
|
||||||
[@abonander]: https://github.com/abonander
|
[@abonander]: https://github.com/abonander
|
||||||
[@danielakhterov]: https://github.com/danielakhterov
|
[@danielakhterov]: https://github.com/danielakhterov
|
||||||
@ -595,26 +595,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
[@udoprog]: https://github.com/udoprog
|
[@udoprog]: https://github.com/udoprog
|
||||||
[@jplatte]: https://github.com/jplatte
|
[@jplatte]: https://github.com/jplatte
|
||||||
[@yaahc]: https://github.com/yaahc
|
[@yaahc]: https://github.com/yaahc
|
||||||
[@Freax13]: https://github.com/Freax13
|
[@freax13]: https://github.com/Freax13
|
||||||
[@repnop]: https://github.com/repnop
|
[@repnop]: https://github.com/repnop
|
||||||
[@bmisiak]: https://github.com/bmisiak
|
[@bmisiak]: https://github.com/bmisiak
|
||||||
[@oeb25]: https://github.com/oeb25
|
[@oeb25]: https://github.com/oeb25
|
||||||
[@PoiScript]: https://github.com/PoiScript
|
[@poiscript]: https://github.com/PoiScript
|
||||||
[@utter-step]: https://github.com/utter-step
|
[@utter-step]: https://github.com/utter-step
|
||||||
[@sidred]: https://github.com/sidred
|
[@sidred]: https://github.com/sidred
|
||||||
[@Ace4896]: https://github.com/Ace4896
|
[@ace4896]: https://github.com/Ace4896
|
||||||
[@jamwaffles]: https://github.com/jamwaffles
|
[@jamwaffles]: https://github.com/jamwaffles
|
||||||
[@nrjais]: https://github.com/nrjais
|
[@nrjais]: https://github.com/nrjais
|
||||||
[@qtbeee]: https://github.com/qtbeee
|
[@qtbeee]: https://github.com/qtbeee
|
||||||
[@xiaopengli89]: https://github.com/xiaopengli89
|
[@xiaopengli89]: https://github.com/xiaopengli89
|
||||||
[@meh]: https://github.com/meh
|
[@meh]: https://github.com/meh
|
||||||
[@shssoichiro]: https://github.com/shssoichiro
|
[@shssoichiro]: https://github.com/shssoichiro
|
||||||
[@Nilix007]: https://github.com/Nilix007
|
[@nilix007]: https://github.com/Nilix007
|
||||||
[@g-s-k]: https://github.com/g-s-k
|
[@g-s-k]: https://github.com/g-s-k
|
||||||
[@blackwolf12333]: https://github.com/blackwolf12333
|
[@blackwolf12333]: https://github.com/blackwolf12333
|
||||||
[@xyzd]: https://github.com/xyzd
|
[@xyzd]: https://github.com/xyzd
|
||||||
[@hasali19]: https://github.com/hasali19
|
[@hasali19]: https://github.com/hasali19
|
||||||
[@OriolMunoz]: https://github.com/OriolMunoz
|
[@oriolmunoz]: https://github.com/OriolMunoz
|
||||||
[@pimeys]: https://github.com/pimeys
|
[@pimeys]: https://github.com/pimeys
|
||||||
[@agentsim]: https://github.com/agentsim
|
[@agentsim]: https://github.com/agentsim
|
||||||
[@meteficha]: https://github.com/meteficha
|
[@meteficha]: https://github.com/meteficha
|
||||||
|
Loading…
x
Reference in New Issue
Block a user