## 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
```
