From a746f8b8636a5016bc7c67cbe41587c4f8e1f991 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Wed, 2 Jun 2021 21:17:01 +0800 Subject: [PATCH] Refactor ModelTrait --- sea-orm-macros/src/derives/model.rs | 4 +++- src/entity/base.rs | 10 +++++----- src/entity/model.rs | 13 ------------- src/entity/primary_key.rs | 2 +- src/query/helper.rs | 1 - src/query/mod.rs | 2 ++ 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/sea-orm-macros/src/derives/model.rs b/sea-orm-macros/src/derives/model.rs index a09d6157..dd81ce1b 100644 --- a/sea-orm-macros/src/derives/model.rs +++ b/sea-orm-macros/src/derives/model.rs @@ -42,10 +42,12 @@ pub fn expand_derive_model(ident: Ident, data: Data) -> syn::Result #(::Column::#name => self.#field = v.unwrap()),* } } + } + impl sea_orm::FromQueryResult for #ident { fn from_query_result(row: &sea_orm::QueryResult, pre: &str) -> Result { Ok(Self { - #(#field: row.try_get(pre, ::Column::#name.as_str().into())?),* + #(#field: row.try_get(pre, <::Entity as EntityTrait>::Column::#name.as_str().into())?),* }) } } diff --git a/src/entity/base.rs b/src/entity/base.rs index 927fa6e5..3f9c680d 100644 --- a/src/entity/base.rs +++ b/src/entity/base.rs @@ -1,7 +1,7 @@ use crate::{ - ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel, - PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, RelationBuilder, RelationTrait, RelationType, - Select, + ActiveModelOf, ActiveModelTrait, ColumnTrait, FromQueryResult, Insert, ModelTrait, + OneOrManyActiveModel, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, RelationBuilder, + RelationTrait, RelationType, Select, }; use sea_query::{Iden, IntoValueTuple}; use std::fmt::Debug; @@ -14,13 +14,13 @@ pub trait IdenStatic: Iden + Copy + Debug + 'static { pub trait EntityName: IdenStatic + Default {} pub trait EntityTrait: EntityName { - type Model: ModelTrait; + type Model: ModelTrait + FromQueryResult; type Column: ColumnTrait; type Relation: RelationTrait; - type PrimaryKey: PrimaryKeyTrait; + type PrimaryKey: PrimaryKeyTrait + PrimaryKeyToColumn; fn has_one(entity: R) -> RelationBuilder where diff --git a/src/entity/model.rs b/src/entity/model.rs index b2ef11a1..eab2e533 100644 --- a/src/entity/model.rs +++ b/src/entity/model.rs @@ -8,10 +8,6 @@ pub trait ModelTrait: Clone + Debug { fn get(&self, c: ::Column) -> Value; fn set(&mut self, c: ::Column, v: Value); - - fn from_query_result(res: &QueryResult, pre: &str) -> Result - where - Self: Sized; } pub trait FromQueryResult { @@ -19,12 +15,3 @@ pub trait FromQueryResult { where Self: Sized; } - -impl FromQueryResult for M -where - M: ModelTrait + Sized, -{ - fn from_query_result(res: &QueryResult, pre: &str) -> Result { - ::from_query_result(res, pre) - } -} diff --git a/src/entity/primary_key.rs b/src/entity/primary_key.rs index f51007c9..0ea5ee3f 100644 --- a/src/entity/primary_key.rs +++ b/src/entity/primary_key.rs @@ -1,4 +1,4 @@ -use super::{IdenStatic, Iterable, EntityTrait}; +use super::{EntityTrait, IdenStatic, Iterable}; pub trait PrimaryKeyTrait: IdenStatic + Iterable {} diff --git a/src/query/helper.rs b/src/query/helper.rs index c5fdb168..43ae6662 100644 --- a/src/query/helper.rs +++ b/src/query/helper.rs @@ -226,7 +226,6 @@ pub trait QueryFilter: Sized { fn belongs_to(mut self, model: &E::Model) -> Self where E: EntityTrait, - E::PrimaryKey: PrimaryKeyToColumn<::Entity>, { for key in E::PrimaryKey::iter() { let col = key.into_column(); diff --git a/src/query/mod.rs b/src/query/mod.rs index 87e624c7..6c0c7e82 100644 --- a/src/query/mod.rs +++ b/src/query/mod.rs @@ -7,6 +7,7 @@ mod json; mod result; mod select; mod traits; +// mod update; // pub use combine::*; pub use helper::*; @@ -17,3 +18,4 @@ pub use json::*; pub use result::*; pub use select::*; pub use traits::*; +// pub use update::*;