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.
- Updated Strum to version 0.26 SeaQL#2088
- Renamed
ConnectOptions::pool_options()toConnectOptions::sqlx_pool_options()SeaQL#2145 - Made
sqlx_commonprivate, hidingsqlx_error_to_xxx_errSeaQL#2145
- [sea-orm-cli] Fix
migrate generateon emptymod.rsfiles SeaQL#2064 DerivePartialModelmacro attributeentitynow supportssyn::TypeSeaQL#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()SeaQL#2146
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(" ")
);- Upgrade
sea-schemato0.15.0-rc.3
- Improved Actix example to return 404 not found on unexpected inputs SeaQL#2140
- Re-enable
rocket_okapiexample SeaQL#2136
- [sea-orm-migration] schema helper SeaQL#2099
- Rework SQLite type mappings SeaQL#2078
- Updated
sea-queryto0.31
- Added feature flag
sqlite-use-returning-for-3_35to use SQLite's returning SeaQL#2070 - Added Loco example SeaQL#2092
- [sea-orm-cli] Fix entity generation for non-alphanumeric enum variants SeaQL#1821
- [sea-orm-cli] Fix entity generation for relations with composite keys SeaQL#2071
- Added
ConnectOptions::test_before_acquire
- Added
desctoCursorpaginator SeaQL#2037
- Improve query performance of
Paginator'sCOUNTquery SeaQL#2030 - Added SQLx slow statements logging to
ConnectOptionsSeaQL#2055 - Added
QuerySelect::lock_with_behaviorSeaQL#1867
- [sea-orm-macro] Qualify types in
DeriveValueTypemacro SeaQL#2054
- Fix clippy warnings on 1.75 SeaQL#2057
- [sea-orm-macro] Comment attribute for Entity (
#[sea_orm(comment = "action")]);create_table_from_entitysupports comment SeaQL#2009 - Added "proxy" (feature flag
proxy) to database backend SeaQL#1881, SeaQL#2000
- Cast enums in
is_inandis_not_inSeaQL#2002
- Updated
sea-queryto0.30.5https://github.com/SeaQL/sea-query/releases/tag/0.30.5
- Add source annotations to errors SeaQL#1999
- Updated
sea-queryto0.30.4https://github.com/SeaQL/sea-query/releases/tag/0.30.4
- Implement
StatementBuilderforsea_query::WithQuerySeaQL#1960
- Upgrade
axumexample to0.7SeaQL#1984
- Added method
expr_as_that acceptsselfSeaQL#1979
- Updated
sea-queryto0.30.3https://github.com/SeaQL/sea-query/releases/tag/0.30.3
- Added
#[sea_orm(skip)]forFromQueryResultderive macro SeaQL#1954
- [sea-orm-cli] Fix duplicated active enum use statements on generated entities SeaQL#1953
- [sea-orm-cli] Added
--enum-extra-derivesSeaQL#1934 - [sea-orm-cli] Added
--enum-extra-attributesSeaQL#1952
- Add support for root JSON arrays SeaQL#1898
Now the following works (requires the
json-array/postgres-arrayfeature)!
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "json_struct_vec")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
#[sea_orm(column_type = "Json")]
pub struct_vec: Vec<JsonColumn>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromJsonQueryResult)]
pub struct JsonColumn {
pub value: String,
}- Loader: use
ValueTupleas hash key SeaQL#1868
- Updated
sea-queryto0.30.2https://github.com/SeaQL/sea-query/releases/tag/0.30.2
- [sea-orm-migration] Check if an index exists SeaQL#1828
- Added
cursor_bytoSelectTwoSeaQL#1826
- [sea-orm-cli] Support generation of related entity with composite foreign key SeaQL#1693
- [sea-orm-macro] Fixed
DeriveValueTypeby qualifyingQueryResultSeaQL#1855 - Fixed
Loaderpanic on empty inputs
- Upgraded
salvoto0.50 - Upgraded
chronoto0.4.30SeaQL#1858 - Updated
sea-queryto0.30.1 - Updated
sea-schemato0.14.1
- Added test cases for
find_xxx_related/linkedSeaQL#1811
- Added support for Postgres arrays in
FromQueryResultimpl ofJsonValueSeaQL#1598
- Fixed
find_with_relatedconsolidation logic SeaQL#1800
0.12.0-rc.1: Yanked0.12.0-rc.2: 2023-05-190.12.0-rc.3: 2023-06-220.12.0-rc.4: 2023-07-080.12.0-rc.5: 2023-07-22
- 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
Identitysupports tuple ofDynIdenwith 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,
}- Added macro
DerivePartialModelSeaQL#1597
#[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 errorsSqlErr, 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(_))
));- Added
Select::find_with_linked, similar tofind_with_related: SeaQL#1728, SeaQL#1743
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
DeriveValueTypederive macro for custom wrapper types, implementations of the required traits will be provided, you can customize thecolumn_typeandarray_typeif 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
DeriveDisplayderive macro to implementsstd::fmt::Displayfor 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_exprinDeriveEntityModelSeaQL#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())
);- Introduced new
ConnAcquireErrSeaQL#1737
enum DbErr {
ConnectionAcquire(ConnAcquireErr),
..
}
enum ConnAcquireErr {
Timeout,
ConnectionClosed,
}Added Seaography integration SeaQL#1599
-
Added
DeriveEntityRelatedmacro which will implementseaography::RelationBuilderforRelatedEntityenumeration when theseaographyfeature is enabled -
Added generation of
seaographyrelated information tosea-orm-codegen.The
RelatedEntityenum is added in entities files bysea-orm-cliwhen flagseaographyis 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,
}- Added
seaography_example
- Supports for partial select of
Option<T>model field. ANonevalue will be filled when the select result does not contain theOption<T>field without throwing an error. SeaQL#1513 - [sea-orm-cli] the
migrate initcommand will create a.gitignorefile 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 createm20230503_000000_create_accounts_table.rsfor you SeaQL#1570 - Added
Migration::name()andMigration::status()getters for the name and status ofsea_orm_migration::MigrationSeaQL#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-arrayfeature will be enabled whensqlx-postgresbackend is selected SeaQL#1565 - Replace
Stringparameters in API withInto<String>SeaQL#1439- Implements
IntoMockRowfor anyBTreeMapthat is indexed by stringimpl 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()andColumnTrait::contains()to takes any string
- Implements
- Added
sea_query::{DynIden, RcOrArc, SeaRc}to entity prelude SeaQL#1661 - Added
expr,exprsandexpr_asmethods toQuerySelecttrait SeaQL#1702 - Added
DatabaseConnection::pingSeaQL#1627
|db: DatabaseConnection| {
assert!(db.ping().await.is_ok());
db.clone().close().await;
assert!(matches!(db.ping().await, Err(DbErr::ConnectionAcquire)));
}- Added
TryInsertthat 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)));- Fixed
DeriveActiveEnumthrowing errors becausestring_valueconsists 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>withviaandtomethods 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 implementColumnTypeTraitSeaQL#1576 - Resolved
insert_manyfailing if the models iterator is empty SeaQL#873
- Supports for partial select of
Option<T>model field. ANonevalue will be filled when the select result does not contain theOption<T>field instead of throwing an error. SeaQL#1513 - Replaced
sea-strumdependency with upstreamstruminsea-ormSeaQL#1535- Added
deriveandstrumfeatures tosea-orm-macros - The derive macro
EnumIteris now shipped bysea-orm-macros
- Added
- Added a new variant
ManytoIdentitySeaQL#1508 - Enabled
hashable-valuefeature in SeaQuery, thusValue::Float(NaN) == Value::Float(NaN)would be true SeaQL#1728, SeaQL#1743 - The
DeriveActiveEnumderive macro no longer implementstd::fmt::Display. You can use the newDeriveDisplaymacro SeaQL#1726 sea-query/deriveis no longer enabled bysea-orm, as such,Idenno longer works as a derive macro (it's still a trait). Instead, we are shipping a new macroDeriveIdenSeaQL#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::ConnectionAcquirechanged toConnectionAcquire(ConnAcquireErr)SeaQL#1737 FromJsonQueryResultremoved from entity prelude
- Upgraded
sqlxto0.7SeaQL#1742 - Upgraded
sea-queryto0.30SeaQL#1742 - Upgraded
sea-schemato0.14SeaQL#1742 - Upgraded
synto2SeaQL#1713 - Upgraded
heckto0.4SeaQL#1520, SeaQL#1544 - Upgraded
strumto0.25SeaQL#1752 - Upgraded
clapto4.3SeaQL#1468 - Upgraded
ouroborosto0.17SeaQL#1724
- Replaced
baewithsea-baeSeaQL#1739
Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.11.1...0.12.1
- Re-export
sea_orm::ConnectionTraitinsea_orm_migration::preludeSeaQL#1577 - Support generic structs in
FromQueryResultderive 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,
}- Fixed SeaQL#1608 by pinning the version of
tracing-subscriberdependency to 0.3.17 SeaQL#1609
- Enable required
synfeatures SeaQL#1556 - Re-export
sea_query::BlobSizeinsea_orm::entity::preludeSeaQL#1548
- Fixes
DeriveActiveEnum(by qualifyingColumnTypeTrait::def) SeaQL#1478 - The CLI command
sea-orm-cli generate entity -u '<DB-URL>'will now generate the following code for eachBinaryorVarBinarycolumns 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-formatwill now generate the following code for eachBinaryorVarBinarycolumns 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(),
}
}
}- Fix missing documentation on type generated by derive macros SeaQL#1522, SeaQL#1531
- 2023-02-02:
0.11.0-rc.1 - 2023-02-04:
0.11.0-rc.2
- Simple data loader SeaQL#1238, SeaQL#1443
- Transactions Isolation level and Access mode SeaQL#1230
- Support various UUID formats that are available in
uuid::fmtmodule SeaQL#1325 - Support Vector of enum for Postgres SeaQL#1210
- Support
ActiveEnumfield as primary key SeaQL#1414 - Casting columns as a different data type on select, insert and update SeaQL#1304
- Methods of
ActiveModelBehaviorreceive db connection as a parameter SeaQL#1145, SeaQL#1328 - Added
execute_unpreparedmethod toDatabaseConnectionandDatabaseTransactionSeaQL#1327 - Added
Select::into_tupleto select rows as tuples (instead of defining a custom Model) SeaQL#1311
- Generate
#[serde(skip_deserializing)]for primary key columns SeaQL#846, SeaQL#1186, SeaQL#1318 - Generate
#[serde(skip)]for hidden columns SeaQL#1171, SeaQL#1320 - Generate entity with extra derives and attributes for model struct SeaQL#1124, SeaQL#1321
- Migrations are now performed inside a transaction for Postgres SeaQL#1379
- 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()andMockDatabase::append_query_errors()take any types implementedIntoIteratortrait SeaQL#1367find_by_idanddelete_by_idtake anyIntoprimary key value SeaQL#1362QuerySelect::offsetandQuerySelect::limittakes inInto<Option<u64>>whereNonewould reset them SeaQL#1410- Added
DatabaseConnection::closeSeaQL#1236 - Added
is_nullgetter forColumnDefSeaQL#1381 - Added
ActiveValue::resetto convertUnchangedintoSetSeaQL#1177 - Added
QueryTrait::apply_ifto optionally apply a filter SeaQL#1415 - Added the
sea-orm-internalfeature 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
- Added
- Upgrade
axumto0.6.1SeaQL#1285 - Upgrade
sea-queryto0.28SeaQL#1366 - Upgrade
sea-query-binderto0.3SeaQL#1366 - Upgrade
sea-schemato0.11SeaQL#1366
- Fixed all clippy warnings as of
1.67.0SeaQL#1426 - Removed dependency where not needed SeaQL#1213
- Disabled default features and enabled only the needed ones SeaQL#1300
- Cleanup panic and unwrap SeaQL#1231
- Cleanup the use of
vec!macro SeaQL#1367
- [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 qualifyingIdenStatic::as_str) SeaQL#1280 - Prevent returning connections to pool with a positive transaction depth SeaQL#1283
- Postgres insert many will throw
RecordNotInsertederror if non of them are being inserted SeaQL#1021- Fixes inserting active models by
insert_manywithon_conflictanddo_nothingpanics if no rows are inserted on Postgres SeaQL#899
- Fixes inserting active models by
- Don't call
last_insert_idif 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
- [sea-orm-cli] Enable --universal-time by default SeaQL#1420
- Added
RecordNotInsertedandRecordNotUpdatedtoDbErr - Added
ConnectionTrait::execute_unpreparedmethod SeaQL#1327 - As part of SeaQL#1311, the required method of
TryGetablechanged:
// 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
ActiveModelBehaviortrait becomes async trait SeaQL#1328. If you overridden the defaultActiveModelBehaviorimplementation:
#[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 variantDbErr::RecordNotUpdatedSeaQL#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::ColumnTypewas replaced bysea_query::ColumnTypeSeaQL#1395- Method
ColumnType::defwas moved toColumnTypeTrait ColumnType::Binarybecomes a tuple variant which takes in additional optionsea_query::BlobSizeColumnType::Customtakes asea_query::DynIdeninstead ofStringand thus a new methodcustomis added (note the lowercase)
- Method
// 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(),
}
}
}- Fixed a small typo SeaQL#1391
axumexample should use tokio runtime SeaQL#1428
Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.10.0...0.11.0
- Inserting active models by
insert_manywithon_conflictanddo_nothingpanics if no rows are inserted on Postgres SeaQL#899 - Hitting 'negative last_insert_rowid' panic with Sqlite SeaQL#1357
- Cast enum values when constructing update many query SeaQL#1178
- Fixes
DeriveColumn(by qualifyingIdenStatic::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
- Add
QuerySelect::columnsmethod - select multiple columns SeaQL#1264 - Transactions Isolation level and Access mode SeaQL#1230
DeriveEntityModelderive macro: when parsing field type, always treat field withOption<T>as nullable column SeaQL#1257
- [sea-orm-cli] Generate
Relatedimplementation for many-to-many relation with extra columns SeaQL#1260 - Optimize the default implementation of
TryGetableFromJson::try_get_from_json()- deserializing intoSelfdirectly without the need of a intermediateserde_json::ValueSeaQL#1249
- Fix DeriveActiveEnum expand enum variant starts with number SeaQL#1219
- [sea-orm-cli] Generate entity file for specified tables only SeaQL#1245
- Support appending
DbErrtoMockDatabaseSeaQL#1241
- Filter rows with
IS INenum values expression SeaQL#1183 - [sea-orm-cli] Generate entity with relation variant order by name of reference table SeaQL#1229
- [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
- Added
Insert::exec_without_returningSeaQL#1208
- Remove dependency when not needed SeaQL#1207
- [sea-orm-rocket] added
sqlx_loggingtoConfigSeaQL#1192 - Collecting metrics for
query_one/allSeaQL#1165 - Use GAT to elide
StreamTraitlifetime SeaQL#1161
- corrected the error name
UpdateGetPrimaryKeySeaQL#1180
- Update MSRV to 1.65
- [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
timecrate for SQLite SeaQL#995
- [sea-orm-cli] Generate
Relatedfor 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
-uwhen executingmigrate generatecommand SeaQL#1157 - Prefix the usage of types with
sea_orm::insideDeriveActiveEnumderive macros SeaQL#1146, SeaQL#1154 - [sea-orm-cli] Generate model with
Vec<f32>orVec<f64>should not deriveEqon the model struct SeaQL#1158
- [sea-orm-cli] [sea-orm-migration] Add
clifeature to optionally include dependencies that are required by the CLI SeaQL#978
- Upgrade
sea-schemato 0.10.2 SeaQL#1153
- 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
DeriveRelationon emptyRelationenum SeaQL#1019 - [sea-orm-cli] Generate entity derive
Eqif possible SeaQL#988 - [sea-orm-cli] Run migration on any PostgreSQL schema SeaQL#1056
- Support
distinct&distinct_onexpression SeaQL#902 fn column()also handle enum type SeaQL#973- Added
acquire_timeoutonConnectOptionsSeaQL#897 - [sea-orm-cli]
migrate freshcommand will drop all PostgreSQL types SeaQL#864, SeaQL#991 - Better compile error for entity without primary key SeaQL#1020
- Added blanket implementations of
IntoActiveValueforOptionvalues SeaQL#833 - Added
into_model&into_jsontoCursorSeaQL#1112 - Added
set_schema_search_pathmethod toConnectOptionsfor setting schema search path of PostgreSQL connection SeaQL#1056 - Serialize
timetypes asserde_json::ValueSeaQL#1042 - Implements
fmt::DisplayforActiveEnumSeaQL#986 - Implements
TryFrom<ActiveModel>forModelSeaQL#990
- Trim spaces when paginating raw SQL SeaQL#1094
- Replaced
usizewithu64inPaginatorTraitSeaQL#789 - Type signature of
DbErrchanged as a result of SeaQL#1002 ColumnType::Enumstructure 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_typewas added toValueType:
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 toDynIden:
#[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)
}
...
}- Documentation grammar fixes SeaQL#1050
- Replace
dotenvwithdotenvyin examples SeaQL#1085 - Exclude test_cfg module from SeaORM SeaQL#1077
- Support
rocket_okapiSeaQL#1071
- Upgrade
sea-queryto 0.26 SeaQL#985
Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.9.0...0.10.0
fn column()also handle enum type SeaQL#973- Generate migration in modules SeaQL#933
- Generate
DeriveRelationon emptyRelationenum SeaQL#1019 - Documentation grammar fixes SeaQL#1050
- Implement
IntoActiveValuefortimetypes SeaQL#1041 - Fixed module import for
FromJsonQueryResultderive macro SeaQL#1081
- [sea-orm-cli] Migrator CLI handles init and generate commands SeaQL#931
- [sea-orm-cli] added
with-copy-enumsflag to conditional deriveCopyonActiveEnumSeaQL#936
- Exclude
chronodefault features SeaQL#950 - Set minimal rustc version to
1.60SeaQL#938 - Update
sea-queryto0.26.3
In this minor release, we removed time v0.1 from the dependency graph
- [sea-orm-cli] Codegen support for
VarBinarycolumn type SeaQL#746 - [sea-orm-cli] Generate entity for SYSTEM VERSIONED tables on MariaDB SeaQL#876
RelationDef&RelationBuildershould beSend&SyncSeaQL#898
- Remove unnecessary
async_traitSeaQL#737
- Cursor pagination SeaQL#822
- Custom join on conditions SeaQL#793
DeriveMigrationNameandsea_orm_migration::util::get_file_stemSeaQL#736FromJsonQueryResultfor deserializingJsonfrom query result SeaQL#794
- Added
sqlx_logging_leveltoConnectOptionsSeaQL#800 - Added
num_items_and_pagestoPaginatorSeaQL#768 - Added
TryFromU64fortimeSeaQL#849 - Added
Insert::on_conflictSeaQL#791 - Added
QuerySelect::join_asandQuerySelect::join_as_revSeaQL#852 - Include column name in
TryGetError::NullSeaQL#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
timecrate 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
- Upgrade
clapto 3.2 SeaQL#706 - Upgrade
timeto 0.3 SeaQL#834 - Upgrade
sqlxto 0.6 SeaQL#834 - Upgrade
uuidto 1.0 SeaQL#834 - Upgrade
sea-queryto 0.26 SeaQL#834 - Upgrade
sea-schemato 0.9 SeaQL#834
- Refactor stream metrics SeaQL#778
- [sea-orm-cli] skip checking connection string for credentials SeaQL#851
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.-
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-timewill enablesqlx?/timeonly ifsqlxis already enabled. As a consequence, now the featureswith-json,with-chrono,with-rust_decimal,with-uuid,with-timewill not be enabled as a side-effect of enablingsqlx.
Full Changelog: https://github.com/SeaQL/sea-orm/compare/0.8.0...0.9.0
- Removed
async-stdfrom dependency SeaQL#758
- [sea-orm-cli]
sea migrate generateto generate a new, empty migration file SeaQL#656
- Add
max_connectionsoption to CLI SeaQL#670 - Derive
Eq,CloneforDbErrSeaQL#677 - Add
is_changedtoActiveModelTraitSeaQL#683
- Fix
DerivePrimaryKeywith custom primary key column name SeaQL#694 - Fix
DeriveEntityModelmacros override column name SeaQL#695 - Fix Insert with no value supplied using
DEFAULTSeaQL#589
- Migration utilities are moved from sea-schema to sea-orm repo, under a new sub-crate
sea-orm-migration.sea_schema::migration::preludeshould be replaced bysea_orm_migration::preludein all migration files
- Upgrade
sea-queryto 0.24.x,sea-schemato 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
- 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
- Fix sea-orm-cli error
- Fix sea-orm cannot build without
with-json
- Update ActiveModel by JSON by @billy1624 in SeaQL#492
- Supports
timecrate by @billy1624 SeaQL#602 - Allow for creation of indexes for PostgreSQL and SQLite @nickb937 SeaQL#593
- Added
delete_by_id@ShouvikGhosh2048 SeaQL#590 - Implement
PaginatorTraitforSelectorRaw@shinbunbun SeaQL#617
- 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
Sendbound toQueryStreamandTransactionStreamby @sebpuetz SeaQL#471 - Add
SendtoStreamTraitby @nappa85 SeaQL#622 seaas an alternative bin name tosea-orm-cliby @ZhangHanDong SeaQL#558
- Fix codegen with Enum in expanded format by @billy1624 SeaQL#624
- Fixing and testing into_json of various field types by @billy1624 SeaQL#539
- Exclude
mockfrom default features by @billy1624 SeaQL#562 create_table_from_entitywill no longer create index for MySQL, please use the new methodcreate_index_from_entity
- 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
- 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
DatabaseConnectionClonewith 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
Cloneby 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#554sea-orm-cli generate --with-serdedoes not work on Postgresql custom type SeaQL#581sea-orm-cli generate --expanded-formatpanic 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
- Migration Support by @billy1624 in SeaQL#335
- Support
DateTime<Utc>&DateTime<Local>by @billy1624 in SeaQL#489 - Add
max_lifetimeconnection option by @billy1624 in SeaQL#493
- Model with Generics by @billy1624 in SeaQL#400
- Add Poem example by @sunli829 in SeaQL#446
- Codegen
column_nameproc_macro attribute by @billy1624 in SeaQL#433 - Easy joins with MockDatabase #447 by @cemoktra in SeaQL#455
- 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 derivingFromQueryResultby @smrtrfszm in SeaQL#494
- Name conflict of foreign key constraints when two entities have more than one foreign keys by @billy1624 in SeaQL#417
- Is it possible to have 4 values Composite Key? SeaQL#352
- Support
DateTime<Utc>&DateTime<Local>SeaQL#381 - Codegen
column_nameproc_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
- Why insert, update, etc return an ActiveModel instead of Model? SeaQL#289
- Rework
ActiveValueSeaQL#321 - Some missing ActiveEnum utilities SeaQL#338
- 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
Modelby @billy1624 in SeaQL#339 - Rework
ActiveValueby @billy1624 in SeaQL#340 - Add wrapper method
ModelTrait::deleteby @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-strumlib back tostrumby @billy1624 in SeaQL#361
ActiveModel::insertandActiveModel::updatereturnModelinstead ofActiveModel- Method
ActiveModelBehavior::after_savetakesModelas input instead ofActiveModel - Rename method
sea_orm::unchanged_active_value_not_intended_for_public_usetosea_orm::Unchanged - Rename method
ActiveValue::unsettoActiveValue::not_set - Rename method
ActiveValue::is_unsettoActiveValue::is_not_set PartialEqofActiveValuewill 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
- 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
Delete::many()withTableRefby @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
- Is it possible to have 4 values Composite Key? SeaQL#352
- [sea-orm-cli] Better handling of relation generations SeaQL#239
- 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_examplefail 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
- Disable SQLx query logging SeaQL#290
- Code generated by
sea-orm-clicannot pass clippy SeaQL#296 - Should return detailed error message for connection failure SeaQL#310
DateTimeWithTimeZonedoes not implementSerializeandDeserializeSeaQL#319- Support returning clause to avoid database hits SeaQL#183
- 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
PaginatorTraitandCountTraitfor more constraints by @YoshieraHuang in SeaQL#306 - Continue
PaginatorTraitby @billy1624 in SeaQL#307 - Refactor
Schemaby @billy1624 in SeaQL#309 - Detailed connection errors by @billy1624 in SeaQL#312
- Suppress
ouroborosmissing docs warnings by @billy1624 in SeaQL#288 with-jsonfeature requireschrono/serdeby @billy1624 in SeaQL#320- Pass the argument
entity.table_ref()instead of justentity. by @josh-codes in SeaQL#318 - Unknown types could be a newtypes instead of
ActiveEnumby @billy1624 in SeaQL#324 - Returning by @billy1624 in SeaQL#292
- Refactor
paginate()&count()utilities intoPaginatorTrait. You can use the paginator as usual but you might need to importPaginatorTraitmanually 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
SchemaconvertingEntityTraitinto differentsea-querystatements now has to be initialized withDbBackend.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
ActiveModelagainst PostgreSQL,RETURNINGclause 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
- Support for BYTEA Postgres primary keys SeaQL#286
- Documentation for sea-orm by @charleschege in SeaQL#280
- Support
Vec<u8>primary key by @billy1624 in SeaQL#287
(We are changing our Changelog format from now on)
- Align case transforms across derive macros SeaQL#262
- Added
is_nullandis_not_nulltoColumnTraitSeaQL#267
(The following is generated by GitHub)
- 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
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()withoutunwrap() - [#205] Drop
Defaulttrait bound ofPrimaryKeyTrait::ValueType - [#222] Transaction & streaming
- [#210] Update
ActiveModelBehaviorAPI - [#240] Add derive
DeriveIntoActiveModelandIntoActiveValuetrait - [#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
- [#224] [sea-orm-cli] Date & Time column type mapping
- Escape rust keywords with
r#raw identifier
- [#227] Resolve "Inserting actual none value of Option results in panic"
- [#219] [sea-orm-cli] Add
--tablesoption - [#189] Add
debug_queryanddebug_query_stmtmacro
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_linkedjoin with alias - [#202] Accept both
postgres://andpostgresql:// - [#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)
- [#152] DatabaseConnection impl
Clone - [#175] Impl
TryGetableManyfor different types of generics - Codegen
TimestampWithTimeZonefixup
- [#105] Compact entity format
- [#132] Add ActiveModel
insert&update - [#129] Add
setmethod toUpdateMany - [#118] Initial lock support
- [#167] Add
FromQueryResult::find_by_statement
- Update dependencies
- [#37] Rocket example
- [#114]
logcrate andenv-logger - [#103]
InsertResultto 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
- [#108] Remove impl TryGetable for Option
- [#68] Added
DateTimeWithTimeZoneas supported attribute type - [#70] Generate arbitrary named entity
- [#80] Custom column name
- [#81] Support join on multiple columns
- [#99] Implement FromStr for ColumnTrait
- Early release of SeaORM