From 7cc581ff2cd5544b9492ca4cadad13a1e6a7f555 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 24 Mar 2026 13:03:30 +1100 Subject: [PATCH] Gracefully handle schema missing InitialCatalog --- src/Tests/Tests.SchemaIncludesAndFilter.verified.md | 4 ++-- src/Tests/Tests.cs | 9 +++++++++ .../SchemaValidation/SqlScriptBuilder.cs | 8 +++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Tests/Tests.SchemaIncludesAndFilter.verified.md b/src/Tests/Tests.SchemaIncludesAndFilter.verified.md index 9ab1c318..798c8e86 100644 --- a/src/Tests/Tests.SchemaIncludesAndFilter.verified.md +++ b/src/Tests/Tests.SchemaIncludesAndFilter.verified.md @@ -1,4 +1,4 @@ -## Tables +## Tables ### MyTable @@ -30,4 +30,4 @@ AS SELECT Value FROM MyTable WHERE (Value > 10); -``` \ No newline at end of file +``` diff --git a/src/Tests/Tests.cs b/src/Tests/Tests.cs index 64e61c27..440c9c3d 100644 --- a/src/Tests/Tests.cs +++ b/src/Tests/Tests.cs @@ -833,6 +833,15 @@ await Verify(connection) .SchemaIncludes(DbObjects.Tables); } + [Test] + public async Task SchemaMissingInitialCatalog() + { + var connection = new SqlConnection("Server=localhost"); + var exception = Assert.ThrowsAsync( + async () => await Verify(connection)); + Assert.That(exception!.Message, Does.Contain("Initial Catalog")); + } + [Test] public async Task SchemaIncludesAndFilter() { diff --git a/src/Verify.SqlServer/SchemaValidation/SqlScriptBuilder.cs b/src/Verify.SqlServer/SchemaValidation/SqlScriptBuilder.cs index babe58cf..dcb9ef23 100644 --- a/src/Verify.SqlServer/SchemaValidation/SqlScriptBuilder.cs +++ b/src/Verify.SqlServer/SchemaValidation/SqlScriptBuilder.cs @@ -48,13 +48,19 @@ public string BuildContent(SqlConnection connection) string BuildContent(Server server, SqlConnectionStringBuilder builder) { + var initialCatalog = builder.InitialCatalog; + if (string.IsNullOrWhiteSpace(initialCatalog)) + { + throw new("The connection string must specify an Initial Catalog (database name) for schema verification."); + } + server.SetDefaultInitFields(typeof(Table), "Name", "IsSystemObject"); server.SetDefaultInitFields(typeof(View), "Name", "IsSystemObject"); server.SetDefaultInitFields(typeof(StoredProcedure), "Name", "IsSystemObject"); server.SetDefaultInitFields(typeof(UserDefinedFunction), "Name", "IsSystemObject"); server.SetDefaultInitFields(typeof(Trigger), "Name", "IsSystemObject"); server.SetDefaultInitFields(typeof(Synonym), "Name"); - var database = server.Databases[builder.InitialCatalog]; + var database = server.Databases[initialCatalog]; database.Tables.Refresh(); return GetScriptingObjects(database);