Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
erikbra committed Feb 11, 2024
1 parent 1922258 commit a6c6bc8
Show file tree
Hide file tree
Showing 16 changed files with 60 additions and 78 deletions.
28 changes: 2 additions & 26 deletions src/grate.core/Configuration/GrateConfigurationBuilder.Factory.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
using Microsoft.Extensions.DependencyInjection;

namespace grate.Configuration;
namespace grate.Configuration;

public partial class GrateConfigurationBuilder
{
/// <summary>
/// Create the grate configuration builder from an existing service collection and grate configuration.
/// </summary>
/// <param name="serviceCollection">Service collection</param>
/// <param name="grateConfiguration">GrateConfiguration</param>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create(IServiceCollection serviceCollection, GrateConfiguration grateConfiguration)
{
return new GrateConfigurationBuilder(grateConfiguration);
}

/// <summary>
/// Create the grate configuration builder from an existing service collection and grate configuration.
/// </summary>
/// <param name="serviceCollection">Service collection</param>
/// <param name="grateConfiguration">GrateConfiguration</param>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create(GrateConfiguration grateConfiguration)
Expand All @@ -29,21 +16,10 @@ public static GrateConfigurationBuilder Create(GrateConfiguration grateConfigura
/// <summary>
/// Create the default grate configuration builder with existing service collection.
/// </summary>
/// <param name="serviceCollection">Service collection</param>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create(IServiceCollection serviceCollection)
{
return new GrateConfigurationBuilder(GrateConfiguration.Default with { NonInteractive = true });
}

/// <summary>
/// Create the default grate configuration builder using a new service collection.
/// </summary>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create()
{
return new GrateConfigurationBuilder(
presetGrateConfiguration: GrateConfiguration.Default with { NonInteractive = true });
return new GrateConfigurationBuilder(GrateConfiguration.Default with { NonInteractive = true });
}

}
Expand Down
24 changes: 12 additions & 12 deletions src/grate.core/DependencyInjection/RegistrationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static class RegistrationExtensions
{
public static IServiceCollection AddGrate(this IServiceCollection serviceCollection, GrateConfiguration presetGrateConfiguration, Action<GrateConfigurationBuilder>? builder = null)
{
var configurationBuilder = GrateConfigurationBuilder.Create(serviceCollection, presetGrateConfiguration);
var configurationBuilder = GrateConfigurationBuilder.Create(presetGrateConfiguration);
builder?.Invoke(configurationBuilder);
var grateConfiguration = configurationBuilder.Build();

Expand All @@ -24,7 +24,7 @@ public static IServiceCollection AddGrate(this IServiceCollection serviceCollect

public static IServiceCollection AddGrate(this IServiceCollection serviceCollection, Action<GrateConfigurationBuilder>? builder = null)
{
var configurationBuilder = GrateConfigurationBuilder.Create(serviceCollection);
var configurationBuilder = GrateConfigurationBuilder.Create();
builder?.Invoke(configurationBuilder);
var grateConfiguration = configurationBuilder.Build();

Expand Down Expand Up @@ -73,16 +73,16 @@ private static IServiceCollection AddGrateService(IServiceCollection collection)
collection.TryAddTransient<IDbMigrator, DbMigrator>();
collection.TryAddTransient<IHashGenerator, HashGenerator>();
collection.TryAddTransient<IGrateMigrator, GrateMigrator>();
collection.TryAddTransient(service =>
{
var database = service.GetRequiredService<IDatabase>();
return new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
});
collection.TryAddTransient(service =>
{
var database = service.GetRequiredService<IDatabase>();
return new StatementSplitter(database.StatementSeparatorRegex);
});
// collection.TryAddTransient(service =>
// {
// var database = service.GetRequiredService<IDatabase>();
// return new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
// });
// collection.TryAddTransient(service =>
// {
// var database = service.GetRequiredService<IDatabase>();
// return new StatementSplitter(database.StatementSeparatorRegex);
// });

return collection;
}
Expand Down
6 changes: 4 additions & 2 deletions src/grate.core/Infrastructure/BatchSplitterReplacer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ internal class BatchSplitterReplacer
private string Replacement { get; }
private readonly Regex _regex;

public BatchSplitterReplacer(string pattern, string replacement)
public BatchSplitterReplacer(ISyntax syntax)
{
Replacement = replacement;
var pattern = syntax.StatementSeparatorRegex;
Replacement = StatementSplitter.BatchTerminatorReplacementString;

_regex = new Regex(pattern, IgnoreCase | Multiline);
}

Expand Down
8 changes: 5 additions & 3 deletions src/grate.core/Infrastructure/StatementSplitter.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
namespace grate.Infrastructure;
using grate.Migration;

namespace grate.Infrastructure;

internal class StatementSplitter
{
public const string BatchTerminatorReplacementString = @" |{[_REMOVE_]}| ";

private readonly BatchSplitterReplacer _replacer;

public StatementSplitter(string separatorRegex)
public StatementSplitter(ISyntax syntax)
{
_replacer = new BatchSplitterReplacer(separatorRegex, BatchTerminatorReplacementString);
_replacer = new BatchSplitterReplacer(syntax);
}

public IEnumerable<string> Split(string statement)
Expand Down
5 changes: 3 additions & 2 deletions src/grate.core/Migration/AnsiSqlDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ protected AnsiSqlDatabase(ILogger logger, ISyntax syntax)
{
Logger = logger;
_syntax = syntax;
StatementSplitter = new StatementSplitter(StatementSeparatorRegex);
StatementSplitter = new StatementSplitter(syntax);
}

public string ServerName => Connection.DataSource;
Expand Down Expand Up @@ -649,7 +649,8 @@ INSERT INTO {ScriptsRunErrorsTable}

private static async Task Close(DbConnection? conn)
{
if (conn?.State is ConnectionState.Open or ConnectionState.Connecting)
//if (conn?.State is ConnectionState.Open or ConnectionState.Connecting)
if (conn is {} && conn.State != ConnectionState.Closed && conn.State != ConnectionState.Connecting)
{
await conn.CloseAsync();
}
Expand Down
6 changes: 5 additions & 1 deletion src/grate.core/Migration/GrateMigrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ private init
}
}

public IGrateMigrator WithConfiguration(GrateConfiguration configuration) => this with { Configuration = configuration };
public IGrateMigrator WithConfiguration(GrateConfiguration configuration)
{
return this with { Configuration = configuration };
}

public IGrateMigrator WithConfiguration(Action<GrateConfigurationBuilder> builder)
{
var b = GrateConfigurationBuilder.Create(Configuration);
Expand Down
2 changes: 0 additions & 2 deletions src/grate.core/Migration/IDatabase.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Data.Common;
using grate.Configuration;
using grate.Infrastructure;

namespace grate.Migration;

Expand All @@ -13,7 +12,6 @@ public interface IDatabase : IAsyncDisposable
bool SupportsDdlTransactions { get; }

bool SplitBatchStatements { get; }
string StatementSeparatorRegex { get; }
public string ScriptsRunTable { get; }
public string ScriptsRunErrorsTable { get; }
public string VersionTable { get; }
Expand Down
4 changes: 1 addition & 3 deletions src/grate.postgresql/Migration/PostgreSqlDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,9 @@ public PostgreSqlDatabase(ILogger<PostgreSqlDatabase> logger)

public override Task RestoreDatabase(string backupPath)
{
throw new System.NotImplementedException("Restoring a database from file is not currently supported for Postgresql.");
throw new NotImplementedException("Restoring a database from file is not currently supported for Postgresql.");
}

public override bool SplitBatchStatements => true;

public override IEnumerable<string> GetStatements(string sql)
=> ReflectionNpgsqlQueryParser.Split(sql);
}
2 changes: 1 addition & 1 deletion unittests/Basic_tests/DependencyInjection/AddGrate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class AddGrate
public void Registers_GrateConfiguration_in_the_ServiceCollection()
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
var config = builder.Build();
serviceCollection.AddGrate(config);
serviceCollection.Should().ContainSingle(s => s.ServiceType == typeof(GrateConfiguration));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class GrateConfigurationBuilder_Factory
public void Creates_default_builder_with_non_interactive()
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
var grateConfiguration = builder.Build();
grateConfiguration.NonInteractive.Should().Be(true);
}
Expand All @@ -24,7 +24,7 @@ public void Creates_default_builder_with_output_folder(string outputFolder)
var outputDir = Directory.CreateDirectory(outputFolder);
WriteSql(Wrap(outputDir, "views"), "01_test_view.sql", "create view v_test as select 1");
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithOutputFolder(outputFolder);
var grateConfiguration = builder.Build();
grateConfiguration.OutputPath.Should().NotBeNull();
Expand All @@ -39,7 +39,7 @@ public void Creates_default_builder_with_sql_folder(string sqlFolder)
var sqlDir = Directory.CreateDirectory(sqlFolder);
WriteSql(Wrap(sqlDir, "views"), "01_test_view.sql", "create view v_test as select 1");
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithSqlFilesDirectory(sqlFolder);
var grateConfiguration = builder.Build();
grateConfiguration.SqlFilesDirectory.Should().NotBeNull();
Expand All @@ -52,7 +52,7 @@ public void Creates_default_builder_with_sql_folder(string sqlFolder)
public void Creates_default_builder_with_schema(string schemaName)
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithSchema(schemaName);
var grateConfiguration = builder.Build();
grateConfiguration.SchemaName.Should().Be(schemaName);
Expand All @@ -64,7 +64,7 @@ public void Creates_default_builder_with_schema(string schemaName)
public void Creates_default_builder_with_connection_string(string connectionString)
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithConnectionString(connectionString);
var grateConfiguration = builder.Build();
grateConfiguration.ConnectionString.Should().Be(connectionString);
Expand All @@ -76,7 +76,7 @@ public void Creates_default_builder_with_connection_string(string connectionStri
public void Creates_default_builder_with_admin_connection_string(string adminConnectionString)
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithAdminConnectionString(adminConnectionString);
var grateConfiguration = builder.Build();
grateConfiguration.AdminConnectionString.Should().Be(adminConnectionString);
Expand All @@ -88,7 +88,7 @@ public void Creates_default_builder_with_admin_connection_string(string adminCon
public void Creates_default_builder_with_version(string version)
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithVersion(version);
var grateConfiguration = builder.Build();
grateConfiguration.Version.Should().Be(version);
Expand All @@ -97,7 +97,7 @@ public void Creates_default_builder_with_version(string version)
public void Creates_default_builder_with_do_not_create_database()
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.DoNotCreateDatabase();
var grateConfiguration = builder.Build();
grateConfiguration.CreateDatabase.Should().Be(false);
Expand All @@ -107,7 +107,7 @@ public void Creates_default_builder_with_do_not_create_database()
public void Creates_default_builder_with_transaction()
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithTransaction();
var grateConfiguration = builder.Build();
grateConfiguration.Transaction.Should().Be(true);
Expand All @@ -121,7 +121,7 @@ public void Creates_default_builder_with_transaction()
public void Creates_default_builder_with_environment_name(string environmentName)
{
var serviceCollection = new ServiceCollection();
var builder = GrateConfigurationBuilder.Create(serviceCollection);
var builder = GrateConfigurationBuilder.Create();
builder.WithEnvironment(environmentName);
var grateConfiguration = builder.Build();
grateConfiguration.Environment.Should().NotBeNull();
Expand Down
8 changes: 4 additions & 4 deletions unittests/Oracle/Basic_tests/BatchSplitterReplacer_.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ public class should_replace_on
private ITestOutputHelper _testOutput;
private BatchSplitterReplacer Replacer;

public should_replace_on(ITestOutputHelper testOutput, IDatabase database)
public should_replace_on(ITestOutputHelper testOutput, ISyntax syntax)
{
_testOutput = testOutput;
Replacer = new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
Replacer = new BatchSplitterReplacer(syntax);
}

[Fact]
Expand Down Expand Up @@ -287,10 +287,10 @@ public class should_not_replace_on
private ITestOutputHelper _testOutput;
private BatchSplitterReplacer Replacer;

public should_not_replace_on(ITestOutputHelper testOutput, IDatabase database)
public should_not_replace_on(ITestOutputHelper testOutput, ISyntax syntax)
{
_testOutput = testOutput;
Replacer = new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
Replacer = new BatchSplitterReplacer(syntax);
}

[Fact]
Expand Down
4 changes: 2 additions & 2 deletions unittests/Oracle/Basic_tests/StatementSplitter_.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ public class StatementSplitter_
{
private readonly StatementSplitter _splitter;

public StatementSplitter_(IDatabase database)
public StatementSplitter_(ISyntax syntax)
{
_splitter = new StatementSplitter(database.StatementSeparatorRegex);
_splitter = new StatementSplitter(syntax);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using FluentAssertions;
using grate.Infrastructure;
using grate.Migration;
using grate.PostgreSql.Infrastructure;

namespace Basic_tests.Infrastructure.PostgreSQL.Statement_Splitting;

Expand All @@ -10,9 +11,9 @@ public class StatementSplitter_
{
private readonly StatementSplitter _statementSplitter;

public StatementSplitter_(IDatabase database)
public StatementSplitter_()
{
_statementSplitter = new StatementSplitter(database.StatementSeparatorRegex);
_statementSplitter = new StatementSplitter(new PostgreSqlSyntax());
}

[Fact]
Expand Down
8 changes: 4 additions & 4 deletions unittests/SqlServer/Basic_tests/BatchSplitterReplacer_.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ public class should_replace_on
private ITestOutputHelper _testOutput;
private BatchSplitterReplacer Replacer;

public should_replace_on(ITestOutputHelper testOutput, IDatabase database)
public should_replace_on(ITestOutputHelper testOutput, ISyntax syntax)
{
_testOutput = testOutput;
Replacer = new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
Replacer = new BatchSplitterReplacer(syntax);
}

[Fact]
Expand Down Expand Up @@ -281,10 +281,10 @@ public class should_not_replace_on
private readonly ITestOutputHelper _testOutput;
private readonly BatchSplitterReplacer _replacer;

public should_not_replace_on(ITestOutputHelper testOutput, IDatabase database)
public should_not_replace_on(ITestOutputHelper testOutput, ISyntax syntax)
{
_testOutput = testOutput;
_replacer = new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
_replacer = new BatchSplitterReplacer(syntax);
}

[Fact]
Expand Down
4 changes: 2 additions & 2 deletions unittests/SqlServer/Basic_tests/StatementSplitter_.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ public class StatementSplitter_
{
private readonly StatementSplitter _splitter;

public StatementSplitter_(IDatabase database)
public StatementSplitter_(ISyntax syntax)
{
_splitter = new StatementSplitter(database.StatementSeparatorRegex);
_splitter = new StatementSplitter(syntax);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public void Should_inject_all_necessary_services_to_container()
ValidateService(serviceCollection, typeof(IGrateMigrator), ServiceLifetime.Transient, typeof(GrateMigrator));
ValidateService(serviceCollection, typeof(IDbMigrator), ServiceLifetime.Transient, typeof(DbMigrator));
ValidateService(serviceCollection, typeof(IHashGenerator), ServiceLifetime.Transient, typeof(HashGenerator));
ValidateService(serviceCollection, typeof(BatchSplitterReplacer), ServiceLifetime.Transient);
ValidateService(serviceCollection, typeof(StatementSplitter), ServiceLifetime.Transient);
//ValidateService(serviceCollection, typeof(BatchSplitterReplacer), ServiceLifetime.Transient);
//ValidateService(serviceCollection, typeof(StatementSplitter), ServiceLifetime.Transient);
ValidateService(serviceCollection, typeof(IDatabase), ServiceLifetime.Transient, Context.DatabaseType);
}

Expand Down

0 comments on commit a6c6bc8

Please sign in to comment.