Skip to content

Latest commit

 

History

History
1412 lines (1130 loc) · 62.1 KB

CHANGELOG.md

File metadata and controls

1412 lines (1130 loc) · 62.1 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

0.12.3 - Pending

New Features

  • [sea-orm-migration] Check if an index exists SeaQL#1828

0.12.2 - 2023-08-04

Enhancements

  • Added support for Postgres arrays in FromQueryResult impl of JsonValue SeaQL#1598

Bug fixes

  • Fixed find_with_related consolidation logic SeaQL#1800

0.12.1 - 2023-07-27

  • 0.12.0-rc.1: Yanked
  • 0.12.0-rc.2: 2023-05-19
  • 0.12.0-rc.3: 2023-06-22
  • 0.12.0-rc.4: 2023-07-08
  • 0.12.0-rc.5: 2023-07-22

New Features

  • Added MigratorTrait::migration_table_name() method to configure the name of migration table SeaQL#1511
#[async_trait::async_trait]
impl MigratorTrait for Migrator {
    // Override the name of migration table
    fn migration_table_name() -> sea_orm::DynIden {
        Alias::new("override_migration_table_name").into_iden()
    }
    ...
}
  • Added option to construct chained AND / OR join on condition SeaQL#1433
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "cake")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    pub name: String,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
    // By default, it's
    // `JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` AND `fruit`.`name` LIKE '%tropical%'`
    #[sea_orm(
        has_many = "super::fruit::Entity",
        on_condition = r#"super::fruit::Column::Name.like("%tropical%")"#
    )]
    TropicalFruit,
    // Or specify `condition_type = "any"` to override it,
    // `JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` OR `fruit`.`name` LIKE '%tropical%'`
    #[sea_orm(
        has_many = "super::fruit::Entity",
        on_condition = r#"super::fruit::Column::Name.like("%tropical%")"#
        condition_type = "any",
    )]
    OrTropicalFruit,
}
  • Supports entity with composite primary key of arity 12 SeaQL#1508
    • Identity supports tuple of DynIden with arity up to 12
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "primary_key_of_12")]
pub struct Model {
    #[sea_orm(primary_key, auto_increment = false)]
    pub id_1: String,
    ...
    #[sea_orm(primary_key, auto_increment = false)]
    pub id_12: bool,
}
#[derive(DerivePartialModel, FromQueryResult)]
#[sea_orm(entity = "Cake")]
struct PartialCake {
    name: String,
    #[sea_orm(
        from_expr = r#"SimpleExpr::FunctionCall(Func::upper(Expr::col((Cake, cake::Column::Name))))"#
    )]
    name_upper: String,
}

assert_eq!(
    cake::Entity::find()
        .into_partial_model::<PartialCake>()
        .into_statement(DbBackend::Sqlite)
        .to_string(),
    r#"SELECT "cake"."name", UPPER("cake"."name") AS "name_upper" FROM "cake""#
);
  • Added DbErr::sql_err() method to convert error into common database errors SqlErr, such as unique constraint or foreign key violation errors. SeaQL#1707
assert!(matches!(
    cake.into_active_model().insert(db).await
        .expect_err("Insert a row with duplicated primary key")
        .sql_err(),
    Some(SqlErr::UniqueConstraintViolation(_))
));

assert!(matches!(
    fk_cake.insert(db).await
        .expect_err("Insert a row with invalid foreign key")
        .sql_err(),
    Some(SqlErr::ForeignKeyConstraintViolation(_))
));
fn find_with_related<R>(self, r: R) -> SelectTwoMany<E, R>
    where R: EntityTrait, E: Related<R>;
fn find_with_linked<L, T>(self, l: L) -> SelectTwoMany<E, T>
    where L: Linked<FromEntity = E, ToEntity = T>, T: EntityTrait;

// boths yields `Vec<(E::Model, Vec<F::Model>)>`
  • Added DeriveValueType derive macro for custom wrapper types, implementations of the required traits will be provided, you can customize the column_type and array_type if needed SeaQL#1720
#[derive(DeriveValueType)]
#[sea_orm(array_type = "Int")]
pub struct Integer(i32);

#[derive(DeriveValueType)]
#[sea_orm(column_type = "Boolean", array_type = "Bool")]
pub struct Boolbean(pub String);

#[derive(DeriveValueType)]
pub struct StringVec(pub Vec<String>);
  • Added DeriveDisplay derive macro to implements std::fmt::Display for enum SeaQL#1726
#[derive(DeriveDisplay)]
enum DisplayTea {
    EverydayTea,
    #[sea_orm(display_value = "Breakfast Tea")]
    BreakfastTea,
}
assert_eq!(format!("{}", DisplayTea::EverydayTea), "EverydayTea");
assert_eq!(format!("{}", DisplayTea::BreakfastTea), "Breakfast Tea");
  • Added UpdateMany::exec_with_returning() SeaQL#1677
let models: Vec<Model> = Entity::update_many()
    .col_expr(Column::Values, Expr::expr(..))
    .exec_with_returning(db)
    .await?;
  • Supporting default_expr in DeriveEntityModel SeaQL#1474
#[derive(DeriveEntityModel)]
#[sea_orm(table_name = "hello")]
pub struct Model {
    #[sea_orm(default_expr = "Expr::current_timestamp()")]
    pub timestamp: DateTimeUtc,
}

assert_eq!(
    Column::Timestamp.def(),
    ColumnType::TimestampWithTimeZone.def()
        .default(Expr::current_timestamp())
);
enum DbErr {
    ConnectionAcquire(ConnAcquireErr),
    ..
}

enum ConnAcquireErr {
    Timeout,
    ConnectionClosed,
}

Seaography

Added Seaography integration SeaQL#1599

  • Added DeriveEntityRelated macro which will implement seaography::RelationBuilder for RelatedEntity enumeration when the seaography feature is enabled

  • Added generation of seaography related information to sea-orm-codegen.

    The RelatedEntity enum is added in entities files by sea-orm-cli when flag seaography is set:

/// SeaORM Entity
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelatedEntity)]
pub enum RelatedEntity {
    #[sea_orm(entity = "super::bakery::Entity")]
    Bakery,
    #[sea_orm(entity = "super::cake_baker::Entity")]
    CakeBaker,
    #[sea_orm(entity = "super::cake::Entity")]
    Cake,
}

