From 06a26ace2ec1e220a0d603e0ebf4bc5995aa5983 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 24 Sep 2021 15:30:41 +0800 Subject: [PATCH 1/4] Codegen parse column unique key from index --- sea-orm-cli/Cargo.toml | 2 +- sea-orm-codegen/Cargo.toml | 2 +- sea-orm-codegen/src/entity/transformer.rs | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sea-orm-cli/Cargo.toml b/sea-orm-cli/Cargo.toml index 0bb557f6..56e2fa4a 100644 --- a/sea-orm-cli/Cargo.toml +++ b/sea-orm-cli/Cargo.toml @@ -22,7 +22,7 @@ clap = { version = "^2.33.3" } dotenv = { version = "^0.15" } async-std = { version = "^1.9", features = [ "attributes" ] } sea-orm-codegen = { version = "^0.2.3", path = "../sea-orm-codegen" } -sea-schema = { version = "^0.2.8", default-features = false, features = [ +sea-schema = { version = "^0.2.8", git = "https://github.com/SeaQL/sea-schema.git", branch = "sea-query/idx-is-unique-key", default-features = false, features = [ "debug-print", "sqlx-mysql", "sqlx-postgres", diff --git a/sea-orm-codegen/Cargo.toml b/sea-orm-codegen/Cargo.toml index c3a2c8cd..fd0be16f 100644 --- a/sea-orm-codegen/Cargo.toml +++ b/sea-orm-codegen/Cargo.toml @@ -15,7 +15,7 @@ name = "sea_orm_codegen" path = "src/lib.rs" [dependencies] -sea-query = { version = "^0.16.2" } +sea-query = { version = "^0.16.2", git = "https://github.com/SeaQL/sea-query.git", branch = "idx-is-unique-key" } syn = { version = "^1", default-features = false, features = [ "derive", "parsing", diff --git a/sea-orm-codegen/src/entity/transformer.rs b/sea-orm-codegen/src/entity/transformer.rs index 840eade0..5e9fc467 100644 --- a/sea-orm-codegen/src/entity/transformer.rs +++ b/sea-orm-codegen/src/entity/transformer.rs @@ -33,6 +33,17 @@ impl EntityTransformer { .get_columns() .iter() .map(|col_def| col_def.into()) + .map(|mut col: Column| { + col.unique = table_create + .get_indexes() + .iter() + .filter(|index| index.is_unique_key()) + .map(|index| index.get_index_spec().get_column_names()) + .filter(|col_names| col_names.len() == 1 && col_names[0] == col.name) + .count() + > 0; + col + }) .collect(); let relations = table_create .get_foreign_key_create_stmts() From 360436ceacdc527ed5a3c4006f9fd66460d3c173 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 24 Sep 2021 15:45:22 +0800 Subject: [PATCH 2/4] Codegen compact-format generate unique attribute --- sea-orm-codegen/src/entity/writer.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sea-orm-codegen/src/entity/writer.rs b/sea-orm-codegen/src/entity/writer.rs index edfbef0b..59f54537 100644 --- a/sea-orm-codegen/src/entity/writer.rs +++ b/sea-orm-codegen/src/entity/writer.rs @@ -346,6 +346,9 @@ impl EntityWriter { attrs.push(quote! { nullable }); } }; + if col.unique { + attrs.push(quote! { unique }); + } if !attrs.is_empty() { let mut ts = TokenStream::new(); for (i, attr) in attrs.into_iter().enumerate() { From 3c608ad9c370b967fbdbf0cf065a101c36fbf07e Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 26 Sep 2021 16:07:06 +0800 Subject: [PATCH 3/4] Bump sea-query --- sea-orm-codegen/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sea-orm-codegen/Cargo.toml b/sea-orm-codegen/Cargo.toml index fd0be16f..aeeab35d 100644 --- a/sea-orm-codegen/Cargo.toml +++ b/sea-orm-codegen/Cargo.toml @@ -15,7 +15,7 @@ name = "sea_orm_codegen" path = "src/lib.rs" [dependencies] -sea-query = { version = "^0.16.2", git = "https://github.com/SeaQL/sea-query.git", branch = "idx-is-unique-key" } +sea-query = { version = "^0.16.4" } syn = { version = "^1", default-features = false, features = [ "derive", "parsing", From 5d50ca922c0ffe1bd577d5dce8b5baf2440ad739 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 26 Sep 2021 16:08:59 +0800 Subject: [PATCH 4/4] Restore cargo --- sea-orm-cli/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sea-orm-cli/Cargo.toml b/sea-orm-cli/Cargo.toml index f31b627c..b9be7096 100644 --- a/sea-orm-cli/Cargo.toml +++ b/sea-orm-cli/Cargo.toml @@ -22,7 +22,7 @@ clap = { version = "^2.33.3" } dotenv = { version = "^0.15" } async-std = { version = "^1.9", features = [ "attributes" ] } sea-orm-codegen = { version = "^0.2.3", path = "../sea-orm-codegen" } -sea-schema = { version = "^0.2.9", git = "https://github.com/SeaQL/sea-schema.git", branch = "sea-query/idx-is-unique-key", default-features = false, features = [ +sea-schema = { version = "^0.2.9", default-features = false, features = [ "debug-print", "sqlx-mysql", "sqlx-postgres",