From ca56f2790941480753b413ed4c86da4d509515fc Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 3 Sep 2021 16:20:57 +0800 Subject: [PATCH 1/2] cargo clippy --- .github/workflows/rust.yml | 18 ++++++++++++++++++ tests/basic.rs | 3 +-- tests/common/mod.rs | 2 +- tests/common/setup/schema.rs | 3 +-- tests/crud/create_cake.rs | 3 +-- tests/crud/create_lineitem.rs | 1 - tests/crud/create_order.rs | 1 - tests/crud/mod.rs | 16 +++++++++++----- tests/crud/updates.rs | 6 +++--- tests/crud_tests.rs | 32 ++++++++++++++++---------------- tests/primary_key_tests.rs | 5 +++-- tests/query_tests.rs | 6 +++--- tests/relational_tests.rs | 12 ++++++------ tests/sequential_op_tests.rs | 12 ++++++------ 14 files changed, 70 insertions(+), 50 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 426cb003..f2fc7579 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -11,6 +11,24 @@ env: jobs: + clippy: + name: Clippy + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + components: clippy + override: true + + - uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-targets + compile-sqlite: name: Compile SQLite runs-on: ubuntu-20.04 diff --git a/tests/basic.rs b/tests/basic.rs index 78e3f25c..e62f1ad6 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -1,7 +1,6 @@ pub mod common; -#[allow(unused_imports)] -use sea_orm::{entity::*, error::*, sea_query, tests_cfg::*, Database, DbConn}; +pub use sea_orm::{entity::*, error::*, sea_query, tests_cfg::*, Database, DbConn}; // DATABASE_URL="sqlite::memory:" cargo test --features sqlx-sqlit,runtime-async-std --test basic #[sea_orm_macros::test] diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 54630999..2392ff72 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -19,7 +19,7 @@ impl TestContext { let db: DatabaseConnection = setup::setup(&base_url, test_name).await; Self { - base_url: base_url, + base_url, db_name: test_name.to_string(), db, } diff --git a/tests/common/setup/schema.rs b/tests/common/setup/schema.rs index 32e7d8a5..e3844dd2 100644 --- a/tests/common/setup/schema.rs +++ b/tests/common/setup/schema.rs @@ -1,11 +1,10 @@ +pub use super::super::bakery_chain::*; use pretty_assertions::assert_eq; use sea_orm::{ entity_to_table_create_statement, error::*, sea_query, DbConn, EntityTrait, ExecResult, }; use sea_query::{ColumnDef, ForeignKey, ForeignKeyAction, Index, Table, TableCreateStatement}; -pub use super::super::bakery_chain::*; - async fn create_table( db: &DbConn, stmt: &TableCreateStatement, diff --git a/tests/crud/create_cake.rs b/tests/crud/create_cake.rs index eea74350..4fa914a5 100644 --- a/tests/crud/create_cake.rs +++ b/tests/crud/create_cake.rs @@ -51,7 +51,6 @@ pub async fn test_create_cake(db: &DbConn) { let cake_baker = cakes_bakers::ActiveModel { cake_id: Set(cake_insert_res.last_insert_id as i32), baker_id: Set(baker_insert_res.last_insert_id as i32), - ..Default::default() }; let cake_baker_res = CakesBakers::insert(cake_baker.clone()) .exec(db) @@ -70,7 +69,7 @@ pub async fn test_create_cake(db: &DbConn) { let cake_model = cake.unwrap(); assert_eq!(cake_model.name, "Mud Cake"); assert_eq!(cake_model.price, dec!(10.25)); - assert_eq!(cake_model.gluten_free, false); + assert!(!cake_model.gluten_free); assert_eq!( cake_model .find_related(Bakery) diff --git a/tests/crud/create_lineitem.rs b/tests/crud/create_lineitem.rs index 9acba961..da82cc82 100644 --- a/tests/crud/create_lineitem.rs +++ b/tests/crud/create_lineitem.rs @@ -50,7 +50,6 @@ pub async fn test_create_lineitem(db: &DbConn) { let cake_baker = cakes_bakers::ActiveModel { cake_id: Set(cake_insert_res.last_insert_id as i32), baker_id: Set(baker_insert_res.last_insert_id as i32), - ..Default::default() }; let cake_baker_res = CakesBakers::insert(cake_baker.clone()) .exec(db) diff --git a/tests/crud/create_order.rs b/tests/crud/create_order.rs index 8d10cfcd..ba8ff09b 100644 --- a/tests/crud/create_order.rs +++ b/tests/crud/create_order.rs @@ -50,7 +50,6 @@ pub async fn test_create_order(db: &DbConn) { let cake_baker = cakes_bakers::ActiveModel { cake_id: Set(cake_insert_res.last_insert_id as i32), baker_id: Set(baker_insert_res.last_insert_id as i32), - ..Default::default() }; let cake_baker_res = CakesBakers::insert(cake_baker.clone()) .exec(db) diff --git a/tests/crud/mod.rs b/tests/crud/mod.rs index 7e024055..916878c8 100644 --- a/tests/crud/mod.rs +++ b/tests/crud/mod.rs @@ -1,7 +1,3 @@ -use sea_orm::{entity::*, DbConn}; - -pub use super::common::bakery_chain::*; - pub mod create_baker; pub mod create_cake; pub mod create_lineitem; @@ -9,6 +5,16 @@ pub mod create_order; pub mod deletes; pub mod updates; +pub use create_baker::*; +pub use create_cake::*; +pub use create_lineitem::*; +pub use create_order::*; +pub use deletes::*; +pub use updates::*; + +pub use super::common::bakery_chain::*; +use sea_orm::{entity::*, DbConn}; + pub async fn test_create_bakery(db: &DbConn) { let seaside_bakery = bakery::ActiveModel { name: Set("SeaSide Bakery".to_owned()), @@ -28,7 +34,7 @@ pub async fn test_create_bakery(db: &DbConn) { assert!(bakery.is_some()); let bakery_model = bakery.unwrap(); assert_eq!(bakery_model.name, "SeaSide Bakery"); - assert_eq!(bakery_model.profit_margin, 10.4); + assert!((bakery_model.profit_margin - 10.4).abs() < f64::EPSILON); } pub async fn test_create_customer(db: &DbConn) { diff --git a/tests/crud/updates.rs b/tests/crud/updates.rs index 172c9c21..83b9a5d3 100644 --- a/tests/crud/updates.rs +++ b/tests/crud/updates.rs @@ -36,7 +36,7 @@ pub async fn test_update_cake(db: &DbConn) { let cake_model = cake.unwrap(); assert_eq!(cake_model.name, "Mud Cake"); assert_eq!(cake_model.price, dec!(10.25)); - assert_eq!(cake_model.gluten_free, false); + assert!(!cake_model.gluten_free); let mut cake_am: cake::ActiveModel = cake_model.into(); cake_am.name = Set("Extra chocolate mud cake".to_owned()); @@ -75,7 +75,7 @@ pub async fn test_update_bakery(db: &DbConn) { assert!(bakery.is_some()); let bakery_model = bakery.unwrap(); assert_eq!(bakery_model.name, "SeaSide Bakery"); - assert_eq!(bakery_model.profit_margin, 10.4); + assert!((bakery_model.profit_margin - 10.40).abs() < f64::EPSILON); let mut bakery_am: bakery::ActiveModel = bakery_model.into(); bakery_am.name = Set("SeaBreeze Bakery".to_owned()); @@ -92,7 +92,7 @@ pub async fn test_update_bakery(db: &DbConn) { .expect("could not find bakery"); let bakery_model = bakery.unwrap(); assert_eq!(bakery_model.name, "SeaBreeze Bakery"); - assert_eq!(bakery_model.profit_margin, 12.00); + assert!((bakery_model.profit_margin - 12.00).abs() < f64::EPSILON); } pub async fn test_update_deleted_customer(db: &DbConn) { diff --git a/tests/crud_tests.rs b/tests/crud_tests.rs index 3c26ddfd..7edb3500 100644 --- a/tests/crud_tests.rs +++ b/tests/crud_tests.rs @@ -1,10 +1,10 @@ -use sea_orm::DatabaseConnection; - pub mod common; -pub use common::{bakery_chain::*, setup::*, TestContext}; - mod crud; +pub use common::{bakery_chain::*, setup::*, TestContext}; +pub use crud::*; +use sea_orm::DatabaseConnection; + // Run the test locally: // DATABASE_URL="mysql://root:root@localhost" cargo test --features sqlx-mysql,runtime-async-std --test crud_tests // DATABASE_URL="postgres://root:root@localhost" cargo test --features sqlx-postgres,runtime-async-std --test crud_tests @@ -20,18 +20,18 @@ async fn main() { ctx.delete().await; } -async fn create_entities(db: &DatabaseConnection) { - crud::test_create_bakery(db).await; - crud::create_baker::test_create_baker(db).await; - crud::test_create_customer(db).await; - crud::create_cake::test_create_cake(db).await; - crud::create_lineitem::test_create_lineitem(db).await; - crud::create_order::test_create_order(db).await; +pub async fn create_entities(db: &DatabaseConnection) { + test_create_bakery(db).await; + test_create_baker(db).await; + test_create_customer(db).await; + test_create_cake(db).await; + test_create_lineitem(db).await; + test_create_order(db).await; - crud::updates::test_update_cake(db).await; - crud::updates::test_update_bakery(db).await; - crud::updates::test_update_deleted_customer(db).await; + test_update_cake(db).await; + test_update_bakery(db).await; + test_update_deleted_customer(db).await; - crud::deletes::test_delete_cake(db).await; - crud::deletes::test_delete_bakery(db).await; + test_delete_cake(db).await; + test_delete_bakery(db).await; } diff --git a/tests/primary_key_tests.rs b/tests/primary_key_tests.rs index 74dd46e5..ea8255e9 100644 --- a/tests/primary_key_tests.rs +++ b/tests/primary_key_tests.rs @@ -1,6 +1,7 @@ -use sea_orm::{entity::prelude::*, DatabaseConnection, Set}; pub mod common; + pub use common::{bakery_chain::*, setup::*, TestContext}; +use sea_orm::{entity::prelude::*, DatabaseConnection, Set}; use uuid::Uuid; #[sea_orm_macros::test] @@ -19,7 +20,7 @@ async fn main() -> Result<(), DbErr> { Ok(()) } -async fn create_metadata(db: &DatabaseConnection) -> Result<(), DbErr> { +pub async fn create_metadata(db: &DatabaseConnection) -> Result<(), DbErr> { let metadata = metadata::ActiveModel { uuid: Set(Uuid::new_v4()), key: Set("markup".to_owned()), diff --git a/tests/query_tests.rs b/tests/query_tests.rs index 4e905686..2b5a2295 100644 --- a/tests/query_tests.rs +++ b/tests/query_tests.rs @@ -1,8 +1,8 @@ -use sea_orm::entity::*; -use sea_orm::QueryFilter; - pub mod common; + pub use common::{bakery_chain::*, setup::*, TestContext}; +pub use sea_orm::entity::*; +pub use sea_orm::QueryFilter; // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test query_tests diff --git a/tests/relational_tests.rs b/tests/relational_tests.rs index c950ddc6..caef9c3c 100644 --- a/tests/relational_tests.rs +++ b/tests/relational_tests.rs @@ -1,11 +1,11 @@ -use chrono::offset::Utc; -use rust_decimal::prelude::*; -use rust_decimal_macros::dec; -use sea_orm::{entity::*, query::*, DbErr, FromQueryResult}; -use uuid::Uuid; - pub mod common; + +pub use chrono::offset::Utc; pub use common::{bakery_chain::*, setup::*, TestContext}; +pub use rust_decimal::prelude::*; +pub use rust_decimal_macros::dec; +pub use sea_orm::{entity::*, query::*, DbErr, FromQueryResult}; +pub use uuid::Uuid; // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std-native-tls --test relational_tests diff --git a/tests/sequential_op_tests.rs b/tests/sequential_op_tests.rs index 6c490762..28333d84 100644 --- a/tests/sequential_op_tests.rs +++ b/tests/sequential_op_tests.rs @@ -1,11 +1,11 @@ -use chrono::offset::Utc; -use rust_decimal::prelude::*; -use rust_decimal_macros::dec; -use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult}; -use uuid::Uuid; - pub mod common; + +pub use chrono::offset::Utc; pub use common::{bakery_chain::*, setup::*, TestContext}; +pub use rust_decimal::prelude::*; +pub use rust_decimal_macros::dec; +pub use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult}; +pub use uuid::Uuid; // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test sequential_op_tests From e852a09498e7a7ad8ad24af5688f1f77d148d05f Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 3 Sep 2021 16:51:22 +0800 Subject: [PATCH 2/2] cargo clippy --- .github/workflows/rust.yml | 2 +- sea-orm-codegen/src/entity/column.rs | 27 +++++------------------ sea-orm-codegen/src/entity/transformer.rs | 14 ++++++------ sea-orm-codegen/src/entity/writer.rs | 2 +- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f2fc7579..b7f014e1 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -27,7 +27,7 @@ jobs: - uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - args: --all-targets + args: --all-targets --all compile-sqlite: name: Compile SQLite diff --git a/sea-orm-codegen/src/entity/column.rs b/sea-orm-codegen/src/entity/column.rs index a2c3b4f5..0b9eb8de 100644 --- a/sea-orm-codegen/src/entity/column.rs +++ b/sea-orm-codegen/src/entity/column.rs @@ -119,33 +119,18 @@ impl From<&ColumnDef> for Column { Some(ty) => ty.clone(), None => panic!("ColumnType should not be empty"), }; - let auto_increments: Vec = col_def + let auto_increment = col_def .get_column_spec() .iter() - .filter_map(|spec| match spec { - ColumnSpec::AutoIncrement => Some(true), - _ => None, - }) - .collect(); - let auto_increment = !auto_increments.is_empty(); - let not_nulls: Vec = col_def + .any(|spec| matches!(spec, ColumnSpec::AutoIncrement)); + let not_null = col_def .get_column_spec() .iter() - .filter_map(|spec| match spec { - ColumnSpec::NotNull => Some(true), - _ => None, - }) - .collect(); - let not_null = !not_nulls.is_empty(); - let uniques: Vec = col_def + .any(|spec| matches!(spec, ColumnSpec::NotNull)); + let unique = col_def .get_column_spec() .iter() - .filter_map(|spec| match spec { - ColumnSpec::UniqueKey => Some(true), - _ => None, - }) - .collect(); - let unique = !uniques.is_empty(); + .any(|spec| matches!(spec, ColumnSpec::UniqueKey)); Self { name, col_type, diff --git a/sea-orm-codegen/src/entity/transformer.rs b/sea-orm-codegen/src/entity/transformer.rs index 75dc25c7..840eade0 100644 --- a/sea-orm-codegen/src/entity/transformer.rs +++ b/sea-orm-codegen/src/entity/transformer.rs @@ -34,11 +34,6 @@ impl EntityTransformer { .iter() .map(|col_def| col_def.into()) .collect(); - let unique_columns: Vec = columns - .iter() - .filter(|col| col.unique) - .map(|col| col.name.clone()) - .collect(); let relations = table_create .get_foreign_key_create_stmts() .iter() @@ -85,8 +80,13 @@ impl EntityTransformer { false => { let ref_table = rel.ref_table; let mut unique = true; - for col in rel.columns.iter() { - if !unique_columns.contains(col) { + for column in rel.columns.iter() { + if !entity + .columns + .iter() + .filter(|col| col.unique) + .any(|col| col.name.as_str() == column) + { unique = false; break; } diff --git a/sea-orm-codegen/src/entity/writer.rs b/sea-orm-codegen/src/entity/writer.rs index 7accac2d..19e9af1c 100644 --- a/sea-orm-codegen/src/entity/writer.rs +++ b/sea-orm-codegen/src/entity/writer.rs @@ -308,7 +308,7 @@ mod tests { use sea_query::ColumnType; use std::io::{self, BufRead, BufReader}; - const ENTITY_FILES: [&'static str; 5] = [ + const ENTITY_FILES: [&str; 5] = [ include_str!("../../tests/entity/cake.rs"), include_str!("../../tests/entity/cake_filling.rs"), include_str!("../../tests/entity/filling.rs"),