Enhancements

  • Supports for partial select of Option<T> model field. A None value will be filled when the select result does not contain the Option<T> field without throwing an error. SeaQL#1513
  • [sea-orm-cli] the migrate init command will create a .gitignore file when the migration folder reside in a Git repository SeaQL#1334
  • [sea-orm-cli] Added support for generating migration of space separated name, for example executing sea-orm-cli migrate generate "create accounts table" command will create m20230503_000000_create_accounts_table.rs for you SeaQL#1570
  • Added Migration::name() and Migration::status() getters for the name and status of sea_orm_migration::Migration SeaQL#1519
let migrations = Migrator::get_pending_migrations(db).await?;
assert_eq!(migrations.len(), 5);

let migration = migrations.get(0).unwrap();
assert_eq!(migration.name(), "m20220118_000002_create_fruit_table");
assert_eq!(migration.status(), MigrationStatus::Pending);
  • The postgres-array feature will be enabled when sqlx-postgres backend is selected SeaQL#1565
  • Replace String parameters in API with Into<String> SeaQL#1439
    • Implements IntoMockRow for any BTreeMap that is indexed by string impl IntoMockRow for BTreeMap<T, Value> where T: Into<String>
    • Converts any string value into ConnectOptions - impl From<T> for ConnectOptions where T: Into<String>
    • Changed the parameter of method ConnectOptions::new(T) where T: Into<String> to takes any string SQL
    • Changed the parameter of method Statement::from_string(DbBackend, T) where T: Into<String> to takes any string SQL
    • Changed the parameter of method Statement::from_sql_and_values(DbBackend, T, I) where I: IntoIterator<Item = Value>, T: Into<String> to takes any string SQL
    • Changed the parameter of method Transaction::from_sql_and_values(DbBackend, T, I) where I: IntoIterator<Item = Value>, T: Into<String> to takes any string SQL
    • Changed the parameter of method ConnectOptions::set_schema_search_path(T) where T: Into<String> to takes any string
    • Changed the parameter of method ColumnTrait::like(), ColumnTrait::not_like(), ColumnTrait::starts_with(), ColumnTrait::ends_with() and ColumnTrait::contains() to takes any string
  • Added sea_query::{DynIden, RcOrArc, SeaRc} to entity prelude SeaQL#1661
  • Added expr, exprs and expr_as methods to QuerySelect trait SeaQL#1702
  • Added DatabaseConnection::ping SeaQL#1627
|db: DatabaseConnection| {
    assert!(db.ping().await.is_ok());
    db.clone().close().await;
    assert!(matches!(db.ping().await, Err(DbErr::ConnectionAcquire)));
}
  • Added TryInsert that does not panic on empty inserts SeaQL#1708
// now, you can do:
let res = Bakery::insert_many(std::iter::empty())
    .on_empty_do_nothing()
    .exec(db)
    .await;

assert!(matches!(res, Ok(TryInsertResult::Empty)));
  • Insert on conflict do nothing to return Ok SeaQL#1712
let on = OnConflict::column(Column::Id).do_nothing().to_owned();

// Existing behaviour
let res = Entity::insert_many([..]).on_conflict(on).exec(db).await;
assert!(matches!(res, Err(DbErr::RecordNotInserted)));

// New API; now you can:
let res =
Entity::insert_many([..]).on_conflict(on).do_nothing().exec(db).await;
assert!(matches!(res, Ok(TryInsertResult::Conflicted)));

Bug Fixes

  • Fixed DeriveActiveEnum throwing errors because string_value consists non-UAX#31 compliant characters SeaQL#1374
#[derive(DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "String(None)")]
pub enum StringValue {
    #[sea_orm(string_value = "")]
    Member1,
    #[sea_orm(string_value = "$$")]
    Member2,
}
// will now produce the following enum:
pub enum StringValueVariant {
    __Empty,
    _0x240x24,
}
  • [sea-orm-cli] Fix Postgres enum arrays SeaQL#1678
  • [sea-orm-cli] The implementation of Related<R> with via and to methods will not be generated if there exists multiple paths via an intermediate table SeaQL#1435
  • [sea-orm-cli] fixed entity generation includes partitioned tables SeaQL#1582, SeaQL/sea-schema#105
  • Fixed ActiveEnum::db_type() return type does not implement ColumnTypeTrait SeaQL#1576
  • Resolved insert_many failing if the models iterator is empty SeaQL#873

Breaking changes

  • Supports for partial select of Option<T> model field. A None value will be filled when the select result does not contain the Option<T> field instead of throwing an error. SeaQL#1513
  • Replaced sea-strum dependency with upstream strum in sea-orm SeaQL#1535
    • Added derive and strum features to sea-orm-macros
    • The derive macro EnumIter is now shipped by sea-orm-macros
  • Added a new variant Many to Identity SeaQL#1508
  • Enabled hashable-value feature in SeaQuery, thus Value::Float(NaN) == Value::Float(NaN) would be true SeaQL#1728, SeaQL#1743
  • The DeriveActiveEnum derive macro no longer implement std::fmt::Display. You can use the new DeriveDisplay macro SeaQL#1726
  • sea-query/derive is no longer enabled by sea-orm, as such, Iden no longer works as a derive macro (it's still a trait). Instead, we are shipping a new macro DeriveIden SeaQL#1740 SeaQL#1755
// then:

#[derive(Iden)]
#[iden = "category"]
pub struct CategoryEnum;

#[derive(Iden)]
pub enum Tea {
    Table,
    #[iden = "EverydayTea"]
    EverydayTea,
}

// now:

#[derive(DeriveIden)]
#[sea_orm(iden = "category")]
pub struct CategoryEnum;

#[derive(DeriveIden)]
pub enum Tea {
    Table,
    #[sea_orm(iden = "EverydayTea")]
    EverydayTea,
}
  • Definition of DbErr::ConnectionAcquire changed to ConnectionAcquire(ConnAcquireErr) SeaQL#1737
  • FromJsonQueryResult removed from entity prelude

Upgrades

House keeping

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.11.1...0.12.1

0.11.3 - 2023-04-24

Enhancements

  • Re-export sea_orm::ConnectionTrait in sea_orm_migration::prelude SeaQL#1577
  • Support generic structs in FromQueryResult derive macro SeaQL#1464, SeaQL#1603
#[derive(FromQueryResult)]
struct GenericTest<T: TryGetable> {
    foo: i32,
    bar: T,
}
trait MyTrait {
    type Item: TryGetable;
}

#[derive(FromQueryResult)]
struct TraitAssociateTypeTest<T>
where
    T: MyTrait,
{
    foo: T::Item,
}

Bug Fixes

0.11.2 - 2023-03-25

Enhancements

  • Enable required syn features SeaQL#1556
  • Re-export sea_query::BlobSize in sea_orm::entity::prelude SeaQL#1548

0.11.1 - 2023-03-10

Bug Fixes

  • Fixes DeriveActiveEnum (by qualifying ColumnTypeTrait::def) SeaQL#1478
  • The CLI command sea-orm-cli generate entity -u '<DB-URL>' will now generate the following code for each Binary or VarBinary columns in compact format SeaQL#1529
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "binary")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    #[sea_orm(column_type = "Binary(BlobSize::Blob(None))")]
    pub binary: Vec<u8>,
    #[sea_orm(column_type = "Binary(BlobSize::Blob(Some(10)))")]
    pub binary_10: Vec<u8>,
    #[sea_orm(column_type = "Binary(BlobSize::Tiny)")]
    pub binary_tiny: Vec<u8>,
    #[sea_orm(column_type = "Binary(BlobSize::Medium)")]
    pub binary_medium: Vec<u8>,
    #[sea_orm(column_type = "Binary(BlobSize::Long)")]
    pub binary_long: Vec<u8>,
    #[sea_orm(column_type = "VarBinary(10)")]
    pub var_binary: Vec<u8>,
}
  • The CLI command sea-orm-cli generate entity -u '<DB-URL>' --expanded-format will now generate the following code for each Binary or VarBinary columns in expanded format SeaQL#1529
