## 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> for Array`, `FromIterator 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 ```