github SeaQL/sea-orm 1.0.0

latest releases: 1.0.1, 1.1.0-rc.1
one month ago

New Features

  • Introduce PrimaryKeyArity with ARITY constant #2185
fn get_arity_of<E: EntityTrait>() -> usize {
    E::PrimaryKey::iter().count() // before; runtime
    <<E::PrimaryKey as PrimaryKeyTrait>::ValueType as PrimaryKeyArity>::ARITY // now; compile-time
}
  • Associate ActiveModel to EntityTrait #2186
  • [sea-orm-macros] Added rename_all attribute to DeriveEntityModel & DeriveActiveEnum #2170
#[derive(DeriveEntityModel)]
#[sea_orm(table_name = "user", rename_all = "camelCase")]
pub struct Model {
    #[sea_orm(primary_key)]
    id: i32,
    first_name: String, // firstName
    #[sea_orm(column_name = "lAsTnAmE")]
    last_name: String, // lAsTnAmE
}

#[derive(EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "String(StringLen::None)", rename_all = "camelCase")]
pub enum TestEnum {
    DefaultVariant, // defaultVariant
    #[sea_orm(rename = "kebab-case")]
    VariantKebabCase, // variant-kebab-case
    #[sea_orm(rename = "snake_case")]
    VariantSnakeCase, // variant_snake_case
    #[sea_orm(string_value = "CuStOmStRiNgVaLuE")]
    CustomStringValue, // CuStOmStRiNgVaLuE
}
  • [sea-orm-migration] schema helper #2099
// Remember to import `sea_orm_migration::schema::*`
use sea_orm_migration::{prelude::*, schema::*};

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        manager
            .create_table(
                Table::create()
                    .table(Users::Table)
                    .if_not_exists()
                    .col(pk_auto(Users::Id)) // Primary key with auto-increment
                    .col(uuid(Users::Pid)) // UUID column
                    .col(string_uniq(Users::Email)) // String column with unique constraint
                    .col(string(Users::Password)) // String column
                    .col(string(Users::ApiKey).unique_key())
                    .col(string(Users::Name))
                    .col(string_null(Users::ResetToken)) // Nullable string column
                    .col(timestamp_null(Users::ResetSentAt)) // Nullable timestamp column
                    .col(string_null(Users::EmailVerificationToken))
                    .col(timestamp_null(Users::EmailVerificationSentAt))
                    .col(timestamp_null(Users::EmailVerifiedAt))
                    .to_owned(),
            )
            .await
    }

    // ...
}

Enhancements

  • Added non-TLS runtime #2256
  • Added QuerySelect::tbl_col_as
  • Added Insert::on_conflict_do_nothing #2244
  • Migration schema nullable column set NULL explicitly #2255
  • Added ActiveValue::set_if_not_equals() #2194
  • Added ActiveValue::try_as_ref() #2197
  • Added QuerySelect::order_by_with_nulls #2228
  • Expose get_xxx_connection_pool by default #2233
  • Added QueryResult::column_names #2148
  • [sea-orm-macro] Add @generated in generated code #2199
  • [sea-orm-macro] Qualify traits in DeriveActiveModel macro #1665
  • [sea-orm-cli] Fix migrate generate on empty mod.rs files #2064
  • DerivePartialModel macro attribute entity now supports syn::Type #2137
#[derive(DerivePartialModel)]
#[sea_orm(entity = "<entity::Model as ModelTrait>::Entity")]
struct EntityNameNotAIdent {
    #[sea_orm(from_col = "foo2")]
    _foo: i32,
    #[sea_orm(from_col = "bar2")]
    _bar: String,
}
  • Added RelationDef::from_alias() #2146
let cf = Alias::new("cf");

assert_eq!(
    cake::Entity::find()
        .join_as(
            JoinType::LeftJoin,
            cake_filling::Relation::Cake.def().rev(),
            cf.clone()
        )
        .join(
            JoinType::LeftJoin,
            cake_filling::Relation::Filling.def().from_alias(cf)
        )
        .build(DbBackend::MySql)
        .to_string(),
    [
        "SELECT `cake`.`id`, `cake`.`name` FROM `cake`",
        "LEFT JOIN `cake_filling` AS `cf` ON `cake`.`id` = `cf`.`cake_id`",
        "LEFT JOIN `filling` ON `cf`.`filling_id` = `filling`.`id`",
    ]
    .join(" ")
);

Bug Fixes

  • Set schema search path in Postgres without enclosing single quote #2241
  • [sea-orm-cli] Generate has_one relation for foreign key of unique index / constraint #2254

Breaking changes

  • Renamed ConnectOptions::pool_options() to ConnectOptions::sqlx_pool_options() #2145
  • Made sqlx_common private, hiding sqlx_error_to_xxx_err #2145
  • Rework SQLite type mappings #2077, #2078

Upgrades

  • Upgrade time to 0.3.36 #2267
  • Upgrade strum to 0.26 #2088
  • Upgrade sea-schema to 0.15.0
  • Upgrade sea-query-binder to 0.6.0
  • Upgrade sea-query to 0.31.0

House keeping

  • Reduce warnings in integration tests #2177
  • Improved Actix example to return 404 not found on unexpected inputs #2140
  • Re-enable rocket_okapi example #2136

New Contributors

Full Changelog: 0.12.15...1.0.0

Don't miss a new sea-orm release

NewReleases is sending notifications on new releases.