impl ColumnTrait for Column {
    type EntityName = Entity;
    fn def(&self) -> ColumnDef {
        match self {
            Self::Id => ColumnType::Integer.def(),
            Self::Binary => ColumnType::Binary(sea_orm::sea_query::BlobSize::Blob(None)).def(),
            Self::Binary10 => {
                ColumnType::Binary(sea_orm::sea_query::BlobSize::Blob(Some(10u32))).def()
            }
            Self::BinaryTiny => ColumnType::Binary(sea_orm::sea_query::BlobSize::Tiny).def(),
            Self::BinaryMedium => ColumnType::Binary(sea_orm::sea_query::BlobSize::Medium).def(),
            Self::BinaryLong => ColumnType::Binary(sea_orm::sea_query::BlobSize::Long).def(),
            Self::VarBinary => ColumnType::VarBinary(10u32).def(),
        }
    }
}

0.11.0 - 2023-02-07

  • 2023-02-02: 0.11.0-rc.1
  • 2023-02-04: 0.11.0-rc.2

New Features

SeaORM Core

  • Simple data loader SeaQL#1238, SeaQL#1443
  • Transactions Isolation level and Access mode SeaQL#1230
  • Support various UUID formats that are available in uuid::fmt module SeaQL#1325
  • Support Vector of enum for Postgres SeaQL#1210
  • Support ActiveEnum field as primary key SeaQL#1414
  • Casting columns as a different data type on select, insert and update SeaQL#1304
  • Methods of ActiveModelBehavior receive db connection as a parameter SeaQL#1145, SeaQL#1328
  • Added execute_unprepared method to DatabaseConnection and DatabaseTransaction SeaQL#1327
  • Added Select::into_tuple to select rows as tuples (instead of defining a custom Model) SeaQL#1311

SeaORM CLI

SeaORM Migration

  • Migrations are now performed inside a transaction for Postgres SeaQL#1379

Enhancements

  • Refactor schema module to expose functions for database alteration SeaQL#1256
  • Generate compact entity with #[sea_orm(column_type = "JsonBinary")] macro attribute SeaQL#1346
  • MockDatabase::append_exec_results(), MockDatabase::append_query_results(), MockDatabase::append_exec_errors() and MockDatabase::append_query_errors() take any types implemented IntoIterator trait SeaQL#1367
  • find_by_id and delete_by_id take any Into primary key value SeaQL#1362
  • QuerySelect::offset and QuerySelect::limit takes in Into<Option<u64>> where None would reset them SeaQL#1410
  • Added DatabaseConnection::close SeaQL#1236
  • Added is_null getter for ColumnDef SeaQL#1381
  • Added ActiveValue::reset to convert Unchanged into Set SeaQL#1177
  • Added QueryTrait::apply_if to optionally apply a filter SeaQL#1415
  • Added the sea-orm-internal feature flag to expose some SQLx types
    • Added DatabaseConnection::get_*_connection_pool() for accessing the inner SQLx connection pool SeaQL#1297
    • Re-exporting SQLx errors SeaQL#1434

Upgrades

House Keeping

Bug Fixes

  • [sea-orm-cli] Propagate error on the spawned child processes SeaQL#1402
    • Fixes sea-orm-cli errors exit with error code 0 SeaQL#1342
  • Fixes DeriveColumn (by qualifying IdenStatic::as_str) SeaQL#1280
  • Prevent returning connections to pool with a positive transaction depth SeaQL#1283
  • Postgres insert many will throw RecordNotInserted error if non of them are being inserted SeaQL#1021
    • Fixes inserting active models by insert_many with on_conflict and do_nothing panics if no rows are inserted on Postgres SeaQL#899
  • Don't call last_insert_id if not needed SeaQL#1403
    • Fixes hitting 'negative last_insert_rowid' panic with Sqlite SeaQL#1357
  • Noop when update without providing any values SeaQL#1384
    • Fixes Syntax Error when saving active model that sets nothing SeaQL#1376

Breaking Changes

  • [sea-orm-cli] Enable --universal-time by default SeaQL#1420
  • Added RecordNotInserted and RecordNotUpdated to DbErr
  • Added ConnectionTrait::execute_unprepared method SeaQL#1327
  • As part of SeaQL#1311, the required method of TryGetable changed:
// then
fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result<Self, TryGetError>;
// now; ColIdx can be `&str` or `usize`
fn try_get_by<I: ColIdx>(res: &QueryResult, index: I) -> Result<Self, TryGetError>;

So if you implemented it yourself:

