Skip to content

Commit

Permalink
Merge pull request #3249 from prisma/integration/referentialIntegrity…
Browse files Browse the repository at this point in the history
…-to-relationMode

feat: rename 'referentialIntegrity' to 'relationMode'
  • Loading branch information
jkomyno committed Sep 30, 2022
2 parents 169a882 + ce00788 commit 05756aa
Show file tree
Hide file tree
Showing 72 changed files with 502 additions and 303 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ impl IntrospectionContext {
}

pub fn foreign_keys_enabled(&self) -> bool {
self.source.referential_integrity().uses_foreign_keys()
self.source.relation_mode().uses_foreign_keys()
}

pub fn schema_string(&self) -> &str {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,12 +250,11 @@ impl TestApi {
}

pub fn datasource_block(&self) -> DatasourceBlock<'_> {
let no_foreign_keys =
self.is_vitess() && self.preview_features().contains(PreviewFeature::ReferentialIntegrity);
let no_foreign_keys = self.is_vitess() && self.preview_features().contains(PreviewFeature::RelationMode);

if no_foreign_keys {
self.args
.datasource_block(&self.connection_string, &[("referentialIntegrity", r#""prisma""#)])
.datasource_block(&self.connection_string, &[("relationMode", r#""prisma""#)])
} else {
self.args.datasource_block(r#"env(TEST_DATABASE_URL)"#, &[])
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use barrel::types;
use indoc::indoc;
use introspection_engine_tests::test_api::*;

#[test_connector(tags(Mysql), exclude(Vitess), preview_features("referentialIntegrity"))]
async fn referential_integrity_parameter_is_not_added(api: &TestApi) -> TestResult {
#[test_connector(tags(Mysql), exclude(Vitess), preview_features("relationMode"))]
async fn relation_mode_parameter_is_not_added(api: &TestApi) -> TestResult {
let result = api.re_introspect("").await?;
assert!(!result.contains(r#"referentialIntegrity = "#));
assert!(!result.contains(r#"relationMode = "#));

Ok(())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ use introspection_engine_tests::test_api::*;
use quaint::prelude::Queryable;
use test_macros::test_connector;

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
async fn referential_integrity_parameter_is_not_removed(api: &TestApi) -> TestResult {
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn relation_mode_parameter_is_not_removed(api: &TestApi) -> TestResult {
let result = api.re_introspect("").await?;
assert!(result.contains(r#"referentialIntegrity = "prisma""#));
assert!(result.contains(r#"relationMode = "prisma""#));

Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn relations_are_not_removed(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -58,7 +58,7 @@ async fn relations_are_not_removed(api: &TestApi) -> TestResult {
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn warning_is_given_for_copied_relations(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -108,7 +108,7 @@ async fn warning_is_given_for_copied_relations(api: &TestApi) -> TestResult {
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn no_warnings_are_given_for_if_no_relations_were_copied(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -141,7 +141,7 @@ async fn no_warnings_are_given_for_if_no_relations_were_copied(api: &TestApi) ->
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn relations_field_order_is_kept(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -187,7 +187,7 @@ async fn relations_field_order_is_kept(api: &TestApi) -> TestResult {
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn relations_field_order_is_kept_if_having_new_fields(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -235,7 +235,7 @@ async fn relations_field_order_is_kept_if_having_new_fields(api: &TestApi) -> Te
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn relations_field_order_is_kept_if_removing_fields(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -282,7 +282,7 @@ async fn relations_field_order_is_kept_if_removing_fields(api: &TestApi) -> Test
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn deleting_models_will_delete_relations(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -335,7 +335,7 @@ async fn deleting_models_will_delete_relations(api: &TestApi) -> TestResult {
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn field_renames_keeps_the_relation_intact(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down Expand Up @@ -381,7 +381,7 @@ async fn field_renames_keeps_the_relation_intact(api: &TestApi) -> TestResult {
Ok(())
}

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
async fn referential_actions_are_kept_intact(api: &TestApi) -> TestResult {
let dml = indoc! {r#"
CREATE TABLE `A` (
Expand Down
2 changes: 1 addition & 1 deletion libs/dml/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub fn find_model_by_db_name<'a>(datamodel: &'a Datamodel, db_name: &str) -> Opt

/// Validated schema -> dml::Datamodel.
pub fn lift(schema: &ValidatedSchema) -> crate::Datamodel {
lift::LiftAstToDml::new(&schema.db, schema.connector, schema.referential_integrity()).lift()
lift::LiftAstToDml::new(&schema.db, schema.connector, schema.relation_mode()).lift()
}

/// Renders the datamodel _without configuration blocks_.
Expand Down
14 changes: 7 additions & 7 deletions libs/dml/src/lift.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{self as dml, *};
use either::Either;
use psl_core::{
datamodel_connector::{walker_ext_traits::*, Connector, ReferentialIntegrity},
datamodel_connector::{walker_ext_traits::*, Connector, RelationMode},
parser_database::{
self as db,
ast::{self, WithDocumentation, WithName, WithSpan},
Expand Down Expand Up @@ -30,19 +30,19 @@ use std::collections::HashMap;
pub(crate) struct LiftAstToDml<'a> {
db: &'a db::ParserDatabase,
connector: &'static dyn Connector,
referential_integrity: ReferentialIntegrity,
relation_mode: RelationMode,
}

impl<'a> LiftAstToDml<'a> {
pub(crate) fn new(
db: &'a db::ParserDatabase,
connector: &'static dyn Connector,
referential_integrity: ReferentialIntegrity,
relation_mode: RelationMode,
) -> LiftAstToDml<'a> {
LiftAstToDml {
db,
connector,
referential_integrity,
relation_mode,
}
}

Expand Down Expand Up @@ -86,7 +86,7 @@ impl<'a> LiftAstToDml<'a> {
field_ids_for_sorting: &mut HashMap<(&'a str, &'a str), ast::FieldId>,
) {
let active_connector = self.connector;
let referential_integrity = self.referential_integrity;
let relation_mode = self.relation_mode;
let common_dml_fields = |field: &mut dml::RelationField, relation_field: RelationFieldWalker<'_>| {
let ast_field = relation_field.ast_field();
field.relation_info.on_delete = relation_field
Expand All @@ -99,9 +99,9 @@ impl<'a> LiftAstToDml<'a> {
field.documentation = ast_field.documentation().map(String::from);
field.is_ignored = relation_field.is_ignored();
field.supports_restrict_action(
active_connector.supports_referential_action(&referential_integrity, db::ReferentialAction::Restrict),
active_connector.supports_referential_action(&relation_mode, db::ReferentialAction::Restrict),
);
field.emulates_referential_actions(referential_integrity.is_prisma());
field.emulates_referential_actions(relation_mode.is_prisma());
};

for relation in self.db.walk_relations() {
Expand Down
8 changes: 2 additions & 6 deletions libs/dml/src/render/render_configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,8 @@ fn render_datasource(datasource: &Datasource, out: &mut String) -> fmt::Result {
out.push('\n');
}

if let Some(referential_integrity) = datasource.referential_integrity {
writeln!(
out,
"referentialIntegrity = {}",
string_literal(&referential_integrity.to_string())
)?;
if let Some(relation_mode) = datasource.relation_mode {
writeln!(out, "relationMode = {}", string_literal(&relation_mode.to_string()))?;
}

out.write_str("}\n")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ pub(crate) fn calculate_sql_schema(datamodel: &ValidatedSchema, flavour: &dyn Sq
// Two types of tables: model tables and implicit M2M relation tables (a.k.a. join tables.).
push_model_tables(&mut context);

if context.datamodel.referential_integrity().uses_foreign_keys() {
if context.datamodel.relation_mode().uses_foreign_keys() {
push_inline_relations(&mut context);
}

Expand Down Expand Up @@ -144,7 +144,7 @@ fn push_inline_relations(ctx: &mut Context<'_>) {
let referenced_model = ctx.model_id_to_table_id[&relation.referenced_model().model_id()];
let on_delete_action = relation_field.explicit_on_delete().unwrap_or_else(|| {
relation_field.default_on_delete_action(
ctx.datamodel.configuration.referential_integrity().unwrap_or_default(),
ctx.datamodel.configuration.relation_mode().unwrap_or_default(),
ctx.flavour.datamodel_connector(),
)
});
Expand Down Expand Up @@ -296,7 +296,7 @@ fn push_relation_tables(ctx: &mut Context<'_>) {
});
}

if ctx.datamodel.referential_integrity().uses_foreign_keys() {
if ctx.datamodel.relation_mode().uses_foreign_keys() {
let fkid = ctx.schema.describer_schema.push_foreign_key(
Some(model_a_fk_name),
[table_id, ctx.model_id_to_table_id[&model_a.model_id()]],
Expand Down
8 changes: 2 additions & 6 deletions migration-engine/migration-engine-tests/src/test_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -305,14 +305,10 @@ impl TestApi {

/// Render a valid datasource block, including database URL.
pub fn write_datasource_block(&self, out: &mut dyn std::fmt::Write) {
let no_foreign_keys = self.is_vitess()
&& self
.root
.preview_features()
.contains(PreviewFeature::ReferentialIntegrity);
let no_foreign_keys = self.is_vitess() && self.root.preview_features().contains(PreviewFeature::RelationMode);

let params = if no_foreign_keys {
vec![("referentialIntegrity", r#""prisma""#)]
vec![("relationMode", r#""prisma""#)]
} else {
Vec::new()
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ fn set_default_current_timestamp_on_existing_column_works(api: TestApi) {
}

// exclude: there is a cockroach-specific test. It's unexecutable there.
#[test_connector(preview_features("referentialIntegrity"), exclude(CockroachDb))]
#[test_connector(preview_features("relationMode"), exclude(CockroachDb))]
fn primary_key_migrations_do_not_cause_data_loss(api: TestApi) {
let dm1 = r#"
model Dog {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ fn adding_multiple_optional_fields_to_an_existing_model_works(api: TestApi) {
});
}

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn a_model_can_be_removed(api: TestApi) {
let directory = api.create_migrations_directory();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use migration_engine_tests::test_api::*;

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
fn reordering_and_altering_models_at_the_same_time_works(api: TestApi) {
let dm1 = r#"
model A {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn adding_an_enum_field_must_work_with_native_types_off(api: TestApi) {
api.schema_push_w_datasource(dm).send().assert_no_steps();
}

#[test_connector(capabilities(Enums), preview_features("referentialIntegrity"))]
#[test_connector(capabilities(Enums), preview_features("relationMode"))]
fn an_enum_can_be_turned_into_a_model(api: TestApi) {
api.schema_push_w_datasource(BASIC_ENUM_DM).send().assert_green();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use migration_engine_tests::test_api::*;
use sql_schema_describer::ForeignKeyAction;

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn foreign_keys_of_inline_one_to_one_relations_have_a_unique_constraint(api: TestApi) {
let dm = r#"
model Cat {
Expand Down Expand Up @@ -284,7 +284,7 @@ fn changing_a_foreign_key_constrained_column_from_nullable_to_required_and_back_
api.schema_push_w_datasource(dm).send().assert_green();
}

#[test_connector(exclude(CockroachDb), preview_features("referentialIntegrity"))]
#[test_connector(exclude(CockroachDb), preview_features("relationMode"))]
fn changing_all_referenced_columns_of_foreign_key_works(api: TestApi) {
let dm1 = r#"
model Post {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ fn changing_the_type_of_an_id_field_must_work(api: TestApi) {
});
}

#[test_connector(exclude(Sqlite, CockroachDb), preview_features("referentialIntegrity"))]
#[test_connector(exclude(Sqlite, CockroachDb), preview_features("relationMode"))]
fn models_with_an_autoincrement_field_as_part_of_a_multi_field_id_can_be_created(api: TestApi) {
let dm = r#"
model List {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ fn flipping_autoincrement_on_and_off_works(api: TestApi) {
}
}

#[test_connector(tags(CockroachDb), preview_features("referentialIntegrity"))]
#[test_connector(tags(CockroachDb), preview_features("relationMode"))]
fn models_with_an_autoincrement_field_as_part_of_a_multi_field_id_can_be_created(api: TestApi) {
let dm = r#"
model List {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use migration_engine_tests::test_api::*;

#[test_connector(tags(Vitess), preview_features("referentialIntegrity"))]
#[test_connector(tags(Vitess), preview_features("relationMode"))]
fn changing_the_type_of_an_id_field_must_work(api: TestApi) {
let dm1 = r#"
model A {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use indoc::{formatdoc, indoc};
use migration_engine_tests::test_api::*;
use sql_schema_describer::SQLSortOrder;

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn index_on_compound_relation_fields_must_work(api: TestApi) {
let dm = r#"
model User {
Expand Down Expand Up @@ -84,7 +84,7 @@ fn index_settings_must_be_migrated(api: TestApi) {
});
}

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn unique_directive_on_required_one_to_one_relation_creates_one_index(api: TestApi) {
// We want to test that only one index is created, because of the implicit unique index on
// required 1:1 relations.
Expand Down Expand Up @@ -133,7 +133,7 @@ fn one_to_many_self_relations_do_not_create_a_unique_index(api: TestApi) {
}
}

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn model_with_multiple_indexes_works(api: TestApi) {
let dm = r#"
model User {
Expand Down Expand Up @@ -425,7 +425,7 @@ fn indexes_with_an_automatically_truncated_name_are_idempotent(api: TestApi) {
api.schema_push_w_datasource(dm).send().assert_green().assert_no_steps();
}

#[test_connector(preview_features("referentialIntegrity"))]
#[test_connector(preview_features("relationMode"))]
fn new_index_with_same_name_as_index_from_dropped_table_works(api: TestApi) {
let dm1 = r#"
model Cat {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ mod migration_persistence_tests;
mod mssql;
mod mysql;
mod postgres;
mod referential_integrity;
mod relation_mode;
mod relations;
mod reset_tests;
mod shadow_database_url_configuration;
Expand Down

0 comments on commit 05756aa

Please sign in to comment.