132 lines
4.7 KiB
Markdown
132 lines
4.7 KiB
Markdown
## Release Notes: sea-query 1.0.0
|
|
|
|
*(final release after the 1.0.0 release candidate series)*
|
|
|
|
### Highlights
|
|
|
|
* Published the stable `sea-query 1.0.0` release.
|
|
* Published `sea-query-derive 1.0.0`.
|
|
* Promoted the binder crates to final non-rc versions:
|
|
* `sea-query-rusqlite 0.8.0`
|
|
* `sea-query-postgres 0.6.0`
|
|
* `sea-query-diesel 0.3.0`
|
|
* `sea-query-rbatis 0.2.0`
|
|
* Updated installation snippets from rc versions to the stable `1.0` dependency line.
|
|
* Dated and finalized the 1.0 changelog after the rc.34 release.
|
|
|
|
### Release Candidate Notes
|
|
|
|
The 1.0.0 final release includes the full release candidate series:
|
|
|
|
* [1.0.0-rc.34](1.0.0-rc.34.md) - Table partitioning, Jiff binder support, `JSON_TABLE` refactor
|
|
* [1.0.0-rc.33](1.0.0-rc.33.md) - `Value::Enum`, Postgres advisory locks, `SelectExprTrait`
|
|
* [1.0.0-rc.32](1.0.0-rc.32.md) - `EXPLAIN`, `FILTER` on aggregates, `ALTER TABLE DROP CONSTRAINT`
|
|
* [1.0.0-rc.31](1.0.0-rc.31.md) - `SELECT INTO`, `eq_any`/`ne_all`, `Value::array_type`
|
|
* [1.0.0-rc.30](1.0.0-rc.30.md) - Tokenizer comment parsing, dependency reductions
|
|
* [1.0.0-rc.29](1.0.0-rc.29.md) - Legacy `serial` option for Postgres
|
|
* [1.0.0-rc.28](1.0.0-rc.28.md) - Restore Value system
|
|
* [1.0.0-rc.27](1.0.0-rc.27.md) - Revert `impl Iden for String`
|
|
* [1.0.0-rc.26](1.0.0-rc.26.md) - `From<Vec<Value>> for Array`, `FromIterator<T> for Array`
|
|
* [1.0.0-rc.24](1.0.0-rc.24.md) - Array API redesign
|
|
* [1.0.0-rc.23](1.0.0-rc.23.md) - `Value::Enum`, `ON CONFLICT ON CONSTRAINT`, CTE `VALUES` clause
|
|
* [1.0.0-rc.22](1.0.0-rc.22.md) - Index operator class, `DROP COLUMN IF EXISTS`, nullable values
|
|
* [1.0.0-rc.20](1.0.0-rc.20.md) - `ValueTupleIter`, SQLite decimal fix
|
|
|
|
### Major Breaking Changes
|
|
|
|
* Unified `Expr` and `SimpleExpr`.
|
|
|
|
`SimpleExpr` is now an alias of `Expr`, so redundant `.into()` calls may need to be removed.
|
|
|
|
* Reworked the identifier type system.
|
|
|
|
`DynIden` now eagerly stores rendered identifier text as a `Cow<'static, str>`, and `SeaRc` is no longer an `Rc` / `Arc` alias.
|
|
|
|
* Reworked `TableRef` and `ColumnRef`.
|
|
|
|
The older many-variant representation was collapsed into structured `TableName`, `SchemaName`, `DatabaseName`, and `ColumnName` forms.
|
|
|
|
* Replaced Postgres `serial` defaults with identity columns.
|
|
|
|
Postgres now uses `GENERATED BY DEFAULT AS IDENTITY` by default. Enable `option-postgres-use-serial` to restore the legacy `serial` behavior.
|
|
|
|
* Updated PostgreSQL unsigned integer column mappings.
|
|
|
|
PostgreSQL does not have unsigned integer types. SeaQuery now maps `SmallUnsigned` to `integer` and `Unsigned` to `bigint` to avoid overflow-prone mappings.
|
|
|
|
* Removed `jiff::Zoned` from the `with-jiff` value API.
|
|
|
|
Supported Jiff values are `jiff::civil::Date`, `jiff::civil::Time`, `jiff::civil::DateTime`, and `jiff::Timestamp`.
|
|
|
|
### New Features
|
|
|
|
* Added `EXPLAIN` statement support.
|
|
* Added PostgreSQL and MySQL `CREATE TABLE` partitioning support.
|
|
* Added `Value::Enum`.
|
|
* Added Postgres advisory lock functions.
|
|
* Added aggregate `FILTER` support.
|
|
* Added `ALTER TABLE DROP CONSTRAINT`.
|
|
* Added `SELECT INTO`.
|
|
* Added `eq_any` and `ne_all`.
|
|
* Added `Value::array_type`.
|
|
* Added `Expr::not_exists`.
|
|
* Added `serde` support for `Value`.
|
|
* Added `Keyword::Default`.
|
|
* Added index operator class support.
|
|
* Added `DROP COLUMN IF EXISTS`.
|
|
* Added CTE `VALUES` clause support.
|
|
* Added `ON CONFLICT ON CONSTRAINT`.
|
|
|
|
### SQL Correctness Fixes
|
|
|
|
* Fixed PostgreSQL `ON CONFLICT` index expressions by wrapping expressions in parentheses where PostgreSQL syntax requires it.
|
|
* Fixed MySQL `IndexCreateStatement::cond_where` so partial index filters are emitted instead of silently dropped.
|
|
* Fixed SQLite decimal handling.
|
|
* Fixed tokenizer comment parsing and backend-specific string literal handling.
|
|
* Fixed null array element handling.
|
|
|
|
### Binder Crates
|
|
|
|
Use these stable companion crate versions with `sea-query 1.0.0`:
|
|
|
|
```toml
|
|
sea-query = "1.0"
|
|
sea-query-derive = "1.0"
|
|
sea-query-rusqlite = "0.8"
|
|
sea-query-postgres = "0.6"
|
|
sea-query-diesel = "0.3"
|
|
sea-query-rbatis = "0.2"
|
|
```
|
|
|
|
For SQLx users:
|
|
|
|
```toml
|
|
# SQLx 0.8 compatibility line
|
|
sea-query-sqlx = "0.8.1"
|
|
|
|
# SQLx 0.9 line
|
|
sea-query-sqlx = "0.9"
|
|
```
|
|
|
|
`sea-query-sqlx 0.8.0` was yanked. Use `0.8.1` for SQLx `0.8`, or `0.9.0` for SQLx `0.9`.
|
|
|
|
### Migration Notes
|
|
|
|
Review generated SQL when upgrading migrations from pre-1.0 releases, especially for:
|
|
|
|
* PostgreSQL unsigned integer columns.
|
|
* Postgres identity columns versus legacy `serial`.
|
|
* MySQL partial index filters.
|
|
* `Expr` / `SimpleExpr` conversions.
|
|
* `TableRef`, `ColumnRef`, and dynamic identifier construction.
|
|
* Jiff value mappings.
|
|
|
|
### Verification
|
|
|
|
Verified during release preparation with:
|
|
|
|
```sh
|
|
cargo +1.88 test --workspace --features all-features
|
|
cargo +1.88 doc --workspace --all-features --no-deps
|
|
```
|