impl TryGetable for XXX {
-   fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result<Self, TryGetError> {
+   fn try_get_by<I: sea_orm::ColIdx>(res: &QueryResult, idx: I) -> Result<Self, TryGetError> {
-       let value: YYY = res.try_get(pre, col).map_err(TryGetError::DbErr)?;
+       let value: YYY = res.try_get_by(idx).map_err(TryGetError::DbErr)?;
        ..
    }
}
  • The ActiveModelBehavior trait becomes async trait SeaQL#1328. If you overridden the default ActiveModelBehavior implementation:
#[async_trait::async_trait]
impl ActiveModelBehavior for ActiveModel {
    async fn before_save<C>(self, db: &C, insert: bool) -> Result<Self, DbErr>
    where
        C: ConnectionTrait,
    {
        // ...
    }

    // ...
}
  • DbErr::RecordNotFound("None of the database rows are affected") is moved to a dedicated error variant DbErr::RecordNotUpdated SeaQL#1425
let res = Update::one(cake::ActiveModel {
        name: Set("Cheese Cake".to_owned()),
        ..model.into_active_model()
    })
    .exec(&db)
    .await;

// then
assert_eq!(
    res,
    Err(DbErr::RecordNotFound(
        "None of the database rows are affected".to_owned()
    ))
);

// now
assert_eq!(res, Err(DbErr::RecordNotUpdated));
  • sea_orm::ColumnType was replaced by sea_query::ColumnType SeaQL#1395
    • Method ColumnType::def was moved to ColumnTypeTrait
    • ColumnType::Binary becomes a tuple variant which takes in additional option sea_query::BlobSize
    • ColumnType::Custom takes a sea_query::DynIden instead of String and thus a new method custom is added (note the lowercase)
// Compact Entity
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "fruit")]
pub struct Model {
-   #[sea_orm(column_type = r#"Custom("citext".to_owned())"#)]
+   #[sea_orm(column_type = r#"custom("citext")"#)]
    pub column: String,
}
// Expanded Entity
impl ColumnTrait for Column {
    type EntityName = Entity;

    fn def(&self) -> ColumnDef {
        match self {
-           Self::Column => ColumnType::Custom("citext".to_owned()).def(),
+           Self::Column => ColumnType::custom("citext").def(),
        }
    }
}

Miscellaneous

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.10.0...0.11.0

0.10.7 - 2023-01-19

Bug Fixes

  • Inserting active models by insert_many with on_conflict and do_nothing panics if no rows are inserted on Postgres SeaQL#899
  • Hitting 'negative last_insert_rowid' panic with Sqlite SeaQL#1357

0.10.6 - 2022-12-23

Enhancements

  • Cast enum values when constructing update many query SeaQL#1178

Bug Fixes

  • Fixes DeriveColumn (by qualifying IdenStatic::as_str) SeaQL#1280
  • Prevent returning connections to pool with a positive transaction depth SeaQL#1283
  • [sea-orm-codegen] Skip implementing Related if the same related entity is being referenced by a conjunct relation SeaQL#1298
  • [sea-orm-cli] CLI depends on codegen of the same version SeaQL#1299

0.10.5 - 2022-12-02

New Features

  • Add QuerySelect::columns method - select multiple columns SeaQL#1264
  • Transactions Isolation level and Access mode SeaQL#1230

Bug Fixes

  • DeriveEntityModel derive macro: when parsing field type, always treat field with Option<T> as nullable column SeaQL#1257

Enhancements

  • [sea-orm-cli] Generate Related implementation for many-to-many relation with extra columns SeaQL#1260
  • Optimize the default implementation of TryGetableFromJson::try_get_from_json() - deserializing into Self directly without the need of a intermediate serde_json::Value SeaQL#1249

0.10.4 - 2022-11-24

Bug Fixes

  • Fix DeriveActiveEnum expand enum variant starts with number SeaQL#1219
  • [sea-orm-cli] Generate entity file for specified tables only SeaQL#1245
  • Support appending DbErr to MockDatabase SeaQL#1241

Enhancements

  • Filter rows with IS IN enum values expression SeaQL#1183
  • [sea-orm-cli] Generate entity with relation variant order by name of reference table SeaQL#1229

0.10.3 - 2022-11-14

Bug Fixes

  • [sea-orm-cli] Set search path when initializing Postgres connection for CLI generate entity SeaQL#1212
  • [sea-orm-cli] Generate _ prefix to enum variant starts with number SeaQL#1211
  • Fix composite key cursor pagination SeaQL#1216
    • The logic for single-column primary key was correct, but for composite keys the logic was incorrect

Enhancements

House Keeping

0.10.2 - 2022-11-06

Enhancements

  • [sea-orm-rocket] added sqlx_logging to Config SeaQL#1192
  • Collecting metrics for query_one/all SeaQL#1165
  • Use GAT to elide StreamTrait lifetime SeaQL#1161

Bug Fixes

  • corrected the error name UpdateGetPrimaryKey SeaQL#1180

Upgrades

  • Update MSRV to 1.65

0.10.1 - 2022-10-27

Enhancements

  • [sea-orm-cli] Escape module name defined with Rust keywords SeaQL#1052
  • [sea-orm-cli] Check to make sure migration name doesn't contain hyphen - in it SeaQL#879, SeaQL#1155
  • Support time crate for SQLite SeaQL#995

Bug Fixes

  • [sea-orm-cli] Generate Related for m-to-n relation SeaQL#1075
  • [sea-orm-cli] Generate model entity with Postgres Enum field SeaQL#1153
  • [sea-orm-cli] Migrate up command apply all pending migrations SeaQL#1010
  • [sea-orm-cli] Conflicting short flag -u when executing migrate generate command SeaQL#1157
  • Prefix the usage of types with sea_orm:: inside DeriveActiveEnum derive macros SeaQL#1146, SeaQL#1154
  • [sea-orm-cli] Generate model with Vec<f32> or Vec<f64> should not derive Eq on the model struct SeaQL#1158

House Keeping

  • [sea-orm-cli] [sea-orm-migration] Add cli feature to optionally include dependencies that are required by the CLI SeaQL#978

Upgrades

0.10.0 - 2022-10-23

