Skip to content

Releases: SeaQL/sea-orm

1.1.3

24 Dec 00:57
Compare
Choose a tag to compare

New Features

  • [sea-orm-codegen] register seaography entity modules & active enums #2403
pub mod prelude;

pub mod sea_orm_active_enums;

pub mod baker;
pub mod bakery;
pub mod cake;
pub mod cakes_bakers;
pub mod customer;
pub mod lineitem;
pub mod order;

seaography::register_entity_modules!([
    baker,
    bakery,
    cake,
    cakes_bakers,
    customer,
    lineitem,
    order,
]);

seaography::register_active_enums!([
    sea_orm_active_enums::Tea,
    sea_orm_active_enums::Color,
]);

Enhancements

  • Insert many allow active models to have different column set #2433
// this previously panics
let apple = cake_filling::ActiveModel {
    cake_id: ActiveValue::set(2),
    filling_id: ActiveValue::NotSet,
};
let orange = cake_filling::ActiveModel {
    cake_id: ActiveValue::NotSet,
    filling_id: ActiveValue::set(3),
};
assert_eq!(
    Insert::<cake_filling::ActiveModel>::new()
        .add_many([apple, orange])
        .build(DbBackend::Postgres)
        .to_string(),
    r#"INSERT INTO "cake_filling" ("cake_id", "filling_id") VALUES (2, NULL), (NULL, 3)"#,
);
  • [sea-orm-cli] Added MIGRATION_DIR environment variable #2419
  • Added ColumnDef::is_unique #2401
  • Postgres: quote schema in search_path #2436

Bug Fixes

  • MySQL: fix transaction isolation level not respected when used with access mode #2450

1.1.2

02 Dec 07:03
afdf9bb
Compare
Choose a tag to compare

Enhancements

  • Added ColumnTrait::enum_type_name() to signify enum types #2415
  • Added DbBackend::boolean_value() for database dependent boolean value #2415

1.1.1

04 Nov 01:12
Compare
Choose a tag to compare

Enhancements

  • [sea-orm-macros] impl From<Model> for ActiveModel instead of impl From<<Entity as sea_orm::EntityTrait>::Model> for ActiveModel #2349.
    Now the following can compile:
use sea_orm::{tests_cfg::cake, Set};

struct Cake {
    id: i32,
    name: String,
}

impl From<Cake> for cake::ActiveModel {
    fn from(value: Cake) -> Self {
        Self {
            id: Set(value.id),
            name: Set(value.name),
        }
    }
}

1.1.0

15 Oct 06:45
0c5668d
Compare
Choose a tag to compare

Enhancements

  • [sea-orm-macros] Call EnumIter::get using fully qualified syntax #2321
  • Construct DatabaseConnection directly from sqlx::PgPool, sqlx::SqlitePool and sqlx::MySqlPool #2348
  • [sea-orm-migration] Add pk_uuid schema helper #2329
  • [sea-orm-migration] Allow custom and custom_null schema helper to take column name and alias of different IntoIden types #2326
  • Add ColumnDef::get_column_default getter #2387

Upgrades

  • Upgrade sqlx to 0.8.2 #2305, #2371
  • Upgrade bigdecimal to 0.4 #2305
  • Upgrade sea-query to 0.32.0-rc #2305
  • Upgrade sea-query-binder to 0.7.0-rc #2305
  • Upgrade sea-schema to 0.16.0-rc #2305
  • Upgrade ouroboros to 0.18 #2353

House keeping

1.1.0-rc.3

08 Oct 03:51
c359ee3
Compare
Choose a tag to compare
1.1.0-rc.3 Pre-release
Pre-release

Enhancements

  • Add ColumnDef::get_column_default getter #2387

1.1.0-rc.2

04 Oct 09:57
c64f48d
Compare
Choose a tag to compare
1.1.0-rc.2 Pre-release
Pre-release

Enhancements

  • [sea-orm-macros] Call EnumIter::get using fully qualified syntax #2321
  • Construct DatabaseConnection directly from sqlx::PgPool, sqlx::SqlitePool and sqlx::MySqlPool #2348
  • [sea-orm-migration] Add pk_uuid schema helper #2329
  • [sea-orm-migration] Allow custom and custom_null schema helper to take column name and alias of different IntoIden types #2326

Upgrades

  • Upgrade sqlx to 0.8.2 #2371
  • Upgrade ouroboros to 0.18 #2353

House keeping

1.0.1

27 Aug 08:50
e3ae0c1
Compare
Choose a tag to compare

New Features

  • Added ConnectOptions::connect_lazy for creating DB connection pools without establishing connections up front #2268

Breaking Changes

  • Changed ProxyDatabaseTrait methods to async. It's a breaking change, but it should have been part of the 1.0 release.
    The feature is behind the feature guard proxy, and we believe it shouldn't impact majority of users.
    #2278

Bug Fixes

  • [sea-orm-codegen] Fix ColumnType to Rust type resolution #2313

1.1.0-rc.1

09 Aug 15:51
9d5e3ee
Compare
Choose a tag to compare
1.1.0-rc.1 Pre-release
Pre-release

Upgrades

  • Upgrade sqlx to 0.8 #2305
  • Upgrade bigdecimal to 0.4 #2305
  • Upgrade sea-query to 0.32.0-rc #2305
  • Upgrade sea-query-binder to 0.7.0-rc #2305
  • Upgrade sea-schema to 0.16.0-rc #2305

1.0.0

04 Aug 12:29
7e433df
Compare
Choose a tag to compare

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

1.0.0-rc.7

25 Jun 03:55
dbf475b
Compare
Choose a tag to compare
1.0.0-rc.7 Pre-release
Pre-release

Upgrades

  • Upgrade sea-query-binder to 0.6.0-rc.4 #2267
  • Upgrade time to 0.3.36 #2267