diff --git a/sea-orm-macros/src/derives/primary_key.rs b/sea-orm-macros/src/derives/primary_key.rs index dec22da8..2dfbcbe4 100644 --- a/sea-orm-macros/src/derives/primary_key.rs +++ b/sea-orm-macros/src/derives/primary_key.rs @@ -47,16 +47,18 @@ pub fn expand_derive_primary_key(ident: Ident, data: Data) -> syn::Result for #ident { - fn into_column(self) -> ::Column { + impl sea_orm::PrimaryKeyToColumn for #ident { + type Column = Column; + + fn into_column(self) -> Self::Column { match self { - #(Self::#variant => Column::#variant,)* + #(Self::#variant => Self::Column::#variant,)* } } - fn from_column(col: ::Column) -> Option { + fn from_column(col: Self::Column) -> Option { match col { - #(Column::#variant => Some(Self::#variant),)* + #(Self::Column::#variant => Some(Self::#variant),)* _ => None, } } diff --git a/src/entity/base.rs b/src/entity/base.rs index 4b51f7ed..64e28113 100644 --- a/src/entity/base.rs +++ b/src/entity/base.rs @@ -20,7 +20,7 @@ pub trait EntityTrait: EntityName { type Relation: RelationTrait; - type PrimaryKey: PrimaryKeyTrait + PrimaryKeyToColumn; + type PrimaryKey: PrimaryKeyTrait + PrimaryKeyToColumn; fn has_one(entity: R) -> RelationBuilder where @@ -78,7 +78,6 @@ pub trait EntityTrait: EntityName { fn find_by(values: V) -> Select where V: IntoValueTuple, - Self::PrimaryKey: PrimaryKeyToColumn, { let mut select = Self::find(); let mut keys = Self::PrimaryKey::iter(); diff --git a/src/entity/primary_key.rs b/src/entity/primary_key.rs index 7f004b40..5fa3658d 100644 --- a/src/entity/primary_key.rs +++ b/src/entity/primary_key.rs @@ -1,12 +1,13 @@ -use super::{EntityTrait, IdenStatic, Iterable}; +use super::{ColumnTrait, IdenStatic, Iterable}; pub trait PrimaryKeyTrait: IdenStatic + Iterable {} -pub trait PrimaryKeyToColumn -where - E: EntityTrait, -{ - fn into_column(self) -> E::Column; +pub trait PrimaryKeyToColumn { + type Column: ColumnTrait; - fn from_column(col: E::Column) -> Option where Self: std::marker::Sized; + fn into_column(self) -> Self::Column; + + fn from_column(col: Self::Column) -> Option + where + Self: Sized; } diff --git a/src/query/update.rs b/src/query/update.rs index e9719131..7e40f1c0 100644 --- a/src/query/update.rs +++ b/src/query/update.rs @@ -86,18 +86,18 @@ where #[cfg(test)] mod tests { use crate::tests_cfg::{cake, fruit}; - use crate::{Update, QueryTrait, Val}; + use crate::{QueryTrait, Update, Val}; use sea_query::PostgresQueryBuilder; #[test] fn update_1() { assert_eq!( Update::::new(cake::ActiveModel { - id: Val::set(1), - name: Val::set("Apple Pie".to_owned()), - }) - .build(PostgresQueryBuilder) - .to_string(), + id: Val::set(1), + name: Val::set("Apple Pie".to_owned()), + }) + .build(PostgresQueryBuilder) + .to_string(), r#"UPDATE "cake" SET "name" = 'Apple Pie' WHERE "cake"."id" = 1"#, ); } @@ -106,12 +106,12 @@ mod tests { fn update_2() { assert_eq!( Update::::new(fruit::ActiveModel { - id: Val::set(1), - name: Val::set("Orange".to_owned()), - cake_id: Val::unset(), - }) - .build(PostgresQueryBuilder) - .to_string(), + id: Val::set(1), + name: Val::set("Orange".to_owned()), + cake_id: Val::unset(), + }) + .build(PostgresQueryBuilder) + .to_string(), r#"UPDATE "fruit" SET "name" = 'Orange' WHERE "fruit"."id" = 1"#, ); } @@ -120,13 +120,13 @@ mod tests { fn update_3() { assert_eq!( Update::::new(fruit::ActiveModel { - id: Val::set(2), - name: Val::unset(), - cake_id: Val::set(Some(3)), - }) - .build(PostgresQueryBuilder) - .to_string(), + id: Val::set(2), + name: Val::unset(), + cake_id: Val::set(Some(3)), + }) + .build(PostgresQueryBuilder) + .to_string(), r#"UPDATE "fruit" SET "cake_id" = 3 WHERE "fruit"."id" = 2"#, ); } -} \ No newline at end of file +}