Files
Notes/notes-service/vendor/sea-query/changelog/1.0.0.md
T
2026-08-01 16:11:49 +03:00

4.7 KiB

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 - Table partitioning, Jiff binder support, JSON_TABLE refactor
  • 1.0.0-rc.33 - Value::Enum, Postgres advisory locks, SelectExprTrait
  • 1.0.0-rc.32 - EXPLAIN, FILTER on aggregates, ALTER TABLE DROP CONSTRAINT
  • 1.0.0-rc.31 - SELECT INTO, eq_any/ne_all, Value::array_type
  • 1.0.0-rc.30 - Tokenizer comment parsing, dependency reductions
  • 1.0.0-rc.29 - Legacy serial option for Postgres
  • 1.0.0-rc.28 - Restore Value system
  • 1.0.0-rc.27 - Revert impl Iden for String
  • 1.0.0-rc.26 - From<Vec<Value>> for Array, FromIterator<T> for Array
  • 1.0.0-rc.24 - Array API redesign
  • 1.0.0-rc.23 - Value::Enum, ON CONFLICT ON CONSTRAINT, CTE VALUES clause
  • 1.0.0-rc.22 - Index operator class, DROP COLUMN IF EXISTS, nullable values
  • 1.0.0-rc.20 - 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:

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:

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

cargo +1.88 test --workspace --features all-features
cargo +1.88 doc --workspace --all-features --no-deps