@@ -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