New Features

  • Better error types (carrying SQLx Error) SeaQL#1002
  • Support array datatype in PostgreSQL SeaQL#1132
  • [sea-orm-cli] Generate entity files as a library or module SeaQL#953
  • [sea-orm-cli] Generate a new migration template with name prefix of unix timestamp SeaQL#947
  • [sea-orm-cli] Generate migration in modules SeaQL#933
  • [sea-orm-cli] Generate DeriveRelation on empty Relation enum SeaQL#1019
  • [sea-orm-cli] Generate entity derive Eq if possible SeaQL#988
  • [sea-orm-cli] Run migration on any PostgreSQL schema SeaQL#1056

Enhancements

  • Support distinct & distinct_on expression SeaQL#902
  • fn column() also handle enum type SeaQL#973
  • Added acquire_timeout on ConnectOptions SeaQL#897
  • [sea-orm-cli] migrate fresh command will drop all PostgreSQL types SeaQL#864, SeaQL#991
  • Better compile error for entity without primary key SeaQL#1020
  • Added blanket implementations of IntoActiveValue for Option values SeaQL#833
  • Added into_model & into_json to Cursor SeaQL#1112
  • Added set_schema_search_path method to ConnectOptions for setting schema search path of PostgreSQL connection SeaQL#1056
  • Serialize time types as serde_json::Value SeaQL#1042
  • Implements fmt::Display for ActiveEnum SeaQL#986
  • Implements TryFrom<ActiveModel> for Model SeaQL#990

Bug Fixes

Breaking Changes

  • Replaced usize with u64 in PaginatorTrait SeaQL#789
  • Type signature of DbErr changed as a result of SeaQL#1002
  • ColumnType::Enum structure changed:
enum ColumnType {
    // then
    Enum(String, Vec<String>)

    // now
    Enum {
        /// Name of enum
        name: DynIden,
        /// Variants of enum
        variants: Vec<DynIden>,
    }
    ...
}

// example

#[derive(Iden)]
enum TeaEnum {
    #[iden = "tea"]
    Enum,
    #[iden = "EverydayTea"]
    EverydayTea,
    #[iden = "BreakfastTea"]
    BreakfastTea,
}

// then
ColumnDef::new(active_enum_child::Column::Tea)
    .enumeration("tea", vec!["EverydayTea", "BreakfastTea"])

// now
ColumnDef::new(active_enum_child::Column::Tea)
    .enumeration(TeaEnum::Enum, [TeaEnum::EverydayTea, TeaEnum::BreakfastTea])
  • A new method array_type was added to ValueType:
impl sea_orm::sea_query::ValueType for MyType {
    fn array_type() -> sea_orm::sea_query::ArrayType {
        sea_orm::sea_query::ArrayType::TypeName
    }
    ...
}
  • ActiveEnum::name() changed return type to DynIden:
#[derive(Debug, Iden)]
#[iden = "category"]
pub struct CategoryEnum;

impl ActiveEnum for Category {
    // then
    fn name() -> String {
        "category".to_owned()
    }

    // now
    fn name() -> DynIden {
        SeaRc::new(CategoryEnum)
    }
    ...
}

House Keeping

Integration

Upgrades

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.9.0...0.10.0

0.9.3 - 2022-09-30

Enhancements

Bug Fixes

  • Implement IntoActiveValue for time types SeaQL#1041
  • Fixed module import for FromJsonQueryResult derive macro SeaQL#1081

0.9.2 - 2022-08-20

Enhancements

  • [sea-orm-cli] Migrator CLI handles init and generate commands SeaQL#931
  • [sea-orm-cli] added with-copy-enums flag to conditional derive Copy on ActiveEnum SeaQL#936

House Keeping

  • Exclude chrono default features SeaQL#950
  • Set minimal rustc version to 1.60 SeaQL#938
  • Update sea-query to 0.26.3

Notes

In this minor release, we removed time v0.1 from the dependency graph

0.9.1 - 2022-07-22

Enhancements

  • [sea-orm-cli] Codegen support for VarBinary column type SeaQL#746
  • [sea-orm-cli] Generate entity for SYSTEM VERSIONED tables on MariaDB SeaQL#876

Bug Fixes

  • RelationDef & RelationBuilder should be Send & Sync SeaQL#898

House Keeping

0.9.0 - 2022-07-17

New Features

  • Cursor pagination SeaQL#822
  • Custom join on conditions SeaQL#793
  • DeriveMigrationName and sea_orm_migration::util::get_file_stem SeaQL#736
  • FromJsonQueryResult for deserializing Json from query result SeaQL#794

Enhancements

  • Added sqlx_logging_level to ConnectOptions SeaQL#800
  • Added num_items_and_pages to Paginator SeaQL#768
  • Added TryFromU64 for time SeaQL#849
  • Added Insert::on_conflict SeaQL#791
  • Added QuerySelect::join_as and QuerySelect::join_as_rev SeaQL#852
  • Include column name in TryGetError::Null SeaQL#853
  • [sea-orm-cli] Improve logging SeaQL#735
  • [sea-orm-cli] Generate enum with numeric like variants SeaQL#588
  • [sea-orm-cli] Allow old pending migration to be applied SeaQL#755
  • [sea-orm-cli] Skip generating entity for ignored tables SeaQL#837
  • [sea-orm-cli] Generate code for time crate SeaQL#724
  • [sea-orm-cli] Add various blob column types SeaQL#850
  • [sea-orm-cli] Generate entity files with Postgres's schema name SeaQL#422

Upgrades

House Keeping

Bug Fixes

  • [sea-orm-cli] skip checking connection string for credentials SeaQL#851

Breaking Changes

  • SelectTwoMany::one() has been dropped SeaQL#813, you can get (Entity, Vec<RelatedEntity>) by first querying a single model from Entity, then use [ModelTrait::find_related] on the model.
  • Feature flag revamp

    We now adopt the weak dependency syntax in Cargo. That means the flags ["sqlx-json", "sqlx-chrono", "sqlx-decimal", "sqlx-uuid", "sqlx-time"] are not needed and now removed. Instead, with-time will enable sqlx?/time only if sqlx is already enabled. As a consequence, now the features with-json, with-chrono, with-rust_decimal, with-uuid, with-time will not be enabled as a side-effect of enabling sqlx.

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.8.0...0.9.0

sea-orm-migration 0.8.3

  • Removed async-std from dependency SeaQL#758

0.8.0 - 2022-05-10

