This content originally appeared on DEV Community and was authored by SeaQL
🎉 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_namemacro 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.
This content originally appeared on DEV Community and was authored by SeaQL
SeaQL | Sciencx (2022-02-20T02:29:19+00:00) What’s new in SeaORM 0.6.0. Retrieved from https://www.scien.cx/2022/02/20/whats-new-in-seaorm-0-6-0/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.