## Release Notes: SeaORM 2.0.0-rc.42 *(since 2.0.0-rc.41)* ### New Features **Typed value arrays via `try_getable_array`** (#3108, #2967) `DeriveValueType` wrappers backed by a `Vec<_>` now round-trip as native PostgreSQL arrays: the derive generates a `try_getable_array` implementation, so a newtype over `Vec` reads and writes as `INTEGER[]` without a manual `TryGetable` impl. ```rust #[derive(Clone, Debug, PartialEq, DeriveValueType)] pub struct Tags(Vec); ``` **Replace and delete a nested `HasOne`** (#3110, #3060, #3061) The active has-one type (`ActiveHasOne`) gains a `Delete` variant plus generated `delete_` / `set__option` builders. Setting a populated has-one now *replaces* the existing linked record (deleting or orphaning the old one) instead of erroring, and `Delete` removes it on save. ```rust let mut user = user::Entity::load().filter_by_id(1).with(profile::Entity).one(db).await?.unwrap(); user.delete_profile().save(db).await?; // remove the linked profile ``` **`TryFrom<&str>` for active enums** (#3111) `DeriveActiveEnum` now generates a `TryFrom<&str>` implementation, so a string value can be parsed straight into the enum by its database string representation. ```rust let color = Color::try_from("Black")?; ``` ### Enhancements **`ActiveHasOne` / `ActiveHasMany`** (renamed) The active/write-side companions to `HasOne` / `HasMany` are renamed from `HasOneModel` / `HasManyModel` to `ActiveHasOne` / `ActiveHasMany`, so the names read as active-model values rather than loaded models. The read-side `HasOne` / `HasMany` types are unchanged. **Documented `SqlErr` and `DbErr::sql_err()`** (#2940) `DbErr::sql_err()` and the `SqlErr` variants are documented, including how to reach the raw driver error for backend-specific handling. ```rust if let Some(SqlErr::UniqueConstraintViolation(_)) = err.sql_err() { /* ... */ } ``` **Schema sync warns on column-type divergence** (#3106) `SchemaBuilder::sync()` logs a warning when a live column's type diverges from the entity definition instead of silently ignoring the difference. ### Bug Fixes **Codegen `ColumnType` coverage** (#3092) Entity generation emits compiling code for `Year`, `Bit`, `VarBit`, `MacAddr`, `LTree`, and `Interval` columns, and for `Money` columns carrying precision and scale — previously these produced non-compiling `ColumnType` expressions. **Skip generated columns in entity generation** (#3094) `sea-orm-cli generate entity` skips database-generated columns, which cannot be inserted or updated, instead of emitting them as ordinary fields. **`SchemaBuilder::sync()` returns a `Send` future** (#3100) Regression fix: `sync()` no longer returns a non-`Send` future, so it can be used across `.await` points on multi-threaded runtimes. Released together with sea-schema 0.18.1. **`sea-orm-sync` generation fixes** (#3112) The `make-sync` transform correctly handles `futures_util` usage in the mock driver, keeping the blocking `sea-orm-sync` crate in sync with the async source. ### Compatibility Notes - `HasOneModel` / `HasManyModel` are renamed to `ActiveHasOne` / `ActiveHasMany`. Update references; the read-side `HasOne` / `HasMany` are unaffected. - `DbErr`, `UpdateResult`, `DeleteResult`, `ActiveHasOne`, and `ActiveHasMany` are now `#[non_exhaustive]`; downstream `match`es need a wildcard arm. - Schema sync and nested-ActiveModel relation mutation are marked unstable (semver-exempt) while their APIs settle. - Prebuilt `sea-orm-cli` binaries no longer include the Intel macOS (`x86_64-apple-darwin`) target.