New Features

  • [sea-orm-cli] sea migrate generate to generate a new, empty migration file SeaQL#656

Enhancements

Bug Fixes

  • Fix DerivePrimaryKey with custom primary key column name SeaQL#694
  • Fix DeriveEntityModel macros override column name SeaQL#695
  • Fix Insert with no value supplied using DEFAULT SeaQL#589

Breaking Changes

  • Migration utilities are moved from sea-schema to sea-orm repo, under a new sub-crate sea-orm-migration. sea_schema::migration::prelude should be replaced by sea_orm_migration::prelude in all migration files

Upgrades

  • Upgrade sea-query to 0.24.x, sea-schema to 0.8.x
  • Upgrade example to Actix Web 4, Actix Web 3 remains SeaQL#638
  • Added Tonic gRPC example SeaQL#659
  • Upgrade GraphQL example to use axum 0.5.x
  • Upgrade axum example to 0.5.x

Fixed Issues

  • Failed to insert row with only default values SeaQL#420
  • Reduce database connections to 1 during codegen SeaQL#511
  • Column names with single letters separated by underscores are concatenated SeaQL#630
  • Update Actix Web examples SeaQL#639
  • Lower function missing SeaQL#672
  • is_changed on active_model SeaQL#674
  • Failing find_with_related with column_name attribute SeaQL#693

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.7.1...0.8.0

0.7.1 - 2022-03-26

  • Fix sea-orm-cli error
  • Fix sea-orm cannot build without with-json

0.7.0 - 2022-03-26

New Features

  • Update ActiveModel by JSON by @billy1624 in SeaQL#492
  • Supports time crate by @billy1624 SeaQL#602
  • Allow for creation of indexes for PostgreSQL and SQLite @nickb937 SeaQL#593
  • Added delete_by_id @ShouvikGhosh2048 SeaQL#590
  • Implement PaginatorTrait for SelectorRaw @shinbunbun SeaQL#617

Enhancements

  • Added axum graphql example by @aaronleopold in SeaQL#587
  • Add example for integrate with jsonrpsee by @hunjixin SeaQL#632
  • Codegen add serde derives to enums, if specified by @BenJeau SeaQL#463
  • Codegen Unsigned Integer by @billy1624 SeaQL#397
  • Add Send bound to QueryStream and TransactionStream by @sebpuetz SeaQL#471
  • Add Send to StreamTrait by @nappa85 SeaQL#622
  • sea as an alternative bin name to sea-orm-cli by @ZhangHanDong SeaQL#558

Bug Fixes

  • Fix codegen with Enum in expanded format by @billy1624 SeaQL#624
  • Fixing and testing into_json of various field types by @billy1624 SeaQL#539

Breaking Changes

  • Exclude mock from default features by @billy1624 SeaQL#562
  • create_table_from_entity will no longer create index for MySQL, please use the new method create_index_from_entity

Documentations

  • Describe default value of ActiveValue on document by @Ken-Miura in SeaQL#556
  • community: add axum-book-management by @lz1998 in SeaQL#564
  • Add Backpack to project showcase by @JSH32 in SeaQL#567
  • Add mediarepo to showcase by @Trivernis in SeaQL#569
  • COMMUNITY: add a link to Svix to showcase by @tasn in SeaQL#537
  • Update COMMUNITY.md by @naryand in SeaQL#570
  • Update COMMUNITY.md by @BobAnkh in SeaQL#568
  • Update COMMUNITY.md by @KaniyaSimeji in SeaQL#566
  • Update COMMUNITY.md by @aaronleopold in SeaQL#565
  • Update COMMUNITY.md by @gudaoxuri in SeaQL#572
  • Update Wikijump's entry in COMMUNITY.md by @ammongit in SeaQL#573
  • Update COMMUNITY.md by @koopa1338 in SeaQL#574
  • Update COMMUNITY.md by @gengteng in SeaQL#580
  • Update COMMUNITY.md by @Yama-Tomo in SeaQL#582
  • add oura-postgres-sink to COMMUNITY.md by @rvcas in SeaQL#594
  • Add rust-example-caster-api to COMMUNITY.md by @bkonkle in SeaQL#623

Fixed Issues

  • orm-cli generated incorrect type for #[sea_orm(primary_key)]. Should be u64. Was i64. SeaQL#295
  • how to update dynamically from json value SeaQL#346
  • Make DatabaseConnection Clone with the default features enabled SeaQL#438
  • Updating multiple fields in a Model by passing a reference SeaQL#460
  • SeaORM CLI not adding serde derives to Enums SeaQL#461
  • sea-orm-cli generates wrong data type for nullable blob SeaQL#490
  • Support the time crate in addition (instead of?) chrono SeaQL#499
  • PaginatorTrait for SelectorRaw SeaQL#500
  • sea_orm::DatabaseConnection should implement Clone by default SeaQL#517
  • How do you seed data in migrations using ActiveModels? SeaQL#522
  • Datetime fields are not serialized by .into_json() on queries SeaQL#530
  • Update / Delete by id SeaQL#552
  • #[sea_orm(indexed)] only works for MySQL SeaQL#554
  • sea-orm-cli generate --with-serde does not work on Postgresql custom type SeaQL#581
  • sea-orm-cli generate --expanded-format panic when postgres table contains enum type SeaQL#614
  • UUID fields are not serialized by .into_json() on queries SeaQL#619

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.6.0...0.7.0

0.6.0 - 2022-02-07

New Features

  • Migration Support by @billy1624 in SeaQL#335
  • Support DateTime<Utc> & DateTime<Local> by @billy1624 in SeaQL#489
  • Add max_lifetime connection option by @billy1624 in SeaQL#493

Enhancements

  • Model with Generics by @billy1624 in SeaQL#400
  • Add Poem example by @sunli829 in SeaQL#446
  • Codegen column_name proc_macro attribute by @billy1624 in SeaQL#433
  • Easy joins with MockDatabase #447 by @cemoktra in SeaQL#455

Bug Fixes

  • CLI allow generate entity with url without password by @billy1624 in SeaQL#436
  • Support up to 6-ary composite primary key by @billy1624 in SeaQL#423
  • Fix FromQueryResult when Result is redefined by @tasn in SeaQL#495
  • Remove r# prefix when deriving FromQueryResult by @smrtrfszm in SeaQL#494

