Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit b44ccaf

Browse files
better to try catch around anything database
1 parent 072c945 commit b44ccaf

1 file changed

Lines changed: 59 additions & 59 deletions

File tree

src/SqlStreamStore.Server/SqlStreamStoreFactory.cs

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,7 @@ public Task<IStreamStore> Create(CancellationToken cancellationToken = default)
5353
throw new InvalidOperationException($"No provider factory for provider '{provider}' found.");
5454
}
5555

56-
var connectionString = _configuration.ConnectionString;
57-
var schema = _configuration.Schema;
58-
59-
return factory(connectionString, schema, cancellationToken);
56+
return factory(_configuration.ConnectionString, _configuration.Schema, cancellationToken);
6057
}
6158

6259
private static Task<IStreamStore> CreateInMemoryStreamStore(
@@ -71,26 +68,6 @@ private static async Task<IStreamStore> CreateMssqlStreamStore(
7168
CancellationToken cancellationToken)
7269
{
7370
var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString);
74-
using (var connection = new SqlConnection(new SqlConnectionStringBuilder(connectionString)
75-
{
76-
InitialCatalog = "master"
77-
}.ConnectionString))
78-
{
79-
await connection.OpenAsync(cancellationToken).NotOnCapturedContext();
80-
81-
using (var command = new SqlCommand(
82-
$@"
83-
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'{connectionStringBuilder.InitialCatalog}')
84-
BEGIN
85-
CREATE DATABASE [{connectionStringBuilder.InitialCatalog}]
86-
END;
87-
",
88-
connection))
89-
{
90-
await command.ExecuteNonQueryAsync(cancellationToken).NotOnCapturedContext();
91-
}
92-
}
93-
9471
var settings = new MsSqlStreamStoreV3Settings(connectionString);
9572

9673
if (schema != null)
@@ -102,11 +79,32 @@ CREATE DATABASE [{connectionStringBuilder.InitialCatalog}]
10279

10380
try
10481
{
82+
using (var connection = new SqlConnection(new SqlConnectionStringBuilder(connectionString)
83+
{
84+
InitialCatalog = "master"
85+
}.ConnectionString))
86+
{
87+
await connection.OpenAsync(cancellationToken).NotOnCapturedContext();
88+
89+
using (var command = new SqlCommand(
90+
$@"
91+
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'{connectionStringBuilder.InitialCatalog}')
92+
BEGIN
93+
CREATE DATABASE [{connectionStringBuilder.InitialCatalog}]
94+
END;
95+
",
96+
connection))
97+
{
98+
await command.ExecuteNonQueryAsync(cancellationToken).NotOnCapturedContext();
99+
}
100+
}
101+
105102
await streamStore.CreateSchemaIfNotExists(cancellationToken);
106103
}
107104
catch (SqlException ex)
108105
{
109106
SchemaCreationFailed(streamStore.GetSchemaCreationScript, ex);
107+
throw;
110108
}
111109

112110
return streamStore;
@@ -118,53 +116,55 @@ private static async Task<IStreamStore> CreatePostgresStreamStore(
118116
CancellationToken cancellationToken)
119117
{
120118
var connectionStringBuilder = new NpgsqlConnectionStringBuilder(connectionString);
119+
var settings = new PostgresStreamStoreSettings(connectionString);
121120

122-
using (var connection = new NpgsqlConnection(new NpgsqlConnectionStringBuilder(connectionString)
123-
{
124-
Database = null
125-
}.ConnectionString))
121+
if (schema != null)
126122
{
127-
bool exists;
128-
await connection.OpenAsync(cancellationToken).NotOnCapturedContext();
123+
settings.Schema = schema;
124+
}
129125

130-
using (var command = new NpgsqlCommand(
131-
$"SELECT 1 FROM pg_database WHERE datname = '{connectionStringBuilder.Database}'",
132-
connection))
133-
{
134-
exists = await command.ExecuteScalarAsync(cancellationToken).NotOnCapturedContext()
135-
!= null;
136-
}
126+
var streamStore = new PostgresStreamStore(settings);
137127

138-
if (!exists)
128+
try
129+
{
130+
using (var connection = new NpgsqlConnection(new NpgsqlConnectionStringBuilder(connectionString)
139131
{
140-
using (var command = new NpgsqlCommand(
141-
$"CREATE DATABASE {connectionStringBuilder.Database}",
142-
connection))
132+
Database = null
133+
}.ConnectionString))
134+
{
135+
await connection.OpenAsync(cancellationToken).NotOnCapturedContext();
136+
137+
async Task<bool> DatabaseExists()
143138
{
144-
await command.ExecuteNonQueryAsync(cancellationToken).NotOnCapturedContext();
139+
using (var command = new NpgsqlCommand(
140+
$"SELECT 1 FROM pg_database WHERE datname = '{connectionStringBuilder.Database}'",
141+
connection))
142+
{
143+
return await command.ExecuteScalarAsync(cancellationToken).NotOnCapturedContext()
144+
!= null;
145+
}
145146
}
146-
}
147-
148-
var settings = new PostgresStreamStoreSettings(connectionString);
149147

150-
if (schema != null)
151-
{
152-
settings.Schema = schema;
153-
}
154-
155-
var streamStore = new PostgresStreamStore(settings);
148+
if (!await DatabaseExists())
149+
{
150+
using (var command = new NpgsqlCommand(
151+
$"CREATE DATABASE {connectionStringBuilder.Database}",
152+
connection))
153+
{
154+
await command.ExecuteNonQueryAsync(cancellationToken).NotOnCapturedContext();
155+
}
156+
}
156157

157-
try
158-
{
159158
await streamStore.CreateSchemaIfNotExists(cancellationToken);
160159
}
161-
catch (NpgsqlException ex)
162-
{
163-
SchemaCreationFailed(streamStore.GetSchemaCreationScript, ex);
164-
}
165-
166-
return streamStore;
167160
}
161+
catch (NpgsqlException ex)
162+
{
163+
SchemaCreationFailed(streamStore.GetSchemaCreationScript, ex);
164+
throw;
165+
}
166+
167+
return streamStore;
168168
}
169169

170170
private static void SchemaCreationFailed(Func<string> getSchemaCreationScript, Exception ex)

0 commit comments

Comments
 (0)