From 46283ea1858d0e4c6e235537fd95c9eff51dbf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Houl=C3=A9?= Date: Wed, 11 Mar 2020 09:53:22 +0100 Subject: [PATCH] Fix @unique on composite relation fields closes https://github.com/prisma/prisma-engines/issues/572 --- .../src/sql_schema_calculator.rs | 2 +- .../tests/migrations/sql.rs | 29 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/migration-engine/connectors/sql-migration-connector/src/sql_schema_calculator.rs b/migration-engine/connectors/sql-migration-connector/src/sql_schema_calculator.rs index b2d04b9ffd66..795f07062675 100644 --- a/migration-engine/connectors/sql-migration-connector/src/sql_schema_calculator.rs +++ b/migration-engine/connectors/sql-migration-connector/src/sql_schema_calculator.rs @@ -142,7 +142,7 @@ impl<'a> SqlSchemaCalculator<'a> { if f.is_unique() { Some(sql::Index { name: format!("{}.{}", &model.db_name(), &f.db_name()), - columns: vec![f.db_name().to_owned()], + columns: f.data_source_fields().iter().map(|f| f.name.clone()).collect(), tpe: sql::IndexType::Unique, }) } else { diff --git a/migration-engine/migration-engine-tests/tests/migrations/sql.rs b/migration-engine/migration-engine-tests/tests/migrations/sql.rs index 1b16062bf2fb..e004356516fc 100644 --- a/migration-engine/migration-engine-tests/tests/migrations/sql.rs +++ b/migration-engine/migration-engine-tests/tests/migrations/sql.rs @@ -251,7 +251,7 @@ async fn multi_field_id_as_part_of_relation_must_work(api: &TestApi) -> TestResu Ok(()) } -#[test_each_connector(tags("sql"), log = "debug")] +#[test_each_connector(tags("sql"))] async fn remapped_multi_field_id_as_part_of_relation_must_work(api: &TestApi) -> TestResult { let dm = r##" model Cat { @@ -278,3 +278,30 @@ async fn remapped_multi_field_id_as_part_of_relation_must_work(api: &TestApi) -> Ok(()) } + +#[test_each_connector(tags("sql"))] +async fn unique_constraints_on_composite_relation_fields(api: &TestApi) -> TestResult { + let dm = r##" + model Parent { + id Int @id + child Child @relation(references: [id, c]) @unique + p String + } + + model Child { + id Int @id + c String + parent Parent + + @@unique([id, c]) + } + "##; + + api.infer_apply(dm).send_assert().await?.assert_green()?; + + api.assert_schema().await?.assert_table("Parent", |table| { + table.assert_index_on_columns(&["child_id", "child_c"], |idx| idx.assert_is_unique()) + })?; + + Ok(()) +}