What's new in SeaORM 0.6.0
SeaQL
Posted on February 20, 2022
π We are pleased to release SeaORM 0.6.0
today! Here are some feature highlights π:
Migration
[#335] Version control you database schema with migrations written in SeaQuery or in raw SQL. View migration docs to learn more.
-
Setup the migration directory by executing
sea-orm-cli migrate init
.
migration βββ Cargo.toml βββ README.md βββ src βββ lib.rs βββ m20220101_000001_create_table.rs βββ main.rs
-
Defines the migration in SeaQuery.
use sea_schema::migration::prelude::*; pub struct Migration; impl MigrationName for Migration { fn name(&self) -> &str { "m20220101_000001_create_table" } } #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( ... ) .await } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .drop_table( ... ) .await } }
-
Apply the migration by executing
sea-orm-cli migrate
.
$ sea-orm-cli migrate Applying all pending migrations Applying migration 'm20220101_000001_create_table' Migration 'm20220101_000001_create_table' has been applied
Designed by:
Contributed by:
Support DateTimeUtc & DateTimeLocal in Model
[#489] Represents database's timestamp column in Model with attribute of type DateTimeLocal
(chrono::DateTime<Local>
) or DateTimeUtc
(chrono::DateTime<Utc>
).
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "satellite")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub satellite_name: String,
pub launch_date: DateTimeUtc,
pub deployment_date: DateTimeLocal,
}
Proposed by:
Contributed by:
Mock Join Results
[#455] Constructs mock results of related model with tuple of model.
let db = MockDatabase::new(DbBackend::Postgres)
// Mocking result of cake with its related fruit
.append_query_results(vec![vec![(
cake::Model {
id: 1,
name: "Apple Cake".to_owned(),
},
fruit::Model {
id: 2,
name: "Apple".to_owned(),
cake_id: Some(1),
},
)]])
.into_connection();
assert_eq!(
cake::Entity::find()
.find_also_related(fruit::Entity)
.all(&db)
.await?,
vec![(
cake::Model {
id: 1,
name: "Apple Cake".to_owned(),
},
Some(fruit::Model {
id: 2,
name: "Apple".to_owned(),
cake_id: Some(1),
})
)]
);
Proposed by:
Contributed by:
Support Max Connection Lifetime Option
[#493] You can set the maximum lifetime of individual connection with the max_lifetime
method.
let mut opt = ConnectOptions::new("protocol://username:password@host/database".to_owned());
opt.max_lifetime(Duration::from_secs(8))
.max_connections(100)
.min_connections(5)
.connect_timeout(Duration::from_secs(8))
.idle_timeout(Duration::from_secs(8))
.sqlx_logging(true);
let db = Database::connect(opt).await?;
Proposed by:
Contributed by:
SeaORM CLI & Codegen Updates
- [#433] Generates the
column_name
macro attribute for column which is not named in snake case - [#335] Introduces migration subcommands
sea-orm-cli migrate
Proposed by:
Contributed by:
Sponsor
Our GitHub Sponsor profile is up! If you feel generous, a small donation will be greatly appreciated.
A big shout out to our sponsors π:
- Γmile Fugulin
- Zachary Vander Velden
- Shane Sveller
- Sakti Dwi Cahyono
- Unnamed Sponsor
Community
SeaQL is a community driven project. We welcome you to participate, contribute and together build for Rust's future.
Here is the roadmap for SeaORM 0.7.x
.
Posted on February 20, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.