Breaking Changes

  • Name conflict of foreign key constraints when two entities have more than one foreign keys by @billy1624 in SeaQL#417

Fixed Issues

  • Is it possible to have 4 values Composite Key? SeaQL#352
  • Support DateTime<Utc> & DateTime<Local> SeaQL#381
  • Codegen column_name proc_macro attribute if column name isn't in snake case SeaQL#395
  • Model with Generics SeaQL#402
  • Foreign key constraint collision when multiple keys exist between the same two tables SeaQL#405
  • sea-orm-cli passwordless database user causes "No password was found in the database url" error SeaQL#435
  • Testing joins with MockDatabase SeaQL#447
  • Surface max_lifetime connection option SeaQL#475

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.5.0...0.6.0

0.5.0 - 2022-01-01

Fixed Issues

  • Why insert, update, etc return an ActiveModel instead of Model? SeaQL#289
  • Rework ActiveValue SeaQL#321
  • Some missing ActiveEnum utilities SeaQL#338

Merged PRs

  • First metric and tracing implementation by @nappa85 in SeaQL#373
  • Update sea-orm to depends on SeaQL/sea-query#202 by @billy1624 in SeaQL#370
  • Codegen ActiveEnum & Create Enum From ActiveEnum by @billy1624 in SeaQL#348
  • Axum example: update to Axum v0.4.2 by @ttys3 in SeaQL#383
  • Fix rocket version by @Gabriel-Paulucci in SeaQL#384
  • Insert & Update Return Model by @billy1624 in SeaQL#339
  • Rework ActiveValue by @billy1624 in SeaQL#340
  • Add wrapper method ModelTrait::delete by @billy1624 in SeaQL#396
  • Add docker create script for contributors to setup databases locally by @billy1624 in SeaQL#378
  • Log with tracing-subscriber by @billy1624 in SeaQL#399
  • Codegen SQLite by @billy1624 in SeaQL#386
  • PR without clippy warnings in file changed tab by @billy1624 in SeaQL#401
  • Rename sea-strum lib back to strum by @billy1624 in SeaQL#361

Breaking Changes

  • ActiveModel::insert and ActiveModel::update return Model instead of ActiveModel
  • Method ActiveModelBehavior::after_save takes Model as input instead of ActiveModel
  • Rename method sea_orm::unchanged_active_value_not_intended_for_public_use to sea_orm::Unchanged
  • Rename method ActiveValue::unset to ActiveValue::not_set
  • Rename method ActiveValue::is_unset to ActiveValue::is_not_set
  • PartialEq of ActiveValue will also check the equality of state instead of just checking the equality of value

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.4.2...0.5.0

0.4.2 - 2021-12-12

Fixed Issues

  • Delete::many() doesn't work when schema_name is defined SeaQL#362
  • find_with_related panic SeaQL#374
  • How to define the rust type of TIMESTAMP? SeaQL#344
  • Add Table on the generated Column enum SeaQL#356

Merged PRs

  • Delete::many() with TableRef by @billy1624 in SeaQL#363
  • Fix related & linked with enum columns by @billy1624 in SeaQL#376
  • Temporary Fix: Handling MySQL & SQLite timestamp columns by @billy1624 in SeaQL#379
  • Add feature to generate table Iden by @Sytten in SeaQL#360

0.4.1 - 2021-12-05

Fixed Issues

  • Is it possible to have 4 values Composite Key? SeaQL#352
  • [sea-orm-cli] Better handling of relation generations SeaQL#239

Merged PRs

  • Add TryFromU64 trait for DateTime<FixedOffset>. by @kev0960 in SeaQL#331
  • add offset and limit by @lz1998 in SeaQL#351
  • For some reason the axum_example fail to compile by @billy1624 in SeaQL#355
  • Support Up to 6 Values Composite Primary Key by @billy1624 in SeaQL#353
  • Codegen Handle Self Referencing & Multiple Relations to the Same Related Entity by @billy1624 in SeaQL#347

0.4.0 - 2021-11-19

Fixed Issues

  • Disable SQLx query logging SeaQL#290
  • Code generated by sea-orm-cli cannot pass clippy SeaQL#296
  • Should return detailed error message for connection failure SeaQL#310
  • DateTimeWithTimeZone does not implement Serialize and Deserialize SeaQL#319
  • Support returning clause to avoid database hits SeaQL#183

Merged PRs

  • chore: update to Rust 2021 Edition by @sno2 in SeaQL#273
  • Enumeration - 3 by @billy1624 in SeaQL#274
  • Enumeration - 2 by @billy1624 in SeaQL#261
  • Codegen fix clippy warnings by @billy1624 in SeaQL#303
  • Add axum example by @YoshieraHuang in SeaQL#297
  • Enumeration by @billy1624 in SeaQL#258
  • Add PaginatorTrait and CountTrait for more constraints by @YoshieraHuang in SeaQL#306
  • Continue PaginatorTrait by @billy1624 in SeaQL#307
  • Refactor Schema by @billy1624 in SeaQL#309
  • Detailed connection errors by @billy1624 in SeaQL#312
  • Suppress ouroboros missing docs warnings by @billy1624 in SeaQL#288
  • with-json feature requires chrono/serde by @billy1624 in SeaQL#320
  • Pass the argument entity.table_ref() instead of just entity. by @josh-codes in SeaQL#318
  • Unknown types could be a newtypes instead of ActiveEnum by @billy1624 in SeaQL#324
  • Returning by @billy1624 in SeaQL#292

