* refactor(postgres): split describe into resolve and explain
* refactor(postgres): remove duplicated code from resolve and explain
* breaking: make `offline` optional to allow building without `serde`
* fix(macros): smarter `.env` loading, caching, and invalidation
* feat(mysql): test `.env` loading in CI
* feat(postgres): test `.env` loading in CI
* feat(macros): allow `DATABASE_URL` to be empty
* fix(examples/postgres): make `cargo-sqlx` executable
* fix(examples/postgres): `cargo sqlx` invocation
* feat(examples/postgres): check offline prepare on more examples
* fix(examples/postgres): the name of this step
* fix(cli): don't suppress error from `dotenv()`
* fix(ci/examples/postgres): don't use heredoc in this step
* fix(ci/examples/postgres): multi-tenant
* fix(ci/examples/sqlite): test `.env` loading
* chore: add CHANGELOG entry
* build TlsConnector in blocking threadpool
The openssl TlsConnector synchronously loads certificates from files.
Loading these files can block for tens of milliseconds.
* Update sqlx-core/src/net/tls/tls_native_tls.rs
---------
Co-authored-by: David Übler <david.uebler@puzzleyou.de>
Co-authored-by: Austin Bonander <austin.bonander@gmail.com>
* restore fallback to `async-io` for `connect_tcp()` when `runtime-tokio` feature is enabled
* `smol` and `async-global-executor` both use `async-task`, so `JoinHandle` impls can be consolidated
* no need for duplicate `yield_now()` impls
* delete `impl Socket for ()`
* sqlx-postgres(tests): fix positive_int domain type
* sqlx-postgres(tests): Update no pg array test
* sqlx-core: Remove conflicting Type impl for Box<JsonRawValue>
* Add support for `Box<JsonRawValue>` types.
This allows keeping structs that implement FromRow lifetime-free,
previously you had to use `&'a JsonRawValue`.
```rust
struct Foo {
bar: Box<JsonRawValue>,
}
```
* Add Encode impls for `JsonRawValue`.
Previously if the transaction was dropped while the transaction was being set up it was possible that the transaction was successfully opened but not closed. In common usage this would result in returning an open transaction to the connection pool which would have unexpected effects ranging from errors due to trying to nest transaction or serious bugs such as intended changes not occurring as they were unexpectedly inside a transaction that would never commit.
This resolves the issue by constructing the `Transaction` object (which activates the drop handler) before starting to open the transaction. In the worst case this could result in trying to `ROLLBACK` a transaction that was never started but this just results in a harmless error which is much better than leaving an unexpected open transaction active on the connection.
Fixes: https://github.com/launchbadge/sqlx/issues/3932
* fix race condition in pool close (#3217)
* fix deadlock in the postgres/listen example
* Only acquire as many permits as a child pool can offer
---------
Co-authored-by: Adam Cigánek <adam.ciganek@proton.me>