From 48a3310587dda48261a8f093d9b802304791c245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Houl=C3=A9?= Date: Thu, 3 Jun 2021 16:23:35 +0200 Subject: [PATCH] Include shadowDatabaseUrl in datamodel rendering It was previously not included in the lowering of the datamodel to an AST (after introspection). closes https://github.com/prisma/prisma/issues/7337 --- .../dml_to_ast/datasource_serializer.rs | 8 +++++- .../core/tests/renderer/configuration.rs | 27 +++++++++++++++++++ libs/datamodel/core/tests/renderer/mod.rs | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 libs/datamodel/core/tests/renderer/configuration.rs diff --git a/libs/datamodel/core/src/transform/dml_to_ast/datasource_serializer.rs b/libs/datamodel/core/src/transform/dml_to_ast/datasource_serializer.rs index d733d889a4ae..b5fe02a923c1 100644 --- a/libs/datamodel/core/src/transform/dml_to_ast/datasource_serializer.rs +++ b/libs/datamodel/core/src/transform/dml_to_ast/datasource_serializer.rs @@ -5,7 +5,7 @@ pub struct DatasourceSerializer {} impl DatasourceSerializer { pub fn add_sources_to_ast(sources: &[Datasource], ast_datamodel: &mut ast::SchemaAst) { - let mut tops: Vec = Vec::new(); + let mut tops: Vec = Vec::with_capacity(ast_datamodel.tops.len() + sources.len()); for source in sources { tops.push(ast::Top::Source(Self::lower_datasource(&source))) @@ -21,6 +21,12 @@ impl DatasourceSerializer { let mut arguments: Vec = vec![ast::Argument::new_string("provider", &source.active_provider)]; arguments.push(super::lower_string_from_env_var("url", &source.url)); + if let Some((shadow_database_url, _)) = &source.shadow_database_url { + arguments.push(super::lower_string_from_env_var( + "shadowDatabaseUrl", + shadow_database_url, + )) + } ast::SourceConfig { name: ast::Identifier::new(&source.name), diff --git a/libs/datamodel/core/tests/renderer/configuration.rs b/libs/datamodel/core/tests/renderer/configuration.rs new file mode 100644 index 000000000000..fe898057c214 --- /dev/null +++ b/libs/datamodel/core/tests/renderer/configuration.rs @@ -0,0 +1,27 @@ +use datamodel::{parse_schema, render_datamodel_and_config_to_string}; +use indoc::indoc; + +#[test] +fn shadow_database_url_round_trips() { + let schema_str = indoc!( + r#" + datasource myds { + provider = "postgresql" + url = "postgres://" + shadowDatabaseUrl = env("EMPTY_SHADOW_DB URL_0129") + } + + model Cat { + id Int @id + name String + } + "# + ); + + let parsed = parse_schema(schema_str).unwrap(); + let (ref config, ref datamodel) = parsed.subject; + + let rendered = render_datamodel_and_config_to_string(datamodel, config); + + assert_eq!(schema_str, rendered); +} diff --git a/libs/datamodel/core/tests/renderer/mod.rs b/libs/datamodel/core/tests/renderer/mod.rs index 14ac5c530911..ad52974a778d 100644 --- a/libs/datamodel/core/tests/renderer/mod.rs +++ b/libs/datamodel/core/tests/renderer/mod.rs @@ -1,2 +1,3 @@ +pub mod configuration; pub mod literals; pub mod simplification;