Breaking Changes

  • Refactor paginate() & count() utilities into PaginatorTrait. You can use the paginator as usual but you might need to import PaginatorTrait manually when upgrading from the previous version.
    use futures::TryStreamExt;
    use sea_orm::{entity::*, query::*, tests_cfg::cake};
    
    let mut cake_stream = cake::Entity::find()
        .order_by_asc(cake::Column::Id)
        .paginate(db, 50)
        .into_stream();
    
    while let Some(cakes) = cake_stream.try_next().await? {
        // Do something on cakes: Vec<cake::Model>
    }
  • The helper struct Schema converting EntityTrait into different sea-query statements now has to be initialized with DbBackend.
    use sea_orm::{tests_cfg::*, DbBackend, Schema};
    use sea_orm::sea_query::TableCreateStatement;
    
    // 0.3.x
    let _: TableCreateStatement = Schema::create_table_from_entity(cake::Entity);
    
    // 0.4.x
    let schema: Schema = Schema::new(DbBackend::MySql);
    let _: TableCreateStatement = schema.create_table_from_entity(cake::Entity);
  • When performing insert or update operation on ActiveModel against PostgreSQL, RETURNING clause will be used to perform select in a single SQL statement.
    // For PostgreSQL
    cake::ActiveModel {
        name: Set("Apple Pie".to_owned()),
        ..Default::default()
    }
    .insert(&postgres_db)
    .await?;
    
    assert_eq!(
        postgres_db.into_transaction_log(),
        vec![Transaction::from_sql_and_values(
            DbBackend::Postgres,
            r#"INSERT INTO "cake" ("name") VALUES ($1) RETURNING "id", "name""#,
            vec!["Apple Pie".into()]
        )]);
    // For MySQL & SQLite
    cake::ActiveModel {
        name: Set("Apple Pie".to_owned()),
        ..Default::default()
    }
    .insert(&other_db)
    .await?;
    
    assert_eq!(
        other_db.into_transaction_log(),
        vec![
            Transaction::from_sql_and_values(
                DbBackend::MySql,
                r#"INSERT INTO `cake` (`name`) VALUES (?)"#,
                vec!["Apple Pie".into()]
            ),
            Transaction::from_sql_and_values(
                DbBackend::MySql,
                r#"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`id` = ? LIMIT ?"#,
                vec![15.into(), 1u64.into()]
            )]);

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.3.2...0.4.0

0.3.2 - 2021-11-03

Fixed Issues

  • Support for BYTEA Postgres primary keys SeaQL#286

Merged PRs

  • Documentation for sea-orm by @charleschege in SeaQL#280
  • Support Vec<u8> primary key by @billy1624 in SeaQL#287

0.3.1 - 2021-10-23

(We are changing our Changelog format from now on)

Fixed Issues

  • Align case transforms across derive macros SeaQL#262
  • Added is_null and is_not_null to ColumnTrait SeaQL#267

(The following is generated by GitHub)

Merged PRs

  • Changed manual url parsing to use Url crate by @AngelOnFira in SeaQL#253
  • Test self referencing relation by @billy1624 in SeaQL#256
  • Unify case-transform using the same crate by @billy1624 in SeaQL#264
  • CI cleaning by @AngelOnFira in SeaQL#263
  • CI install sea-orm-cli in debug mode by @billy1624 in SeaQL#265

0.3.0 - 2021-10-15

https://www.sea-ql.org/SeaORM/blog/2021-10-15-whats-new-in-0.3.0

  • Built-in Rocket support
  • ConnectOptions
let mut opt = ConnectOptions::new("protocol://username:password@host/database".to_owned());
opt.max_connections(100)
    .min_connections(5)
    .connect_timeout(Duration::from_secs(8))
    .idle_timeout(Duration::from_secs(8));
let db = Database::connect(opt).await?;
  • [#211] Throw error if none of the db rows are affected
assert_eq!(
    Update::one(cake::ActiveModel {
        name: Set("Cheese Cake".to_owned()),
        ..model.into_active_model()
    })
    .exec(&db)
    .await,
    Err(DbErr::RecordNotFound(
        "None of the database rows are affected".to_owned()
    ))
);

// update many remains the same
assert_eq!(
    Update::many(cake::Entity)
        .col_expr(cake::Column::Name, Expr::value("Cheese Cake".to_owned()))
        .filter(cake::Column::Id.eq(2))
        .exec(&db)
        .await,
    Ok(UpdateResult { rows_affected: 0 })
);
  • [#223] ActiveValue::take() & ActiveValue::into_value() without unwrap()
  • [#205] Drop Default trait bound of PrimaryKeyTrait::ValueType
  • [#222] Transaction & streaming
  • [#210] Update ActiveModelBehavior API
  • [#240] Add derive DeriveIntoActiveModel and IntoActiveValue trait
  • [#237] Introduce optional serde support for model code generation
  • [#246] Add #[automatically_derived] to all derived implementations

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.2.6...0.3.0

0.2.6 - 2021-10-09

  • [#224] [sea-orm-cli] Date & Time column type mapping
  • Escape rust keywords with r# raw identifier

0.2.5 - 2021-10-06

  • [#227] Resolve "Inserting actual none value of Option results in panic"
  • [#219] [sea-orm-cli] Add --tables option
  • [#189] Add debug_query and debug_query_stmt macro

0.2.4 - 2021-10-01

https://www.sea-ql.org/SeaORM/blog/2021-10-01-whats-new-in-0.2.4

  • [#186] [sea-orm-cli] Foreign key handling
  • [#191] [sea-orm-cli] Unique key handling
  • [#182] find_linked join with alias
  • [#202] Accept both postgres:// and postgresql://
  • [#208] Support fetching T, (T, U), (T, U, P) etc
  • [#209] Rename column name & column enum variant
  • [#207] Support chrono::NaiveDate & chrono::NaiveTime
  • Support Condition::not (from sea-query)

0.2.3 - 2021-09-22

  • [#152] DatabaseConnection impl Clone
  • [#175] Impl TryGetableMany for different types of generics
  • Codegen TimestampWithTimeZone fixup

0.2.2 - 2021-09-18

  • [#105] Compact entity format
  • [#132] Add ActiveModel insert & update
  • [#129] Add set method to UpdateMany
  • [#118] Initial lock support
  • [#167] Add FromQueryResult::find_by_statement

0.2.1 - 2021-09-04

  • Update dependencies

0.2.0 - 2021-09-03

  • [#37] Rocket example
  • [#114] log crate and env-logger
  • [#103] InsertResult to return the primary key's type
  • [#89] Represent several relations between same types by Linked
  • [#59] Transforming an Entity into TableCreateStatement

Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.1.3...0.2.0

0.1.3 - 2021-08-30

  • [#108] Remove impl TryGetable for Option

0.1.2 - 2021-08-23

  • [#68] Added DateTimeWithTimeZone as supported attribute type
  • [#70] Generate arbitrary named entity
  • [#80] Custom column name
  • [#81] Support join on multiple columns
  • [#99] Implement FromStr for ColumnTrait

0.1.1 - 2021-08-08

  • Early release of SeaORM