@@ -5,13 +5,35 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8- ## 0.9.0-alpha.1 - 2025-10-14
8+ ## 0.9.0 - 2026-05-06
99
10- Accumulated changes since the beginning of the alpha cycle. Effectively a draft CHANGELOG for the 0.9.0 release.
10+ ### Important Announcements
1111
12- This section will be replaced in subsequent alpha releases. See the Git history of this file for previous alphas.
12+ #### New Github Organization
13+ Shortly after this release is published, the SQLx repository will be transferred to a new GitHub organization:
14+ https://github.com/transact-rs/
15+
16+ This is because SQLx has not been owned or maintained by LaunchBadge, LLC. for a few years now, and has since been
17+ informally transferred to the collective ownership of its principal authors. Moving the repository to a new
18+ organization makes this change more clear, and also allows for potentially inviting outside collaborators.
19+
20+ #### ` Cargo.lock ` Removed from Tracking
21+ The ` Cargo.lock ` has been removed from tracking in Git. CI should now always test with the latest versions of
22+ all dependencies by default, alongside our pass that checks with ` cargo generate-lockfile -Z minimal-versions ` .
23+
24+ This should eliminate the need for any PRs that update dependencies to also update ` Cargo.lock ` or
25+ contend with an endless stream of merge conflicts against it.
26+
27+ ** N.B.** ` cargo install --locked sqlx-cli ` will no longer work. However, ` cargo install sqlx-cli ` has _ always_
28+ used the latest dependencies by default, ignoring the lockfile, so most users should not be affected. For users
29+ requiring reproducible builds, consider maintaining your own lockfile instead; historically, we only ran ` cargo update `
30+ sporadically, so relying on SQLx's lockfile offered few guarantees anyway.
31+
32+ See [ the manual page for ` cargo install ` ] [ man-cargo-install ] for details.
1333
1434### Breaking
35+ As per our [ MSRV policy] ( FAQ.md#MSRV ) , the supported Rust version for this release cycle is [ ` 1.94.0 ` ] ( https://doc.rust-lang.org/stable/releases.html#version-1940-2026-03-05 ) .
36+
1537
1638* [[ #3383 ]] : feat: create ` sqlx.toml ` format [[ @abonander ]]
1739 * SQLx and ` sqlx-cli ` now support per-crate configuration files (` sqlx.toml ` )
@@ -104,9 +126,18 @@ This section will be replaced in subsequent alpha releases. See the Git history
104126* [[ #3957 ]] : refactor(sqlite): do not borrow bound values, delete lifetime on ` SqliteArguments ` [[ @iamjpotts ]]
105127* [[ #3958 ]] : refactor(any): Remove lifetime parameter from AnyArguments [[ @iamjpotts ]]
106128* [[ #3960 ]] : refactor(core): Remove lifetime parameter from Arguments trait [[ @iamjpotts ]]
129+ * [[ #3993 ]] : Unescape PostgreSQL passfile password [[ @V02460 ]]
130+ * Previously, ` .pgpass ` file handling did not process backslash-escapes in the password part.
131+ Now it does, which may change what password is sent to the server.
107132* [[ #4008 ]] : make ` #[derive(sqlx::Type)] ` automatically generate ` impl PgHasArrayType ` by default for newtype structs [[ @papaj-na-wrotkach ]]
108133 * Manual implementations of PgHasArrayType for newtypes will conflict with the generated one.
109134 Delete the manual impl or add ` #[sqlx(no_pg_array)] ` where conflicts occur.
135+ * [[ #4077 ]] : breaking: make ` offline ` optional to allow building without ` serde ` [[ @CathalMullan ]]
136+ * [[ #4094 ]] : Bump bit-vec to v0.8 [[ @zennozenith ]]
137+ * [[ #4142 ]] : feat(mysql): add mysql-rsa feature for non-TLS RSA auth [[ @dertin ]]
138+ * Connections requiring RSA password encryption now need to enable the ` mysql-rsa ` feature
139+ or an error will be generated at runtime. RSA encryption is only used for plaintext (non-TLS) connections.
140+ * [[ #4255 ]] : breaking(any+mysql): correctly convert text and blob types to ` AnyTypeInfo ` [[ @abonander ]]
110141
111142### Added
112143* [[ #3641 ]] : feat(Postgres): support nested domain types [[ @joeydewaal ]]
@@ -122,6 +153,14 @@ This section will be replaced in subsequent alpha releases. See the Git history
122153* [[ #3971 ]] : Allow single-field named structs to be transparent [[ @Xiretza ]]
123154* [[ #4015 ]] : feat(sqlite): ` no_tx ` migration support [[ @AlexTMjugador ]]
124155* [[ #4020 ]] : Add ` Migrator::with_migrations() ` constructor [[ @xb284524239 ]]
156+ * [[ #3846 ]] : Add the possibility to skip migrations [[ @Dosenpfand ]]
157+ * [[ #4107 ]] : Add SQLite extension entrypoint config to ` sqlx.toml ` , update SQLite extension example [[ @supleed2 ]]
158+ * [[ #4118 ]] : [ postgres] Display line number in error message [[ @mousetail ]]
159+ * [[ #4123 ]] : feat: add ` Json::into_inner() ` [[ @chrxn1c ]]
160+ * [[ #4153 ]] : Add on unimplemented diagnostic to ` SqlStr ` [[ @joeydewaal ]]
161+ * [[ #4167 ]] : add sqlite serialize/deserialize example [[ @mattrighetti ]]
162+ * [[ #4228 ]] : sqlx-postgres: Make ` PgNotification ` struct clone [[ @michaelvanstraten ]]
163+
125164
126165### Changed
127166* [[ #3525 ]] : Remove unnecessary boxfutures [[ @joeydewaal ]]
@@ -135,6 +174,24 @@ This section will be replaced in subsequent alpha releases. See the Git history
135174* [[ #3968 ]] : chore(ci): Add timeouts to ci jobs [[ @iamjpotts ]]
136175* [[ #4002 ]] : sqlx-postgres(tests): cleanup 2 unit tests. [[ @joeydewaal ]]
137176* [[ #4022 ]] : refactor: tweaks after #3791 [[ @abonander ]]
177+ * [[ #4257 ]] : Prefer to give real data to ` .bind() ` in ` README.md ` [[ @sobolevn ]]
178+ * [[ #4042 ]] : Update to webpki-roots 1 [[ @tottoto ]]
179+ * [[ #4072 ]] : chore: update hashlink to v0.11.0 [[ @anmolitor ]]
180+ * [[ #4143 ]] : Bump whoami to v2 [[ @tisonkun ]]
181+ * [[ #4161 ]] : sqlx-sqlite: relax libsqlite3-sys constraint to allow 0.36.x [[ @darioAnongba ]]
182+ * [[ #4173 ]] : ci: check direct minimal versions [[ @ricochet ]]
183+ * Note: reverted in 0.9.0 release but still listed for contributor credit. See end of PR thread for details.
184+ * [[ #4189 ]] : Bump flume to 0.12.0 [[ @opoplawski ]]
185+ * [[ #4223 ]] : test(sqlite): add regression test for ORDER BY + LIMIT nullability (#4147 ) [[ @barry3406 ]]
186+ * [[ #4230 ]] : chore: Update to cargo_metadata 0.23 [[ @tottoto ]]
187+ * [[ #4233 ]] : Change reference to dotenvy [[ @graemer957 ]]
188+ * [[ #4235 ]] : chore: Update to validator 0.20 [[ @tottoto ]]
189+ * [[ #4253 ]] : chore: update example to axum 0.8 [[ @tottoto ]]
190+ * Release PR:
191+ * Upgraded all Rust-Crypto crates, ` rand `
192+ * Upgraded ` etcetera ` to ` 0.11.0 `
193+ * Increased max of ` libsqlite3-sys ` version range to ` <0.38.0 `
194+
138195
139196### Fixed
140197* [[ #3840 ]] : Fix docs.rs build of sqlx-sqlite [[ @gferon ]]
@@ -169,10 +226,34 @@ This section will be replaced in subsequent alpha releases. See the Git history
169226* [[ #4053 ]] : fix(macros): smarter ` .env ` loading, caching, and invalidation [[ @abonander ]]
170227 * Additional credit to [[ @AlexTMjugador ]] ([[ #4018 ]] ) and [[ @Diggsey ]] ([[ #4039 ]] ) for their proposed solutions
171228 which served as a useful comparison.
229+ * [[ #4068 ]] : Fix typo in migration example from 'uesrs' to 'users' [[ @squidpickles ]]
230+ * [[ #4069 ]] : fix some spelling issues [[ @joeydewaal ]]
231+ * [[ #4086 ]] : fix(mysql): Work around for Issue #2206 (ColumnNotFound error when querying) [[ @duelafn ]]
232+ * [[ #4088 ]] : (Fix) Handle nullability of SQLite rowid alias columns [[ @Lege19 ]]
233+ * [[ #4100 ]] : postgres: update pgpass path on windows [[ @joeydewaal ]]
234+ * [[ #4134 ]] : fix CI: replace removed macOS runner, deprecated use of ` Command::cargo_bin() ` [[ @abonander ]]
235+ * [[ #4136 ]] : Ensure Deterministic Migration Order [[ @aoengin ]]
236+ * [[ #4158 ]] : Fix panic in JSONB decoder on invalid version byte [[ @jrey8343 ]]
237+ * [[ #4165 ]] : sqlx-postgres: fix correct operator precedence in byte length check [[ @cuiweixie ]]
238+ * [[ #4171 ]] : fix(postgres): remove home crate in favor of std::env::home_dir [[ @ricochet ]]
239+ * [[ #4172 ]] : fix(sqlx-cli): bump openssl minimum to 0.10.46 [[ @ricochet ]]
240+ * [[ #4176 ]] : fix(mysql): return error instead of panic on truncated OK packet [[ @cvzx ]]
241+ * [[ #4199 ]] : fix(postgres): make advisory lock cancel safe [[ @joeydewaal ]]
242+ * [[ #4201 ]] : Fix SCRAM password ` SASLprep ` [[ @var4yn ]]
243+ * [[ #4202 ]] : fix: replace from_utf8_unchecked with from_utf8_lossy in SqliteError [[ @joaquinhuigomez ]]
244+ * [[ #4203 ]] : fix: use sqlite3_value_text for REGEXP to match SQLite coercion [[ @joaquinhuigomez ]]
245+ * [[ #4219 ]] : sqlite: lossily coerce invalid UTF-8 in custom collation callback [[ @joaquinhuigomez ]]
246+ * [[ #4221 ]] : fix: replace ` from_utf8_unchecked ` with ` from_utf8 ` in SQLite column name handling [[ @barry3406 ]]
247+ * [[ #4226 ]] : fix(postgres): use non-prepared statements for metadata queries [[ @abonander ]]
248+ * [[ #4227 ]] : fix(macros-core): update unstable proc_macro APIs for recent nightly [[ @barry3406 ]]
249+ * [[ #4234 ]] : fix: Use correct path in error when failing to create tmp dir in prepare [[ @Miesvanderlippe ]]
250+ * [[ #4245 ]] : fix(mysql): repair caching_sha2_password fast-auth path [[ @altmannmarcelo ]]
251+ * [[ #4251 ]] : fix(tls): potential deadlock in ` StdSocket::poll_ready() ` [[ @abonander ]]
172252
173253[ seaorm-2600 ] : https://github.com/SeaQL/sea-orm/issues/2600
174254[ feature unification ] : https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
175255[ preferred-crates ] : examples/postgres/preferred-crates
256+ [ man-cargo-install ] : https://doc.rust-lang.org/cargo/commands/cargo-install.html#dealing-with-the-lockfile
176257
177258[ #3821 ] : https://github.com/launchbadge/sqlx/pull/3821
178259[ #3383 ] : https://github.com/launchbadge/sqlx/pull/3383
@@ -248,6 +329,53 @@ This section will be replaced in subsequent alpha releases. See the Git history
248329[ #4027 ] : https://github.com/launchbadge/sqlx/pull/4027
249330[ #4039 ] : https://github.com/launchbadge/sqlx/pull/4039
250331[ #4053 ] : https://github.com/launchbadge/sqlx/pull/4053
332+ [ #3846 ] : https://github.com/launchbadge/sqlx/pull/3846
333+ [ #3993 ] : https://github.com/launchbadge/sqlx/pull/3993
334+ [ #4042 ] : https://github.com/launchbadge/sqlx/pull/4042
335+ [ #4068 ] : https://github.com/launchbadge/sqlx/pull/4068
336+ [ #4069 ] : https://github.com/launchbadge/sqlx/pull/4069
337+ [ #4072 ] : https://github.com/launchbadge/sqlx/pull/4072
338+ [ #4077 ] : https://github.com/launchbadge/sqlx/pull/4077
339+ [ #4086 ] : https://github.com/launchbadge/sqlx/pull/4086
340+ [ #4088 ] : https://github.com/launchbadge/sqlx/pull/4088
341+ [ #4094 ] : https://github.com/launchbadge/sqlx/pull/4094
342+ [ #4100 ] : https://github.com/launchbadge/sqlx/pull/4100
343+ [ #4107 ] : https://github.com/launchbadge/sqlx/pull/4107
344+ [ #4118 ] : https://github.com/launchbadge/sqlx/pull/4118
345+ [ #4123 ] : https://github.com/launchbadge/sqlx/pull/4123
346+ [ #4134 ] : https://github.com/launchbadge/sqlx/pull/4134
347+ [ #4136 ] : https://github.com/launchbadge/sqlx/pull/4136
348+ [ #4142 ] : https://github.com/launchbadge/sqlx/pull/4142
349+ [ #4143 ] : https://github.com/launchbadge/sqlx/pull/4143
350+ [ #4153 ] : https://github.com/launchbadge/sqlx/pull/4153
351+ [ #4158 ] : https://github.com/launchbadge/sqlx/pull/4158
352+ [ #4161 ] : https://github.com/launchbadge/sqlx/pull/4161
353+ [ #4165 ] : https://github.com/launchbadge/sqlx/pull/4165
354+ [ #4167 ] : https://github.com/launchbadge/sqlx/pull/4167
355+ [ #4171 ] : https://github.com/launchbadge/sqlx/pull/4171
356+ [ #4172 ] : https://github.com/launchbadge/sqlx/pull/4172
357+ [ #4173 ] : https://github.com/launchbadge/sqlx/pull/4173
358+ [ #4176 ] : https://github.com/launchbadge/sqlx/pull/4176
359+ [ #4189 ] : https://github.com/launchbadge/sqlx/pull/4189
360+ [ #4199 ] : https://github.com/launchbadge/sqlx/pull/4199
361+ [ #4201 ] : https://github.com/launchbadge/sqlx/pull/4201
362+ [ #4202 ] : https://github.com/launchbadge/sqlx/pull/4202
363+ [ #4203 ] : https://github.com/launchbadge/sqlx/pull/4203
364+ [ #4219 ] : https://github.com/launchbadge/sqlx/pull/4219
365+ [ #4221 ] : https://github.com/launchbadge/sqlx/pull/4221
366+ [ #4223 ] : https://github.com/launchbadge/sqlx/pull/4223
367+ [ #4226 ] : https://github.com/launchbadge/sqlx/pull/4226
368+ [ #4227 ] : https://github.com/launchbadge/sqlx/pull/4227
369+ [ #4228 ] : https://github.com/launchbadge/sqlx/pull/4228
370+ [ #4230 ] : https://github.com/launchbadge/sqlx/pull/4230
371+ [ #4233 ] : https://github.com/launchbadge/sqlx/pull/4233
372+ [ #4234 ] : https://github.com/launchbadge/sqlx/pull/4234
373+ [ #4235 ] : https://github.com/launchbadge/sqlx/pull/4235
374+ [ #4245 ] : https://github.com/launchbadge/sqlx/pull/4245
375+ [ #4251 ] : https://github.com/launchbadge/sqlx/pull/4251
376+ [ #4253 ] : https://github.com/launchbadge/sqlx/pull/4253
377+ [ #4255 ] : https://github.com/launchbadge/sqlx/pull/4255
378+ [ #4257 ] : https://github.com/launchbadge/sqlx/pull/4257
251379
252380## 0.8.6 - 2025-05-19
253381
@@ -3175,3 +3303,27 @@ Fix docs.rs build by enabling a runtime feature in the docs.rs metadata in `Carg
31753303[@ xb284524239]: https: // github.com/xb284524239
31763304[@ Dosenpfand ]: https: // github.com/Dosenpfand
31773305[@ daviduebler]: https: // github.com/daviduebler
3306+ [@ squidpickles]: https: // github.com/squidpickles
3307+ [@ anmolitor]: https: // github.com/anmolitor
3308+ [@ CathalMullan ]: https: // github.com/CathalMullan
3309+ [@ duelafn]: https: // github.com/duelafn
3310+ [@ Lege19 ]: https: // github.com/Lege19
3311+ [@ zennozenith]: https: // github.com/zennozenith
3312+ [@ supleed2]: https: // github.com/supleed2
3313+ [@ mousetail]: https: // github.com/mousetail
3314+ [@ chrxn1c]: https: // github.com/chrxn1c
3315+ [@ aoengin]: https: // github.com/aoengin
3316+ [@ dertin]: https: // github.com/dertin
3317+ [@ jrey8343]: https: // github.com/jrey8343
3318+ [@ darioAnongba]: https: // github.com/darioAnongba
3319+ [@ cuiweixie]: https: // github.com/cuiweixie
3320+ [@ ricochet]: https: // github.com/ricochet
3321+ [@ opoplawski]: https: // github.com/opoplawski
3322+ [@ var4yn]: https: // github.com/var4yn
3323+ [@ joaquinhuigomez]: https: // github.com/joaquinhuigomez
3324+ [@ barry3406]: https: // github.com/barry3406
3325+ [@ michaelvanstraten]: https: // github.com/michaelvanstraten
3326+ [@ graemer957]: https: // github.com/graemer957
3327+ [@ Miesvanderlippe ]: https: // github.com/Miesvanderlippe
3328+ [@ altmannmarcelo]: https: // github.com/altmannmarcelo
3329+ [@ sobolevn]: https: // github.com/sobolevn
0 commit comments